- my $mode = delete($form->{select_item_mode}) || croak 'Missing item selection mode';
- my $id = delete($form->{select_item_id}) || croak 'Missing item selection ID';
- my $i = $form->{ $mode eq 'IC' ? 'assembly_rows' : 'rowcount' };
+ my $mode = delete($form->{select_item_mode}) || croak 'Missing item selection mode';
+ my $row_key = $mode eq 'IC' ? 'assembly_rows' : 'rowcount';
+ my $curr_row = $form->{ $row_key };
+
+ my $row = $curr_row;
+
+ if ($myconfig{item_multiselect}) {
+ foreach (grep(/^select_qty_/, keys(%{ $form }))) {
+ next unless $form->{$_};
+ $_ =~ /^select_qty_(\d+)/;
+ $form->{"id_${row}"} = $1;
+ $form->{"qty_${row}"} = $form->{$_};
+ $row++;
+ }
+ } else {
+ $form->{"id_${row}"} = delete($form->{select_item_id}) || croak 'Missing item selection ID';
+ $row++;
+ }
+
+ map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
+ qw(sellprice listprice weight);
+
+ if ( $mode eq 'IC' ) {
+ # assembly mode:
+ # the qty variables of the existing assembly items are all still formatted, so we parse them here
+ # including the qty of the just added part
+ $form->{"qty_$_"} = $form->parse_amount(\%myconfig, $form->{"qty_$_"}) for (1 .. $row - 1);
+ } else {
+ if ($myconfig{item_multiselect}) {
+ # other modes and multiselection:
+ # parse all newly entered qtys
+ $form->{"qty_$_"} = $form->parse_amount(\%myconfig, $form->{"qty_$_"}) for ($curr_row .. $row - 1);
+ }
+ }
+
+ for my $i ($curr_row .. $row - 1) {
+ $form->{ $row_key } = $i;
+
+ my $id = $form->{"id_${i}"};