arrival => { '!=' => undef},
delivered => { '>' => 'today'},
},{
- flesh => 1, flesh_fields => {acsp => 'patron'},
+ flesh => 1, flesh_fields => {acsp => ['patron']},
order_by => { acsp => {delivered => {direction => 'desc'}} }
}]);
arrival => { '!=' => undef},
delivered => undef,
},{
- flesh => 1, flesh_fields => {acsp => 'patron'},
+ flesh => 1, flesh_fields => {acsp => ['patron']},
order_by => { acsp => 'arrival' }
}]);
limit => 1, order_by => { acsp => { arrival => { direction => 'desc' } } }
}]);
- return @$slots ? $$slots[0]->arrived : undef;
+ return @$slots ? $$slots[0]->arrival : undef;
}
__PACKAGE__->register_method(
method => "fetch_latest_arrived",
my $slots = $e->search_action_curbside([{
org => $org,
staged => { '!=' => undef},
- arrived => undef
+ arrival => undef
},{
- flesh => 1, flesh_fields => {acsp => 'patron'},
+ flesh => 1, flesh_fields => {acsp => ['patron']},
order_by => { acsp => 'slot' }
}]);
my $slots = $e->search_action_curbside([{
org => $org,
staged => { '!=' => undef},
- arrived => undef
+ arrival => undef
},{
limit => 1, order_by => { acsp => { slot => { direction => 'desc' } } }
}]);
my $gran = $U->ou_ancestor_setting_value($org, 'circ.curbside.granularity') || '15 minutes';
my $gran_seconds = interval_to_seconds($gran);
- my $horizon = new DateTime;
+ my $horizon = DateTime->now;
$horizon->add(seconds => $gran_seconds * 2);
my $slots = $e->search_action_curbside([{
staged => undef,
slot => { '<=' => $horizon->strftime('%FT%T%z') },
},{
- flesh => 1, flesh_fields => {acsp => 'patron'},
+ flesh => 1, flesh_fields => {acsp => ['patron']},
order_by => { acsp => 'slot' }
}]);
my $gran = $U->ou_ancestor_setting_value($org, 'circ.curbside.granularity') || '15 minutes';
my $gran_seconds = interval_to_seconds($gran);
- my $horizon = new DateTime;
+ my $horizon = DateTime->now;
$horizon->add(seconds => $gran_seconds * 2);
my $slots = $e->search_action_curbside([{
my $date_obj = $date_parser->parse_datetime($date);
return undef unless ($date_obj);
+ if ($time =~ /^\d\d:\d\d$/) {
+ $time .= ":00"; # tack on seconds if needed to keep
+ # interval_to_seconds happy
+ }
+
my $slot;
# do they already have an open slot?
- # NOTE: once arrived is set, it's past the point of editing.
+ # NOTE: once arrival is set, it's past the point of editing.
my $old_slot = $e->search_action_curbside({
- patron => $patron,
- org => $org,
- slot => { '!=' => undef },
- arrived=> undef
+ patron => $patron,
+ org => $org,
+ slot => { '!=' => undef },
+ arrival => undef
})->[0];
if ($old_slot) {
if ($mode eq 'create') {
return undef if ($time_seconds < $open_seconds); # too early
return undef if ($time_seconds > $close_seconds + 1); # too late (/at/ closing allowed)
- $date_obj = $date_parser->parse_datetime($date.'T'.$open_time);
+ my $tz = $U->ou_ancestor_setting_value($org, 'lib.timezone') || 'local';
+
+ $date_obj = $date_parser->parse_datetime($date.'T'.$open_time)->set_time_zone($tz);
- my $time_into_open_second = $time - $open_time;
+ my $time_into_open_second = $time_seconds - $open_seconds;
if (my $extra_time = $time_into_open_second % $gran) { # a remainder means we got a time we shouldn't have
$time_into_open_second -= $extra_time; # just back it off to have staff gather earlier
}
-
+
my $slot_ts = $date_obj->add(seconds => $time_into_open_second)->strftime('%FT%T%z');
# finally, confirm that there aren't too many already
my $method = 'update_action_curbside';
if ($mode eq 'create' or !$slot) {
$slot = $e->search_action_curbside({
- patron => $patron,
- org => $org,
- slot => undef,
- arrived=> undef,
+ patron => $patron,
+ org => $org,
+ slot => undef,
+ arrival => undef,
})->[0];
}
my $slot = $e->retrieve_action_curbside($appointment);
return undef unless ($slot);
- unless ($appointment->patron == $e->requestor->id) {
+ unless ($slot->patron == $e->requestor->id) {
return $e->die_event unless $e->allowed("STAFF_LOGIN");
}
$e->delete_action_curbside($slot) or return $e->die_event;
$e->commit;
- return undef;
+ return 1;
}
__PACKAGE__->register_method(
method => "delete_appointment",
signature => {
params => [
{type => 'string', desc => 'Authentication token'},
- {type => 'number', desc => 'Patron'},
- {type => 'string', desc => 'Date'},
- {type => 'string', desc => 'Time'},
+ {type => 'number', desc => 'Appointment ID'},
],
return => { desc => 'Nothing on success or no appointment found'.
'an ILS Event on permission error'}
my $slot = $e->retrieve_action_curbside($appointment);
return undef unless ($slot);
- unless ($appointment->patron == $e->requestor->id) {
+ unless ($slot->patron == $e->requestor->id) {
return $e->die_event unless $e->allowed("STAFF_LOGIN");
}
$slot->delivered('now');
$slot->delivery_staff($e->requestor->id);
- $slot = $e->update_action_curbside($slot) or return $e->die_event;
+ $e->update_action_curbside($slot) or return $e->die_event;
$e->commit;
my $holds = $e->search_action_hold_request({
$conn->respond($_->gather(1)) for @requests;
$circ_sess->disconnect;
- return $slot;
+ return $slot->id;
}
__PACKAGE__->register_method(
method => "mark_delivered",