X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/b90ff6b18df92c98b1b875d14835d1fdf9ff339a..f217d072d76183bc07723dcc29503b732bd2022d:/SL/Controller/DeliveryPlan.pm diff --git a/SL/Controller/DeliveryPlan.pm b/SL/Controller/DeliveryPlan.pm index 6d7aaa908..0a120c6ec 100644 --- a/SL/Controller/DeliveryPlan.pm +++ b/SL/Controller/DeliveryPlan.pm @@ -5,6 +5,7 @@ use parent qw(SL::Controller::Base); use Clone qw(clone); use SL::DB::OrderItem; +use SL::DB::Order::TypeData qw(:types); use SL::DB::Business; use SL::Controller::Helper::GetModels; use SL::Controller::Helper::ReportGenerator; @@ -49,9 +50,10 @@ sub action_list { sub prepare_report { my ($self) = @_; - my $vc = $self->vc; - my $report = SL::ReportGenerator->new(\%::myconfig, $::form); - $self->{report} = $report; + my $vc = $self->vc; + my $report = SL::ReportGenerator->new(\%::myconfig, $::form); + $report->{title} = t8('Delivery Plan'); + $self->{report} = $report; my @columns = qw(reqdate customer vendor ordnumber partnumber description qty shipped_qty not_shipped_qty); @@ -95,6 +97,7 @@ sub prepare_report { $self->models->disable_plugin('paginated') if $report->{options}{output_format} =~ /^(pdf|csv)$/i; $self->models->finalize; # for filter laundering $self->models->set_report_generator_sort_options(report => $report, sortable_columns => \@sortable); + $self->{assembly_item_number} = $::form->{assembly_item_number} ? $::form->{assembly_item_number} : undef; $report->set_options( raw_top_info_text => $self->render('delivery_plan/report_top', { output => 0 }), raw_bottom_info_text => $self->render('delivery_plan/report_bottom', { output => 0 }, models => $self->models), @@ -115,7 +118,7 @@ sub calc_qtys { sub make_filter_summary { my ($self) = @_; my $vc = $self->vc; - my ($business, $employee, $department); + my ($business, $employee, $department, $assembly_item_number); my $filter = $::form->{filter} || {}; my @filter_strings; @@ -123,6 +126,7 @@ sub make_filter_summary { $business = SL::DB::Business->new(id => $filter->{order}{customer}{"business_id"})->load->description if $filter->{order}{customer}{"business_id"}; $employee = SL::DB::Employee->new(id => $filter->{order}{employee_id})->load->name if $filter->{order}{employee_id}; $department = SL::DB::Department->new(id => $filter->{order}{department_id})->load->description if $filter->{order}{department_id}; + $assembly_item_number = $::form->{assembly_item_number}; my @filters = ( [ $filter->{order}{"ordnumber:substr::ilike"}, $::locale->text('Number') ], @@ -139,6 +143,7 @@ sub make_filter_summary { [ $business, $::locale->text('Customer type') ], [ $department, $::locale->text('Department') ], [ $employee, $::locale->text('Employee') ], + [ $assembly_item_number, $::locale->text('Assembly Item Number') ], ); my %flags = ( @@ -160,14 +165,13 @@ sub make_filter_summary { sub delivery_plan_query_linked_items { my ($self) = @_; - my $vc = $self->vc; + my $record_type = ($self->vc eq 'customer' ? SALES_ORDER_TYPE() : PURCHASE_ORDER_TYPE()); my $employee_id = SL::DB::Manager::Employee->current->id; my $oe_owner = $_[0]->all_edit_right ? '' : " oe.employee_id = $employee_id AND"; [ - "order.${vc}_id" => { gt => 0 }, + record_type => $record_type, 'order.closed' => 0, - or => [ 'order.quotation' => 0, 'order.quotation' => undef ], # filter by shipped_qty < qty, read from innermost to outermost 'id' => [ \" @@ -176,8 +180,7 @@ sub delivery_plan_query_linked_items { FROM orderitems oi, oe, record_links rl, delivery_order_items doi WHERE oe.id = oi.trans_id AND - oe.${vc}_id IS NOT NULL AND - (oe.quotation = 'f' OR oe.quotation IS NULL) AND + oe.record_type = '$record_type' AND NOT oe.closed AND $oe_owner doi.id = rl.to_id AND @@ -195,8 +198,7 @@ sub delivery_plan_query_linked_items { SELECT oi.id FROM orderitems oi, oe WHERE oe.id = oi.trans_id AND - oe.${vc}_id IS NOT NULL AND - (oe.quotation = 'f' OR oe.quotation IS NULL) AND + oe.record_type = '$record_type' AND NOT oe.closed AND $oe_owner NOT EXISTS ( @@ -218,6 +220,28 @@ sub init_models { my $query = $self->delivery_plan_query_linked_items; + if ($::form->{assembly_item_number}) { + + my $assembly_parts = SL::DB::Manager::Part->get_all(where => [ partnumber => { ilike => '%' . $::form->{assembly_item_number} . '%' } ]); + + my @assemblies; + + foreach my $assembly_part (@{ $assembly_parts }) { + push @assemblies, SL::DB::Manager::Assembly->get_all(where => [parts_id =>$assembly_part->id]); + } + + if (scalar @assemblies > 0) { + my %assembly_ids; + foreach my $list (@assemblies) { + foreach my $assembly (@{ $list }) { + $assembly_ids{$assembly->id} = 1; + } + } + my @assembly_ids_array = (keys %assembly_ids); + $::form->{filter}{part}{id} = { or => [ @assembly_ids_array ] }; + } + } + SL::Controller::Helper::GetModels->new( controller => $self, model => 'OrderItem', @@ -258,14 +282,8 @@ sub link_to { if ($object->isa('SL::DB::Order')) { my $type = $object->type; - my $vc = $object->is_sales ? 'customer' : 'vendor'; my $id = $object->id; - - if ($::instance_conf->get_feature_experimental_order) { - return "controller.pl?action=Order/$action&type=$type&id=$id"; - } else { - return "oe.pl?action=$action&type=$type&vc=$vc&id=$id"; - } + return "controller.pl?action=Order/$action&type=$type&id=$id"; } if ($object->isa('SL::DB::Part')) { my $id = $object->id;