X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=admin%2Fsmart-rules.pl;h=e9c1bf121d075e6ed4b167b1c0288ea02d0e0552;hb=f5380b401428e8e81667aff278822c7667fcc4c7;hp=aa26cbe54a32fa1b352c446e1ad3668ab015b8d9;hpb=b9727d20582164da578d125db80576e72e050d2a;p=koha.git diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl index aa26cbe54a..e9c1bf121d 100755 --- a/admin/smart-rules.pl +++ b/admin/smart-rules.pl @@ -35,6 +35,7 @@ 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; @@ -61,6 +62,13 @@ unless ( $branch ) { $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{}; @@ -83,28 +91,22 @@ elsif ($op eq 'delete-branch-cat') { if ($categorycode eq "*") { my $sth_delete = $dbh->prepare("DELETE FROM default_circ_rules"); $sth_delete->execute(); - } else { - my $sth_delete = $dbh->prepare("DELETE FROM default_borrower_circ_rules - WHERE categorycode = ?"); - $sth_delete->execute($categorycode); } } elsif ($categorycode eq "*") { my $sth_delete = $dbh->prepare("DELETE FROM default_branch_circ_rules WHERE branchcode = ?"); $sth_delete->execute($branch); - } else { - my $sth_delete = $dbh->prepare("DELETE FROM branch_borrower_circ_rules - WHERE branchcode = ? - AND categorycode = ?"); - $sth_delete->execute($branch, $categorycode); } - Koha::CirculationRules->set_rule( + Koha::CirculationRules->set_rules( { - branchcode => $branch, - categorycode => $categorycode, + categorycode => $categorycode eq '*' ? undef : $categorycode, + branchcode => $branch eq '*' ? undef : $branch, itemtype => undef, - rule_name => 'max_holds', - rule_value => undef, + rules => { + max_holds => undef, + patron_maxissueqty => undef, + patron_maxonsiteissueqty => undef, + } } ); } @@ -156,7 +158,10 @@ elsif ($op eq 'add') { $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_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 = undef if $maxissueqty !~ /^\d+/; @@ -174,6 +179,7 @@ elsif ($op eq 'add') { my $article_requests = $input->param('article_requests') || 'no'; my $overduefinescap = $input->param('overduefinescap') || undef; 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 $params = { @@ -187,8 +193,6 @@ elsif ($op eq 'add') { firstremind => $firstremind, chargeperiod => $chargeperiod, chargeperiod_charge_at => $chargeperiod_charge_at, - maxissueqty => $maxissueqty, - maxonsiteissueqty => $maxonsiteissueqty, renewalsallowed => $renewalsallowed, renewalperiod => $renewalperiod, norenewalbefore => $norenewalbefore, @@ -197,6 +201,7 @@ elsif ($op eq 'add') { 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, issuelength => $issuelength, lengthunit => $lengthunit, hardduedate => $hardduedate, @@ -207,6 +212,7 @@ elsif ($op eq 'add') { overduefinescap => $overduefinescap, cap_fine_to_replacement_price => $cap_fine_to_replacement_price, article_requests => $article_requests, + note => $note, }; my $issuingrule = Koha::IssuingRules->find({categorycode => $bor, itemtype => $itemtype, branchcode => $br}); @@ -216,19 +222,31 @@ elsif ($op eq 'add') { Koha::IssuingRule->new()->set($params)->store(); } + Koha::CirculationRules->set_rules( + { + categorycode => $bor, + itemtype => $itemtype, + branchcode => $br, + rules => { + maxissueqty => $maxissueqty, + maxonsiteissueqty => $maxonsiteissueqty, + } + } + ); + } elsif ($op eq "set-branch-defaults") { my $categorycode = $input->param('categorycode'); - my $maxissueqty = $input->param('maxissueqty'); - my $maxonsiteissueqty = $input->param('maxonsiteissueqty'); + 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'); - $maxissueqty =~ s/\s//g; - $maxissueqty = undef if $maxissueqty !~ /^\d+/; - $maxonsiteissueqty =~ s/\s//g; - $maxonsiteissueqty = undef if $maxonsiteissueqty !~ /^\d+/; + $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; @@ -238,40 +256,64 @@ elsif ($op eq "set-branch-defaults") { my $sth_search = $dbh->prepare("SELECT count(*) AS total FROM default_circ_rules"); my $sth_insert = $dbh->prepare("INSERT INTO default_circ_rules - (maxissueqty, maxonsiteissueqty, holdallowed, hold_fulfillment_policy, returnbranch) - VALUES (?, ?, ?, ?, ?)"); + (holdallowed, hold_fulfillment_policy, returnbranch) + VALUES (?, ?, ?)"); my $sth_update = $dbh->prepare("UPDATE default_circ_rules - SET maxissueqty = ?, maxonsiteissueqty = ?, holdallowed = ?, hold_fulfillment_policy = ?, returnbranch = ?"); + SET holdallowed = ?, hold_fulfillment_policy = ?, returnbranch = ?"); $sth_search->execute(); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $hold_fulfillment_policy, $returnbranch); + $sth_update->execute($holdallowed, $hold_fulfillment_policy, $returnbranch); } else { - $sth_insert->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $hold_fulfillment_policy, $returnbranch); + $sth_insert->execute($holdallowed, $hold_fulfillment_policy, $returnbranch); } + + Koha::CirculationRules->set_rules( + { + categorycode => undef, + itemtype => undef, + branchcode => undef, + rules => { + patron_maxissueqty => $patron_maxissueqty, + patron_maxonsiteissueqty => $patron_maxonsiteissueqty, + } + } + ); } else { my $sth_search = $dbh->prepare("SELECT count(*) AS total FROM default_branch_circ_rules WHERE branchcode = ?"); my $sth_insert = $dbh->prepare("INSERT INTO default_branch_circ_rules - (branchcode, maxissueqty, maxonsiteissueqty, holdallowed, hold_fulfillment_policy, returnbranch) - VALUES (?, ?, ?, ?, ?, ?)"); + (branchcode, holdallowed, hold_fulfillment_policy, returnbranch) + VALUES (?, ?, ?, ?)"); my $sth_update = $dbh->prepare("UPDATE default_branch_circ_rules - SET maxissueqty = ?, maxonsiteissueqty = ?, holdallowed = ?, hold_fulfillment_policy = ?, returnbranch = ? + SET holdallowed = ?, hold_fulfillment_policy = ?, returnbranch = ? WHERE branchcode = ?"); $sth_search->execute($branch); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $hold_fulfillment_policy, $returnbranch, $branch); + $sth_update->execute($holdallowed, $hold_fulfillment_policy, $returnbranch, $branch); } else { - $sth_insert->execute($branch, $maxissueqty, $maxonsiteissueqty, $holdallowed, $hold_fulfillment_policy, $returnbranch); + $sth_insert->execute($branch, $holdallowed, $hold_fulfillment_policy, $returnbranch); } + + Koha::CirculationRules->set_rules( + { + categorycode => undef, + itemtype => undef, + branchcode => $branch, + rules => { + patron_maxissueqty => $patron_maxissueqty, + patron_maxonsiteissueqty => $patron_maxonsiteissueqty, + } + } + ); } Koha::CirculationRules->set_rule( { branchcode => $branch, - categorycode => '*', + categorycode => undef, itemtype => undef, rule_name => 'max_holds', rule_value => $max_holds, @@ -280,139 +322,68 @@ elsif ($op eq "set-branch-defaults") { } elsif ($op eq "add-branch-cat") { my $categorycode = $input->param('categorycode'); - my $maxissueqty = $input->param('maxissueqty'); - my $maxonsiteissueqty = $input->param('maxonsiteissueqty'); + my $patron_maxissueqty = $input->param('patron_maxissueqty'); + my $patron_maxonsiteissueqty = $input->param('patron_maxonsiteissueqty'); my $max_holds = $input->param('max_holds'); - $maxissueqty =~ s/\s//g; - $maxissueqty = undef if $maxissueqty !~ /^\d+/; - $maxonsiteissueqty =~ s/\s//g; - $maxonsiteissueqty = undef if $maxonsiteissueqty !~ /^\d+/; + $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 "*") { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_circ_rules"); - my $sth_insert = $dbh->prepare(q| - INSERT INTO default_circ_rules - (maxissueqty, maxonsiteissueqty, max_holds) - VALUES (?, ?, ?) - |); - my $sth_update = $dbh->prepare(q| - UPDATE default_circ_rules - SET maxissueqty = ?, - maxonsiteissueqty = ?, - max_holds = ? - |); - - $sth_search->execute(); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute( $maxissueqty, $maxonsiteissueqty ); - } else { - $sth_insert->execute( $maxissueqty, $maxonsiteissueqty ); - } - - Koha::CirculationRules->set_rule( + Koha::CirculationRules->set_rules( { - branchcode => undef, categorycode => undef, itemtype => undef, - rule_name => 'max_holds', - rule_value => $max_holds, + branchcode => undef, + rules => { + max_holds => $max_holds, + patron_maxissueqty => $patron_maxissueqty, + patron_maxonsiteissueqty => $patron_maxonsiteissueqty, + } } ); } else { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_borrower_circ_rules - WHERE categorycode = ?"); - my $sth_insert = $dbh->prepare(q| - INSERT INTO default_borrower_circ_rules - (categorycode, maxissueqty, maxonsiteissueqty, max_holds) - VALUES (?, ?, ?, ?) - |); - my $sth_update = $dbh->prepare(q| - UPDATE default_borrower_circ_rules - SET maxissueqty = ?, - maxonsiteissueqty = ?, - max_holds = ? - WHERE categorycode = ? - |); - $sth_search->execute($categorycode); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute( $maxissueqty, $maxonsiteissueqty, $categorycode ); - } else { - $sth_insert->execute( $categorycode, $maxissueqty, $maxonsiteissueqty ); - } - - Koha::CirculationRules->set_rule( + Koha::CirculationRules->set_rules( { - branchcode => '*', + branchcode => undef, categorycode => $categorycode, itemtype => undef, - rule_name => 'max_holds', - rule_value => $max_holds, + rules => { + max_holds => $max_holds, + patron_maxissueqty => $patron_maxissueqty, + patron_maxonsiteissueqty => $patron_maxonsiteissueqty, + } } ); } } elsif ($categorycode eq "*") { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_branch_circ_rules - WHERE branchcode = ?"); - my $sth_insert = $dbh->prepare(q| - INSERT INTO default_branch_circ_rules - (branchcode, maxissueqty, maxonsiteissueqty) - VALUES (?, ?, ?) - |); - my $sth_update = $dbh->prepare(q| - UPDATE default_branch_circ_rules - SET maxissueqty = ?, - maxonsiteissueqty = ? - WHERE branchcode = ? - |); - $sth_search->execute($branch); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($maxissueqty, $maxonsiteissueqty, $branch); - } else { - $sth_insert->execute($branch, $maxissueqty, $maxonsiteissueqty); - } - } else { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM branch_borrower_circ_rules - WHERE branchcode = ? - AND categorycode = ?"); - my $sth_insert = $dbh->prepare(q| - INSERT INTO branch_borrower_circ_rules - (branchcode, categorycode, maxissueqty, maxonsiteissueqty, max_holds) - VALUES (?, ?, ?, ?, ?) - |); - my $sth_update = $dbh->prepare(q| - UPDATE branch_borrower_circ_rules - SET maxissueqty = ?, - maxonsiteissueqty = ? - max_holds = ? - WHERE branchcode = ? - AND categorycode = ? - |); - - $sth_search->execute($branch, $categorycode); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($maxissueqty, $maxonsiteissueqty, $max_holds, $branch, $categorycode); - } else { - $sth_insert->execute($branch, $categorycode, $maxissueqty, $maxonsiteissueqty, $max_holds); - } - - Koha::CirculationRules->set_rule( + Koha::CirculationRules->set_rules( { + categorycode => undef, + itemtype => undef, branchcode => $branch, + rules => { + max_holds => $max_holds, + patron_maxissueqty => $patron_maxissueqty, + patron_maxonsiteissueqty => $patron_maxonsiteissueqty, + } + } + ); + } else { + Koha::CirculationRules->set_rules( + { categorycode => $categorycode, itemtype => undef, - rule_name => 'max_holds', - rule_value => $max_holds, + branchcode => $branch, + rules => { + max_holds => $max_holds, + patron_maxissueqty => $patron_maxissueqty, + patron_maxonsiteissueqty => $patron_maxonsiteissueqty, + } } ); } @@ -580,40 +551,6 @@ while (my $row = $sth2->fetchrow_hashref) { my @sorted_row_loop = sort by_category_and_itemtype @row_loop; -my $sth_branch_cat; -if ($branch eq "*") { - $sth_branch_cat = $dbh->prepare(" - SELECT default_borrower_circ_rules.*, categories.description AS humancategorycode - FROM default_borrower_circ_rules - JOIN categories USING (categorycode) - - "); - $sth_branch_cat->execute(); -} else { - $sth_branch_cat = $dbh->prepare(" - SELECT branch_borrower_circ_rules.*, categories.description AS humancategorycode - FROM branch_borrower_circ_rules - JOIN categories USING (categorycode) - WHERE branch_borrower_circ_rules.branchcode = ? - "); - $sth_branch_cat->execute($branch); -} - -my @branch_cat_rules = (); -while (my $row = $sth_branch_cat->fetchrow_hashref) { - push @branch_cat_rules, $row; -} -my @sorted_branch_cat_rules = sort { $a->{'humancategorycode'} cmp $b->{'humancategorycode'} } @branch_cat_rules; - -# note undef maxissueqty so that template can deal with them -foreach my $entry (@sorted_branch_cat_rules, @sorted_row_loop) { - $entry->{unlimited_maxissueqty} = 1 unless defined($entry->{maxissueqty}); - $entry->{unlimited_maxonsiteissueqty} = 1 unless defined($entry->{maxonsiteissueqty}); - $entry->{unlimited_max_holds} = 1 unless defined($entry->{max_holds}); -} - -@sorted_row_loop = sort by_category_and_itemtype @row_loop; - my $sth_branch_item; if ($branch eq "*") { $sth_branch_item = $dbh->prepare(" @@ -654,7 +591,6 @@ foreach my $entry (@sorted_branch_item_rules) { $template->param(show_branch_cat_rule_form => 1); $template->param(branch_item_rule_loop => \@sorted_branch_item_rules); -$template->param(branch_cat_rule_loop => \@sorted_branch_cat_rules); my $sth_defaults; if ($branch eq "*") {