Merge branch 'b-3.6.1' of ../kivitendo-erp_20220811
[kivitendo-erp.git] / sql / Pg-upgrade2 / erzeugnisnummern.pl
index 11ba2ef..8468e69 100644 (file)
@@ -1,31 +1,31 @@
 # @tag: erzeugnisnummern
 # @description: Erzeugnisnummern und Artikelnummern sollen eindeutig sein.
 # @depends: release_3_0_0
-# @charset: utf-8
+package SL::DBUpgrade2::erzeugnisnummern;
 
-use utf8;
 use strict;
-use SL::Locale;
+use utf8;
 
-die("This script cannot be run from the command line.") unless ($main::form);
+use parent qw(SL::DBUpgrade2::Base);
 
-sub mydberror {
-  my ($msg) = @_;
-  die($dbup_locale->text("Database update error:") . "<br>$msg<br>" . $DBI::errstr);
-}
+use SL::DBUtils;
 
-sub do_query {
-  my ($query, $may_fail) = @_;
+sub run {
+  my ($self) = @_;
 
-  if (!$dbh->do($query)) {
-    mydberror($query) unless ($may_fail);
-    $dbh->rollback();
-    $dbh->begin_work();
+  if (defined $::form->{upgrade_action} && $::form->{upgrade_action} eq 'filter_parts') {
+    return $self->filter_parts($self);
   }
-}
 
-sub do_update {
-    my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id
+  if ( $::form->{'continued'} ) {
+    my $update_query;
+    foreach my $i (1 .. $::form->{rowcount}) {
+      $update_query = qq|UPDATE parts SET partnumber = '| . $::form->{"partnumber_$i"} . qq|' WHERE id = | . $::form->{"partid_$i"};
+      $self->db_query($update_query);
+    }
+  }
+
+  my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id, obsolete
                    FROM parts pa
                    WHERE (SELECT COUNT(*)
                           FROM parts p
@@ -33,30 +33,80 @@ sub do_update {
                           > 1
                    ORDER BY partnumber;|;
 
-  my $sth = $dbh->prepare($query);
-  $sth->execute || $main::form->dberror($query);
-
-  $main::form->{PARTS} = [];
-  while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
-    push @{ $main::form->{PARTS} }, $ref;
-  }
+  $::form->{PARTS} = [ selectall_hashref_query($::form, $self->dbh, $query) ];
 
-  if ( scalar @{ $main::form->{PARTS} } > 0 ) {
+  if ( scalar @{ $::form->{PARTS} } > 0 ) {
     &print_error_message;
-    return 0;
+    return 2;
   }
 
   $query = qq|ALTER TABLE parts ADD UNIQUE (partnumber)|;
-  do_query($query);
+  $self->db_query($query);
 
   $query = qq|ALTER TABLE defaults ADD assemblynumber TEXT|;
-  do_query($query);
+  $self->db_query($query);
   return 1;
-}; # end do_update
-
+} # end run
 
 sub print_error_message {
-  print $main::form->parse_html_template("dbupgrade/erzeugnisnummern");
+  print $::form->parse_html_template("dbupgrade/erzeugnisnummern");
+}
+
+sub filter_parts {
+  my $self = shift;
+
+  my $where = 'TRUE';
+  my @values;
+
+  if ( $::form->{filter_partnumber} ) {
+    $where .= ' AND partnumber ILIKE ?';
+    push(@values, like( $::form->{filter_partnumber} ));
+  }
+
+  if ($::form->{filter_description}) {
+    $where .= ' AND description ILIKE ?';
+    push(@values, like($::form->{filter_description}));
+  }
+
+  if ($::form->{filter_notes}) {
+    $where .= ' AND notes ILIKE ?';
+    push(@values, like($::form->{filter_notes}));
+  }
+
+  if ($::form->{filter_ean}) {
+    $where .= ' AND ean ILIKE ?';
+    push(@values, like($::form->{filter_ean}));
+  }
+
+  if ($::form->{filter_type} eq 'assembly') {
+    $where .= " AND part_type = 'assembly'";
+  }
+
+  if ($::form->{filter_type} eq 'service') {
+    $where .= " AND part_type = 'service'";
+  }
+
+  if ($::form->{filter_type} eq 'part') {
+    $where .= " AND part_type = 'part'";
+  }
+
+  if ($::form->{filter_obsolete} eq 'obsolete') {
+    $where .= ' AND obsolete';
+  }
+
+  if ($::form->{filter_obsolete} eq 'valid') {
+    $where .= ' AND NOT obsolete';
+  }
+
+  my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id, obsolete
+                 FROM parts
+                 WHERE $where
+                 ORDER BY partnumber|;
+
+  $::form->{ALL_PARTS} = [ selectall_hashref_query($::form, $self->dbh, $query, @values) ];
+
+  print $::form->parse_html_template("dbupgrade/show_partlist");
+  return 2;
 }
 
-return do_update();
+1;