From d1f5999567df98aa89dd7929d9dd1d765dc12c5f Mon Sep 17 00:00:00 2001 From: Terran McCanna Date: Thu, 27 Apr 2023 11:47:32 -0400 Subject: [PATCH] LP2017913 Display Upcoming Closures in OPAC Displays the upcoming closures (max of 10) that have been entered through the Closed Dates Editor in the OPAC on the library info pages for each branch. Signed-off-by: Terran McCanna LP2017913 Display Upcoming Closures in OPAC Adds ability to display detailed hours when closure is partial day. Signed-off-by: Terran McCanna LP2017913 Adds release note Signed-off-by: Terran McCanna LP2017913 Display Closures in OPAC Adjusted CSS due to testing feedback and also applied CSS to open hours display on the same page for consistency. Signed-off-by: Terran McCanna --- .../lib/OpenILS/WWW/EGCatLoader/Library.pm | 17 ++ .../opac/parts/library/hours.tt2 | 318 +++++++++++++-------- .../OPAC/upcoming_closed_dates.adoc | 5 + 3 files changed, 219 insertions(+), 121 deletions(-) create mode 100644 docs/RELEASE_NOTES_NEXT/OPAC/upcoming_closed_dates.adoc diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Library.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Library.pm index 9d60344a96..2cb8f4a3f1 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Library.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Library.pm @@ -3,6 +3,8 @@ use strict; use warnings; use Apache2::Const -compile => qw(OK DECLINED FORBIDDEN HTTP_INTERNAL_SERVER_ERROR REDIRECT HTTP_BAD_REQUEST); use OpenSRF::Utils::JSON; use OpenSRF::Utils::Logger qw/$logger/; +use DateTime; +use DateTime::Format::ISO8601; use OpenILS::Utils::CStoreEditor qw/:funcs/; use OpenILS::Utils::Fieldmapper; use OpenILS::Application::AppUtils; @@ -85,6 +87,21 @@ sub load_library { $ctx->{hours} = $hours; } + # Get upcoming closed dates + my $dt = DateTime->now(time_zone => 'local'); + my $start = $dt->year .'-'. $dt->month .'-'. $dt->day; + + my $dates = $self->editor->search_actor_org_unit_closed_date([ + {close_end => { ">=" => $start }, + org_unit => $lib_id + }, + {order_by => {aoucd => 'close_start'}, + limit => 10 + } + ]); + + $ctx->{closed_dates} = $dates; + return Apache2::Const::OK; } diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/library/hours.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/library/hours.tt2 index 4bb4a198cb..9a16770aa8 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/library/hours.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/library/hours.tt2 @@ -13,129 +13,205 @@

[% l('Library Hours') %]

These hours may not reflect holidays or other closures. Check the library's web site for detailed information.

-[%- - open = today _ ctx.hours.dow_0_open; - close = today _ ctx.hours.dow_0_close; - note = ctx.hours.dow_0_note; - IF open == close; -%] -
[% l('Monday: closed') %]
-[%- ELSE %] -
[% - l('Monday: [_1] - [_2]', '', - '') --%] -[% IF ctx.hours.dow_0_note %] - [%l('(' _ note _ ')')%] -[% END -%] -
-[%- END %] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[% l('Day') %][% l('Hours') %]
[% l('Monday') %] + [%- + open = today _ ctx.hours.dow_0_open; + close = today _ ctx.hours.dow_0_close; + note = ctx.hours.dow_0_note; + IF open == close; + %] -[%- - open = today _ ctx.hours.dow_1_open; - close = today _ ctx.hours.dow_1_close; - note = ctx.hours.dow_1_note; - IF open == close; -%] -
[% l('Tuesday: closed') %]
-[%- ELSE %] -
[% - l('Tuesday: [_1] - [_2]', '', - '') --%] -[% IF ctx.hours.dow_1_note %] - [%l('(' _ note _ ')')%] -[% END -%] +
[% l('Closed') %]
+ [%- ELSE %] +
[% + l('[_1] - [_2]', '', + '') + -%] + [% IF ctx.hours.dow_0_note %] + [%l('(' _ note _ ')')%] + [% END -%] +
+ [%- END %] +
[% l('Tuesday') %] + [%- + open = today _ ctx.hours.dow_1_open; + close = today _ ctx.hours.dow_1_close; + note = ctx.hours.dow_1_note; + IF open == close; + %] +
[% l('Closed') %]
+ [%- ELSE %] +
[% + l('[_1] - [_2]', '', + '') + -%] + [% IF ctx.hours.dow_1_note %] + [%l('(' _ note _ ')')%] + [% END -%] +
+ [%- END %] +
[% l('Wednesday') %] + [%- + open = today _ ctx.hours.dow_2_open; + close = today _ ctx.hours.dow_2_close; + note = ctx.hours.dow_2_note; + IF open == close; + %] +
[% l('Closed') %]
+ [%- ELSE %] +
[% + l('[_1] - [_2]', '', + '') + -%] + [% IF ctx.hours.dow_2_note %] + [%l('(' _ note _ ')')%] + [% END -%] +
+ [%- END %] +
[% l('Thursday') %] + [%- + open = today _ ctx.hours.dow_3_open; + close = today _ ctx.hours.dow_3_close; + note = ctx.hours.dow_3_note; + IF open == close; + %] +
[% l('Closed') %]
+ [%- ELSE %] +
[% + l('[_1] - [_2]', '', + '') + -%] + [% IF ctx.hours.dow_3_note %] + [%l('(' _ note _ ')')%] + [% END -%] +
+ [%- END %] +
[% l('Friday') %] + [%- + open = today _ ctx.hours.dow_4_open; + close = today _ ctx.hours.dow_4_close; + note = ctx.hours.dow_4_note; + IF open == close; + %] +
[% l('Closed') %]
+ [%- ELSE %] +
[% + l('[_1] - [_2]', '', + '') + -%] + [% IF ctx.hours.dow_4_note %] + [%l('(' _ note _ ')')%] + [% END -%] +
+ [%- END %] +
[% l('Saturday') %] + [%- + open = today _ ctx.hours.dow_5_open; + close = today _ ctx.hours.dow_5_close; + note = ctx.hours.dow_5_note; + IF open == close; + %] +
[% l('Closed') %]
+ [%- ELSE %] +
[% + l('[_1] - [_2]', '', + '') + -%] + [% IF ctx.hours.dow_5_note %] + [%l('(' _ note _ ')')%] + [% END -%] +
+ [%- END %] +
[% l('Sunday') %] + [%- + open = today _ ctx.hours.dow_6_open; + close = today _ ctx.hours.dow_6_close; + note = ctx.hours.dow_6_note; + IF open == close; + %] +
[% l('Closed') %]
+ [%- ELSE %] +
[% + l('[_1] - [_2]', '', + '') + -%] + [% IF ctx.hours.dow_6_note %] + [%l('(' _ note _ ')')%] + [% END -%] +
+ [%- END %] +
-[%- END %] -[%- - open = today _ ctx.hours.dow_2_open; - close = today _ ctx.hours.dow_2_close; - note = ctx.hours.dow_2_note; - IF open == close; -%] -
[% l('Wednesday: closed') %]
-[%- ELSE %] -
[% - l('Wednesday: [_1] - [_2]', '', - '') --%] -[% IF ctx.hours.dow_2_note %] - [%l('(' _ note _ ')')%] -[% END -%] -
-[%- END %] +

