]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Lieferplan-Bericht um Berichts-Feld "ausgelagerte Menge" erweitert
authorJan Büren <jan@kivitendo-premium.de>
Thu, 30 Oct 2014 12:40:42 +0000 (13:40 +0100)
committerJan Büren <jan@kivitendo-premium.de>
Thu, 30 Oct 2014 12:40:42 +0000 (13:40 +0100)
Der Lieferplan berechnet aktuell die "verschickte" Menge der Waren
aus der Menge der generierten Lieferschein, beachtet aber nicht den
tatsächlichen Status des Lieferscheins (ausgelagert oder nicht).
Entsprechend ein Extra-Feld in dem Bericht hinzugefügt, dass diese
Untermenge der Lieferscheine (Status ausgelagert) berücksichtigt.
Nur teilweise ausgelagerte Lieferscheine werden NICHT berücksichtigt.
 -> technischer Hintergrund: keine Verknüpfung mit inventory
Die "große" UNION-Query (sub delivery_plan_query) musste nicht angefasst werden,
da der Filter über "offene Verkaufsaufträge" geht. Verkaufsaufträge werden aber
erst dann geschlossen wenn alle Menge in der Verkaufsrechnung verbucht
worden sind und NICHT wenn alle Mengen in den Lieferscheinen (unabhängig
 vom Status 'ausgelagert') verbucht / geschrieben wurden.

SL/Controller/DeliveryPlan.pm
SL/DB/OrderItem.pm

index fc402fcc6fd75682a87b4c8d64edbe66ab018eca..01c3d8bad5dbe029f7afe0ee84e0a564ecc87004 100644 (file)
@@ -22,6 +22,7 @@ my %sort_columns = (
   partnumber        => t8('Part Number'),
   qty               => t8('Qty'),
   shipped_qty       => t8('shipped'),
+  delivered_qty     => t8('transferred out'),
   not_shipped_qty   => t8('not shipped'),
   ordnumber         => t8('Order'),
   customer          => t8('Customer'),
@@ -46,7 +47,7 @@ sub prepare_report {
   my $report      = SL::ReportGenerator->new(\%::myconfig, $::form);
   $self->{report} = $report;
 
-  my @columns     = qw(reqdate customer ordnumber partnumber description qty shipped_qty not_shipped_qty);
+  my @columns     = qw(reqdate customer ordnumber partnumber description qty shipped_qty not_shipped_qty delivered_qty);
   my @sortable    = qw(reqdate customer ordnumber partnumber description);
 
   my %column_defs = (
@@ -58,6 +59,7 @@ sub prepare_report {
     qty               => {      sub => sub { $_[0]->qty_as_number . ' ' . $_[0]->unit                                        } },
     shipped_qty       => {      sub => sub { $::form->format_amount(\%::myconfig, $_[0]->shipped_qty, 2) . ' ' . $_[0]->unit } },
     not_shipped_qty   => {      sub => sub { $::form->format_amount(\%::myconfig, $_[0]->qty - $_[0]->shipped_qty, 2) . ' ' . $_[0]->unit } },
+    delivered_qty     => {      sub => sub { $::form->format_amount(\%::myconfig, $_[0]->delivered_qty, 2) . ' ' . $_[0]->unit } },
     ordnumber         => {      sub => sub { $_[0]->order->ordnumber                                                         },
                            obj_link => sub { $self->link_to($_[0]->order)                                                    } },
     customer          => {      sub => sub { $_[0]->order->customer->name                                                    },
index e75c78f5ffcbddf28191e006af23c819f777439e..75d5951d6c89d8760f903a2d13613602a6912754 100644 (file)
@@ -34,4 +34,20 @@ sub shipped_qty {
   return sum(map { AM->convert_unit($_->unit => $self->unit) * $_->qty } @doi);
 }
 
+sub delivered_qty {
+  my ($self) = @_;
+
+  my $d_orders = $self->order->linked_records(direction => 'to', to => 'SL::DB::DeliveryOrder');
+  my @d_orders_delivered;
+
+  foreach (@$d_orders) {
+    push (@d_orders_delivered, $_) if $_->delivered;
+  }
+
+  my @doi_delivered      = grep { $_->parts_id == $self->parts_id } map { $_->orderitems } @d_orders_delivered;
+
+  require SL::AM;
+  return sum(map { AM->convert_unit($_->unit => $self->unit) * $_->qty } @doi_delivered);
+}
+
 1;