do.pl sort Funktion verbessert
[kivitendo-erp.git] / SL / WH.pm
index 2faa1b7..f363ae5 100644 (file)
--- a/SL/WH.pm
+++ b/SL/WH.pm
@@ -210,10 +210,39 @@ sub transfer_assembly {
 
     my $partsQTY          = $hash_ref->{qty} * $params{qty}; # benötigte teile * anzahl erzeugnisse
     my $currentPart_ID    = $hash_ref->{parts_id};
-    my $currentPart_WH_ID = $use_default_warehouse ? $hash_ref->{warehouse_id} : $params{dst_warehouse_id};
+
+    my $currentPart_WH_ID = $use_default_warehouse && $hash_ref->{warehouse_id} ? $hash_ref->{warehouse_id} : $params{dst_warehouse_id};
+    my $no_check = 0;
+
+    # Prüfen ob Erzeugnis-Teile Standardlager haben.
+    if ($use_default_warehouse && ! $hash_ref->{warehouse_id}) {
+      # Prüfen ob in Mandantenkonfiguration ein Standardlager aktiviert isti.
+      if ($::instance_conf->get_transfer_default_ignore_onhand) {
+        $currentPart_WH_ID = $::instance_conf->get_warehouse_id_ignore_onhand;
+        $no_check = 1;
+      } else {
+        $kannNichtFertigen .= "Kein Standardlager: " .
+                            " Die Ware " . $self->get_part_description(parts_id => $currentPart_ID) .
+                            " hat kein Standardlager definiert " .
+                            ", um das Erzeugnis herzustellen. <br>";
+        next;
+      }
+    }
     my $warehouse_info    = $self->get_basic_warehouse_info('id'=> $currentPart_WH_ID);
     my $warehouse_desc    = $warehouse_info->{"warehouse_description"};
 
+    # Fertigen ohne Prüfung nach Bestand
+    if ($no_check) {
+      my $temppart_bin_id       = $::instance_conf->get_bin_id_ignore_onhand;
+      my $temppart_chargenumber = "";
+      my $temppart_bestbefore   = localtime();
+      my $temppart_qty          = $partsQTY * -1;
+
+      do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $currentPart_WH_ID,
+                     $temppart_bin_id, $temppart_chargenumber, $temppart_bestbefore, 'Verbraucht für ' .
+                     $self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $temppart_qty);
+      next;
+    }
     # Überprüfen, ob diese Anzahl gefertigt werden kann
     my $max_parts = $self->get_max_qty_parts(parts_id     => $currentPart_ID, # $self->method() == this.method()
                                              warehouse_id => $currentPart_WH_ID);