From 2b61fa944b65099f96028855314c5e3836994b52 Mon Sep 17 00:00:00 2001 From: Jesse Weaver Date: Tue, 17 Oct 2017 16:58:07 -0600 Subject: [PATCH] Bug 15522: Remove old circulation rules interface --- admin/clone-rules.pl | 101 --- admin/smart-rules.pl | 617 ------------- .../intranet-tmpl/prog/en/includes/admin-menu.inc | 2 +- .../prog/en/modules/admin/admin-home.tt | 4 +- .../prog/en/modules/admin/clone-rules.tt | 77 -- .../prog/en/modules/admin/smart-rules.tt | 987 --------------------- .../intranet-tmpl/prog/js/src/admin/policy/app.js | 2 +- 7 files changed, 4 insertions(+), 1786 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 dd071252d9..0000000000 --- a/admin/clone-rules.pl +++ /dev/null @@ -1,101 +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 . - - -# 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 Modern::Perl; -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 => 'manage_circ_rules'}, - 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 112efeb2ca..0000000000 --- a/admin/smart-rules.pl +++ /dev/null @@ -1,617 +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 . - -use Modern::Perl; -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::Caches; -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 $logged_in_patron = Koha::Patrons->find( $loggedinuser ); - -my $can_edit_from_any_library = $logged_in_patron->has_permission( {parameters => 'manage_circ_rules_from_any_libraries' } ); -$template->param( restricted_to_own_library => not $can_edit_from_any_library ); -$branch = C4::Context::mybranch() unless $can_edit_from_any_library; - -$branch = '*' if $branch eq 'NO_LIBRARY_SET'; - -my $op = $input->param('op') || q{}; -my $language = C4::Languages::getlanguage(); - -my $cache = Koha::Caches->get_instance; -$cache->clear_from_cache( Koha::CirculationRules::GUESSED_ITEMTYPES_KEY ); - -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 => { - maxissueqty => undef, - maxonsiteissueqty => undef, - rentaldiscount => undef, - fine => undef, - finedays => undef, - maxsuspensiondays => undef, - suspension_chargeperiod => undef, - firstremind => undef, - chargeperiod => undef, - chargeperiod_charge_at => 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, - holds_per_day => undef, - onshelfholds => undef, - opacitemholds => undef, - overduefinescap => undef, - cap_fine_to_replacement_price => undef, - article_requests => undef, - note => 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 => { - max_holds => undef, - 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, - max_holds => 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 = undef if $maxsuspensiondays eq q||; - $maxsuspensiondays = '' if $maxsuspensiondays eq q||; - my $suspension_chargeperiod = $input->param('suspension_chargeperiod') || 1; - 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 $holds_per_day = $input->param('holds_per_day'); - $holds_per_day =~ s/\s//g; - $holds_per_day = undef if $holds_per_day !~ /^\d+/; - 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'; - my $note = $input->param('note'); - $debug and warn "Adding $br, $bor, $itemtype, $fine, $maxissueqty, $maxonsiteissueqty, $cap_fine_to_replacement_price"; - - my $rules = { - maxissueqty => $maxissueqty, - maxonsiteissueqty => $maxonsiteissueqty, - rentaldiscount => $rentaldiscount, - fine => $fine, - finedays => $finedays, - maxsuspensiondays => $maxsuspensiondays, - suspension_chargeperiod => $suspension_chargeperiod, - firstremind => $firstremind, - chargeperiod => $chargeperiod, - chargeperiod_charge_at => $chargeperiod_charge_at, - issuelength => $issuelength, - lengthunit => $lengthunit, - hardduedate => $hardduedate, - hardduedatecompare => $hardduedatecompare, - 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, - holds_per_day => $holds_per_day, - onshelfholds => $onshelfholds, - opacitemholds => $opacitemholds, - overduefinescap => $overduefinescap, - cap_fine_to_replacement_price => $cap_fine_to_replacement_price, - article_requests => $article_requests, - note => $note, - }; - - Koha::CirculationRules->set_rules( - { - categorycode => $bor eq '*' ? undef : $bor, - itemtype => $itemtype eq '*' ? undef : $itemtype, - branchcode => $br eq '*' ? undef : $br, - rules => $rules, - } - ); - -} -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 => 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 = undef 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 50960244af..50d106e810 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc @@ -33,7 +33,7 @@
  • Patron categories
  • [% END %] [% IF ( CAN_user_parameters_manage_circ_rules ) %] -
  • Circulation and fines rules
  • +
  • Circulation, fines, and holds rules
  • [% END %] [% IF ( CAN_user_parameters_manage_patron_attributes ) %]
  • Patron attribute types
  • 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 fdc7cfd027..5e74018e6c 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 @@ -74,8 +74,8 @@
    Define patron categories.
    [% END %] [% IF ( CAN_user_parameters_manage_circ_rules ) %] -
    Circulation and fines rules
    -
    Define circulation and fines rules for combinations of libraries, patron categories, and item types
    +
    Circulation, fines, and holds rules
    +
    Define circulation, fines, and holds rules for combinations of libraries, patron categories, and item types
    [% END %] [% IF ( CAN_user_parameters_manage_patron_attributes ) %]
    Patron attribute types
    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 d7ff05068d..0000000000 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tt +++ /dev/null @@ -1,77 +0,0 @@ -[% USE raw %] -[% USE Asset %] -[% USE Branches %] -[% SET footerjs = 1 %] -[% INCLUDE 'doc-head-open.inc' %] -Koha › Administration › Circulation and fine rules › Clone circulation and fine rules -[% INCLUDE 'doc-head-close.inc' %] - - -[% INCLUDE 'header.inc' %] -[% INCLUDE 'prefs-admin-search.inc' %] - - - -
    -
    -
    -
    - -

    Cloning circulation and fine rules - [% IF frombranch %] from "[% Branches.GetName( frombranch ) | html %]"[% END %] - [% IF tobranch %] to "[% Branches.GetName( tobranch ) | html %]"[% END %] -

    - - [% IF ( result ) %] - [% IF ( error ) %] -
    Cloning of circulation and fine rules failed!
    - [% ELSE %] -

    The rules have been cloned.

    - [% END %] - Return to circulation and fine rules - [% ELSE %] - -

    Use carefully! If the destination library already has circulation and fine rules, they will be deleted without warning!

    -
    - [% UNLESS ( frombranch ) %] -
    - Please choose a library to clone rules from: - - - [% IF ( tobranch ) %][% END %] -
    - [% END %] - - [% UNLESS ( tobranch ) %] -
    - Please choose the library to clone the rules to: - - - [% IF ( frombranch ) %][% END %] -
    - [% END %] - -
    - - [% END %] -
    -
    - -
    - -
    -
    - -[% MACRO jsinclude BLOCK %] - [% Asset.js("js/admin-menu.js") | $raw %] -[% END %] - -[% INCLUDE 'intranet-bottom.inc' %] 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 29b3f7e964..0000000000 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ /dev/null @@ -1,987 +0,0 @@ -[% USE raw %] -[% USE Asset %] -[% USE Koha %] -[% 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' %] -Koha › Administration › Circulation and fine rules -[% INCLUDE 'doc-head-close.inc' %] - - - -[% INCLUDE 'header.inc' %] -[% INCLUDE 'prefs-admin-search.inc' %] - - - -
    -
    -
    -
    - -

    - [% IF humanbranch %] - Defining circulation and fine rules for "[% Branches.GetName( humanbranch ) | html %]" - [% ELSE %] - Defining circulation and fine rules for all libraries - [% END %] -

    -
    -

    The rules are applied from most specific to less specific, using the first found in this order:

    -
      -
    • same library, same patron category, same item type
    • -
    • same library, same patron category, all item types
    • -
    • same library, all patron categories, same item type
    • -
    • same library, all patron categories, all item types
    • -
    • default (all libraries), same patron category, same item type
    • -
    • default (all libraries), same patron category, all item types
    • -
    • default (all libraries), all patron categories, same item type
    • -
    • default (all libraries), all patron categories, all item types
    • -
    -

    To modify a rule, create a new one with the same patron category and item type.

    -
    -
    - [% UNLESS restricted_to_own_library %] -
    - Select a library : - -
    - [% IF ( definedbranch ) %] -
    - - - - -
    - [% END %] - [% END %] - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [% SET row_count = 0 %] - [% FOREACH c IN categorycodes %] - [% FOREACH i IN itemtypes %] - [% SET note = CirculationRules.Get( branchcode, c, i, 'note' ) %] - [% 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 suspension_chargeperiod = CirculationRules.Get( branchcode, c, i, 'suspension_chargeperiod' ) %] - [% 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_day = CirculationRules.Get( branchcode, c, i, 'holds_per_day' ) %] - [% 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 || suspension_chargeperiod || renewalsallowed || renewalsallowed || norenewalbefore || auto_renew || no_auto_renewal_after || no_auto_renewal_after_hard_limit || reservesallowed || holds_per_day || holds_per_record || onshelfholds || opacitemholds || article_requests || article_requests %] - [% IF show_rule %] - [% SET row_count = row_count + 1 %] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [% END %] - [% END %] - [% END %] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Patron categoryItem typeActionsNoteCurrent checkouts allowedCurrent on-site checkouts allowedLoan periodUnitHard due dateFine amountFine charging intervalWhen to chargeFine grace periodOverdue fines cap (amount)Cap fine at replacement priceSuspension in days (day)Max. suspension duration (day)Suspension charging intervalRenewals allowed (count)Renewal periodNo renewal beforeAutomatic renewalNo automatic renewal afterNo automatic renewal after (hard limit)Holds allowed (total)Holds allowed (daily)Holds per record (count)On shelf holds allowedItem level holdsArticle requestsRental discount (%)Actions
    - [% IF c == undef %] - All - [% ELSE %] - [% Categories.GetName(c) | html %] - [% END %] - - [% IF i == undef %] - All - [% ELSE %] - [% ItemTypes.GetDescription(i) | html %] - [% END %] - - Edit - Delete - - [% IF note.defined %] - View note - [% ELSE %] [% END %] - - [% IF maxissueqty.defined && maxissueqty != '' %] - [% maxissueqty | html %] - [% ELSE %] - Unlimited - [% END %] - - [% IF maxonsiteissueqty.defined && maxonsiteissueqty != '' %] - [% maxonsiteissueqty | html %] - [% ELSE %] - Unlimited - [% END %] - [% issuelength | html %] - [% lengthunit | html %] - - [% IF ( hardduedate ) %] - [% IF ( hardduedatecompare == '-1' ) %] - before [% hardduedate | $KohaDates %] - - [% ELSIF ( hardduedatecompare == '0' ) %] - on [% hardduedate | $KohaDates %] - - [% ELSIF ( hardduedatecompare == '1' ) %] - after [% hardduedate | $KohaDates %] - - [% END %] - [% ELSE %] - None defined - [% END %] - [% fine | html %][% chargeperiod | html %][% IF chargeperiod_charge_at %]Start of interval[% ELSE %]End of interval[% END %][% firstremind | html %][% overduefinescap FILTER format("%.2f") %] - [% IF cap_fine_to_replacement_price %] - - [% ELSE %] - - [% END %] - [% finedays | html %][% maxsuspensiondays | html %][% suspension_chargeperiod | html %][% renewalsallowed | html %][% renewalperiod | html %][% norenewalbefore | html %] - [% IF auto_renew %] - Yes - [% ELSE %] - No - [% END %] - [% no_auto_renewal_after | html %][% no_auto_renewal_after_hard_limit | html %][% reservesallowed | html %] - [% IF holds_per_day.defined && holds != '' %] - [% holds_per_day | html %] - [% ELSE %] - Unlimited - [% END %] - [% holds_per_record | html %] - [% IF onshelfholds == 1 %] - Yes - [% ELSIF onshelfholds == 2 %] - If all unavailable - [% ELSE %] - If any unavailable - [% END %] - - [% IF opacitemholds == 'F'%] - Force - [% ELSIF opacitemholds == 'Y'%] - Allow - [% ELSE %] - Don't allow - [% END %] - - [% 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 %] - [% rentaldiscount | html %] - Edit - Delete -
    - - - - - - - - - - - - -
    [% INCLUDE 'date-format.inc' %]
    -
    - - - - - -
    [% INCLUDE 'date-format.inc' %]
    -
    - - - - - - - - - -
    Patron categoryItem type NoteCurrent checkouts allowedCurrent on-site checkouts allowedLoan periodUnitHard due dateFine amountFine charging intervalCharge when?Fine grace periodOverdue fines cap (amount)Cap fine at replacement priceSuspension in days (day)Max. suspension duration (day)Suspension charging intervalRenewals allowed (count)Renewal periodNo renewal beforeAutomatic renewalNo automatic renewal afterNo automatic renewal after (hard limit)Holds allowed (total)Holds allowed (daily)Holds per record (count)On shelf holds allowedItem level holdsArticle requestsRental discount (%) 
    -
    -
    -
    -

    Default checkout, hold and return policy[% IF humanbranch %] for [% Branches.GetName( humanbranch ) | html %][% END %]

    -

    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.

    -
    - - - - - - - - - - - - - - - - - - - - - - - -
     Total current checkouts allowedTotal current on-site checkouts allowedMaximum total holds allowed (count)Hold policyHold pickup library matchReturn policyActions
    Defaults - [% SET patron_maxissueqty = CirculationRules.Search( current_branch, undef, undef, 'patron_maxissueqty' ) %] - - - [% SET patron_maxonsiteissueqty = CirculationRules.Search( current_branch, undef, undef, 'patron_maxonsiteissueqty' ) %] - - - [% SET rule_value = CirculationRules.Search( current_branch, undef , undef, 'max_holds' ) %] - - - - - - - - - - Unset -
    -
    -
    - [% IF ( show_branch_cat_rule_form ) %] -
    -

    [% IF humanbranch %]Checkout, hold policy by patron category for [% Branches.GetName( humanbranch ) | html %][% ELSE %]Default checkout, hold policy by patron category[% END %]

    -

    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. -

    -

    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. -

    -
    - - - - - - - - - - - [% FOREACH c IN categorycodes %] - [% NEXT UNLESS c %] - [% SET patron_maxissueqty = CirculationRules.Search( branchcode, c, undef, 'patron_maxissueqty' ) %] - [% SET patron_maxonsiteissueqty = CirculationRules.Search( branchcode, c, undef, 'patron_maxonsiteissueqty' ) %] - [% SET max_holds = CirculationRules.Search( branchcode, c, undef, 'max_holds' ) %] - - [% IF ( patron_maxissueqty.defined && patron_maxissueqty != '' ) || ( patron_maxonsiteissueqty.defined && patron_maxonsiteissueqty != '' ) || ( max_holds.defined && max_holds != '' ) %] - - - - - - - - - [% END %] - [% END %] - - - - - - - -
    Patron categoryTotal current checkouts allowedTotal current on-site checkouts allowedTotal holds allowed 
    - [% IF c == undef %] - Default - [% ELSE %] - [% Categories.GetName(c) | html %] - [% END %] - - [% IF patron_maxissueqty.defined && patron_maxissueqty != '' %] - [% patron_maxissueqty | html %] - [% ELSE %] - Unlimited - [% END %] - - [% IF patron_maxonsiteissueqty.defined && patron_maxonsiteissueqty != '' %] - [% patron_maxonsiteissueqty | html %] - [% ELSE %] - Unlimited - [% END %] - - [% IF max_holds.defined && max_holds != '' %] - [% max_holds | html %] - [% ELSE %] - Unlimited - [% END %] - - Delete -
    - -
    -
    -
    - [% END %] - -
    - [% IF current_branch == '*' %] -

    Default lost item fee refund on return policy

    - [% ELSE %] -

    Lost item fee refund on return policy for [% Branches.GetName(current_branch) | html %]

    - [% END %] -

    Specify the default policy for lost item fees on return. -

    -
    - - - - - - - - - - - - -
    Refund lost item fee 
    - - - -
    -
    -
    - -
    -

    [% IF humanbranch %]Holds policy by item type for [% Branches.GetName( humanbranch ) | html %][% ELSE %]Default holds policy by item type[% END %]

    -

    - For this library, you can edit rules for given itemtypes, regardless - of the patron's category. -

    -

    - Currently, this means hold policies. - The various policies have the following effects: -

    -
      -
    • From any library: Patrons from any library may put this item on hold. (default if none is defined)
    • -
    • From home library: Only patrons from the item's home library may put this book on hold.
    • -
    • No holds allowed: No patron may put this book on hold.
    • -
    -

    Note: If the system preference 'AllowHoldPolicyOverride' is enabled, these policies can be overridden by your circulation staff.
    - Important: The policies are applied based on the ReservesControlBranch system preference which is set to [% Koha.Preference('ReservesControlBranch') | html %]. -

    - -
    - - - - - - - - - - - [% FOREACH i IN itemtypeloop %] - [% SET holdallowed = CirculationRules.Search( branchcode, undef, i.itemtype, 'holdallowed' ) %] - [% SET hold_fulfillment_policy = CirculationRules.Search( branchcode, undef, i.itemtype, 'hold_fulfillment_policy' ) %] - [% SET returnbranch = CirculationRules.Search( branchcode, undef, i.itemtype, 'returnbranch' ) %] - - [% IF holdallowed || hold_fulfillment_policy || returnbranch %] - - - - - - - - [% END %] - [% END %] - - - - - - - -
    Item typeHold policyHold pickup library matchReturn policy 
    - [% i.translated_description | html %] - - [% IF holdallowed == 2 %] - From any library - [% ELSIF holdallowed == 1 %] - From home library - [% ELSE %] - No holds allowed - [% END %] - - [% 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 %] - - [% IF returnbranch == 'homebranch' %] - Item returns home - [% ELSIF returnbranch == 'holdingbranch' %] - Item returns to issuing branch - [% ELSIF returnbranch == 'noreturn' %] - Item floats - [% END %] - - Delete -
    - - - - - - - -
    -
    -
    -
    -
    - -
    - -
    -
    - -[% MACRO jsinclude BLOCK %] - [% Asset.js("js/admin-menu.js") | $raw %] - [% INCLUDE 'calendar.inc' %] - -[% 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
    -

    {__( "Circulation, fine and hold policy" )}

    +

    {__( "Circulation, fines and holds rules" )}