Lines 1911-1949
sub AddReturn {
Link Here
|
1911 |
|
1911 |
|
1912 |
if ($borrowernumber) { |
1912 |
if ($borrowernumber) { |
1913 |
if ( ( C4::Context->preference('CalculateFinesOnReturn') && $issue->{'overdue'} ) || $return_date ) { |
1913 |
if ( ( C4::Context->preference('CalculateFinesOnReturn') && $issue->{'overdue'} ) || $return_date ) { |
1914 |
# we only need to calculate and change the fines if we want to do that on return |
1914 |
_CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $borrower, return_date => $return_date } ); |
1915 |
# Should be on for hourly loans |
|
|
1916 |
my $control = C4::Context->preference('CircControl'); |
1917 |
my $control_branchcode = |
1918 |
( $control eq 'ItemHomeLibrary' ) ? $item->{homebranch} |
1919 |
: ( $control eq 'PatronLibrary' ) ? $borrower->{branchcode} |
1920 |
: $issue->{branchcode}; |
1921 |
|
1922 |
my $date_returned = |
1923 |
$return_date ? dt_from_string($return_date) : $today; |
1924 |
|
1925 |
my ( $amount, $type, $unitcounttotal ) = |
1926 |
C4::Overdues::CalcFine( $item, $borrower->{categorycode}, |
1927 |
$control_branchcode, $datedue, $date_returned ); |
1928 |
|
1929 |
$type ||= q{}; |
1930 |
|
1931 |
if ( C4::Context->preference('finesMode') eq 'production' ) { |
1932 |
if ( $amount > 0 ) { |
1933 |
C4::Overdues::UpdateFine( $issue->{itemnumber}, |
1934 |
$issue->{borrowernumber}, |
1935 |
$amount, $type, output_pref($datedue) ); |
1936 |
} |
1937 |
elsif ($return_date) { |
1938 |
|
1939 |
# Backdated returns may have fines that shouldn't exist, |
1940 |
# so in this case, we need to drop those fines to 0 |
1941 |
|
1942 |
C4::Overdues::UpdateFine( $issue->{itemnumber}, |
1943 |
$issue->{borrowernumber}, |
1944 |
0, $type, output_pref($datedue) ); |
1945 |
} |
1946 |
} |
1947 |
} |
1915 |
} |
1948 |
|
1916 |
|
1949 |
eval { |
1917 |
eval { |
Lines 2873-2882
sub AddRenewal {
Link Here
|
2873 |
my $dbh = C4::Context->dbh; |
2841 |
my $dbh = C4::Context->dbh; |
2874 |
|
2842 |
|
2875 |
# Find the issues record for this book |
2843 |
# Find the issues record for this book |
2876 |
my $sth = |
2844 |
my $issuedata = GetItemIssue($itemnumber); |
2877 |
$dbh->prepare("SELECT * FROM issues WHERE itemnumber = ?"); |
|
|
2878 |
$sth->execute( $itemnumber ); |
2879 |
my $issuedata = $sth->fetchrow_hashref; |
2880 |
|
2845 |
|
2881 |
return unless ( $issuedata ); |
2846 |
return unless ( $issuedata ); |
2882 |
|
2847 |
|
Lines 2887-2898
sub AddRenewal {
Link Here
|
2887 |
return; |
2852 |
return; |
2888 |
} |
2853 |
} |
2889 |
|
2854 |
|
|
|
2855 |
my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) or return; |
2856 |
|
2857 |
if ( C4::Context->preference('CalculateFinesOnReturn') && $issuedata->{overdue} ) { |
2858 |
_CalculateAndUpdateFine( { issue => $issuedata, item => $item, borrower => $borrower } ); |
2859 |
} |
2860 |
_FixOverduesOnReturn( $borrowernumber, $itemnumber ); |
2861 |
|
2890 |
# If the due date wasn't specified, calculate it by adding the |
2862 |
# If the due date wasn't specified, calculate it by adding the |
2891 |
# book's loan length to today's date or the current due date |
2863 |
# book's loan length to today's date or the current due date |
2892 |
# based on the value of the RenewalPeriodBase syspref. |
2864 |
# based on the value of the RenewalPeriodBase syspref. |
2893 |
unless ($datedue) { |
2865 |
unless ($datedue) { |
2894 |
|
2866 |
|
2895 |
my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) or return; |
|
|
2896 |
my $itemtype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'}; |
2867 |
my $itemtype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'}; |
2897 |
|
2868 |
|
2898 |
$datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? |
2869 |
$datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? |
Lines 2904-2910
sub AddRenewal {
Link Here
|
2904 |
# Update the issues record to have the new due date, and a new count |
2875 |
# Update the issues record to have the new due date, and a new count |
2905 |
# of how many times it has been renewed. |
2876 |
# of how many times it has been renewed. |
2906 |
my $renews = $issuedata->{'renewals'} + 1; |
2877 |
my $renews = $issuedata->{'renewals'} + 1; |
2907 |
$sth = $dbh->prepare("UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ? |
2878 |
my $sth = $dbh->prepare("UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ? |
2908 |
WHERE borrowernumber=? |
2879 |
WHERE borrowernumber=? |
2909 |
AND itemnumber=?" |
2880 |
AND itemnumber=?" |
2910 |
); |
2881 |
); |
Lines 2934-2956
sub AddRenewal {
Link Here
|
2934 |
} |
2905 |
} |
2935 |
|
2906 |
|
2936 |
# Send a renewal slip according to checkout alert preferencei |
2907 |
# Send a renewal slip according to checkout alert preferencei |
2937 |
if ( C4::Context->preference('RenewalSendNotice') eq '1') { |
2908 |
if ( C4::Context->preference('RenewalSendNotice') eq '1' ) { |
2938 |
my $borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 ); |
2909 |
$borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 ); |
2939 |
my $circulation_alert = 'C4::ItemCirculationAlertPreference'; |
2910 |
my $circulation_alert = 'C4::ItemCirculationAlertPreference'; |
2940 |
my %conditions = ( |
2911 |
my %conditions = ( |
2941 |
branchcode => $branch, |
2912 |
branchcode => $branch, |
2942 |
categorycode => $borrower->{categorycode}, |
2913 |
categorycode => $borrower->{categorycode}, |
2943 |
item_type => $item->{itype}, |
2914 |
item_type => $item->{itype}, |
2944 |
notification => 'CHECKOUT', |
2915 |
notification => 'CHECKOUT', |
2945 |
); |
2916 |
); |
2946 |
if ($circulation_alert->is_enabled_for(\%conditions)) { |
2917 |
if ( $circulation_alert->is_enabled_for( \%conditions ) ) { |
2947 |
SendCirculationAlert({ |
2918 |
SendCirculationAlert( |
2948 |
type => 'RENEWAL', |
2919 |
{ |
2949 |
item => $item, |
2920 |
type => 'RENEWAL', |
2950 |
borrower => $borrower, |
2921 |
item => $item, |
2951 |
branch => $branch, |
2922 |
borrower => $borrower, |
2952 |
}); |
2923 |
branch => $branch, |
2953 |
} |
2924 |
} |
|
|
2925 |
); |
2926 |
} |
2954 |
} |
2927 |
} |
2955 |
|
2928 |
|
2956 |
# Remove any OVERDUES related debarment if the borrower has no overdues |
2929 |
# Remove any OVERDUES related debarment if the borrower has no overdues |
Lines 4095-4100
sub GetTopIssues {
Link Here
|
4095 |
return @$rows; |
4068 |
return @$rows; |
4096 |
} |
4069 |
} |
4097 |
|
4070 |
|
|
|
4071 |
sub _CalculateAndUpdateFine { |
4072 |
my ($params) = @_; |
4073 |
|
4074 |
my $borrower = $params->{borrower}; |
4075 |
my $item = $params->{item}; |
4076 |
my $issue = $params->{issue}; |
4077 |
my $return_date = $params->{return_date}; |
4078 |
|
4079 |
unless ($borrower) { carp "No borrower passed in!" && return; } |
4080 |
unless ($item) { carp "No item passed in!" && return; } |
4081 |
unless ($issue) { carp "No issue passed in!" && return; } |
4082 |
|
4083 |
my $datedue = $issue->{date_due}; |
4084 |
|
4085 |
# we only need to calculate and change the fines if we want to do that on return |
4086 |
# Should be on for hourly loans |
4087 |
my $control = C4::Context->preference('CircControl'); |
4088 |
my $control_branchcode = |
4089 |
( $control eq 'ItemHomeLibrary' ) ? $item->{homebranch} |
4090 |
: ( $control eq 'PatronLibrary' ) ? $borrower->{branchcode} |
4091 |
: $issue->{branchcode}; |
4092 |
|
4093 |
my $date_returned = $return_date ? dt_from_string($return_date) : dt_from_string(); |
4094 |
|
4095 |
my ( $amount, $type, $unitcounttotal ) = |
4096 |
C4::Overdues::CalcFine( $item, $borrower->{categorycode}, $control_branchcode, $datedue, $date_returned ); |
4097 |
|
4098 |
$type ||= q{}; |
4099 |
|
4100 |
if ( C4::Context->preference('finesMode') eq 'production' ) { |
4101 |
if ( $amount > 0 ) { |
4102 |
C4::Overdues::UpdateFine( $issue->{itemnumber}, $issue->{borrowernumber}, |
4103 |
$amount, $type, output_pref($datedue) ); |
4104 |
} |
4105 |
elsif ($return_date) { |
4106 |
|
4107 |
# Backdated returns may have fines that shouldn't exist, |
4108 |
# so in this case, we need to drop those fines to 0 |
4109 |
|
4110 |
C4::Overdues::UpdateFine( $issue->{itemnumber}, $issue->{borrowernumber}, 0, $type, output_pref($datedue) ); |
4111 |
} |
4112 |
} |
4113 |
} |
4114 |
|
4098 |
__END__ |
4115 |
__END__ |
4099 |
|
4116 |
|
4100 |
=head1 AUTHOR |
4117 |
=head1 AUTHOR |
4101 |
- |
|
|