]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Auftrags-Controller: Artikel-Mehrfachauswahl auf die des PartPickers umgestellt
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Tue, 26 Jan 2021 15:38:14 +0000 (16:38 +0100)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 27 Jan 2021 11:26:15 +0000 (12:26 +0100)
SL/Controller/Order.pm
js/kivi.Order.js
templates/webpages/order/tabs/_item_input.html
templates/webpages/order/tabs/_multi_items_dialog.html [deleted file]
templates/webpages/order/tabs/_multi_items_result.html [deleted file]
templates/webpages/order/tabs/basic_data.html

index b51802f629835ba7f9852e650fe6e1b7d3f9c876..88ff3d296a7862f59a1db828676820b4bde0578b 100644 (file)
@@ -43,7 +43,7 @@ use Sort::Naturally;
 use Rose::Object::MakeMethods::Generic
 (
  scalar => [ qw(item_ids_to_delete is_custom_shipto_to_delete) ],
 use Rose::Object::MakeMethods::Generic
 (
  scalar => [ qw(item_ids_to_delete is_custom_shipto_to_delete) ],
- 'scalar --get_set_init' => [ qw(order valid_types type cv p multi_items_models all_price_factors search_cvpartnumber show_update_button) ],
+ 'scalar --get_set_init' => [ qw(order valid_types type cv p all_price_factors search_cvpartnumber show_update_button) ],
 );
 
 
 );
 
 
@@ -791,38 +791,11 @@ sub action_add_item {
   $self->js->render();
 }
 
   $self->js->render();
 }
 
-# open the dialog for entering multiple items at once
-sub action_show_multi_items_dialog {
-  $_[0]->render('order/tabs/_multi_items_dialog', { layout => 0 },
-                all_partsgroups => SL::DB::Manager::PartsGroup->get_all);
-}
-
-# update the filter results in the multi item dialog
-sub action_multi_items_update_result {
-  my $max_count = 100;
-
-  $::form->{multi_items}->{filter}->{obsolete} = 0;
-
-  my $count = $_[0]->multi_items_models->count;
-
-  if ($count == 0) {
-    my $text = SL::Presenter::EscapedText->new(text => $::locale->text('No results.'));
-    $_[0]->render($text, { layout => 0 });
-  } elsif ($count > $max_count) {
-    my $text = SL::Presenter::EscapedText->new(text => $::locale->text('Too many results (#1 from #2).', $count, $max_count));
-    $_[0]->render($text, { layout => 0 });
-  } else {
-    my $multi_items = $_[0]->multi_items_models->get;
-    $_[0]->render('order/tabs/_multi_items_result', { layout => 0 },
-                  multi_items => $multi_items);
-  }
-}
-
 # add item rows for multiple items at once
 sub action_add_multi_items {
   my ($self) = @_;
 
 # add item rows for multiple items at once
 sub action_add_multi_items {
   my ($self) = @_;
 
-  my @form_attr = grep { $_->{qty_as_number} } @{ $::form->{add_multi_items} };
+  my @form_attr = grep { $_->{qty_as_number} } @{ $::form->{add_items} };
   return $self->js->render() unless scalar @form_attr;
 
   my @items;
   return $self->js->render() unless scalar @form_attr;
 
   my @items;
@@ -867,7 +840,7 @@ sub action_add_multi_items {
   }
 
   $self->js
   }
 
   $self->js
-    ->run('kivi.Order.close_multi_items_dialog')
+    ->run('kivi.Part.close_picker_dialogs')
     ->run('kivi.Order.init_row_handlers')
     ->run('kivi.Order.renumber_positions')
     ->focus('#add_item_parts_id_name');
     ->run('kivi.Order.init_row_handlers')
     ->run('kivi.Order.renumber_positions')
     ->focus('#add_item_parts_id_name');
@@ -1183,24 +1156,6 @@ sub init_order {
   $_[0]->make_order;
 }
 
   $_[0]->make_order;
 }
 
