From: Llewellyn Marshall Date: Mon, 15 Aug 2022 19:00:56 +0000 (-0400) Subject: find next hour of operation X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=cc540b619667b445fce75235aebfd1a21eb9bed5;p=working%2FEvergreen.git find next hour of operation --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm index 25261eb282..e6fe3239e3 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm @@ -1550,15 +1550,41 @@ sub load_place_hold { } elsif ($cgi->param('hold_suspend') =~ /p/) { eval { - my $next_open_time = $e->json_query({ - from => [ - 'evergreen.find_next_open_time', - $cgi->param('pickup_lib') || $self->ctx->{search_ou}, - DateTime::Format::ISO8601->new() - ] - })->[0]; - my $dt = DateTime::Format::ISO8601->parse_datetime($next_open_time); - $ctx->{thaw_date} = $dt->ymd; + #start thaw date at current time + my $thaw_dt = DateTime::Format::ISO8601->new(); + my $thaw_found = 0; + my $h = $e->search_actor_hours_of_operation({id => $cgi->param('pickup_lib') || $self->ctx->{search_ou}})->[0]; + #look for thaw date up to 1 week in future + for(my $dow = 0;!$thaw_found && $dow < 6;$dow++){ + if($dow){ + # need to check another day + # set to first moment of tomorrow + $thaw_dt->add(days => 1); + $thaw_dt->set(hour => 0,minute => 0, second=> 0); + } + my $day_of_week = $thaw_dt->wday; + my $open_time_st = $h->{'dow_'.$day_of_week.'_open'}; + my $close_time_st = $h->{'dow_'.$day_of_week.'_close'}; + # library closed, check back tomorrow + next if($open_time_st eq '00:00:00' and $close_time_st eq '00:00:00'); + my @open_times = split(':',$open_time_st); + my @close_times = split(':',$close_time_st); + # create open/close datetimes based on current thaw date + my $open_time = $thaw_dt->clone->set(hour => @open_times[0],minute => @open_times[1],second => @open_times[2]); + my $close_time = $thaw_dt->clone->set(hour => @open_times[0],minute => @open_times[1],second => @open_times[2]); + if($thaw_dt->is_between($open_time,$close_time)){ + # we found a good time, end loop + $thaw_found = 1; + } + else if(DateTime->compare($thaw_dt,$close_time) <= 0){ + # our thaw date is before opening time + # set thaw date to opening time + $thaw_found->set(hour => $open_times[0],minute => $open_times[1]) + $thaw_found = 1; + } + # thaw date falls after closing time, check tomorrow + } + $ctx->{thaw_date} = $thaw_dt->ymd; $ctx->{frozen} = 1; }; if ($@) {