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 882-889 sub CancelExpiredReserves { Link Here
882
    while ( my $res = $sth->fetchrow_hashref() ) {
959
    while ( my $res = $sth->fetchrow_hashref() ) {
883
        CancelReserve( $res->{'biblionumber'}, '', $res->{'borrowernumber'} );
960
        CancelReserve( $res->{'biblionumber'}, '', $res->{'borrowernumber'} );
884
    }
961
    }
885
  
962
886
    # Cancel reserves that have been waiting too long
963
    # Cancel reserves that have been waiting too long
964
    # FIXME The only way I see to do this job with the issuingrules.holdspickupdelay value would be to
965
    # get all reserves and to get the related borrower and item. So we could call GetMaxPickupDelay for each reserve.
887
    if ( C4::Context->preference("ExpireReservesMaxPickUpDelay") ) {
966
    if ( C4::Context->preference("ExpireReservesMaxPickUpDelay") ) {
888
        my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
967
        my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
889
        my $charge = C4::Context->preference("ExpireReservesMaxPickUpDelayCharge");
968
        my $charge = C4::Context->preference("ExpireReservesMaxPickUpDelayCharge");
(-)a/admin/smart-rules.pl (-4 / +5 lines)
Lines 101-108 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, 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, 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=?, 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=?, 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
Lines 114-119 elsif ($op eq 'add') { Link Here
114
    my $maxissueqty  = $input->param('maxissueqty');
114
    my $maxissueqty  = $input->param('maxissueqty');
115
    my $renewalsallowed  = $input->param('renewalsallowed');
115
    my $renewalsallowed  = $input->param('renewalsallowed');
116
    my $reservesallowed  = $input->param('reservesallowed');
116
    my $reservesallowed  = $input->param('reservesallowed');
117
    my $holdspickupdelay = $input->param('holdspickupdelay');
117
    $maxissueqty =~ s/\s//g;
118
    $maxissueqty =~ s/\s//g;
118
    $maxissueqty = undef if $maxissueqty !~ /^\d+/;
119
    $maxissueqty = undef if $maxissueqty !~ /^\d+/;
119
    my $issuelength  = $input->param('issuelength');
120
    my $issuelength  = $input->param('issuelength');
Lines 128-136 elsif ($op eq 'add') { Link Here
128
    $sth_search->execute($br,$bor,$cat);
129
    $sth_search->execute($br,$bor,$cat);
129
    my $res = $sth_search->fetchrow_hashref();
130
    my $res = $sth_search->fetchrow_hashref();
130
    if ($res->{total}) {
131
    if ($res->{total}) {
131
        $sth_update->execute($fine, $finedays,$firstremind, $chargeperiod, $maxissueqty, $renewalsallowed,$reservesallowed, $issuelength,$lengthunit, $hardduedate,$hardduedatecompare,$rentaldiscount,$overduefinescap, $br,$bor,$cat);
132
        $sth_update->execute($fine, $finedays,$firstremind, $chargeperiod, $maxissueqty, $renewalsallowed,$reservesallowed, $holdspickupdelay, $issuelength,$lengthunit, $hardduedate,$hardduedatecompare,$rentaldiscount,$overduefinescap, $br,$bor,$cat);
132
    } else {
133
    } else {
133
        $sth_insert->execute($br,$bor,$cat,$maxissueqty,$renewalsallowed,$reservesallowed,$issuelength,$lengthunit,$hardduedate,$hardduedatecompare,$fine,$finedays,$firstremind,$chargeperiod,$rentaldiscount,$overduefinescap);
134
        $sth_insert->execute($br,$bor,$cat,$maxissueqty,$renewalsallowed,$reservesallowed, $holdspickupdelay, $issuelength,$lengthunit,$hardduedate,$hardduedatecompare,$fine,$finedays,$firstremind,$chargeperiod,$rentaldiscount,$overduefinescap);
134
    }
135
    }
135
} 
136
} 
136
elsif ($op eq "set-branch-defaults") {
137
elsif ($op eq "set-branch-defaults") {
(-)a/circ/circulation.pl (+4 lines)
Lines 368-373 if ($borrowernumber) { Link Here
368
        if ( $num_res->{'found'} eq 'W' ) {
368
        if ( $num_res->{'found'} eq 'W' ) {
369
            $getreserv{color}   = 'reserved';
369
            $getreserv{color}   = 'reserved';
370
            $getreserv{waiting} = 1;
370
            $getreserv{waiting} = 1;
371
            my $maxpickupdate = GetMaxPickupDate( $num_res, $borrowernumber );
372
            $getWaitingReserveInfo{maxpickupdate} = $maxpickupdate;
373
            $getreserv{maxpickupdate} = $maxpickupdate;
374
371
#     genarate information displaying only waiting reserves
375
#     genarate information displaying only waiting reserves
372
        $getWaitingReserveInfo{title}        = $getiteminfo->{'title'};
376
        $getWaitingReserveInfo{title}        = $getiteminfo->{'title'};
373
        $getWaitingReserveInfo{biblionumber} = $getiteminfo->{'biblionumber'};
377
        $getWaitingReserveInfo{biblionumber} = $getiteminfo->{'biblionumber'};
(-)a/circ/waitingreserves.pl (-29 / +23 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 156-162 $template->param( Link Here
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
    dateformat  => C4::Context->preference("dateformat"),
153
    dateformat  => C4::Context->preference("dateformat"),
159
    ReservesMaxPickUpDelay => C4::Context->preference('ReservesMaxPickUpDelay')
160
);
154
);
161
155
162
if ($cancelall) {
156
if ($cancelall) {
(-)a/installer/data/mysql/kohastructure.sql (+1 lines)
Lines 1017-1022 CREATE TABLE `issuingrules` ( -- circulation and fine rules Link Here
1017
  `hardduedatecompare` tinyint NOT NULL default "0", -- type of hard due date (1 = after, 0 = on, -1 = before)
1017
  `hardduedatecompare` tinyint NOT NULL default "0", -- type of hard due date (1 = after, 0 = on, -1 = before)
1018
  `renewalsallowed` smallint(6) NOT NULL default "0", -- how many renewals are allowed
1018
  `renewalsallowed` smallint(6) NOT NULL default "0", -- how many renewals are allowed
1019
  `reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
1019
  `reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
1020
  `holdspickupdelay` int(11)  default NULL, -- after how many days a hold is problematic (in days)
1020
  `branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
1021
  `branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
1021
  overduefinescap decimal default NULL, -- the maximum amount of an overdue fine
1022
  overduefinescap decimal default NULL, -- the maximum amount of an overdue fine
1022
  PRIMARY KEY  (`branchcode`,`categorycode`,`itemtype`),
1023
  PRIMARY KEY  (`branchcode`,`categorycode`,`itemtype`),
(-)a/installer/data/mysql/updatedatabase.pl (+9 lines)
Lines 6062-6067 if (C4::Context->preference("Version") < TransformToNum($DBversion)) { Link Here
6062
   SetVersion ($DBversion);
6062
   SetVersion ($DBversion);
6063
}
6063
}
6064
6064
6065
$DBversion = "3.09.00.XXX";
6066
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6067
    $dbh->do(qq{
6068
        ALTER TABLE issuingrules ADD COLUMN holdspickupdelay INT(11) NULL default NULL AFTER reservesallowed;
6069
    });
6070
6071
    print "Upgrade to $DBversion done (Add colum issuingrules.holdspickupdelay)\n";
6072
    SetVersion($DBversion);
6073
}
6065
6074
6066
=head1 FUNCTIONS
6075
=head1 FUNCTIONS
6067
6076
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt (-3 / +6 lines)
Lines 76-83 for="tobranch"><strong>Clone these rules to:</strong></label> <input type="hidde Link Here
76
                <th>Suspension in days (day)</th>
76
                <th>Suspension in days (day)</th>
77
                <th>Renewals allowed (count)</th>
77
                <th>Renewals allowed (count)</th>
78
                <th>Holds allowed (count)</th>
78
                <th>Holds allowed (count)</th>
79
		<th>Rental discount (%)</th>
79
                <th>Holds pickup delay (day)</th>
80
				<th>&nbsp;</th>
80
                <th>Rental discount (%)</th>
81
                <th>&nbsp;</th>
81
            </tr>
82
            </tr>
82
				[% FOREACH rule IN rules %]
83
				[% FOREACH rule IN rules %]
83
					[% UNLESS ( loop.odd ) %]
84
					[% UNLESS ( loop.odd ) %]
Lines 121-126 for="tobranch"><strong>Clone these rules to:</strong></label> <input type="hidde Link Here
121
							<td>[% rule.finedays %]</td>
122
							<td>[% rule.finedays %]</td>
122
							<td>[% rule.renewalsallowed %]</td>
123
							<td>[% rule.renewalsallowed %]</td>
123
							<td>[% rule.reservesallowed %]</td>
124
							<td>[% rule.reservesallowed %]</td>
125
                            <td>[% rule.holdspickupdelay %]</td>
124
							<td>[% rule.rentaldiscount %]</td>
126
							<td>[% rule.rentaldiscount %]</td>
125
							<td>
127
							<td>
126
								<a class="button" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&amp;itemtype=[% rule.itemtype %]&amp;categorycode=[% rule.categorycode %]&amp;branch=[% rule.current_branch %]">Delete</a>
128
								<a class="button" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&amp;itemtype=[% rule.itemtype %]&amp;categorycode=[% rule.categorycode %]&amp;branch=[% rule.current_branch %]">Delete</a>
Lines 167-173 for="tobranch"><strong>Clone these rules to:</strong></label> <input type="hidde Link Here
167
                    <td><input name="finedays" size="3" /> </td>
169
                    <td><input name="finedays" size="3" /> </td>
168
                    <td><input name="renewalsallowed" size="2" /></td>
170
                    <td><input name="renewalsallowed" size="2" /></td>
169
                    <td><input name="reservesallowed" size="2" /></td>
171
                    <td><input name="reservesallowed" size="2" /></td>
170
		    <td><input name="rentaldiscount" size="2" /></td>
172
                    <td><input name="holdspickupdelay" size="2" /></td>
173
                    <td><input name="rentaldiscount" size="2" /></td>
171
                    <td><input type="hidden" name="branch" value="[% current_branch %]"/><input type="submit" value="Add" class="submit" /></td>
174
                    <td><input type="hidden" name="branch" value="[% current_branch %]"/><input type="submit" value="Add" class="submit" /></td>
172
                </tr>
175
                </tr>
173
            </table>
176
            </table>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (-2 / +2 lines)
Lines 685-691 No patron matched <span class="ex">[% message %]</span> Link Here
685
		    <h4>Holds waiting:</h4>
685
		    <h4>Holds waiting:</h4>
686
			        [% FOREACH WaitingReserveLoo IN WaitingReserveLoop %]
686
			        [% FOREACH WaitingReserveLoo IN WaitingReserveLoop %]
687
			            <ul>
687
			            <ul>
688
			                <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 %] Hold placed on [% WaitingReserveLoo.reservedate %].
688
			                <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 %] Hold placed on [% WaitingReserveLoo.reservedate %] waiting until [% WaitingReserveLoo.maxpickupdate | $KohaDates %].
689
			            [% IF ( WaitingReserveLoo.waitingat ) %]
689
			            [% IF ( WaitingReserveLoo.waitingat ) %]
690
			                <br />[% IF ( WaitingReserveLoo.waitinghere ) %]<strong class="waitinghere">[% ELSE %]<strong>[% END %]Waiting at [% WaitingReserveLoo.waitingat %]</strong>
690
			                <br />[% IF ( WaitingReserveLoo.waitinghere ) %]<strong class="waitinghere">[% ELSE %]<strong>[% END %]Waiting at [% WaitingReserveLoo.waitingat %]</strong>
691
			            [% END %]
691
			            [% END %]
Lines 1059-1065 No patron matched <span class="ex">[% message %]</span> Link Here
1059
                    <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>
1059
                    <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>
1060
                    <td>[% reservloo.itemcallnumber %]</td>
1060
                    <td>[% reservloo.itemcallnumber %]</td>
1061
					<td><em>[% IF ( reservloo.barcodereserv ) %]Item [% reservloo.barcodereserv %]
1061
					<td><em>[% IF ( reservloo.barcodereserv ) %]Item [% reservloo.barcodereserv %]
1062
                        [% END %][% IF ( reservloo.waiting ) %] <strong>waiting at [% reservloo.waitingat %]</strong>
1062
                        [% END %][% IF ( reservloo.waiting ) %] <strong>waiting at [% reservloo.waitingat %][% IF reservloo.maxpickupdate %] until [% reservloo.maxpickupdate | $KohaDates %][% END %]</strong>
1063
                        [% END %]
1063
                        [% END %]
1064
                        [% IF ( reservloo.transfered ) %] <strong>in transit</strong> from
1064
                        [% IF ( reservloo.transfered ) %] <strong>in transit</strong> from
1065
                        [% reservloo.frombranch %] since [% reservloo.datesent %]
1065
                        [% 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 79-85 $.tablesorter.addParser({ Link Here
79
            [% IF ( reserveloop ) %]
80
            [% IF ( reserveloop ) %]
80
               <table id="holdst">
81
               <table id="holdst">
81
               <thead><tr>
82
               <thead><tr>
82
                    <th>Available since</th>
83
                    <th>Available since-until</th>
83
                    <th>Title</th>
84
                    <th>Title</th>
84
                    <th>Patron</th>
85
                    <th>Patron</th>
85
                    <th>Location</th>
86
                    <th>Location</th>
Lines 89-95 $.tablesorter.addParser({ Link Here
89
               </tr></thead>
90
               </tr></thead>
90
               <tbody>[% FOREACH reserveloo IN reserveloop %]
91
               <tbody>[% FOREACH reserveloo IN reserveloop %]
91
                <tr>
92
                <tr>
92
                    <td><p>[% reserveloo.waitingdate %]</p></td>
93
                    <td><p>[% reserveloo.waitingdate | $KohaDates %] - [% reserveloo.maxpickupdate | $KohaDates %]</p></td>
93
                    <td>[% INCLUDE 'biblio-default-view.inc' biblionumber = reserveloo.biblionumber %]
94
                    <td>[% INCLUDE 'biblio-default-view.inc' biblionumber = reserveloo.biblionumber %]
94
                        [% reserveloo.title |html %] [% reserveloo.subtitle |html %]
95
                        [% reserveloo.title |html %] [% reserveloo.subtitle |html %]
95
                        </a>
96
                        </a>
Lines 124-130 $.tablesorter.addParser({ Link Here
124
        [% END %]
125
        [% END %]
125
        </div>
126
        </div>
126
        <div id="holdsover">
127
        <div id="holdsover">
127
                <p>Holds listed here have been awaiting pickup for more than [% ReservesMaxPickUpDelay %] days.</p>
128
                <p>Holds listed here have been awaiting pickup for too many days.</p>
128
               [% IF ( overloop ) %]
129
               [% IF ( overloop ) %]
129
               <p>
130
               <p>
130
               <form name="cancelAllReserve" action="waitingreserves.pl" method="post">
131
               <form name="cancelAllReserve" action="waitingreserves.pl" method="post">
Lines 139-145 $.tablesorter.addParser({ Link Here
139
               <br/>
140
               <br/>
140
               <table id="holdso">
141
               <table id="holdso">
141
               <thead><tr>
142
               <thead><tr>
142
                    <th>Available since</th>
143
                    <th>Available since-until</th>
143
                    <th>Title</th>
144
                    <th>Title</th>
144
                    <th>Patron</th>
145
                    <th>Patron</th>
145
                    <th>Location</th>
146
                    <th>Location</th>
Lines 149-155 $.tablesorter.addParser({ Link Here
149
               </tr></thead>
150
               </tr></thead>
150
               <tbody>[% FOREACH overloo IN overloop %]
151
               <tbody>[% FOREACH overloo IN overloop %]
151
                    <tr>
152
                    <tr>
152
                        <td><p>[% overloo.waitingdate %]</p></td>
153
                        <td><p>[% overloo.waitingdate | $KohaDates %] - [% overloo.maxpickupdate | $KohaDates %]</p></td>
153
                        <td>[% INCLUDE 'biblio-default-view.inc' biblionumber = overloo.biblionumber %][% overloo.title |html %] [% overloo.subtitle |html %]
154
                        <td>[% INCLUDE 'biblio-default-view.inc' biblionumber = overloo.biblionumber %][% overloo.title |html %] [% overloo.subtitle |html %]
154
                        </a>
155
                        </a>
155
                            [% UNLESS ( item_level_itypes ) %][% IF ( overloo.itemtype ) %]&nbsp; (<b>[% overloo.itemtype %]</b>)[% END %][% END %]
156
                            [% 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 615-621 function validate1(date) { Link Here
615
            </td>
615
            </td>
616
            <td>[% reservloo.itemcallnumber %]</td>
616
            <td>[% reservloo.itemcallnumber %]</td>
617
            <td>[% IF ( reservloo.waiting ) %]
617
            <td>[% IF ( reservloo.waiting ) %]
618
                <em>Item is <strong>waiting</strong></em>
618
                <em>Item is <strong>waiting</strong> until [% reservloo.maxpickupdate %]</em>
619
                [% END %]
619
                [% END %]
620
                [% IF ( reservloo.transfered ) %]
620
                [% IF ( reservloo.transfered ) %]
621
                <em>Item <strong>in transit</strong> from
621
                <em>Item <strong>in transit</strong> from
(-)a/koha-tmpl/opac-tmpl/prog/en/modules/opac-user.tt (-1 / +1 lines)
Lines 385-391 $.tablesorter.addParser({ Link Here
385
                    [% IF ( RESERVE.wait ) %]
385
                    [% IF ( RESERVE.wait ) %]
386
                        [% IF ( RESERVE.atdestination ) %]
386
                        [% IF ( RESERVE.atdestination ) %]
387
                            [% IF ( RESERVE.found ) %]
387
                            [% IF ( RESERVE.found ) %]
388
                            Item waiting at <b> [% RESERVE.wbrname %]</b>[% IF ( RESERVE.waitingdate ) %] since [% RESERVE.waitingdate | $KohaDates %][% END %]
388
                            Item waiting at <b> [% RESERVE.wbrname %]</b>[% IF ( RESERVE.waitingdate ) %] since [% RESERVE.waitingdate | $KohaDates %] until [% RESERVE.maxpickupdate | $KohaDates %][% END %]
389
                            <input type="hidden" name="pickup" value="[% RESERVE.wbrcd %]" />
389
                            <input type="hidden" name="pickup" value="[% RESERVE.wbrcd %]" />
390
                            [% ELSE %]
390
                            [% ELSE %]
391
                            Item waiting to be pulled from <b> [% RESERVE.wbrname %]</b>
391
                            Item waiting to be pulled from <b> [% RESERVE.wbrname %]</b>
(-)a/members/moremember.pl (+1 lines)
Lines 290-295 if ($borrowernumber) { Link Here
290
        if ( $num_res->{'found'} eq 'W' ) {
290
        if ( $num_res->{'found'} eq 'W' ) {
291
            $getreserv{color}   = 'reserved';
291
            $getreserv{color}   = 'reserved';
292
            $getreserv{waiting} = 1;
292
            $getreserv{waiting} = 1;
293
            $getreserv{maxpickupdate} = GetMaxPickupDate( $num_res, $borrowernumber );
293
        }
294
        }
294
295
295
        # 		check transfers with the itemnumber foud in th reservation loop
296
        # 		check transfers with the itemnumber foud in th reservation loop
(-)a/opac/opac-user.pl (-3 / +5 lines)
Lines 257-266 foreach my $res (@reserves) { Link Here
257
    if ( $res->{'expirationdate'} eq '0000-00-00' ) {
257
    if ( $res->{'expirationdate'} eq '0000-00-00' ) {
258
      $res->{'expirationdate'} = '';
258
      $res->{'expirationdate'} = '';
259
    }
259
    }
260
    
260
261
    my $publictype = $res->{'publictype'};
261
    my $publictype = $res->{'publictype'};
262
    $res->{$publictype} = 1;
262
    $res->{$publictype} = 1;
263
    $res->{'waiting'} = 1 if $res->{'found'} eq 'W';
263
    if ( $res->{found} eq 'W' ) {
264
        $res->{waiting} = 1;
265
        $res->{maxpickupdate} = GetMaxPickupDate( $res, $borrowernumber );
266
    }
264
    $res->{'branch'} = $branches->{ $res->{'branchcode'} }->{'branchname'};
267
    $res->{'branch'} = $branches->{ $res->{'branchcode'} }->{'branchname'};
265
    my $biblioData = GetBiblioData($res->{'biblionumber'});
268
    my $biblioData = GetBiblioData($res->{'biblionumber'});
266
    $res->{'reserves_title'} = $biblioData->{'title'};
269
    $res->{'reserves_title'} = $biblioData->{'title'};
267
- 

Return to bug 8367