Merge branch 'erzeugnisnummern'
[kivitendo-erp.git] / sql / Pg-upgrade2 / erzeugnisnummern.pl
1 # @tag: erzeugnisnummern
2 # @description: Erzeugnisnummern und Artikelnummern sollen eindeutig sein.
3 # @depends: release_3_0_0
4 # @charset: utf-8
5
6 use utf8;
7 use strict;
8 use SL::Locale;
9
10 die("This script cannot be run from the command line.") unless ($main::form);
11
12 sub mydberror {
13   my ($msg) = @_;
14   die($dbup_locale->text("Database update error:") . "<br>$msg<br>" . $DBI::errstr);
15 }
16
17 sub do_query {
18   my ($query, $may_fail) = @_;
19
20   if (!$dbh->do($query)) {
21     mydberror($query) unless ($may_fail);
22     $dbh->rollback();
23     $dbh->begin_work();
24   }
25 }
26
27 sub do_update {
28     my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id
29                    FROM parts pa
30                    WHERE (SELECT COUNT(*)
31                           FROM parts p
32                           WHERE p.partnumber=pa.partnumber)
33                           > 1
34                    ORDER BY partnumber;|;
35
36   my $sth = $dbh->prepare($query);
37   $sth->execute || $main::form->dberror($query);
38
39   $main::form->{PARTS} = [];
40   while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
41     push @{ $main::form->{PARTS} }, $ref;
42   }
43
44   if ( scalar @{ $main::form->{PARTS} } > 0 ) {
45     &print_error_message;
46     return 0;
47   }
48
49   $query = qq|ALTER TABLE parts ADD UNIQUE (partnumber)|;
50   do_query($query);
51
52   $query = qq|ALTER TABLE defaults ADD assemblynumber TEXT|;
53   do_query($query);
54   return 1;
55 }; # end do_update
56
57
58 sub print_error_message {
59   print $main::form->parse_html_template("dbupgrade/erzeugnisnummern");
60 }
61
62 return do_update();