From 929c0ae82a9dff379323b3b7abeaa03b1db8efcc Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Fri, 25 Jun 2021 11:37:29 -0300 Subject: [PATCH] Bug 28585: Use the datetime_parser for handling API dates This patchset takes the GET /patrons route as a sample usage for filtering on date and date-time (including timestamp) fields. It then makes Koha::Object->attributes_from_api use the DB storage datetime parser for format the parameters correctly. To test: 1. Apply the regression tests 2. Run: $ kshell k$ prove t/db_dependent/api/v1/patrons.t => FAIL: It doesn't find the patron when filtering by date 3. Apply this patch 4. Repeat 2 => SUCCESS: It works now! 5. Sign off :-D Signed-off-by: Tomas Cohen Arazi Signed-off-by: David Nind Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall --- Koha/Object.pm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Koha/Object.pm b/Koha/Object.pm index a001b833bb..b8cea8a8ab 100644 --- a/Koha/Object.pm +++ b/Koha/Object.pm @@ -695,6 +695,7 @@ sub attributes_from_api { my $params; my $columns_info = $self->_result->result_source->columns_info; + my $dtf = $self->_result->result_source->storage->datetime_parser; while (my ($key, $value) = each %{ $from_api_params } ) { my $koha_field_name = @@ -709,8 +710,14 @@ sub attributes_from_api { } elsif ( _date_or_datetime_column_type( $columns_info->{$koha_field_name}->{data_type} ) ) { try { - $value = dt_from_string($value, 'rfc3339') - if defined $value; + if ( $columns_info->{$koha_field_name}->{data_type} eq 'date' ) { + $value = $dtf->format_date(dt_from_string($value, 'rfc3339')) + if defined $value; + } + else { + $value = $dtf->format_datetime(dt_from_string($value, 'rfc3339')) + if defined $value; + } } catch { Koha::Exceptions::BadParameter->throw( parameter => $key ); -- 2.39.5