From: miker Date: Mon, 26 Mar 2007 20:52:10 +0000 (+0000) Subject: directional check for overlap recursion check X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=a4d5ecb580b2fda10607e57aff2c3bf6bd4a4ce2;p=Evergreen.git directional check for overlap recursion check git-svn-id: svn://svn.open-ils.org/ILS/trunk@7103 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm index caf1f569a8..61b0c13c6c 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm @@ -224,52 +224,56 @@ sub org_closed_overlap { if ( !$no_hoo ) { if ( $hoo ) { - my $begin_dow = $_dt_parser->parse_datetime( $begin )->day_of_week_0; - my $begin_open_meth = "dow_".$begin_dow."_open"; - my $begin_close_meth = "dow_".$begin_dow."_close"; - - my $count = 1; - while ($hoo->$begin_open_meth eq '00:00:00' and $hoo->$begin_close_meth eq '00:00:00') { - $begin = clense_ISO8601($_dt_parser->parse_datetime( $begin )->subtract( days => 1)->iso8601); - $begin_dow++; - $begin_dow %= 7; - $count++; - last if ($count > 6); - $begin_open_meth = "dow_".$begin_dow."_open"; - $begin_close_meth = "dow_".$begin_dow."_close"; - } + if ( $direction <= 0 ) { + my $begin_dow = $_dt_parser->parse_datetime( $begin )->day_of_week_0; + my $begin_open_meth = "dow_".$begin_dow."_open"; + my $begin_close_meth = "dow_".$begin_dow."_close"; + + my $count = 1; + while ($hoo->$begin_open_meth eq '00:00:00' and $hoo->$begin_close_meth eq '00:00:00') { + $begin = clense_ISO8601($_dt_parser->parse_datetime( $begin )->subtract( days => 1)->iso8601); + $begin_dow++; + $begin_dow %= 7; + $count++; + last if ($count > 6); + $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}) ); + 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"; - my $end_close_meth = "dow_".$end_dow."_close"; + if ( $direction >= 0 ) { + my $end_dow = $_dt_parser->parse_datetime( $end )->day_of_week_0; + my $end_open_meth = "dow_".$end_dow."_open"; + my $end_close_meth = "dow_".$end_dow."_close"; - $count = 1; - while ($hoo->$end_open_meth eq '00:00:00' and $hoo->$end_close_meth eq '00:00:00') { - $end = clense_ISO8601($_dt_parser->parse_datetime( $end )->add( days => 1)->iso8601); - $end_dow++; - $end_dow %= 7; - $count++; - last if ($count > 6); - $end_open_meth = "dow_".$end_dow."_open"; - $end_close_meth = "dow_".$end_dow."_close"; - } + $count = 1; + while ($hoo->$end_open_meth eq '00:00:00' and $hoo->$end_close_meth eq '00:00:00') { + $end = clense_ISO8601($_dt_parser->parse_datetime( $end )->add( days => 1)->iso8601); + $end_dow++; + $end_dow %= 7; + $count++; + last if ($count > 6); + $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 ); + 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 ) ) { - $after = $_dt_parser->parse_datetime( clense_ISO8601($_a->{end}) ); + while ( my $_a = org_closed_overlap($self, $client, $ou, $after->iso8601, 1 ) ) { + $after = $_dt_parser->parse_datetime( clense_ISO8601($_a->{end}) ); + } + $end = clense_ISO8601($after->iso8601); } - $end = clense_ISO8601($after->iso8601); } }