[% l('Upcoming closures') %]

-[%- - open = today _ ctx.hours.dow_3_open; - close = today _ ctx.hours.dow_3_close; - note = ctx.hours.dow_3_note; - IF open == close; -%] -
[% l('Thursday: closed') %]
-[%- ELSE %] -
[% - l('Thursday: [_1] - [_2]', '', - '') --%] -[% IF ctx.hours.dow_3_note %] - [%l('(' _ note _ ')')%] -[% END -%] -
-[%- END %] +[% IF ctx.closed_dates.size %] + + + + + + + + [% FOR cdate IN ctx.closed_dates %] + + + + + [% END %] +
[% l('Date') %][% l('Reason for Closure') %]
+ [% display_start_date = date.format(ctx.parse_datetime(cdate.close_start), DATE_FORMAT) %] + [% display_end_date = date.format(ctx.parse_datetime(cdate.close_end), DATE_FORMAT) %] + [% display_start_time = date.format(ctx.parse_datetime(cdate.close_start), TIME_FORMAT) %] + [% display_end_time = date.format(ctx.parse_datetime(cdate.close_end), TIME_FORMAT) %] -[%- - open = today _ ctx.hours.dow_4_open; - close = today _ ctx.hours.dow_4_close; - note = ctx.hours.dow_4_note; - IF open == close; -%] -
[% l('Friday: closed') %]
-[%- ELSE %] -
[% - l('Friday: [_1] - [_2]', '', - '') --%] -[% IF ctx.hours.dow_4_note %] - [%l('(' _ note _ ')')%] -[% END -%] -
-[%- END %] - -[%- - open = today _ ctx.hours.dow_5_open; - close = today _ ctx.hours.dow_5_close; - note = ctx.hours.dow_5_note; - IF open == close; -%] -
[% l('Saturday: closed') %]
-[%- ELSE %] -
[% - l('Saturday: [_1] - [_2]', '', - '') --%] -[% IF ctx.hours.dow_5_note %] - [%l('(' _ note _ ')')%] -[% END -%] -
-[%- END %] - -[%- - open = today _ ctx.hours.dow_6_open; - close = today _ ctx.hours.dow_6_close; - note = ctx.hours.dow_6_note; - IF open == close; -%] -
[% l('Sunday: closed') %]
-[%- ELSE %] -
[% - l('Sunday: [_1] - [_2]', '', - '') --%] -[% IF ctx.hours.dow_6_note %] - [%l('(' _ note _ ')')%] -[% END -%] -
-[%- END %] - \ No newline at end of file + [% display_start_date %] + [% IF cdate.full_day == 'f'; %] + [% display_start_time %] - + [% IF display_start_date != display_end_date %] + [% display_end_date %] + [% END %] + [% display_end_time %] + [% END %] + [% IF cdate.multi_day == 't' %] + - [% display_end_date %] + [% END %] +
[% cdate.reason %]
+[% ELSE %] + [% l("No closures scheduled") %] +[% END; %] diff --git a/docs/RELEASE_NOTES_NEXT/OPAC/upcoming_closed_dates.adoc b/docs/RELEASE_NOTES_NEXT/OPAC/upcoming_closed_dates.adoc new file mode 100644 index 0000000000..afa01c250d --- /dev/null +++ b/docs/RELEASE_NOTES_NEXT/OPAC/upcoming_closed_dates.adoc @@ -0,0 +1,5 @@ +== Display Upcoming Closures in OPAC == + +Adds display of upcoming closures (as entered in +the Closed Dates Editor) to the library information +pages in the OPAC. \ No newline at end of file -- 2.11.0