X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/286dc87cc642f56970bf406949230af965946f2d..000588da:/SL/DO.pm diff --git a/SL/DO.pm b/SL/DO.pm index 57e971ecb..469d36592 100644 --- a/SL/DO.pm +++ b/SL/DO.pm @@ -373,6 +373,7 @@ SQL conv_i($sinfo->{bin_id}), $sinfo->{chargenumber}, conv_date($sinfo->{bestbefore}), conv_i($sinfo->{"delivery_order_items_stock_id"})); do_statement($form, $h_item_stock, $q_item_stock, @values); + push @processed_dois, $sinfo->{"delivery_order_items_stock_id"}; } CVar->save_custom_variables(module => 'IC', @@ -385,7 +386,18 @@ SQL dbh => $dbh); } - # search for orphaned doi + # 1. search for orphaned dois; processed_dois may be empty (no transfer) TODO: be supersafe and alter same statement for doi and oi + $query = sprintf 'SELECT id FROM delivery_order_items_stock WHERE delivery_order_item_id in + (select id from delivery_order_items where delivery_order_id = ?)'; + $query .= sprintf ' AND NOT id IN (%s)', join ', ', ("?") x scalar @processed_dois if (scalar @processed_dois); + @values = (conv_i($form->{id}), map { conv_i($_) } @processed_dois); + my @orphaned_dois_ids = map { $_->{id} } selectall_hashref_query($form, $dbh, $query, @values); + if (scalar @orphaned_dois_ids) { + # clean up delivery_order_items_stock + $query = sprintf 'DELETE FROM delivery_order_items_stock WHERE id IN (%s)', join ', ', ("?") x scalar @orphaned_dois_ids; + do_query($form, $dbh, $query, @orphaned_dois_ids); + } + # 2. search for orphaned doi $query = sprintf 'SELECT id FROM delivery_order_items WHERE delivery_order_id = ? AND NOT id IN (%s)', join ', ', ("?") x scalar @processed_doi; @values = (conv_i($form->{id}), map { conv_i($_) } @processed_doi); my @orphaned_ids = map { $_->{id} } selectall_hashref_query($form, $dbh, $query, @values);