Merge branch 'master' of git@lx-office.linet-services.de:lx-office-erp
[kivitendo-erp.git] / SL / WH.pm
index 5b0054d..669b295 100644 (file)
--- a/SL/WH.pm
+++ b/SL/WH.pm
@@ -99,7 +99,8 @@ sub transfer {
     } else {
       push @values, $transfer_types{$directions[$direction]}->{$transfer->{transfer_type}};
     }
-
+    
+    $transfer->{comment} = defined($transfer->{comment}) ? $transfer->{comment} : '';
     push @values, "$transfer->{comment}";
 
     my $qty = $transfer->{qty};
@@ -170,11 +171,11 @@ sub transfer_assembly {
   my $sthTransferPartSQL   = prepare_query($form, $dbh, $transferPartSQL);
 
   # der return-string für die fehlermeldung inkl. welche waren zum fertigen noch fehlen
-  my $kannNichtFertigen ="Für dieses Erzeugnis sind keine Einzelteile definiert.
-                          Dementsprechend kann auch nichts hergestellt werden";
 
+  my $kannNichtFertigen ="";  # Falls leer dann erfolgreich
+  my $schleife_durchlaufen=0; # Falls die Schleife nicht ausgeführt wird -> Keine Einzelteile definiert. Bessere Idee? jan
   while (my $hash_ref = $sth_part_qty_assembly->fetchrow_hashref()) { #Schleife für select parts_id,(...) from assembly
-    $kannNichtFertigen ="";  # Wieder auf erfolgreich setzen LEER == keine Fehlermeldung
+    $schleife_durchlaufen=1;  # Erzeugnis definiert
     my $partsQTY = $hash_ref->{qty} * $params{qty}; # benötigte teile * anzahl erzeugnisse
     my $currentPart_ID = $hash_ref->{parts_id};
 
@@ -209,7 +210,7 @@ sub transfer_assembly {
     while (my $temphash_ref = $tempsth->fetchrow_hashref()) {
       my $temppart_bin_id       = $temphash_ref->{bin_id}; # kann man hier den quelllagerplatz beim verbauen angeben?
       my $temppart_chargenumber = $temphash_ref->{chargenumber};
-      my $temppart_bestbefore   = $temphash_ref->{bestbefore};
+      my $temppart_bestbefore   = conv_date($temphash_ref->{bestbefore});
       my $temppart_qty          = $temphash_ref->{sum};
 
       if ($tmpPartsQTY > $temppart_qty) {  # wir haben noch mehr waren zum wegbuchen. 
@@ -236,6 +237,14 @@ sub transfer_assembly {
       }
     }  # ende while SELECT SUM(qty), bin_id, chargenumber, bestbefore   FROM inventory  WHERE warehouse_id
   } #ende while select parts_id,qty from assembly where id = ?
+
+  if ($schleife_durchlaufen==0){  # falls die schleife nicht durchlaufen wurde, wurden auch
+                                  # keine einzelteile definiert
+      $kannNichtFertigen ="Für dieses Erzeugnis sind keine Einzelteile definiert.
+                           Dementsprechend kann auch nichts hergestellt werden";
+ }
+  # gibt die Fehlermeldung zurück. A.) Keine Teile definiert
+  #                                B.) Artikel und Anzahl der fehlenden Teile/Dienstleistungen
   if ($kannNichtFertigen) {
     return $kannNichtFertigen;
   }
@@ -247,7 +256,7 @@ sub transfer_assembly {
                                (SELECT id FROM transfer_type WHERE direction = 'in' AND description = 'stock'))|;
   my $sthTransferAssemblySQL   = prepare_query($form, $dbh, $transferAssemblySQL);
   do_statement($form, $sthTransferAssemblySQL, $transferAssemblySQL, $params{assembly_id}, $params{dst_warehouse_id}, 
-               $params{dst_bin_id}, $params{chargenumber}, $params{bestbefore}, $params{comment}, $params{login}, $params{qty});
+               $params{dst_bin_id}, $params{chargenumber}, conv_date($params{bestbefore}), $params{comment}, $params{login}, $params{qty});
   $dbh->commit();
 
   $main::lxdebug->leave_sub();
@@ -271,12 +280,12 @@ sub get_warehouse_journal {
   # filters
   my (@filter_ary, @filter_vars, $joins, %select_tokens, %select);
 
-  if ($filter{warehouse_id} ne '') {
+  if ($filter{warehouse_id}) {
     push @filter_ary, "w1.id = ? OR w2.id = ?";
     push @filter_vars, $filter{warehouse_id}, $filter{warehouse_id};
   }
 
-  if ($filter{bin_id} ne '') {
+  if ($filter{bin_id}) {
     push @filter_ary, "b1.id = ? OR b2.id = ?";
     push @filter_vars, $filter{bin_id}, $filter{bin_id};
   }
@@ -388,6 +397,7 @@ sub get_warehouse_journal {
   my $group_clause = join ", ", map { +/^l_/; "r_$'" }
         ( grep( { !/qty$/ and /^l_/ and $form->{$_} eq 'Y' } keys %$form), qw(l_parts_id l_partunit l_itime) );
 
+  $where_clause = defined($where_clause) ? $where_clause : '';
   my $query =
   qq|SELECT DISTINCT $select{trans}
     FROM inventory i1