Bug 24321: Clean /checkouts
authorTomas Cohen Arazi <tomascohen@theke.io>
Tue, 31 Dec 2019 14:50:36 +0000 (11:50 -0300)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Wed, 8 Jan 2020 14:42:39 +0000 (14:42 +0000)
Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Koha/Old/Checkout.pm
Koha/REST/V1/Checkouts.pm

index d602a63..f89feae 100644 (file)
@@ -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';
 }
index c8ded14..6246f9d 100644 (file)
@@ -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;