From 509de458413c779cb24925eac3493174764283d8 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Fri, 29 May 2020 17:08:01 -0400 Subject: [PATCH] Completed patron UI, including some repairs Signed-off-by: Mike Rylander --- .../perlmods/lib/OpenILS/Application/Curbside.pm | 2 +- .../lib/OpenILS/WWW/EGCatLoader/Account.pm | 55 +++++++++++---- Open-ILS/src/templates/opac/myopac/ebook_holds.tt2 | 2 +- .../templates/opac/myopac/ebook_holds_ready.tt2 | 2 +- .../src/templates/opac/myopac/hold_history.tt2 | 2 +- Open-ILS/src/templates/opac/myopac/holds.tt2 | 2 +- .../src/templates/opac/myopac/holds_curbside.tt2 | 78 ++++++++++++++++------ 7 files changed, 105 insertions(+), 38 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm index ae11d81cfb..6f39615e33 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm @@ -34,7 +34,7 @@ sub fetch_mine { # returns appointments owned by $authtoken user, optional $org my $slots = $e->search_action_curbside([{ patron => $e->requestor->id, - delivered => { '!=' => undef }, + delivered => { '=' => undef }, ( $org ? (org => $org) : () ) },{ ($limit ? (limit => $limit) : ()), 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 7bf52f44e3..d714cb390f 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm @@ -8,6 +8,7 @@ use OpenILS::Application::AppUtils; use OpenILS::Event; use OpenSRF::Utils::JSON; use OpenSRF::Utils::Cache; +use OpenILS::Utils::DateTime qw/:datetime/; use Digest::MD5 qw(md5_hex); use Data::Dumper; $Data::Dumper::Indent = 0; @@ -1173,10 +1174,10 @@ sub fetch_user_holds { for my $id (@$hold_ids) { push @sorted, grep { $_->{hold}->{hold}->id == $id } @holds; - my $h = $sorted[-1]; + my $h = $sorted[-1]->{hold}->{hold}; # if available, report the pickup lib in the list $pickup_libs{$h->pickup_lib} = 1 if ( - $h->pickup_lib == $h->current_shelf_lib && + $h && $h->pickup_lib == $h->current_shelf_lib && $h->shelf_time && !$h->cancel_time && !$h->fulfillment_time ); } @@ -1286,12 +1287,12 @@ sub handle_hold_update { my $date = $self->cgi->param("cs_date"); my $time = $self->cgi->param("cs_time"); my $notes = $self->cgi->param("cs_notes"); - + if ($slot) { $org ||= $slot->org; $notes ||= $slot->notes; if ($slot->slot) { - my $dt = DateTime::Format::ISO8601->parse_datetime($slot->slot); + my $dt = DateTime::Format::ISO8601->new->parse_datetime(clean_ISO8601($slot->slot)); $date ||= $dt->strftime('%F'); $time ||= $dt->strftime('%T'); } @@ -1300,7 +1301,7 @@ sub handle_hold_update { $ctx->{cs_date} = $date; $ctx->{cs_time} = $time; $ctx->{cs_notes} = $notes; - $ctx->{cs_slot_id} = $slot->id; + $ctx->{cs_slot_id} = $slot->id if ($slot); $ctx->{cs_slot} = $slot; if ($cs_action eq 'save' && $org && $date && $time) { @@ -1319,17 +1320,35 @@ sub handle_hold_update { $ctx->{cs_slot} = undef; } else { $ctx->{cs_slot} = $slot; - - # just redirect back to the holds page } - } elsif ($cs_action eq 'next' && $org && $date) { # get a list of times - $ctx->{cs_times} = $circ->request( + $url = $self->ctx->{proto} . '://' . $self->ctx->{hostname} . $self->ctx->{opac_root} . '/myopac/holds_curbside'; + } elsif ($cs_action eq 'cancel' && $slot) { + my $curbsides = $U->simplereq( + 'open-ils.curbside', + 'open-ils.curbside.delete_appointment', + $e->authtoken, $slot->id + ); + $url = $self->ctx->{proto} . '://' . $self->ctx->{hostname} . $self->ctx->{opac_root} . '/myopac/holds_curbside'; + } elsif ($cs_action eq 'arrive' && $slot) { + my $curbsides = $U->simplereq( + 'open-ils.curbside', + 'open-ils.curbside.mark_arrived', + $e->authtoken, $slot->id + ); + } elsif ($cs_action eq 'deliver' && $slot) { + my $curbsides = $U->simplereq( + 'open-ils.curbside', + 'open-ils.curbside.mark_delivered', + $e->authtoken, $slot->id + ); + } + + if ($date and $org and !$ctx->{cs_times}{$date}) { + $ctx->{cs_times}{$date} = $circ->request( 'open-ils.curbside.times_for_date.atomic', $e->authtoken, $date, $org )->gather(1); } - - $url = $self->ctx->{proto} . '://' . $self->ctx->{hostname} . $self->ctx->{opac_root} . '/myopac/hold_curbside'; } $circ->kill_me; @@ -1360,7 +1379,19 @@ sub load_myopac_holds { if($holds_object->{holds}) { $ctx->{holds} = $holds_object->{holds}; - $ctx->{curbside_appointments} = $holds_object->{curbsides}; + $ctx->{curbside_appointments} = {}; + + $logger->info('curbside: found '.scalar(@{$holds_object->{curbsides}}).' appointments'); + + for my $cs (@{$holds_object->{curbsides}}) { + my $dt = DateTime::Format::ISO8601->new->parse_datetime(clean_ISO8601($cs->slot))->strftime('%F'); + $ctx->{cs_times}{$dt} = $U->simplereq( + 'open-ils.curbside', 'open-ils.curbside.times_for_date.atomic', + $e->authtoken, $dt, $cs->org + ); + $ctx->{curbside_appointments}{$cs->org} = $cs; + } + $ctx->{curbside_pickup_libs} = []; for my $pul (@{$holds_object->{pickup_libs}}) { push(@{$ctx->{curbside_pickup_libs}}, $pul) if $ctx->{get_org_setting}->($pul, 'circ.curbside'); diff --git a/Open-ILS/src/templates/opac/myopac/ebook_holds.tt2 b/Open-ILS/src/templates/opac/myopac/ebook_holds.tt2 index 41af045dcd..4e3e59e939 100644 --- a/Open-ILS/src/templates/opac/myopac/ebook_holds.tt2 +++ b/Open-ILS/src/templates/opac/myopac/ebook_holds.tt2 @@ -15,7 +15,7 @@ - [% IF ctx.curbside_pickup_libs.length %] + [% IF ctx.curbside_pickup_libs.size %] diff --git a/Open-ILS/src/templates/opac/myopac/ebook_holds_ready.tt2 b/Open-ILS/src/templates/opac/myopac/ebook_holds_ready.tt2 index 5e93e1f434..2fa570174f 100644 --- a/Open-ILS/src/templates/opac/myopac/ebook_holds_ready.tt2 +++ b/Open-ILS/src/templates/opac/myopac/ebook_holds_ready.tt2 @@ -15,7 +15,7 @@ - [% IF ctx.curbside_pickup_libs.length %] + [% IF ctx.curbside_pickup_libs.size %] diff --git a/Open-ILS/src/templates/opac/myopac/hold_history.tt2 b/Open-ILS/src/templates/opac/myopac/hold_history.tt2 index 0ce5baaae6..b953482931 100644 --- a/Open-ILS/src/templates/opac/myopac/hold_history.tt2 +++ b/Open-ILS/src/templates/opac/myopac/hold_history.tt2 @@ -15,7 +15,7 @@ - [% IF ctx.curbside_pickup_libs.length %] + [% IF ctx.curbside_pickup_libs.size %] diff --git a/Open-ILS/src/templates/opac/myopac/holds.tt2 b/Open-ILS/src/templates/opac/myopac/holds.tt2 index da9d33f8cf..49f0183ff8 100644 --- a/Open-ILS/src/templates/opac/myopac/holds.tt2 +++ b/Open-ILS/src/templates/opac/myopac/holds.tt2 @@ -16,7 +16,7 @@ - [% IF ctx.curbside_pickup_libs.length %] + [% IF ctx.curbside_pickup_libs.size %] diff --git a/Open-ILS/src/templates/opac/myopac/holds_curbside.tt2 b/Open-ILS/src/templates/opac/myopac/holds_curbside.tt2 index e4ed35676d..7f355c7b49 100644 --- a/Open-ILS/src/templates/opac/myopac/holds_curbside.tt2 +++ b/Open-ILS/src/templates/opac/myopac/holds_curbside.tt2 @@ -4,21 +4,18 @@ PROCESS "opac/parts/hold_notify.tt2"; PROCESS "opac/parts/myopac/column_sort_support.tt2"; WRAPPER "opac/parts/myopac/base.tt2"; - myopac_page = "holds"; - limit = (ctx.holds_limit.defined) ? ctx.holds_limit : 0; - offset = (ctx.holds_offset.defined) ? ctx.holds_offset : 0; - count = (ctx.holds_ids.size.defined) ? ctx.holds_ids.size : 0; + myopac_page = "holds_curbside"; %]

[% l('Curbside pickup') %]

- [% IF ctx.curbside_pickup_libs.length > 0 %] + [% IF ctx.curbside_pickup_libs.size > 0 %] [% END %] [% IF ebook_api.enabled == 'true' %] @@ -36,25 +33,33 @@
- [% l("Curbside pickup appointments"); %] + [% l("Curbside pickup appointments") %]
-
[% l('Pickup Location') %] [% l('Date') %] [% l('Time') %] - [% l('Notes') %] + [% l('Arrival Notes (vehicle description, etc)') %] [% l('Action') %]
[% FOR lib IN ctx.curbside_pickup_libs %] -
+ [% appointment = ctx.curbside_appointments.$lib %] + [% IF !ctx.cs_slot && appointment; + ctx.cs_slot = appointment; + ctx.cs_slot_id = appointment.id; + ctx.cs_date = date.format(ctx.parse_datetime(appointment.slot),'%F'); + ctx.cs_time = date.format(ctx.parse_datetime(appointment.slot),'%T'); + ctx.cs_notes = appointment.notes; + END %] + - + [% disable_me = 0 %] - [% IF ctx.slot && ctx.slot.arrival; disable_me = 1; END %] + [% IF appointment && appointment.arrival; disable_me = 1; END %] [% ctx.get_aou(lib).name | html %] @@ -66,16 +71,25 @@ cs_date = date.format(date.now, '%F'); END; %] - + - [% IF ctx.cs_times.length > 0; # show a select %] - + [% current_date = ctx.cs_date %] + [% found_time = 0 %] + [% FOR t IN ctx.cs_times.$current_date %] + [% END %] + [% ELSE %] [% l('Select a date') %] [% END %] @@ -83,15 +97,36 @@ [% IF ctx.cs_date; # show the notes box %] + [% ELSE %]   [% END %] - [% IF ctx.cs_time; # relevant submit action %] + [% IF appointment.staged && !appointment.arrival; # relevant submit action %] +
+ + [% ELSIF appointment.arrival %] +
+ + [% ELSIF appointment.slot %] +

+ [% ELSIF ctx.cs_date %] - [% ELSE %] @@ -101,6 +136,7 @@ [% END %]
+ [% END %]
[% END %] -- 2.11.0