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

(-)a/Koha/Hold.pm (-2 / +45 lines)
Lines 22-31 use Modern::Perl; Link Here
22
use Carp;
22
use Carp;
23
23
24
use C4::Context qw(preference);
24
use C4::Context qw(preference);
25
use Koha::Branches;
25
use Koha::DateUtils qw(dt_from_string);
26
27
use Koha::Borrowers;
26
use Koha::Biblios;
28
use Koha::Biblios;
29
use Koha::Branches;
27
use Koha::Items;
30
use Koha::Items;
28
use Koha::DateUtils qw(dt_from_string);
29
31
30
use base qw(Koha::Object);
32
use base qw(Koha::Object);
31
33
Lines 63-68 sub waiting_expires_on { Link Here
63
    return $dt;
65
    return $dt;
64
}
66
}
65
67
68
=head3 is_found
69
70
Returns true if hold is a waiting or in transit
71
72
=cut
73
74
sub is_found {
75
    my ($self) = @_;
76
77
    return 0 unless $self->found();
78
    return 1 if $self->found() eq 'W';
79
    return 1 if $self->found() eq 'T';
80
}
81
66
=head3 is_waiting
82
=head3 is_waiting
67
83
68
Returns true if hold is a waiting hold
84
Returns true if hold is a waiting hold
Lines 76-81 sub is_waiting { Link Here
76
    return $found && $found eq 'W';
92
    return $found && $found eq 'W';
77
}
93
}
78
94
95
=head3 is_in_transit
96
97
Returns true if hold is a in_transit hold
98
99
=cut
100
101
sub is_in_transit {
102
    my ($self) = @_;
103
104
    return 0 unless $self->found();
105
    return $self->found() eq 'T';
106
}
107
79
=head3 biblio
108
=head3 biblio
80
109
81
Returns the related Koha::Biblio object for this hold
110
Returns the related Koha::Biblio object for this hold
Lines 118-123 sub branch { Link Here
118
    return $self->{_branch};
147
    return $self->{_branch};
119
}
148
}
120
149
150
=head3 borrower
151
152
Returns the related Koha::Borrower object for this Hold
153
154
=cut
155
156
sub borrower {
157
    my ($self) = @_;
158
159
    $self->{_borrower} ||= Koha::Borrowers->find( $self->borrowernumber() );
160
161
    return $self->{_borrower};
162
}
163
121
=head3 type
164
=head3 type
122
165
123
=cut
166
=cut
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt (-2 / +8 lines)
Lines 732-743 function checkMultiHold() { Link Here
732
        </td>
732
        </td>
733
        <td>[% reserveloo.notes %]</td>
733
        <td>[% reserveloo.notes %]</td>
734
        <td>[% reserveloo.date %]</td>
734
        <td>[% reserveloo.date %]</td>
735
	<td>[% reserveloo.expirationdate %]</td>
735
        <td>
736
            [% IF reserveloo.waiting_until %]
737
                [% reserveloo.waiting_until | $KohaDates %]
738
            [% ELSE %]
739
                [% reserveloo.expirationdate %]
740
            [% END %]
741
        </td>
736
        <td>
742
        <td>
737
    [% IF ( reserveloo.wait ) %]
743
    [% IF ( reserveloo.wait ) %]
738
    	[% IF ( reserveloo.atdestination ) %]
744
    	[% IF ( reserveloo.atdestination ) %]
739
            [% IF ( reserveloo.found ) %]
745
            [% IF ( reserveloo.found ) %]
740
                Item waiting at <b> [% reserveloo.wbrname %]</b> <input type="hidden" name="pickup" value="[% reserveloo.wbrcode %]" />
746
                Item waiting at <b> [% reserveloo.wbrname %]</b> <input type="hidden" name="pickup" value="[% reserveloo.wbrcode %]" /> since [% reserveloo.waiting_date | $KohaDates %]
741
            [% ELSE %]
747
            [% ELSE %]
742
                Waiting to be pulled <input type="hidden" name="pickup" value="[% reserveloo.wbrcode %]" />
748
                Waiting to be pulled <input type="hidden" name="pickup" value="[% reserveloo.wbrcode %]" />
743
            [% END %]
749
            [% END %]
(-)a/reserve/request.pl (-60 / +65 lines)
Lines 44-49 use C4::Utils::DataTables::Members; Link Here
44
use C4::Members;
44
use C4::Members;
45
use C4::Search;		# enabled_staff_search_views
45
use C4::Search;		# enabled_staff_search_views
46
use Koha::DateUtils;
46
use Koha::DateUtils;
47
use Koha::Holds;
47
48
48
my $dbh = C4::Context->dbh;
49
my $dbh = C4::Context->dbh;
49
my $sth;
50
my $sth;
Lines 462-546 foreach my $biblionumber (@biblionumbers) { Link Here
462
463
463
    # existingreserves building
464
    # existingreserves building
464
    my @reserveloop;
465
    my @reserveloop;
465
    $reserves = GetReservesFromBiblionumber({ biblionumber => $biblionumber, all_dates => 1 });
466
    my @reserves = Koha::Holds->search( { biblionumber => $biblionumber }, { order_by => 'priority' } );
466
    foreach my $res ( sort {
467
    foreach my $res (
467
            my $a_found = $a->{found} || '';
468
        sort {
468
            my $b_found = $a->{found} || '';
469
            my $a_found = $a->found() || '';
470
            my $b_found = $a->found() || '';
469
            $a_found cmp $b_found;
471
            $a_found cmp $b_found;
470
        } @$reserves ) {
472
        } @reserves
473
      )
474
    {
471
        my %reserve;
475
        my %reserve;
472
        my @optionloop;
476
        my @optionloop;
473
        for ( my $i = 1 ; $i <= $totalcount ; $i++ ) {
477
        for ( my $i = 1 ; $i <= $totalcount ; $i++ ) {
474
            push(
478
            push(
475
                 @optionloop,
479
                @optionloop,
476
                 {
480
                {
477
                  num      => $i,
481
                    num      => $i,
478
                  selected => ( $i == $res->{priority} ),
482
                    selected => ( $i == $res->priority() ),
479
                 }
483
                }
480
                );
484
            );
481
        }
485
        }
482
486
483
        if ( defined $res->{'found'} && ($res->{'found'} eq 'W' || $res->{'found'} eq 'T' )) {
487
        if ( $res->is_found() ) {
484
            my $item = $res->{'itemnumber'};
488
            $reserve{'wait'}          = 1;
485
            $item = GetBiblioFromItemNumber($item,undef);
489
            $reserve{'holdingbranch'} = $res->item()->holdingbranch();
486
            $reserve{'wait'}= 1;
490
            $reserve{'biblionumber'}  = $res->item()->biblionumber();
487
            $reserve{'holdingbranch'}=$item->{'holdingbranch'};
491
            $reserve{'barcodenumber'} = $res->item()->barcode();
488
            $reserve{'biblionumber'}=$item->{'biblionumber'};
492
            $reserve{'wbrcode'}       = $res->branchcode();
489
            $reserve{'barcodenumber'}   = $item->{'barcode'};
493
            $reserve{'itemnumber'}    = $res->itemnumber();
490
            $reserve{'wbrcode'} = $res->{'branchcode'};
494
            $reserve{'wbrname'}       = $res->branch()->branchname();
491
            $reserve{'itemnumber'}  = $res->{'itemnumber'};
495
492
            $reserve{'wbrname'} = $branches->{$res->{'branchcode'}}->{'branchname'};
496
            if ( $reserve{'holdingbranch'} eq $reserve{'wbrcode'} ) {
493
            if($reserve{'holdingbranch'} eq $reserve{'wbrcode'}){
497
494
                # Just because the holdingbranch matches the reserve branch doesn't mean the item
498
                # Just because the holdingbranch matches the reserve branch doesn't mean the item
495
                # has arrived at the destination, check for an open transfer for the item as well
499
                # has arrived at the destination, check for an open transfer for the item as well
496
                my ( $transfertwhen, $transfertfrom, $transferto ) = C4::Circulation::GetTransfers( $res->{itemnumber} );
500
                my ( $transfertwhen, $transfertfrom, $transferto ) =
497
                if ( not $transferto or $transferto ne $res->{branchcode} ) {
501
                  C4::Circulation::GetTransfers( $res->itemnumber() );
502
                if ( not $transferto or $transferto ne $res->branchcode() ) {
498
                    $reserve{'atdestination'} = 1;
503
                    $reserve{'atdestination'} = 1;
499
                }
504
                }
500
            }
505
            }
506
501
            # set found to 1 if reserve is waiting for patron pickup
507
            # set found to 1 if reserve is waiting for patron pickup
502
            $reserve{'found'} = 1 if $res->{'found'} eq 'W';
508
            $reserve{'found'}     = $res->is_found();
503
            $reserve{'intransit'} = 1 if $res->{'found'} eq 'T';
509
            $reserve{'intransit'} = $res->is_in_transit();
504
        } elsif ($res->{priority} > 0) {
510
        }
505
            if (defined($res->{itemnumber})) {
511
        elsif ( $res->priority() > 0 ) {
506
                my $item = GetItem($res->{itemnumber});
512
            if ( my $item = $res->item() )  {
507
                $reserve{'itemnumber'}  = $res->{'itemnumber'};
513
                $reserve{'itemnumber'}      = $item->id();
508
                $reserve{'barcodenumber'}   = $item->{'barcode'};
514
                $reserve{'barcodenumber'}   = $item->barcode();
509
                $reserve{'item_level_hold'} = 1;
515
                $reserve{'item_level_hold'} = 1;
510
            }
516
            }
511
        }
517
        }
512
518
513
        #     get borrowers reserve info
519
        #     get borrowers reserve info
514
        my $reserveborrowerinfo = GetMember( borrowernumber => $res->{'borrowernumber'} );
520
        if ( C4::Context->preference('HidePatronName') ) {
515
        if (C4::Context->preference('HidePatronName')){
521
            $reserve{'hidename'}   = 1;
516
	    $reserve{'hidename'} = 1;
522
            $reserve{'cardnumber'} = $res->borrower()->cardnumber();
517
	    $reserve{'cardnumber'} = $reserveborrowerinfo->{'cardnumber'};
523
        }
518
	}
524
        $reserve{'expirationdate'} = format_date( $res->expirationdate() )
519
        $reserve{'expirationdate'} = format_date( $res->{'expirationdate'} )
525
          unless ( !defined( $res->expirationdate() ) || $res->expirationdate() eq '0000-00-00' );
520
            unless ( !defined($res->{'expirationdate'}) || $res->{'expirationdate'} eq '0000-00-00' );
526
        $reserve{'date'}           = format_date( $res->reservedate() );
521
        $reserve{'date'}           = format_date( $res->{'reservedate'} );
527
        $reserve{'borrowernumber'} = $res->borrowernumber();
522
        $reserve{'borrowernumber'} = $res->{'borrowernumber'};
528
        $reserve{'biblionumber'}   = $res->biblionumber();
523
        $reserve{'biblionumber'}   = $res->{'biblionumber'};
529
        $reserve{'borrowernumber'} = $res->borrowernumber();
524
        $reserve{'borrowernumber'} = $res->{'borrowernumber'};
530
        $reserve{'firstname'}      = $res->borrower()->firstname();
525
        $reserve{'firstname'}      = $reserveborrowerinfo->{'firstname'};
531
        $reserve{'surname'}        = $res->borrower()->surname();
526
        $reserve{'surname'}        = $reserveborrowerinfo->{'surname'};
532
        $reserve{'notes'}          = $res->reservenotes();
527
        $reserve{'notes'}          = $res->{'reservenotes'};
533
        $reserve{'wait'}           = $res->is_waiting();
528
        $reserve{'wait'}           =
534
        $reserve{'waiting_date'}   = $res->waitingdate();
529
          ( ( defined $res->{'found'} and $res->{'found'} eq 'W' ) or ( $res->{'priority'} eq '0' ) );
535
        $reserve{'waiting_until'}  = $res->is_waiting() ? $res->waiting_expires_on() : undef;
530
        $reserve{'voldesc'}         = $res->{'volumeddesc'};
536
        $reserve{'ccode'}           = $res->item() ? $res->item()->ccode() : undef;
531
        $reserve{'ccode'}           = $res->{'ccode'};
537
        $reserve{'barcode'}         = $res->item() ? $res->item()->barcode() : undef;
532
        $reserve{'barcode'}         = $res->{'barcode'};
538
        $reserve{'priority'}        = $res->priority();
533
        $reserve{'priority'}    = $res->{'priority'};
539
        $reserve{'lowestPriority'}  = $res->lowestPriority();
534
        $reserve{'lowestPriority'}    = $res->{'lowestPriority'};
540
        $reserve{'optionloop'}      = \@optionloop;
535
        $reserve{'optionloop'} = \@optionloop;
541
        $reserve{'suspend'}         = $res->suspend();
536
        $reserve{'suspend'} = $res->{'suspend'};
542
        $reserve{'suspend_until'}   = $res->suspend_until();
537
        $reserve{'suspend_until'} = $res->{'suspend_until'};
543
        $reserve{'reserve_id'}      = $res->reserve_id();
538
        $reserve{'reserve_id'} = $res->{'reserve_id'};
539
544
540
        if ( C4::Context->preference('IndependentBranches') && $flags->{'superlibrarian'} != 1 ) {
545
        if ( C4::Context->preference('IndependentBranches') && $flags->{'superlibrarian'} != 1 ) {
541
              $reserve{'branchloop'} = [ GetBranchDetail($res->{'branchcode'}) ];
546
            $reserve{'branchloop'} = [ GetBranchDetail( $res->branchcode() ) ];
542
        } else {
547
        }
543
              $reserve{'branchloop'} = GetBranchesLoop($res->{'branchcode'});
548
        else {
549
            $reserve{'branchloop'} = GetBranchesLoop( $res->branchcode() );
544
        }
550
        }
545
551
546
        push( @reserveloop, \%reserve );
552
        push( @reserveloop, \%reserve );
547
- 

Return to bug 13517