Fehler #109
Bei "Auslagern über Standardlagerplatz" wird delivery_order_items_stock_id in inventory nicht gesetzt
100%
Beschreibung
Beim Auslagern per "?" funktioniert es.
Historie
Von Jan Büren vor fast 9 Jahren aktualisiert
die delivery_order_items_stock_id wird beim speichern des Lieferscheins in DO.pm gesetzt.
Als erste Lösung kann ich die in dem enstprechenden request in transfer_in_out_default, NACH dem Speichern ergänzen:
save(no_redirect => 1); # Wir können auslagern, deshalb beleg speichern # und in delivery_order_items_stock speichern + # ... and fill back the persistent dois_id for inventory fk + undef (@all_requests); + foreach my $i (1 .. $form->{rowcount}) { + next unless ($form->{"id_$i"} && $form->{"stock_${prefix}_$i"}); + foreach my $request (@{ DO->unpack_stock_information('packed' => $form->{"stock_${prefix}_$i"}) }) { + push @all_requests, $request; + } } DO->transfer_in_out('direction' => $prefix, 'requests' => \@all_requests);
Das ist nicht so richtig elegant, weil ich die @all_requests nochmal komplett neu aufbaue, um ein Attribut zu ergänzen.
Die entscheidenden Commits hierzu waren: 286dc87c und 6934a717b6f76c
Vorher wurden diese ids immer beim Speichern neu angelegt, jetzt wird beim Speichern die id für dois wieder zurückgegeben und muss auch hier nochmal in die Form mit YAML zurückgepackt werden.
Ich seh jetzt wenig weitere Optimierung ohne grundsätzlichere Umbauarbeiten zu machen.
Vielleicht hat jmd. noch eine bessere Idee, was etwas schwierig zu erkennen ist, ist die Wandlung zwischen YAML und einzelnen Requests.
Diese Stelle in DO.pm ist eigentlich der Knackpunkt:
# write back the id to the form (important if only transfer was clicked (id fk for invoice) $form->{"stock_${in_out}_$i"} = YAML::Dump($stock_info);
Ich muss diese Struktur wieder in die Form zurückschreiben (mit dem einen Attribut mehr), da ich nicht weiß, ob der Nutzer NUR gespeichert hat oder Auslagert ohne vorher zu Speichern.
Demnach muss ich diese Info für transfer_in_out_default wieder zurücklesen, da ich den Lieferschein auch erst Speichern möchte, wenn alle anderen Fehlerprüfungen durch sind.