-# model used to filter/display the parts in the multi-items dialog
-sub init_multi_items_models {
-  SL::Controller::Helper::GetModels->new(
-    controller     => $_[0],
-    model          => 'Part',
-    with_objects   => [ qw(unit_obj) ],
-    disable_plugin => 'paginated',
-    source         => $::form->{multi_items},
-    sorted         => {
-      _default    => {
-        by  => 'partnumber',
-        dir => 1,
-      },
-      partnumber  => t8('Partnumber'),
-      description => t8('Description')}
-  );
-}
-
 sub init_all_price_factors {
   SL::DB::Manager::PriceFactor->get_all;
 }
 sub init_all_price_factors {
   SL::DB::Manager::PriceFactor->get_all;
 }
@@ -2175,14 +2130,6 @@ One row for already entered items
 
 Displaying tax information
 
 
 Displaying tax information
 
-=item * C<template/webpages/order/tabs/_multi_items_dialog.html>
-
-Dialog for entering more than one item at once
-
-=item * C<template/webpages/order/tabs/_multi_items_result.html>
-
-Results for the filter in the multi items dialog
-
 =item * C<template/webpages/order/tabs/_price_sources_dialog.html>
 
 Dialog for selecting price and discount sources
 =item * C<template/webpages/order/tabs/_price_sources_dialog.html>
 
 Dialog for selecting price and discount sources
@@ -2256,11 +2203,6 @@ Sorting does not include C<position>, neither does reordering.
 This behavior was implemented intentionally. But we can discuss, which behavior
 should be implemented.
 
 This behavior was implemented intentionally. But we can discuss, which behavior
 should be implemented.
 
-=item *
-
-C<show_multi_items_dialog> does not use the currently inserted string for
-filtering.
-
 =back
 
 =head1 To discuss / Nice to have
 =back
 
 =head1 To discuss / Nice to have
index 938cfb7d087be570bddcf69b9834f344dc4d8e4c..62267554102db4c41c2386c3297d54f3e86cf4f2 100644 (file)
@@ -458,111 +458,14 @@ namespace('kivi.Order', function(ns) {
     $.post("controller.pl", data, kivi.eval_json_result);
   };
 
     $.post("controller.pl", data, kivi.eval_json_result);
   };
 
