X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=admin%2Fsmart-rules.pl;h=ae14a8e8ebb32db31fd1a4f263d80d6a0a2aa1e1;hb=35265c0a9bbdb20f40fa49f592aa9a772d27f253;hp=2722f6dd6b203dd168c5c59289fad90767122110;hpb=4750d321ec684c3fb9d7d9b0958ca92b0c3f4b32;p=koha.git diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl index 2722f6dd6b..ae14a8e8eb 100755 --- a/admin/smart-rules.pl +++ b/admin/smart-rules.pl @@ -17,17 +17,24 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; use CGI qw ( -utf8 ); use C4::Context; use C4::Output; use C4::Auth; use C4::Koha; use C4::Debug; -use C4::Branch; # GetBranches use Koha::DateUtils; use Koha::Database; +use Koha::IssuingRule; +use Koha::IssuingRules; +use Koha::Logger; +use Koha::RefundLostItemFeeRule; +use Koha::RefundLostItemFeeRules; +use Koha::Libraries; +use Koha::CirculationRules; +use Koha::Patron::Categories; +use Koha::Caches; my $input = CGI->new; my $dbh = C4::Context->dbh; @@ -44,8 +51,23 @@ my ($template, $loggedinuser, $cookie) }); my $type=$input->param('type'); -my $branch = $input->param('branch') || ( C4::Branch::onlymine() ? ( C4::Branch::mybranch() || '*' ) : '*' ); + +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() || '*' ) : '*'; + } +} +$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::IssuingRules::GUESSED_ITEMTYPES_KEY ); if ($op eq 'delete') { my $itemtype = $input->param('itemtype'); @@ -76,6 +98,15 @@ elsif ($op eq 'delete-branch-cat') { AND categorycode = ?"); $sth_delete->execute($branch, $categorycode); } + Koha::CirculationRules->set_rule( + { + branchcode => $branch, + categorycode => $categorycode, + itemtype => undef, + rule_name => 'max_holds', + rule_value => undef, + } + ); } elsif ($op eq 'delete-branch-item') { my $itemtype = $input->param('itemtype'); @@ -108,6 +139,7 @@ elsif ($op eq 'add') { my $finedays = $input->param('finedays'); my $maxsuspensiondays = $input->param('maxsuspensiondays'); $maxsuspensiondays = undef 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'); @@ -116,56 +148,73 @@ elsif ($op eq 'add') { my $renewalsallowed = $input->param('renewalsallowed'); my $renewalperiod = $input->param('renewalperiod'); my $norenewalbefore = $input->param('norenewalbefore'); - $norenewalbefore = undef if $norenewalbefore eq '0' or $norenewalbefore =~ /^\s*$/; + $norenewalbefore = undef 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 = undef if $no_auto_renewal_after =~ /^\s*$/; + my $no_auto_renewal_after_hard_limit = $input->param('no_auto_renewal_after_hard_limit') || undef; + $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 = undef if $maxissueqty !~ /^\d+/; $maxonsiteissueqty =~ s/\s//g; $maxonsiteissueqty = undef if $maxonsiteissueqty !~ /^\d+/; my $issuelength = $input->param('issuelength'); + $issuelength = $issuelength eq q{} ? undef : $issuelength; my $lengthunit = $input->param('lengthunit'); - my $hardduedate = $input->param('hardduedate'); + 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') || undef; - $debug and warn "Adding $br, $bor, $itemtype, $fine, $maxissueqty, $maxonsiteissueqty"; - - my $schema = Koha::Database->new()->schema(); - my $rs = $schema->resultset('Issuingrule'); + my $cap_fine_to_replacement_price = $input->param('cap_fine_to_replacement_price') eq 'on'; + $debug and warn "Adding $br, $bor, $itemtype, $fine, $maxissueqty, $maxonsiteissueqty, $cap_fine_to_replacement_price"; my $params = { - branchcode => $br, - categorycode => $bor, - itemtype => $itemtype, - fine => $fine, - finedays => $finedays, - maxsuspensiondays => $maxsuspensiondays, - firstremind => $firstremind, - chargeperiod => $chargeperiod, - chargeperiod_charge_at => $chargeperiod_charge_at, - maxissueqty => $maxissueqty, - maxonsiteissueqty => $maxonsiteissueqty, - renewalsallowed => $renewalsallowed, - renewalperiod => $renewalperiod, - norenewalbefore => $norenewalbefore, - auto_renew => $auto_renew, - reservesallowed => $reservesallowed, - issuelength => $issuelength, - lengthunit => $lengthunit, - hardduedate => $hardduedate, - hardduedatecompare => $hardduedatecompare, - rentaldiscount => $rentaldiscount, - onshelfholds => $onshelfholds, - opacitemholds => $opacitemholds, - overduefinescap => $overduefinescap, + branchcode => $br, + categorycode => $bor, + itemtype => $itemtype, + fine => $fine, + finedays => $finedays, + maxsuspensiondays => $maxsuspensiondays, + suspension_chargeperiod => $suspension_chargeperiod, + firstremind => $firstremind, + chargeperiod => $chargeperiod, + chargeperiod_charge_at => $chargeperiod_charge_at, + maxissueqty => $maxissueqty, + maxonsiteissueqty => $maxonsiteissueqty, + 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, }; - $rs->update_or_create($params); + my $issuingrule = Koha::IssuingRules->find({categorycode => $bor, itemtype => $itemtype, branchcode => $br}); + if ($issuingrule) { + $issuingrule->set($params)->store(); + } else { + Koha::IssuingRule->new()->set($params)->store(); + } } elsif ($op eq "set-branch-defaults") { @@ -173,6 +222,7 @@ elsif ($op eq "set-branch-defaults") { my $maxissueqty = $input->param('maxissueqty'); my $maxonsiteissueqty = $input->param('maxonsiteissueqty'); my $holdallowed = $input->param('holdallowed'); + my $hold_fulfillment_policy = $input->param('hold_fulfillment_policy'); my $returnbranch = $input->param('returnbranch'); $maxissueqty =~ s/\s//g; $maxissueqty = undef if $maxissueqty !~ /^\d+/; @@ -185,34 +235,34 @@ 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, returnbranch) - VALUES (?, ?, ?, ?)"); + (maxissueqty, maxonsiteissueqty, holdallowed, hold_fulfillment_policy, returnbranch) + VALUES (?, ?, ?, ?, ?)"); my $sth_update = $dbh->prepare("UPDATE default_circ_rules - SET maxissueqty = ?, maxonsiteissueqty = ?, holdallowed = ?, returnbranch = ?"); + SET maxissueqty = ?, maxonsiteissueqty = ?, holdallowed = ?, hold_fulfillment_policy = ?, returnbranch = ?"); $sth_search->execute(); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $returnbranch); + $sth_update->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $hold_fulfillment_policy, $returnbranch); } else { - $sth_insert->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $returnbranch); + $sth_insert->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $hold_fulfillment_policy, $returnbranch); } } 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, returnbranch) - VALUES (?, ?, ?, ?, ?)"); + (branchcode, maxissueqty, maxonsiteissueqty, holdallowed, hold_fulfillment_policy, returnbranch) + VALUES (?, ?, ?, ?, ?, ?)"); my $sth_update = $dbh->prepare("UPDATE default_branch_circ_rules - SET maxissueqty = ?, maxonsiteissueqty = ?, holdallowed = ?, returnbranch = ? + SET maxissueqty = ?, maxonsiteissueqty = ?, 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, $returnbranch, $branch); + $sth_update->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $hold_fulfillment_policy, $returnbranch, $branch); } else { - $sth_insert->execute($branch, $maxissueqty, $maxonsiteissueqty, $holdallowed, $returnbranch); + $sth_insert->execute($branch, $maxissueqty, $maxonsiteissueqty, $holdallowed, $hold_fulfillment_policy, $returnbranch); } } } @@ -220,10 +270,13 @@ elsif ($op eq "add-branch-cat") { my $categorycode = $input->param('categorycode'); my $maxissueqty = $input->param('maxissueqty'); my $maxonsiteissueqty = $input->param('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+/; + $max_holds =~ s/\s//g; + $max_holds = undef if $max_holds !~ /^\d+/; if ($branch eq "*") { if ($categorycode eq "*") { @@ -231,44 +284,66 @@ elsif ($op eq "add-branch-cat") { FROM default_circ_rules"); my $sth_insert = $dbh->prepare(q| INSERT INTO default_circ_rules - (maxissueqty, maxonsiteissueqty) - VALUES (?, ?) + (maxissueqty, maxonsiteissueqty, max_holds) + VALUES (?, ?, ?) |); my $sth_update = $dbh->prepare(q| UPDATE default_circ_rules SET maxissueqty = ?, - maxonsiteissueqty = ? + maxonsiteissueqty = ?, + max_holds = ? |); $sth_search->execute(); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($maxissueqty, $maxonsiteissueqty); + $sth_update->execute( $maxissueqty, $maxonsiteissueqty ); } else { - $sth_insert->execute($maxissueqty, $maxonsiteissueqty); + $sth_insert->execute( $maxissueqty, $maxonsiteissueqty ); } + + Koha::CirculationRules->set_rule( + { + branchcode => undef, + categorycode => undef, + itemtype => undef, + rule_name => 'max_holds', + rule_value => $max_holds, + } + ); } 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) - VALUES (?, ?, ?) + (categorycode, maxissueqty, maxonsiteissueqty, max_holds) + VALUES (?, ?, ?, ?) |); my $sth_update = $dbh->prepare(q| UPDATE default_borrower_circ_rules SET maxissueqty = ?, - maxonsiteissueqty = ? + maxonsiteissueqty = ?, + max_holds = ? WHERE categorycode = ? |); - $sth_search->execute($branch); + $sth_search->execute($categorycode); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($maxissueqty, $maxonsiteissueqty, $categorycode); + $sth_update->execute( $maxissueqty, $maxonsiteissueqty, $categorycode ); } else { - $sth_insert->execute($categorycode, $maxissueqty, $maxonsiteissueqty); + $sth_insert->execute( $categorycode, $maxissueqty, $maxonsiteissueqty ); } + + Koha::CirculationRules->set_rule( + { + branchcode => undef, + categorycode => $categorycode, + itemtype => undef, + rule_name => 'max_holds', + rule_value => $max_holds, + } + ); } } elsif ($categorycode eq "*") { my $sth_search = $dbh->prepare("SELECT count(*) AS total @@ -299,13 +374,14 @@ elsif ($op eq "add-branch-cat") { AND categorycode = ?"); my $sth_insert = $dbh->prepare(q| INSERT INTO branch_borrower_circ_rules - (branchcode, categorycode, maxissueqty, maxonsiteissueqty) - VALUES (?, ?, ?, ?) + (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 = ? |); @@ -313,16 +389,28 @@ elsif ($op eq "add-branch-cat") { $sth_search->execute($branch, $categorycode); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($maxissueqty, $maxonsiteissueqty, $branch, $categorycode); + $sth_update->execute($maxissueqty, $maxonsiteissueqty, $max_holds, $branch, $categorycode); } else { - $sth_insert->execute($branch, $categorycode, $maxissueqty, $maxonsiteissueqty); + $sth_insert->execute($branch, $categorycode, $maxissueqty, $maxonsiteissueqty, $max_holds); } + + Koha::CirculationRules->set_rule( + { + branchcode => $branch, + categorycode => $categorycode, + itemtype => undef, + rule_name => 'max_holds', + rule_value => $max_holds, + } + ); } } elsif ($op eq "add-branch-item") { - my $itemtype = $input->param('itemtype'); - my $holdallowed = $input->param('holdallowed'); - my $returnbranch = $input->param('returnbranch'); + 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+/; @@ -331,34 +419,34 @@ elsif ($op eq "add-branch-item") { my $sth_search = $dbh->prepare("SELECT count(*) AS total FROM default_circ_rules"); my $sth_insert = $dbh->prepare("INSERT INTO default_circ_rules - (holdallowed, returnbranch) - VALUES (?, ?)"); + (holdallowed, hold_fulfillment_policy, returnbranch) + VALUES (?, ?, ?)"); my $sth_update = $dbh->prepare("UPDATE default_circ_rules - SET holdallowed = ?, returnbranch = ?"); + SET holdallowed = ?, hold_fulfillment_policy = ?, returnbranch = ?"); $sth_search->execute(); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($holdallowed, $returnbranch); + $sth_update->execute($holdallowed, $hold_fulfillment_policy, $returnbranch); } else { - $sth_insert->execute($holdallowed, $returnbranch); + $sth_insert->execute($holdallowed, $hold_fulfillment_policy, $returnbranch); } } else { my $sth_search = $dbh->prepare("SELECT count(*) AS total FROM default_branch_item_rules WHERE itemtype = ?"); my $sth_insert = $dbh->prepare("INSERT INTO default_branch_item_rules - (itemtype, holdallowed, returnbranch) - VALUES (?, ?, ?)"); + (itemtype, holdallowed, hold_fulfillment_policy, returnbranch) + VALUES (?, ?, ?, ?)"); my $sth_update = $dbh->prepare("UPDATE default_branch_item_rules - SET holdallowed = ?, returnbranch = ? + SET holdallowed = ?, hold_fulfillment_policy = ?, returnbranch = ? WHERE itemtype = ?"); $sth_search->execute($itemtype); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($holdallowed, $returnbranch, $itemtype); + $sth_update->execute($holdallowed, $hold_fulfillment_policy, $returnbranch, $itemtype); } else { - $sth_insert->execute($itemtype, $holdallowed, $returnbranch); + $sth_insert->execute($itemtype, $holdallowed, $hold_fulfillment_policy, $returnbranch); } } } elsif ($itemtype eq "*") { @@ -366,17 +454,17 @@ elsif ($op eq "add-branch-item") { FROM default_branch_circ_rules WHERE branchcode = ?"); my $sth_insert = $dbh->prepare("INSERT INTO default_branch_circ_rules - (branchcode, holdallowed, returnbranch) - VALUES (?, ?, ?)"); + (branchcode, holdallowed, hold_fulfillment_policy, returnbranch) + VALUES (?, ?, ?, ?)"); my $sth_update = $dbh->prepare("UPDATE default_branch_circ_rules - SET holdallowed = ?, 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($holdallowed, $returnbranch, $branch); + $sth_update->execute($holdallowed, $hold_fulfillment_policy, $returnbranch, $branch); } else { - $sth_insert->execute($branch, $holdallowed, $returnbranch); + $sth_insert->execute($branch, $holdallowed, $hold_fulfillment_policy, $returnbranch); } } else { my $sth_search = $dbh->prepare("SELECT count(*) AS total @@ -384,65 +472,80 @@ elsif ($op eq "add-branch-item") { WHERE branchcode = ? AND itemtype = ?"); my $sth_insert = $dbh->prepare("INSERT INTO branch_item_rules - (branchcode, itemtype, holdallowed, returnbranch) - VALUES (?, ?, ?, ?)"); + (branchcode, itemtype, holdallowed, hold_fulfillment_policy, returnbranch) + VALUES (?, ?, ?, ?, ?)"); my $sth_update = $dbh->prepare("UPDATE branch_item_rules - SET holdallowed = ?, returnbranch = ? + SET holdallowed = ?, hold_fulfillment_policy = ?, returnbranch = ? WHERE branchcode = ? AND itemtype = ?"); $sth_search->execute($branch, $itemtype); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($holdallowed, $returnbranch, $branch, $itemtype); + $sth_update->execute($holdallowed, $hold_fulfillment_policy, $returnbranch, $branch, $itemtype); } else { - $sth_insert->execute($branch, $itemtype, $holdallowed, $returnbranch); + $sth_insert->execute($branch, $itemtype, $holdallowed, $hold_fulfillment_policy, $returnbranch); } } } - -my $branches = GetBranches(); -my @branchloop; -for my $thisbranch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname} } keys %$branches) { - push @branchloop, { - value => $thisbranch, - selected => $thisbranch eq $branch, - branchname => $branches->{$thisbranch}->{'branchname'}, - }; +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 + eval { + # Delete it so it picks the default + Koha::RefundLostItemFeeRules->find({ + branchcode => $branch + })->delete; + }; + } + } else { + my $refundRule = + Koha::RefundLostItemFeeRules->find({ + branchcode => $branch + }) // Koha::RefundLostItemFeeRule->new; + $refundRule->set({ + branchcode => $branch, + refund => $refund + })->store; + } } -my $sth=$dbh->prepare("SELECT description,categorycode FROM categories ORDER BY description"); -$sth->execute; -my @category_loop; -while (my $data=$sth->fetchrow_hashref){ - push @category_loop,$data; -} +my $refundLostItemFeeRule = Koha::RefundLostItemFeeRules->find({ branchcode => $branch }); +$template->param( + refundLostItemFeeRule => $refundLostItemFeeRule, + defaultRefundRule => Koha::RefundLostItemFeeRules->_default_rule +); + +my $patron_categories = Koha::Patron::Categories->search({}, { order_by => ['description'] }); -$sth->finish; -$sth=$dbh->prepare("SELECT description,itemtype FROM itemtypes ORDER BY description"); -$sth->execute; -# $i=0; my @row_loop; -my @itemtypes; -while (my $row=$sth->fetchrow_hashref){ - push @itemtypes,$row; -} +my $itemtypes = Koha::ItemTypes->search_with_localization; my $sth2 = $dbh->prepare(" - SELECT issuingrules.*, itemtypes.description AS humanitemtype, categories.description AS humancategorycode + SELECT issuingrules.*, + itemtypes.description AS humanitemtype, + categories.description AS humancategorycode, + COALESCE( localization.translation, itemtypes.description ) AS translated_description FROM issuingrules LEFT JOIN itemtypes ON (itemtypes.itemtype = issuingrules.itemtype) LEFT JOIN categories ON (categories.categorycode = issuingrules.categorycode) + LEFT JOIN localization ON issuingrules.itemtype = localization.code + AND localization.entity = 'itemtypes' + AND localization.lang = ? WHERE issuingrules.branchcode = ? "); -$sth2->execute($branch); +$sth2->execute($language, $branch); while (my $row = $sth2->fetchrow_hashref) { $row->{'current_branch'} ||= $row->{'branchcode'}; - $row->{'humanitemtype'} ||= $row->{'itemtype'}; - $row->{'default_humanitemtype'} = 1 if $row->{'humanitemtype'} eq '*'; + $row->{humanitemtype} ||= $row->{itemtype}; + $row->{default_translated_description} = 1 if $row->{humanitemtype} eq '*'; $row->{'humancategorycode'} ||= $row->{'categorycode'}; $row->{'default_humancategorycode'} = 1 if $row->{'humancategorycode'} eq '*'; $row->{'fine'} = sprintf('%.2f', $row->{'fine'}); @@ -455,9 +558,13 @@ while (my $row = $sth2->fetchrow_hashref) { } else { $row->{'hardduedate'} = 0; } + if ($row->{no_auto_renewal_after_hard_limit}) { + my $dt = eval { dt_from_string( $row->{no_auto_renewal_after_hard_limit} ) }; + $row->{no_auto_renewal_after_hard_limit} = eval { output_pref( { dt => $dt, dateonly => 1 } ) } if $dt; + } + push @row_loop, $row; } -$sth->finish; my @sorted_row_loop = sort by_category_and_itemtype @row_loop; @@ -490,6 +597,7 @@ my @sorted_branch_cat_rules = sort { $a->{'humancategorycode'} cmp $b->{'humanca 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; @@ -497,31 +605,39 @@ foreach my $entry (@sorted_branch_cat_rules, @sorted_row_loop) { my $sth_branch_item; if ($branch eq "*") { $sth_branch_item = $dbh->prepare(" - SELECT default_branch_item_rules.*, itemtypes.description AS humanitemtype + SELECT default_branch_item_rules.*, + COALESCE( localization.translation, itemtypes.description ) AS translated_description FROM default_branch_item_rules JOIN itemtypes USING (itemtype) + LEFT JOIN localization ON itemtypes.itemtype = localization.code + AND localization.entity = 'itemtypes' + AND localization.lang = ? "); - $sth_branch_item->execute(); + $sth_branch_item->execute($language); } else { $sth_branch_item = $dbh->prepare(" - SELECT branch_item_rules.*, itemtypes.description AS humanitemtype + SELECT branch_item_rules.*, + COALESCE( localization.translation, itemtypes.description ) AS translated_description FROM branch_item_rules JOIN itemtypes USING (itemtype) + LEFT JOIN localization ON itemtypes.itemtype = localization.code + AND localization.entity = 'itemtypes' + AND localization.lang = ? WHERE branch_item_rules.branchcode = ? "); - $sth_branch_item->execute($branch); + $sth_branch_item->execute($language, $branch); } my @branch_item_rules = (); while (my $row = $sth_branch_item->fetchrow_hashref) { push @branch_item_rules, $row; } -my @sorted_branch_item_rules = sort { $a->{'humanitemtype'} cmp $b->{'humanitemtype'} } @branch_item_rules; +my @sorted_branch_item_rules = sort { lc $a->{translated_description} cmp lc $b->{translated_description} } @branch_item_rules; # note undef holdallowed so that template can deal with them foreach my $entry (@sorted_branch_item_rules) { - $entry->{holdallowed_any} = 1 if($entry->{holdallowed} == 2); - $entry->{holdallowed_same} = 1 if($entry->{holdallowed} == 1); + $entry->{holdallowed_any} = 1 if ( $entry->{holdallowed} == 2 ); + $entry->{holdallowed_same} = 1 if ( $entry->{holdallowed} == 1 ); } $template->param(show_branch_cat_rule_form => 1); @@ -547,21 +663,22 @@ if ($branch eq "*") { my $defaults = $sth_defaults->fetchrow_hashref; if ($defaults) { - $template->param(default_holdallowed_none => 1) if($defaults->{holdallowed} == 0); - $template->param(default_holdallowed_same => 1) if($defaults->{holdallowed} == 1); - $template->param(default_holdallowed_any => 1) if($defaults->{holdallowed} == 2); - $template->param(default_maxissueqty => $defaults->{maxissueqty}); - $template->param(default_maxonsiteissueqty => $defaults->{maxonsiteissueqty}); - $template->param(default_returnbranch => $defaults->{returnbranch}); + $template->param( default_holdallowed_none => 1 ) if ( $defaults->{holdallowed} == 0 ); + $template->param( default_holdallowed_same => 1 ) if ( $defaults->{holdallowed} == 1 ); + $template->param( default_holdallowed_any => 1 ) if ( $defaults->{holdallowed} == 2 ); + $template->param( default_hold_fulfillment_policy => $defaults->{hold_fulfillment_policy} ); + $template->param( default_maxissueqty => $defaults->{maxissueqty} ); + $template->param( default_maxonsiteissueqty => $defaults->{maxonsiteissueqty} ); + $template->param( default_returnbranch => $defaults->{returnbranch} ); } $template->param(default_rules => ($defaults ? 1 : 0)); -$template->param(categoryloop => \@category_loop, - itemtypeloop => \@itemtypes, +$template->param( + patron_categories => $patron_categories, + itemtypeloop => $itemtypes, rules => \@sorted_row_loop, - branchloop => \@branchloop, - humanbranch => ($branch ne '*' ? $branches->{$branch}->{branchname} : ''), + humanbranch => ($branch ne '*' ? $branch : ''), current_branch => $branch, definedbranch => scalar(@sorted_row_loop)>0 ); @@ -590,11 +707,11 @@ sub by_category { sub by_itemtype { my ($a, $b) = @_; - if ($a->{'default_humanitemtype'}) { - return ($b->{'default_humanitemtype'} ? 0 : 1); - } elsif ($b->{'default_humanitemtype'}) { + if ($a->{default_translated_description}) { + return ($b->{'default_translated_description'} ? 0 : 1); + } elsif ($b->{'default_translated_description'}) { return -1; } else { - return $a->{'humanitemtype'} cmp $b->{'humanitemtype'}; + return lc $a->{'translated_description'} cmp lc $b->{'translated_description'}; } }