|
Lines 306-336
sub transferbook {
Link Here
|
| 306 |
my ( $tbr, $barcode, $ignoreRs ) = @_; |
306 |
my ( $tbr, $barcode, $ignoreRs ) = @_; |
| 307 |
my $messages; |
307 |
my $messages; |
| 308 |
my $dotransfer = 1; |
308 |
my $dotransfer = 1; |
| 309 |
my $itemnumber = GetItemnumberFromBarcode( $barcode ); |
309 |
my $item = Koha::Items->find( { barcode => $barcode } ); |
| 310 |
my $issue = GetItemIssue($itemnumber); |
|
|
| 311 |
my $biblio = GetBiblioFromItemNumber($itemnumber); |
| 312 |
|
310 |
|
| 313 |
# bad barcode.. |
311 |
# bad barcode.. |
| 314 |
if ( not $itemnumber ) { |
312 |
unless ( $item ) { |
| 315 |
$messages->{'BadBarcode'} = $barcode; |
313 |
$messages->{'BadBarcode'} = $barcode; |
| 316 |
$dotransfer = 0; |
314 |
$dotransfer = 0; |
| 317 |
} |
315 |
} |
| 318 |
|
316 |
|
|
|
317 |
my $itemnumber = $item->itemnumber; |
| 318 |
my $issue = GetOpenIssue($itemnumber); |
| 319 |
# get branches of book... |
319 |
# get branches of book... |
| 320 |
my $hbr = $biblio->{'homebranch'}; |
320 |
my $hbr = $item->homebranch; |
| 321 |
my $fbr = $biblio->{'holdingbranch'}; |
321 |
my $fbr = $item->holdingbranch; |
| 322 |
|
322 |
|
| 323 |
# if using Branch Transfer Limits |
323 |
# if using Branch Transfer Limits |
| 324 |
if ( C4::Context->preference("UseBranchTransferLimits") == 1 ) { |
324 |
if ( C4::Context->preference("UseBranchTransferLimits") == 1 ) { |
|
|
325 |
my $code = C4::Context->preference("BranchTransferLimitsType") eq 'ccode' ? $item->ccode : $item->biblio->biblioitem->itemtype; # BranchTransferLimitsType is 'ccode' or 'itemtype' |
| 325 |
if ( C4::Context->preference("item-level_itypes") && C4::Context->preference("BranchTransferLimitsType") eq 'itemtype' ) { |
326 |
if ( C4::Context->preference("item-level_itypes") && C4::Context->preference("BranchTransferLimitsType") eq 'itemtype' ) { |
| 326 |
if ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{'itype'} ) ) { |
327 |
if ( ! IsBranchTransferAllowed( $tbr, $fbr, $item->itype ) ) { |
| 327 |
$messages->{'NotAllowed'} = $tbr . "::" . $biblio->{'itype'}; |
328 |
$messages->{'NotAllowed'} = $tbr . "::" . $item->itype; |
| 328 |
$dotransfer = 0; |
329 |
$dotransfer = 0; |
| 329 |
} |
330 |
} |
| 330 |
} elsif ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{ C4::Context->preference("BranchTransferLimitsType") } ) ) { |
331 |
} elsif ( ! IsBranchTransferAllowed( $tbr, $fbr, $code ) ) { |
| 331 |
$messages->{'NotAllowed'} = $tbr . "::" . $biblio->{ C4::Context->preference("BranchTransferLimitsType") }; |
332 |
$messages->{'NotAllowed'} = $tbr . "::" . $code; |
| 332 |
$dotransfer = 0; |
333 |
$dotransfer = 0; |
| 333 |
} |
334 |
} |
| 334 |
} |
335 |
} |
| 335 |
|
336 |
|
| 336 |
# if is permanent... |
337 |
# if is permanent... |
|
Lines 374-380
sub transferbook {
Link Here
|
| 374 |
|
375 |
|
| 375 |
} |
376 |
} |
| 376 |
ModDateLastSeen( $itemnumber ); |
377 |
ModDateLastSeen( $itemnumber ); |
| 377 |
return ( $dotransfer, $messages, $biblio ); |
378 |
return ( $dotransfer, $messages ); |
| 378 |
} |
379 |
} |
| 379 |
|
380 |
|
| 380 |
|
381 |
|
|
Lines 673-679
sub CanBookBeIssued {
Link Here
|
| 673 |
my $onsite_checkout = $params->{onsite_checkout} || 0; |
674 |
my $onsite_checkout = $params->{onsite_checkout} || 0; |
| 674 |
my $override_high_holds = $params->{override_high_holds} || 0; |
675 |
my $override_high_holds = $params->{override_high_holds} || 0; |
| 675 |
|
676 |
|
| 676 |
my $item = GetItem(GetItemnumberFromBarcode( $barcode )); |
677 |
my $item = GetItem(undef, $barcode ); |
| 677 |
my $issue = GetItemIssue($item->{itemnumber}); |
678 |
my $issue = GetItemIssue($item->{itemnumber}); |
| 678 |
my $biblioitem = GetBiblioItemData($item->{biblioitemnumber}); |
679 |
my $biblioitem = GetBiblioItemData($item->{biblioitemnumber}); |
| 679 |
$item->{'itemtype'}=$item->{'itype'}; |
680 |
$item->{'itemtype'}=$item->{'itype'}; |
|
Lines 1147-1154
sub CanBookBeReturned {
Link Here
|
| 1147 |
|
1148 |
|
| 1148 |
sub checkHighHolds { |
1149 |
sub checkHighHolds { |
| 1149 |
my ( $item, $borrower ) = @_; |
1150 |
my ( $item, $borrower ) = @_; |
| 1150 |
my $biblio = GetBiblioFromItemNumber( $item->{itemnumber} ); |
|
|
| 1151 |
my $branch = _GetCircControlBranch( $item, $borrower ); |
1151 |
my $branch = _GetCircControlBranch( $item, $borrower ); |
|
|
1152 |
my $item_object = Koha::Items->find( $item->{itemnumber} ); |
| 1152 |
|
1153 |
|
| 1153 |
my $return_data = { |
1154 |
my $return_data = { |
| 1154 |
exceeded => 0, |
1155 |
exceeded => 0, |
|
Lines 1207-1217
sub checkHighHolds {
Link Here
|
| 1207 |
|
1208 |
|
| 1208 |
my $calendar = Koha::Calendar->new( branchcode => $branch ); |
1209 |
my $calendar = Koha::Calendar->new( branchcode => $branch ); |
| 1209 |
|
1210 |
|
| 1210 |
my $itype = |
1211 |
my $itype = $item_object->effective_itemtype; |
| 1211 |
( C4::Context->preference('item-level_itypes') ) |
|
|
| 1212 |
? $biblio->{'itype'} |
| 1213 |
: $biblio->{'itemtype'}; |
| 1214 |
|
| 1215 |
my $orig_due = C4::Circulation::CalcDateDue( $issuedate, $itype, $branch, $borrower ); |
1212 |
my $orig_due = C4::Circulation::CalcDateDue( $issuedate, $itype, $branch, $borrower ); |
| 1216 |
|
1213 |
|
| 1217 |
my $decreaseLoanHighHoldsDuration = C4::Context->preference('decreaseLoanHighHoldsDuration'); |
1214 |
my $decreaseLoanHighHoldsDuration = C4::Context->preference('decreaseLoanHighHoldsDuration'); |
|
Lines 1300-1314
sub AddIssue {
Link Here
|
| 1300 |
# find which item we issue |
1297 |
# find which item we issue |
| 1301 |
my $item = GetItem( '', $barcode ) |
1298 |
my $item = GetItem( '', $barcode ) |
| 1302 |
or return; # if we don't get an Item, abort. |
1299 |
or return; # if we don't get an Item, abort. |
|
|
1300 |
my $item_object = Koha::Items->find( { barcode => $barcode } ); |
| 1303 |
|
1301 |
|
| 1304 |
my $branch = _GetCircControlBranch( $item, $borrower ); |
1302 |
my $branch = _GetCircControlBranch( $item, $borrower ); |
| 1305 |
|
1303 |
|
| 1306 |
# get actual issuing if there is one |
1304 |
# get actual issuing if there is one |
| 1307 |
my $actualissue = GetItemIssue( $item->{itemnumber} ); |
1305 |
my $actualissue = GetItemIssue( $item->{itemnumber} ); |
| 1308 |
|
1306 |
|
| 1309 |
# get biblioinformation for this item |
|
|
| 1310 |
my $biblio = GetBiblioFromItemNumber( $item->{itemnumber} ); |
| 1311 |
|
| 1312 |
# check if we just renew the issue. |
1307 |
# check if we just renew the issue. |
| 1313 |
if ( $actualissue->{borrowernumber} eq $borrower->{'borrowernumber'} |
1308 |
if ( $actualissue->{borrowernumber} eq $borrower->{'borrowernumber'} |
| 1314 |
and not $switch_onsite_checkout ) { |
1309 |
and not $switch_onsite_checkout ) { |
|
Lines 1362-1371
sub AddIssue {
Link Here
|
| 1362 |
|
1357 |
|
| 1363 |
# Record in the database the fact that the book was issued. |
1358 |
# Record in the database the fact that the book was issued. |
| 1364 |
unless ($datedue) { |
1359 |
unless ($datedue) { |
| 1365 |
my $itype = |
1360 |
my $itype = $item_object->effective_itemtype; |
| 1366 |
( C4::Context->preference('item-level_itypes') ) |
|
|
| 1367 |
? $biblio->{'itype'} |
| 1368 |
: $biblio->{'itemtype'}; |
| 1369 |
$datedue = CalcDateDue( $issuedate, $itype, $branch, $borrower ); |
1361 |
$datedue = CalcDateDue( $issuedate, $itype, $branch, $borrower ); |
| 1370 |
|
1362 |
|
| 1371 |
} |
1363 |
} |
|
Lines 1466-1472
sub AddIssue {
Link Here
|
| 1466 |
logaction( |
1458 |
logaction( |
| 1467 |
"CIRCULATION", "ISSUE", |
1459 |
"CIRCULATION", "ISSUE", |
| 1468 |
$borrower->{'borrowernumber'}, |
1460 |
$borrower->{'borrowernumber'}, |
| 1469 |
$biblio->{'itemnumber'} |
1461 |
$item->{'itemnumber'} |
| 1470 |
) if C4::Context->preference("IssueLog"); |
1462 |
) if C4::Context->preference("IssueLog"); |
| 1471 |
} |
1463 |
} |
| 1472 |
return $issue; |
1464 |
return $issue; |
|
Lines 1864-1870
sub AddReturn {
Link Here
|
| 1864 |
} |
1856 |
} |
| 1865 |
|
1857 |
|
| 1866 |
# full item data, but no borrowernumber or checkout info (no issue) |
1858 |
# full item data, but no borrowernumber or checkout info (no issue) |
| 1867 |
# we know GetItem should work because GetItemnumberFromBarcode worked |
|
|
| 1868 |
my $hbr = GetBranchItemRule($item->{'homebranch'}, $item->{'itype'})->{'returnbranch'} || "homebranch"; |
1859 |
my $hbr = GetBranchItemRule($item->{'homebranch'}, $item->{'itype'})->{'returnbranch'} || "homebranch"; |
| 1869 |
# get the proper branch to which to return the item |
1860 |
# get the proper branch to which to return the item |
| 1870 |
my $returnbranch = $item->{$hbr} || $branch ; |
1861 |
my $returnbranch = $item->{$hbr} || $branch ; |
|
Lines 2808-2814
sub AddRenewal {
Link Here
|
| 2808 |
my $lastreneweddate = shift || DateTime->now(time_zone => C4::Context->tz)->ymd(); |
2799 |
my $lastreneweddate = shift || DateTime->now(time_zone => C4::Context->tz)->ymd(); |
| 2809 |
|
2800 |
|
| 2810 |
my $item = GetItem($itemnumber) or return; |
2801 |
my $item = GetItem($itemnumber) or return; |
| 2811 |
my $biblio = GetBiblioFromItemNumber($itemnumber) or return; |
2802 |
my $item_object = Koha::Items->find( $itemnumber ); # Should replace $item |
|
|
2803 |
my $biblio = $item_object->biblio; |
| 2812 |
|
2804 |
|
| 2813 |
my $dbh = C4::Context->dbh; |
2805 |
my $dbh = C4::Context->dbh; |
| 2814 |
|
2806 |
|
|
Lines 2836-2843
sub AddRenewal {
Link Here
|
| 2836 |
# based on the value of the RenewalPeriodBase syspref. |
2828 |
# based on the value of the RenewalPeriodBase syspref. |
| 2837 |
unless ($datedue) { |
2829 |
unless ($datedue) { |
| 2838 |
|
2830 |
|
| 2839 |
my $itemtype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'}; |
2831 |
my $itemtype = $item_object->effective_itemtype; |
| 2840 |
|
|
|
| 2841 |
$datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? |
2832 |
$datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? |
| 2842 |
dt_from_string( $issuedata->{date_due} ) : |
2833 |
dt_from_string( $issuedata->{date_due} ) : |
| 2843 |
DateTime->now( time_zone => C4::Context->tz()); |
2834 |
DateTime->now( time_zone => C4::Context->tz()); |
|
Lines 2855-2868
sub AddRenewal {
Link Here
|
| 2855 |
$sth->execute( $datedue->strftime('%Y-%m-%d %H:%M'), $renews, $lastreneweddate, $borrowernumber, $itemnumber ); |
2846 |
$sth->execute( $datedue->strftime('%Y-%m-%d %H:%M'), $renews, $lastreneweddate, $borrowernumber, $itemnumber ); |
| 2856 |
|
2847 |
|
| 2857 |
# Update the renewal count on the item, and tell zebra to reindex |
2848 |
# Update the renewal count on the item, and tell zebra to reindex |
| 2858 |
$renews = $biblio->{'renewals'} + 1; |
2849 |
$renews = $item->{renewals} + 1; |
| 2859 |
ModItem({ renewals => $renews, onloan => $datedue->strftime('%Y-%m-%d %H:%M')}, $biblio->{'biblionumber'}, $itemnumber); |
2850 |
ModItem({ renewals => $renews, onloan => $datedue->strftime('%Y-%m-%d %H:%M')}, $item->{biblionumber}, $itemnumber); |
| 2860 |
|
2851 |
|
| 2861 |
# Charge a new rental fee, if applicable? |
2852 |
# Charge a new rental fee, if applicable? |
| 2862 |
my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber ); |
2853 |
my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber ); |
| 2863 |
if ( $charge > 0 ) { |
2854 |
if ( $charge > 0 ) { |
| 2864 |
my $accountno = getnextacctno( $borrowernumber ); |
2855 |
my $accountno = getnextacctno( $borrowernumber ); |
| 2865 |
my $item = GetBiblioFromItemNumber($itemnumber); |
|
|
| 2866 |
my $manager_id = 0; |
2856 |
my $manager_id = 0; |
| 2867 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
2857 |
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; |
| 2868 |
$sth = $dbh->prepare( |
2858 |
$sth = $dbh->prepare( |
|
Lines 2872-2878
sub AddRenewal {
Link Here
|
| 2872 |
VALUES (now(),?,?,?,?,?,?,?,?)" |
2862 |
VALUES (now(),?,?,?,?,?,?,?,?)" |
| 2873 |
); |
2863 |
); |
| 2874 |
$sth->execute( $borrowernumber, $accountno, $charge, $manager_id, |
2864 |
$sth->execute( $borrowernumber, $accountno, $charge, $manager_id, |
| 2875 |
"Renewal of Rental Item $item->{'title'} $item->{'barcode'}", |
2865 |
"Renewal of Rental Item " . $item->title . " $item->{'barcode'}", |
| 2876 |
'Rent', $charge, $itemnumber ); |
2866 |
'Rent', $charge, $itemnumber ); |
| 2877 |
} |
2867 |
} |
| 2878 |
|
2868 |
|
|
Lines 2917-2923
sub AddRenewal {
Link Here
|
| 2917 |
itemnumber => $itemnumber, |
2907 |
itemnumber => $itemnumber, |
| 2918 |
itemtype => $item->{itype}, |
2908 |
itemtype => $item->{itype}, |
| 2919 |
borrowernumber => $borrowernumber, |
2909 |
borrowernumber => $borrowernumber, |
| 2920 |
ccode => $item->{'ccode'} |
2910 |
ccode => $biblio->biblioitem->ccode, |
| 2921 |
} |
2911 |
} |
| 2922 |
); |
2912 |
); |
| 2923 |
|
2913 |
|
|
Lines 3684-3692
sub ProcessOfflineOperation {
Link Here
|
| 3684 |
sub ProcessOfflineReturn { |
3674 |
sub ProcessOfflineReturn { |
| 3685 |
my $operation = shift; |
3675 |
my $operation = shift; |
| 3686 |
|
3676 |
|
| 3687 |
my $itemnumber = C4::Items::GetItemnumberFromBarcode( $operation->{barcode} ); |
3677 |
my $item = Koha::Items->find({barcode => $operation->{barcode}}); |
| 3688 |
|
3678 |
|
| 3689 |
if ( $itemnumber ) { |
3679 |
if ( $item ) { |
|
|
3680 |
my $itemnumber = $item->itemnumber; |
| 3690 |
my $issue = GetOpenIssue( $itemnumber ); |
3681 |
my $issue = GetOpenIssue( $itemnumber ); |
| 3691 |
if ( $issue ) { |
3682 |
if ( $issue ) { |
| 3692 |
MarkIssueReturned( |
3683 |
MarkIssueReturned( |
|
Lines 3715-3724
sub ProcessOfflineIssue {
Link Here
|
| 3715 |
my $borrower = C4::Members::GetMember( cardnumber => $operation->{cardnumber} ); |
3706 |
my $borrower = C4::Members::GetMember( cardnumber => $operation->{cardnumber} ); |
| 3716 |
|
3707 |
|
| 3717 |
if ( $borrower->{borrowernumber} ) { |
3708 |
if ( $borrower->{borrowernumber} ) { |
| 3718 |
my $itemnumber = C4::Items::GetItemnumberFromBarcode( $operation->{barcode} ); |
3709 |
my $item = Koha::Items->find({ barcode => $operation->{barcode} }); |
| 3719 |
unless ($itemnumber) { |
3710 |
unless ($item) { |
| 3720 |
return "Barcode not found."; |
3711 |
return "Barcode not found."; |
| 3721 |
} |
3712 |
} |
|
|
3713 |
my $itemnumber = $item->itemnumber; |
| 3722 |
my $issue = GetOpenIssue( $itemnumber ); |
3714 |
my $issue = GetOpenIssue( $itemnumber ); |
| 3723 |
|
3715 |
|
| 3724 |
if ( $issue and ( $issue->{borrowernumber} ne $borrower->{borrowernumber} ) ) { # Item already issued to another borrower, mark it returned |
3716 |
if ( $issue and ( $issue->{borrowernumber} ne $borrower->{borrowernumber} ) ) { # Item already issued to another borrower, mark it returned |