-  ns.setup_multi_items_dialog = function() {
-    $('#multi_items_filter_table input, #multi_items_filter_table select').keydown(function(event) {
-      if (event.keyCode == 13) {
-        event.preventDefault();
-        ns.multi_items_dialog_update_result();
-        return false;
-      }
-    });
-
-    $('#multi_items_filter_all_substr_multi_ilike').focus();
-  };
-
-  ns.show_multi_items_dialog = function() {
-    if (!ns.check_cv()) return;
-
-    $('#row_table_id thead a img').remove();
-
-    kivi.popup_dialog({
-      url:    'controller.pl?action=Order/show_multi_items_dialog',
-      data:   { type: $('#type').val() },
-      id:     'jq_multi_items_dialog',
-      load:   kivi.Order.setup_multi_items_dialog,
-      dialog: {
-        title:  kivi.t8('Add multiple items'),
-        width:  800,
-        height: 500
-      }
-    });
-    return true;
-  };
-
-  ns.close_multi_items_dialog = function() {
-    $('#jq_multi_items_dialog').dialog('close');
-  };
-
-  ns.multi_items_dialog_update_result = function() {
-    var data = $('#multi_items_form').serializeArray();
-    data.push({ name: 'type', value: $('#type').val() });
-    $.ajax({
-      url:     'controller.pl?action=Order/multi_items_update_result',
-      data:    data,
-      method:  'post',
-      success: function(data) {
-        $('#multi_items_result').html(data);
-        ns.multi_items_dialog_enable_continue();
-        ns.multi_items_result_setup_events();
-      }
-    });
-  };
-
-  ns.multi_items_dialog_disable_continue = function() {
-    // disable keydown-event and continue button to prevent
-    // impatient users to add parts multiple times
-    $('#multi_items_result input, #multi_items_position').off("keydown");
-    $('#multi_items_dialog_continue_button').prop('disabled', true);
-  };
-
-  ns.multi_items_dialog_enable_continue = function()  {
-    $('#multi_items_result input, #multi_items_position').keydown(function(event) {
-      if(event.keyCode == 13) {
-        event.preventDefault();
-        ns.add_multi_items();
-        return false;
-      }
-    });
-    $('#multi_items_dialog_continue_button').prop('disabled', false);
-  };
-
-  ns.multi_items_result_setup_events = function() {
-    $('#multi_items_all_qty').change(ns.reformat_number);
-    $('#multi_items_all_qty').change(function(event) {
-      $('.multi_items_qty').val($(event.target).val());
-    });
-    $('.multi_items_qty').change(ns.reformat_number);
-  }
-
-  ns.add_multi_items = function() {
-    // rows at all
-    var n_rows = $('.multi_items_qty').length;
-    if (n_rows == 0) return;
-
-    // filled rows
-    n_rows = $('.multi_items_qty').filter(function() {
-      return $(this).val().length > 0;
-    }).length;
-    if (n_rows == 0) return;
-
-    ns.multi_items_dialog_disable_continue();
-
+  ns.add_multi_items = function(data) {
     var insert_before_item_id = ns.get_insert_before_item_id($('#multi_items_position').val());
     var insert_before_item_id = ns.get_insert_before_item_id($('#multi_items_position').val());
-
-    var data = $('#order_form').serializeArray();
-    data = data.concat($('#multi_items_form').serializeArray());
+    data = data.concat($('#order_form').serializeArray());
     data.push({ name: 'action', value: 'Order/add_multi_items' },
               { name: 'insert_before_item_id', value: insert_before_item_id });
     $.post("controller.pl", data, kivi.eval_json_result);
   };
 
     data.push({ name: 'action', value: 'Order/add_multi_items' },
               { name: 'insert_before_item_id', value: insert_before_item_id });
     $.post("controller.pl", data, kivi.eval_json_result);
   };
 
