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

(-)a/circ/waitingreserves.pl (-36 / +71 lines)
Lines 46-51 my $borrowernumber = $input->param('borrowernumber'); Link Here
46
my $fbr            = $input->param('fbr') || '';
46
my $fbr            = $input->param('fbr') || '';
47
my $tbr            = $input->param('tbr') || '';
47
my $tbr            = $input->param('tbr') || '';
48
my $all_branches   = $input->param('allbranches') || '';
48
my $all_branches   = $input->param('allbranches') || '';
49
my $cancelall      = $input->param('cancelall');
49
50
50
my $cancel;
51
my $cancel;
51
52
Lines 62-103 my ( $template, $loggedinuser, $cookie ) = get_template_and_user( Link Here
62
63
63
my $default = C4::Context->userenv->{'branch'};
64
my $default = C4::Context->userenv->{'branch'};
64
65
66
my $transfer_when_cancel_all = C4::Context->preference('TransferWhenCancelAllWaitingHolds');
67
$template->param( TransferWhenCancelAllWaitingHolds => 1 ) if $transfer_when_cancel_all;
68
69
my @cancel_result;
65
# if we have a return from the form we launch the subroutine CancelReserve
70
# if we have a return from the form we launch the subroutine CancelReserve
66
if ($item) {
71
if ($item) {
67
    my ( $messages, $nextreservinfo ) = ModReserveCancelAll( $item, $borrowernumber );
72
    my $res = cancel( $item, $borrowernumber, $fbr, $tbr );
68
    # if we have a result
73
    push @cancel_result, $res if $res;
69
    if ($nextreservinfo) {
70
        my $borrowerinfo = GetMemberDetails( $nextreservinfo );
71
        my $iteminfo = GetBiblioFromItemNumber($item);
72
        if ( $messages->{'transfert'} ) {
73
            $template->param(
74
                messagetransfert => $messages->{'transfert'},
75
                branchname       => GetBranchName($messages->{'transfert'}),
76
            );
77
        }
78
79
        $template->param(
80
            message             => 1,
81
            nextreservnumber    => $nextreservinfo,
82
            nextreservsurname   => $borrowerinfo->{'surname'},
83
            nextreservfirstname => $borrowerinfo->{'firstname'},
84
            nextreservitem      => $item,
85
            nextreservtitle     => $iteminfo->{'title'},
86
            waiting             => ($messages->{'waiting'}) ? 1 : 0,
87
        );
88
    }
89
90
# 	if the document is not in his homebranch location and there is not reservation after, we transfer it
91
    if ($fbr ne $tbr  and not $nextreservinfo) {
92
        ModItemTransfer( $item, $fbr, $tbr );
93
    }
94
}
74
}
75
95
if ( C4::Context->preference('IndependantBranches') ) {
76
if ( C4::Context->preference('IndependantBranches') ) {
96
    undef $all_branches;
77
    undef $all_branches;
97
} else {
78
} else {
98
    $template->param( all_branches_link => $input->url . '?allbranches=1&' . $input->query_string )
79
    $template->param( all_branches_link => $input->url . '?allbranches=1' )
99
      unless $all_branches;
80
      unless $all_branches;
100
}
81
}
82
$template->param( all_branches => 1 ) if $all_branches;
101
83
102
my (@reservloop, @overloop);
84
my (@reservloop, @overloop);
103
my ($reservcount, $overcount);
85
my ($reservcount, $overcount);
Lines 107-117 my @getreserves = $all_branches ? GetReservesForBranch() : GetReservesForBranch( Link Here
107
my $today = Date_to_Days(&Today);
89
my $today = Date_to_Days(&Today);
108
foreach my $num (@getreserves) {
90
foreach my $num (@getreserves) {
109
    next unless ($num->{'waitingdate'} && $num->{'waitingdate'} ne '0000-00-00');
91
    next unless ($num->{'waitingdate'} && $num->{'waitingdate'} ne '0000-00-00');
110
    my %getreserv;
92
111
    my $gettitle     = GetBiblioFromItemNumber( $num->{'itemnumber'} );
93
    my $itemnumber = $num->{'itemnumber'};
94
    my $gettitle     = GetBiblioFromItemNumber( $itemnumber );
95
    my $borrowernum = $num->{'borrowernumber'};
96
    my $holdingbranch = $gettitle->{'holdingbranch'};
97
    my $homebranch = $gettitle->{'homebranch'};
98
99
    if ($cancelall) {
100
        my $res = cancel( $itemnumber, $borrowernum, $holdingbranch, $homebranch, !$transfer_when_cancel_all );
101
        push @cancel_result, $res if $res;
102
        next;
103
    }
104
105
    my %getreserv = (
106
        itemnumber => $itemnumber,
107
        borrowernum => $borrowernum,
108
    );
109
112
    # fix up item type for display
110
    # fix up item type for display
113
    $gettitle->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $gettitle->{'itype'} : $gettitle->{'itemtype'};
111
    $gettitle->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $gettitle->{'itype'} : $gettitle->{'itemtype'};
114
    my $getborrower  = GetMemberDetails( $num->{'borrowernumber'} );
112
    my $getborrower  = GetMemberDetails( $borrowernum );
115
    my $itemtypeinfo = getitemtypeinfo( $gettitle->{'itemtype'} );  # using the fixed up itype/itemtype
113
    my $itemtypeinfo = getitemtypeinfo( $gettitle->{'itemtype'} );  # using the fixed up itype/itemtype
116
    $getreserv{'waitingdate'} = format_date( $num->{'waitingdate'} );
114
    $getreserv{'waitingdate'} = format_date( $num->{'waitingdate'} );
117
115
Lines 123-138 foreach my $num (@getreserves) { Link Here
123
121
124
    $getreserv{'itemtype'}       = $itemtypeinfo->{'description'};
122
    $getreserv{'itemtype'}       = $itemtypeinfo->{'description'};
125
    $getreserv{'title'}          = $gettitle->{'title'};
123
    $getreserv{'title'}          = $gettitle->{'title'};
126
    $getreserv{'itemnumber'}     = $gettitle->{'itemnumber'};
127
    $getreserv{'biblionumber'}   = $gettitle->{'biblionumber'};
124
    $getreserv{'biblionumber'}   = $gettitle->{'biblionumber'};
128
    $getreserv{'barcode'}        = $gettitle->{'barcode'};
125
    $getreserv{'barcode'}        = $gettitle->{'barcode'};
129
    $getreserv{'homebranch'}     = GetBranchName($gettitle->{'homebranch'});
126
    $getreserv{'homebranch'}     = GetBranchName($homebranch);
130
    $getreserv{'holdingbranch'}  = $gettitle->{'holdingbranch'};
131
    $getreserv{'itemcallnumber'} = $gettitle->{'itemcallnumber'};
127
    $getreserv{'itemcallnumber'} = $gettitle->{'itemcallnumber'};
132
    if ( $gettitle->{'homebranch'} ne $gettitle->{'holdingbranch'} ) {
128
    if ( $homebranch ne $holdingbranch ) {
133
        $getreserv{'dotransfer'} = 1;
129
        $getreserv{'dotransfer'} = 1;
134
    }
130
    }
135
    $getreserv{'borrowernum'}       = $getborrower->{'borrowernumber'};
136
    $getreserv{'borrowername'}      = $getborrower->{'surname'};
131
    $getreserv{'borrowername'}      = $getborrower->{'surname'};
137
    $getreserv{'borrowerfirstname'} = $getborrower->{'firstname'};
132
    $getreserv{'borrowerfirstname'} = $getborrower->{'firstname'};
138
    $getreserv{'borrowerphone'}     = $getborrower->{'phone'};
133
    $getreserv{'borrowerphone'}     = $getborrower->{'phone'};
Lines 150-155 foreach my $num (@getreserves) { Link Here
150
    
145
    
151
}
146
}
152
147
148
$template->param(cancel_result => \@cancel_result) if @cancel_result;
153
$template->param(
149
$template->param(
154
    reserveloop => \@reservloop,
150
    reserveloop => \@reservloop,
155
    reservecount => $reservcount,
151
    reservecount => $reservcount,
Lines 161-163 $template->param( Link Here
161
);
157
);
162
158
163
output_html_with_http_headers $input, $cookie, $template->output;
159
output_html_with_http_headers $input, $cookie, $template->output;
160
161
exit;
162
163
sub cancel {
164
    my ($item, $borrowernumber, $fbr, $tbr, $skip_transfers ) = @_;
165
166
    my $transfer = $fbr ne $tbr; # XXX && !$nextreservinfo;
167
168
    return if $transfer && $skip_transfers;
169
170
    my ( $messages, $nextreservinfo ) = ModReserveCancelAll( $item, $borrowernumber );
171
172
# 	if the document is not in his homebranch location and there is not reservation after, we transfer it
173
    if ($transfer && !$nextreservinfo) {
174
        ModItemTransfer( $item, $fbr, $tbr );
175
    }
176
    # if we have a result
177
    if ($nextreservinfo) {
178
        my %res;
179
        my $borrowerinfo = GetMemberDetails( $nextreservinfo );
180
        my $iteminfo = GetBiblioFromItemNumber($item);
181
        if ( $messages->{'transfert'} ) {
182
            $res{messagetransfert} = $messages->{'transfert'};
183
            $res{branchname}       = GetBranchName($messages->{'transfert'});
184
        }
185
186
        $res{message}             = 1;
187
        $res{nextreservnumber}    = $nextreservinfo;
188
        $res{nextreservsurname}   = $borrowerinfo->{'surname'};
189
        $res{nextreservfirstname} = $borrowerinfo->{'firstname'};
190
        $res{nextreservitem}      = $item;
191
        $res{nextreservtitle}     = $iteminfo->{'title'};
192
        $res{waiting}             = $messages->{'waiting'} ? 1 : 0;
193
194
        return \%res;
195
    }
196
197
    return;
198
}
(-)a/installer/data/mysql/en/mandatory/sysprefs.sql (-1 / +1 lines)
Lines 308-311 INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES Link Here
308
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice');
308
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('Display856uAsImage','OFF','Display the URI in the 856u field as an image, the corresponding Staff Client XSLT option must be on','OFF|Details|Results|Both','Choice');
309
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free');
309
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsField','','The MARC field/subfield that contains alternate holdings information for bibs taht do not have items attached (e.g. 852abchi for libraries converting from MARC Magician).',NULL,'free');
310
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free');
310
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AlternateHoldingsSeparator','','The string to use to separate subfields in alternate holdings displays.',NULL,'free');
311
311
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('TransferWhenCancelAllWaitingHolds','0','Transfer items when cancelling all waiting holds',NULL,'YesNo');
(-)a/installer/data/mysql/updatedatabase.pl (+7 lines)
Lines 4209-4214 if (C4::Context->preference("Version") < TransformToNum($DBversion)) { Link Here
4209
    SetVersion ($DBversion);
4209
    SetVersion ($DBversion);
4210
}
4210
}
4211
4211
4212
$DBversion = "3.03.00.XXX";
4213
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
4214
    $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('TransferWhenCancelAllWaitingHolds','0','Transfer items when cancelling all waiting holds',NULL,'YesNo')");
4215
    print "Upgrade to $DBversion done (Add sysprefs to control transfer when cancel all waiting holds)\n";
4216
    SetVersion ($DBversion);
4217
}
4218
4212
=head1 FUNCTIONS
4219
=head1 FUNCTIONS
4213
4220
4214
=head2 DropAllForeignKeys($table)
4221
=head2 DropAllForeignKeys($table)
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref (+6 lines)
Lines 290-295 Circulation: Link Here
290
                  yes: Enable
290
                  yes: Enable
291
                  no:  "Don't enable"
291
                  no:  "Don't enable"
292
            - "the ability to place holds on multiple biblio from the search results"	    
292
            - "the ability to place holds on multiple biblio from the search results"	    
293
        -
294
            - pref: TransferWhenCancelAllWaitingHolds
295
              choices:
296
                  yes: Transfer
297
                  no: "Don't transfer"
298
            - items when cancelling all waiting holds.
293
    Fines Policy:
299
    Fines Policy:
294
        -
300
        -
295
            - Calculate fines based on days overdue
301
            - Calculate fines based on days overdue
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl (-8 / +21 lines)
Lines 44-50 $.tablesorter.addParser({ Link Here
44
            View all branches</a></span>
44
            View all branches</a></span>
45
            <!-- /TMPL_IF -->
45
            <!-- /TMPL_IF -->
46
        </h2>
46
        </h2>
47
        <!-- TMPL_IF NAME="messagetransfert" -->
47
        <!-- TMPL_IF NAME="cancel_result" -->
48
        <!-- TMPL_LOOP NAME="cancel_result" -->
49
            <!-- TMPL_IF NAME="messagetransfert" -->
48
            <div>
50
            <div>
49
                <h2>Hold find for (<!-- TMPL_VAR NAME="nextreservtitle" -->), must be transferred</h2>
51
                <h2>Hold find for (<!-- TMPL_VAR NAME="nextreservtitle" -->), must be transferred</h2>
50
                <p>This hold placed by : <b> <!-- TMPL_VAR NAME="nextreservsurname" --> <!-- TMPL_VAR NAME="nextreservfirstname" --></b> at the library : <b> <!-- TMPL_VAR NAME="branchname" --> </b>, Please transfer this hold.
52
                <p>This hold placed by : <b> <!-- TMPL_VAR NAME="nextreservsurname" --> <!-- TMPL_VAR NAME="nextreservfirstname" --></b> at the library : <b> <!-- TMPL_VAR NAME="branchname" --> </b>, Please transfer this hold.
Lines 53-60 $.tablesorter.addParser({ Link Here
53
                    <input type="submit" class="button" />
55
                    <input type="submit" class="button" />
54
                </form>
56
                </form>
55
            </div>
57
            </div>
56
        <!-- /TMPL_IF -->
58
            <!-- /TMPL_IF -->
57
        <!-- TMPL_IF NAME="waiting" -->
59
            <!-- TMPL_IF NAME="waiting" -->
58
            <div id="bloc25">
60
            <div id="bloc25">
59
                <h2>This hold is waiting</h2>
61
                <h2>This hold is waiting</h2>
60
                <p>This hold (<!-- TMPL_VAR NAME="nextreservtitle" -->) was placed by <b> : <!-- TMPL_VAR NAME="nextreservsurname" --> <!-- TMPL_VAR NAME="nextreservfirstname" --></b>,
62
                <p>This hold (<!-- TMPL_VAR NAME="nextreservtitle" -->) was placed by <b> : <!-- TMPL_VAR NAME="nextreservsurname" --> <!-- TMPL_VAR NAME="nextreservfirstname" --></b>,
Lines 64-71 $.tablesorter.addParser({ Link Here
64
                    <input type="submit" />
66
                    <input type="submit" />
65
                </form>
67
                </form>
66
            </div>
68
            </div>
67
        <!-- /TMPL_IF -->
69
            <!-- /TMPL_IF -->
68
        <!-- TMPL_UNLESS NAME="message" -->
70
        <!-- /TMPL_LOOP -->
71
        <!-- TMPL_ELSE -->
69
        <div id="resultlist" class="toptabs">
72
        <div id="resultlist" class="toptabs">
70
            <ul>
73
            <ul>
71
                <li><a href="/cgi-bin/koha/circ/waitingreserves.pl#holdswaiting"><!-- TMPL_VAR NAME="reservecount" --> Hold(s) waiting</a></li>
74
                <li><a href="/cgi-bin/koha/circ/waitingreserves.pl#holdswaiting"><!-- TMPL_VAR NAME="reservecount" --> Hold(s) waiting</a></li>
Lines 118-123 $.tablesorter.addParser({ Link Here
118
        <div id="holdsover">
121
        <div id="holdsover">
119
                <p>Holds listed here have been awaiting pickup for more than <!-- TMPL_VAR NAME="ReservesMaxPickUpDelay" --> days.</p>
122
                <p>Holds listed here have been awaiting pickup for more than <!-- TMPL_VAR NAME="ReservesMaxPickUpDelay" --> days.</p>
120
                <!-- TMPL_IF NAME="overloop" -->
123
                <!-- TMPL_IF NAME="overloop" -->
124
               <p>
125
               <form name="cancelAllReserve" action="waitingreserves.pl" method="post">
126
                   <input type="hidden" name="cancelall" value="1" />
127
                   <input type="hidden" name="allbranches" value="<!-- TMPL_VAR NAME="allbranches" -->" />
128
                   <input type="submit" value="Cancel <!-- TMPL_IF NAME="TransferWhenCancelAllWaitingHolds" -->and Transfer <!-- /TMPL_IF -->All" />
129
               </form>
130
               <!-- TMPL_UNLESS NAME="TransferWhenCancelAllWaitingHolds" -->
131
               Only items that need not be transferred will be cancelled (TransferWhenCancelAllWaitingHolds sypref)
132
               <!-- /TMPL_UNLESS -->
133
               </p>
134
               <br/>
121
               <table id="holdso">
135
               <table id="holdso">
122
               <thead><tr>
136
               <thead><tr>
123
                    <th>Available since</th>
137
                    <th>Available since</th>
Lines 153-165 $.tablesorter.addParser({ Link Here
153
                    </td>
167
                    </td>
154
                </tr>
168
                </tr>
155
                <!-- /TMPL_LOOP --></tbody>
169
                <!-- /TMPL_LOOP --></tbody>
156
        </table>
170
               </table>
157
        <!-- TMPL_ELSE -->
171
        <!-- TMPL_ELSE -->
158
            <div class="dialog message">No holds found.</div>
172
            <div class="dialog message">No holds found.</div>
159
                <!-- /TMPL_IF -->
173
                <!-- /TMPL_IF -->
160
        </div>
174
        </div>
161
        </div>
175
        </div>
162
    <!-- /TMPL_UNLESS -->
176
    <!-- /TMPL_IF -->
163
177
164
</div>
178
</div>
165
</div>
179
</div>
166
- 

Return to bug 6039