@@ -, +, @@ and the patron you will check it out to. such that the fine generated would be more than 3.99 --- C4/Overdues.pm | 1 + admin/smart-rules.pl | 78 ++++++++++++++++++-- installer/data/mysql/updatedatabase.pl | 9 ++ .../prog/en/modules/admin/smart-rules.tt | 40 +++++++--- 4 files changed, 110 insertions(+), 18 deletions(-) --- a/C4/Overdues.pm +++ a/C4/Overdues.pm @@ -269,6 +269,7 @@ sub CalcFine { # a zero (or null) chargeperiod or negative units_minus_grace value means no charge. } $amount = $data->{overduefinescap} if $data->{overduefinescap} && $amount > $data->{overduefinescap}; + $amount = $item->{'replacementprice'} if ( $data->{cap_fine_to_replacement_price} && $item->{'replacementprice'} && $amount > $item->{'replacementprice'} ); $debug and warn sprintf("CalcFine returning (%s, %s, %s, %s)", $amount, $data->{'chargename'}, $units_minus_grace, $chargeable_units); return ($amount, $data->{'chargename'}, $units_minus_grace, $chargeable_units); # FIXME: chargename is NEVER populated anywhere. --- a/admin/smart-rules.pl +++ a/admin/smart-rules.pl @@ -101,8 +101,52 @@ elsif ($op eq 'delete-branch-item') { # save the values entered elsif ($op eq 'add') { my $sth_search = $dbh->prepare('SELECT COUNT(*) AS total FROM issuingrules WHERE branchcode=? AND categorycode=? AND itemtype=?'); - my $sth_insert = $dbh->prepare('INSERT INTO issuingrules (branchcode, categorycode, itemtype, maxissueqty, renewalsallowed, renewalperiod, reservesallowed, issuelength, lengthunit, hardduedate, hardduedatecompare, fine, finedays, firstremind, chargeperiod,rentaldiscount, overduefinescap) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'); - my $sth_update=$dbh->prepare("UPDATE issuingrules SET fine=?, finedays=?, firstremind=?, chargeperiod=?, maxissueqty=?, renewalsallowed=?, renewalperiod=?, reservesallowed=?, issuelength=?, lengthunit = ?, hardduedate=?, hardduedatecompare=?, rentaldiscount=?, overduefinescap=? WHERE branchcode=? AND categorycode=? AND itemtype=?"); + + my $sth_insert = $dbh->prepare(' + INSERT INTO issuingrules ( + branchcode, + categorycode, + itemtype, + maxissueqty, + renewalsallowed, + renewalperiod, + reservesallowed, + issuelength, + lengthunit, + hardduedate, + hardduedatecompare, + fine, + finedays, + firstremind, + chargeperiod, + rentaldiscount, + overduefinescap, + cap_fine_to_replacement_price + ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) + '); + + my $sth_update=$dbh->prepare(' + UPDATE issuingrules + SET + fine = ?, + finedays = ?, + firstremind = ?, + chargeperiod = ?, + maxissueqty = ?, + renewalsallowed = ?, + renewalperiod = ?, + reservesallowed = ?, + issuelength = ?, + lengthunit = ?, + hardduedate = ?, + hardduedatecompare = ?, + rentaldiscount = ?, + overduefinescap = ?, + cap_fine_to_replacement_price = ? + WHERE branchcode=? + AND categorycode=? + AND itemtype=? + '); my $br = $branch; # branch my $bor = $input->param('categorycode'); # borrower category @@ -124,14 +168,36 @@ elsif ($op eq 'add') { my $hardduedatecompare = $input->param('hardduedatecompare'); my $rentaldiscount = $input->param('rentaldiscount'); my $overduefinescap = $input->param('overduefinescap') || undef; + my $cap_fine_to_replacement_price = $input->param('cap_fine_to_replacement_price') eq 'on'; $debug and warn "Adding $br, $bor, $cat, $fine, $maxissueqty"; $sth_search->execute($br,$bor,$cat); my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($fine, $finedays,$firstremind, $chargeperiod, $maxissueqty, $renewalsallowed, $renewalperiod, $reservesallowed, $issuelength,$lengthunit, $hardduedate,$hardduedatecompare,$rentaldiscount,$overduefinescap, $br,$bor,$cat); - } else { - $sth_insert->execute($br,$bor,$cat,$maxissueqty,$renewalsallowed, $renewalperiod, $reservesallowed,$issuelength,$lengthunit,$hardduedate,$hardduedatecompare,$fine,$finedays,$firstremind,$chargeperiod,$rentaldiscount,$overduefinescap); + if ( $res->{total} ) { + $sth_update->execute( + $fine, $finedays, + $firstremind, $chargeperiod, + $maxissueqty, $renewalsallowed, + $renewalperiod, $reservesallowed, + $issuelength, $lengthunit, + $hardduedate, $hardduedatecompare, + $rentaldiscount, $overduefinescap, + $cap_fine_to_replacement_price, $br, + $bor, $cat + ); + } + else { + $sth_insert->execute( + $br, $bor, + $cat, $maxissueqty, + $renewalsallowed, $renewalperiod, + $reservesallowed, $issuelength, + $lengthunit, $hardduedate, + $hardduedatecompare, $fine, + $finedays, $firstremind, + $chargeperiod, $rentaldiscount, + $overduefinescap, $cap_fine_to_replacement_price + ); } } elsif ($op eq "set-branch-defaults") { --- a/installer/data/mysql/updatedatabase.pl +++ a/installer/data/mysql/updatedatabase.pl @@ -6984,6 +6984,15 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ( } +$DBversion = "3.13.00.XXX"; +if ( CheckVersion($DBversion) ) { + $dbh->do(q{ + ALTER TABLE issuingrules ADD cap_fine_to_replacement_price BOOLEAN NOT NULL DEFAULT '0' AFTER overduefinescap + }); + print "Upgrade to $DBversion done (Bug 9129 - Add the ability to set the maximum fine for an item to its replacement price )\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt @@ -16,6 +16,9 @@ function clear_edit(){ $(this).val(""); $(this).removeAttr("disabled"); } + if ( type == "checkbox" ) { + $(this).attr('checked', false); + } }); $(edit_row).find("select").removeAttr("disabled"); $(edit_row).find("select option:first").attr("selected", "selected"); @@ -38,7 +41,22 @@ $(document).ready(function() { itm = $(this).text(); itm = itm.replace(/^\s*|\s*$/g,''); var current_column = $("#edit_row td:eq("+i+")"); - if ( i != 5 ) { + if ( i == 5 ) { + // specific processing for the Hard due date column + var select_value = $(this).find("input[type='hidden'][name='hardduedatecomparebackup']").val(); + var input_value = ''; + if (typeof select_value === 'undefined'){ + select_value = '-1'; + }else { + input_value = itm.split(' ')[1]; + } + $(current_column).find("input[type='text']").val(input_value); + $(current_column).find("select").val(select_value); + } else if ( i == 10 ) { + // specific processing for cap_fine_to_replacement_price + var cap_fine_to_replacement_price = $(this).find("input[type='checkbox']"); + $('#cap_fine_to_replacement_price').attr('checked', cap_fine_to_replacement_price.is(':checked') ); + } else { $(current_column).find("input[type='text']").val(itm); // select the corresponding option $(current_column).find("select option").each(function(){ @@ -64,17 +82,6 @@ $(document).ready(function() { $(current_column).find("input[type='text']").val(""); } } - } else { - // specific processing for the Hard due date column - var select_value = $(this).find("input[type='hidden'][name='hardduedatecomparebackup']").val(); - var input_value = ''; - if (typeof select_value === 'undefined'){ - select_value = '-1'; - }else { - input_value = itm.split(' ')[1]; - } - $(current_column).find("input[type='text']").val(input_value); - $(current_column).find("select").val(select_value); } }); $("#default-circulation-rules tr:last td:eq(0) select").attr('disabled', 'disabled'); @@ -147,6 +154,7 @@ for="tobranch">Clone these rules to: Clone these rules to: + + [% IF rule.cap_fine_to_replacement_price %] + + [% ELSE %] + + [% END %] + [% rule.finedays %] [% rule.renewalsallowed %] [% rule.renewalperiod %] @@ -253,6 +268,7 @@ for="tobranch">Clone these rules to: + --