recheck for closures after HOO calc
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 4 Feb 2007 18:01:34 +0000 (18:01 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 4 Feb 2007 18:01:34 +0000 (18:01 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6861 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm

index 0b1a663..fdf78a5 100644 (file)
@@ -188,15 +188,15 @@ sub org_closed_overlap {
                  WHERE ? between close_start and close_end
                        AND org_unit = ?
                  ORDER BY close_start ASC, close_end DESC
+                 LIMIT 1
        SQL
 
        $date = clense_ISO8601($date);
        my ($begin, $end) = ($date,$date);
 
-       my $sth = actor::org_unit::closed_date->db_Main->prepare( $sql );
-       $sth->execute($date, $ou);
-       
-       while (my $closure = $sth->fetchrow_hashref) {
+       my $hoo = actor::org_unit::hours_of_operation->retrieve($ou);
+
+       if (my $closure = actor::org_unit::closed_date->db_Main->selectrow_hashref( $sql, {}, $date, $ou )) {
                $begin = clense_ISO8601($closure->{close_start});
                $end = clense_ISO8601($closure->{close_end});
 
@@ -219,15 +219,10 @@ sub org_closed_overlap {
                        }
                        $end = clense_ISO8601($after->iso8601);
                }
-
        }
 
-       #$begin ||= $date;
-       #$end ||= $date;
-
-
        if ( !$no_hoo ) {
-               if ( my $hoo = actor::org_unit::hours_of_operation->retrieve($ou) ) {
+               if ( $hoo ) {
 
                        my $begin_dow = $_dt_parser->parse_datetime( $begin )->day_of_week_0;
                        my $begin_open_meth = "dow_".$begin_dow."_open";
@@ -243,6 +238,14 @@ sub org_closed_overlap {
                                $begin_open_meth = "dow_".$begin_dow."_open";
                                $begin_close_meth = "dow_".$begin_dow."_close";
                        }
+
+                       if (my $closure = actor::org_unit::closed_date->db_Main->selectrow_hashref( $sql, {}, $begin, $ou )) {
+                               $before = $_dt_parser->parse_datetime( $begin );
+                               $before->subtract( minutes => 1 );
+                               while ( my $_b = org_closed_overlap($self, $client, $ou, $before->iso8601, -1 ) ) {
+                                       $before = $_dt_parser->parse_datetime( clense_ISO8601($_b->{start}) );
+                               }
+                       }
        
                        my $end_dow = $_dt_parser->parse_datetime( $end )->day_of_week_0;
                        my $end_open_meth = "dow_".$end_dow."_open";
@@ -258,6 +261,17 @@ sub org_closed_overlap {
                                $end_open_meth = "dow_".$end_dow."_open";
                                $end_close_meth = "dow_".$end_dow."_close";
                        }
+
+                       if (my $closure = actor::org_unit::closed_date->db_Main->selectrow_hashref( $sql, {}, $end, $ou )) {
+                               $after = $_dt_parser->parse_datetime( $end );
+                               $after->add( minutes => 1 );
+
+                               while ( my $_a = org_closed_overlap($self, $client, $ou, $after->iso8601, 1, 1 ) ) {
+                                       $after = $_dt_parser->parse_datetime( clense_ISO8601($_a->{end}) );
+                               }
+                               $end = clense_ISO8601($after->iso8601);
+                       }
+
                }
        }