From fccd02e67be92fb998994635b8eb13c24c072f44 Mon Sep 17 00:00:00 2001 From: hdl Date: Mon, 16 Apr 2007 16:54:33 +0000 Subject: [PATCH] Adding Finerules script. It tears issuingrules script into two. + Fixing save button that would bring back to default branch. --- admin/finesrules.pl | 160 ++++++++++++++++++ admin/issuingrules.pl | 41 +---- .../prog/en/admin/finesrules.tmpl | 60 +++++++ .../prog/en/admin/issuingrules.tmpl | 17 +- 4 files changed, 231 insertions(+), 47 deletions(-) create mode 100755 admin/finesrules.pl create mode 100644 koha-tmpl/intranet-tmpl/prog/en/admin/finesrules.tmpl diff --git a/admin/finesrules.pl b/admin/finesrules.pl new file mode 100755 index 0000000000..8a7c3a24dd --- /dev/null +++ b/admin/finesrules.pl @@ -0,0 +1,160 @@ +#!/usr/bin/perl + +# Copyright 2000-2002 Katipo Communications +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +use CGI; +use C4::Context; +use C4::Output; + +use C4::Auth; +use C4::Output; +use C4::Koha; +use C4::Interface::CGI::Output; +use C4::Branch; # GetBranches + +my $input = new CGI; +my $dbh = C4::Context->dbh; + +my $type=$input->param('type'); +my $branch = $input->param('branch'); +$branch="" unless $branch; +my $op = $input->param('op'); + +# my $flagsrequired; +# $flagsrequired->{circulation}=1; +my ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "admin/finesrules.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {parameters => 1}, + debug => 1, + }); +# save the values entered +if ($op eq 'save') { + my @names=$input->param(); + my $sth_search = $dbh->prepare("select count(*) as total from issuingrules where branchcode=? and categorycode=? and itemtype=?"); + + my $sth_Finsert = $dbh->prepare("insert into issuingrules (branchcode,categorycode,itemtype,fine,firstremind,chargeperiod) values (?,?,?,?,?,?)"); + my $sth_Fupdate=$dbh->prepare("Update issuingrules set fine=?,firstremind=?,chargeperiod=? where branchcode=? and categorycode=? and itemtype=?"); + my $sth_Fdelete=$dbh->prepare("delete from issuingrules where branchcode=? and categorycode=? and itemtype=? and issuelength=0"); + + foreach my $key (@names){ + # FINES + if ($key =~ /F-(.*)-(.*)\.(.*)/) { + my $br = $1; # branch + my $bor = $2; # borrower category + my $cat = $3; # item type + my $data=$input->param($key); + my ($fine,$firstremind,$chargeperiod)=split(',',$data); + warn "$br $bor $cat $fine $firstremind $chargeperiod"; +# if ($fine >0) { +# $br="*" unless ($br); + $bor="*" unless ($bor); + $cat="*" unless ($cat); + $sth_search->execute($br,$bor,$cat); + my $res = $sth_search->fetchrow_hashref(); + if ($res->{total}) { + $sth_Fupdate->execute($fine,$firstremind,$chargeperiod,$br,$bor,$cat); + } else { + $sth_Finsert->execute($br,$bor,$cat,$fine,$firstremind,$chargeperiod); + } + } + } + +} +my $branches = GetBranches; +my @branchloop; +foreach my $thisbranch (keys %$branches) { + my $selected = 1 if $thisbranch eq $branch; + my %row =(value => $thisbranch, + selected => $selected, + branchname => $branches->{$thisbranch}->{'branchname'}, + ); + push @branchloop, \%row; +} + +my $sth=$dbh->prepare("Select description,categorycode from categories order by description"); +$sth->execute; +my @trow3; +my @title_loop; +# my $i=0; +while (my $data=$sth->fetchrow_hashref){ + my %row = (in_title => $data->{'description'}); + push @title_loop,\%row; + push @trow3,$data->{'categorycode'}; +# $i++; +} + +my %row = (in_title => "*"); +push @title_loop, \%row; +push @trow3,'*'; + +$sth->finish; +$sth=$dbh->prepare("Select description,itemtype from itemtypes order by description"); +$sth->execute; +# $i=0; +my $toggle= 1; +my @row_loop; +my @itemtypes; +while (my $row=$sth->fetchrow_hashref){ + push @itemtypes,\$row; +} +my $line; +$line->{itemtype} = "*"; +$line->{description} = "*"; +push @itemtypes,\$line; + +foreach my $data (@itemtypes) { + my @trow2; + my @cell_loop; + if ( $toggle eq 1 ) { + $toggle = 0; + } else { + $toggle = 1; + } + for (my $i=0;$i<=$#trow3;$i++){ + my $sth2=$dbh->prepare("select * from issuingrules where branchcode=? and categorycode=? and itemtype=?"); + $sth2->execute($branch,$trow3[$i],$$data->{'itemtype'}); + my $dat=$sth2->fetchrow_hashref; + $sth2->finish; + my $fine=$dat->{'fine'}+0; + my $finesvalue; + $finesvalue= "$fine,$dat->{'firstremind'},$dat->{'chargeperiod'}" if $fine+$dat->{'firstremind'}+$dat->{'chargeperiod'}>0; + my %row = (finesname=> "F-$branch-$trow3[$i].$$data->{'itemtype'}", + finesvalue => $finesvalue, + toggle => $toggle, + ); + push @cell_loop,\%row; + } + my %row = (categorycode => $$data->{description}, + cell =>\@cell_loop); + push @row_loop, \%row; +} + +$sth->finish; +$template->param(title => \@title_loop, + row => \@row_loop, + branchloop => \@branchloop, + branch => $branch, + intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), + intranetstylesheet => C4::Context->preference("intranetstylesheet"), + IntranetNav => C4::Context->preference("IntranetNav"), + ); +output_html_with_http_headers $input, $cookie, $template->output; diff --git a/admin/issuingrules.pl b/admin/issuingrules.pl index cf31cb0416..89dd8d2eec 100755 --- a/admin/issuingrules.pl +++ b/admin/issuingrules.pl @@ -51,10 +51,6 @@ if ($op eq 'save') { my @names=$input->param(); my $sth_search = $dbh->prepare("select count(*) as total from issuingrules where branchcode=? and categorycode=? and itemtype=?"); - my $sth_Finsert = $dbh->prepare("insert into issuingrules (branchcode,categorycode,itemtype,fine,firstremind,chargeperiod) values (?,?,?,?,?,?)"); - my $sth_Fupdate=$dbh->prepare("Update issuingrules set fine=?,firstremind=?,chargeperiod=? where branchcode=? and categorycode=? and itemtype=?"); - my $sth_Fdelete=$dbh->prepare("delete from issuingrules where branchcode=? and categorycode=? and itemtype=? and issuelength=0"); - my $sth_Iinsert = $dbh->prepare("insert into issuingrules (branchcode,categorycode,itemtype,maxissueqty,issuelength,rentaldiscount) values (?,?,?,?,?,?)"); my $sth_Iupdate=$dbh->prepare("Update issuingrules set maxissueqty=?, issuelength=?, rentaldiscount=? where branchcode=? and categorycode=? and itemtype=?"); my $sth_Idelete=$dbh->prepare("delete from issuingrules where branchcode=? and categorycode=? and itemtype=? and fine=0"); @@ -76,25 +72,6 @@ if ($op eq 'save') { } # } else { # $sth_Idelete->execute($br,$bor,$cat); -# } - } - # FINES - if ($key =~ /F-(.*)-(.*)\.(.*)/) { - my $br = $1; # branch - my $bor = $2; # borrower category - my $cat = $3; # item type - my $data=$input->param($key); - my ($fine,$firstremind,$chargeperiod)=split(',',$data); -# if ($fine >0) { - $sth_search->execute($br,$bor,$cat); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_Fupdate->execute($fine,$firstremind,$chargeperiod,$br,$bor,$cat); - } else { - $sth_Finsert->execute($br,$bor,$cat,$fine,$firstremind,$chargeperiod); - } -# } else { -# $sth_Fdelete->execute($br,$bor,$cat); # } } } @@ -162,19 +139,11 @@ foreach my $data (@itemtypes) { my $finesvalue; $finesvalue= "$fine,$dat->{'firstremind'},$dat->{'chargeperiod'}" if $fine+$dat->{'firstremind'}+$dat->{'chargeperiod'}>0; my $issuingvalue; -# if ($maxissueqty>0) { - $issuingvalue = "$issuelength,$maxissueqty,$rentaldiscount" if $issuelength+$maxissueqty>0; -# } -# else { -# $issuingvalue = "$issuelength, 5"; -# $maxissueqty = 5; -# } - my %row = (finesname=> "F-$branch-$trow3[$i].$$data->{'itemtype'}", - finesvalue => $finesvalue, - issuingname => "I-$branch-$trow3[$i].$$data->{itemtype}", - issuingvalue => $issuingvalue, - toggle => $toggle, - ); + $issuingvalue = "$issuelength,$maxissueqty,$rentaldiscount" if $issuelength+$maxissueqty>0; + my %row = ( issuingname => "I-$branch-$trow3[$i].$$data->{itemtype}", + issuingvalue => $issuingvalue, + toggle => $toggle, + ); push @cell_loop,\%row; } my %row = (categorycode => $$data->{description}, diff --git a/koha-tmpl/intranet-tmpl/prog/en/admin/finesrules.tmpl b/koha-tmpl/intranet-tmpl/prog/en/admin/finesrules.tmpl new file mode 100644 index 0000000000..ee1b082fa3 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/admin/finesrules.tmpl @@ -0,0 +1,60 @@ + +Koha › System Administration › Issuing Rules + + + + + +

