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

(-)a/C4/Reserves.pm (-2 / +81 lines)
Lines 23-28 package C4::Reserves; Link Here
23
23
24
use strict;
24
use strict;
25
#use warnings; FIXME - Bug 2505
25
#use warnings; FIXME - Bug 2505
26
use Date::Calc qw( Add_Delta_Days );
26
use C4::Context;
27
use C4::Context;
27
use C4::Biblio;
28
use C4::Biblio;
28
use C4::Members;
29
use C4::Members;
Lines 116-122 BEGIN { Link Here
116
        
117
        
117
        &CheckReserves
118
        &CheckReserves
118
        &CanBookBeReserved
119
        &CanBookBeReserved
119
	&CanItemBeReserved
120
        &CanItemBeReserved
120
        &CancelReserve
121
        &CancelReserve
121
        &CancelExpiredReserves
122
        &CancelExpiredReserves
122
123
Lines 130-135 BEGIN { Link Here
130
        &ReserveSlip
131
        &ReserveSlip
131
        &ToggleSuspend
132
        &ToggleSuspend
132
        &SuspendAll
133
        &SuspendAll
134
        &GetMaxPickupDelay
135
        &GetMaxPickupDate
136
        &GetReservesControlBranch
133
    );
137
    );
134
    @EXPORT_OK = qw( MergeHolds );
138
    @EXPORT_OK = qw( MergeHolds );
135
}    
139
}    
Lines 497-502 sub CanItemBeReserved{ Link Here
497
        return 0;
501
        return 0;
498
    }
502
    }
