Merge branch 'master' of github.com:kivitendo/kivitendo-erp
[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 ($::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       print FH $i;
26     }
27     $self->dbh->commit();
28   }
29
30   my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id, obsolete
31                    FROM parts pa
32                    WHERE (SELECT COUNT(*)
33                           FROM parts p
34                           WHERE p.partnumber=pa.partnumber)
35                           > 1
36                    ORDER BY partnumber;|;
37
38   $::form->{PARTS} = [ selectall_hashref_query($::form, $self->dbh, $query) ];
39
40   if ( scalar @{ $::form->{PARTS} } > 0 ) {
41     &print_error_message;
42     return 2;
43   }
44
45   $query = qq|ALTER TABLE parts ADD UNIQUE (partnumber)|;
46   $self->db_query($query);
47
48   $query = qq|ALTER TABLE defaults ADD assemblynumber TEXT|;
49   $self->db_query($query);
50   return 1;
51 } # end run
52
53 sub print_error_message {
54   print $::form->parse_html_template("dbupgrade/erzeugnisnummern");
55 }
56
57 sub filter_parts {
58   my $self = shift;
59
60   my $where = 'TRUE';
61   my @values;
62
63   if ( $::form->{filter_partnumber} ) {
64     $where .= ' AND partnumber ILIKE ?';
65     push(@values, $::form->like( $::form->{filter_partnumber} ));
66   }
67
68   if ($::form->{filter_description}) {
69     $where .= ' AND description ILIKE ?';
70     push(@values, $::form->like($::form->{filter_description}));
71   }
72
73   if ($::form->{filter_notes}) {
74     $where .= ' AND notes ILIKE ?';
75     push(@values, $::form->like($::form->{filter_notes}));
76   }
77
78   if ($::form->{filter_ean}) {
79     $where .= ' AND ean ILIKE ?';
80     push(@values, $::form->like($::form->{filter_ean}));
81   }
82
83   if ($::form->{filter_type} eq 'assembly') {
84     $where .= ' AND assembly';
85   }
86
87   if ($::form->{filter_type} eq 'service') {
88     $where .= ' AND inventory_accno_id IS NULL AND NOT assembly';
89   }
90
91   if ($::form->{filter_type} eq 'part') {
92     $where .= ' AND inventory_accno_id IS NOT NULL';
93     $where .= ' AND NOT assembly';
94   }
95
96   if ($::form->{filter_obsolete} eq 'obsolete') {
97     $where .= ' AND obsolete';
98   }
99
100   if ($::form->{filter_obsolete} eq 'valid') {
101     $where .= ' AND NOT obsolete';
102   }
103
104   my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id, obsolete
105                  FROM parts
106                  WHERE $where
107                  ORDER BY partnumber|;
108
109   $::form->{ALL_PARTS} = [ selectall_hashref_query($::form, $self->dbh, $query, @values) ];
110
111   print $::form->parse_html_template("dbupgrade/show_partlist");
112   return 2;
113 }
114
115 1;