View | Details | Raw Unified | Return to bug 24321
Collapse All | Expand All

(-)a/Koha/REST/V1/Holds.pm (-148 / +4 lines)
Lines 31-37 use Try::Tiny; Link Here
31
31
32
=head1 API
32
=head1 API
33
33
34
=head2 Class methods
34
=head2 Methods
35
35
36
=head3 list
36
=head3 list
37
37
Lines 44-50 sub list { Link Here
44
44
45
    return try {
45
    return try {
46
        my $holds_set = Koha::Holds->new;
46
        my $holds_set = Koha::Holds->new;
47
        my $holds     = $c->objects->search( $holds_set, \&_to_model, \&_to_api );
47
        my $holds     = $c->objects->search( $holds_set );
48
        return $c->render( status => 200, openapi => $holds );
48
        return $c->render( status => 200, openapi => $holds );
49
    }
49
    }
50
    catch {
50
    catch {
Lines 194-203 sub add { Link Here
194
            if ( $_->isa('Koha::Exceptions::Object::FKConstraint') ) {
194
            if ( $_->isa('Koha::Exceptions::Object::FKConstraint') ) {
195
                my $broken_fk = $_->broken_fk;
195
                my $broken_fk = $_->broken_fk;
196
196
197
                if ( grep { $_ eq $broken_fk } keys %{$Koha::REST::V1::Holds::to_api_mapping} ) {
197
                if ( grep { $_ eq $broken_fk } keys %{Koha::Holds->new->to_api_mapping} ) {
198
                    $c->render(
198
                    $c->render(
199
                        status  => 404,
199
                        status  => 404,
200
                        openapi => $Koha::REST::V1::Holds::to_api_mapping->{$broken_fk} . ' not found.'
200
                        openapi => Koha::Holds->new->to_api_mapping->{$broken_fk} . ' not found.'
201
                    );
201
                    );
202
                }
202
                }
203
                else {
203
                else {
Lines 403-549 sub update_priority { Link Here
403
    };
403
    };
404
}
404
}
405
405
406
=head2 Internal methods
407
408
=head3 _to_api
409
410
Helper function that maps unblessed Koha::Hold objects into REST api
411
attribute names.
412
413
=cut
414
415
sub _to_api {
416
    my $hold = shift;
417
418
    # Rename attributes
419
    foreach my $column ( keys %{ $Koha::REST::V1::Holds::to_api_mapping } ) {
420
        my $mapped_column = $Koha::REST::V1::Holds::to_api_mapping->{$column};
421
        if (    exists $hold->{ $column }
422
             && defined $mapped_column )
423
        {
424
            # key != undef
425
            $hold->{ $mapped_column } = delete $hold->{ $column };
426
        }
427
        elsif (    exists $hold->{ $column }
428
                && !defined $mapped_column )
429
        {
430
            # key == undef
431
            delete $hold->{ $column };
432
        }
433
    }
434
435
    return $hold;
436
}
437
438
=head3 _to_model
439
440
Helper function that maps REST api objects into Koha::Hold
441
attribute names.
442
443
=cut
444
445
sub _to_model {
446
    my $hold = shift;
447
448
    foreach my $attribute ( keys %{ $Koha::REST::V1::Holds::to_model_mapping } ) {
449
        my $mapped_attribute = $Koha::REST::V1::Holds::to_model_mapping->{$attribute};
450
        if (    exists $hold->{ $attribute }
451
             && defined $mapped_attribute )
452
        {
453
            # key => !undef
454
            $hold->{ $mapped_attribute } = delete $hold->{ $attribute };
455
        }
456
        elsif (    exists $hold->{ $attribute }
457
                && !defined $mapped_attribute )
458
        {
459
            # key => undef / to be deleted
460
            delete $hold->{ $attribute };
461
        }
462
    }
463
464
    if ( exists $hold->{lowestPriority} ) {
465
        $hold->{lowestPriority} = ($hold->{lowestPriority}) ? 1 : 0;
466
    }
467
468
    if ( exists $hold->{suspend} ) {
469
        $hold->{suspend} = ($hold->{suspend}) ? 1 : 0;
470
    }
471
472
    if ( exists $hold->{reservedate} ) {
473
        $hold->{reservedate} = output_pref({ str => $hold->{reservedate}, dateformat => 'sql' });
474
    }
475
476
    if ( exists $hold->{cancellationdate} ) {
477
        $hold->{cancellationdate} = output_pref({ str => $hold->{cancellationdate}, dateformat => 'sql' });
478
    }
479
480
    if ( exists $hold->{timestamp} ) {
481
        $hold->{timestamp} = output_pref({ str => $hold->{timestamp}, dateformat => 'sql' });
482
    }
483
484
    if ( exists $hold->{waitingdate} ) {
485
        $hold->{waitingdate} = output_pref({ str => $hold->{waitingdate}, dateformat => 'sql' });
486
    }
487
488
    if ( exists $hold->{expirationdate} ) {
489
        $hold->{expirationdate} = output_pref({ str => $hold->{expirationdate}, dateformat => 'sql' });
490
    }
491
492
    if ( exists $hold->{suspend_until} ) {
493
        $hold->{suspend_until} = output_pref({ str => $hold->{suspend_until}, dateformat => 'sql' });
494
    }
495
496
    return $hold;
497
}
498
499
=head2 Global variables
500
501
=head3 $to_api_mapping
502
503
=cut
504
505
our $to_api_mapping = {
506
    reserve_id       => 'hold_id',
507
    borrowernumber   => 'patron_id',
508
    reservedate      => 'hold_date',
509
    biblionumber     => 'biblio_id',
510
    branchcode       => 'pickup_library_id',
511
    notificationdate => undef,
512
    reminderdate     => undef,
513
    cancellationdate => 'cancelation_date',
514
    reservenotes     => 'notes',
515
    found            => 'status',
516
    itemnumber       => 'item_id',
517
    waitingdate      => 'waiting_date',
518
    expirationdate   => 'expiration_date',
519
    lowestPriority   => 'lowest_priority',
520
    suspend          => 'suspended',
521
    suspend_until    => 'suspended_until',
522
    itemtype         => 'item_type',
523
    item_level_hold  => 'item_level',
524
};
525
526
=head3 $to_model_mapping
527
528
=cut
529
530
our $to_model_mapping = {
531
    hold_id           => 'reserve_id',
532
    patron_id         => 'borrowernumber',
533
    hold_date         => 'reservedate',
534
    biblio_id         => 'biblionumber',
535
    pickup_library_id => 'branchcode',
536
    cancelation_date  => 'cancellationdate',
537
    notes             => 'reservenotes',
538
    status            => 'found',
539
    item_id           => 'itemnumber',
540
    waiting_date      => 'waitingdate',
541
    expiration_date   => 'expirationdate',
542
    lowest_priority   => 'lowestPriority',
543
    suspended         => 'suspend',
544
    suspended_until   => 'suspend_until',
545
    item_type         => 'itemtype',
546
    item_level        => 'item_level_hold',
547
};
548
549
1;
406
1;
550
- 

Return to bug 24321