-  ns.set_input_to_one = function(clicked) {
-    if ($(clicked).val() == '') {
-      $(clicked).val(kivi.format_amount(1.00, -2));
-    }
-    $(clicked).select();
-  };
-
   ns.delete_order_item_row = function(clicked) {
     var row = $(clicked).parents("tbody").first();
     $(row).remove();
   ns.delete_order_item_row = function(clicked) {
     var row = $(clicked).parents("tbody").first();
     $(row).remove();
index d5c0ad0c3a062d170771547df83761faab4d1a93..7d76df2c09e3d2656e0976563b00081901a03b39 100644 (file)
         <td>
           [%- SET PARAM_KEY = SELF.cv == "customer" ? 'with_customer_partnumber' : 'with_makemodel' -%]
           [%- SET PARAM_VAL = SELF.search_cvpartnumber -%]
         <td>
           [%- SET PARAM_KEY = SELF.cv == "customer" ? 'with_customer_partnumber' : 'with_makemodel' -%]
           [%- SET PARAM_VAL = SELF.search_cvpartnumber -%]
-          [% P.part.picker('add_item.parts_id', '', fat_set_item=1, style='width: 300px', class="add_item_input", $PARAM_KEY=PARAM_VAL) %]</td>
+          [% P.part.picker('add_item.parts_id', '', style='width: 300px', class="add_item_input",
+                            fat_set_item=1,
+                            multiple_pos_input=1,
+                            action={set_multi_items='kivi.Order.add_multi_items'},
+                            $PARAM_KEY=PARAM_VAL) %]</td>
         <td>[% L.input_tag('add_item.description', '', class="add_item_input") %]</td>
         <td>
           [% L.input_tag('add_item.qty_as_number', '', size = 5, class="add_item_input numeric") %]
         <td>[% L.input_tag('add_item.description', '', class="add_item_input") %]</td>
         <td>
           [% L.input_tag('add_item.qty_as_number', '', size = 5, class="add_item_input numeric") %]
diff --git a/templates/webpages/order/tabs/_multi_items_dialog.html b/templates/webpages/order/tabs/_multi_items_dialog.html
deleted file mode 100644 (file)
index 77cc1e5..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-[%- USE T8 %][%- USE HTML %][%- USE L %][%- USE LxERP %]
-
-<form method="post" id="multi_items_form" method="POST">
-
-<table id='multi_items_filter_table'>
-  <tr>
-    <th>[%- LxERP.t8("Description") %]/[%- LxERP.t8("Partnumber") %]:</th>
-    <td>[%- L.input_tag('multi_items.filter.all:substr:multi::ilike', '') %]</td>
-    <th>[%- LxERP.t8("Partsgroup") %]</th>
-    <td>[%- L.select_tag('multi_items.filter.partsgroup_id', all_partsgroups, title_key='displayable_name', value_key='id', with_empty=1) %]</td>
-  <tr>
-</table>
-
-[% L.button_tag('kivi.Order.multi_items_dialog_update_result()', LxERP.t8('Filter')) %]
-[% L.button_tag('$("#multi_items_form").resetForm()', LxERP.t8('Reset')) %]
-
-<hr>
-<div id='multi_items_result'></div>
-<hr>
-
-[% 'At position' | $T8 %]
-[% L.input_tag('multi_items.position', '', size = 5, class="numeric") %]</td>
-[% L.button_tag('kivi.Order.add_multi_items()', LxERP.t8('Continue'), id='multi_items_dialog_continue_button') %]
-<a href="#" onclick="kivi.Order.close_multi_items_dialog();">[%- LxERP.t8("Cancel") %]</a>
-
-
-</form>
diff --git a/templates/webpages/order/tabs/_multi_items_result.html b/templates/webpages/order/tabs/_multi_items_result.html
deleted file mode 100644 (file)
index 527328a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-[%- USE T8 %][%- USE HTML %][%- USE L %][%- USE LxERP %]
-
-<table width="100%">
-    <tr>
-      <td>[% 'for all' | $T8 %]
-      <td>[% L.input_tag("multi_items.all_qty", '', size = 5, class='numeric') %]</td>
-    </tr>
-    <tr>
-      <td colspan="5"><hr></td>
-    </tr>
-  [%- FOREACH item = multi_items %]
-    <tr>
-      <td></td>
-      <td>
-        [% L.hidden_tag("add_multi_items[+].parts_id", item.id) %]
-        [% L.input_tag("add_multi_items[].qty_as_number", '', size = 5,
-                       class = 'multi_items_qty numeric', onclick = 'kivi.Order.set_input_to_one(this)') %]
-      </td>
-      <td>[% HTML.escape(item.unit) %]</td>
-      <td>[% HTML.escape(item.partnumber) %]</td>
-      <td>[% HTML.escape(item.description) %]</td>
-    </tr>
-  [%- END %]
-</table>
index 05a663c1c0b7b6158c1ceb56314c8396024959df..18aed5ad40eba5deb35664e88a90aef6fd486d5a 100644 (file)
 
   [%- PROCESS order/tabs/_item_input.html SELF=SELF %]
 
 
   [%- PROCESS order/tabs/_item_input.html SELF=SELF %]
 
-  [% L.button_tag('kivi.Order.show_multi_items_dialog()', LxERP.t8('Add multiple items')) %]
+  [% L.button_tag('$("#add_item_parts_id").data("part_picker").o.multiple=1; $("#add_item_parts_id").data("part_picker").open_dialog()', LxERP.t8('Add multiple items')) %]
 
   <table width="100%">
     <tr>
 
   <table width="100%">
     <tr>