| 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 2847-2853
          sub AddRenewal {
      
      
        Link Here | 
        
          | 2847 |     my $lastreneweddate = shift || DateTime->now(time_zone => C4::Context->tz)->ymd(); | 2838 |     my $lastreneweddate = shift || DateTime->now(time_zone => C4::Context->tz)->ymd(); | 
        
          | 2848 |  | 2839 |  | 
        
          | 2849 |     my $item   = GetItem($itemnumber) or return; | 2840 |     my $item   = GetItem($itemnumber) or return; | 
          
            
              | 2850 |     my $biblio = GetBiblioFromItemNumber($itemnumber) or return; | 2841 |     my $item_object = Koha::Items->find( $itemnumber ); # Should replace $item | 
            
              |  |  | 2842 |     my $biblio = $item_object->biblio; | 
        
          | 2851 |  | 2843 |  | 
        
          | 2852 |     my $dbh = C4::Context->dbh; | 2844 |     my $dbh = C4::Context->dbh; | 
        
          | 2853 |  | 2845 |  | 
  
    | Lines 2875-2882
          sub AddRenewal {
      
      
        Link Here | 
        
          | 2875 |     # based on the value of the RenewalPeriodBase syspref. | 2867 |     # based on the value of the RenewalPeriodBase syspref. | 
        
          | 2876 |     unless ($datedue) { | 2868 |     unless ($datedue) { | 
        
          | 2877 |  | 2869 |  | 
          
            
              | 2878 |         my $itemtype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'}; | 2870 |         my $itemtype = $item_object->effective_itemtype; | 
            
              | 2879 |  |  |  | 
        
          | 2880 |         $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? | 2871 |         $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? | 
        
          | 2881 |                                         dt_from_string( $issuedata->{date_due} ) : | 2872 |                                         dt_from_string( $issuedata->{date_due} ) : | 
        
          | 2882 |                                         DateTime->now( time_zone => C4::Context->tz()); | 2873 |                                         DateTime->now( time_zone => C4::Context->tz()); | 
  
    | Lines 2894-2907
          sub AddRenewal {
      
      
        Link Here | 
        
          | 2894 |     $sth->execute( $datedue->strftime('%Y-%m-%d %H:%M'), $renews, $lastreneweddate, $borrowernumber, $itemnumber ); | 2885 |     $sth->execute( $datedue->strftime('%Y-%m-%d %H:%M'), $renews, $lastreneweddate, $borrowernumber, $itemnumber ); | 
        
          | 2895 |  | 2886 |  | 
        
          | 2896 |     # Update the renewal count on the item, and tell zebra to reindex | 2887 |     # Update the renewal count on the item, and tell zebra to reindex | 
          
            
              | 2897 |     $renews = $biblio->{'renewals'} + 1; | 2888 |     $renews = $item->{renewals} + 1; | 
            
              | 2898 |     ModItem({ renewals => $renews, onloan => $datedue->strftime('%Y-%m-%d %H:%M')}, $biblio->{'biblionumber'}, $itemnumber); | 2889 |     ModItem({ renewals => $renews, onloan => $datedue->strftime('%Y-%m-%d %H:%M')}, $item->{biblionumber}, $itemnumber); | 
        
          | 2899 |  | 2890 |  | 
        
          | 2900 |     # Charge a new rental fee, if applicable? | 2891 |     # Charge a new rental fee, if applicable? | 
        
          | 2901 |     my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber ); | 2892 |     my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber ); | 
        
          | 2902 |     if ( $charge > 0 ) { | 2893 |     if ( $charge > 0 ) { | 
        
          | 2903 |         my $accountno = getnextacctno( $borrowernumber ); | 2894 |         my $accountno = getnextacctno( $borrowernumber ); | 
            
              | 2904 |         my $item = GetBiblioFromItemNumber($itemnumber); |  |  | 
        
          | 2905 |         my $manager_id = 0; | 2895 |         my $manager_id = 0; | 
        
          | 2906 |         $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;  | 2896 |         $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;  | 
        
          | 2907 |         $sth = $dbh->prepare( | 2897 |         $sth = $dbh->prepare( | 
  
    | Lines 2911-2917
          sub AddRenewal {
      
      
        Link Here | 
        
          | 2911 |                     VALUES (now(),?,?,?,?,?,?,?,?)" | 2901 |                     VALUES (now(),?,?,?,?,?,?,?,?)" | 
        
          | 2912 |         ); | 2902 |         ); | 
        
          | 2913 |         $sth->execute( $borrowernumber, $accountno, $charge, $manager_id, | 2903 |         $sth->execute( $borrowernumber, $accountno, $charge, $manager_id, | 
          
            
              | 2914 |             "Renewal of Rental Item $item->{'title'} $item->{'barcode'}", | 2904 |             "Renewal of Rental Item " . $item_object->title . " $item->{'barcode'}", | 
        
          | 2915 |             'Rent', $charge, $itemnumber ); | 2905 |             'Rent', $charge, $itemnumber ); | 
        
          | 2916 |     } | 2906 |     } | 
        
          | 2917 |  | 2907 |  | 
  
    | Lines 3732-3740
          sub ProcessOfflineOperation {
      
      
        Link Here | 
        
          | 3732 | sub ProcessOfflineReturn { | 3722 | sub ProcessOfflineReturn { | 
        
          | 3733 |     my $operation = shift; | 3723 |     my $operation = shift; | 
        
          | 3734 |  | 3724 |  | 
          
            
              | 3735 |     my $itemnumber = C4::Items::GetItemnumberFromBarcode( $operation->{barcode} ); | 3725 |     my $item = Koha::Items->find({barcode => $operation->{barcode}}); | 
        
          | 3736 |  | 3726 |  | 
          
            
              | 3737 |     if ( $itemnumber ) { | 3727 |     if ( $item ) { | 
            
              |  |  | 3728 |         my $itemnumber = $item->itemnumber; | 
        
          | 3738 |         my $issue = GetOpenIssue( $itemnumber ); | 3729 |         my $issue = GetOpenIssue( $itemnumber ); | 
        
          | 3739 |         if ( $issue ) { | 3730 |         if ( $issue ) { | 
        
          | 3740 |             MarkIssueReturned( | 3731 |             MarkIssueReturned( | 
  
    | Lines 3763-3772
          sub ProcessOfflineIssue {
      
      
        Link Here | 
        
          | 3763 |     my $borrower = C4::Members::GetMember( cardnumber => $operation->{cardnumber} ); | 3754 |     my $borrower = C4::Members::GetMember( cardnumber => $operation->{cardnumber} ); | 
        
          | 3764 |  | 3755 |  | 
        
          | 3765 |     if ( $borrower->{borrowernumber} ) { | 3756 |     if ( $borrower->{borrowernumber} ) { | 
          
            
              | 3766 |         my $itemnumber = C4::Items::GetItemnumberFromBarcode( $operation->{barcode} ); | 3757 |         my $item = Koha::Items->find({ barcode => $operation->{barcode} }); | 
            
              | 3767 |         unless ($itemnumber) { | 3758 |         unless ($item) { | 
        
          | 3768 |             return "Barcode not found."; | 3759 |             return "Barcode not found."; | 
        
          | 3769 |         } | 3760 |         } | 
            
              |  |  | 3761 |         my $itemnumber = $item->itemnumber; | 
        
          | 3770 |         my $issue = GetOpenIssue( $itemnumber ); | 3762 |         my $issue = GetOpenIssue( $itemnumber ); | 
        
          | 3771 |  | 3763 |  | 
        
          | 3772 |         if ( $issue and ( $issue->{borrowernumber} ne $borrower->{borrowernumber} ) ) { # Item already issued to another borrower, mark it returned | 3764 |         if ( $issue and ( $issue->{borrowernumber} ne $borrower->{borrowernumber} ) ) { # Item already issued to another borrower, mark it returned |