Use savepoint for aci update
authorJason Stephenson <jason@sigio.com>
Sat, 8 Jan 2022 19:01:43 +0000 (14:01 -0500)
committerJason Stephenson <jason@sigio.com>
Sat, 8 Jan 2022 19:04:48 +0000 (14:04 -0500)
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm

index 23f99d4..7e57a65 100644 (file)
@@ -376,19 +376,35 @@ __PACKAGE__->register_method(
 
 sub update_copy_inventory {
     my( $self, $conn, $auth, $args ) = @_;
-    my $e = new_editor(authtoken=>$auth, xact=>1);
-    return $e->die_event unless $e->checkauth;
+    my $e = new_editor(authtoken=>$auth);
+    return [0, 0, $e->die_event] unless $e->checkauth;
 
+    my ($success,$failure) = (0,0);
+
+    $e->xact_begin();
     my $copies = $$args{copy_list};
     foreach my $copyid (@$copies) {
         my $aci = Fieldmapper::asset::copy_inventory->new;
         $aci->inventory_date('now');
         $aci->inventory_workstation($e->requestor->wsid);
         $aci->copy($copyid);
-        $e->create_asset_copy_inventory($aci) or return $e->die_event;
+        my $spname = "aci_savepoint${success}";
+        $e->set_savepoint($spname);
+        if ($e->create_asset_copy_inventory($aci)) {
+            $success++;
+        } else {
+            $failure++;
+            $e->rollback_savepoint($spname);
+        }
+        $e->release_savepoint($spname);
     }
-    $e->commit;
-    return 1;
+    if ($success) {
+        $e->commit();
+    } else {
+        $e->rollback();
+    }
+
+    return [ $success, $failure ];
 }
 
 __PACKAGE__->register_method(