]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Lieferscheine neue Funktion Zurücklagern
authorJan Büren <jan@kivitendo.de>
Mon, 10 May 2021 11:44:33 +0000 (13:44 +0200)
committerJan Büren <jan@kivitendo.de>
Mon, 10 May 2021 11:44:33 +0000 (13:44 +0200)
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
SL/Form.pm
bin/mozilla/do.pl
doc/changelog
locale/de/all
locale/en/all

index 90599a7de193e4b06685fc23d542c1badb856edd..3b0b41be24a44750b87a3129cc3b6a0e18040b4f 100644 (file)
--- 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();
 
index 1eef9c605bee2997fa0b143339aad9891544f689..921cb253ef452fc884e8220db702479d91c9796a 100644 (file)
@@ -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')
index dec786a733eb07d50da761f1a06f962e7851ef3b..f63254dc46793498a90abe9994df930c221fce05 100644 (file)
@@ -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();
index 421d21e5301717f82fde299660819b7fc53308c4..ee47ba4b37394f2b9ccd22c6ac719ec4ba30cd08 100644 (file)
@@ -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
index 2006a1b02a2adfa43a560be0d1ff18220bba12de..e4c39b99a8b65891f7bc58b5dd9d06990ba82bba 100755 (executable)
@@ -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. <br> Reason:<br>#1' => 'Kann nicht ein-/auslagern. <br>Grund:<br>#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',
index fffcc496245cb2a0f392a82b72158894877992ac..204237ed7647280096b30d6d66856ad5e9c390ad 100644 (file)
@@ -590,6 +590,7 @@ $self->{texts} = {
   'Cannot transfer negative entries.' => '',
   'Cannot transfer negative quantities.' => '',
   'Cannot transfer. <br> Reason:<br>#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'                => '',