]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Controller/DeliveryPlan.pm
restart apache2 in postinst
[mfinanz.git] / SL / Controller / DeliveryPlan.pm
index 6d7aaa908ba19481eb1aaabd7de9808f5cacb2ae..0a120c6ec0b6e24d82d61e770ccccdd724940c30 100644 (file)
@@ -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;