X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=admin%2Fsmart-rules.pl;h=8221a0de252524fbc9c566cc96efe6fa7d85dd14;hb=f1b7e8b4d8f3c3dfcde5f4f3e0406430bdf3b519;hp=de090cb2a02858cb525003e587d75f6ed2bcb6c0;hpb=f86816220edb6c28b58772a551b0533c01ecbcad;p=srvgit diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl index de090cb2a0..8221a0de25 100755 --- a/admin/smart-rules.pl +++ b/admin/smart-rules.pl @@ -26,8 +26,11 @@ use C4::Auth; use C4::Koha; use C4::Debug; use C4::Branch; # GetBranches -use C4::Dates qw/format_date format_date_in_iso/; +use Koha::DateUtils; use Koha::Database; +use Koha::IssuingRule; +use Koha::IssuingRules; +use Koha::Libraries; my $input = CGI->new; my $dbh = C4::Context->dbh; @@ -44,8 +47,20 @@ 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::Branch::mybranch(); + } + else { + $branch = C4::Branch::onlymine() ? ( C4::Branch::mybranch() || '*' ) : '*'; + } +} +$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'); @@ -116,7 +131,7 @@ 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 $reservesallowed = $input->param('reservesallowed'); my $onshelfholds = $input->param('onshelfholds') || 0; @@ -126,45 +141,50 @@ elsif ($op eq 'add') { $maxonsiteissueqty = undef if $maxonsiteissueqty !~ /^\d+/; my $issuelength = $input->param('issuelength'); my $lengthunit = $input->param('lengthunit'); - my $hardduedate = $input->param('hardduedate'); - $hardduedate = format_date_in_iso($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 $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, + 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, + cap_fine_to_replacement_price => $cap_fine_to_replacement_price, }; - $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") { @@ -418,35 +438,36 @@ while (my $data=$sth->fetchrow_hashref){ } $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 = @{ GetItemTypes( style => 'array' ) }; 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->{translated_description} ||= $row->{translated_description}; + $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'}); if ($row->{'hardduedate'} && $row->{'hardduedate'} ne '0000-00-00') { - $row->{'hardduedate'} = format_date( $row->{'hardduedate'}); + my $harddue_dt = eval { dt_from_string( $row->{'hardduedate'} ) }; + $row->{'hardduedate'} = eval { output_pref( { dt => $harddue_dt, dateonly => 1 } ) } if ( $harddue_dt ); $row->{'hardduedatebefore'} = 1 if ($row->{'hardduedatecompare'} == -1); $row->{'hardduedateexact'} = 1 if ($row->{'hardduedatecompare'} == 0); $row->{'hardduedateafter'} = 1 if ($row->{'hardduedatecompare'} == 1); @@ -495,26 +516,34 @@ 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 { $a->{translated_description} cmp $b->{translated_description} } @branch_item_rules; # note undef holdallowed so that template can deal with them foreach my $entry (@sorted_branch_item_rules) { @@ -588,11 +617,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 $a->{'translated_description'} cmp $b->{'translated_description'}; } }