From 2bf12091dba97f1590425cfa97557ce57db6eb65 Mon Sep 17 00:00:00 2001 From: Jason Stephenson Date: Sat, 8 Jan 2022 14:01:43 -0500 Subject: [PATCH] LP1883171 & LP1940663: Modify new update inventory method Modify the new circ update asset copy inventory method based on testing: 1. Use savepoints to allow some updates to succeed when others fail. 2. Modify the return value to include success and failure counts so that these could potentially be used in client feedback. This work was sponsored by NOBLE. Signed-off-by: Jason Stephenson --- .../src/perlmods/lib/OpenILS/Application/Circ.pm | 25 +++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm index 23f99d438b..6436f79e4d 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm @@ -376,19 +376,34 @@ __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); + my $spname = "aci_update_savepoint"; + $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; + $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( -- 2.11.0