]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Implementiert FB0017 Position nach Art.Nummer in Lieferschein sortieren
authorJan Büren <jan@kivitendo-premium.de>
Tue, 22 Sep 2015 08:22:36 +0000 (10:22 +0200)
committerJan Büren <jan@kivitendo-premium.de>
Mon, 5 Oct 2015 15:40:33 +0000 (17:40 +0200)
Ab dem Status Verkaufs-Lieferschein können die Positionen nach Artikelnummern sortiert werden,
 sodass diese Sortierreihenfolge in die Rechnung übernommen wird.
Implementierung mit Natural Sort, d.h. Buchstaben und Zahlen können gemischt sein.

Aktion kann entweder über einen Knopf ausgelöst werden oder wird standardmässig bei jedem Speichern ausgeführt.
Aktuell heißt der Knopf: Sortieren und Speichern und erscheint sobald, der Lieferschein persisitente
Positionen in der DB hat.

bin/mozilla/do.pl
locale/de/all
templates/webpages/do/form_footer.html

index 1f9419b39c372369c13258ef58abab3b81666597..4b8ead658f18ad22392c7295889421b1065fa3cb 100644 (file)
@@ -42,6 +42,7 @@ use SL::IS;
 use SL::MoreCommon qw(ary_diff);
 use SL::ReportGenerator;
 use SL::WH;
 use SL::MoreCommon qw(ary_diff);
 use SL::ReportGenerator;
 use SL::WH;
+use Sort::Naturally;
 require "bin/mozilla/arap.pl";
 require "bin/mozilla/common.pl";
 require "bin/mozilla/invoice_io.pl";
 require "bin/mozilla/arap.pl";
 require "bin/mozilla/common.pl";
 require "bin/mozilla/invoice_io.pl";
@@ -1542,7 +1543,7 @@ sub dispatcher {
   my $form     = $main::form;
   my $locale   = $main::locale;
 
   my $form     = $main::form;
   my $locale   = $main::locale;
 
-  foreach my $action (qw(update ship_to print e_mail save transfer_out transfer_out_default
+  foreach my $action (qw(update ship_to print e_mail save transfer_out transfer_out_default sort
                          transfer_in transfer_in_default mark_closed save_as_new invoice delete)) {
     if ($form->{"action_${action}"}) {
       call_sub($action);
                          transfer_in transfer_in_default mark_closed save_as_new invoice delete)) {
     if ($form->{"action_${action}"}) {
       call_sub($action);
@@ -1724,3 +1725,36 @@ sub transfer_in_out_default {
   $form->redirect;
 
 }
   $form->redirect;
 
 }
+sub sort {
+  $main::lxdebug->enter_sub();
+
+  my $form     = $main::form;
+  my %temp_hash;
+
+  croak ("Delivery Order needs to be saved") unless $form->{id};
+
+  # hashify partnumbers, positions. key is delivery_order_items_id
+  for my $i (1 .. ($form->{rowcount}) ) {
+    $temp_hash{$form->{"delivery_order_items_id_$i"}} = { runningnumber => $form->{"runningnumber_$i"}, partnumber => $form->{"partnumber_$i"} };
+  }
+  # naturally sort partnumbers and get a sorted array of doi_ids
+  my @sorted_doi_ids =  sort { ncmp($temp_hash{$a}->{"partnumber"}, $temp_hash{$b}->{"partnumber"}) }  keys %temp_hash;
+
+  #$main::lxdebug->message(0, 'sortiert, vorher :' . Dumper(%temp_hash));
+  #$main::lxdebug->message(0, 'sortiert, nachher:' . Dumper(@sorted_doi_ids));
+
+  my $new_number = 1;
+  for (@sorted_doi_ids) {
+    # reposition old runningnumber with the new order 1 .. n
+    $form->{"runningnumber_$temp_hash{$_}->{runningnumber}"} = $new_number;
+
+    #$main::lxdebug->message(0, 'hier jetzt:' . 'ferner' . $temp_hash{$_}->{runningnumber} .
+    # 'mit' . $form->{"runningnumber_{$temp_hash{$_}->{runningnumber}}"}); #" = $new_number;
+
+    $new_number++;
+  }
+    # update or save directly
+    # update_delivery_order;
+    $main::lxdebug->leave_sub();
+    save();
+}
index 59c92b9bde0f0a8f576c6859aa1d1bc57be25764..f07e209670b5170f55689e46927fbf31657a7fed 100755 (executable)
@@ -2471,6 +2471,7 @@ $self->{texts} = {
   'Soldtotal does not make sense without any bsooqr options' => 'Option "Menge in gewählten Belegen" ohne gewählte Belege wird ignoriert.',
   'Solution'                    => 'Lösung',
   'Sort By'                     => 'Sortiert nach',
   'Soldtotal does not make sense without any bsooqr options' => 'Option "Menge in gewählten Belegen" ohne gewählte Belege wird ignoriert.',
   'Solution'                    => 'Lösung',
   'Sort By'                     => 'Sortiert nach',
+  'Sort and Save'               => 'Sortieren und Speichern',
   'Source'                      => 'Beleg',
   'Source BIC'                  => 'Quell-BIC',
   'Source IBAN'                 => 'Quell-IBAN',
   'Source'                      => 'Beleg',
   'Source BIC'                  => 'Quell-BIC',
   'Source IBAN'                 => 'Quell-IBAN',
index 6c8e0c62e2a29e18bd5052c21eae75aa6ed203c6..67f631e4f35ec831fc8d6d30187bff2c95c6232c 100644 (file)
@@ -92,6 +92,7 @@
    [%- END %]
    [%- END %]
    [%- IF id %]
    [%- END %]
    [%- END %]
    [%- IF id %]
+    <input class="submit" type="submit" name="action_sort" id="sort_button" value="[% 'Sort and Save' | $T8 %]">
      <input type="button" class="submit" onclick="follow_up_window()" value="[% 'Follow-Up' | $T8 %]">
    [%- UNLESS closed %]
    <input class="submit" type="submit" name="action_mark_closed" value="[% 'Mark closed' | $T8 %]" data-require-transaction-description="[% INSTANCE_CONF.get_require_transaction_description_ps %]">
      <input type="button" class="submit" onclick="follow_up_window()" value="[% 'Follow-Up' | $T8 %]">
    [%- UNLESS closed %]
    <input class="submit" type="submit" name="action_mark_closed" value="[% 'Mark closed' | $T8 %]" data-require-transaction-description="[% INSTANCE_CONF.get_require_transaction_description_ps %]">