8468e6922e3e8fbe29241d26d3a33aba36964f92
[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 package SL::DBUpgrade2::erzeugnisnummern;
5
6 use strict;
7 use utf8;
8
9 use parent qw(SL::DBUpgrade2::Base);
10
11 use SL::DBUtils;
12
13 sub run {
14   my ($self) = @_;
15
16   if (defined $::form->{upgrade_action} && $::form->{upgrade_action} eq 'filter_parts') {
17     return $self->filter_parts($self);
18   }
19
20   if ( $::form->{'continued'} ) {
21     my $update_query;
22     foreach my $i (1 .. $::form->{rowcount}) {
23       $update_query = qq|UPDATE parts SET partnumber = '| . $::form->{"partnumber_$i"} . qq|' WHERE id = | . $::form->{"partid_$i"};
24       $self->db_query($update_query);
25     }
26   }
27
28   my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id, obsolete
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   $::form->{PARTS} = [ selectall_hashref_query($::form, $self->dbh, $query) ];
37
38   if ( scalar @{ $::form->{PARTS} } > 0 ) {
39     &print_error_message;
40     return 2;
41   }
42
43   $query = qq|ALTER TABLE parts ADD UNIQUE (partnumber)|;
44   $self->db_query($query);
45
46   $query = qq|ALTER TABLE defaults ADD assemblynumber TEXT|;
47   $self->db_query($query);
48   return 1;
49 } # end run
50
51 sub print_error_message {
52   print $::form->parse_html_template("dbupgrade/erzeugnisnummern");
53 }
54
55 sub filter_parts {
56   my $self = shift;
57
58   my $where = 'TRUE';
59   my @values;
60
61   if ( $::form->{filter_partnumber} ) {
62     $where .= ' AND partnumber ILIKE ?';
63     push(@values, like( $::form->{filter_partnumber} ));
64   }
65
66   if ($::form->{filter_description}) {
67     $where .= ' AND description ILIKE ?';
68     push(@values, like($::form->{filter_description}));
69   }
70
71   if ($::form->{filter_notes}) {
72     $where .= ' AND notes ILIKE ?';
73     push(@values, like($::form->{filter_notes}));
74   }
75
76   if ($::form->{filter_ean}) {
77     $where .= ' AND ean ILIKE ?';
78     push(@values, like($::form->{filter_ean}));
79   }
80
81   if ($::form->{filter_type} eq 'assembly') {
82     $where .= " AND part_type = 'assembly'";
83   }
84
85   if ($::form->{filter_type} eq 'service') {
86     $where .= " AND part_type = 'service'";
87   }
88
89   if ($::form->{filter_type} eq 'part') {
90     $where .= " AND part_type = 'part'";
91   }
92
93   if ($::form->{filter_obsolete} eq 'obsolete') {
94     $where .= ' AND obsolete';
95   }
96
97   if ($::form->{filter_obsolete} eq 'valid') {
98     $where .= ' AND NOT obsolete';
99   }
100
101   my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id, obsolete
102                  FROM parts
103                  WHERE $where
104                  ORDER BY partnumber|;
105
106   $::form->{ALL_PARTS} = [ selectall_hashref_query($::form, $self->dbh, $query, @values) ];
107
108   print $::form->parse_html_template("dbupgrade/show_partlist");
109   return 2;
110 }
111
112 1;