From 927ec7273b39dffbd1cb91062fed46c60d9be47f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20B=C3=BCren?= Date: Mon, 10 May 2021 13:44:33 +0200 Subject: [PATCH] =?utf8?q?Lieferscheine=20neue=20Funktion=20Zur=C3=BCcklag?= =?utf8?q?ern?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Belege die nicht älter als das Zurücklagerungs-Intervall sind können wieder "entlagert" werden. Lieferschein die ausgelagert sind, wurden bisher strikter als Rechnungen behandelt. Ein Zurücklagern war nur über die Lagerkorrektur möglich. --- SL/DO.pm | 32 ++++++++++++++++++++++++++++++++ SL/Form.pm | 1 + bin/mozilla/do.pl | 45 +++++++++++++++++++++++++++++++++++++++++++++ doc/changelog | 3 ++- locale/de/all | 7 +++++++ locale/en/all | 7 +++++++ 6 files changed, 94 insertions(+), 1 deletion(-) diff --git a/SL/DO.pm b/SL/DO.pm index 90599a7de..3b0b41be2 100644 --- a/SL/DO.pm +++ b/SL/DO.pm @@ -649,6 +649,38 @@ sub delete { return $rc; } +sub delete_transfers { + $main::lxdebug->enter_sub(); + + my ($self) = @_; + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $rc = SL::DB::Order->new->db->with_transaction(sub { + + my $do = SL::DB::DeliveryOrder->new(id => $form->{id})->load; + die "No valid delivery order found" unless ref $do eq 'SL::DB::DeliveryOrder'; + + my $dt = DateTime->today->subtract(days => $::instance_conf->get_undo_transfer_interval); + croak "Wrong call. Please check undoing interval" unless DateTime->compare($do->itime, $dt) == 1; + + foreach my $doi (@{ $do->orderitems }) { + foreach my $dois (@{ $doi->delivery_order_stock_entries}) { + $dois->inventory->delete; + $dois->delete; + } + } + $do->update_attributes(delivered => 0); + + 1; + }); + + $main::lxdebug->leave_sub(); + + return $rc; +} + sub retrieve { $main::lxdebug->enter_sub(); diff --git a/SL/Form.pm b/SL/Form.pm index 1eef9c605..921cb253e 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -2964,6 +2964,7 @@ sub save_status { # $main::locale->text('SCREENED') # $main::locale->text('CANCELED') # $main::locale->text('IMPORT') +# $main::locale->text('UNDO TRANSFER') # $main::locale->text('UNIMPORT') # $main::locale->text('invoice') # $main::locale->text('proforma') diff --git a/bin/mozilla/do.pl b/bin/mozilla/do.pl index dec786a73..f63254dc4 100644 --- a/bin/mozilla/do.pl +++ b/bin/mozilla/do.pl @@ -241,6 +241,13 @@ sub setup_do_action_bar { my @req_trans_desc = qw(kivi.SalesPurchase.check_transaction_description) x!!$::instance_conf->get_require_transaction_description_ps; my $is_customer = $::form->{vc} eq 'customer'; + my $undo_date = DateTime->today->subtract(days => $::instance_conf->get_undo_transfer_interval); + my $insertdate = DateTime->from_kivitendo($::form->{insertdate}); + my $undo_transfer = 0; + if (ref $undo_date eq 'DateTime' && ref $insertdate eq 'DateTime') { + # DateTime->compare it returns 1 if $dt1 > $dt2 + $undo_transfer = DateTime->compare($insertdate, $undo_date) == 1 ? 1 : 0; + } for my $bar ($::request->layout->get('actionbar')) { $bar->add( action => @@ -314,6 +321,13 @@ sub setup_do_action_bar { disabled => $::form->{delivered} ? t8('This record has already been delivered.') : undef, only_if => !$is_customer && $::instance_conf->get_transfer_default, ], + action => [ + t8('Undo Transfer'), + submit => [ '#form', { action => "delete_transfers" } ], + checks => [ 'kivi.validate_form' ], + only_if => $::form->{delivered}, + disabled => !$undo_transfer ? t8('Transfer date exceeds the maximum allowed interval.') : undef, + ], ], # end of combobox "Transfer out" @@ -969,6 +983,37 @@ sub delete { $main::lxdebug->leave_sub(); } +sub delete_transfers { + $main::lxdebug->enter_sub(); + + check_do_access(); + + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + my $ret; + + die "Invalid form type" unless $form->{type} =~ m/^(sales|purchase)_delivery_order$/; + + if ($ret = DO->delete_transfers()) { + # saving the history + if(!exists $form->{addition}) { + $form->{snumbers} = qq|donumber_| . $form->{donumber}; + $form->{addition} = "UNDO TRANSFER"; + $form->save_history; + } + # /saving the history + + flash_later('info', $locale->text("Transfer undone.")); + + $form->{callback} = 'do.pl?action=edit&type=' . $form->{type} . '&id=' . $form->escape($form->{id}); + $form->redirect; + } + + $form->error($locale->text('Cannot undo delivery order transfer!') . $ret); + + $main::lxdebug->leave_sub(); +} sub invoice { $main::lxdebug->enter_sub(); diff --git a/doc/changelog b/doc/changelog index 421d21e53..ee47ba4b3 100644 --- a/doc/changelog +++ b/doc/changelog @@ -36,7 +36,8 @@ Mittelgroße neue Features: Mahnung Kleinere neue Features und Detailverbesserungen: - + - Ausgelagerte Lieferscheinen können zurückgelagerte werden insofern der + konfigurierbare Zurücklagerungszeitraum noch nicht überschritten ist. - Angebote und Aufträge im Ein- und Verkauf können optionale Positionen enthalten. Optionale Positionen werden in der zweiten Zeile der Position aktiviert. Die einzelne Position wird dann berechnet und erscheint im Ausdruck mit dem diff --git a/locale/de/all b/locale/de/all index 2006a1b02..e4c39b99a 100755 --- a/locale/de/all +++ b/locale/de/all @@ -590,6 +590,7 @@ $self->{texts} = { 'Cannot transfer negative entries.' => 'Kann keine negativen Mengen auslagern.', 'Cannot transfer negative quantities.' => 'Negative Mengen können nicht ausgelagert werden.', 'Cannot transfer.
Reason:
#1' => 'Kann nicht ein-/auslagern.
Grund:
#1', + 'Cannot undo delivery order transfer!' => 'Kann Lagerbewegung des Lieferscheins nicht zurücklagern!', 'Cannot unlink payment for a closed period!' => 'Ein oder alle Bankbewegungen befinden sich innerhalb einer geschloßenen Periode. ', 'Carry over account for year-end closing' => 'Saldenvortragskonto', 'Carry over shipping address' => 'Lieferadresse übernehmen', @@ -983,6 +984,7 @@ $self->{texts} = { 'Default transport article number' => 'Standard Versand / Transport-Erinnerungs-Artikel', 'Default unit' => 'Standardeinheit', 'Default value' => 'Standardwert', + 'Defines the interval where undoing transfers from a delivery order are allowed.' => 'Zeitintervall in Tagen, an denen ein Zurücklagern der Lagerbewegung innerhalb eines Lieferscheins möglich ist.', 'Delete' => 'Löschen', 'Delete Account' => 'Konto löschen', 'Delete Attachments' => 'Anhänge löschen', @@ -3822,6 +3824,7 @@ $self->{texts} = { 'Transfer To Stock' => 'Lagereingang', 'Transfer all marked' => 'Markierte übernehmen', 'Transfer data to Geierlein ELSTER application' => 'Daten in Geierlein ELSTER-Anwendung übernehmen', + 'Transfer date exceeds the maximum allowed interval.' => 'Das Belegdatum ist älter als das maximale Zurücklagerungs-Intervall es zulässt.', 'Transfer from warehouse' => 'Quelllager', 'Transfer in' => 'Einlagern', 'Transfer in via default' => 'Einlagern über Standard-Lagerplatz', @@ -3833,6 +3836,7 @@ $self->{texts} = { 'Transfer qty' => 'Umlagermenge', 'Transfer services via default' => 'Falls Ein- /Auslagern über Standardlagerplatz aktiviert ist, auch die Dienstleistungen standardmässig Ein- und Auslagern', 'Transfer successful' => 'Lagervorgang erfolgreich', + 'Transfer undone.' => 'Zurücklagerung erfolgreich', 'Transferred' => 'Übernommen', 'Translation' => 'Übersetzung', 'Translations' => 'Übersetzungen', @@ -3851,6 +3855,7 @@ $self->{texts} = { 'Type of Vendor' => 'Lieferantentyp', 'TypeAbbreviation' => 'Typ-Abkürzung', 'Types of Business' => 'Kunden-/Lieferantentypen', + 'UNDO TRANSFER' => 'Zurücklagern', 'UNIMPORT' => 'Import rückgängig', 'USTVA' => 'USTVA', 'USTVA 2004' => 'USTVA 2004', @@ -3870,6 +3875,8 @@ $self->{texts} = { 'Unbalanced Ledger' => 'Bilanzfehler', 'Unchecked custom variables will not appear in orders and invoices.' => 'Unmarkierte Variablen werden für diesen Artikel nicht in Aufträgen und Rechnungen angezeigt.', 'Undo SEPA exports' => 'SEPA-Exporte rückgängig machen', + 'Undo Transfer' => 'Zurücklagern', + 'Undo Transfer Interval' => 'Zurücklagerungs-Intervall', 'Unfinished follow-ups' => 'Nicht erledigte Wiedervorlagen', 'Unfortunately you have no warehouse defined.' => 'Leider, gibt es kein Lager in diesem Mandanten.', 'Unimport all' => 'Alle zurück zur Quelle', diff --git a/locale/en/all b/locale/en/all index fffcc4962..204237ed7 100644 --- a/locale/en/all +++ b/locale/en/all @@ -590,6 +590,7 @@ $self->{texts} = { 'Cannot transfer negative entries.' => '', 'Cannot transfer negative quantities.' => '', 'Cannot transfer.
Reason:
#1' => '', + 'Cannot undo delivery order transfer!' => '', 'Cannot unlink payment for a closed period!' => '', 'Carry over account for year-end closing' => '', 'Carry over shipping address' => '', @@ -983,6 +984,7 @@ $self->{texts} = { 'Default transport article number' => '', 'Default unit' => '', 'Default value' => '', + 'Defines the interval where undoing transfers from a delivery order are allowed.' => '', 'Delete' => '', 'Delete Account' => '', 'Delete Attachments' => '', @@ -3821,6 +3823,7 @@ $self->{texts} = { 'Transfer To Stock' => '', 'Transfer all marked' => '', 'Transfer data to Geierlein ELSTER application' => '', + 'Transfer date exceeds the maximum allowed interval.' => '', 'Transfer from warehouse' => '', 'Transfer in' => '', 'Transfer in via default' => '', @@ -3832,6 +3835,7 @@ $self->{texts} = { 'Transfer qty' => '', 'Transfer services via default' => '', 'Transfer successful' => '', + 'Transfer undone.' => '', 'Transferred' => '', 'Translation' => '', 'Translations' => '', @@ -3850,6 +3854,7 @@ $self->{texts} = { 'Type of Vendor' => '', 'TypeAbbreviation' => '', 'Types of Business' => '', + 'UNDO TRANSFER' => '', 'UNIMPORT' => '', 'USTVA' => '', 'USTVA 2004' => '', @@ -3869,6 +3874,8 @@ $self->{texts} = { 'Unbalanced Ledger' => '', 'Unchecked custom variables will not appear in orders and invoices.' => '', 'Undo SEPA exports' => '', + 'Undo Transfer' => '', + 'Undo Transfer Interval' => '', 'Unfinished follow-ups' => '', 'Unfortunately you have no warehouse defined.' => '', 'Unimport all' => '', -- 2.20.1