Bug 24321: Clean /checkouts

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>
This commit is contained in:
Tomas Cohen Arazi 2019-12-31 11:50:36 -03:00 committed by Martin Renvoize
parent 4ba67994a9
commit a6218a1cdc
No known key found for this signature in database
GPG Key ID: 422B469130441A0F
2 changed files with 75 additions and 85 deletions

View 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';
}

View 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;