From b092fef706251cb7f7a10f45036e4b7b2a1bacb0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20B=C3=BCren?= Date: Thu, 30 Oct 2014 13:40:42 +0100 Subject: [PATCH] Lieferplan-Bericht um Berichts-Feld "ausgelagerte Menge" erweitert MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 | 4 +++- SL/DB/OrderItem.pm | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/SL/Controller/DeliveryPlan.pm b/SL/Controller/DeliveryPlan.pm index fc402fcc6..01c3d8bad 100644 --- a/SL/Controller/DeliveryPlan.pm +++ b/SL/Controller/DeliveryPlan.pm @@ -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 }, diff --git a/SL/DB/OrderItem.pm b/SL/DB/OrderItem.pm index e75c78f5f..75d5951d6 100644 --- a/SL/DB/OrderItem.pm +++ b/SL/DB/OrderItem.pm @@ -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; -- 2.20.1