+ if (!$ref->{"part_inventory_accno_id"}) {
+ map({ delete($ref->{$_}); } qw(inventory_accno inventory_new_chart inventory_valid));
+ }
+ delete($ref->{"part_inventory_accno_id"});
+
+ # in collective order, copy global ordnumber, transdate, cusordnumber into item scope
+ # unless already present there
+ # remove _oe entries afterwards
+ map { $ref->{$_} = $ref->{"${_}_oe"} if ($ref->{$_} eq '') }
+ qw|ordnumber transdate cusordnumber|
+ if (@ids);
+ map { delete $ref->{$_} } qw|ordnumber_oe transdate_oe cusordnumber_oe|;
+
+
+
+ while ($ref->{inventory_new_chart} && ($ref->{inventory_valid} >=0)) {
+ my $query = qq| SELECT accno AS inventory_accno, new_chart_id AS inventory_new_chart, date($transdate) - valid_from AS inventory_valid FROM chart WHERE id = $ref->{inventory_new_chart}|;
+ my $stw = $dbh->prepare($query);
+ $stw->execute || $form->dberror($query);
+ ($ref->{inventory_accno}, $ref->{inventory_new_chart}, $ref->{inventory_valid}) = $stw->fetchrow_array;
+ $stw->finish;
+ }
+
+ while ($ref->{income_new_chart} && ($ref->{income_valid} >=0)) {
+ my $query = qq| SELECT accno AS income_accno, new_chart_id AS income_new_chart, date($transdate) - valid_from AS income_valid FROM chart WHERE id = $ref->{income_new_chart}|;
+ my $stw = $dbh->prepare($query);
+ $stw->execute || $form->dberror($query);
+ ($ref->{income_accno}, $ref->{income_new_chart}, $ref->{income_valid}) = $stw->fetchrow_array;
+ $stw->finish;
+ }
+
+ while ($ref->{expense_new_chart} && ($ref->{expense_valid} >=0)) {
+ my $query = qq| SELECT accno AS expense_accno, new_chart_id AS expense_new_chart, date($transdate) - valid_from AS expense_valid FROM chart WHERE id = $ref->{expense_new_chart}|;
+ my $stw = $dbh->prepare($query);
+ $stw->execute || $form->dberror($query);
+ ($ref->{expense_accno}, $ref->{expense_new_chart}, $ref->{expense_valid}) = $stw->fetchrow_array;
+ $stw->finish;
+ }
+
+ # delete orderitems_id in collective orders, so that they get cloned no matter what
+ delete $ref->{orderitems_id} if (@ids);