[open-ils-commits] r15416 - trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher (miker)

svn at svn.open-ils.org svn at svn.open-ils.org
Mon Feb 1 12:24:24 EST 2010


Author: miker
Date: 2010-02-01 12:24:21 -0500 (Mon, 01 Feb 2010)
New Revision: 15416

Modified:
   trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm
Log:
Patch from Doug Kyle to address transit-related deficiency in the reshelving-complete query.

Previously, items that transited for reshelving at their circulating library would be flipped from Reshelving to Available almost immediately in most cases.  Doug taught the "find copies to flip to Available" query about transit receive times, allowing them to stay in Reshelving status for as long as copies returned directly to the circulating library.



Modified: trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm
===================================================================
--- trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm	2010-02-01 15:29:50 UTC (rev 15415)
+++ trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/action.pm	2010-02-01 17:24:21 UTC (rev 15416)
@@ -147,35 +147,43 @@
 	my $setting = actor::org_unit_setting->table;
 	my $circ = action::circulation->table;
 	my $cp = asset::copy->table;
+	my $atc = action::transit_copy->table;
 
 	my $sql = <<"	SQL";
 		UPDATE	$cp
 		  SET	status = 0
 		  WHERE	id IN (
-            SELECT  id
-              FROM  (SELECT cp.id, MAX(circ.checkin_time)
-                      FROM  $cp cp
-                            JOIN $circ circ ON (circ.target_copy = cp.id)
-                            LEFT JOIN $setting setting
-                                ON (cp.circ_lib = setting.org_unit AND setting.name = 'circ.reshelving_complete.interval')
-                      WHERE circ.checkin_time IS NOT NULL
-                            AND cp.status = 7
-                      GROUP BY 1
-                      HAVING MAX(circ.checkin_time) < NOW() - CAST( COALESCE( BTRIM( FIRST(setting.value),'"' ), ? )  AS INTERVAL)
-                    ) AS foo
-                                UNION ALL
-            SELECT  cp.id
-			   FROM $cp cp 
-                    LEFT JOIN $setting setting
-                        ON (cp.circ_lib = setting.org_unit AND setting.name = 'circ.reshelving_complete.interval')
-                    LEFT JOIN $circ circ ON (circ.target_copy = cp.id)
-              WHERE cp.status = 7 AND circ.id IS NULL
-                    AND cp.create_date < NOW() - CAST( COALESCE( BTRIM( setting.value,'"' ), ? )  AS INTERVAL)
-          )
-	SQL
-
+			SELECT  id
+			  FROM  (SELECT cp.id, MAX(circ.checkin_time), MAX(trans.dest_recv_time)
+					  FROM  $cp cp
+							JOIN $circ circ ON (circ.target_copy = cp.id)
+							LEFT JOIN $atc trans ON (trans.target_copy = cp.id)
+							LEFT JOIN $setting setting
+								ON (cp.circ_lib = setting.org_unit AND setting.name = 'circ.reshelving_complete.interval')
+					  WHERE circ.checkin_time IS NOT NULL
+							AND cp.status = 7
+					  GROUP BY 1
+					  HAVING (
+						( ( MAX(circ.checkin_time) > MAX(trans.dest_recv_time) or MAX(trans.dest_recv_time) IS NULL )
+						  AND MAX(circ.checkin_time) < NOW() - CAST( COALESCE( BTRIM( FIRST(setting.value),'"' ), ? )  AS INTERVAL) )
+						OR
+						( MAX(trans.dest_recv_time) > MAX(circ.checkin_time)
+						  AND MAX(trans.dest_recv_time) < NOW() - CAST( COALESCE( BTRIM( FIRST(setting.value),'"' ), ? )  AS INTERVAL) )
+					  )
+					) AS foo
+								UNION ALL
+			SELECT  cp.id
+			  FROM  $cp cp 
+					LEFT JOIN $setting setting
+						ON (cp.circ_lib = setting.org_unit AND setting.name = 'circ.reshelving_complete.interval')
+					LEFT JOIN $circ circ ON (circ.target_copy = cp.id)
+			  WHERE cp.status = 7
+					AND circ.id IS NULL
+					AND cp.create_date < NOW() - CAST( COALESCE( BTRIM( setting.value,'"' ), ? )  AS INTERVAL)
+		  )
+ 	SQL
 	my $sth = action::circulation->db_Main->prepare_cached($sql);
-	$sth->execute($window, $window);
+	$sth->execute($window, $window, $window);
 
 	return $sth->rows;
 



More information about the open-ils-commits mailing list