[Koha-devel] Issuing Rules
Jesse
pianohacker at gmail.com
Tue Feb 19 21:14:41 CET 2008
Actually, this script only handles the rule creation part of it, not
the rule usage. However, I did have an idea (not yet implemented, but
I will soon) for fixing those as well.
The rules are documented as follows:
> * same branch and same borrower category, itemtype *
> * same branch and same itemtype, borrower category *
> * same itemtype and borrower category, branch *
> * everywhere
> * If nothing is set, default is 21,5 (hardcoded)0
However, GetLoanLength is the only part of Koha that actually
implements these, and clumsily at that. We can reduce those 9 selects
to a single one, using a stored function:
> CREATE FUNCTION specificity(categorycode CHAR(2), itemtype VARCHAR(6), branchcode VARCHAR(4)) RETURNS INTEGER NO SQL
> RETURN (IF(categorycode != '*', 7, 0) + IF(itemtype != '*', 5, 0) + IF(branchcode != '*', 9, 0));
This calculates how specific a given issuing rule is, given what it
specifies. For instance, a rule that defines a branch and category has
a specificity of 16, while a rule that defines a branch and itemtype
has a specificity of 14. The numbers are somewhat arbitrary, and are
mainly used because they get what the documentation says should be
gotten.
Thus, GetLoanLength's SQL can become:
> SELECT issuelength FROM issuingrules WHERE categorycode IN (?, '*') AND itemtype IN (?, '*') AND branchcode IN (?, '*')
> ORDER BY specificity(categorycode, itemtype, branchcode) DESC LIMIT 1;
This can be adapted for GetIssuingRules, CanBookBeIssued and TooMany
merely by changing the returned columns.
I know that there isn't any precedent for stored functions in Koha,
but this solves the problem with a minimum amount of fuss. It is also
entirely separate from smart-rules.pl, though specificity() could be
useful for sorting the list of rules.
--
Jesse
More information about the Koha-devel
mailing list