Lines 23-28
use DateTime;
Link Here
|
23 |
use POSIX qw( floor ); |
23 |
use POSIX qw( floor ); |
24 |
use Encode; |
24 |
use Encode; |
25 |
use Try::Tiny; |
25 |
use Try::Tiny; |
|
|
26 |
use JSON; |
26 |
|
27 |
|
27 |
use C4::Context; |
28 |
use C4::Context; |
28 |
use C4::Stats qw( UpdateStats ); |
29 |
use C4::Stats qw( UpdateStats ); |
Lines 320-325
A recall for this item was found, and the item needs to be transferred to the re
Link Here
|
320 |
|
321 |
|
321 |
=cut |
322 |
=cut |
322 |
|
323 |
|
|
|
324 |
my $query = CGI->new; |
325 |
|
326 |
my $stickyduedate = $query->param('stickyduedate'); |
327 |
my $duedatespec = $query->param('duedatespec'); |
328 |
my $restoreduedatespec = $query->param('restoreduedatespec') || $duedatespec; |
329 |
if ( $restoreduedatespec && $restoreduedatespec eq "highholds_empty" ) { |
330 |
undef $restoreduedatespec; |
331 |
} |
332 |
my $issueconfirmed = $query->param('issueconfirmed'); |
333 |
my $cancelreserve = $query->param('cancelreserve'); |
334 |
my $cancel_recall = $query->param('cancel_recall'); |
335 |
my $recall_id = $query->param('recall_id'); |
336 |
my $debt_confirmed = $query->param('debt_confirmed') || 0; # Don't show the debt error dialog twice |
337 |
my $charges = $query->param('charges') || q{}; |
338 |
|
323 |
sub transferbook { |
339 |
sub transferbook { |
324 |
my $params = shift; |
340 |
my $params = shift; |
325 |
my $tbr = $params->{to_branch}; |
341 |
my $tbr = $params->{to_branch}; |
Lines 823-831
sub CanBookBeIssued {
Link Here
|
823 |
my $circ_library = Koha::Libraries->find( _GetCircControlBranch( $item_object, $patron ) ); |
839 |
my $circ_library = Koha::Libraries->find( _GetCircControlBranch( $item_object, $patron ) ); |
824 |
|
840 |
|
825 |
my $now = dt_from_string(); |
841 |
my $now = dt_from_string(); |
|
|
842 |
my $message; |
843 |
my @message; |
844 |
|
826 |
$duedate ||= CalcDateDue( $now, $effective_itemtype, $circ_library->branchcode, $patron ); |
845 |
$duedate ||= CalcDateDue( $now, $effective_itemtype, $circ_library->branchcode, $patron ); |
|
|
846 |
|
827 |
if ( DateTime->compare( $duedate, $now ) == -1 ) { # duedate cannot be before now |
847 |
if ( DateTime->compare( $duedate, $now ) == -1 ) { # duedate cannot be before now |
828 |
$needsconfirmation{INVALID_DATE} = $duedate; |
848 |
$needsconfirmation{INVALID_DATE} = $duedate; |
|
|
849 |
if ($issueconfirmed) { |
850 |
if ($message) { |
851 |
$message = "$message + sticky due date is invalid or due date in the past"; |
852 |
} else { |
853 |
$message = "sticky due date is invalid or due date in the past"; |
854 |
} |
855 |
push( @message, "sticky due date is invalid or due date in the past" ); |
856 |
} |
857 |
|
829 |
} |
858 |
} |
830 |
|
859 |
|
831 |
my $fees = Koha::Charges::Fees->new( |
860 |
my $fees = Koha::Charges::Fees->new( |
Lines 871-876
sub CanBookBeIssued {
Link Here
|
871 |
} |
900 |
} |
872 |
if ( $patron->is_debarred ) { |
901 |
if ( $patron->is_debarred ) { |
873 |
$issuingimpossible{DEBARRED} = 1; |
902 |
$issuingimpossible{DEBARRED} = 1; |
|
|
903 |
if ($issueconfirmed) { |
904 |
if ($message) { |
905 |
$message = "$message + borrower is restricted"; |
906 |
} else { |
907 |
$message = "borrower is restricted"; |
908 |
} |
909 |
push( @message, "borrower is restricted" ); |
910 |
} |
874 |
} |
911 |
} |
875 |
|
912 |
|
876 |
if ( $patron->is_expired ) { |
913 |
if ( $patron->is_expired ) { |
Lines 943-952
sub CanBookBeIssued {
Link Here
|
943 |
} else { |
980 |
} else { |
944 |
if ( $patron_borrowing_status->{noissuescharge}->{overlimit} && $allowfineoverride ) { |
981 |
if ( $patron_borrowing_status->{noissuescharge}->{overlimit} && $allowfineoverride ) { |
945 |
$needsconfirmation{DEBT} = $patron_borrowing_status->{noissuescharge}->{charge}; |
982 |
$needsconfirmation{DEBT} = $patron_borrowing_status->{noissuescharge}->{charge}; |
|
|
983 |
if ($issueconfirmed) { |
984 |
if ($message) { |
985 |
$message = "$message + borrower had amend"; |
986 |
} else { |
987 |
$message = "borrower had amend"; |
988 |
} |
989 |
push( @message, "borrower had amend" ); |
990 |
} |
946 |
} elsif ( $patron_borrowing_status->{noissuescharge}->{overlimit} && !$allowfineoverride ) { |
991 |
} elsif ( $patron_borrowing_status->{noissuescharge}->{overlimit} && !$allowfineoverride ) { |
947 |
$issuingimpossible{DEBT} = $patron_borrowing_status->{noissuescharge}->{charge}; |
992 |
$issuingimpossible{DEBT} = $patron_borrowing_status->{noissuescharge}->{charge}; |
948 |
} elsif ( $patron_borrowing_status->{noissuescharge}->{charge} > 0 && $allfinesneedoverride ) { |
993 |
} elsif ( $patron_borrowing_status->{noissuescharge}->{charge} > 0 && $allfinesneedoverride ) { |
949 |
$needsconfirmation{DEBT} = $patron_borrowing_status->{noissuescharge}->{charge}; |
994 |
$needsconfirmation{DEBT} = $patron_borrowing_status->{noissuescharge}->{charge}; |
|
|
995 |
if ($issueconfirmed) { |
996 |
if ($message) { |
997 |
$message = "$message + borrower had amend"; |
998 |
} else { |
999 |
$message = "borrower had amend"; |
1000 |
} |
1001 |
push( @message, "borrower had amend" ); |
1002 |
} |
950 |
} |
1003 |
} |
951 |
} |
1004 |
} |
952 |
|
1005 |
|
Lines 1027-1032
sub CanBookBeIssued {
Link Here
|
1027 |
$needsconfirmation{issued_surname} = $patron->surname; |
1080 |
$needsconfirmation{issued_surname} = $patron->surname; |
1028 |
$needsconfirmation{issued_cardnumber} = $patron->cardnumber; |
1081 |
$needsconfirmation{issued_cardnumber} = $patron->cardnumber; |
1029 |
$needsconfirmation{issued_borrowernumber} = $patron->borrowernumber; |
1082 |
$needsconfirmation{issued_borrowernumber} = $patron->borrowernumber; |
|
|
1083 |
if ($issueconfirmed) { |
1084 |
if ($message) { |
1085 |
$message = "$message + item is checked out for someone else "; |
1086 |
} else { |
1087 |
$message = "item is checked out for someone else"; |
1088 |
} |
1089 |
push( @message, "item is checked out for someone else" ); |
1090 |
} |
1030 |
} |
1091 |
} |
1031 |
} |
1092 |
} |
1032 |
} |
1093 |
} |
Lines 1054-1059
sub CanBookBeIssued {
Link Here
|
1054 |
$needsconfirmation{current_loan_count} = $toomany->{count}; |
1115 |
$needsconfirmation{current_loan_count} = $toomany->{count}; |
1055 |
$needsconfirmation{max_loans_allowed} = $toomany->{max_allowed}; |
1116 |
$needsconfirmation{max_loans_allowed} = $toomany->{max_allowed}; |
1056 |
$needsconfirmation{circulation_rule_TOO_MANY} = $toomany->{circulation_rule}; |
1117 |
$needsconfirmation{circulation_rule_TOO_MANY} = $toomany->{circulation_rule}; |
|
|
1118 |
if ($issueconfirmed) { |
1119 |
if ($message) { |
1120 |
$message = "$message + too many checkout"; |
1121 |
} else { |
1122 |
$message = "too many checkout"; |
1123 |
} |
1124 |
push( @message, "too many checkout" ); |
1125 |
} |
1057 |
} else { |
1126 |
} else { |
1058 |
$issuingimpossible{TOO_MANY} = $toomany->{reason}; |
1127 |
$issuingimpossible{TOO_MANY} = $toomany->{reason}; |
1059 |
$issuingimpossible{current_loan_count} = $toomany->{count}; |
1128 |
$issuingimpossible{current_loan_count} = $toomany->{count}; |
Lines 1086-1091
sub CanBookBeIssued {
Link Here
|
1086 |
} else { |
1155 |
} else { |
1087 |
$needsconfirmation{NOT_FOR_LOAN_FORCING} = 1; |
1156 |
$needsconfirmation{NOT_FOR_LOAN_FORCING} = 1; |
1088 |
$needsconfirmation{item_notforloan} = $item_object->notforloan; |
1157 |
$needsconfirmation{item_notforloan} = $item_object->notforloan; |
|
|
1158 |
if ($issueconfirmed) { |
1159 |
if ($message) { |
1160 |
$message = "$message + item not for loan"; |
1161 |
} else { |
1162 |
$message = "item not for loan"; |
1163 |
} |
1164 |
push( @message, "item not for loan" ); |
1165 |
} |
1089 |
} |
1166 |
} |
1090 |
} else { |
1167 |
} else { |
1091 |
|
1168 |
|
Lines 1131-1136
sub CanBookBeIssued {
Link Here
|
1131 |
my $code = $av->count ? $av->next->lib : ''; |
1208 |
my $code = $av->count ? $av->next->lib : ''; |
1132 |
$needsconfirmation{ITEM_LOST} = $code if ( C4::Context->preference("IssueLostItem") eq 'confirm' ); |
1209 |
$needsconfirmation{ITEM_LOST} = $code if ( C4::Context->preference("IssueLostItem") eq 'confirm' ); |
1133 |
$alerts{ITEM_LOST} = $code if ( C4::Context->preference("IssueLostItem") eq 'alert' ); |
1210 |
$alerts{ITEM_LOST} = $code if ( C4::Context->preference("IssueLostItem") eq 'alert' ); |
|
|
1211 |
if ($issueconfirmed) { |
1212 |
if ($message) { |
1213 |
$message = "$message + item lost"; |
1214 |
} else { |
1215 |
$message = "item lost"; |
1216 |
} |
1217 |
push( @message, "item lost" ); |
1218 |
} |
1134 |
} |
1219 |
} |
1135 |
if ( C4::Context->preference("IndependentBranches") ) { |
1220 |
if ( C4::Context->preference("IndependentBranches") ) { |
1136 |
my $userenv = C4::Context->userenv; |
1221 |
my $userenv = C4::Context->userenv; |
Lines 1231-1236
sub CanBookBeIssued {
Link Here
|
1231 |
$needsconfirmation{'resbranchcode'} = $res->{branchcode}; |
1316 |
$needsconfirmation{'resbranchcode'} = $res->{branchcode}; |
1232 |
$needsconfirmation{'reswaitingdate'} = $res->{'waitingdate'}; |
1317 |
$needsconfirmation{'reswaitingdate'} = $res->{'waitingdate'}; |
1233 |
$needsconfirmation{'reserve_id'} = $res->{reserve_id}; |
1318 |
$needsconfirmation{'reserve_id'} = $res->{reserve_id}; |
|
|
1319 |
|
1320 |
if ($issueconfirmed) { |
1321 |
if ($message) { |
1322 |
$message = |
1323 |
"$message + item is on reserve and waiting, but has been reserved by some other patron."; |
1324 |
} else { |
1325 |
$message = "item is on reserve and waiting, but has been reserved by some other patron."; |
1326 |
} |
1327 |
push( @message, "item is on reserve and waiting, but has been reserved by some other patron" ); |
1328 |
} |
1234 |
} elsif ( $restype eq "Reserved" ) { |
1329 |
} elsif ( $restype eq "Reserved" ) { |
1235 |
|
1330 |
|
1236 |
# The item is on reserve for someone else. |
1331 |
# The item is on reserve for someone else. |
Lines 1242-1247
sub CanBookBeIssued {
Link Here
|
1242 |
$needsconfirmation{'resbranchcode'} = $res->{branchcode}; |
1337 |
$needsconfirmation{'resbranchcode'} = $res->{branchcode}; |
1243 |
$needsconfirmation{'resreservedate'} = $res->{reservedate}; |
1338 |
$needsconfirmation{'resreservedate'} = $res->{reservedate}; |
1244 |
$needsconfirmation{'reserve_id'} = $res->{reserve_id}; |
1339 |
$needsconfirmation{'reserve_id'} = $res->{reserve_id}; |
|
|
1340 |
|
1341 |
if ($issueconfirmed) { |
1342 |
if ($message) { |
1343 |
$message = "$message + item is on reserve for someone else"; |
1344 |
} else { |
1345 |
$message = "item is on reserve for someone else"; |
1346 |
} |
1347 |
push( @message, "item is on reserve for someone else" ); |
1348 |
} |
1245 |
} elsif ( $restype eq "Transferred" ) { |
1349 |
} elsif ( $restype eq "Transferred" ) { |
1246 |
|
1350 |
|
1247 |
# The item is determined hold being transferred for someone else. |
1351 |
# The item is determined hold being transferred for someone else. |
Lines 1253-1258
sub CanBookBeIssued {
Link Here
|
1253 |
$needsconfirmation{'resbranchcode'} = $res->{branchcode}; |
1357 |
$needsconfirmation{'resbranchcode'} = $res->{branchcode}; |
1254 |
$needsconfirmation{'resreservedate'} = $res->{reservedate}; |
1358 |
$needsconfirmation{'resreservedate'} = $res->{reservedate}; |
1255 |
$needsconfirmation{'reserve_id'} = $res->{reserve_id}; |
1359 |
$needsconfirmation{'reserve_id'} = $res->{reserve_id}; |
|
|
1360 |
|
1361 |
if ($issueconfirmed) { |
1362 |
if ($message) { |
1363 |
$message = "$message + item is determined hold being transferred for someone else"; |
1364 |
} else { |
1365 |
$message = "item is determined hold being transferred for someone else"; |
1366 |
} |
1367 |
push( @message, "item is determined hold being transferred for someone else" ); |
1368 |
} |
1256 |
} elsif ( $restype eq "Processing" ) { |
1369 |
} elsif ( $restype eq "Processing" ) { |
1257 |
|
1370 |
|
1258 |
# The item is determined hold being processed for someone else. |
1371 |
# The item is determined hold being processed for someone else. |
Lines 1264-1269
sub CanBookBeIssued {
Link Here
|
1264 |
$needsconfirmation{'resbranchcode'} = $res->{branchcode}; |
1377 |
$needsconfirmation{'resbranchcode'} = $res->{branchcode}; |
1265 |
$needsconfirmation{'resreservedate'} = $res->{reservedate}; |
1378 |
$needsconfirmation{'resreservedate'} = $res->{reservedate}; |
1266 |
$needsconfirmation{'reserve_id'} = $res->{reserve_id}; |
1379 |
$needsconfirmation{'reserve_id'} = $res->{reserve_id}; |
|
|
1380 |
|
1381 |
if ($issueconfirmed) { |
1382 |
if ($message) { |
1383 |
$message = "$message + item is determined hold being processed for someone else"; |
1384 |
} else { |
1385 |
$message = "item is determined hold being processed for someone else"; |
1386 |
} |
1387 |
push( @message, "item is determined hold being processed for someone else" ); |
1388 |
} |
1267 |
} |
1389 |
} |
1268 |
} |
1390 |
} |
1269 |
} |
1391 |
} |
Lines 1307-1312
sub CanBookBeIssued {
Link Here
|
1307 |
if ( $restriction_age && $patron->dateofbirth && $restriction_age > $patron->get_age() ) { |
1429 |
if ( $restriction_age && $patron->dateofbirth && $restriction_age > $patron->get_age() ) { |
1308 |
if ( C4::Context->preference('AgeRestrictionOverride') ) { |
1430 |
if ( C4::Context->preference('AgeRestrictionOverride') ) { |
1309 |
$needsconfirmation{AGE_RESTRICTION} = "$agerestriction"; |
1431 |
$needsconfirmation{AGE_RESTRICTION} = "$agerestriction"; |
|
|
1432 |
if ($message) { |
1433 |
$message = "$message + age restriction"; |
1434 |
} else { |
1435 |
$message = "age restriction"; |
1436 |
} |
1437 |
push( @message, "age restriction" ); |
1310 |
} else { |
1438 |
} else { |
1311 |
$issuingimpossible{AGE_RESTRICTION} = "$agerestriction"; |
1439 |
$issuingimpossible{AGE_RESTRICTION} = "$agerestriction"; |
1312 |
} |
1440 |
} |
Lines 1365-1370
sub CanBookBeIssued {
Link Here
|
1365 |
} |
1493 |
} |
1366 |
} |
1494 |
} |
1367 |
|
1495 |
|
|
|
1496 |
my $borrower = $patron; |
1497 |
my $user = C4::Context->userenv->{number}; |
1498 |
my $branchcode = C4::Context->userenv->{branch}; |
1499 |
my $item = Koha::Items->find( { barcode => $barcode } ); |
1500 |
my $itemnumber = $item->itemnumber; |
1501 |
|
1502 |
# action, cardnumber, barcode, date, heure, user, branche |
1503 |
if ($issueconfirmed) { |
1504 |
|
1505 |
my $infos = ( |
1506 |
{ |
1507 |
message => \@message, |
1508 |
borrowernumber => $borrower->borrowernumber, |
1509 |
barcode => $barcode, |
1510 |
manager_id => $user, |
1511 |
branchcode => $branchcode, |
1512 |
} |
1513 |
); |
1514 |
|
1515 |
my $json_infos = JSON->new->utf8->pretty->encode($infos); |
1516 |
$json_infos =~ s/"/'/g; |
1517 |
|
1518 |
logaction( |
1519 |
"CIRCULATION", "ISSUE", |
1520 |
$borrower->{'borrowernumber'}, |
1521 |
$json_infos, |
1522 |
) if C4::Context->preference("IssueLog"); |
1523 |
} |
1524 |
|
1368 |
return ( \%issuingimpossible, \%needsconfirmation, \%alerts, \%messages, ); |
1525 |
return ( \%issuingimpossible, \%needsconfirmation, \%alerts, \%messages, ); |
1369 |
} |
1526 |
} |
1370 |
|
1527 |
|