Chris Sharp [Fri, 7 Jul 2017 17:04:35 +0000 (13:04 -0400)]
LP#1702968 - Add missing error string - mark item damaged.
When marking an item damaged for a circulation that has been
archived/aged, the patron receives an error that the string
associated with staff.cat.util.mark_item_damaged.item_no_linked_patron
is not there. This branch adds it.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Chris Sharp [Wed, 5 Jul 2017 14:24:32 +0000 (10:24 -0400)]
LP#1702489 - Wrong join type on Acq Lineitem Detail
The Line Item Detail reporting source offers the wrong
type of nullability when nullability selection is
enabled and the user selects the Evergreen Copy ID
link (offers "Parent" but should be "Child"). This is
because the fieldmapper assumes a "has_a" relationship
between acqlid and acp when it should be a "might_have".
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Chris Sharp [Wed, 31 May 2017 12:22:58 +0000 (08:22 -0400)]
LP#1694696 - Check for blank SMS Carriers in A/T reactor
Currently, the get_sms_gateway_email subroutine does not check
for the truthiness of sms_carrier, which can result in catastrophic
failure for a running server. This adds that check.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Terran McCanna [Tue, 23 May 2017 21:21:32 +0000 (17:21 -0400)]
PINES Customization: Self-check - add note about online catalog
Added note to screen referring people to online catalog if they
wish to perform functions not available in self-check such as
paying fines and handling renewals.
Chris Sharp [Tue, 11 Apr 2017 14:20:30 +0000 (10:20 -0400)]
LP#1170514 - Upgrade script for vandelay.auto_overlay_bib_record
This script got missed in the 2.1-2.2 era and finally makes it
in nearly six years later. Not necessary for sites that began using
Evergreen since then, but harmless to run.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Certain third-party products such as collection development
management providers require copy statistics that are not
readily available in a single report. This view adds those,
which will also benefit library staff reports generally.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Terran McCanna [Mon, 6 Mar 2017 21:34:49 +0000 (16:34 -0500)]
PINES Customization - Hide shelf expire time in OPAC because it doesn't
always match how long the libraries actually keep the items on the shelves
due to local policy.
Terran McCanna [Mon, 20 Feb 2017 20:38:24 +0000 (15:38 -0500)]
New Book List Selector
I created a new library dropdown based on the existing org selector
dropdown which dynamically creates the library list for the new book
selector. This replaces the manually-coded new book list selector I
originally put in place in order to get the feature rolled out.
To test
-------
[1] Apply patch.
[2] In public catalog, add one or more bibs to the temporary
list ('My List').
[3] Click the 'View List' button, then verify that the titles
are displayed.
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org> Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Chris Sharp [Thu, 2 Feb 2017 18:07:44 +0000 (13:07 -0500)]
LP#1661346 - Add User Setting Type View reporter source
With our newly-implemented action_trigger.event_definitions
running, it is now desirable to have easier access to the SMS
settings selected by users. This is best accomplished with a
new view that will be linked from the actor.usr object.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Use the batch-by-org AOUS lookup function to fetch settings with one
cstore call across a wide set of org units. This reduces the number of
cstore calls required, significantly in some cases, for single-use hold
targeter instances (like placement time targeting, checkin retargeting).
Specifically, in cases where a hold has targetable copies at multiple
circ libs, only one cstore call is needed for each of the
circ.holds.org_unit_target_weight and
circ.holds.target_when_closed settings, as opposed to one cstore call
for each per circ lib.
Use the batch-by-org AOUS lookup function to fetch settings with one
cstore call across a wide set of org units. This reduces the number of
cstore calls required, significantly in some cases, for single-use hold
targeter instances (like placement time targeting, checkin retargeting).
Specifically, in cases where a hold has targetable copies at multiple
circ libs, only one cstore call is needed for each of the
circ.holds.org_unit_target_weight and
circ.holds.target_when_closed settings, as opposed to one cstore call
for each per circ lib.
Use the batch-by-org AOUS lookup function to fetch settings with one
cstore call across a wide set of org units. This reduces the number of
cstore calls required, significantly in some cases, for single-use hold
targeter instances (like placement time targeting, checkin retargeting).
Specifically, in cases where a hold has targetable copies at multiple
circ libs, only one cstore call is needed for each of the
circ.holds.org_unit_target_weight and
circ.holds.target_when_closed settings, as opposed to one cstore call
for each per circ lib.
Use the CStoreEditor linked to the ::Single (child) targeter object when
possible to fetch org unit setting values.
In cases where settings for many org units have to be retrieved at once,
the settings lookups can take long enough that the in-transaction editor
on the child targeter can timeout. Using the child's editor directly
for the lookups will prevent this timeout and make the lookups a little
bit faster, since a new connect will not be required for each lookup.
This timeout scenario can occur with settings like
circ.holds.max_org_unit_target_loops and
circ.holds.target_when_closed, when there is wide variety of targetable
copies, because each have to be fetched once per target-able copy circ lib.
A secondary optimization would be a batch org setting lookup that
batches on org unit instead of setting name.
Allow the caller to pass a list of hold ID's (consistent with the
current hold targeter). This resolves the issue where the checkin
process attempts to retarget a set of holds via a single targeter call.
Mike Rylander [Tue, 31 Jan 2017 17:35:05 +0000 (12:35 -0500)]
LP#1660059: Protect against null value in group field
If a nullable event grouping field is configured, and a null value is indeed
encountered when pulling together events, the Action/Trigger code will exit
unceremoniously. To prevent this, we will now collect events with either
a null grouping object or grouping field, and use a new batch invalidation
API call to get rid of them as quickly as possible after group sorting is
complete.
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Chris Sharp [Tue, 31 Jan 2017 16:18:21 +0000 (11:18 -0500)]
Adding Bill Erickson's fix for endless open cstore transactions
After applying the fix to LP#1660059, the server running A/T notices
generated multiple cstore processes without closing them. Changing
xact_commit to commit closes the cstore process after each event is
evaluated.
Chris Sharp [Sat, 28 Jan 2017 18:19:29 +0000 (13:19 -0500)]
LP#1660059 - Allow for undef value for A/T Processing Group Context Field
For an action_trigger.event_definition that uses action.hold_request.sms_notify
as the Processing Group Context Field/group_field, the event processing
shows multiple Perl warnings and the open-ils.trigger process dies.
Tracing this to the relevant code in Trigger.pm shows that there is a
check to make sure that the fieldmapper object actually exists ($node),
but then assumes that the $ident_value (the actual field) is defined/not null.
Adding an additional check fixes the problem.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Pickup and requesting org unit IDs were passed in the wrong order to
the copy permit test. This resulted in some items, particularly age
protected copies, appearing on the holds pull list even though they were
not (yet) permitted for hold capture at a remoted library.
Identify holds to process by which metarecord the hold is (ultimately)
linked to within the main holds query instead of via a secondary filter.
This avoids the overhead of starting a new batch of hold targeters,
where each process has to fetch all possible holds, then filter down to
those targetable within the current parallel slot. In thise case, each
process only retrieves the holds it plans to process.
1. Batch of tests for concerto hold 1 / title hold
2. Batch of tests for concerto hold 265 / metarecord hold with
holdable_formats restriction.
3. --skip-viable test
Bill Erickson [Tue, 7 Jun 2016 21:32:14 +0000 (17:32 -0400)]
LP#1596595 Hold targeter refactoring and optimization.
* New open-ils.hold-targeter service
* Ports hold targeter code to a Perl utility function, communicating w/
the DB via cstore instead of storage.
* Adds a new global flag 'circ.holds.retarget_interval' for configuring
the hold retarget interval in the database.
* Adds a new DB function to regenerating hold copy maps to make map
deletion and creation more efficient.
* Adds an option for targeting holds in newest to oldest order.
* Caches all org unit settings per targeter run.
* Adds support for "skip_viable" option. This tells the hold targeter
to avoid modifying any holds that target viable copies. AKA "fix
broken" mode.
For example, you might run in skip_viable mode with a retarget
interval of 24hr once a day to repair non-viable holds, then also run
the targeter in regular mode once a day with a retarget interval of 48
hours to give staff 2 days to process viable holds.
* Hold target loops logic changes:
** Org units with fewer target attempts are prioritized during loop
processing. So, instead of segregating org units into 2 categetories,
those attempted in the current loop and those not attempted, sort those
not attempted by the number number of times they have been attempted.
Within each grouping, prioritize by target weight/proximity as before.
** All org units that have been attempted less than the max configured
amount are on the table for targeting, not just those that have been
targeted less than the current loop max. If no orgs with
less-than-current-max attempts are found, try orgs that match the
current max (but are still less than the configured max).
** When activated, target looping treats the pickup lib like any
other org unit. If a targeted copy at the pickup lib remains
un-captured, at re-target time, a copy at a different branch is
chosen (if one is available) even if other copies at the pickup
lib are targetable.
* Parallel targeting support baked into service.
Teach the targeter to process a subset of holds based on the number of
parallel targeters at play and the parallel targeting slot each targeter
instance occupies.
As with the existing hold targeter, group holds by their metarecord to
avoid multiple targeter processes targeting the same sets of potential
copies.
* Logging / code refactoring and clean up.
* New hold_targeter_v2.pl script for batch hold targeting. Existing
targeter remains for backwards-compat.
hold_targeter_v2.pl options:
--verbose
Print process counts
--parallel <parallel-process-count>
Number of parallel hold processors to run. This overrides any
value found in opensrf.xml
--target-all
Target all active holds, regardless of when they were last targeted.
--skip-viable
Avoid modifying holds that currently target viable copies.
In other words, only (re)target holds in a non-viable state.
--retarget-interval
Override the 'circ.holds.retarget_interval' global_flag value.
--parallel-init-sleep
Time to wait between starting each parallel instance. Useful for
avoiding dog-piling the DB.
Terran McCanna [Tue, 3 Jan 2017 23:26:00 +0000 (18:26 -0500)]
Hide Email Checkout Receipts Option
This doesn't work in the staff client, so hiding option from the patron
self-registration form and from the patron's My Account settings until
we have moved to the web client. (It still appears in the staff client,
so can be set there, but it will be virtually non-functional if set.)
Current acq behavior is that received items get a
copy status of "In Process". This status is typically
holdable and opac_visible, and some libraries have a need
for an intermediate status between "On Order" and "In Process".
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Chris Sharp [Mon, 5 Dec 2016 22:46:02 +0000 (17:46 -0500)]
LP#1643932 - Fix search slowness when patron searching by username
Bug 1501781 introduced a feature to improve patron name searching,
but which was causing very slow queries when searching by username.
Adding an index to username solves the slowness problem.
Suggested by Mike Rylander.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Dan Pearl [Thu, 2 Jun 2016 19:17:44 +0000 (15:17 -0400)]
LP#1586509 Bug fix to LP#1352542 caused extraneous blank line to appear in
spine label. This affected LC call numbers that had only one cutter number
plus additional text following.
Signed-off-by: Dan Pearl <dpearl@cwmars.org> Signed-off-by: Kathy Lussier <klussier@masslnc.org>
The switch to toISOString() to format dates introduced an off-by-one error in
the closed dates display, showing one extra day of closure due to the timezone
being ignored in toISOString().
toLocaleDateString() is the future of locale-sensitive date formats. In XUL,
because it is an old version of Firefox, it lacks locale sensitivity, but for
the purposes of the web staff client it's a good base to build on as even
Internet Explorer supports the locale and options arguments as of IE 11.
And for the immediate purposes of showing the right dates in the closed dates
editor, it works.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Dan Scott [Mon, 12 Dec 2016 20:39:08 +0000 (15:39 -0500)]
LP#1432753 Restore "All day" verbiage to Closed Dates editor
Commit ede7e78925 replaced the JSAN calls to util.date.formatted_date() with
inline date/time handling, in the process returning times with granularity to
the minute instead of to the second. This resulted in the test for "all day"
closings always failing.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Terran McCanna [Mon, 12 Dec 2016 19:05:01 +0000 (14:05 -0500)]
Since we only have bits and pieces of Spanish translations for our
customized KPAC right now, removing the parts that would display in
Spanish if Spanish has been selected in the OPAC. In the future when
all parts of the KPAC have been translated and graphic buttons have
been switched to text buttons that can be translated, we will then
need to go back in and re-add the language markup to allow the
translations to occur.
Terran McCanna [Mon, 12 Dec 2016 19:17:51 +0000 (14:17 -0500)]
Hiding parent link from branch info pages to prevent confusion when patrons
see system hours (and other info) and think that they are the same as
branch hours.
Chris Sharp [Mon, 7 Nov 2016 12:40:24 +0000 (07:40 -0500)]
LP#1639782 - Add Active Date to Item Status Column Picker
Circ and Cataloging staff need a quick way to view the Active
Date of an item in the "Item Status" (F5) interface. This
makes that column available for selection.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Terran McCanna [Mon, 8 Aug 2016 17:31:33 +0000 (13:31 -0400)]
Addition of new item format icon for direct audio (ie, Playaways and
similar items that are pre-loaded with audiobooks and do not require
access to a computer to use).
Chris Sharp [Fri, 15 Jul 2016 20:09:56 +0000 (16:09 -0400)]
LP#1599634 - Remove DROP VIEW statement, add .sql to name.
When running the upgrade script, the DROP VIEW statement resulted in an
error since the view did not already exist. You could add IF EXISTS, but
CREATE OR REPLACE VIEW is sufficient.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
The reporter.classic_current_circ view, which is available via
Open-ILS/src/sql/Pg/example.reporter-extension.sql, was excluding
circulations because it was assuming all users have a billing address
This branch corrects that with a LEFT JOIN.
No upgrade script will be included since these views are not assumed
to be installed by all Evergreen instances. Please re-run the
example.reporter-extension.sql file to apply this change for your
instance.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>