6908a931fc85bdc94d978175d9d0515d445870c5
[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   if ( $main::form->{'continued'} ) {
29     my $update_query;
30     foreach my $i (1 .. $main::form->{rowcount}) {
31       $update_query = qq|UPDATE parts SET partnumber = '| . $main::form->{"partnumber_$i"} . qq|' WHERE id = | . $main::form->{"partid_$i"};
32       do_query($update_query);
33       print FH $i;
34     }
35     $dbh->commit();
36   }
37
38   my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id
39                    FROM parts pa
40                    WHERE (SELECT COUNT(*)
41                           FROM parts p
42                           WHERE p.partnumber=pa.partnumber)
43                           > 1
44                    ORDER BY partnumber;|;
45
46   my $sth = $dbh->prepare($query);
47   $sth->execute || $main::form->dberror($query);
48
49   $main::form->{PARTS} = [];
50   while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
51     map {$ref->{$_} = $::locale->{iconv_utf8}->convert($ref->{$_})} keys %$ref;
52     push @{ $main::form->{PARTS} }, $ref;
53   }
54
55   if ( scalar @{ $main::form->{PARTS} } > 0 ) {
56     &print_error_message;
57     return 2;
58   }
59
60   $query = qq|ALTER TABLE parts ADD UNIQUE (partnumber)|;
61   do_query($query);
62
63   $query = qq|ALTER TABLE defaults ADD assemblynumber TEXT|;
64   do_query($query);
65   return 1;
66 }; # end do_update
67
68
69 sub print_error_message {
70   print $main::form->parse_html_template("dbupgrade/erzeugnisnummern");
71 }
72
73 return do_update();