From 266fc54ebaab9806af3ee86ba39b778bc192ebf8 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Tue, 10 Apr 2012 10:21:02 -0400 Subject: [PATCH] Avoid checkin capture for CAPTURE-blocked holds Teach the nearest_hold sub about CAPTURE-blocking penalties Signed-off-by: Mike Rylander Signed-off-by: Bill Erickson Signed-off-by: Jason Stephenson Signed-off-by: Mike Rylander --- .../OpenILS/Application/Storage/Publisher/action.pm | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm index ada8dc4df2..78b05961ac 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm @@ -294,8 +294,8 @@ sub nearest_hold { local $OpenILS::Application::Storage::WRITE = 1; my $holdsort = isTrue($fifo) ? - "pgt.hold_priority, CASE WHEN h.cut_in_line IS TRUE THEN 0 ELSE 1 END, h.request_time, h.selection_depth DESC, p.prox " : - "p.prox, pgt.hold_priority, CASE WHEN h.cut_in_line IS TRUE THEN 0 ELSE 1 END, h.selection_depth DESC, h.request_time "; + "pgt.hold_priority, CASE WHEN h.cut_in_line IS TRUE THEN 0 ELSE 1 END, h.request_time, h.selection_depth DESC, p.prox " : + "p.prox, pgt.hold_priority, CASE WHEN h.cut_in_line IS TRUE THEN 0 ELSE 1 END, h.selection_depth DESC, h.request_time "; my $ids = action::hold_request->db_Main->selectcol_arrayref(<<" SQL", {}, $here, $cp, $age); SELECT h.id @@ -304,12 +304,17 @@ sub nearest_hold { JOIN action.hold_copy_map hm ON (hm.hold = h.id) JOIN actor.usr au ON (au.id = h.usr) JOIN permission.grp_tree pgt ON (au.profile = pgt.id) + LEFT JOIN actor.usr_standing_penalty ausp + ON ( au.id = ausp.usr AND ( ausp.stop_date IS NULL OR ausp.stop_date > NOW() ) ) + LEFT JOIN config.standing_penalty csp + ON ( csp.id = ausp.standing_penalty AND csp.block_list LIKE '%CAPTURE%' ) WHERE hm.target_copy = ? AND (AGE(NOW(),h.request_time) >= CAST(? AS INTERVAL) OR p.prox = 0) AND h.capture_time IS NULL AND h.cancel_time IS NULL AND (h.expire_time IS NULL OR h.expire_time > NOW()) - AND h.frozen IS FALSE + AND h.frozen IS FALSE + AND csp.id IS NULL ORDER BY CASE WHEN h.hold_type IN ('R','F') THEN 0 ELSE 1 END, $holdsort LIMIT $limit SQL -- 2.43.2