[OPEN-ILS-DEV] Possible Bugs in Circulate.pm (1.6)

Dan Wells dbw2 at calvin.edu
Wed Jan 13 15:05:18 EST 2010


Bill,

Thanks again for taking a look at this.  Attached is a patch against trunk to formalize these suggested changes.

Dan


================================================
Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.

Signed-off-by: Dan Wells <dbw2 at calvin.edu>
================================================

>>> On 1/13/2010 at 10:03 AM, Bill Erickson <erickson at esilibrary.com> wrote:
> On Fri, Jan 8, 2010 at 5:32 PM, Dan Wells <dbw2 at calvin.edu> wrote:
> 
>> Hello all,
>>
>> With the help of Jason and Dan S., it was determined that an error our
>> library was getting when trying to circulate items with a status of
>> 'Reserves' only happens when using in-db circ rules.  After some
>> troubleshooting, I found at least two separate issues are at the root of
>> this.
>>
>> First, it seems that 'run_indb_circ_test()' does both patron checks and
>> copy checks in one swoop, so you end up getting the 'COPY_NOT_AVAILABLE'
>> permit failure when running 'run_patron_permit_scripts()'.  This particular
>> permit failure needs a "copy object" as its payload, but since
>> 'run_patron_permit_scripts()' is not expecting to deal with copy permits, it
>> doesn't fill it.
>>
>> I think we have a number of choices for a fix here.  The simplest to is
>> duplicate the code near the end of 'run_copy_permit_scripts()' and add it to
>> the end of 'run_patron_permit_scripts()':
>>
>>   for (@allevents) {
>>      $_->{payload} = $copy if
>>            ($_->{textcode} eq 'COPY_NOT_AVAILABLE');
>>   }
>>
>>
>> This solution works around the issue but doesn't really address the bigger
>> problem, which is that run_indb_circ_test() is returning non-patron level
>> failures to run_patron_permit_scripts().  In addition, run_indb_circ_test()
>> ends up getting called twice when it doesn't really need to be.  It seems
>> like these function calls in general should be reworked in some minor way,
>> and I am happy to do it, but it might be done more quickly and safely by
>> someone more familiar with the reach of these functions.
>>
> 
> 
> On the contrary, I think this is a fine solution.  One of the nice things
> about in-db circ is that it doesn't differentiate between patron and copy
> permit operations.  It just returns a set of failure reasons.  If handled
> properly, the caller gets more of a full picture of the problem and has a
> better idea of what he/she is overriding if an override is used.  What we
> have in place now for in-db circ is an imperfect blend of old and new and,
> as much as possible, I'd like to move toward the new without breaking the
> old.  If that means adding more objects (in this case, the copy) to the
> failure events for consistency, then I think we should add them.
> 
> run_indb_circ_test() does get called twice as part of this blend of old and
> new, but the routine exits early if it's already been called.  IOW, it's not
> actually going to the DB more than once.
> 
> I'm not saying the code couldn't use some streamlining, but I'm not sure now
> is the time (more below).
> 
> 
>>
>> Aside from this, there is another difference in the code which ends up
>> causing further trouble for the in-db folk.  If you use legacy scripts, your
>> $self-copy is built inside of mk_script_runner(), but if you are using
>> in-db, $self->copy is built by mk_env().  It turns out that these "copy"
>> variables are not being created the same.  More specifically, mk_env()
>> leaves out a number of things, status information included.  This can be
>> fixed by changing (within mk_env()):
>>
>>    unless($self->is_noncat) {
>>        my $copy;
>>            my $flesh = {
>>                    flesh => 2,
>>                    flesh_fields => {acp => ['call_number'], acn =>
>> ['record']}
>>            };
>>
>> to:
>>
>>    unless($self->is_noncat) {
>>        my $copy;
>>            my $flesh = {
>>                    flesh => 2,
>>                    flesh_fields => {acp => ['location', 'status',
>> 'circ_lib', 'age_protect', 'call_number'], acn => ['record']}
>>            };
>>
>> I am not sure about needing all of that information, but this matches the
>> object as it is built in mk_script_runner().
>>
>>
> mk_env() fetches less data because using in-db circ means it doesn't need
> all of that data.  However, if the staff client is expecting those fields to
> be fleshed, then I'm all in favor of adding them.  Also, when we add support
> for script callbacks (in-db circ rule "falls through" to a JS script for the
> final decision), we'll want that data to be available in the copy.
> 
> As far as general reworking goes, I would like to suggest that we get
> support for script callbacks in place then pick a release to drop support
> for legacy circ scripts.  Once that decision is made and the relevant branch
> exists, there is a lot of cleanup we could do to Circulate.pm.
> 
> Hope this helps.  Thanks, Dan!
> 
> -b
> 
> -- 
> Bill Erickson
> | VP, Software Development & Integration
> | Equinox Software, Inc. / The Evergreen Experts
> | phone: 877-OPEN-ILS (673-6457)
> | email: erickson at esilibrary.com 
> | web: http://esilibrary.com 
> 
> Please come by and visit the Equinox team
> and learn more about Evergreen
> ALA MidWinter
> January 15-18, 2010
> booth # 2064
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Circulate.pm.patch
Url: http://libmail.georgialibraries.org/pipermail/open-ils-dev/attachments/20100113/f3080672/attachment.txt 


More information about the Open-ils-dev mailing list