499
}
503
}
504
505
=item GetMaxPickupDelay
506
507
$resallowed = &GetMaxPickupDelay($borrowernumber, $item)
508
509
this function return the max delay for an hold
510
511
=cut
512
513
sub GetMaxPickupDelay {
514
    my ( $borrowernumber, $item ) = @_;
515
516
    my $dbh             = C4::Context->dbh;
517
    my $allowedreserves = 0;
518
519
    my $borrower        = C4::Members::GetMember( 'borrowernumber' => $borrowernumber );
520
521
    my $controlbranch   = GetReservesControlBranch( $borrower, $item );
522
523
    my $issuingrule     = C4::Circulation::GetIssuingRule( $borrower->{categorycode}, $item->{itype}, $controlbranch );
524
525
    return $issuingrule->{holdspickupdelay}
526
        if defined($issuingrule)
527
            and defined $issuingrule->{holdspickupdelay};
528
529
    # if nothing found, return the syspref value
530
    return C4::Context->preference("ReservesMaxPickUpDelay") || 0;
531
}
532
533
=item GetMaxPickupDate
534
535
$maxpickupdate = &GetMaxPickupDate($item, $borrowernumber);
536
$item->{waitingdate} is a string or a DateTime.
537
538
this function returns the max pickup date (DateTime format).
539
(e.g. : the date after which the hold will be considered cancelled)
540
541
=cut
542
543
sub GetMaxPickupDate {
544
    my ( $item, $borrowernumber ) = @_;
545
    return unless $item->{waitingdate};
546
547
    my $date = ref $item->{waitingdate} eq 'DateTime'
548
        ? $item->{waitingdate}
549
        : dt_from_string $item->{waitingdate};
550
551
    my $delay  = GetMaxPickupDelay( $borrowernumber, $item );
552
    $date->add( days => $delay );
553
    return $date;
554
}
555
556
=item GetReservesControlBranch
557
558
$branchcode = &GetReservesControlBranch($borrower, $item)
559
560
Returns the branchcode to consider to check hold rules against
561
562
=cut
563
564
sub GetReservesControlBranch {
565
    my ( $borrower, $item ) = @_;
566
    my $controlbranch = C4::Context->preference('ReservesControlBranch');
567
    my $hbr           = C4::Context->preference('HomeOrHoldingBranch') || "homebranch";
568
    my $branchcode    = "*";
569
    if ( $controlbranch eq "ItemHomeLibrary" ) {
570
        $branchcode = $item->{$hbr};
571
    } elsif ( $controlbranch eq "PatronLibrary" ) {
572
        $branchcode = $borrower->{branchcode};
573
    }
574
    return $branchcode;
575
}
576
500
#--------------------------------------------------------------------------------
577
#--------------------------------------------------------------------------------
501
=head2 GetReserveCount
578
=head2 GetReserveCount
502
579
Lines 906-913 sub CancelExpiredReserves { Link Here
906
    while ( my $res = $sth->fetchrow_hashref() ) {
983
    while ( my $res = $sth->fetchrow_hashref() ) {
907
        CancelReserve( $res->{'biblionumber'}, '', $res->{'borrowernumber'} );
984
        CancelReserve( $res->{'biblionumber'}, '', $res->{'borrowernumber'} );
908
    }
985
    }
909
  
986
910
    # Cancel reserves that have been waiting too long
987
    # Cancel reserves that have been waiting too long
988
    # FIXME The only way I see to do this job with the issuingrules.holdspickupdelay value would be to
989
    # get all reserves and to get the related borrower and item. So we could call GetMaxPickupDelay for each reserve.
911
    if ( C4::Context->preference("ExpireReservesMaxPickUpDelay") ) {
990
    if ( C4::Context->preference("ExpireReservesMaxPickUpDelay") ) {
912
        my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
991
        my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
913
        my $charge = C4::Context->preference("ExpireReservesMaxPickUpDelayCharge");
992
        my $charge = C4::Context->preference("ExpireReservesMaxPickUpDelayCharge");
(-)a/admin/smart-rules.pl (-6 / +7 lines)
Lines 101-109 elsif ($op eq 'delete-branch-item') { Link Here
101
# save the values entered
101
# save the values entered
102
elsif ($op eq 'add') {
102
elsif ($op eq 'add') {
103
    my $sth_search = $dbh->prepare('SELECT COUNT(*) AS total FROM issuingrules WHERE branchcode=? AND categorycode=? AND itemtype=?');
103
    my $sth_search = $dbh->prepare('SELECT COUNT(*) AS total FROM issuingrules WHERE branchcode=? AND categorycode=? AND itemtype=?');
104
    my $sth_insert = $dbh->prepare('INSERT INTO issuingrules (branchcode, categorycode, itemtype, maxissueqty, renewalsallowed, renewalperiod, reservesallowed, issuelength, lengthunit, hardduedate, hardduedatecompare, fine, finedays, firstremind, chargeperiod,rentaldiscount, overduefinescap) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)');
104
    my $sth_insert = $dbh->prepare('INSERT INTO issuingrules (branchcode, categorycode, itemtype, maxissueqty, renewalsallowed, renewalperiod, reservesallowed, holdspickupdelay, issuelength, lengthunit, hardduedate, hardduedatecompare, fine, finedays, firstremind, chargeperiod,rentaldiscount, overduefinescap) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)');
105
    my $sth_update=$dbh->prepare("UPDATE issuingrules SET fine=?, finedays=?, firstremind=?, chargeperiod=?, maxissueqty=?, renewalsallowed=?, renewalperiod=?, reservesallowed=?, issuelength=?, lengthunit = ?, hardduedate=?, hardduedatecompare=?, rentaldiscount=?, overduefinescap=?  WHERE branchcode=? AND categorycode=? AND itemtype=?");
105
    my $sth_update=$dbh->prepare("UPDATE issuingrules SET fine=?, finedays=?, firstremind=?, chargeperiod=?, maxissueqty=?, renewalsallowed=?, renewalperiod=?, reservesallowed=?, holdspickupdelay=?, issuelength=?, lengthunit = ?, hardduedate=?, hardduedatecompare=?, rentaldiscount=?, overduefinescap=?  WHERE branchcode=? AND categorycode=? AND itemtype=?");
106
    
106
107
    my $br = $branch; # branch
107
    my $br = $branch; # branch
108
    my $bor  = $input->param('categorycode'); # borrower category
108
    my $bor  = $input->param('categorycode'); # borrower category
109
    my $cat  = $input->param('itemtype');     # item type
109
    my $cat  = $input->param('itemtype');     # item type
Lines 115-120 elsif ($op eq 'add') { Link Here
115
    my $renewalsallowed  = $input->param('renewalsallowed');
115
    my $renewalsallowed  = $input->param('renewalsallowed');
116
    my $renewalperiod    = $input->param('renewalperiod');
116
    my $renewalperiod    = $input->param('renewalperiod');
117
    my $reservesallowed  = $input->param('reservesallowed');
117
    my $reservesallowed  = $input->param('reservesallowed');
118
    my $holdspickupdelay = $input->param('holdspickupdelay');
118
    $maxissueqty =~ s/\s//g;
119
    $maxissueqty =~ s/\s//g;
119
    $maxissueqty = undef if $maxissueqty !~ /^\d+/;
120
    $maxissueqty = undef if $maxissueqty !~ /^\d+/;
120
    my $issuelength  = $input->param('issuelength');
121
    my $issuelength  = $input->param('issuelength');
Lines 129-139 elsif ($op eq 'add') { Link Here
129
    $sth_search->execute($br,$bor,$cat);
130
    $sth_search->execute($br,$bor,$cat);
130
    my $res = $sth_search->fetchrow_hashref();
131
    my $res = $sth_search->fetchrow_hashref();
131
    if ($res->{total}) {
132
    if ($res->{total}) {
132
        $sth_update->execute($fine, $finedays,$firstremind, $chargeperiod, $maxissueqty, $renewalsallowed, $renewalperiod, $reservesallowed, $issuelength,$lengthunit, $hardduedate,$hardduedatecompare,$rentaldiscount,$overduefinescap, $br,$bor,$cat);
133
        $sth_update->execute($fine, $finedays,$firstremind, $chargeperiod, $maxissueqty, $renewalsallowed, $renewalperiod, $reservesallowed, $holdspickupdelay, $issuelength,$lengthunit, $hardduedate,$hardduedatecompare,$rentaldiscount,$overduefinescap, $br,$bor,$cat);
133
    } else {
134
    } else {
134
        $sth_insert->execute($br,$bor,$cat,$maxissueqty,$renewalsallowed, $renewalperiod, $reservesallowed,$issuelength,$lengthunit,$hardduedate,$hardduedatecompare,$fine,$finedays,$firstremind,$chargeperiod,$rentaldiscount,$overduefinescap);
135
        $sth_insert->execute($br,$bor,$cat,$maxissueqty,$renewalsallowed, $renewalperiod, $reservesallowed, $holdspickupdelay, $issuelength,$lengthunit,$hardduedate,$hardduedatecompare,$fine,$finedays,$firstremind,$chargeperiod,$rentaldiscount,$overduefinescap);
135
    }
136
    }
136
} 
137
}
137
elsif ($op eq "set-branch-defaults") {
138
elsif ($op eq "set-branch-defaults") {
138
    my $categorycode  = $input->param('categorycode');
139
    my $categorycode  = $input->param('categorycode');
139
    my $maxissueqty   = $input->param('maxissueqty');
140
    my $maxissueqty   = $input->param('maxissueqty');
(-)a/circ/circulation.pl (+4 lines)
Lines 373-378 if ($borrowernumber) { Link Here
373
        if ( $num_res->{'found'} && $num_res->{'found'} eq 'W' ) {
373
        if ( $num_res->{'found'} && $num_res->{'found'} eq 'W' ) {
374
            $getreserv{color}   = 'reserved';
374
            $getreserv{color}   = 'reserved';
375
            $getreserv{waiting} = 1;
375
            $getreserv{waiting} = 1;
376
            my $maxpickupdate = GetMaxPickupDate( $num_res, $borrowernumber );
377
            $getWaitingReserveInfo{maxpickupdate} = $maxpickupdate;
378
            $getreserv{maxpickupdate} = $maxpickupdate;
379
376
#     genarate information displaying only waiting reserves
380
#     genarate information displaying only waiting reserves
377
        $getWaitingReserveInfo{title}        = $getiteminfo->{'title'};
381
        $getWaitingReserveInfo{title}        = $getiteminfo->{'title'};
378
        $getWaitingReserveInfo{biblionumber} = $getiteminfo->{'biblionumber'};
382
        $getWaitingReserveInfo{biblionumber} = $getiteminfo->{'biblionumber'};
(-)a/circ/waitingreserves.pl (-29 / +24 lines)
Lines 21-43 Link Here
21
use strict;
21
use strict;
22
use warnings;
22
use warnings;
23
use CGI;
23
use CGI;
24
use DateTime;
24
use C4::Context;
25
use C4::Context;
25
use C4::Output;
26
use C4::Output;
26
use C4::Branch; # GetBranchName
27
use C4::Branch; # GetBranchName
27
use C4::Auth;
28
use C4::Auth;
28
use C4::Dates qw/format_date/;
29
use C4::Dates qw/format_date/;
29
use C4::Circulation;
30
use C4::Circulation;
31
use C4::Reserves;
30
use C4::Members;
32
use C4::Members;
31
use C4::Biblio;
33
use C4::Biblio;
32
use C4::Items;
34
use C4::Items;
33
34
use Date::Calc qw(
35
  Today
36
  Add_Delta_Days
37
  Date_to_Days
38
);
39
use C4::Reserves;
35
use C4::Reserves;
40
use C4::Koha;
36
use C4::Koha;
37
use Koha::DateUtils;
41
38
42
my $input = new CGI;
39
my $input = new CGI;
43
40
Lines 86-92 my ($reservcount, $overcount); Link Here
86
my @getreserves = $all_branches ? GetReservesForBranch() : GetReservesForBranch($default);
83
my @getreserves = $all_branches ? GetReservesForBranch() : GetReservesForBranch($default);
87
# get reserves for the branch we are logged into, or for all branches
84
# get reserves for the branch we are logged into, or for all branches
88
85
89
my $today = Date_to_Days(&Today);
86
my $today = dt_from_string;
90
foreach my $num (@getreserves) {
87
foreach my $num (@getreserves) {
91
    next unless ($num->{'waitingdate'} && $num->{'waitingdate'} ne '0000-00-00');
88
    next unless ($num->{'waitingdate'} && $num->{'waitingdate'} ne '0000-00-00');
92
89
Lines 105-116 foreach my $num (@getreserves) { Link Here
105
    $gettitle->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $gettitle->{'itype'} : $gettitle->{'itemtype'};
102
    $gettitle->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $gettitle->{'itype'} : $gettitle->{'itemtype'};
106
    my $getborrower = GetMember(borrowernumber => $num->{'borrowernumber'});
103
    my $getborrower = GetMember(borrowernumber => $num->{'borrowernumber'});
107
    my $itemtypeinfo = getitemtypeinfo( $gettitle->{'itemtype'} );  # using the fixed up itype/itemtype
104
    my $itemtypeinfo = getitemtypeinfo( $gettitle->{'itemtype'} );  # using the fixed up itype/itemtype
108
    $getreserv{'waitingdate'} = format_date( $num->{'waitingdate'} );
105
109
    my ( $waiting_year, $waiting_month, $waiting_day ) = split (/-/, $num->{'waitingdate'});
106
    if ( $num->{waitingdate} ) {
110
    ( $waiting_year, $waiting_month, $waiting_day ) =
107
        my $maxpickupdate = GetMaxPickupDate( $num, $borrowernumber );
111
      Add_Delta_Days( $waiting_year, $waiting_month, $waiting_day,
108
        $getreserv{waitingdate} = $num->{waitingdate};
112
        C4::Context->preference('ReservesMaxPickUpDelay'));
109
        $getreserv{maxpickupdate} = $maxpickupdate;
113
    my $calcDate = Date_to_Days( $waiting_year, $waiting_month, $waiting_day );
110
        if ( DateTime->compare( $today, $maxpickupdate ) == 1 ) {
111
            if ($cancelall) {
112
                my $res = cancel( $itemnumber, $borrowernum, $holdingbranch, $homebranch, !$transfer_when_cancel_all );
113
                push @cancel_result, $res if $res;
114
                next;
115
            } else {
116
                push @overloop,   \%getreserv;
117
                $overcount++;
118
            }
119
        }else{
120
            push @reservloop, \%getreserv;
121
            $reservcount++;
122
        }
123
    }
114
124
115
    $getreserv{'itemtype'}       = $itemtypeinfo->{'description'};
125
    $getreserv{'itemtype'}       = $itemtypeinfo->{'description'};
116
    $getreserv{'title'}          = $gettitle->{'title'};
126
    $getreserv{'title'}          = $gettitle->{'title'};
Lines 131-151 foreach my $num (@getreserves) { Link Here
131
    if ( $getborrower->{'emailaddress'} ) {
141
    if ( $getborrower->{'emailaddress'} ) {
132
        $getreserv{'borrowermail'}  = $getborrower->{'emailaddress'};
142
        $getreserv{'borrowermail'}  = $getborrower->{'emailaddress'};
133
    }
143
    }
134
 
135
    if ($today > $calcDate) {
136
        if ($cancelall) {
137
            my $res = cancel( $itemnumber, $borrowernum, $holdingbranch, $homebranch, !$transfer_when_cancel_all );
138
            push @cancel_result, $res if $res;
139
            next;
140
        } else {
141
            push @overloop,   \%getreserv;
142
            $overcount++;
143
        }
144
    }else{
145
        push @reservloop, \%getreserv;
146
        $reservcount++;
147
    }
148
    
149
}
144
}
150
145
151
$template->param(cancel_result => \@cancel_result) if @cancel_result;
146
$template->param(cancel_result => \@cancel_result) if @cancel_result;
Lines 155-161 $template->param( Link Here
155
    overloop    => \@overloop,
150
    overloop    => \@overloop,
156
    overcount   => $overcount,
151
    overcount   => $overcount,
157
    show_date   => format_date(C4::Dates->today('iso')),
152
    show_date   => format_date(C4::Dates->today('iso')),
158
    ReservesMaxPickUpDelay => C4::Context->preference('ReservesMaxPickUpDelay')
153
    dateformat  => C4::Context->preference("dateformat"),
159
);
154
);
160
155
161
if ($cancelall) {
156
if ($cancelall) {
(-)a/installer/data/mysql/kohastructure.sql (+1 lines)
Lines 1129-1134 CREATE TABLE `issuingrules` ( -- circulation and fine rules Link Here
1129
  `renewalsallowed` smallint(6) NOT NULL default "0", -- how many renewals are allowed
1129
  `renewalsallowed` smallint(6) NOT NULL default "0", -- how many renewals are allowed
1130
  `renewalperiod` int(4) default NULL, -- renewal period in the unit set in issuingrules.lengthunit
1130
  `renewalperiod` int(4) default NULL, -- renewal period in the unit set in issuingrules.lengthunit
1131
  `reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
1131
  `reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
1132
  `holdspickupdelay` int(11)  default NULL, -- after how many days a hold is problematic (in days)
1132
  `branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
1133
  `branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
1133
  overduefinescap decimal default NULL, -- the maximum amount of an overdue fine
1134
  overduefinescap decimal default NULL, -- the maximum amount of an overdue fine
1134
  PRIMARY KEY  (`branchcode`,`categorycode`,`itemtype`),
1135
  PRIMARY KEY  (`branchcode`,`categorycode`,`itemtype`),
(-)a/installer/data/mysql/updatedatabase.pl (+14 lines)
Lines 7010-7015 CREATE TABLE IF NOT EXISTS borrower_files ( Link Here
7010
    SetVersion($DBversion);
7010
    SetVersion($DBversion);
7011
}
7011
}
7012
7012
7013
7014
7015
7016
7017
$DBversion = "3.11.00.XXX";
7018
if ( CheckVersion($DBversion) ) {
7019
    $dbh->do(qq{
7020
        ALTER TABLE issuingrules ADD COLUMN holdspickupdelay INT(11) NULL default NULL AFTER reservesallowed;
7021
    });
7022
    print "Upgrade to $DBversion done (8367: Add colum issuingrules.holdspickupdelay)\n";
7023
    SetVersion($DBversion);
7024
}
7025
7026
7013
=head1 FUNCTIONS
7027
=head1 FUNCTIONS
7014
7028
7015
=head2 TableExists($table)
7029
=head2 TableExists($table)
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt (-1 / +5 lines)
Lines 151-158 for="tobranch"><strong>Clone these rules to:</strong></label> <input type="hidde Link Here
151
                <th>Renewals allowed (count)</th>
151
                <th>Renewals allowed (count)</th>
152
                <th>Renewal period</th>
152
                <th>Renewal period</th>
153
                <th>Holds allowed (count)</th>
153
                <th>Holds allowed (count)</th>
154
                <th>Holds pickup delay (day)</th>
154
                <th>Rental discount (%)</th>
155
                <th>Rental discount (%)</th>
155
                <th colspan="2">&nbsp;</th>
156
                <th>&nbsp;</th>
157
                <th>&nbsp;</th>
156
            </tr>
158
            </tr>
157
            </thead>
159
            </thead>
158
            <tbody>
160
            <tbody>
Lines 208-213 for="tobranch"><strong>Clone these rules to:</strong></label> <input type="hidde Link Here
208
							<td>[% rule.renewalsallowed %]</td>
210
							<td>[% rule.renewalsallowed %]</td>
209
                            <td>[% rule.renewalperiod %]</td>
211
                            <td>[% rule.renewalperiod %]</td>
210
							<td>[% rule.reservesallowed %]</td>
212
							<td>[% rule.reservesallowed %]</td>
213
                            <td>[% rule.holdspickupdelay %]</td>
211
							<td>[% rule.rentaldiscount %]</td>
214
							<td>[% rule.rentaldiscount %]</td>
212
                            <td><a href="#" class="editrule">Edit</a></td>
215
                            <td><a href="#" class="editrule">Edit</a></td>
213
							<td>
216
							<td>
Lines 257-262 for="tobranch"><strong>Clone these rules to:</strong></label> <input type="hidde Link Here
257
                    <td><input type="text" name="renewalsallowed" id="renewalsallowed" size="2" /></td>
260
                    <td><input type="text" name="renewalsallowed" id="renewalsallowed" size="2" /></td>
258
                    <td><input type="text" name="renewalperiod" id="renewalperiod" size="3" /></td>
261
                    <td><input type="text" name="renewalperiod" id="renewalperiod" size="3" /></td>
259
                    <td><input type="text" name="reservesallowed" id="reservesallowed" size="2" /></td>
262
                    <td><input type="text" name="reservesallowed" id="reservesallowed" size="2" /></td>
263
                    <td><input type="text" name="holdspickupdelay" id="holdspickupdelay" size="2" /></td>
260
                    <td><input type="text" name="rentaldiscount" id="rentaldiscount" size="2" /></td>
264
                    <td><input type="text" name="rentaldiscount" id="rentaldiscount" size="2" /></td>
261
                    <td colspan="2">
265
                    <td colspan="2">
262
                        <input type="hidden" name="branch" value="[% current_branch %]"/>
266
                        <input type="hidden" name="branch" value="[% current_branch %]"/>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (-2 / +2 lines)
Lines 710-716 No patron matched <span class="ex">[% message %]</span> Link Here
710
		    <h4>Holds waiting:</h4>
710
		    <h4>Holds waiting:</h4>
711
			        [% FOREACH WaitingReserveLoo IN WaitingReserveLoop %]
711
			        [% FOREACH WaitingReserveLoo IN WaitingReserveLoop %]
712
			            <ul>
712
			            <ul>
713
			                <li> <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% WaitingReserveLoo.biblionumber %]">[% WaitingReserveLoo.title |html %]</a> ([% WaitingReserveLoo.itemtype %]), [% IF ( WaitingReserveLoo.author ) %]by [% WaitingReserveLoo.author %][% END %] [% IF ( WaitingReserveLoo.itemcallnumber ) %][[% WaitingReserveLoo.itemcallnumber %]] [% END %]Hold placed on [% WaitingReserveLoo.reservedate %].
713
                            <li> <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% WaitingReserveLoo.biblionumber %]">[% WaitingReserveLoo.title |html %]</a> ([% WaitingReserveLoo.itemtype %]), [% IF ( WaitingReserveLoo.author ) %]by [% WaitingReserveLoo.author %][% END %] [% IF ( WaitingReserveLoo.itemcallnumber ) %][[% WaitingReserveLoo.itemcallnumber %]] [% END %]Hold placed on [% WaitingReserveLoo.reservedate %] waiting until [% WaitingReserveLoo.maxpickupdate | $KohaDates %].
714
			            [% IF ( WaitingReserveLoo.waitingat ) %]
714
			            [% IF ( WaitingReserveLoo.waitingat ) %]
715
			                <br />[% IF ( WaitingReserveLoo.waitinghere ) %]<strong class="waitinghere">[% ELSE %]<strong>[% END %]Waiting at [% WaitingReserveLoo.waitingat %]</strong>
715
			                <br />[% IF ( WaitingReserveLoo.waitinghere ) %]<strong class="waitinghere">[% ELSE %]<strong>[% END %]Waiting at [% WaitingReserveLoo.waitingat %]</strong>
716
			            [% END %]
716
			            [% END %]
Lines 1115-1121 No patron matched <span class="ex">[% message %]</span> Link Here
1115
                    <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% reservloo.biblionumber %]"><strong>[% reservloo.title |html %]</strong></a>[% IF ( reservloo.author ) %], by [% reservloo.author %][% END %]</td>
1115
                    <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% reservloo.biblionumber %]"><strong>[% reservloo.title |html %]</strong></a>[% IF ( reservloo.author ) %], by [% reservloo.author %][% END %]</td>
1116
                    <td>[% reservloo.itemcallnumber %]</td>
1116
                    <td>[% reservloo.itemcallnumber %]</td>
1117
					<td><em>[% IF ( reservloo.barcodereserv ) %]Item [% reservloo.barcodereserv %]
1117
					<td><em>[% IF ( reservloo.barcodereserv ) %]Item [% reservloo.barcodereserv %]
1118
                        [% END %][% IF ( reservloo.waiting ) %] <strong>waiting at [% reservloo.waitingat %]</strong>
1118
                        [% END %][% IF ( reservloo.waiting ) %] <strong>waiting at [% reservloo.waitingat %][% IF reservloo.maxpickupdate %] until [% reservloo.maxpickupdate | $KohaDates %][% END %]</strong>
1119
                        [% END %]
1119
                        [% END %]
1120
                        [% IF ( reservloo.transfered ) %] <strong>in transit</strong> from
1120
                        [% IF ( reservloo.transfered ) %] <strong>in transit</strong> from
1121
                        [% reservloo.frombranch %] since [% reservloo.datesent %]
1121
                        [% reservloo.frombranch %] since [% reservloo.datesent %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tt (-5 / +6 lines)
Lines 1-3 Link Here
1
[% USE KohaDates %]
1
[% INCLUDE 'doc-head-open.inc' %]
2
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Circulation &rsaquo; Holds awaiting pickup</title>
3
<title>Koha &rsaquo; Circulation &rsaquo; Holds awaiting pickup</title>
3
[% INCLUDE 'doc-head-close.inc' %]
4
[% INCLUDE 'doc-head-close.inc' %]
Lines 81-87 dt_add_type_uk_date(); Link Here
81
            [% IF ( reserveloop ) %]
82
            [% IF ( reserveloop ) %]
82
               <table id="holdst">
83
               <table id="holdst">
83
               <thead><tr>
84
               <thead><tr>
84
                    <th>Available since</th>
85
                    <th>Available since-until</th>
85
                    <th>Title</th>
86
                    <th>Title</th>
86
                    <th>Patron</th>
87
                    <th>Patron</th>
87
                    <th>Location</th>
88
                    <th>Location</th>
Lines 91-97 dt_add_type_uk_date(); Link Here
91
               </tr></thead>
92
               </tr></thead>
92
               <tbody>[% FOREACH reserveloo IN reserveloop %]
93
               <tbody>[% FOREACH reserveloo IN reserveloop %]
93
                <tr>
94
                <tr>
94
                    <td><p>[% reserveloo.waitingdate %]</p></td>
95
                    <td><p>[% reserveloo.waitingdate | $KohaDates %] - [% reserveloo.maxpickupdate | $KohaDates %]</p></td>
95
                    <td>[% INCLUDE 'biblio-default-view.inc' biblionumber = reserveloo.biblionumber %]
96
                    <td>[% INCLUDE 'biblio-default-view.inc' biblionumber = reserveloo.biblionumber %]
96
                        [% reserveloo.title |html %] [% reserveloo.subtitle |html %]
97
                        [% reserveloo.title |html %] [% reserveloo.subtitle |html %]
97
                        </a>
98
                        </a>
Lines 126-132 dt_add_type_uk_date(); Link Here
126
        [% END %]
127
        [% END %]
127
        </div>
128
        </div>
128
        <div id="holdsover">
129
        <div id="holdsover">
129
                <p>Holds listed here have been awaiting pickup for more than [% ReservesMaxPickUpDelay %] days.</p>
130
                <p>Holds listed here have been awaiting pickup for too many days.</p>
130
               [% IF ( overloop ) %]
131
               [% IF ( overloop ) %]
131
               <p>
132
               <p>
132
               <form name="cancelAllReserve" action="waitingreserves.pl" method="post">
133
               <form name="cancelAllReserve" action="waitingreserves.pl" method="post">
Lines 141-147 dt_add_type_uk_date(); Link Here
141
               <br/>
142
               <br/>
142
               <table id="holdso">
143
               <table id="holdso">
143
               <thead><tr>
144
               <thead><tr>
144
                    <th>Available since</th>
145
                    <th>Available since-until</th>
145
                    <th>Title</th>
146
                    <th>Title</th>
146
                    <th>Patron</th>
147
                    <th>Patron</th>
147
                    <th>Location</th>
148
                    <th>Location</th>
Lines 151-157 dt_add_type_uk_date(); Link Here
151
               </tr></thead>
152
               </tr></thead>
152
               <tbody>[% FOREACH overloo IN overloop %]
153
               <tbody>[% FOREACH overloo IN overloop %]
153
                    <tr>
154
                    <tr>
154
                        <td><p>[% overloo.waitingdate %]</p></td>
155
                        <td><p>[% overloo.waitingdate | $KohaDates %] - [% overloo.maxpickupdate | $KohaDates %]</p></td>
155
                        <td>[% INCLUDE 'biblio-default-view.inc' biblionumber = overloo.biblionumber %][% overloo.title |html %] [% overloo.subtitle |html %]
156
                        <td>[% INCLUDE 'biblio-default-view.inc' biblionumber = overloo.biblionumber %][% overloo.title |html %] [% overloo.subtitle |html %]
156
                        </a>
157
                        </a>
157
                            [% UNLESS ( item_level_itypes ) %][% IF ( overloo.itemtype ) %]&nbsp; (<b>[% overloo.itemtype %]</b>)[% END %][% END %]
158
                            [% UNLESS ( item_level_itypes ) %][% IF ( overloo.itemtype ) %]&nbsp; (<b>[% overloo.itemtype %]</b>)[% END %][% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt (-1 / +1 lines)
Lines 637-643 function validate1(date) { Link Here
637
            </td>
637
            </td>
638
            <td>[% reservloo.itemcallnumber %]</td>
638
            <td>[% reservloo.itemcallnumber %]</td>
639
            <td>[% IF ( reservloo.waiting ) %]
639
            <td>[% IF ( reservloo.waiting ) %]
640
                <em>Item is <strong>waiting</strong></em>
640
                <em>Item is <strong>waiting</strong> until [% reservloo.maxpickupdate %]</em>
641
                [% END %]
641
                [% END %]
642
                [% IF ( reservloo.transfered ) %]
642
                [% IF ( reservloo.transfered ) %]
643
                <em>Item <strong>in transit</strong> from
643
                <em>Item <strong>in transit</strong> from
(-)a/koha-tmpl/opac-tmpl/prog/en/modules/opac-user.tt (-1 / +1 lines)
Lines 397-403 $.tablesorter.addParser({ Link Here
397
                    [% IF ( RESERVE.wait ) %]
397
                    [% IF ( RESERVE.wait ) %]
398
                        [% IF ( RESERVE.atdestination ) %]
398
                        [% IF ( RESERVE.atdestination ) %]
399
                            [% IF ( RESERVE.found ) %]
399
                            [% IF ( RESERVE.found ) %]
400
                            Item waiting at <b> [% RESERVE.wbrname %]</b>[% IF ( RESERVE.waitingdate ) %] since [% RESERVE.waitingdate | $KohaDates %][% END %]
400
                            Item waiting at <b> [% RESERVE.wbrname %]</b>[% IF ( RESERVE.waitingdate ) %] since [% RESERVE.waitingdate | $KohaDates %] until [% RESERVE.maxpickupdate | $KohaDates %][% END %]
401
                            <input type="hidden" name="pickup" value="[% RESERVE.wbrcd %]" />
401
                            <input type="hidden" name="pickup" value="[% RESERVE.wbrcd %]" />
402
                            [% ELSE %]
402
                            [% ELSE %]
403
                            Item waiting to be pulled from <b> [% RESERVE.wbrname %]</b>
403
                            Item waiting to be pulled from <b> [% RESERVE.wbrname %]</b>
(-)a/members/moremember.pl (+1 lines)
Lines 285-290 if ($borrowernumber) { Link Here
285
        if ( $num_res->{'found'} eq 'W' ) {
285
        if ( $num_res->{'found'} eq 'W' ) {
286
            $getreserv{color}   = 'reserved';
286
            $getreserv{color}   = 'reserved';
287
            $getreserv{waiting} = 1;
287
            $getreserv{waiting} = 1;
288
            $getreserv{maxpickupdate} = GetMaxPickupDate( $num_res, $borrowernumber );
288
        }
289
        }
289
290
290
        # 		check transfers with the itemnumber foud in th reservation loop
291
        # 		check transfers with the itemnumber foud in th reservation loop
(-)a/opac/opac-user.pl (-2 / +6 lines)
Lines 257-263 foreach my $res (@reserves) { Link Here
257
      $res->{'expirationdate'} = '';
257
      $res->{'expirationdate'} = '';
258
    }
258
    }
259
259
260
    $res->{'waiting'} = 1 if $res->{'found'} eq 'W';
260
    my $publictype = $res->{'publictype'};
261
    $res->{$publictype} = 1;
262
    if ( $res->{found} eq 'W' ) {
263
        $res->{waiting} = 1;
264
        $res->{maxpickupdate} = GetMaxPickupDate( $res, $borrowernumber );
265
    }
261
    $res->{'branch'} = $branches->{ $res->{'branchcode'} }->{'branchname'};
266
    $res->{'branch'} = $branches->{ $res->{'branchcode'} }->{'branchname'};
262
    my $biblioData = GetBiblioData($res->{'biblionumber'});
267
    my $biblioData = GetBiblioData($res->{'biblionumber'});
263
    $res->{'reserves_title'} = $biblioData->{'title'};
268
    $res->{'reserves_title'} = $biblioData->{'title'};
264
- 

Return to bug 8367