When capturing or canceling a hold, we can clear the hold-copy-map
with a trigger, saving the time of the user, and making the business
logic simpler.
LP#
1386347 copy map trigger wants a RETURN
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
return $self->bail_on_events($e->event)
unless $e->update_action_hold_request($hold);
- $holdcode->delete_hold_copy_maps($e, $hold->id);
return $self->fulfilled_holds([$hold->id]);
}
$e->update_action_hold_request($hold)
or return $e->die_event;
- delete_hold_copy_maps($self, $e, $hold->id);
-
$e->commit;
# re-fetch the hold to pick up the real cancel_time (not "now") for A/T
return 1;
}
-sub delete_hold_copy_maps {
- my $class = shift;
- my $editor = shift;
- my $holdid = shift;
-
- my $maps = $editor->search_action_hold_copy_map({hold=>$holdid});
- for(@$maps) {
- $editor->delete_action_hold_copy_map($_)
- or return $editor->event;
- }
- return undef;
-}
-
-
my $update_hold_desc = 'The login session is the requestor. ' .
'If the requestor is different from the usr field on the hold, ' .
'the requestor must have UPDATE_HOLDS permissions. ' .
$hold->cancel_time('now');
$hold->cancel_cause(2); # Hold Shelf expiration
$e->update_action_hold_request($hold) or return $e->die_event;
- delete_hold_copy_maps($self, $e, $hold->id) and return $e->die_event;
push(@canceled_holds, $hold_id);
}
);
+CREATE OR REPLACE FUNCTION action.hold_request_clear_map () RETURNS TRIGGER AS $$
+BEGIN
+ DELETE FROM action.hold_copy_map WHERE hold = NEW.id;
+ RETURN NEW;
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE TRIGGER hold_request_clear_map_tgr
+ AFTER UPDATE ON action.hold_request
+ FOR EACH ROW
+ WHEN (
+ (NEW.cancel_time IS NOT NULL AND OLD.cancel_time IS NULL)
+ OR (NEW.capture_time IS NOT NULL AND OLD.capture_time IS NULL)
+ )
+ EXECUTE PROCEDURE action.hold_request_clear_map();
+
CREATE INDEX hold_request_target_idx ON action.hold_request (target);
CREATE INDEX hold_request_usr_idx ON action.hold_request (usr);
CREATE INDEX hold_request_pickup_lib_idx ON action.hold_request (pickup_lib);
--- /dev/null
+BEGIN;
+
+CREATE OR REPLACE FUNCTION action.hold_request_clear_map () RETURNS TRIGGER AS $$
+BEGIN
+ DELETE FROM action.hold_copy_map WHERE hold = NEW.id;
+ RETURN NEW;
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE TRIGGER hold_request_clear_map_tgr
+ AFTER UPDATE ON action.hold_request
+ FOR EACH ROW
+ WHEN (
+ (NEW.cancel_time IS NOT NULL AND OLD.cancel_time IS NULL)
+ OR (NEW.capture_time IS NOT NULL AND OLD.capture_time IS NULL)
+ )
+ EXECUTE PROCEDURE action.hold_request_clear_map();
+
+COMMIT;
+