Defining fining rules for default fining rules

+ +
+

HINT for fines

+

Each box needs to be filled in with fine,time to start charging,charging cycle

+

eg 1,7,7 = 1 [USD,EUR,etc] fine after 7 days, every 7 days

+

Fines are calculated by the fines2.pl script, located in misc directory. Ask your administrator to put this script in crontab, after midnight, to have fines calculated every night

+
+
+

Default values

+

If a cell is not filled, the 1st of the following value is searched :

+ + +
+ + + +
+
+ + " /> + + + + + + + + + + + class="highlight"> + " value="" size="6" maxlength="10" /> + + + + +
Defining fines rules for
 
+ + +
+ + diff --git a/koha-tmpl/intranet-tmpl/prog/en/admin/issuingrules.tmpl b/koha-tmpl/intranet-tmpl/prog/en/admin/issuingrules.tmpl index 9ad8e31059..f542142aa5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/admin/issuingrules.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/admin/issuingrules.tmpl @@ -10,13 +10,8 @@

HINT for issues

Each box needs to be filled in with issuelength,maxissues

eq 21,5 enables 5 issues for 21 days

- -
-

HINT for fines

-

Each box needs to be filled in with fine,time to start charging,charging cycle

-

eg 1,7,7 = 1 [USD,EUR,etc] fine after 7 days, every 7 days

-

Fines are calculated by the fines2.pl script, located in misc directory. Ask your administrator to put this script in crontab, after midnight, to have fines calculated every night

- +
+

Default values

If a cell is not filled, the 1st of the following value is searched :

@@ -27,7 +22,7 @@
  • everywhere
  • If nothing is set, default is 21,5 (hardcoded)
  • - +
    + " /> - + class="highlight"> - " value="" size="6" maxlength="10" /> / - " value="" size="6" maxlength="10" /> + " value="" size="6" maxlength="10" /> -- 2.20.1
    Defining issuing rules for
     
    Issue / fine