Inventory-Helper: falscher Fehlermeldung
authorMartin Helmling martin.helmling@octosoft.eu <martin.helmling@octosoft.eu>
Mon, 18 Nov 2019 16:19:35 +0000 (17:19 +0100)
committerSven Schöling <s.schoeling@googlemail.com>
Fri, 27 Nov 2020 15:27:45 +0000 (16:27 +0100)
Bei der Fehlermeldung wird das falsche Lager angezeigt.
Bisher wurde das Lager mit vorhandener Menge angezeigt, das nicht der Einschränkung entspricht.
Es muss aber entweder kein Lager oder ein Lager angezeigt werden, das den Einschränkungen entspricht
aber zuwenig Menge hat.

zu #11438

SL/Helper/Inventory.pm
locale/de/all

index 9d4ee96..c26d855 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use Carp;
 use DateTime;
 use Exporter qw(import);
-use List::Util qw(min);
+use List::Util qw(min sum);
 use List::UtilsBy qw(sort_by);
 use List::MoreUtils qw(any);
 
@@ -12,6 +12,7 @@ use SL::Locale::String qw(t8);
 use SL::MoreCommon qw(listify);
 use SL::DBUtils qw(selectall_hashref_query selectrow_query);
 use SL::DB::TransferType;
+use SL::Helper::Number qw(_round_qty _qty);
 use SL::X;
 
 our @EXPORT_OK = qw(get_stock get_onhand allocate allocate_for_assembly produce_assembly check_constraints);
@@ -216,7 +217,7 @@ sub allocate {
   }
   if ($rest_qty > 0) {
     die SL::X::Inventory::Allocation->new(
-      error => t8('not enough to allocate'),
+      error => 'not enough to allocate',
       msg => t8("can not allocate #1 units of #2, missing #3 units", $qty, $part->displayable_name, $rest_qty),
     );
   } else {
@@ -282,12 +283,16 @@ sub check_constraints {
           warehouse_id => t8('Warehouses'),
           chargenumber => t8('Chargenumbers'),
         );
-        my @allocs = grep { !$whitelist{$_->$accessor} } @$allocations;
+        my @allocs = grep { $whitelist{$_->$accessor} } @$allocations;
+        my $needed = sum map { $_->qty } grep { !$whitelist{$_->$accessor} } @$allocations;
+        my $err    = t8("Cannot allocate parts.");
+        $err      .= ' '.t8('part \'#\'1 in bin \'#2\' only with qty #3 (need additional #4) and chargenumber \'#5\'.',
+              SL::DB::Part->load_cached($_->parts_id)->description,
+              SL::DB::Bin->load_cached($_->bin_id)->full_description,
+              _qty($_->qty), _qty($needed), $_->chargenumber ? $_->chargenumber : '--') for @allocs;
         die SL::X::Inventory::Allocation->new(
-          accessor    => $accessor,
-          allocations => \@allocs,
-          error       => 'allocation constraints failure',
-          msg => t8("Allocations didn't pass constraints for #1",$error_constraints{$_}),
+          error => 'allocation constraints failure',
+          msg   => $err,
         );
       }
     }
index 2f3856e..4f3384a 100755 (executable)
@@ -271,7 +271,6 @@ $self->{texts} = {
   'All units have either no or exactly one base unit of which they are multiples.' => 'Einheiten haben entweder keine oder genau eine Basiseinheit, von der sie ein Vielfaches sind.',
   'All users'                   => 'Alle BenutzerInnen',
   'Allocations didn\'t pass constraints' => 'Keine Verfügbarkeit wegen Lagereinschränkung',
-  'Allocations didn\'t pass constraints for #1' => 'Keine Verfügbarkeit wegen Lagereinschränkung auf \'#1\'',
   'Allow access'                => 'Zugriff erlauben',
   'Allow conversion from sales orders to sales invoices' => 'Umwandlung von Verkaufsaufträgen in Verkaufsrechnungen zulassen',
   'Allow conversion from sales quotations to sales invoices' => 'Umwandlung von Verkaufsangeboten in Verkaufsrechnungen zulassen',
@@ -535,6 +534,7 @@ $self->{texts} = {
   'Cancel Accounts Payables Transaction' => 'Kreditorenbuchung stornieren',
   'Cancel Accounts Receivables Transaction' => 'Debitorenbuchung stornieren',
   'Cancelling is disallowed. Either undo or balance the current payments until the open amount matches the invoice amount' => 'Storno verboten, da Zahlungen zum Beleg vorhanden sind. Entweder die Zahlungen löschen oder mit umgekehrten Vorzeichen ausbuchen, sodass der offene Betrag dem Rechnungsbetrag entspricht.',
+  'Cannot allocate parts.'      => 'Es sind nicht genügend Artikel vorhanden',
   'Cannot change transaction in a closed period!' => 'In einem bereits abgeschlossenen Zeitraum kann keine Buchung verändert werden!',
   'Cannot check correct WebDAV folder' => 'Kann nicht den richtigen WebDAV Pfad überprüfen',
   'Cannot delete account!'      => 'Konto kann nicht gelöscht werden!',
@@ -600,7 +600,7 @@ $self->{texts} = {
   'Charge'                      => 'Berechnen',
   'Charge Number'               => 'Chargennummer',
   'Charge number'               => 'Chargennummer',
-  'Chargenumbers'               => '',
+  'Chargenumbers'               => 'Chargennummern',
   'Charset'                     => 'Zeichensatz',
   'Chart'                       => 'Buchungskonto',
   'Chart Type'                  => 'Kontentyp',
@@ -4253,7 +4253,6 @@ $self->{texts} = {
   'no tax_id in acc_trans'      => 'Keine tax_id in acc_trans',
   'not configured'              => 'nicht konfiguriert',
   'not delivered'               => 'nicht geliefert',
-  'not enough to allocate'      => 'Keine Verfügbarkeit',
   'not executed'                => 'nicht ausgeführt',
   'not running'                 => 'läuft nicht',
   'not set'                     => 'nicht gesetzt',
@@ -4274,6 +4273,7 @@ $self->{texts} = {
   'our vendor number at customer' => 'Unsere Lieferanten-Nr. beim Kunden',
   'parsing csv'                 => 'Parse CSV Daten',
   'part'                        => 'Ware',
+  'part \'#\'1 in bin \'#2\' only with qty #3 (need additional #4) and chargenumber \'#5\'.' => 'Artikel \'#1\' im \'#2\' nur mit der Menge #3 (noch #4 benötig) und Chargennummer \'#5\'.',
   'part_list'                   => 'Warenliste',
   'percental'                   => 'prozentual',
   'periodic'                    => 'Aufwandsmethode',