From 91bf88cf691f8bfa9471921e4da665540155ca27 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Fri, 22 May 2020 15:28:37 -0400 Subject: [PATCH] Add "fetch my appointments" API and limit/offset support Also, flesh user object on fetch_delivered, and mark streaming methods as such so that .atomic versions get generated. Signed-off-by: Mike Rylander --- .../perlmods/lib/OpenILS/Application/Curbside.pm | 71 ++++++++++++++++++++-- 1 file changed, 65 insertions(+), 6 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm index c96c57d1aa..60cbf5f009 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm @@ -21,8 +21,46 @@ my $date_parser = DateTime::Format::ISO8601->new; use OpenSRF::Utils::Logger qw/$logger/; +sub fetch_mine { # returns appointments owned by $authtoken user, optional $org filter + my ($self, $conn, $authtoken, $org, $limit, $offset) = @_; + + my $e = new_editor(xact => 1, authtoken => $authtoken); + return $e->die_event unless $e->checkauth; + + # NOTE: not checking if curbside is enabled here + # because the pickup lib might be anything + + my $slots = $e->search_action_curbside([{ + patron => $e->requestor->id, + delivered => { '!=' => undef }, + ( $org ? (org => $org) : () ) + },{ + ($limit ? (limit => $limit) : ()), + ($offset ? (offset => $offset) : ()), + flesh => 2, flesh_fields => {acsp => ['patron'], au => ['card']}, + order_by => { acsp => {slot => {direction => 'asc'}} } + }]); + + $conn->respond($_) for @$slots; + return undef; +} +__PACKAGE__->register_method( + method => "fetch_mine", + api_name => "open-ils.curbside.fetch_mine", + stream => 1, + signature => { + params => [ + {type => 'string', desc => 'Authentication token'}, + {type => 'number', desc => 'Optional Library ID to filter further'}, + {type => 'number', desc => 'Fetch limit'}, + {type => 'number', desc => 'Fetch offset'}, + ], + return => { desc => 'A stream of appointments that the authenticated user owns'} + } +); + sub fetch_delivered { # returns appointments delivered TODAY - my ($self, $conn, $authtoken, $org) = @_; + my ($self, $conn, $authtoken, $org, $limit, $offset) = @_; my $e = new_editor(xact => 1, authtoken => $authtoken); return $e->die_event unless $e->checkauth; @@ -38,7 +76,9 @@ sub fetch_delivered { # returns appointments delivered TODAY arrival => { '!=' => undef}, delivered => { '>' => 'today'}, },{ - flesh => 1, flesh_fields => {acsp => ['patron']}, + ($limit ? (limit => $limit) : ()), + ($offset ? (offset => $offset) : ()), + flesh => 2, flesh_fields => {acsp => ['patron'], au => ['card']}, order_by => { acsp => {delivered => {direction => 'desc'}} } }]); @@ -48,10 +88,13 @@ sub fetch_delivered { # returns appointments delivered TODAY __PACKAGE__->register_method( method => "fetch_delivered", api_name => "open-ils.curbside.fetch_delivered", + stream => 1, signature => { params => [ {type => 'string', desc => 'Authentication token'}, {type => 'number', desc => 'Library ID'}, + {type => 'number', desc => 'Fetch limit'}, + {type => 'number', desc => 'Fetch offset'}, ], return => { desc => 'A stream of appointments that were delivered today'} } @@ -93,7 +136,7 @@ __PACKAGE__->register_method( ); sub fetch_arrived { - my ($self, $conn, $authtoken, $org) = @_; + my ($self, $conn, $authtoken, $org, $limit, $offset) = @_; my $e = new_editor(xact => 1, authtoken => $authtoken); return $e->die_event unless $e->checkauth; @@ -109,6 +152,8 @@ sub fetch_arrived { arrival => { '!=' => undef}, delivered => undef, },{ + ($limit ? (limit => $limit) : ()), + ($offset ? (offset => $offset) : ()), flesh => 2, flesh_fields => {acsp => ['patron'], au => ['card']}, order_by => { acsp => 'arrival' } }]); @@ -131,10 +176,13 @@ sub fetch_arrived { __PACKAGE__->register_method( method => "fetch_arrived", api_name => "open-ils.curbside.fetch_arrived", + stream => 1, signature => { params => [ {type => 'string', desc => 'Authentication token'}, {type => 'number', desc => 'Library ID'}, + {type => 'number', desc => 'Fetch limit'}, + {type => 'number', desc => 'Fetch offset'}, ], return => { desc => 'A stream of appointments for patrons that have arrived but are not delivered'} } @@ -175,7 +223,7 @@ __PACKAGE__->register_method( ); sub fetch_staged { - my ($self, $conn, $authtoken, $org) = @_; + my ($self, $conn, $authtoken, $org, $limit, $offset) = @_; my $e = new_editor(xact => 1, authtoken => $authtoken); return $e->die_event unless $e->checkauth; @@ -191,6 +239,8 @@ sub fetch_staged { staged => { '!=' => undef}, arrival => undef },{ + ($limit ? (limit => $limit) : ()), + ($offset ? (offset => $offset) : ()), flesh => 2, flesh_fields => {acsp => ['patron'], au => ['card']}, order_by => { acsp => 'slot' } }]); @@ -213,10 +263,13 @@ sub fetch_staged { __PACKAGE__->register_method( method => "fetch_staged", api_name => "open-ils.curbside.fetch_staged", + stream => 1, signature => { params => [ {type => 'string', desc => 'Authentication token'}, {type => 'number', desc => 'Library ID'}, + {type => 'number', desc => 'Fetch limit'}, + {type => 'number', desc => 'Fetch offset'}, ], return => { desc => 'A stream of appointments that are staged but patrons have not yet arrived'} } @@ -257,7 +310,7 @@ __PACKAGE__->register_method( ); sub fetch_to_be_staged { - my ($self, $conn, $authtoken, $org) = @_; + my ($self, $conn, $authtoken, $org, $limit, $offset) = @_; my $e = new_editor(xact => 1, authtoken => $authtoken); return $e->die_event unless $e->checkauth; @@ -278,6 +331,8 @@ sub fetch_to_be_staged { staged => undef, slot => { '<=' => $horizon->strftime('%FT%T%z') }, },{ + ($limit ? (limit => $limit) : ()), + ($offset ? (offset => $offset) : ()), flesh => 2, flesh_fields => {acsp => ['patron'], au => ['card']}, order_by => { acsp => 'slot' } }]); @@ -310,10 +365,13 @@ sub fetch_to_be_staged { __PACKAGE__->register_method( method => "fetch_to_be_staged", api_name => "open-ils.curbside.fetch_to_be_staged", + stream => 1, signature => { params => [ {type => 'string', desc => 'Authentication token'}, {type => 'number', desc => 'Library ID'}, + {type => 'number', desc => 'Fetch limit'}, + {type => 'number', desc => 'Fetch offset'}, ], return => { desc => 'A stream of appointments that need to be staged'} } @@ -414,8 +472,8 @@ sub times_for_date { __PACKAGE__->register_method( method => "times_for_date", api_name => "open-ils.curbside.times_for_date", + stream => 1, argc => 2, - streaming=> 1, signature=> { params => [ {type => "string", desc => "Authentication token"}, @@ -730,6 +788,7 @@ sub mark_delivered { __PACKAGE__->register_method( method => "mark_delivered", api_name => "open-ils.curbside.mark_delivered", + stream => 1, signature => { params => [ {type => 'string', desc => 'Authentication token'}, -- 2.11.0