From d466c11077b0104adfd0ad64ae77547909c1d5e0 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Tue, 31 Dec 2019 11:50:36 -0300 Subject: [PATCH] Bug 24321: Clean /checkouts --- Koha/Old/Checkout.pm | 29 ++++++++- Koha/REST/V1/Checkouts.pm | 131 ++++++++++++++------------------------ 2 files changed, 75 insertions(+), 85 deletions(-) diff --git a/Koha/Old/Checkout.pm b/Koha/Old/Checkout.pm index d602a63602..f89feaefe0 100644 --- a/Koha/Old/Checkout.pm +++ b/Koha/Old/Checkout.pm @@ -27,7 +27,7 @@ Koha::Old:Checkout - Koha checkout object for returned items =head1 API -=head2 Class Methods +=head2 Class methods =head3 item @@ -58,6 +58,33 @@ sub patron { return Koha::Patron->_new_from_dbic( $patron_rs ); } +=head3 to_api_mapping + +This method returns the mapping for representing a Koha::Old::Checkout object +on the API. + +=cut + +sub to_api_mapping { + return { + issue_id => 'checkout_id', + borrowernumber => 'patron_id', + itemnumber => 'item_id', + date_due => 'due_date', + branchcode => 'library_id', + returndate => 'checkin_date', + lastreneweddate => 'last_renewed_date', + issuedate => 'checkout_date', + notedate => 'note_date', + }; +} + +=head2 Internal methods + +=head3 _type + +=cut + sub _type { return 'OldIssue'; } diff --git a/Koha/REST/V1/Checkouts.pm b/Koha/REST/V1/Checkouts.pm index c8ded14ef7..6246f9d081 100644 --- a/Koha/REST/V1/Checkouts.pm +++ b/Koha/REST/V1/Checkouts.pm @@ -45,16 +45,61 @@ List Koha::Checkout objects sub list { my $c = shift->openapi->valid_input or return; + my $checked_in = $c->validation->param('checked_in'); + try { my $checkouts_set; + if ( $checked_in ) { $checkouts_set = Koha::Old::Checkouts->new; } else { $checkouts_set = Koha::Checkouts->new; } - my $checkouts = $c->objects->search( $checkouts_set, \&_to_model, \&_to_api ); - return $c->render( status => 200, openapi => $checkouts ); + + my $args = $c->validation->output; + my $attributes = {}; + + # Extract reserved params + my ( $filtered_params, $reserved_params ) = $c->extract_reserved_params($args); + + # Merge sorting into query attributes + $c->dbic_merge_sorting( + { + attributes => $attributes, + params => $reserved_params, + result_set => $checkouts_set + } + ); + + # Merge pagination into query attributes + $c->dbic_merge_pagination( + { + filter => $attributes, + params => $reserved_params + } + ); + + # Call the to_model function by reference, if defined + if ( defined $filtered_params ) { + # remove checked_in + delete $filtered_params->{checked_in}; + # Apply the mapping function to the passed params + $filtered_params = $checkouts_set->attributes_from_api($filtered_params); + $filtered_params = $c->build_query_params( $filtered_params, $reserved_params ); + } + + # Perform search + my $checkouts = $checkouts_set->search( $filtered_params, $attributes ); + + if ($checkouts->is_paged) { + $c->add_pagination_headers({ + total => $checkouts->pager->total_entries, + params => $args, + }); + } + + return $c->render( status => 200, openapi => $checkouts->to_api ); } catch { if ( $_->isa('DBIx::Class::Exception') ) { return $c->render( @@ -182,86 +227,4 @@ sub allows_renewal { ); } -=head3 _to_api - -Helper function that maps a hashref of Koha::Checkout attributes into REST api -attribute names. - -=cut - -sub _to_api { - my $checkout = shift; - - foreach my $column ( keys %{ $Koha::REST::V1::Checkouts::to_api_mapping } ) { - my $mapped_column = $Koha::REST::V1::Checkouts::to_api_mapping->{$column}; - if ( exists $checkout->{ $column } && defined $mapped_column ) - { - $checkout->{ $mapped_column } = delete $checkout->{ $column }; - } - elsif ( exists $checkout->{ $column } && !defined $mapped_column ) { - delete $checkout->{ $column }; - } - } - return $checkout; -} - -=head3 _to_model - -Helper function that maps REST api objects into Koha::Checkouts -attribute names. - -=cut - -sub _to_model { - my $checkout = shift; - - foreach my $attribute ( keys %{ $Koha::REST::V1::Checkouts::to_model_mapping } ) { - my $mapped_attribute = $Koha::REST::V1::Checkouts::to_model_mapping->{$attribute}; - if ( exists $checkout->{ $attribute } && defined $mapped_attribute ) - { - $checkout->{ $mapped_attribute } = delete $checkout->{ $attribute }; - } - elsif ( exists $checkout->{ $attribute } && !defined $mapped_attribute ) - { - delete $checkout->{ $attribute }; - } - } - return $checkout; -} - -=head2 Global variables - -=head3 $to_api_mapping - -=cut - -our $to_api_mapping = { - issue_id => 'checkout_id', - borrowernumber => 'patron_id', - itemnumber => 'item_id', - date_due => 'due_date', - branchcode => 'library_id', - returndate => 'checkin_date', - lastreneweddate => 'last_renewed_date', - issuedate => 'checkout_date', - notedate => 'note_date', -}; - -=head3 $to_model_mapping - -=cut - -our $to_model_mapping = { - checkout_id => 'issue_id', - patron_id => 'borrowernumber', - item_id => 'itemnumber', - due_date => 'date_due', - library_id => 'branchcode', - checkin_date => 'returndate', - last_renewed_date => 'lastreneweddate', - checkout_date => 'issuedate', - note_date => 'notedate', - checked_in => undef, -}; - 1; -- 2.24.1