X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FDeliveryPlan.pm;h=e280a1b99aaef7e2af9aa03b7983344951b801f0;hb=e74dac176e01090f7e3b6bd9e99596a36e614284;hp=a7ed85e10810ea6d247659398b1ceabd10bc9ac8;hpb=b213d89c9bb929cbebda13388284bd442f6f8aa2;p=kivitendo-erp.git diff --git a/SL/Controller/DeliveryPlan.pm b/SL/Controller/DeliveryPlan.pm index a7ed85e10..e280a1b99 100644 --- a/SL/Controller/DeliveryPlan.pm +++ b/SL/Controller/DeliveryPlan.pm @@ -22,6 +22,7 @@ sub action_list { my $db_args = $self->setup_for_list(%list_params); $self->{pages} = SL::DB::Manager::OrderItem->paginate(%list_params, args => $db_args); $self->{flat_filter} = { map { $_->{key} => $_->{value} } $::form->flatten_variables('filter') }; + $self->make_filter_summary; my $top = $::form->parse_html_template('delivery_plan/report_top', { FORM => $::form, SELF => $self }); my $bottom = $::form->parse_html_template('delivery_plan/report_bottom', { SELF => $self }); @@ -145,6 +146,8 @@ sub prepare_report { obj_link => sub { $self->link_to($_[0]->part) }}, qty => { text => $::locale->text('Qty'), sub => sub { $_[0]->qty_as_number . ' ' . $_[0]->unit }}, + missing => { text => $::locale->text('Missing qty'), + sub => sub { $::form->format_amount(\%::myconfig, $_[0]->qty - $_[0]->shipped_qty, 2) . ' ' . $_[0]->unit }}, shipped_qty => { text => $::locale->text('shipped'), sub => sub { $::form->format_amount(\%::myconfig, $_[0]->shipped_qty, 2) . ' ' . $_[0]->unit }}, ordnumber => { text => $::locale->text('Order'), @@ -210,6 +213,39 @@ sub list_objects { return $self->{report}->generate_with_headers; } +sub make_filter_summary { + my ($self) = @_; + + my $filter = $::form->{filter} || {}; + my @filter_strings; + + my @filters = ( + [ $filter->{order}{"ordnumber:substr::ilike"}, $::locale->text('Number') ], + [ $filter->{part}{"partnumber:substr::ilike"}, $::locale->text('Part Number') ], + [ $filter->{"description:substr::ilike"}, $::locale->text('Part Description') ], + [ $filter->{"reqdate:date::ge"}, $::locale->text('Delivery Date') . " " . $::locale->text('From Date') ], + [ $filter->{"reqdate:date::le"}, $::locale->text('Delivery Date') . " " . $::locale->text('To Date') ], + [ $filter->{"qty:number"}, $::locale->text('Quantity') ], + [ $filter->{order}{customer}{"name:substr::ilike"}, $::locale->text('Customer') ], + [ $filter->{order}{customer}{"customernumber:substr::ilike"}, $::locale->text('Customer Number') ], + ); + + my @flags = ( + [ $filter->{part}{type}{part}, $::locale->text('Parts') ], + [ $filter->{part}{type}{service}, $::locale->text('Services') ], + [ $filter->{part}{type}{assembly}, $::locale->text('Assemblies') ], + ); + + for (@flags) { + push @filter_strings, "$_->[1]" if $_->[0]; + } + for (@filters) { + push @filter_strings, "$_->[1]: $_->[0]" if $_->[0]; + } + + $self->{filter_summary} = join ', ', @filter_strings; +} + sub link_to { my ($self, $object, %params) = @_; @@ -252,16 +288,23 @@ sub _pre_parse_filter { push @{ $filter->{and} }, or => [ @part_filters ] if @part_filters; } - if ($filter->{'reqdate:date::le'}) { - $launder_to->{'reqdate_date__le'} = delete $filter->{'reqdate:date::le'}; - my $parsed_date = DateTime->from_lxoffice($launder_to->{'reqdate_date__le'}); - push @{ $filter->{and} }, or => [ - 'reqdate' => { le => $parsed_date }, - and => [ - 'reqdate' => undef, - 'order.reqdate' => { le => $parsed_date }, - ] - ] if $parsed_date; + for my $op (qw(le ge)) { + if ($filter->{"reqdate:date::$op"}) { + $launder_to->{"reqdate_date__$op"} = delete $filter->{"reqdate:date::$op"}; + my $parsed_date = DateTime->from_lxoffice($launder_to->{"reqdate_date__$op"}); + push @{ $filter->{and} }, or => [ + 'reqdate' => { $op => $parsed_date }, + and => [ + 'reqdate' => undef, + 'order.reqdate' => { $op => $parsed_date }, + ] + ] if $parsed_date; + } + } + + if (my $style = delete $filter->{searchstyle}) { + $self->{searchstyle} = $style; + $launder_to->{searchstyle} = $style; } return $filter;