+ ->on('.reformat_number', 'change', 'reformat_number')
+ ->focus('#add_item_parts_id_name');
+
+ $self->_js_redisplay_amounts_and_taxes;
+ $self->js->render();
+}
+
+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);
+}
+
+sub action_multi_items_update_result {
+ $_[0]->render('order/tabs/_multi_items_result', { layout => 0 },
+ multi_items => $_[0]->multi_items_models->get);
+}
+
+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, _make_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);
+
+ $self->js
+ ->append('#row_table_id', $row_as_html)
+ ->run('row_set_keyboard_events_by_id', $item_id);
+ }
+
+ $self->js
+ ->run('close_multi_items_dialog')
+ ->run('row_table_scroll_down')
+ ->on('.recalc', 'change', 'recalc_amounts_and_taxes')
+ ->on('.reformat_number', 'change', 'reformat_number')