Sortierung im Buchungsjournal verbessert bei mehreren Konten fuer einen Vorgang am...
[kivitendo-erp.git] / sql / Pg-upgrade / Pg-upgrade-2.2.0.25-2.2.0.26.pl
index 1d7f9a1..ef057d9 100644 (file)
@@ -1,15 +1,13 @@
 #!/usr/bin/perl
 
+# Datenbankupgrade: Einfuehrung von Einheiten
+
 die("This script cannot be run from the command line.") unless ($main::form);
 
 use SL::AM;
 
-%dbup_myconfig = ();
-map({ $dbup_myconfig{$_} = $main::form->{$_}; }
-    qw(dbname dbuser dbpasswd dbhost dbport dbconnect));
-
 sub mydberror {
-  my ($dbup_locale, $msg) = @_;
+  my ($msg) = @_;
   die($dbup_locale->text("Database update error:") .
       "<br>$msg<br>" . $DBI::errstr);
 }
@@ -23,8 +21,6 @@ sub myshowerror {
 }
 
 sub update_units_add_unit {
-  my ($dbup_locale, $dbh) = @_;
-
   my $form = $main::form;
 
   return 0 unless ($form->{"new_name"});
@@ -54,7 +50,7 @@ sub update_units_add_unit {
     "VALUES (?, ?, ?, ?)";
   $dbh->do($query, undef, $form->{"new_name"}, $base_unit, $factor,
            $form->{"unit_type"}) ||
-    mydberror($dbup_locale, $query .
+    mydberror($query .
               " ($form->{new_name}, $base_unit, $factor, $form->{unit_type})");
   $dbh->commit();
   $dbh->begin_work();
@@ -65,8 +61,6 @@ sub update_units_add_unit {
 }
 
 sub update_units_assign_units {
-  my ($dbup_locale, $dbh) = @_;
-
   my ($query, $sth, @values);
 
   my $form = $main::form;
@@ -79,7 +73,7 @@ sub update_units_assign_units {
       next unless ($form->{"new_unit_$i"} && $form->{"old_unit_$i"});
       @values = ($form->{"new_unit_$i"}, lc($form->{"old_unit_$i"}));
       $sth->execute(@values) ||
-        mydberror($dbup_locale, $query . " (" . join(", ", @values) . ")");
+        mydberror($query . " (" . join(", ", @values) . ")");
     }
   }
 
@@ -89,16 +83,19 @@ sub update_units_assign_units {
 }
 
 sub update_units_assign_known {
-  my ($dbup_locale, $dbh) = @_;
-
   my $form = $main::form;
 
   my %unit_name_mapping = (
     "st" => "Stck",
     "st." => "Stck",
+    "stk" => "Stck",
     "pc" => "Stck",
     "pcs" => "Stck",
     "ea" => "Stck",
+
+    "h" => "Std",
+    "stunde" => "Std",
+    "tage" => "Tag",
     );
 
   my $i = 1;
@@ -109,12 +106,10 @@ sub update_units_assign_known {
   }
   $form->{"rowcount"} = scalar(keys(%unit_name_mapping));
 
-  update_units_assign_units($dbup_locale, $dbh);
+  update_units_assign_units();
 }
 
 sub update_units_steps_1_2 {
-  my ($dbup_locale, $dbh) = @_;
-
   my (%unknown_dimension_units, %unknown_service_units);
 
   my $form = $main::form;
@@ -123,7 +118,7 @@ sub update_units_steps_1_2 {
     my ($query, $sth, $ref);
 
     if ($table eq "parts") {
-      $query = "SELECT unit, inventory_accno_id FROM parts " .
+      $query = "SELECT unit, inventory_accno_id, assembly FROM parts " .
         "WHERE NOT ((unit = '') OR unit ISNULL OR " .
         "           unit IN (SELECT name FROM units))";
 
@@ -135,10 +130,10 @@ sub update_units_steps_1_2 {
         "           t.unit IN (SELECT name FROM units))";
     }
     $sth = $dbh->prepare($query);
-    $sth->execute() || mydberror($dbup_locale, $query);
+    $sth->execute() || mydberror($query);
 
     while ($ref = $sth->fetchrow_hashref()) {
-      if ($ref->{"inventory_accno_id"}) {
+      if ($ref->{"inventory_accno_id"} || $ref->{"assembly"}) {
         $unknown_dimension_units{$ref->{"unit"}} = 1;
 
       } else {
@@ -191,8 +186,6 @@ sub update_units_steps_1_2 {
 }
 
 sub update_units_step_3 {
-  my ($dbup_locale, $dbh) = @_;
-
   my $form = $main::form;
 
   my $query = "SELECT ";
@@ -223,8 +216,6 @@ sub update_units_step_3 {
 }
 
 sub update_units_set_default {
-  my ($dbup_locale, $dbh) = @_;
-
   my $form = $main::form;
 
   foreach my $table (qw(parts invoice orderitems rmaitems)) {
@@ -236,62 +227,62 @@ sub update_units_set_default {
     if ($table eq "parts") {
       $query = "UPDATE $table SET unit = " .
         $dbh->quote($form->{"default_dimension_unit"}) . " " .
-        "WHERE ((unit ISNULL) OR (unit = '')) AND (inventory_accno_id > 0)";
+        "WHERE ((unit ISNULL) OR (unit = '')) AND " .
+        "(assembly OR (inventory_accno_id > 0))";
     } else {
       $query = "UPDATE $table SET unit = " .
         $dbh->quote($form->{"default_dimension_unit"}) . " " .
         "WHERE ((unit ISNULL) OR (unit = '')) AND " .
-        "parts_id IN (SELECT id FROM parts WHERE (inventory_accno_id > 0))";
+        "parts_id IN (SELECT id FROM parts WHERE " .
+        "(assembly OR (inventory_accno_id > 0)))";
     }
 
-    $dbh->do($query) || mydberror($dbup_locale, $query);
+    $dbh->do($query) || mydberror($query);
 
     if ($table eq "parts") {
       $query = "UPDATE $table SET unit = " .
         $dbh->quote($form->{"default_service_unit"}) . " " .
         "WHERE ((unit ISNULL) OR (unit = '')) AND " .
-        "(inventory_accno_id ISNULL) OR (inventory_accno_id = 0)";
+        "((inventory_accno_id ISNULL) OR (inventory_accno_id = 0)) AND " .
+        "NOT assembly";
     } else {
       $query = "UPDATE $table SET unit = " .
         $dbh->quote($form->{"default_service_unit"}) . " " .
         "WHERE ((unit ISNULL) OR (unit = '')) AND " .
         "parts_id IN (SELECT id FROM parts " .
-        "WHERE (inventory_accno_id ISNULL) OR (inventory_accno_id = 0))";
+        "WHERE ((inventory_accno_id ISNULL) OR (inventory_accno_id = 0)) " .
+        "AND NOT assembly)";
     }
 
-    $dbh->do($query) || mydberror($dbup_locale, $query);
+    $dbh->do($query) || mydberror($query);
   }
 }
 
 sub update_units {
-  my (@dbh) = @_;
-
   my $form = $main::form;
 
   my $res;
 
-  my $dbup_locale = Locale->new($main::language, "dbupgrade");
-
   print($form->parse_html_template("dbupgrade/units_header"));
 
   if ($form->{"action2"} eq "add_unit") {
-    $res = update_units_add_unit($dbup_locale, $dbh);
+    $res = update_units_add_unit();
     return $res if ($res);
 
   } elsif ($form->{"action2"} eq "assign_units") {
-    update_units_assign_units($dbup_locale, $dbh);
+    update_units_assign_units();
 
   } elsif ($form->{"action2"} eq "set_default") {
-    update_units_set_default($dbup_locale, $dbh);
+    update_units_set_default();
 
   }
 
-  update_units_assign_known($dbup_locale, $dbh);
+  update_units_assign_known();
 
-  $res = update_units_steps_1_2($dbup_locale, $dbh);
+  $res = update_units_steps_1_2();
   return $res if ($res);
 
-  return update_units_step_3($dbup_locale, $dbh);
+  return update_units_step_3();
 }
 
-update_units($dbh);
+update_units();