From 5b2a419df955e2dd3694a0b0062711e72c81294a Mon Sep 17 00:00:00 2001 From: Jesse Weaver <pianohacker@gmail.com> Date: Tue, 17 Oct 2017 16:58:07 -0600 Subject: [PATCH] Bug 15522: Remove old circulation rules interface --- admin/clone-rules.pl | 102 --- admin/smart-rules.pl | 602 ------------- .../intranet-tmpl/prog/en/includes/admin-menu.inc | 2 +- .../prog/en/modules/admin/admin-home.tt | 4 +- .../prog/en/modules/admin/clone-rules.tt | 73 -- .../intranet-tmpl/prog/en/modules/admin/policy.tt | 4 +- .../prog/en/modules/admin/smart-rules.tt | 946 --------------------- .../intranet-tmpl/prog/js/src/admin/policy/app.js | 2 +- 8 files changed, 6 insertions(+), 1729 deletions(-) delete mode 100755 admin/clone-rules.pl delete mode 100755 admin/smart-rules.pl delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tt delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt diff --git a/admin/clone-rules.pl b/admin/clone-rules.pl deleted file mode 100755 index 9fd330fa71..0000000000 --- a/admin/clone-rules.pl +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/perl -# vim: et ts=4 sw=4 -# Copyright BibLibre -# -# 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 3 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, see <http://www.gnu.org/licenses>. - - -# This script clones issuing rules from a library to another -# parameters : -# - frombranch : the branch we want to clone issuing rules from -# - tobranch : the branch we want to clone issuing rules to -# -# The script can be called with one of the parameters, both or none - -use strict; -#use warnings; FIXME - Bug 2505 -use CGI qw ( -utf8 ); -use C4::Context; -use C4::Output; -use C4::Auth; -use C4::Koha; -use C4::Debug; - -my $input = new CGI; -my $dbh = C4::Context->dbh; - -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "admin/clone-rules.tt", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {parameters => 'parameters_remaining_permissions'}, - debug => 1, - }); - -my $frombranch = $input->param("frombranch"); -my $tobranch = $input->param("tobranch"); - -$template->param(frombranch => $frombranch) if ($frombranch); -$template->param(tobranch => $tobranch) if ($tobranch); - -if ($frombranch && $tobranch) { - - my $error; - - # First, we create a temporary table with the rules we want to clone - my $query = "CREATE TEMPORARY TABLE tmpissuingrules ENGINE=memory SELECT * FROM issuingrules WHERE branchcode=?"; - my $sth = $dbh->prepare($query); - my $res = $sth->execute($frombranch); - $error = 1 unless ($res); - - if (!$error) { - # We modify these rules according to the new branchcode - $query = "UPDATE tmpissuingrules SET branchcode=? WHERE branchcode=?"; - $sth = $dbh->prepare($query); - $res = $sth->execute($tobranch, $frombranch); - $error = 1 unless ($res); - } - - if (!$error) { - # We delete the rules for the existing branchode - $query = "DELETE FROM issuingrules WHERE branchcode=?"; - $sth = $dbh->prepare($query); - $res = $sth->execute($tobranch); - $error = 1 unless ($res); - } - - - if (!$error) { - # We insert the new rules from our temporary table - $query = "INSERT INTO issuingrules SELECT * FROM tmpissuingrules WHERE branchcode=?"; - $sth = $dbh->prepare($query); - $res = $sth->execute($tobranch); - $error = 1 unless ($res); - } - - # Finally, we delete our temporary table - $query = "DROP TABLE tmpissuingrules"; - $sth = $dbh->prepare($query); - $res = $sth->execute(); - - $template->param(result => "1"); - $template->param(error => $error); -} - - - -output_html_with_http_headers $input, $cookie, $template->output; - diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl deleted file mode 100755 index 06dafbba67..0000000000 --- a/admin/smart-rules.pl +++ /dev/null @@ -1,602 +0,0 @@ -#!/usr/bin/perl -# Copyright 2000-2002 Katipo Communications -# copyright 2010 BibLibre -# -# 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 3 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, see <http://www.gnu.org/licenses>. - -use strict; -use warnings; -use CGI qw ( -utf8 ); -use C4::Context; -use C4::Output; -use C4::Auth; -use C4::Koha; -use C4::Debug; -use Koha::DateUtils; -use Koha::Database; -use Koha::Logger; -use Koha::RefundLostItemFeeRules; -use Koha::Libraries; -use Koha::CirculationRules; -use Koha::Patron::Categories; -use Koha::Patrons; - -my $input = CGI->new; -my $dbh = C4::Context->dbh; - -# my $flagsrequired; -# $flagsrequired->{circulation}=1; -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "admin/smart-rules.tt", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {parameters => 'manage_circ_rules'}, - debug => 1, - }); - -my $type=$input->param('type'); - -my $branch = $input->param('branch'); -unless ( $branch ) { - if ( C4::Context->preference('DefaultToLoggedInLibraryCircRules') ) { - $branch = Koha::Libraries->search->count() == 1 ? undef : C4::Context::mybranch(); - } - else { - $branch = C4::Context::only_my_library() ? ( C4::Context::mybranch() || '*' ) : '*'; - } -} - -my $uid = Koha::Patrons->find( $loggedinuser )->userid; -my $restricted_to_own_library = $uid && haspermission( $uid, { parameters => 'manage_circ_rules_restricted' }, { no_inherit => 1 } ); -$template->param( restricted_to_own_library => $restricted_to_own_library ); -$branch = C4::Context::mybranch() if $restricted_to_own_library; - -$branch = '*' if $branch eq 'NO_LIBRARY_SET'; - -my $op = $input->param('op') || q{}; -my $language = C4::Languages::getlanguage(); - -if ($op eq 'delete') { - my $itemtype = $input->param('itemtype'); - my $categorycode = $input->param('categorycode'); - $debug and warn "deleting $1 $2 $branch"; - - Koha::CirculationRules->set_rules( - { - categorycode => $categorycode eq '*' ? undef : $categorycode, - branchcode => $branch eq '*' ? undef : $branch, - itemtype => $itemtype eq '*' ? undef : $itemtype, - rules => { - restrictedtype => undef, - rentaldiscount => undef, - fine => undef, - finedays => undef, - maxsuspensiondays => undef, - firstremind => undef, - chargeperiod => undef, - chargeperiod_charge_at => undef, - accountsent => undef, - issuelength => undef, - lengthunit => undef, - hardduedate => undef, - hardduedatecompare => undef, - renewalsallowed => undef, - renewalperiod => undef, - norenewalbefore => undef, - auto_renew => undef, - no_auto_renewal_after => undef, - no_auto_renewal_after_hard_limit => undef, - reservesallowed => undef, - holds_per_record => undef, - overduefinescap => undef, - cap_fine_to_replacement_price => undef, - onshelfholds => undef, - opacitemholds => undef, - article_requests => undef, - } - } - ); -} -elsif ($op eq 'delete-branch-cat') { - my $categorycode = $input->param('categorycode'); - if ($branch eq "*") { - if ($categorycode eq "*") { - Koha::CirculationRules->set_rules( - { - branchcode => undef, - categorycode => undef, - rules => { - patron_maxissueqty => undef, - patron_maxonsiteissueqty => undef, - } - } - ); - Koha::CirculationRules->set_rules( - { - branchcode => undef, - itemtype => undef, - rules => { - holdallowed => undef, - hold_fulfillment_policy => undef, - returnbranch => undef, - } - } - ); - } else { - Koha::CirculationRules->set_rules( - { - categorycode => $categorycode, - branchcode => undef, - rules => { - max_holds => undef, - patron_maxissueqty => undef, - patron_maxonsiteissueqty => undef, - } - } - ); - } - } elsif ($categorycode eq "*") { - Koha::CirculationRules->set_rules( - { - branchcode => $branch, - categorycode => undef, - rules => { - patron_maxissueqty => undef, - patron_maxonsiteissueqty => undef, - } - } - ); - Koha::CirculationRules->set_rules( - { - branchcode => $branch, - rules => { - holdallowed => undef, - hold_fulfillment_policy => undef, - returnbranch => undef, - } - } - ); - } else { - Koha::CirculationRules->set_rules( - { - categorycode => $categorycode, - branchcode => $branch, - rules => { - max_holds => undef, - patron_maxissueqty => undef, - patron_maxonsiteissueqty => undef, - } - } - ); - } -} -elsif ($op eq 'delete-branch-item') { - my $itemtype = $input->param('itemtype'); - if ($branch eq "*") { - if ($itemtype eq "*") { - Koha::CirculationRules->set_rules( - { - branchcode => undef, - itemtype => undef, - rules => { - holdallowed => undef, - hold_fulfillment_policy => undef, - returnbranch => undef, - } - } - ); - } else { - Koha::CirculationRules->set_rules( - { - branchcode => undef, - itemtype => $itemtype, - rules => { - holdallowed => undef, - hold_fulfillment_policy => undef, - returnbranch => undef, - } - } - ); - } - } elsif ($itemtype eq "*") { - Koha::CirculationRules->set_rules( - { - branchcode => $branch, - itemtype => undef, - rules => { - holdallowed => undef, - hold_fulfillment_policy => undef, - returnbranch => undef, - } - } - ); - } else { - Koha::CirculationRules->set_rules( - { - branchcode => $branch, - itemtype => $itemtype, - rules => { - holdallowed => undef, - hold_fulfillment_policy => undef, - returnbranch => undef, - } - } - ); - } -} -# save the values entered -elsif ($op eq 'add') { - my $br = $branch; # branch - my $bor = $input->param('categorycode'); # borrower category - my $itemtype = $input->param('itemtype'); # item type - my $fine = $input->param('fine'); - my $finedays = $input->param('finedays'); - my $maxsuspensiondays = $input->param('maxsuspensiondays'); - $maxsuspensiondays = '' if $maxsuspensiondays eq q||; - my $firstremind = $input->param('firstremind'); - my $chargeperiod = $input->param('chargeperiod'); - my $chargeperiod_charge_at = $input->param('chargeperiod_charge_at'); - my $maxissueqty = $input->param('maxissueqty'); - my $maxonsiteissueqty = $input->param('maxonsiteissueqty'); - my $renewalsallowed = $input->param('renewalsallowed'); - my $renewalperiod = $input->param('renewalperiod'); - my $norenewalbefore = $input->param('norenewalbefore'); - $norenewalbefore = '' if $norenewalbefore =~ /^\s*$/; - my $auto_renew = $input->param('auto_renew') eq 'yes' ? 1 : 0; - my $no_auto_renewal_after = $input->param('no_auto_renewal_after'); - $no_auto_renewal_after = '' if $no_auto_renewal_after =~ /^\s*$/; - my $no_auto_renewal_after_hard_limit = $input->param('no_auto_renewal_after_hard_limit') || ''; - $no_auto_renewal_after_hard_limit = eval { dt_from_string( $input->param('no_auto_renewal_after_hard_limit') ) } if ( $no_auto_renewal_after_hard_limit ); - $no_auto_renewal_after_hard_limit = output_pref( { dt => $no_auto_renewal_after_hard_limit, dateonly => 1, dateformat => 'iso' } ) if ( $no_auto_renewal_after_hard_limit ); - my $reservesallowed = $input->param('reservesallowed'); - my $holds_per_record = $input->param('holds_per_record'); - my $onshelfholds = $input->param('onshelfholds') || 0; - $maxissueqty =~ s/\s//g; - $maxissueqty = '' if $maxissueqty !~ /^\d+/; - $maxonsiteissueqty =~ s/\s//g; - $maxonsiteissueqty = '' if $maxonsiteissueqty !~ /^\d+/; - my $issuelength = $input->param('issuelength'); - $issuelength = $issuelength eq q{} ? undef : $issuelength; - my $lengthunit = $input->param('lengthunit'); - my $hardduedate = $input->param('hardduedate') || undef; - $hardduedate = eval { dt_from_string( $input->param('hardduedate') ) } if ( $hardduedate ); - $hardduedate = output_pref( { dt => $hardduedate, dateonly => 1, dateformat => 'iso' } ) if ( $hardduedate ); - my $hardduedatecompare = $input->param('hardduedatecompare'); - my $rentaldiscount = $input->param('rentaldiscount'); - my $opacitemholds = $input->param('opacitemholds') || 0; - my $article_requests = $input->param('article_requests') || 'no'; - my $overduefinescap = $input->param('overduefinescap') || ''; - my $cap_fine_to_replacement_price = $input->param('cap_fine_to_replacement_price') eq 'on'; - warn "Adding $br, $bor, $itemtype, $fine, $maxissueqty, $maxonsiteissueqty, $cap_fine_to_replacement_price"; - - my $params = { - fine => $fine, - finedays => $finedays, - maxsuspensiondays => $maxsuspensiondays, - firstremind => $firstremind, - chargeperiod => $chargeperiod, - chargeperiod_charge_at => $chargeperiod_charge_at, - renewalsallowed => $renewalsallowed, - renewalperiod => $renewalperiod, - norenewalbefore => $norenewalbefore, - auto_renew => $auto_renew, - no_auto_renewal_after => $no_auto_renewal_after, - no_auto_renewal_after_hard_limit => $no_auto_renewal_after_hard_limit, - reservesallowed => $reservesallowed, - holds_per_record => $holds_per_record, - issuelength => $issuelength, - lengthunit => $lengthunit, - hardduedate => $hardduedate, - hardduedatecompare => $hardduedatecompare, - rentaldiscount => $rentaldiscount, - onshelfholds => $onshelfholds, - opacitemholds => $opacitemholds, - overduefinescap => $overduefinescap, - cap_fine_to_replacement_price => $cap_fine_to_replacement_price, - article_requests => $article_requests, - maxissueqty => $maxissueqty, - maxonsiteissueqty => $maxonsiteissueqty, - }; - - Koha::CirculationRules->set_rules( - { - categorycode => $bor eq '*' ? undef : $bor, - itemtype => $itemtype eq '*' ? undef : $itemtype, - branchcode => $br eq '*' ? undef : $br, - rules => { - %$params, - } - } - ); - -} -elsif ($op eq "set-branch-defaults") { - my $categorycode = $input->param('categorycode'); - my $patron_maxissueqty = $input->param('patron_maxissueqty'); - my $patron_maxonsiteissueqty = $input->param('patron_maxonsiteissueqty'); - my $holdallowed = $input->param('holdallowed'); - my $hold_fulfillment_policy = $input->param('hold_fulfillment_policy'); - my $returnbranch = $input->param('returnbranch'); - my $max_holds = $input->param('max_holds'); - $patron_maxissueqty =~ s/\s//g; - $patron_maxissueqty = '' if $patron_maxissueqty !~ /^\d+/; - $patron_maxonsiteissueqty =~ s/\s//g; - $patron_maxonsiteissueqty = '' if $patron_maxonsiteissueqty !~ /^\d+/; - $holdallowed =~ s/\s//g; - $holdallowed = undef if $holdallowed !~ /^\d+/; - $max_holds =~ s/\s//g; - $max_holds = '' if $max_holds !~ /^\d+/; - - if ($branch eq "*") { - Koha::CirculationRules->set_rules( - { - itemtype => undef, - branchcode => undef, - rules => { - holdallowed => $holdallowed, - hold_fulfillment_policy => $hold_fulfillment_policy, - returnbranch => $returnbranch, - } - } - ); - Koha::CirculationRules->set_rules( - { - categorycode => undef, - branchcode => undef, - rules => { - patron_maxissueqty => $patron_maxissueqty, - patron_maxonsiteissueqty => $patron_maxonsiteissueqty, - } - } - ); - } else { - Koha::CirculationRules->set_rules( - { - itemtype => undef, - branchcode => $branch, - rules => { - holdallowed => $holdallowed, - hold_fulfillment_policy => $hold_fulfillment_policy, - returnbranch => $returnbranch, - } - } - ); - Koha::CirculationRules->set_rules( - { - categorycode => undef, - branchcode => $branch, - rules => { - patron_maxissueqty => $patron_maxissueqty, - patron_maxonsiteissueqty => $patron_maxonsiteissueqty, - } - } - ); - } - Koha::CirculationRules->set_rule( - { - branchcode => $branch, - categorycode => '*', - itemtype => undef, - rule_name => 'max_holds', - rule_value => $max_holds, - } - ); -} -elsif ($op eq "add-branch-cat") { - my $categorycode = $input->param('categorycode'); - my $patron_maxissueqty = $input->param('patron_maxissueqty'); - my $patron_maxonsiteissueqty = $input->param('patron_maxonsiteissueqty'); - my $max_holds = $input->param('max_holds'); - $patron_maxissueqty =~ s/\s//g; - $patron_maxissueqty = '' if $patron_maxissueqty !~ /^\d+/; - $patron_maxonsiteissueqty =~ s/\s//g; - $patron_maxonsiteissueqty = '' if $patron_maxonsiteissueqty !~ /^\d+/; - $max_holds =~ s/\s//g; - $max_holds = '' if $max_holds !~ /^\d+/; - - if ($branch eq "*") { - if ($categorycode eq "*") { - Koha::CirculationRules->set_rules( - { - categorycode => undef, - branchcode => undef, - rules => { - max_holds => $max_holds, - patron_maxissueqty => $patron_maxissueqty, - patron_maxonsiteissueqty => $patron_maxonsiteissueqty, - } - } - ); - } else { - Koha::CirculationRules->set_rules( - { - categorycode => $categorycode, - branchcode => undef, - rules => { - max_holds => $max_holds, - patron_maxissueqty => $patron_maxissueqty, - patron_maxonsiteissueqty => $patron_maxonsiteissueqty, - } - } - ); - } - } elsif ($categorycode eq "*") { - Koha::CirculationRules->set_rules( - { - categorycode => undef, - branchcode => $branch, - rules => { - max_holds => $max_holds, - patron_maxissueqty => $patron_maxissueqty, - patron_maxonsiteissueqty => $patron_maxonsiteissueqty, - } - } - ); - } else { - Koha::CirculationRules->set_rules( - { - categorycode => $categorycode, - branchcode => $branch, - rules => { - max_holds => $max_holds, - patron_maxissueqty => $patron_maxissueqty, - patron_maxonsiteissueqty => $patron_maxonsiteissueqty, - } - } - ); - } -} -elsif ($op eq "add-branch-item") { - my $itemtype = $input->param('itemtype'); - my $holdallowed = $input->param('holdallowed'); - my $hold_fulfillment_policy = $input->param('hold_fulfillment_policy'); - my $returnbranch = $input->param('returnbranch'); - - $holdallowed =~ s/\s//g; - $holdallowed = undef if $holdallowed !~ /^\d+/; - - if ($branch eq "*") { - if ($itemtype eq "*") { - Koha::CirculationRules->set_rules( - { - itemtype => undef, - branchcode => undef, - rules => { - holdallowed => $holdallowed, - hold_fulfillment_policy => $hold_fulfillment_policy, - returnbranch => $returnbranch, - } - } - ); - } else { - Koha::CirculationRules->set_rules( - { - itemtype => $itemtype, - branchcode => undef, - rules => { - holdallowed => $holdallowed, - hold_fulfillment_policy => $hold_fulfillment_policy, - returnbranch => $returnbranch, - } - } - ); - } - } elsif ($itemtype eq "*") { - Koha::CirculationRules->set_rules( - { - itemtype => undef, - branchcode => $branch, - rules => { - holdallowed => $holdallowed, - hold_fulfillment_policy => $hold_fulfillment_policy, - returnbranch => $returnbranch, - } - } - ); - } else { - Koha::CirculationRules->set_rules( - { - itemtype => $itemtype, - branchcode => $branch, - rules => { - holdallowed => $holdallowed, - hold_fulfillment_policy => $hold_fulfillment_policy, - returnbranch => $returnbranch, - } - } - ); - } -} -elsif ( $op eq 'mod-refund-lost-item-fee-rule' ) { - - my $refund = $input->param('refund'); - - if ( $refund eq '*' ) { - if ( $branch ne '*' ) { - # only do something for $refund eq '*' if branch-specific - Koha::CirculationRules->set_rules( - { - branchcode => $branch, - rules => { - refund => undef - } - } - ); - } - } else { - Koha::CirculationRules->set_rules( - { - branchcode => undef, - rules => { - refund => $refund - } - } - ); - } -} - -my $refundLostItemFeeRule = Koha::RefundLostItemFeeRules->find({ branchcode => $branch eq '*' ? undef : $branch }); -$template->param( - refundLostItemFeeRule => $refundLostItemFeeRule, - defaultRefundRule => Koha::RefundLostItemFeeRules->_default_rule -); - -my $patron_categories = Koha::Patron::Categories->search({}, { order_by => ['description'] }); - -my $itemtypes = Koha::ItemTypes->search_with_localization; - -$template->param(show_branch_cat_rule_form => 1); - -$template->param( - patron_categories => $patron_categories, - itemtypeloop => $itemtypes, - humanbranch => ( $branch ne '*' ? $branch : undef ), - current_branch => $branch, -); -output_html_with_http_headers $input, $cookie, $template->output; - -exit 0; - -# sort by patron category, then item type, putting -# default entries at the bottom -sub by_category_and_itemtype { - unless (by_category($a, $b)) { - return by_itemtype($a, $b); - } -} - -sub by_category { - my ($a, $b) = @_; - if ($a->{'default_humancategorycode'}) { - return ($b->{'default_humancategorycode'} ? 0 : 1); - } elsif ($b->{'default_humancategorycode'}) { - return -1; - } else { - return $a->{'humancategorycode'} cmp $b->{'humancategorycode'}; - } -} - -sub by_itemtype { - my ($a, $b) = @_; - if ($a->{default_translated_description}) { - return ($b->{'default_translated_description'} ? 0 : 1); - } elsif ($b->{'default_translated_description'}) { - return -1; - } else { - return lc $a->{'translated_description'} cmp lc $b->{'translated_description'}; - } -} diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc index 5a08564ca1..b80cfebe96 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc @@ -17,7 +17,7 @@ <h5>Patrons and circulation</h5> <ul> <li><a href="/cgi-bin/koha/admin/categories.pl">Patron categories</a></li> - <li><a href="/cgi-bin/koha/admin/smart-rules.pl">Circulation and fines rules</a></li> + <li><a href="/cgi-bin/koha/admin/policy.pl">Circulation, fines, and holds rules</a></li> <li><a href="/cgi-bin/koha/admin/patron-attr-types.pl">Patron attribute types</a></li> <li><a href="/cgi-bin/koha/admin/branch_transfer_limits.pl">Library transfer limits</a></li> <li><a href="/cgi-bin/koha/admin/transport-cost-matrix.pl">Transport cost matrix</a></li> diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt index dd29587e97..cb4229ba25 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt @@ -43,8 +43,8 @@ <dt><a href="/cgi-bin/koha/admin/categories.pl">Patron categories</a></dt> <dd>Define patron categories.</dd> [% IF CAN_user_parameters_manage_circ_rules %] - <dt><a href="/cgi-bin/koha/admin/smart-rules.pl">Circulation and fines rules</a></dt> - <dd>Define circulation and fines rules for combinations of libraries, patron categories, and item types</dd> + <dt><a href="/cgi-bin/koha/admin/policy.pl">Circulation, fines, and holds rules</a></dt> + <dd>Define circulation, fines, and holds rules for combinations of libraries, patron categories, and item types</dd> [% END %] <dt><a href="/cgi-bin/koha/admin/patron-attr-types.pl">Patron attribute types</a></dt> <dd>Define extended attributes (identifiers and statistical categories) for patron records</dd> diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tt deleted file mode 100644 index f58621aeff..0000000000 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tt +++ /dev/null @@ -1,73 +0,0 @@ -[% USE Branches %] -[% SET footerjs = 1 %] -[% INCLUDE 'doc-head-open.inc' %] -<title>Koha › Administration › Circulation and fine rules › Clone circulation and fine rules</title> -[% INCLUDE 'doc-head-close.inc' %] -</head> -<body id="admin_clone-rules" class="admin"> -[% INCLUDE 'header.inc' %] -[% INCLUDE 'prefs-admin-search.inc' %] - -<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › <a href="/cgi-bin/koha/admin/smart-rules.pl">Circulation and fine rules</a> › Clone circulation and fine rules</div> - -<div id="doc3" class="yui-t1"> - -<div id="bd"> - <div id="yui-main"> - <div class="yui-b"> - <h2>Cloning circulation and fine rules - [% IF frombranch %] from "[% Branches.GetName( frombranch ) %]"[% END %] - [% IF tobranch %] to "[% Branches.GetName( tobranch ) %]"[% END %] - </h2> - - [% IF ( result ) %] - [% IF ( error ) %] - <div class="dialog alert">Cloning of circulation and fine rules failed!</div> - [% ELSE %] - <div class="dialog message"><p>The rules have been cloned.</p></div> - [% END %] - <a href="/cgi-bin/koha/admin/smart-rules.pl">Return to circulation and fine rules</a> - [% ELSE %] - - <p class="help">Use carefully! If the destination library already has circulation and fine rules, they will be deleted without warning!</p> - <form action="/cgi-bin/koha/admin/clone-rules.pl" method="post"> - [% UNLESS ( frombranch ) %] - <fieldset> - <legend>Please choose a library to clone rules from:</legend> - <label for="frombranch">Source library:</label> - <select name="frombranch" id="frombranch"> - <option value="">Default</option> - [% PROCESS options_for_libraries libraries => Branches.all() %] - </select> - [% IF ( tobranch ) %]<input type="hidden" name="tobranch" value="[% tobranch %]" />[% END %] - </fieldset> - [% END %] - - [% UNLESS ( tobranch ) %] - <fieldset> - <legend>Please choose the library to clone the rules to:</legend> - <label for="tobranch">Destination library:</label> - <select name="tobranch" id="tobranch"> - <option value="">Default</option> - [% PROCESS options_for_libraries libraries => Branches.all() %] - </select> - [% IF ( frombranch ) %]<input type="hidden" name="frombranch" value="[% frombranch %]" />[% END %] - </fieldset> - [% END %] - <input type="submit" value="Submit" /> - </form> - - [% END %] - </div> - -</div> -<div class="yui-b"> -[% INCLUDE 'admin-menu.inc' %] -</div> -</div> - -[% MACRO jsinclude BLOCK %] - <script type="text/javascript" src="[% interface %]/[% theme %]/js/admin-menu.js"></script> -[% END %] - -[% INCLUDE 'intranet-bottom.inc' %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/policy.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/policy.tt index ca0717e6e6..e38b1284bf 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/policy.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/policy.tt @@ -9,12 +9,12 @@ [% INCLUDE 'doc-head-close.inc' %] <link rel="stylesheet" href="[% interface %]/[% theme %]/css/admin/policy.css" /> </head> -<body id="admin_smart-rules" class="admin"> +<body id="admin_policy" class="admin"> [% INCLUDE 'header.inc' %] [% INCLUDE 'calendar.inc' %] [% INCLUDE 'prefs-admin-search.inc' %] -<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › Policy</div> +<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › Circulation, fines and holds rules</div> <div id="doc3" class="yui-t1"> diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt deleted file mode 100644 index 37cdf8dba2..0000000000 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ /dev/null @@ -1,946 +0,0 @@ -[% USE KohaDates %] -[% USE Branches %] -[% USE Categories %] -[% USE ItemTypes %] -[% USE CirculationRules %] -[% SET footerjs = 1 %] - -[% SET branchcode = humanbranch || undef %] - -[% SET categorycodes = [] %] -[% FOREACH pc IN patron_categories %] - [% categorycodes.push( pc.id ) %] -[% END %] -[% categorycodes.push(undef) %] - -[% SET itemtypes = [] %] -[% FOREACH i IN itemtypeloop %] - [% itemtypes.push( i.itemtype ) %] -[% END %] -[% itemtypes.push(undef) %] - -[% INCLUDE 'doc-head-open.inc' %] -<title>Koha › Administration › Circulation and fine rules</title> -[% INCLUDE 'doc-head-close.inc' %] -</head> - -<body id="admin_smart-rules" class="admin"> -[% INCLUDE 'header.inc' %] -[% INCLUDE 'prefs-admin-search.inc' %] - -<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › Circulation and fine rules</div> - -<div id="doc3" class="yui-t1"> - -<div id="bd"> - <div id="yui-main"> - <div class="yui-b"> - <h1 class="parameters"> - [% IF humanbranch %] - Defining circulation and fine rules for "[% Branches.GetName( humanbranch ) %]" - [% ELSE %] - Defining circulation and fine rules for all libraries - [% END %] - </h1> - <div class="help"> - <p>The rules are applied from most specific to less specific, using the first found in this order:</p> - <ul> - <li>same library, same patron category, same item type</li> - <li>same library, same patron category, all item types</li> - <li>same library, all patron categories, same item type</li> - <li>same library, all patron categories, all item types</li> - <li>default (all libraries), same patron category, same item type</li> - <li>default (all libraries), same patron category, all item types</li> - <li>default (all libraries), all patron categories, same item type</li> - <li>default (all libraries), all patron categories, all item types</li> - </ul> - <p>To modify a rule, create a new one with the same patron category and item type.</p> - </div> - <div> - [% UNLESS restricted_to_own_library %] - <form method="get" action="/cgi-bin/koha/admin/smart-rules.pl" id="selectlibrary"> - Select a library : - <select name="branch" id="branch" style="width:20em;"> - <option value="*">Standard rules for all libraries</option> - [% PROCESS options_for_libraries libraries => Branches.all( selected => current_branch, unfiltered => 1 ) %] - </select> - </form> - [% IF ( definedbranch ) %] - <form action="/cgi-bin/koha/admin/clone-rules.pl" method="post"> - <label for="tobranch"><strong>Clone these rules to:</strong></label> - <input type="hidden" name="frombranch" value="[% current_branch %]" /> - <select name="tobranch" id="tobranch"> - [% PROCESS options_for_libraries libraries => Branches.all( unfiltered => 1 ) %] - </select> - <input type="submit" id="clone_rules" value="Clone" /> - </form> - [% END %] - [% END %] - - <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> - <input type="hidden" name="op" value="add" /> - <input type="hidden" name="branch" value="[% current_branch %]"/> - <table id="default-circulation-rules"> - <thead> - <tr> - <th>Patron category</th> - <th>Item type</th> - <th>Actions</th> - <th>Current checkouts allowed</th> - <th>Current on-site checkouts allowed</th> - <th>Loan period</th> - <th>Unit</th> - <th>Hard due date</th> - <th>Fine amount</th> - <th>Fine charging interval</th> - <th>When to charge</th> - <th>Fine grace period</th> - <th>Overdue fines cap (amount)</th> - <th>Cap fine at replacement price</th> - <th>Suspension in days (day)</th> - <th>Max. suspension duration (day)</th> - <th>Renewals allowed (count)</th> - <th>Renewal period</th> - <th>No renewal before</th> - <th>Automatic renewal</th> - <th>No automatic renewal after</th> - <th>No automatic renewal after (hard limit)</th> - <th>Holds allowed (count)</th> - <th>Holds per record (count)</th> - <th>On shelf holds allowed</th> - <th>Item level holds</th> - <th>Article requests</th> - <th>Rental discount (%)</th> - <th>Actions</th> - </tr> - </thead> - <tbody> - [% SET row_count = 0 %] - [% FOREACH c IN categorycodes %] - [% FOREACH i IN itemtypes %] - [% SET maxissueqty = CirculationRules.Get( branchcode, c, i, 'maxissueqty' ) %] - [% SET maxonsiteissueqty = CirculationRules.Get( branchcode, c, i, 'maxonsiteissueqty' ) %] - [% SET issuelength = CirculationRules.Get( branchcode, c, i, 'issuelength' ) %] - [% SET lengthunit = CirculationRules.Get( branchcode, c, i, 'lengthunit' ) %] - [% SET hardduedate = CirculationRules.Get( branchcode, c, i, 'hardduedate' ) %] - [% SET hardduedatecompare = CirculationRules.Get( branchcode, c, i, 'hardduedatecompare' ) %] - [% SET fine = CirculationRules.Get( branchcode, c, i, 'fine' ) %] - [% SET chargeperiod = CirculationRules.Get( branchcode, c, i, 'chargeperiod' ) %] - [% SET chargeperiod_charge_at = CirculationRules.Get( branchcode, c, i, 'chargeperiod_charge_at' ) %] - [% SET firstremind = CirculationRules.Get( branchcode, c, i, 'firstremind' ) %] - [% SET overduefinescap = CirculationRules.Get( branchcode, c, i, 'overduefinescap' ) %] - [% SET cap_fine_to_replacement_price = CirculationRules.Get( branchcode, c, i, 'cap_fine_to_replacement_price' ) %] - [% SET finedays = CirculationRules.Get( branchcode, c, i, 'finedays' ) %] - [% SET maxsuspensiondays = CirculationRules.Get( branchcode, c, i, 'maxsuspensiondays' ) %] - [% SET renewalsallowed = CirculationRules.Get( branchcode, c, i, 'renewalsallowed' ) %] - [% SET renewalperiod = CirculationRules.Get( branchcode, c, i, 'renewalperiod' ) %] - [% SET norenewalbefore = CirculationRules.Get( branchcode, c, i, 'norenewalbefore' ) %] - [% SET auto_renew = CirculationRules.Get( branchcode, c, i, 'auto_renew' ) %] - [% SET no_auto_renewal_after = CirculationRules.Get( branchcode, c, i, 'no_auto_renewal_after' ) %] - [% SET no_auto_renewal_after_hard_limit = CirculationRules.Get( branchcode, c, i, 'no_auto_renewal_after_hard_limit' ) %] - [% SET reservesallowed = CirculationRules.Get( branchcode, c, i, 'reservesallowed' ) %] - [% SET holds_per_record = CirculationRules.Get( branchcode, c, i, 'holds_per_record' ) %] - [% SET onshelfholds = CirculationRules.Get( branchcode, c, i, 'onshelfholds' ) %] - [% SET opacitemholds = CirculationRules.Get( branchcode, c, i, 'opacitemholds' ) %] - [% SET article_requests = CirculationRules.Get( branchcode, c, i, 'article_requests' ) %] - [% SET rentaldiscount = CirculationRules.Get( branchcode, c, i, 'rentaldiscount' ) %] - - [% SET show_rule = maxissueqty || maxonsiteissueqty || issuelength || lengthunit || hardduedate || hardduedatebefore || hardduedateexact || fine || chargeperiod - || chargeperiod_charge_at || firstremind || overduefinescap || cap_fine_to_replacement_price || finedays || maxsuspensiondays || renewalsallowed - || renewalsallowed || norenewalbefore || auto_renew || no_auto_renewal_after || no_auto_renewal_after_hard_limit || reservesallowed - || holds_per_record || onshelfholds || opacitemholds || article_requests || article_requests %] - [% IF show_rule %] - [% SET row_count = row_count + 1 %] - <tr row_countd="row_[% row_count %]"> - <td> - [% IF c == undef %] - <em>All</em> - [% ELSE %] - [% Categories.GetName(c) %] - [% END %] - </td> - <td> - [% IF i == undef %] - <em>All</em> - [% ELSE %] - [% ItemTypes.GetDescription(i) %] - [% END %] - </td> - <td class="actions"> - <a href="#" class="editrule btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a> - <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&itemtype=[% rule.itemtype || '*' %]&categorycode=[% rule.categorycode || '*' %]&branch=[% current_branch %]"><i class="fa fa-trash"></i> Delete</a> - </td> - <td> - [% IF maxissueqty.defined && maxissueqty != '' %] - [% maxissueqty %] - [% ELSE %] - Unlimited - [% END %] - </td> - <td> - [% IF maxonsiteissueqty.defined && maxonsiteissueqty != '' %] - [% maxonsiteissueqty %] - [% ELSE %] - Unlimited - [% END %] - </td> - <td>[% issuelength %]</td> - <td> - [% lengthunit %] - </td> - <td> - [% IF ( hardduedate ) %] - [% IF ( hardduedatecompare == '-1' ) %] - before [% hardduedate | $KohaDates %] - <input type="hidden" name="hardduedatecomparebackup" value="-1" /> - [% ELSIF ( hardduedatecompare == '0' ) %] - on [% hardduedate | $KohaDates %] - <input type="hidden" name="hardduedatecomparebackup" value="0" /> - [% ELSIF ( hardduedatecompare == '1' ) %] - after [% hardduedate | $KohaDates %] - <input type="hidden" name="hardduedatecomparebackup" value="1" /> - [% END %] - [% ELSE %] - None defined - [% END %] - </td> - <td>[% fine %]</td> - <td>[% chargeperiod %]</td> - <td>[% IF chargeperiod_charge_at %]Start of interval[% ELSE %]End of interval[% END %]</td> - <td>[% firstremind %]</td> - <td>[% overduefinescap FILTER format("%.2f") %]</td> - <td> - [% IF cap_fine_to_replacement_price %] - <input type="checkbox" checked="checked" disabled="disabled" /> - [% ELSE %] - <input type="checkbox" disabled="disabled" /> - [% END %] - </td> - <td>[% finedays %]</td> - <td>[% maxsuspensiondays %]</td> - <td>[% renewalsallowed %]</td> - <td>[% renewalperiod %]</td> - <td>[% norenewalbefore %]</td> - <td> - [% IF auto_renew %] - Yes - [% ELSE %] - No - [% END %] - </td> - <td>[% no_auto_renewal_after %]</td> - <td>[% no_auto_renewal_after_hard_limit %]</td> - <td>[% reservesallowed %]</td> - <td>[% holds_per_record %]</td> - <td> - [% IF onshelfholds == 1 %] - Yes - [% ELSIF onshelfholds == 2 %] - If all unavailable - [% ELSE %] - If any unavailable - [% END %] - </td> - <td>[% IF opacitemholds == 'F'%]Force[% ELSIF opacitemholds == 'Y'%]Allow[% ELSE %]Don't allow[% END %]</td> - <td> - [% IF article_requests == 'no' %] - No - [% ELSIF article_requests == 'yes' %] - Yes - [% ELSIF article_requests == 'bib_only' %] - Record only - [% ELSIF article_requests == 'item_only' %] - Item only - [% END %] - </td> - <td>[% rentaldiscount %]</td> - <td class="actions"> - <a href="#" class="editrule btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a> - <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&itemtype=[% rule.itemtype || '*' %]&categorycode=[% rule.categorycode || '*' %]&branch=[% current_branch %]"><i class="fa fa-trash"></i> Delete</a> - </td> - </tr> - [% END %] - [% END %] - [% END %] - <tr id="edit_row"> - <td> - <select name="categorycode" id="categorycode"> - <option value="*">All</option> - [% FOREACH patron_category IN patron_categories%] - <option value="[% patron_category.categorycode %]">[% patron_category.description %]</option> - [% END %] - </select> - </td> - <td> - <select name="itemtype" id="matrixitemtype" style="width:13em;"> - <option value="*">All</option> - [% FOREACH itemtypeloo IN itemtypeloop %] - <option value="[% itemtypeloo.itemtype %]">[% itemtypeloo.translated_description %]</option> - [% END %] - </select> - </td> - <td class="actions"> - <input type="hidden" name="branch" value="[% current_branch %]"/> - <button type="submit" class="btn btn-default btn-xs"><i class="fa fa-save"></i> Save</button> - <button name="cancel" class="clear_edit btn btn-default btn-xs"><i class="fa fa-undo"></i> Clear</button> - </td> - <td><input type="text" name="maxissueqty" id="maxissueqty" size="3" /></td> - <td><input type="text" name="maxonsiteissueqty" id="maxonsiteissueqty" size="3" /></td> - <td><input type="text" name="issuelength" id="issuelength" size="3" /> </td> - <td> - <select name="lengthunit" id="lengthunit"> - <option value="days" selected="selected">Days</option> - <option value="hours">Hours</option> - </select> - </td> - <td> - <select name="hardduedatecompare" id="hardduedatecompare"> - <option value="-1">Before</option> - <option value="0">Exactly on</option> - <option value="1">After</option> - </select> - <input type="text" size="10" id="hardduedate" name="hardduedate" value="[% hardduedate %]" class="datepicker" /> - <div class="hint">[% INCLUDE 'date-format.inc' %]</div> - </td> - <td><input type="text" name="fine" id="fine" size="4" /></td> - <td><input type="text" name="chargeperiod" id="chargeperiod" size="2" /></td> - <td> - <select name="chargeperiod_charge_at" id="chargeperiod_charge_at"> - <option value="0">End of interval</option> - <option value="1">Start of interval</option> - </select> - </td> - <td><input type="text" name="firstremind" id="firstremind" size="2" /> </td> - <td><input type="text" name="overduefinescap" id="overduefinescap" size="6" /> </td> - <td><input type="checkbox" name="cap_fine_to_replacement_price" id="cap_fine_to_replacement_price" /></td> - <td><input type="text" name="finedays" id="fined" size="3" /> </td> - <td><input type="text" name="maxsuspensiondays" id="maxsuspensiondays" size="3" /> </td> - <td><input type="text" name="renewalsallowed" id="renewalsallowed" size="2" /></td> - <td><input type="text" name="renewalperiod" id="renewalperiod" size="3" /></td> - <td><input type="text" name="norenewalbefore" id="norenewalbefore" size="3" /></td> - <td> - <select name="auto_renew" id="auto_renew"> - <option value="no" selected>No</option> - <option value="yes">Yes</option> - </select> - </td> - <td><input type="text" name="no_auto_renewal_after" id="no_auto_renewal_after" size="3" /></td> - <td> - <input type="text" size="10" name="no_auto_renewal_after_hard_limit" id="no_auto_renewal_after_hard_limit" value="[% no_auto_renewal_after_hard_limit %]" class="datepicker"/> - <div class="hint">[% INCLUDE 'date-format.inc' %]</div> - </td> - <td><input type="text" name="reservesallowed" id="reservesallowed" size="2" /></td> - <td><input type="text" name="holds_per_record" id="holds_per_record" size="2" /></td> - <td> - <select name="onshelfholds" id="onshelfholds"> - <option value="1">Yes</option> - <option value="0">If any unavailable</option> - <option value="2">If all unavailable</option> - </select> - </td> - <td> - <select id="opacitemholds" name="opacitemholds"> - <option value="N">Don't allow</option> - <option value="Y">Allow</option> - <option value="F">Force</option> - </select> - </td> - <td> - <select id="article_requests" name="article_requests"> - <option value="no">No</option> - <option value="yes">Yes</option> - <option value="bib_only">Record only</option> - <option value="item_only">Item only</option> - </select> - </td> - <td><input type="text" name="rentaldiscount" id="rentaldiscount" size="2" /></td> - <td class="actions"> - <input type="hidden" name="branch" value="[% current_branch %]"/> - <button type="submit" class="btn btn-default btn-xs"><i class="fa fa-save"></i> Save</button> - <button name="cancel" class="clear_edit btn btn-default btn-xs"><i class="fa fa-undo"></i> Clear</button> - </td> - </tr> - <tfoot> - <tr> - <th>Patron category</th> - <th>Item type</th> - <th> </th> - <th>Current checkouts allowed</th> - <th>Current on-site checkouts allowed</th> - <th>Loan period</th> - <th>Unit</th> - <th>Hard due date</th> - <th>Fine amount</th> - <th>Fine charging interval</th> - <th>Charge when?</th> - <th>Fine grace period</th> - <th>Overdue fines cap (amount)</th> - <th>Cap fine at replacement price</th> - <th>Suspension in days (day)</th> - <th>Max. suspension duration (day)</th> - <th>Renewals allowed (count)</th> - <th>Renewal period</th> - <th>No renewal before</th> - <th>Automatic renewal</th> - <th>No automatic renewal after</th> - <th>No automatic renewal after (hard limit)</th> - <th>Holds allowed (count)</th> - <th>Holds per record (count)</th> - <th>On shelf holds allowed</th> - <th>Item level holds</th> - <th>Article requests</th> - <th>Rental discount (%)</th> - <th> </th> - </tr> - </tfoot> - </tbody> - </table> - </form> - </div> - <div id="defaults-for-this-library" class="container"> - <h3>Default checkout, hold and return policy[% IF humanbranch %] for [% Branches.GetName( humanbranch ) %][% END %]</h3> - <p>You can set a default maximum number of checkouts, hold policy and return policy that will be used if none is defined below for a particular item type or category.</p> - <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> - <input type="hidden" name="op" value="set-branch-defaults" /> - <input type="hidden" name="branch" value="[% current_branch %]"/> - <table> - <tr> - <th> </th> - <th>Total current checkouts allowed</th> - <th>Total current on-site checkouts allowed</th> - <th>Maximum total holds allowed (count)</th> - <th>Hold policy</th> - <th>Hold pickup library match</th> - <th>Return policy</th> - <th>Actions</th> - </tr> - <tr> - <td><em>Defaults[% UNLESS ( default_rules ) %] (not set)[% END %]</em></td> - <td> - [% SET patron_maxissueqty = CirculationRules.Get( branchcode, undef, undef, 'patron_maxissueqty' ) %] - <input type="text" name="patron_maxissueqty" size="3" value="[% patron_maxissueqty %]"/> - </td> - <td> - [% SET patron_maxonsiteissueqty = CirculationRules.Get( branchcode, undef, undef, 'patron_maxonsiteissueqty' ) %] - <input type="text" name="patron_maxonsiteissueqty" size="3" value="[% patron_maxonsiteissueqty %]"/> - </td> - <td> - [% SET rule_value = CirculationRules.Get( current_branch, '*', undef, 'max_holds' ) %] - <input name="max_holds" size="3" value="[% rule_value %]" /> - </td> - <td> - <select name="holdallowed"> - [% SET holdallowed = CirculationRules.Get( branchcode, undef, undef, 'holdallowed' ) %] - <option value=""> - Not set - </option> - - [% IF holdallowed == 2 %] - <option value="2" selected="selected"> - [% ELSE %] - <option value="2"> - [% END %] - From any library - </option> - - [% IF holdallowed == 1 %] - <option value="1" selected="selected"> - [% ELSE %] - <option value="1"> - [% END %] - From home library - </option> - - [% IF holdallowed == 0 %] - <option value="0" selected="selected"> - [% ELSE %] - <option value="0"> - [% END %] - No holds allowed - </option> - </select> - </td> - <td> - <select name="hold_fulfillment_policy"> - [% SET hold_fulfillment_policy = CirculationRules.Get( branchcode, undef, undef, 'hold_fulfillment_policy' ) %] - - <option value=""> - Not set - </option> - - [% IF hold_fulfillment_policy == 'any' %] - <option value="any" selected="selected"> - any library - </option> - [% ELSE %] - <option value="any"> - any library - </option> - [% END %] - - [% IF hold_fulfillment_policy == 'homebranch' %] - <option value="homebranch" selected="selected"> - item's home library - </option> - [% ELSE %] - <option value="homebranch"> - item's home library - </option> - [% END %] - - [% IF hold_fulfillment_policy == 'holdingbranch' %] - <option value="holdingbranch" selected="selected"> - item's holding library - </option> - [% ELSE %] - <option value="holdingbranch"> - item's holding library - </option> - [% END %] - </select> - </td> - <td> - <select name="returnbranch"> - [% SET returnbranch = CirculationRules.Get( branchcode, undef, undef, 'returnbranch' ) %] - - <option value=""> - Not set - </option> - - [% IF returnbranch == 'homebranch' %] - <option value="homebranch" selected="selected"> - [% ELSE %] - <option value="homebranch"> - [% END %] - Item returns home - </option> - [% IF returnbranch == 'holdingbranch' %] - <option value="holdingbranch" selected="selected"> - [% ELSE %] - <option value="holdingbranch"> - [% END %] - Item returns to issuing library - </option> - [% IF returnbranch == 'noreturn' %] - <option value="noreturn" selected="selected"> - [% ELSE %] - <option value="noreturn"> - [% END %] - Item floats - </option> - </select> - </td> - <td class="actions"> - <button type="submit" class="btn btn-default btn-xs"><i class="fa fa-save"></i> Save</button> - <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete-branch-cat&categorycode=*&branch=[% current_branch %]" id="unset"><i class="fa fa-undo"></i> Unset</a> - </td> - </tr> - </table> - </form> - </div> - [% IF ( show_branch_cat_rule_form ) %] - <div id="holds-policy-by-patron-category" class="container"> - <h3>[% IF humanbranch %]Checkout, hold policy by patron category for [% Branches.GetName( humanbranch ) %][% ELSE %]Default checkout, hold policy by patron category[% END %]</h3> - <p>For this library, you can specify the maximum number of loans that - a patron of a given category can make, regardless of the item type. - </p> - <p>If the total amount loanable for a given patron category is left blank, - no limit applies, except possibly for a limit you define for a specific item type. - </p> - <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> - <input type="hidden" name="op" value="add-branch-cat" /> - <input type="hidden" name="branch" value="[% current_branch %]"/> - <table> - <tr> - <th>Patron category</th> - <th>Total current checkouts allowed</th> - <th>Total current on-site checkouts allowed</th> - <th>Total holds allowed</th> - <th> </th> - </tr> - [% FOREACH c IN categorycodes %] - [% NEXT UNLESS c %] - [% SET patron_maxissueqty = CirculationRules.Get( branchcode, c, undef, 'patron_maxissueqty' ) %] - [% SET patron_maxonsiteissueqty = CirculationRules.Get( branchcode, c, undef, 'patron_maxonsiteissueqty' ) %] - [% SET max_holds = CirculationRules.Get( branchcode, c, undef, 'max_holds' ) %] - - [% IF patron_maxissueqty || patron_maxonsiteissueqty || max_holds %] - <tr> - <td> - [% IF c == undef %] - <em>Default</em> - [% ELSE %] - [% Categories.GetName(c) %] - [% END %] - </td> - <td> - [% IF patron_maxissueqty.defined && patron_maxissueqty != '' %] - [% patron_maxissueqty %] - [% ELSE %] - Unlimited - [% END %] - </td> - <td> - [% IF patron_maxonsiteissueqty.defined && patron_maxonsiteissueqty != '' %] - [% patron_maxonsiteissueqty %] - [% ELSE %] - Unlimited - [% END %] - </td> - <td> - [% IF max_holds.defined && max_holds != '' %] - [% max_holds %] - [% ELSE %] - Unlimited - [% END %] - </td> - - <td class="actions"> - <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete-branch-cat&categorycode=[% c %]&branch=[% current_branch %]"><i class="fa fa-trash"></i> Delete</a> - </td> - </tr> - [% END %] - [% END %] - <tr> - <td> - <select name="categorycode"> - [% FOREACH patron_category IN patron_categories%] - <option value="[% patron_category.categorycode %]">[% patron_category.description %]</option> - [% END %] - </select> - </td> - <td><input name="patron_maxissueqty" size="3" /></td> - <td><input name="patron_maxonsiteissueqty" size="3" /></td> - <td><input name="max_holds" size="3" /></td> - <td class="actions"><button type="submit" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> Add</td> - </tr> - </table> - </form> - </div> - [% END %] - - <div id="refund-lost-item-fee-on-return" class="container"> - [% IF current_branch == '*' %] - <h3>Default lost item fee refund on return policy</h3> - [% ELSE %] - <h3>Lost item fee refund on return policy for [% Branches.GetName(current_branch) %]</h3> - [% END %] - <p>Specify the default policy for lost item fees on return. - </p> - <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> - <input type="hidden" name="op" value="mod-refund-lost-item-fee-rule" /> - <input type="hidden" name="branch" value="[% current_branch %]" /> - <table> - <tr> - <th>Refund lost item fee</th> - <th> </th> - </tr> - <tr> - <td> - <select name="refund"> - [#% Default branch %#] - [% IF ( current_branch == '*' ) %] - [% IF ( refundLostItemFeeRule.rule_value ) %] - <option value="1" selected="selected"> - [% ELSE %] - <option value="1"> - [% END %] - Yes - </option> - [% IF ( not refundLostItemFeeRule.rule_value ) %] - <option value="0" selected="selected"> - [% ELSE %] - <option value="0"> - [% END %] - No - </option> - [% ELSE %] - [#% Branch-specific %#] - [% IF ( not refundLostItemFeeRule ) %] - <option value="*" selected="selected"> - [% ELSE %] - <option value="*"> - [% END %] - [% IF defaultRefundRule %] - Use default (Yes) - [% ELSE %] - Use default (No) - [% END %] - </option> - [% IF ( not refundLostItemFeeRule ) %] - <option value="1">Yes</option> - <option value="0">No</option> - [% ELSE %] - [% IF ( refundLostItemFeeRule.rule_value ) %] - <option value="1" selected="selected"> - [% ELSE %] - <option value="1"> - [% END %] - Yes - </option> - [% IF ( not refundLostItemFeeRule.rule_value ) %] - <option value="0" selected="selected"> - [% ELSE %] - <option value="0"> - [% END %] - No - </option> - [% END %] - [% END %] - </select> - </td> - <td class="actions"> - <button type="submit" class="btn btn-default btn-xs"><i class="fa fa-save"></i> Save</button> - </td> - </td> - </tr> - </table> - </form> - </div> - - <div id="holds-policy-by-item-type" class="container"> - <h3>[% IF humanbranch %]Holds policy by item type for [% Branches.GetName( humanbranch ) %][% ELSE %]Default holds policy by item type[% END %]</h3> - <p> - For this library, you can edit rules for given itemtypes, regardless - of the patron's category. - </p> - <p> - Currently, this means hold policies. - The various policies have the following effects: - </p> - <ul> - <li><strong>From any library:</strong> Patrons from any library may put this item on hold. <cite>(default if none is defined)</cite></li> - <li><strong>From home library:</strong> Only patrons from the item's home library may put this book on hold.</li> - <li><strong>No holds allowed:</strong> No patron may put this book on hold.</li> - </ul> - <p><strong>Note: </strong>If the system preference 'AllowHoldPolicyOverride' is enabled, these policies can be overridden by your circulation staff.</br /> - <strong>Important: </strong>The policies are based on the patron's home library, not the library where the hold is being placed. - </p> - - <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> - <input type="hidden" name="op" value="add-branch-item" /> - <input type="hidden" name="branch" value="[% current_branch %]"/> - <table> - <tr> - <th>Item type</th> - <th>Hold policy</th> - <th>Hold pickup library match</th> - <th>Return policy</th> - <th> </th> - </tr> - [% FOREACH i IN itemtypeloop %] - [% SET holdallowed = CirculationRules.Get( branchcode, undef, i.itemtype, 'holdallowed' ) %] - [% SET hold_fulfillment_policy = CirculationRules.Get( branchcode, undef, i.itemtype, 'hold_fulfillment_policy' ) %] - [% SET returnbranch = CirculationRules.Get( branchcode, undef, i.itemtype, 'returnbranch' ) %] - - [% IF holdallowed || hold_fulfillment_policy || returnbranch %] - <tr> - <td> - [% i.translated_description %] - </td> - <td> - [% IF holdallowed == 2 %] - From any library - [% ELSIF holdallowed == 1 %] - From home library - [% ELSE %] - No holds allowed - [% END %] - </td> - <td> - [% IF hold_fulfillment_policy == 'any' %] - any library - [% ELSIF hold_fulfillment_policy == 'homebranch' %] - item's home library - [% ELSIF hold_fulfillment_policy == 'holdingbranch' %] - item's holding library - [% END %] - </td> - <td> - [% IF returnbranch == 'homebranch' %] - Item returns home - [% ELSIF returnbranch == 'holdingbranch' %] - Item returns to issuing branch - [% ELSIF returnbranch == 'noreturn' %] - Item floats - [% END %] - </td> - <td class="actions"> - <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete-branch-item&itemtype=[% i.itemtype %]&branch=[% current_branch %]"><i class="fa fa-trash"></i> Delete</a> - </td> - </tr> - [% END %] - [% END %] - <tr> - <td> - <select name="itemtype"> - [% FOREACH itemtypeloo IN itemtypeloop %] - <option value="[% itemtypeloo.itemtype %]">[% itemtypeloo.translated_description %]</option> - [% END %] - </select> - </td> - <td> - <select name="holdallowed"> - <option value="2">From any library</option> - <option value="1">From home library</option> - <option value="0">No holds allowed</option> - </select> - </td> - <td> - <select name="hold_fulfillment_policy"> - <option value="any"> - any library - </option> - - <option value="homebranch"> - item's home library - </option> - - <option value="holdingbranch"> - item's holding library - </option> - </select> - </td> - <td> - <select name="returnbranch"> - <option value="homebranch">Item returns home</option> - <option value="holdingbranch">Item returns to issuing library</option> - <option value="noreturn">Item floats</option> - </select> - </td> - <td class="actions"><button type="submit" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> Add</button></td> - </tr> - </table> - </form> - </div> -</div> - -</div> -<div class="yui-b"> -[% INCLUDE 'admin-menu.inc' %] -</div> -</div> - -[% MACRO jsinclude BLOCK %] - <script type="text/javascript" src="[% interface %]/[% theme %]/js/admin-menu.js"></script> - [% INCLUDE 'calendar.inc' %] - <script type="text/javascript"> - - function clear_edit(){ - var cancel = confirm(_("Are you sure you want to cancel your changes?")); - if ( !cancel ) return; - $('#default-circulation-rules td').removeClass('highlighted-row'); - var edit_row = $("#edit_row"); - $(edit_row).find("input").each(function(){ - var type = $(this).attr("type"); - if (type != "button" && type != "submit" ) { - $(this).val(""); - $(this).prop('disabled', false); - } - if ( type == "checkbox" ) { - $(this).prop('checked', false); - } - }); - $(edit_row).find("select").prop('disabled', false); - $(edit_row).find("select option:first").attr("selected", "selected"); - $(edit_row).find("td:last input[name='clear']").remove(); - } - - var MSG_CONFIRM_DELETE = _("Are you sure you want to delete this rule? This cannot be undone."); - - $(document).ready(function() { - $(".delete").on("click",function(){ - return confirmDelete(MSG_CONFIRM_DELETE); - }); - - $("#clone_rules").on("click",function(){ - var library_dropdown = document.getElementById("branch"); - var selected_library = library_dropdown.options[library_dropdown.selectedIndex].value; - var selected_library_text = $("#branch option:selected").text(); - var to_library = $("#tobranch option:selected").text(); - var MSG_CONFIRM_CLONE; - if (selected_library === "*") { - MSG_CONFIRM_CLONE = _("Are you sure you want to clone this standard rule to %s library? This will override the existing rules in this library.").format(to_library); - return confirmClone(MSG_CONFIRM_CLONE); - } else { - MSG_CONFIRM_CLONE = _("Are you sure you want to clone this circulation and fine rule from %s to %s library? This will override the existing rules in this library.").format(selected_library_text, to_library); - return confirmClone(MSG_CONFIRM_CLONE); - } - }); - - $('#cap_fine_to_replacement_price').on('change', function(){ - $('#overduefinescap').prop('disabled', $(this).is(':checked') ); - }); - $('#selectlibrary').find("input:submit").hide(); - $('#branch').change(function() { - $('#selectlibrary').submit(); - }); - $(".editrule").click(function(){ - if ( $("#edit_row").find("input[type='text']").filter(function(){return this.value.length > 0 }).length > 0 ) { - var edit = confirm(_("Are you sure you want to edit another rule?")); - if (!edit) return false; - } - $('#default-circulation-rules td').removeClass('highlighted-row'); - $(this).parent().parent().find("td").each(function (i) { - $(this).addClass('highlighted-row'); - itm = $(this).text(); - itm = itm.replace(/^\s*|\s*$/g,''); - var current_column = $("#edit_row td:eq("+i+")"); - if ( i == 7 ) { - // 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 == 13 ) { - // specific processing for cap_fine_to_replacement_price - var cap_fine_to_replacement_price = $(this).find("input[type='checkbox']"); - $('#cap_fine_to_replacement_price').prop('checked', cap_fine_to_replacement_price.is(':checked') ); - $('#overduefinescap').prop('disabled', 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(){ - opt = $(this).text().toLowerCase(); - opt = opt.replace(/^\s*|\s*$/g,''); - if ( opt == itm.toLowerCase() ) { - $(this).attr('selected', 'selected'); - } - }); - if ( i == 0 || i == 1 ) { - // Disable the 2 first columns, we cannot update them. - var val = $(current_column).find("select option:selected").val(); - var name = "categorycode"; - if ( i == 1 ) { - name="itemtype"; - } - // Remove potential previous input added - $(current_column).find("input").remove(); - $(current_column).append("<input type='hidden' name='"+name+"' value='"+val+"' />"); - } else if ( i == 3 || i == 4 ) { - // If the value is not an integer for "Current checkouts allowed" or "Current on-site checkouts allowed" - // The value is "Unlimited" (or an equivalent translated string) - // an it should be set to an empty string - if( !((parseFloat(itm) == parseInt(itm)) && !isNaN(itm)) ) { - $(current_column).find("input[type='text']").val(""); - } - } - } - }); - $("#default-circulation-rules tr:last td:eq(0) select").prop('disabled', true); - $("#default-circulation-rules tr:last td:eq(1) select").prop('disabled', true); - return false; - }); - $(".clear_edit").on("click",function(e){ - e.preventDefault(); - clear_edit(); - }); - }); - </script> -[% END %] -[% INCLUDE 'intranet-bottom.inc' %] diff --git a/koha-tmpl/intranet-tmpl/prog/js/src/admin/policy/app.js b/koha-tmpl/intranet-tmpl/prog/js/src/admin/policy/app.js index 7b3743e523..d35e7970d5 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/src/admin/policy/app.js +++ b/koha-tmpl/intranet-tmpl/prog/js/src/admin/policy/app.js @@ -212,7 +212,7 @@ export default class PolicyApp extends React.Component { } return <section> - <h1>{__( "Circulation, fine and hold policy" )}</h1> + <h1>{__( "Circulation, fines and holds rules" )}</h1> <PolicyAppToolbar branch={this.state.branch} group={this.state.kindGroup} -- 2.15.1