From: Jan Büren Date: Tue, 4 Nov 2014 13:01:34 +0000 (+0100) Subject: Standard-Auslager-Verfahren verbessert (Dienstleistungen) X-Git-Tag: release-3.2.0beta~276 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=5caaac6b3cd27f1915b5f2a953b69b4a6ba4112b;p=kivitendo-erp.git Standard-Auslager-Verfahren verbessert (Dienstleistungen) a) Falls Dienstleistungen nicht per Standardverfahren ein- oder ausgelagert werden sollen, entsprechend NICHT auslagern. Meine erste Idee, einfach die Menge auf 0 zu setzen funktioniert nur dann, wenn auch ein Standardlagerplatz für die Dienstleistung oder Mandanten gesetzt ist. Ferner wird dann eine Lagerbewegung mit der Menge 0 noch in inventory gemacht. Folgende Ergänzungen: a) Menge auf 0, b) delete für Prüfung auf "Mengen-Hash" (qty) c) ein undef Element in dem Array all_requests hinzugefügt, sodass DO.pm (unpack_stock_info) in demselben Format die Daten empfängt wie beim manuellen Auslagern, wenn eine Position nicht per Fragezeichen ausgelagert wird. b) Ergänzung ob beim Einlagern per Standard-Einlagern ein Standard-Lagerplatz für die Ware / Dienstleistung gesetzt ist, anstatt der Ausgabe eines SQL-Fehlers Testfälle für a) Notwendige Bedingung: Auslagern über Standardlagerplatz aktiviert Verkauf | Einkauf A Dienstleistung | NICHT automatisch i.O. | i.O. ein- oder auslagern | ------------------------------------------------------------- B Leere Position (QTY == 0) i.O. | i.O. --- diff --git a/bin/mozilla/do.pl b/bin/mozilla/do.pl index 55e6cf2fa..d9312cc86 100644 --- a/bin/mozilla/do.pl +++ b/bin/mozilla/do.pl @@ -1593,14 +1593,17 @@ sub transfer_in_out_default { my $qty = $form->parse_amount(\%myconfig, $form->{"qty_$i"}) * $units->{$form->{"unit_$i"}}->{factor} / $base_unit_factor; # if we do not want to transfer services and this part is a service, set qty to zero + # ... and do not create a hash entry in %qty_parts below (will skip check for bins for the transfer == out case) + # ... and push only a empty (undef) element to @all_requests (will skip check for bin_id and warehouse_id and will not alter the row) + $qty = 0 if (!$::instance_conf->get_transfer_default_services && !defined($part_info_map{$form->{"id_$i"}}->{inventory_accno_id}) && !$part_info_map{$form->{"id_$i"}}->{assembly}); $qty_parts{$form->{"id_$i"}} += $qty; - + delete $qty_parts{$form->{"id_$i"}} if $qty == 0; $part_info_map{$form->{"id_$i"}}{bin_id} ||= $default_bin_id; $part_info_map{$form->{"id_$i"}}{warehouse_id} ||= $default_warehouse_id; - push @all_requests, { + push @all_requests, ($qty == 0) ? undef : { 'chargenumber' => '', #?? die müsste entsprechend geholt werden #'bestbefore' => undef, # TODO wird nicht berücksichtigt 'bin_id' => $part_info_map{$form->{"id_$i"}}{bin_id}, @@ -1616,12 +1619,12 @@ sub transfer_in_out_default { } # jetzt wird erst überprüft, ob die Stückzahl entsprechend stimmt. - if ($params{direction} eq 'out') { # wird nur für ausgehende Mengen benötigit - foreach my $key (keys %qty_parts) { - - $missing_default_bins{$key}{missing_bin} = 1 unless ($part_info_map{$key}{bin_id}); - next unless ($part_info_map{$key}{bin_id}); # abbruch + # check if bin (transfer in and transfer out and qty (transfer out) is correct + foreach my $key (keys %qty_parts) { + $missing_default_bins{$key}{missing_bin} = 1 unless ($part_info_map{$key}{bin_id}); + next unless ($part_info_map{$key}{bin_id}); # abbruch + if ($params{direction} eq 'out') { # wird nur für ausgehende Mengen benötigt my ($max_qty, $error) = WH->get_max_qty_parts_bin(parts_id => $key, bin_id => $part_info_map{$key}{bin_id}); if ($error == 1) { # wir können nicht entscheiden, welche charge oder mhd (bestbefore) ausgewählt sein soll