Spalte taxnumber aus Tabelle tax entfernt
[kivitendo-erp.git] / SL / Controller / Order.pm
index 2500270..2f4a68f 100644 (file)
@@ -39,7 +39,7 @@ use Sort::Naturally;
 use Rose::Object::MakeMethods::Generic
 (
  scalar => [ qw(item_ids_to_delete) ],
- 'scalar --get_set_init' => [ qw(order valid_types type cv p multi_items_models all_price_factors) ],
+ 'scalar --get_set_init' => [ qw(order valid_types type cv p multi_items_models all_price_factors search_cvpartnumber) ],
 );
 
 
@@ -685,6 +685,7 @@ sub action_customer_vendor_changed {
     ->focus(      '#order_' . $self->cv . '_id');
 
   $self->js_redisplay_amounts_and_taxes;
+  $self->js_redisplay_cvpartnumbers;
   $self->js->render();
 }
 
@@ -755,12 +756,15 @@ sub action_add_item {
 
   $self->recalc();
 
+  $self->get_item_cvpartnumber($item);
+
   my $item_id = join('_', 'new', Time::HiRes::gettimeofday(), int rand 1000000000000);
   my $row_as_html = $self->p->render('order/tabs/_row',
-                                     ITEM              => $item,
-                                     ID                => $item_id,
-                                     TYPE              => $self->type,
-                                     ALL_PRICE_FACTORS => $self->all_price_factors
+                                     ITEM                => $item,
+                                     ID                  => $item_id,
+                                     TYPE                => $self->type,
+                                     ALL_PRICE_FACTORS   => $self->all_price_factors,
+                                     SEARCH_CVPARTNUMBER => $self->search_cvpartnumber,
   );
 
   $self->js
@@ -781,12 +785,14 @@ sub action_add_item {
 
       $self->order->add_items( $item );
       $self->recalc();
+      $self->get_item_cvpartnumber($item);
       my $item_id = join('_', 'new', Time::HiRes::gettimeofday(), int rand 1000000000000);
       my $row_as_html = $self->p->render('order/tabs/_row',
-                                         ITEM              => $item,
-                                         ID                => $item_id,
-                                         TYPE              => $self->type,
-                                         ALL_PRICE_FACTORS => $self->all_price_factors
+                                         ITEM                => $item,
+                                         ID                  => $item_id,
+                                         TYPE                => $self->type,
+                                         ALL_PRICE_FACTORS   => $self->all_price_factors,
+                                         SEARCH_CVPARTNUMBER => $self->search_cvpartnumber,
       );
       $self->js
         ->append('#row_table_id', $row_as_html);
@@ -862,12 +868,14 @@ sub action_add_multi_items {
   $self->recalc();
 
   foreach my $item (@items) {
+    $self->get_item_cvpartnumber($item);
     my $item_id = join('_', 'new', Time::HiRes::gettimeofday(), int rand 1000000000000);
     my $row_as_html = $self->p->render('order/tabs/_row',
-                                       ITEM              => $item,
-                                       ID                => $item_id,
-                                       TYPE              => $self->type,
-                                       ALL_PRICE_FACTORS => $self->all_price_factors
+                                       ITEM                => $item,
+                                       ID                  => $item_id,
+                                       TYPE                => $self->type,
+                                       ALL_PRICE_FACTORS   => $self->all_price_factors,
+                                       SEARCH_CVPARTNUMBER => $self->search_cvpartnumber,
     );
 
     $self->js->append('#row_table_id', $row_as_html);
@@ -900,13 +908,16 @@ sub action_reorder_items {
   my ($self) = @_;
 
   my %sort_keys = (
-    partnumber  => sub { $_[0]->part->partnumber },
-    description => sub { $_[0]->description },
-    qty         => sub { $_[0]->qty },
-    sellprice   => sub { $_[0]->sellprice },
-    discount    => sub { $_[0]->discount },
+    partnumber   => sub { $_[0]->part->partnumber },
+    description  => sub { $_[0]->description },
+    qty          => sub { $_[0]->qty },
+    sellprice    => sub { $_[0]->sellprice },
+    discount     => sub { $_[0]->discount },
+    cvpartnumber => sub { $_[0]->{cvpartnumber} },
   );
 
+  $self->get_item_cvpartnumber($_) for @{$self->order->items_sorted};
+
   my $method = $sort_keys{$::form->{order_by}};
   my @to_sort = map { { old_pos => $_->position, order_by => $method->($_) } } @{ $self->order->items_sorted };
   if ($::form->{sort_dir}) {
@@ -1054,6 +1065,17 @@ sub js_redisplay_amounts_and_taxes {
     ->insertBefore($self->build_tax_rows, '#amount_row_id');
 }
 
+sub js_redisplay_cvpartnumbers {
+  my ($self) = @_;
+
+  $self->get_item_cvpartnumber($_) for @{$self->order->items_sorted};
+
+  my @data = map {[$_->{cvpartnumber}]} @{ $self->order->items_sorted };
+
+  $self->js
+    ->run('kivi.Order.redisplay_cvpartnumbers', \@data);
+}
+
 sub js_reset_order_and_item_ids_after_save {
   my ($self) = @_;
 
@@ -1070,6 +1092,7 @@ sub js_reset_order_and_item_ids_after_save {
       ->val ('[name="orderitem_ids[+]"][value="' . $form_item_id . '"]', $self->order->items_sorted->[$idx]->id)
       ->val ('#item_' . $form_item_id, $self->order->items_sorted->[$idx]->id)
       ->attr('#item_' . $form_item_id, "id", 'item_' . $self->order->items_sorted->[$idx]->id);
+  } continue {
     $idx++;
   }
   $self->js->val('[name="converted_from_orderitems_ids[+]"]', '');
@@ -1103,6 +1126,17 @@ sub init_cv {
   return $cv;
 }
 
+sub init_search_cvpartnumber {
+  my ($self) = @_;
+
+  my $user_prefs = SL::Helper::UserPreferences::PartPickerSearch->new();
+  my $search_cvpartnumber;
+  $search_cvpartnumber = !!$user_prefs->get_sales_search_customer_partnumber() if $self->cv eq 'customer';
+  $search_cvpartnumber = !!$user_prefs->get_purchase_search_makemodel()        if $self->cv eq 'vendor';
+
+  return $search_cvpartnumber;
+}
+
 sub init_p {
   SL::Presenter->get;
 }
@@ -1600,6 +1634,8 @@ sub pre_render {
                                                 } } @all_objects;
   }
 
+  $self->get_item_cvpartnumber($_) for @{$self->order->items_sorted};
+
   $::request->{layout}->use_javascript("${_}.js") for qw(kivi.SalesPurchase kivi.Order kivi.File ckeditor/ckeditor ckeditor/adapters/jquery edit_periodic_invoices_config calculate_qty);
   $self->setup_edit_action_bar;
 }
@@ -1829,6 +1865,18 @@ sub get_title_for {
        : '';
 }
 
+sub get_item_cvpartnumber {
+  my ($self, $item) = @_;
+
+  if ($self->cv eq 'vendor') {
+    my @mms = grep { $_->make eq $self->order->customervendor->id } @{$item->part->makemodels};
+    $item->{cvpartnumber} = $mms[0]->model if scalar @mms;
+  } elsif ($self->cv eq 'customer') {
+    my @cps = grep { $_->customer_id eq $self->order->customervendor->id } @{$item->part->customerprices};
+    $item->{cvpartnumber} = $cps[0]->customer_partnumber if scalar @cps;
+  }
+}
+
 sub sales_order_type {
   'sales_order';
 }