+# open the dialog for entering multiple items at once
+sub action_show_multi_items_dialog {
+ require SL::DB::PartsGroup;
+ $_[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 add once
+sub action_add_multi_items {
+ my ($self) = @_;
+
+ my @form_attr = grep { $_->{qty_as_number} } @{ $::form->{add_multi_items} };
+ return $self->js->render() unless scalar @form_attr;
+
+ my @items;
+ foreach my $attr (@form_attr) {
+ push @items, _new_item($self->order, $attr);
+ }
+ $self->order->add_items(@items);
+
+ $self->_recalc();
+
+ foreach my $item (@items) {
+ 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,
+ ALL_PRICE_FACTORS => $self->all_price_factors
+ );
+
+ $self->js->append('#row_table_id', $row_as_html);
+ }
+
+ $self->js
+ ->run('kivi.Order.close_multi_items_dialog')
+ ->run('kivi.Order.init_row_handlers')
+ ->run('kivi.Order.row_table_scroll_down')
+ ->run('kivi.Order.renumber_positions')
+ ->focus('#add_item_parts_id_name');
+
+ $self->_js_redisplay_amounts_and_taxes;
+ $self->js->render();
+}
+
+# recalculate all linetotals, amounts and taxes and redisplay them