+sub _oe_remove_delivered_or_billed_rows {
+ my (%params) = @_;
+
+ return if !$params{id} || !$params{type};
+
+ my $ord_quot = SL::DB::Order->new(id => $params{id})->load;
+ return if !$ord_quot;
+
+ my %args = (
+ direction => 'to',
+ to => $params{type} eq 'delivered' ? 'DeliveryOrder' : 'Invoice',
+ via => [ $params{type} eq 'delivered' ? qw(Order) : qw(Order DeliveryOrder) ],
+ );
+
+ my %handled_base_qtys;
+ foreach my $record (@{ $ord_quot->linked_records(%args) }) {
+ next if $ord_quot->is_sales != $record->is_sales;
+
+ foreach my $item (@{ $record->items }) {
+ my $key = $item->parts_id;
+ $key .= ':' . $item->serialnumber if $item->serialnumber;
+ $handled_base_qtys{$key} += $item->qty * $item->unit_obj->base_factor;
+ }
+ }
+
+ _remove_billed_or_delivered_rows(quantities => \%handled_base_qtys);
+}
+