| Lines 1833-1843
          sub AddReturn {
      
      
        Link Here | 
        
          | 1833 |     my $biblio   = $item_level_itypes ? undef : GetBiblioData( $item->{ biblionumber } ); # don't get bib data unless we need it | 1833 |     my $biblio   = $item_level_itypes ? undef : GetBiblioData( $item->{ biblionumber } ); # don't get bib data unless we need it | 
        
          | 1834 |     my $itemtype = $item_level_itypes ? $item->{itype} : $biblio->{itemtype}; | 1834 |     my $itemtype = $item_level_itypes ? $item->{itype} : $biblio->{itemtype}; | 
        
          | 1835 |  | 1835 |  | 
          
            
              | 1836 |     my $issue  = GetItemIssue($itemnumber); | 1836 |     my $issue  = Koha::Checkouts->find( { itemnumber => $itemnumber } ); | 
            
              | 1837 |     if ($issue and $issue->{borrowernumber}) { | 1837 |     if ( $issue ) { | 
            
              | 1838 |         $borrower = C4::Members::GetMember( borrowernumber => $issue->{borrowernumber} ) | 1838 |         $borrower = C4::Members::GetMember( borrowernumber => $issue->borrowernumber ) | 
            
              | 1839 |             or die "Data inconsistency: barcode $barcode (itemnumber:$itemnumber) claims to be issued to non-existent borrowernumber '$issue->{borrowernumber}'\n" | 1839 |             or die "Data inconsistency: barcode $barcode (itemnumber:$itemnumber) claims to be issued to non-existent borrowernumber '" . $issue->borrowernumber . "'\n" | 
            
              | 1840 |                 . Dumper($issue) . "\n"; | 1840 |                 . Dumper($issue->unblessed) . "\n"; | 
        
          | 1841 |     } else { | 1841 |     } else { | 
        
          | 1842 |         $messages->{'NotIssued'} = $barcode; | 1842 |         $messages->{'NotIssued'} = $barcode; | 
        
          | 1843 |         # even though item is not on loan, it may still be transferred;  therefore, get current branch info | 1843 |         # even though item is not on loan, it may still be transferred;  therefore, get current branch info | 
  
    | Lines 1919-1925
          sub AddReturn {
      
      
        Link Here | 
        
          | 1919 |     my $today = DateTime->now( time_zone => C4::Context->tz() ); | 1919 |     my $today = DateTime->now( time_zone => C4::Context->tz() ); | 
        
          | 1920 |  | 1920 |  | 
        
          | 1921 |     if ($doreturn) { | 1921 |     if ($doreturn) { | 
          
            
              | 1922 |         my $datedue = $issue->{date_due}; | 1922 |         my $is_overdue; | 
            
              |  |  | 1923 |         die "The item is not issed and cannot be returned" unless $issue; # Just in case... | 
        
          | 1923 |         $borrower or warn "AddReturn without current borrower"; | 1924 |         $borrower or warn "AddReturn without current borrower"; | 
        
          | 1924 | 		my $circControlBranch; | 1925 | 		my $circControlBranch; | 
        
          | 1925 |         if ($dropbox) { | 1926 |         if ($dropbox) { | 
  
    | Lines 1928-1934
          sub AddReturn {
      
      
        Link Here | 
        
          | 1928 |             # FIXME: check issuedate > returndate, factoring in holidays | 1929 |             # FIXME: check issuedate > returndate, factoring in holidays | 
        
          | 1929 |  | 1930 |  | 
        
          | 1930 |             $circControlBranch = _GetCircControlBranch($item,$borrower); | 1931 |             $circControlBranch = _GetCircControlBranch($item,$borrower); | 
          
            
              | 1931 |             $issue->{'overdue'} = DateTime->compare($issue->{'date_due'}, $dropboxdate ) == -1 ? 1 : 0; | 1932 |             $is_overdue = $issue->is_overdue( $dropboxdate ); | 
        
          | 1932 |         } | 1933 |         } | 
        
          | 1933 |  | 1934 |  | 
        
          | 1934 |         if ($borrowernumber) { | 1935 |         if ($borrowernumber) { | 
  
    | Lines 1938-1944
          sub AddReturn {
      
      
        Link Here | 
        
          | 1938 |                 $issue->{issue_id} = $issue_id; | 1939 |                 $issue->{issue_id} = $issue_id; | 
        
          | 1939 |             }; | 1940 |             }; | 
        
          | 1940 |             unless ( $@ ) { | 1941 |             unless ( $@ ) { | 
          
            
              | 1941 |                 if ( ( C4::Context->preference('CalculateFinesOnReturn') && $issue->{'overdue'} ) || $return_date ) { | 1942 |                 if ( ( C4::Context->preference('CalculateFinesOnReturn') && $is_overdue ) || $return_date ) { | 
        
          | 1942 |                     _CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $borrower, return_date => $return_date } ); | 1943 |                     _CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $borrower, return_date => $return_date } ); | 
        
          | 1943 |                 } | 1944 |                 } | 
        
          | 1944 |             } else { | 1945 |             } else { | 
  
    | Lines 1955-1961
          sub AddReturn {
      
      
        Link Here | 
        
          | 1955 |  | 1956 |  | 
        
          | 1956 |         } | 1957 |         } | 
        
          | 1957 |  | 1958 |  | 
          
            
              | 1958 |         ModItem({ onloan => undef }, $issue->{'biblionumber'}, $item->{'itemnumber'}); | 1959 |         ModItem({ onloan => undef }, $item->{biblionumber}, $item->{'itemnumber'}); | 
        
          | 1959 |     } | 1960 |     } | 
        
          | 1960 |  | 1961 |  | 
        
          | 1961 |     # the holdingbranch is updated if the document is returned to another location. | 1962 |     # the holdingbranch is updated if the document is returned to another location. | 
  
    | Lines 2015-2032
          sub AddReturn {
      
      
        Link Here | 
        
          | 2015 |     if ($borrowernumber) { | 2016 |     if ($borrowernumber) { | 
        
          | 2016 |         my $fix = _FixOverduesOnReturn($borrowernumber, $item->{itemnumber}, $exemptfine, $dropbox); | 2017 |         my $fix = _FixOverduesOnReturn($borrowernumber, $item->{itemnumber}, $exemptfine, $dropbox); | 
        
          | 2017 |         defined($fix) or warn "_FixOverduesOnReturn($borrowernumber, $item->{itemnumber}...) failed!";  # zero is OK, check defined | 2018 |         defined($fix) or warn "_FixOverduesOnReturn($borrowernumber, $item->{itemnumber}...) failed!";  # zero is OK, check defined | 
          
            
              | 2018 |          | 2019 |  | 
            
              | 2019 |         if ( $issue->{overdue} && $issue->{date_due} ) { | 2020 |         if ( $issue and $issue->is_overdue ) { | 
        
          | 2020 |         # fix fine days | 2021 |         # fix fine days | 
        
          | 2021 |             $today = $dropboxdate if $dropbox; | 2022 |             $today = $dropboxdate if $dropbox; | 
          
            
              | 2022 |             my ($debardate,$reminder) = _debar_user_on_return( $borrower, $item, $issue->{date_due}, $today ); | 2023 |             my ($debardate,$reminder) = _debar_user_on_return( $borrower, $item, dt_from_string($issue->date_due), $today ); | 
        
          | 2023 |             if ($reminder){ | 2024 |             if ($reminder){ | 
        
          | 2024 |                 $messages->{'PrevDebarred'} = $debardate; | 2025 |                 $messages->{'PrevDebarred'} = $debardate; | 
        
          | 2025 |             } else { | 2026 |             } else { | 
        
          | 2026 |                 $messages->{'Debarred'} = $debardate if $debardate; | 2027 |                 $messages->{'Debarred'} = $debardate if $debardate; | 
        
          | 2027 |             } | 2028 |             } | 
        
          | 2028 |         # there's no overdue on the item but borrower had been previously debarred | 2029 |         # there's no overdue on the item but borrower had been previously debarred | 
          
            
              | 2029 |         } elsif ( $issue->{date_due} and $borrower->{'debarred'} ) { | 2030 |         } elsif ( $issue->date_due and $borrower->{'debarred'} ) { | 
        
          | 2030 |              if ( $borrower->{debarred} eq "9999-12-31") { | 2031 |              if ( $borrower->{debarred} eq "9999-12-31") { | 
        
          | 2031 |                 $messages->{'ForeverDebarred'} = $borrower->{'debarred'}; | 2032 |                 $messages->{'ForeverDebarred'} = $borrower->{'debarred'}; | 
        
          | 2032 |              } else { | 2033 |              } else { | 
  
    | Lines 2621-2630
          sub CanBookBeRenewed {
      
      
        Link Here | 
        
          | 2621 |     my $renews = 1; | 2622 |     my $renews = 1; | 
        
          | 2622 |  | 2623 |  | 
        
          | 2623 |     my $item      = GetItem($itemnumber)      or return ( 0, 'no_item' ); | 2624 |     my $item      = GetItem($itemnumber)      or return ( 0, 'no_item' ); | 
          
            
              | 2624 |     my $itemissue = GetItemIssue($itemnumber) or return ( 0, 'no_checkout' ); | 2625 |     my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } ) or return ( 0, 'no_checkout' ); | 
            
              | 2625 |     return ( 0, 'onsite_checkout' ) if $itemissue->{onsite_checkout}; | 2626 |     return ( 0, 'onsite_checkout' ) if $issue->onsite_checkout; | 
        
          | 2626 |  | 2627 |  | 
          
            
              | 2627 |     $borrowernumber ||= $itemissue->{borrowernumber}; | 2628 |     $borrowernumber ||= $issue->borrowernumber; | 
        
          | 2628 |     my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) | 2629 |     my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) | 
        
          | 2629 |       or return; | 2630 |       or return; | 
        
          | 2630 |  | 2631 |  | 
  
    | Lines 2706-2712
          sub CanBookBeRenewed {
      
      
        Link Here | 
        
          | 2706 |     ); | 2707 |     ); | 
        
          | 2707 |  | 2708 |  | 
        
          | 2708 |     return ( 0, "too_many" ) | 2709 |     return ( 0, "too_many" ) | 
          
            
              | 2709 |       if not $issuing_rule or $issuing_rule->renewalsallowed <= $itemissue->{renewals}; | 2710 |       if not $issuing_rule or $issuing_rule->renewalsallowed <= $issue->renewals; | 
        
          | 2710 |  | 2711 |  | 
        
          | 2711 |     my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing'); | 2712 |     my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing'); | 
        
          | 2712 |     my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing'); | 2713 |     my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing'); | 
  
    | Lines 2716-2731
          sub CanBookBeRenewed {
      
      
        Link Here | 
        
          | 2716 |  | 2717 |  | 
        
          | 2717 |     if ( $restricted and $restrictionblockrenewing ) { | 2718 |     if ( $restricted and $restrictionblockrenewing ) { | 
        
          | 2718 |         return ( 0, 'restriction'); | 2719 |         return ( 0, 'restriction'); | 
          
            
              | 2719 |     } elsif ( ($hasoverdues and $overduesblockrenewing eq 'block') || ($itemissue->{overdue} and $overduesblockrenewing eq 'blockitem') ) { | 2720 |     } elsif ( ($hasoverdues and $overduesblockrenewing eq 'block') || ($issue->is_overdue and $overduesblockrenewing eq 'blockitem') ) { | 
        
          | 2720 |         return ( 0, 'overdue'); | 2721 |         return ( 0, 'overdue'); | 
        
          | 2721 |     } | 2722 |     } | 
        
          | 2722 |  | 2723 |  | 
          
            
              | 2723 |     if ( $itemissue->{auto_renew} ) { | 2724 |     if ( $issue->auto_renew ) { | 
        
          | 2724 |         if ( defined $issuing_rule->no_auto_renewal_after | 2725 |         if ( defined $issuing_rule->no_auto_renewal_after | 
        
          | 2725 |                 and $issuing_rule->no_auto_renewal_after ne "" ) { | 2726 |                 and $issuing_rule->no_auto_renewal_after ne "" ) { | 
        
          | 2726 |             # Get issue_date and add no_auto_renewal_after | 2727 |             # Get issue_date and add no_auto_renewal_after | 
        
          | 2727 |             # If this is greater than today, it's too late for renewal. | 2728 |             # If this is greater than today, it's too late for renewal. | 
          
            
              | 2728 |             my $maximum_renewal_date = dt_from_string($itemissue->{issuedate}); | 2729 |             my $maximum_renewal_date = dt_from_string($issue->issuedate, 'sql'); | 
        
          | 2729 |             $maximum_renewal_date->add( | 2730 |             $maximum_renewal_date->add( | 
        
          | 2730 |                 $issuing_rule->lengthunit => $issuing_rule->no_auto_renewal_after | 2731 |                 $issuing_rule->lengthunit => $issuing_rule->no_auto_renewal_after | 
        
          | 2731 |             ); | 2732 |             ); | 
  
    | Lines 2756-2764
          sub CanBookBeRenewed {
      
      
        Link Here | 
        
          | 2756 |     { | 2757 |     { | 
        
          | 2757 |  | 2758 |  | 
        
          | 2758 |         # Calculate soonest renewal by subtracting 'No renewal before' from due date | 2759 |         # Calculate soonest renewal by subtracting 'No renewal before' from due date | 
          
            
              | 2759 |         my $soonestrenewal = | 2760 |         my $soonestrenewal = dt_from_string( $issue->date_due, 'sql' )->subtract( | 
            
              | 2760 |           $itemissue->{date_due}->clone() |  |  | 
            
              | 2761 |           ->subtract( | 
        
          | 2762 |             $issuing_rule->lengthunit => $issuing_rule->norenewalbefore ); | 2761 |             $issuing_rule->lengthunit => $issuing_rule->norenewalbefore ); | 
        
          | 2763 |  | 2762 |  | 
        
          | 2764 |         # Depending on syspref reset the exact time, only check the date | 2763 |         # Depending on syspref reset the exact time, only check the date | 
  
    | Lines 2770-2789
          sub CanBookBeRenewed {
      
      
        Link Here | 
        
          | 2770 |  | 2769 |  | 
        
          | 2771 |         if ( $soonestrenewal > DateTime->now( time_zone => C4::Context->tz() ) ) | 2770 |         if ( $soonestrenewal > DateTime->now( time_zone => C4::Context->tz() ) ) | 
        
          | 2772 |         { | 2771 |         { | 
          
            
              | 2773 |             return ( 0, "auto_too_soon" ) if $itemissue->{auto_renew}; | 2772 |             return ( 0, "auto_too_soon" ) if $issue->auto_renew; | 
        
          | 2774 |             return ( 0, "too_soon" ); | 2773 |             return ( 0, "too_soon" ); | 
        
          | 2775 |         } | 2774 |         } | 
          
            
              | 2776 |         elsif ( $itemissue->{auto_renew} ) { | 2775 |         elsif ( $issue->auto_renew ) { | 
        
          | 2777 |             return ( 0, "auto_renew" ); | 2776 |             return ( 0, "auto_renew" ); | 
        
          | 2778 |         } | 2777 |         } | 
        
          | 2779 |     } | 2778 |     } | 
        
          | 2780 |  | 2779 |  | 
        
          | 2781 |     # Fallback for automatic renewals: | 2780 |     # Fallback for automatic renewals: | 
        
          | 2782 |     # If norenewalbefore is undef, don't renew before due date. | 2781 |     # If norenewalbefore is undef, don't renew before due date. | 
          
            
              | 2783 |     if ( $itemissue->{auto_renew} ) { | 2782 |     if ( $issue->auto_renew ) { | 
        
          | 2784 |         my $now = dt_from_string; | 2783 |         my $now = dt_from_string; | 
        
          | 2785 |         return ( 0, "auto_renew" ) | 2784 |         return ( 0, "auto_renew" ) | 
          
            
              | 2786 |           if $now >= $itemissue->{date_due}; | 2785 |           if $now >= dt_from_string( $issue->date_due, 'sql' ); | 
        
          | 2787 |         return ( 0, "auto_too_soon" ); | 2786 |         return ( 0, "auto_too_soon" ); | 
        
          | 2788 |     } | 2787 |     } | 
        
          | 2789 |  | 2788 |  | 
  
    | Lines 2827-2837
          sub AddRenewal {
      
      
        Link Here | 
        
          | 2827 |     my $dbh = C4::Context->dbh; | 2826 |     my $dbh = C4::Context->dbh; | 
        
          | 2828 |  | 2827 |  | 
        
          | 2829 |     # Find the issues record for this book | 2828 |     # Find the issues record for this book | 
          
            
              | 2830 |     my $issuedata  = GetItemIssue($itemnumber); | 2829 |     my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } ); | 
        
          | 2831 |  | 2830 |  | 
          
            
              | 2832 |     return unless ( $issuedata ); | 2831 |     return unless $issue; | 
        
          | 2833 |  | 2832 |  | 
          
            
              | 2834 |     $borrowernumber ||= $issuedata->{borrowernumber}; | 2833 |     $borrowernumber ||= $issue->borrowernumber; | 
        
          | 2835 |  | 2834 |  | 
        
          | 2836 |     if ( defined $datedue && ref $datedue ne 'DateTime' ) { | 2835 |     if ( defined $datedue && ref $datedue ne 'DateTime' ) { | 
        
          | 2837 |         carp 'Invalid date passed to AddRenewal.'; | 2836 |         carp 'Invalid date passed to AddRenewal.'; | 
  
    | Lines 2840-2847
          sub AddRenewal {
      
      
        Link Here | 
        
          | 2840 |  | 2839 |  | 
        
          | 2841 |     my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) or return; | 2840 |     my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) or return; | 
        
          | 2842 |  | 2841 |  | 
          
            
              | 2843 |     if ( C4::Context->preference('CalculateFinesOnReturn') && $issuedata->{overdue} ) { | 2842 |     if ( C4::Context->preference('CalculateFinesOnReturn') && $issue->is_overdue ) { | 
            
              | 2844 |         _CalculateAndUpdateFine( { issue => $issuedata, item => $item, borrower => $borrower } ); | 2843 |         _CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $borrower } ); | 
        
          | 2845 |     } | 2844 |     } | 
        
          | 2846 |     _FixOverduesOnReturn( $borrowernumber, $itemnumber ); | 2845 |     _FixOverduesOnReturn( $borrowernumber, $itemnumber ); | 
        
          | 2847 |  | 2846 |  | 
  
    | Lines 2853-2866
          sub AddRenewal {
      
      
        Link Here | 
        
          | 2853 |         my $itemtype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'}; | 2852 |         my $itemtype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'}; | 
        
          | 2854 |  | 2853 |  | 
        
          | 2855 |         $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? | 2854 |         $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? | 
          
            
              | 2856 |                                         dt_from_string( $issuedata->{date_due} ) : | 2855 |                                         dt_from_string( $issue->date_due, 'sql' ) : | 
        
          | 2857 |                                         DateTime->now( time_zone => C4::Context->tz()); | 2856 |                                         DateTime->now( time_zone => C4::Context->tz()); | 
        
          | 2858 |         $datedue =  CalcDateDue($datedue, $itemtype, _GetCircControlBranch($item, $borrower), $borrower, 'is a renewal'); | 2857 |         $datedue =  CalcDateDue($datedue, $itemtype, _GetCircControlBranch($item, $borrower), $borrower, 'is a renewal'); | 
        
          | 2859 |     } | 2858 |     } | 
        
          | 2860 |  | 2859 |  | 
        
          | 2861 |     # Update the issues record to have the new due date, and a new count | 2860 |     # Update the issues record to have the new due date, and a new count | 
        
          | 2862 |     # of how many times it has been renewed. | 2861 |     # of how many times it has been renewed. | 
          
            
              | 2863 |     my $renews = $issuedata->{'renewals'} + 1; | 2862 |     my $renews = $issue->renewals + 1; | 
        
          | 2864 |     my $sth = $dbh->prepare("UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ? | 2863 |     my $sth = $dbh->prepare("UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ? | 
        
          | 2865 |                             WHERE borrowernumber=?  | 2864 |                             WHERE borrowernumber=?  | 
        
          | 2866 |                             AND itemnumber=?" | 2865 |                             AND itemnumber=?" | 
  
    | Lines 4023-4029
          sub _CalculateAndUpdateFine {
      
      
        Link Here | 
        
          | 4023 |     unless ($item)     { carp "No item passed in!"     && return; } | 4022 |     unless ($item)     { carp "No item passed in!"     && return; } | 
        
          | 4024 |     unless ($issue)    { carp "No issue passed in!"    && return; } | 4023 |     unless ($issue)    { carp "No issue passed in!"    && return; } | 
        
          | 4025 |  | 4024 |  | 
          
            
              | 4026 |     my $datedue = $issue->{date_due}; | 4025 |     my $datedue = dt_from_string( $issue->date_due ); | 
        
          | 4027 |  | 4026 |  | 
        
          | 4028 |     # we only need to calculate and change the fines if we want to do that on return | 4027 |     # we only need to calculate and change the fines if we want to do that on return | 
        
          | 4029 |     # Should be on for hourly loans | 4028 |     # Should be on for hourly loans | 
  
    | Lines 4031-4037
          sub _CalculateAndUpdateFine {
      
      
        Link Here | 
        
          | 4031 |     my $control_branchcode = | 4030 |     my $control_branchcode = | 
        
          | 4032 |         ( $control eq 'ItemHomeLibrary' ) ? $item->{homebranch} | 4031 |         ( $control eq 'ItemHomeLibrary' ) ? $item->{homebranch} | 
        
          | 4033 |       : ( $control eq 'PatronLibrary' )   ? $borrower->{branchcode} | 4032 |       : ( $control eq 'PatronLibrary' )   ? $borrower->{branchcode} | 
          
            
              | 4034 |       :                                     $issue->{branchcode}; | 4033 |       :                                     $issue->branchcode; | 
        
          | 4035 |  | 4034 |  | 
        
          | 4036 |     my $date_returned = $return_date ? dt_from_string($return_date) : dt_from_string(); | 4035 |     my $date_returned = $return_date ? dt_from_string($return_date) : dt_from_string(); | 
        
          | 4037 |  | 4036 |  | 
  
    | Lines 4043-4051
          sub _CalculateAndUpdateFine {
      
      
        Link Here | 
        
          | 4043 |     if ( C4::Context->preference('finesMode') eq 'production' ) { | 4042 |     if ( C4::Context->preference('finesMode') eq 'production' ) { | 
        
          | 4044 |         if ( $amount > 0 ) { | 4043 |         if ( $amount > 0 ) { | 
        
          | 4045 |             C4::Overdues::UpdateFine({ | 4044 |             C4::Overdues::UpdateFine({ | 
          
            
              | 4046 |                 issue_id       => $issue->{issue_id}, | 4045 |                 issue_id       => $issue->issue_id, | 
            
              | 4047 |                 itemnumber     => $issue->{itemnumber}, | 4046 |                 itemnumber     => $issue->itemnumber, | 
            
              | 4048 |                 borrowernumber => $issue->{borrowernumber}, | 4047 |                 borrowernumber => $issue->borrowernumber, | 
        
          | 4049 |                 amount         => $amount, | 4048 |                 amount         => $amount, | 
        
          | 4050 |                 type           => $type, | 4049 |                 type           => $type, | 
        
          | 4051 |                 due            => output_pref($datedue), | 4050 |                 due            => output_pref($datedue), | 
  
    | Lines 4057-4065
          sub _CalculateAndUpdateFine {
      
      
        Link Here | 
        
          | 4057 |             # so in this case, we need to drop those fines to 0 | 4056 |             # so in this case, we need to drop those fines to 0 | 
        
          | 4058 |  | 4057 |  | 
        
          | 4059 |             C4::Overdues::UpdateFine({ | 4058 |             C4::Overdues::UpdateFine({ | 
          
            
              | 4060 |                 issue_id       => $issue->{issue_id}, | 4059 |                 issue_id       => $issue->issue_id, | 
            
              | 4061 |                 itemnumber     => $issue->{itemnumber}, | 4060 |                 itemnumber     => $issue->itemnumber, | 
            
              | 4062 |                 borrowernumber => $issue->{borrowernumber}, | 4061 |                 borrowernumber => $issue->borrowernumber, | 
        
          | 4063 |                 amount         => 0, | 4062 |                 amount         => 0, | 
        
          | 4064 |                 type           => $type, | 4063 |                 type           => $type, | 
        
          | 4065 |                 due            => output_pref($datedue), | 4064 |                 due            => output_pref($datedue), |