- # fail safe, only allow disassemble in certain intervals
- my $undo_date = DateTime->today->subtract(days => $::instance_conf->get_undo_transfer_interval);
-
- foreach my $assembly_id (@{ $::form->{ids}} ) {
- my $assembly_parts;
- $assembly_parts = SL::DB::Manager::AssemblyInventoryPart->get_all(where => [ inventory_assembly_id => $assembly_id ]);
- $form->show_generic_error(t8('No relations found for #1', $assembly_id)) unless $assembly_parts;
- # check first entry for insertdate
- # everything in one transaction
- my $db = SL::DB::Inventory->new->db;
- $db->with_transaction(sub {
- my ($assembly_entry, $part_entry);
- foreach my $assembly_part (@{ $assembly_parts }) {
- die("No valid entry found") unless (ref($assembly_part) eq 'SL::DB::AssemblyInventoryPart');
- # fail safe undo date
- die("Invalid time interval") unless DateTime->compare($assembly_part->itime, $undo_date);
-
- $assembly_entry //= $assembly_part->assembly;
- $part_entry = $assembly_part->part;
- $assembly_part->delete;
- $part_entry->delete;
- }
- flash_later('info', t8("Disassembly successful for #1", $assembly_entry->part->partnumber));
-
- $assembly_entry->delete;
+ # everything in one transaction
+ my $db = SL::DB::Inventory->new->db;
+ $db->with_transaction(sub {