[open-ils-commits] [GIT] Evergreen ILS branch tags/rel_3_2_0 created. aa0ae67977b3727dd9b37b6103fcfc7aa60e5f39
Evergreen Git
git at git.evergreen-ils.org
Wed Oct 3 15:07:25 EDT 2018
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Evergreen ILS".
The branch, tags/rel_3_2_0 has been created
at aa0ae67977b3727dd9b37b6103fcfc7aa60e5f39 (commit)
- Log -----------------------------------------------------------------
commit aa0ae67977b3727dd9b37b6103fcfc7aa60e5f39
Author: Dan Wells <dbw2 at calvin.edu>
Date: Tue Sep 25 15:12:53 2018 -0400
Bumping version numbers, adding Upgrade Script and Changelog
Signed-off-by: Dan Wells <dbw2 at calvin.edu>
diff --git a/ChangeLog b/ChangeLog
index 1f72b2c..c3a1a29 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5225 @@
-Evergreen doesn't keep a GNU-style ChangeLog except in release tarballs.
-Those seeking a change log are encouraged to run 'git log -v', or read
-it online at: http://git.evergreen-ils.org/?p=Evergreen.git;a=log
+commit d34df02951bd08670687d22e43d350b39a14347f
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Mon Aug 27 12:08:37 2018 -0400
+
+ LP#1786987: Locale-less org tree cache object becomes stale
+
+ The autogen.sh script calls a function that flushes all org tree objects
+ cached by locale, but does not flush the one used when the locale is
+ unkown. This commit forces that flushing to occur.
+
+ berick: Definition of my $cache pushed up above first use.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+4 1 Open-ILS/src/perlmods/lib/OpenILS/Utils/Configure.pm
+
+commit 7df3d1640938c01ee28b5f692db13d8a3fbfbbd3
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Mon Sep 24 17:47:24 2018 -0400
+
+ Update upgrade doc version numbers
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+16 16 docs/installation/server_upgrade.adoc
+
+commit a199c376e4082f8eab0332b989c5217d91ad9242
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Mon Sep 24 17:38:19 2018 -0400
+
+ Bumping Perl version string for 3.2
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS.pm
+
+commit 44cce14902dd778865f092344f168ddceaacb3fa
+Author: Remington Steed <rjs7 at calvin.edu>
+Date: Tue Sep 25 14:54:20 2018 -0400
+
+ Docs: Clean up installation docs
+
+ - Remove redundant NodeJS section
+ - Relabel sections to distinguish between AngularJS and Angular steps
+ - Fix a few typos
+
+ Signed-off-by: Remington Steed <rjs7 at calvin.edu>
+
+1 1 docs/admin_initial_setup/migrating_patron_data.adoc
+7 19 docs/installation/server_installation.adoc
+1 1 docs/installation/server_upgrade.adoc
+
+commit 72f0af174801ec6252641e57030ba40ef840122f
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Tue Sep 25 13:04:11 2018 -0400
+
+ Translation updates - newpot
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+140 87 build/i18n/po/webstaff/webstaff.pot
+
+commit 468e6f0330da5b6922b65cc8461753c5b1aba87b
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Mon Sep 24 17:33:12 2018 -0400
+
+ Translation updates - po files
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+31 19 build/i18n/po/conify/ar-JO.po
+37 25 build/i18n/po/conify/cs-CZ.po
+31 19 build/i18n/po/conify/es-ES.po
+31 19 build/i18n/po/conify/hy-AM.po
+90 78 build/i18n/po/db.seed/ar-JO.po
+160 141 build/i18n/po/db.seed/cs-CZ.po
+68 61 build/i18n/po/db.seed/de-DE.po
+69 62 build/i18n/po/db.seed/en-CA.po
+69 62 build/i18n/po/db.seed/en-GB.po
+90 78 build/i18n/po/db.seed/es-ES.po
+71 64 build/i18n/po/db.seed/fi-FI.po
+68 61 build/i18n/po/db.seed/fr-CA.po
+68 61 build/i18n/po/db.seed/he-IL.po
+68 61 build/i18n/po/db.seed/hu-HU.po
+91 79 build/i18n/po/db.seed/hy-AM.po
+68 61 build/i18n/po/db.seed/oc-FR.po
+69 62 build/i18n/po/db.seed/pt-BR.po
+68 61 build/i18n/po/db.seed/ru-RU.po
+68 61 build/i18n/po/db.seed/sv-SE.po
+68 61 build/i18n/po/db.seed/tr-TR.po
+43 43 build/i18n/po/fm_IDL.dtd/ar-JO.po
+90 90 build/i18n/po/fm_IDL.dtd/cs-CZ.po
+32 32 build/i18n/po/fm_IDL.dtd/de-DE.po
+43 43 build/i18n/po/fm_IDL.dtd/en-CA.po
+43 43 build/i18n/po/fm_IDL.dtd/en-GB.po
+43 43 build/i18n/po/fm_IDL.dtd/es-ES.po
+43 43 build/i18n/po/fm_IDL.dtd/fi-FI.po
+34 34 build/i18n/po/fm_IDL.dtd/fr-CA.po
+32 32 build/i18n/po/fm_IDL.dtd/he-IL.po
+32 32 build/i18n/po/fm_IDL.dtd/hu-HU.po
+43 43 build/i18n/po/fm_IDL.dtd/hy-AM.po
+32 32 build/i18n/po/fm_IDL.dtd/oc-FR.po
+43 43 build/i18n/po/fm_IDL.dtd/pt-BR.po
+43 43 build/i18n/po/fm_IDL.dtd/ru-RU.po
+32 32 build/i18n/po/fm_IDL.dtd/sv-SE.po
+32 32 build/i18n/po/fm_IDL.dtd/tr-TR.po
+23 23 build/i18n/po/ils_events.xml/ar-JO.po
+24 24 build/i18n/po/ils_events.xml/cs-CZ.po
+21 21 build/i18n/po/ils_events.xml/de-DE.po
+23 23 build/i18n/po/ils_events.xml/en-CA.po
+23 23 build/i18n/po/ils_events.xml/en-GB.po
+24 24 build/i18n/po/ils_events.xml/es-ES.po
+23 23 build/i18n/po/ils_events.xml/fi-FI.po
+21 21 build/i18n/po/ils_events.xml/fr-CA.po
+21 21 build/i18n/po/ils_events.xml/he-IL.po
+21 21 build/i18n/po/ils_events.xml/hu-HU.po
+23 23 build/i18n/po/ils_events.xml/hy-AM.po
+21 21 build/i18n/po/ils_events.xml/oc-FR.po
+21 21 build/i18n/po/ils_events.xml/pt-BR.po
+21 21 build/i18n/po/ils_events.xml/ru-RU.po
+21 21 build/i18n/po/ils_events.xml/sv-SE.po
+21 21 build/i18n/po/ils_events.xml/tr-TR.po
+13 7 build/i18n/po/lang.dtd/ar-JO.po
+13 7 build/i18n/po/lang.dtd/cs-CZ.po
+5 5 build/i18n/po/lang.dtd/de-DE.po
+13 7 build/i18n/po/lang.dtd/en-CA.po
+13 7 build/i18n/po/lang.dtd/en-GB.po
+13 7 build/i18n/po/lang.dtd/es-ES.po
+13 7 build/i18n/po/lang.dtd/fi-FI.po
+13 7 build/i18n/po/lang.dtd/fr-CA.po
+5 5 build/i18n/po/lang.dtd/he-IL.po
+5 5 build/i18n/po/lang.dtd/hu-HU.po
+13 7 build/i18n/po/lang.dtd/hy-AM.po
+5 5 build/i18n/po/lang.dtd/oc-FR.po
+13 7 build/i18n/po/lang.dtd/pt-BR.po
+13 7 build/i18n/po/lang.dtd/ru-RU.po
+5 5 build/i18n/po/lang.dtd/sv-SE.po
+5 5 build/i18n/po/lang.dtd/tr-TR.po
+50 46 build/i18n/po/tpac/ar-JO.po
+87 82 build/i18n/po/tpac/cs-CZ.po
+39 35 build/i18n/po/tpac/de-DE.po
+39 35 build/i18n/po/tpac/en-CA.po
+87 82 build/i18n/po/tpac/en-GB.po
+84 79 build/i18n/po/tpac/es-ES.po
+39 35 build/i18n/po/tpac/fi-FI.po
+477 388 build/i18n/po/tpac/fr-CA.po
+39 35 build/i18n/po/tpac/he-IL.po
+39 35 build/i18n/po/tpac/hu-HU.po
+39 35 build/i18n/po/tpac/hy-AM.po
+39 35 build/i18n/po/tpac/oc-FR.po
+39 35 build/i18n/po/tpac/pt-BR.po
+39 35 build/i18n/po/tpac/ru-RU.po
+39 35 build/i18n/po/tpac/sv-SE.po
+39 35 build/i18n/po/tpac/tr-TR.po
+836 584 build/i18n/po/webstaff/ar-JO.po
+1119 790 build/i18n/po/webstaff/cs-CZ.po
+549 547 build/i18n/po/webstaff/en-GB.po
+857 621 build/i18n/po/webstaff/es-ES.po
+706 562 build/i18n/po/webstaff/hy-AM.po
+533 541 build/i18n/po/webstaff/ru-RU.po
+
+commit 898d355d07608a55122949571643446774f1109a
+Author: Remington Steed <rjs7 at calvin.edu>
+Date: Mon Sep 24 17:23:45 2018 -0400
+
+ Docs: Remove old release notes files
+
+ Signed-off-by: Remington Steed <rjs7 at calvin.edu>
+
+0 22 docs/RELEASE_NOTES_NEXT/Administration/new_hold_targeter.adoc
+0 16 docs/RELEASE_NOTES_NEXT/Client/consistent-terminology.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Administration/new_hold_targeter.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Client/consistent-terminology.adoc
+
+commit d8080c3df085ef97b11deb23a9c67f2a2cf82a59
+Author: Remington Steed <rjs7 at calvin.edu>
+Date: Mon Sep 24 17:14:39 2018 -0400
+
+ Docs: Add Upgrade Notes to release notes
+
+ This commit copies relevant sections of the release notes into the
+ Upgrade Notes section.
+
+ A few paragraphs are also reformatted into lines of appropriate length.
+
+ Signed-off-by: Remington Steed <rjs7 at calvin.edu>
+
+161 16 docs/RELEASE_NOTES_3_2.adoc
+
+commit 1830cf6b7a2dc83f2f2a2b027f1e35cb4cd986a2
+Author: Remington Steed <rjs7 at calvin.edu>
+Date: Mon Sep 24 15:53:04 2018 -0400
+
+ Update Release Notes for 3.2-rc
+
+ Add new release notes. Also, slight reorganization to the
+ acknowledgements section (move organizations to appropriate section, fix
+ sorting of COOL, use consistent name for BC Libraries).
+
+ Signed-off-by: Remington Steed <rjs7 at calvin.edu>
+
+49 5 docs/RELEASE_NOTES_3_2.adoc
+
+commit 861a750946844bb8642addeba7ca1832c0f98639
+Author: Remington Steed <rjs7 at calvin.edu>
+Date: Mon Sep 24 15:15:46 2018 -0400
+
+ Docs: Fix two minor errors in docs
+
+ - Fix an AsciiDoc heading syntax error
+ - Fix a grammatical error (repeated "the")
+
+ Signed-off-by: Remington Steed <rjs7 at calvin.edu>
+
+1 1 docs/RELEASE_NOTES_3_2.adoc
+1 1 docs/acquisitions/selection_lists_po.adoc
+
+commit 25f60b4e7d9ba78cb96cd177659c8f82493287e2
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Sep 24 16:19:33 2018 -0400
+
+ LP#1794176 Avoid capturing grid cell tooltip/display values
+
+ Remove the grid-tooltip logic that captured the cell content into a
+ template-level variable so the content only needed to be generated once
+ for both the tooltip and cell display. This logic fails to handle cases
+ where the cell content is dynamic, typically the result of row
+ attributes being modified via external process.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+5 7 Open-ILS/src/templates/staff/share/t_autogrid.tt2
+7 0 Open-ILS/web/js/ui/default/staff/services/grid.js
+
+commit 6c0e0d5efaa90dd22468127d6e7d5bf87bdff6c1
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Mon Sep 24 13:56:09 2018 -0400
+
+ LP#1789442: turn of Perl taint-checking on 14-OpenILS-Utils.t
+
+ This works around a bug in DateTime::TimeZone 1.63
+ <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=737265> that
+ causes one of the new tests to spuriously fail on Ubuntu 14.04 LTS.
+
+ As the comment indicates, taint checking is not typically enabled
+ when running Evergreen, but we may want to consider changing
+ that should tuits arise.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+15 1 Open-ILS/src/perlmods/t/14-OpenILS-Utils.t
+
+commit 110624bac23fcd0e53fef11d2af091c942e6d9aa
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Mon Sep 24 13:55:39 2018 -0400
+
+ LP#1789442: restore column allocation for barcode input
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/src/templates/staff/circ/patron/t_checkout.tt2
+
+commit 867da55cd97a0973b20ce0df26a6f4edfa7645eb
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Fri Sep 21 15:23:11 2018 -0400
+
+ LP#1789442: fix editing due date of hourly loans in web staff
+
+ This patch fixes a bug where editing the due date of an hourly
+ loan would result in the time portion always getting set to 00:00.
+
+ To test
+ -------
+ [1] Set up some daily and hourly loans in your database.
+ [2] Apply the patch.
+ [3] From the items out page, edit the due date for one or
+ more hourly loans. Verify that the resulting due date
+ is set correctly.
+ [4] From the items out page, edit the due date for some
+ daily loans and verify correctness. In particular,
+ verify that the resulting due date is /not/ the
+ following day if testing in time zones in the Americas.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+5 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm
+1 7 Open-ILS/web/js/ui/default/staff/circ/patron/items_out.js
+
+commit 6fbbcca096402e099f90702e5f79a98b80bc69a2
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Fri Sep 21 14:58:47 2018 -0400
+
+ LP#1552778: add timepicker to webstaff checkout page
+
+ This patch adds a timepicker to go along with the datepicker
+ if the operator invokes the option to set a specific due
+ date.
+
+ To test
+ -------
+ [1] Arrange circ policies to have both hourly and daily loans.
+ [2] Apply the patch.
+ [3] Check out an item for an hourly loan. Verify that the
+ due date and time is per policy.
+ [4] Check out an item for a daily loan. Verify that the
+ due date is per policy.
+ [5] Check out an item for an hourly loan, but set a specific
+ due date and time. Verify that the due date and time matches
+ the selected value.
+ [6] Check out an item for a daily loan, but set a specific
+ due date. Verify that the due date matches the selected
+ value; note that any time component is ignored since
+ for daily loans the time gets normalized to 23:59.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+5 7 Open-ILS/src/templates/staff/circ/patron/t_checkout.tt2
+
+commit b1c3b925764f6d8bf7cfe8b9f9c9a4ebe4c09d04
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Fri Sep 21 14:30:01 2018 -0400
+
+ LP#1552778: make clean_ISO8601 recognize 'Z' as a timezone specifier
+
+ Prior to this patch, clean_ISO8601 would ignore 'Z' as a timezone
+ specifier (e.g., '2018-09-21T15:34:21Z') and treat it as if the
+ timestamp were in the server's time zone, leading to incorrect
+ results (e.g., '2018-09-21T15:34:21-04:00') unless user, client,
+ and server all happen to be in UTC+0. In particular, this allows
+ date strings emitted by the JavaScript Date object's toISOString()
+ method to be correctly parsed, as those strings invariably use
+ 'Z' as the timezone specifier.
+
+ To test
+ -------
+ [1] Apply patch.
+ [2] Verify that regression test in t/14-OpenILS-Utils.t passes.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+2 0 Open-ILS/src/perlmods/lib/OpenILS/Utils/DateTime.pm
+17 8 Open-ILS/src/perlmods/t/14-OpenILS-Utils.t
+
+commit 401fb4cc1a5a065d0b82692dae4f64a449d820f7
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Fri Sep 21 14:04:24 2018 -0400
+
+ LP#1552778: add perldoc and unit tests for clean_ISO8601
+
+ To test
+ -------
+ [1] Apply patch.
+ [2] Verify new tests in t/14-OpenILS-Utils.t pass.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+35 0 Open-ILS/src/perlmods/lib/OpenILS/Utils/DateTime.pm
+15 1 Open-ILS/src/perlmods/t/14-OpenILS-Utils.t
+
+commit 8fa7940b570fbb22c478e31735959ce88fdce30d
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Fri Sep 21 11:00:25 2018 -0400
+
+ LP#1552778: copy some date/time utils from OpenSRF
+
+ As preparation for subsequent bugfixes, this patch
+ copies several date/time routines from OpenSRF::Utils
+ to a new module, OpenILS::Utils::DateTime. Specifically,
+ the routines copied over are:
+
+ * clean_ISO8601() (renaming of the OpenSRF cleanse_ISO8601)
+ * gmtime_ISO8601()
+ * interval_to_seconds()
+ * seconds_to_interval()
+
+ This move will allow us to fix bugs in this core routines
+ without requiring a mandatory OpenSRF upgrade. Furthermore,
+ with the exception of interval_to_seconds() (and in only one
+ place), none of those routines are used by OpenSRF itself.
+
+ To test
+ -------
+ [1] Apply the patch.
+ [2] Verify that unit tests pass.
+ [3] Verify that all Perl services start correctly.
+ [4] Verify that date/time and interval calculations continue
+ to work as expected, particularly in circulation.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+6 5 Open-ILS/src/offline/offline.pl
+1 0 Open-ILS/src/perlmods/MANIFEST
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm
+2 2 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/ClosedDates.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Booking.pm
+11 11 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm
+11 11 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/CircCommon.pm
+23 23 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+11 11 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
+2 2 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Money.pm
+2 2 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/NonCat.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Collections.pm
+2 2 Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm
+6 6 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm
+2 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher.pm
+6 6 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+20 20 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/actor.pm
+3 3 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger.pm
+2 2 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor.pm
+3 3 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Validator.pm
+2 2 Open-ILS/src/perlmods/lib/OpenILS/SIP.pm
+2 2 Open-ILS/src/perlmods/lib/OpenILS/SIP/Item.pm
+5 5 Open-ILS/src/perlmods/lib/OpenILS/SIP/Patron.pm
+246 0 Open-ILS/src/perlmods/lib/OpenILS/Utils/DateTime.pm
+7 7 Open-ILS/src/perlmods/lib/OpenILS/Utils/HoldTargeter.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Utils/Penalty.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/WWW/Exporter.pm
+2 2 Open-ILS/src/perlmods/lib/OpenILS/WWW/SuperCat.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/WWW/SuperCat/Feed.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/WWW/TemplateBatchBibUpdate.pm
+3 3 Open-ILS/src/perlmods/live_t/03-overdue_circ.t
+3 3 Open-ILS/src/perlmods/live_t/04-overdue_with_closed_dates.t
+1 1 Open-ILS/src/perlmods/live_t/05-pay_bills.t
+1 1 Open-ILS/src/perlmods/live_t/09-lp1198465_neg_balances.t
+10 1 Open-ILS/src/perlmods/t/14-OpenILS-Utils.t
+7 7 Open-ILS/src/support-scripts/generate_circ_notices.pl
+2 2 Open-ILS/src/support-scripts/set_pbx_holidays.pl
+ create mode 100644 Open-ILS/src/perlmods/lib/OpenILS/Utils/DateTime.pm
+
+commit 72152af78b20dee043b865f4471c0e066538e1a6
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Sat Sep 22 23:08:28 2018 -0400
+
+ LP#1793857: Restore Copy Current Row
+
+ In our effort to consistently call items/copies items, we accidentally replaced
+ the action "Copy Current Row" with "Item Current Row." This branch restores
+ the correct language.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+2 2 Open-ILS/src/templates/staff/cat/share/t_marcedit.tt2
+
+commit 8cdf97e8c608d10d41287d5f32f500badad9e2a4
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Wed Sep 19 11:16:39 2018 -0400
+
+ LP#1791335: Retain stat cats on item transfer
+
+ For some reason, parts were protected during item transfer, but stat cats were
+ not. This commit protects them by fleshing stat cat entries in the outer
+ item transfer method.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Cat.pm
+
+commit f6cea03d0d017e2a1581aacdba096286f4002aa4
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Fri Sep 21 16:46:17 2018 -0400
+
+ LP#1791340: expand on comment about backdated checkin times
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+4 0 Open-ILS/web/js/ui/default/staff/circ/checkin/app.js
+
+commit c09dd9af04f4ac68307c953f623a930afe107e6d
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Fri Sep 21 10:45:59 2018 -0400
+
+ LP#1791340 Webstaff: Don't backdate when we're not
+
+ There was code in the webstaff checkin interface which attempted to
+ remove the backdate parameter when it wasn't needed, as its mere
+ presence has a negative effect on the checkin process. This fail-safe
+ was not working, however.
+
+ Instead, let's build on the same check function used for the display,
+ so we can be more sure that if the user doesn't see that they are
+ backdating, the interface will not treat it as a backdate, and
+ vice-versa.
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+4 4 Open-ILS/web/js/ui/default/staff/circ/checkin/app.js
+
+commit 1c3b4a9fac28e1e49234837debb275a8665abb40
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Thu Sep 20 18:26:47 2018 -0400
+
+ LP#1745427: account for change in prediction patterns
+
+ This patch fixes a bug in the web staff client where changing
+ the active prediction pattern for a subscription would not
+ reset the base issue when predicting the next run of issues.
+
+ To test
+ -------
+ 1. Set up a subscription in the web staff client with a prediction
+ pattern (e.g., monthly). Predict some issues.
+ 2. Create/select a new prediction pattern for a new publishing schedule,
+ e.g., quarterly.
+ 3. Activate the new pattern and deactivate the old pattern.
+ 4. Click Predict New Issues.
+ 5. Enter in the new publication date/enumerations/chronology as needed.
+ 6. Enter a prediction count and select Save. Note that new issues
+ appear to be based on the previous pattern.
+ 7. Apply the patch, delete the issues created in step 6, then repeat
+ steps 4-6. This time, new issues should be created using the new
+ prediction pattern.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+16 7 Open-ILS/web/js/ui/default/staff/serials/services/core.js
+
+commit 437e7f826a9a36be2db65f96ad6862c9bea1094d
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Wed Sep 19 10:26:04 2018 -0400
+
+ LP#1781480: Include group owner ancestor badges
+
+ This commit lightly refactors the badge org logic and includes the ancestors
+ of location group owners in the list of badge orgs, instead of only the direct
+ owners.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Jeanette Lundgren <jlundgren at cwmars.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+5 12 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm
+
+commit a0a885fe5e7e4d1da89cf1da54df7feaac7cf524
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Mon Sep 17 11:33:29 2018 -0400
+
+ LP#1781480: Closures remeber values in subtle ways...
+
+ ... and we must take care to avoid that. This commit forces a state variable
+ to be statically assigned an empty list rather than depending on the idiomatic
+ undef to vivicate an empty list. This is important for all OpenSRF methods,
+ and manifests here as a search "remembering" a previously chosen location
+ group. A comment to that point is included for our future selves.
+
+ The core probably arises from the fact that, in the end, OpenSRF methods are
+ generated closures.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Jeanette Lundgren <jlundgren at cwmars.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+10 3 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm
+
+commit 140ff94d566acf262486152bad8395b32429ed4b
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Fri Aug 3 17:25:33 2018 -0400
+
+ LP#1732761: Chain the promises to avoid races
+
+ It looks like there's a race condition gathering locations for larger copy
+ sets. Here we chain the promises to remove the race by serialization.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+32 32 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 443ed531a19fdea611a01f931252316cffbbce47
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Mon Jul 9 16:31:50 2018 -0400
+
+ LP#1732761: Fetch locations immediately for display
+
+ This commit closes a race condition where location labels cannot be rendered
+ for the "multiple locations" widget because fetching them takes longer than
+ the initial render of the attribute editor.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+25 3 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit b98f8efea5a1937704c94b3de534d9028fd09d40
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Tue Jul 3 16:57:27 2018 -0400
+
+ LP#1732761: Batch item edit and multiple values per field
+
+ Previous to this commit, the display of multiple different values for a field
+ in the item attribute editor was simply to display no value. Here we add a UI
+ component that presents the list of unique values, the number of selected
+ copies that use each value, and the ability to select just those copies using
+ a particular value by clicking on the desired value.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+ Conflicts:
+ Open-ILS/src/templates/staff/cat/volcopy/index.tt2
+ Open-ILS/src/templates/staff/cat/volcopy/t_attr_edit.tt2
+
+8 0 Open-ILS/src/templates/staff/cat/volcopy/index.tt2
+54 0 Open-ILS/src/templates/staff/cat/volcopy/t_attr_edit.tt2
+11 0 Open-ILS/src/templates/staff/share/t_listcounts.tt2
+89 0 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+19 0 Open-ILS/web/js/ui/default/staff/services/grid.js
+44 0 Open-ILS/web/js/ui/default/staff/services/ui.js
+ create mode 100644 Open-ILS/src/templates/staff/share/t_listcounts.tt2
+
+commit 5f4b487477d6504b91991c042441209e28c8c30b
+Author: Jason Boyer <jboyer at library.in.gov>
+Date: Thu Sep 13 07:39:06 2018 -0400
+
+ LP1792371: Fix De-select Whole Page Action
+
+ When using the checkbox to select or de-select the
+ entire page of results, the de-select action changes
+ the check and highlight states of the items on page
+ but doesn't actually remove the records from the
+ basket. This branch corrects that so that you can
+ select and de-select the entire page of results
+ and your basket contents are what you would expect.
+
+ Signed-off-by: Jason Boyer <jboyer at library.in.gov>
+ Signed-off-by: Terran McCanna <tmccanna at georgialibraries.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+5 0 Open-ILS/web/js/ui/default/opac/record_selectors.js
+
+commit 5876118b87d38fc2a48af176473fd14e2208c2ed
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Thu Sep 20 10:05:28 2018 -0400
+
+ LP#1783345: Make one more change in case
+
+ One button was missed when normalizing case in the add to bucket modal.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/src/templates/staff/cat/catalog/t_add_to_bucket.tt2
+
+commit 9157e87540ab6fbd4f7e19ddd6a8151f6b00cadb
+Author: Sam Link <slink at LIBPC002>
+Date: Tue Jul 31 10:35:34 2018 -0400
+
+ Bug #1783345 - Normalized add to bucket modal
+
+ The text cases in the add to bucket modal have been normalized to
+ sentence case.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+4 4 Open-ILS/src/templates/staff/cat/catalog/t_add_to_bucket.tt2
+
+commit 1c1bc36222e90f34a94e6ba38c8daf7f90775283
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Sun Sep 16 18:48:59 2018 -0400
+
+ LP#1792484 Patron preferred name in hold shelf dialog
+
+ Display the patron preferred name in addition to the primary name in the
+ route-to-holds-shelf dialog. As with primary name, preferred name is
+ hidden when an alias is applied.
+
+ To test
+ [1] Add a primary first, middle, and/or last name value to a patron.
+ [2] Place a hold for the patron with the pickup library matching the
+ login library.
+ [2] Capgture the hold via the Checkin interface (instead of the hold
+ capture interface) and note the preferred name display.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+9 0 Open-ILS/src/templates/staff/circ/share/t_hold_shelf_dialog.tt2
+
+commit 870cecad0ac527b5ceaf4d5b893f6612fce2867c
+Author: Library Tech <libsysadmin at calvin.edu>
+Date: Tue Sep 18 16:12:57 2018 -0400
+
+ Translation updates - newpot
+
+ Signed-off-by: Library Tech <libsysadmin at calvin.edu>
+
+16 16 build/i18n/po/conify/conify.pot
+85 78 build/i18n/po/db.seed/db.seed.pot
+30 30 build/i18n/po/fm_IDL.dtd/fm_IDL.dtd.pot
+19 19 build/i18n/po/ils_events.xml/ils_events.xml.pot
+3 3 build/i18n/po/lang.dtd/lang.dtd.pot
+36 32 build/i18n/po/tpac/tpac.pot
+530 538 build/i18n/po/webstaff/webstaff.pot
+
+commit 03df8c998d896dea76901cc86ad37176d642b83b
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Wed Aug 22 19:46:10 2018 -0400
+
+ LP#1538691: Release notes entry for consistent terminology
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+16 0 docs/RELEASE_NOTES_NEXT/Client/consistent-terminology.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Client/consistent-terminology.adoc
+
+commit 5f90b07e588fffa5428ae8bcd9d4445e3150b01b
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Wed Aug 22 16:48:43 2018 -0400
+
+ LP#1538691: More changes to terminology
+
+ For more consistency: Changing all staff client instances of Copy Location to
+ Shelving Location. We also replace Volume with Call Number and use Holdings
+ for a combination of copies/volumes. Also replacing the 'Add Copies' option
+ on the bib record page with 'Add Holdings' as was previously discussed on
+ the open-ils-general list.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+3 3 Open-ILS/src/templates/conify/global/asset/copy_location_group.tt2
+2 2 Open-ILS/src/templates/conify/global/asset/copy_location_order.tt2
+4 4 Open-ILS/src/templates/staff/admin/local/t_splash.tt2
+1 1 Open-ILS/src/templates/staff/cat/bucket/copy/index.tt2
+1 1 Open-ILS/src/templates/staff/cat/bucket/copy/t_view.tt2
+4 4 Open-ILS/src/templates/staff/cat/catalog/index.tt2
+1 1 Open-ILS/src/templates/staff/cat/catalog/t_catalog.tt2
+1 1 Open-ILS/src/templates/staff/cat/catalog/t_choose_vol_target_lib.tt2
+11 11 Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2
+9 9 Open-ILS/src/templates/staff/cat/item/index.tt2
+1 1 Open-ILS/src/templates/staff/cat/share/t_embedded_volcopy.tt2
+2 2 Open-ILS/src/templates/staff/cat/share/t_volume_list.tt2
+3 3 Open-ILS/src/templates/staff/cat/volcopy/index.tt2
+1 1 Open-ILS/src/templates/staff/cat/volcopy/t_attr_edit.tt2
+2 2 Open-ILS/src/templates/staff/cat/volcopy/t_defaults.tt2
+5 5 Open-ILS/src/templates/staff/cat/volcopy/t_edit.tt2
+1 1 Open-ILS/src/templates/staff/cat/volcopy/t_view.tt2
+1 1 Open-ILS/src/templates/staff/circ/checkin/t_checkin_table.tt2
+1 1 Open-ILS/src/templates/staff/circ/holds/t_pull_list.tt2
+1 1 Open-ILS/src/templates/staff/circ/share/t_hold_details.tt2
+1 1 Open-ILS/src/templates/staff/circ/transits/t_list.tt2
+1 1 Open-ILS/src/templates/staff/css/cat.css.tt2
+1 1 Open-ILS/src/templates/staff/serials/t_batch_receive.tt2
+2 2 Open-ILS/web/opac/locale/en-US/lang.dtd
+
+commit 5d28b84c87d11cac205ec3b74f758e8824d77536
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Wed Aug 1 13:14:32 2018 -0400
+
+ LP#1538691: Use items instead of copies
+
+ For better consistency for the terms used in the client, let's use items instead
+ of copies, which was the preference of most people who provided feedback on bug
+ 1538691.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+ Conflicts:
+ Open-ILS/src/templates/staff/cat/catalog/t_holds.tt2
+ Open-ILS/src/templates/staff/cat/item/t_list.tt2
+ Open-ILS/src/templates/staff/cat/item/t_summary_pane.tt2
+ Open-ILS/src/templates/staff/circ/holds/t_shelf_list.tt2
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+2 2 Open-ILS/src/templates/staff/admin/local/asset/copy_tag.tt2
+3 3 Open-ILS/src/templates/staff/admin/local/autoGridEditor/acas.tt2
+3 3 Open-ILS/src/templates/staff/admin/local/autoGridEditor/ccat.tt2
+4 4 Open-ILS/src/templates/staff/admin/local/t_splash.tt2
+1 1 Open-ILS/src/templates/staff/admin/serials/t_splash.tt2
+2 2 Open-ILS/src/templates/staff/admin/server/config/copy_tag_type.tt2
+2 2 Open-ILS/src/templates/staff/admin/server/t_splash.tt2
+1 1 Open-ILS/src/templates/staff/admin/workstation/t_print_config.tt2
+2 2 Open-ILS/src/templates/staff/cat/bucket/copy/index.tt2
+1 1 Open-ILS/src/templates/staff/cat/bucket/copy/t_apply_tags.tt2
+5 5 Open-ILS/src/templates/staff/cat/bucket/copy/t_view.tt2
+4 4 Open-ILS/src/templates/staff/cat/catalog/index.tt2
+1 1 Open-ILS/src/templates/staff/cat/catalog/t_catalog.tt2
+1 1 Open-ILS/src/templates/staff/cat/catalog/t_conjoined_items.tt2
+11 11 Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2
+7 7 Open-ILS/src/templates/staff/cat/catalog/t_holds.tt2
+9 9 Open-ILS/src/templates/staff/cat/item/t_list.tt2
+3 3 Open-ILS/src/templates/staff/cat/item/t_summary_pane.tt2
+2 2 Open-ILS/src/templates/staff/cat/share/t_marcedit.tt2
+2 2 Open-ILS/src/templates/staff/cat/share/t_replace_barcode.tt2
+2 2 Open-ILS/src/templates/staff/cat/share/t_volume_list.tt2
+1 1 Open-ILS/src/templates/staff/cat/volcopy/index.tt2
+4 4 Open-ILS/src/templates/staff/cat/volcopy/t_attr_edit.tt2
+2 2 Open-ILS/src/templates/staff/cat/volcopy/t_copy_alerts.tt2
+2 2 Open-ILS/src/templates/staff/cat/volcopy/t_copy_notes.tt2
+1 1 Open-ILS/src/templates/staff/cat/volcopy/t_copy_tags.tt2
+10 10 Open-ILS/src/templates/staff/cat/volcopy/t_defaults.tt2
+10 10 Open-ILS/src/templates/staff/cat/volcopy/t_edit.tt2
+2 2 Open-ILS/src/templates/staff/cat/volcopy/t_view.tt2
+2 2 Open-ILS/src/templates/staff/circ/checkin/t_checkin_table.tt2
+6 6 Open-ILS/src/templates/staff/circ/holds/t_pull_list.tt2
+4 4 Open-ILS/src/templates/staff/circ/holds/t_shelf_list.tt2
+2 2 Open-ILS/src/templates/staff/circ/in_house_use/index.tt2
+1 1 Open-ILS/src/templates/staff/circ/patron/t_bills.tt2
+3 3 Open-ILS/src/templates/staff/circ/patron/t_bills_list.tt2
+2 2 Open-ILS/src/templates/staff/circ/patron/t_checkout.tt2
+3 3 Open-ILS/src/templates/staff/circ/patron/t_holds_list.tt2
+1 1 Open-ILS/src/templates/staff/circ/patron/t_items_out.tt2
+2 2 Open-ILS/src/templates/staff/circ/renew/t_renew.tt2
+18 18 Open-ILS/src/templates/staff/circ/share/circ_strings.tt2
+1 1 Open-ILS/src/templates/staff/circ/share/hold_strings.tt2
+1 1 Open-ILS/src/templates/staff/circ/share/t_circ_exists_dialog.tt2
+2 2 Open-ILS/src/templates/staff/circ/share/t_copy_in_transit_dialog.tt2
+2 2 Open-ILS/src/templates/staff/circ/share/t_copy_not_avail_dialog.tt2
+2 2 Open-ILS/src/templates/staff/circ/share/t_hold_details.tt2
+1 1 Open-ILS/src/templates/staff/css/cat.css.tt2
+1 1 Open-ILS/src/templates/staff/css/style.css.tt2
+2 2 Open-ILS/src/templates/staff/navbar.tt2
+3 3 Open-ILS/src/templates/staff/serials/t_subscription_manager.tt2
+2 2 Open-ILS/src/templates/staff/share/print_templates/t_bill_payment.tt2
+2 2 Open-ILS/src/templates/staff/share/print_templates/t_bills_current.tt2
+4 4 Open-ILS/src/templates/staff/share/print_templates/t_bills_historical.tt2
+1 1 Open-ILS/src/templates/staff/share/print_templates/t_holds_for_bib.tt2
+2 2 Open-ILS/src/templates/staff/share/print_templates/t_in_house_use_list.tt2
+1 1 Open-ILS/src/templates/staff/share/print_templates/t_item_status.tt2
+1 1 Open-ILS/src/templates/staff/share/t_add_copy_alert_dialog.tt2
+1 1 Open-ILS/src/templates/staff/share/t_copy_alert_editor_dialog.tt2
+4 4 Open-ILS/src/templates/staff/share/t_copy_alert_manager_dialog.tt2
+1 1 Open-ILS/src/templates/staff/t_splash.tt2
+
+commit 664d4cde5a21191a88f05dd1751f45fb61703efb
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Sun Sep 16 19:28:11 2018 -0400
+
+ LP#1792482 My OPAC settings preferred name field
+
+ Adds a new row to the patron account preferences page for Preferred
+ Name. The field only displays when a preferred first, middle, or last
+ value is present and follows the same display logic as preferred names
+ in the staff client, where first and last fall-through to the primary
+ name.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+20 3 Open-ILS/src/templates/opac/myopac/prefs.tt2
+
+commit 86f732b4eade6a22b66979cb8258168ebbf1cbb2
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Sun Sep 16 19:25:44 2018 -0400
+
+ LP#1792482 Only require first/last in pref name display
+
+ When displaying a patrons preferred name, always show a value for first
+ and last name, starting with the preferred name and defaulting to the
+ primary name, but only show values for prefix, middle name, and suffix
+ when a preferred variant is applied.
+
+ This avoids scenarios where patrons use their middle name as their first
+ name, with no preferred middle name applied, resulting duplicate
+ first/middle names displaying.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/src/templates/staff/circ/patron/t_summary.tt2
+
+commit af72b32e28e1bca2ca22d0b23050c0874d4e7eb4
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Tue Sep 18 14:53:47 2018 -0400
+
+ LP#1787274: Stamping upgrade script for no dupe transits
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+73 0 Open-ILS/src/sql/Pg/upgrade/1133.schema.no-dupe-transits.sql
+0 73 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.no-dupe-transits.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1133.schema.no-dupe-transits.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.no-dupe-transits.sql
+
+commit 2b721198d9947d6fd0d6940ac042a9cdd87a95bf
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Sep 18 11:21:26 2018 -0400
+
+ LP#1787274 One active transit pgtap tests
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+39 0 Open-ILS/src/sql/Pg/live_t/lp1787274-no-dupe-transits.pg
+ create mode 100644 Open-ILS/src/sql/Pg/live_t/lp1787274-no-dupe-transits.pg
+
+commit 87bc5e52e2958a1904bebd43747c31a24951e981
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Sep 17 18:16:42 2018 -0400
+
+ LP#1787274 Active copy transit unique constraint
+
+ Adds constraint triggers to action.*transit_copy tables to prevent
+ creation of new transits for a copies when an existing transit of any
+ type exists for the copy with a NULL dest_recv_time and cancel_time
+ values (i.e. an open transit).
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+25 0 Open-ILS/src/sql/Pg/090.schema.action.sql
+4 0 Open-ILS/src/sql/Pg/095.schema.booking.sql
+73 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.no-dupe-transits.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.no-dupe-transits.sql
+
+commit a03994fe3ba4b6cf0d18f9fa6b6c0f245ead67ef
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Sep 17 18:16:28 2018 -0400
+
+ LP#1787274 Prevent multiple active copy checkins
+
+ In the staff client checkin service, track which copies are currently
+ in-flight to the checkin API call and prevent additional checkin API
+ calls for any copy that is currently in flight.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+13 2 Open-ILS/web/js/ui/default/staff/circ/services/circ.js
+
+commit cbdc7768e1e7026312f62e83fb8057cb47f193f2
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Tue Sep 18 11:28:55 2018 -0700
+
+ Docs: LP1793184 adding to the 3.2 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+3 2 docs/RELEASE_NOTES_3_2.adoc
+
+commit 9f8afc49756e7511aad843cc9f9f9cf2dc072b61
+Author: Jason Boyer <jboyer at library.in.gov>
+Date: Thu Jun 21 15:57:41 2018 -0400
+
+ LP1735816: Delete Copy Notes in the Web Client
+
+ A combination of calling convention errors and
+ template picky-ness prevented the deletion of
+ copy notes in the web client. This patch returns
+ that ability.
+
+ Signed-off-by: Jason Boyer <jboyer at library.in.gov>
+ Signed-off-by: Amy Constantino <aconstantino at cwmars.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/AssetCommon.pm
+5 8 Open-ILS/src/templates/staff/cat/volcopy/t_copy_notes.tt2
+29 20 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 56aa1445c8f209d2c516cdb01969433bd05be8d1
+Author: Chris Sharp <csharp at georgialibraries.org>
+Date: Thu Sep 13 15:26:46 2018 -0400
+
+ LP#1745610 - Add release notes for hold targeter script change.
+
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+22 0 docs/RELEASE_NOTES_NEXT/Administration/new_hold_targeter.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Administration/new_hold_targeter.adoc
+
+commit 48397200fc137e25515d067333e9a81f4728533e
+Author: Chris Sharp <csharp at georgialibraries.org>
+Date: Thu Sep 13 15:25:21 2018 -0400
+
+ LP#1745610 - Update Makefile.am to reflect filename changes.
+
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/Makefile.am
+
+commit 1873334054549b2c53b3aa2afd483d6bcda758aa
+Author: Chris Sharp <csharp at georgialibraries.org>
+Date: Fri Jan 26 07:58:58 2018 -0500
+
+ LP#1745610 - Deprecate original hold_targeter.pl
+
+ With the new hold targeter battle-tested for over a year,
+ it's now time to promote it to default, deprecating the
+ older version. This commit renames the old targeter to
+ "hold_targeter_legacy.pl" and the new to "hold_targeter.pl",
+ and adapts the example crontab to use the new targeter's
+ parameter syntax.
+
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/examples/crontab.example
+190 80 Open-ILS/src/support-scripts/hold_targeter.pl
+99 0 Open-ILS/src/support-scripts/hold_targeter_legacy.pl
+0 209 Open-ILS/src/support-scripts/hold_targeter_v2.pl
+ create mode 100755 Open-ILS/src/support-scripts/hold_targeter_legacy.pl
+ delete mode 100755 Open-ILS/src/support-scripts/hold_targeter_v2.pl
+
+commit 25ee42bb2453c1d540b93bae206b28b1a53feb4b
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Fri Jun 29 14:45:27 2018 -0400
+
+ LP#1642344: XUL report cloning
+
+ This patch allows report templates of version 4 and earlier
+ (which would have been created by the XUL staff client) to
+ be upgraded to template version 5 (used by the web staff
+ client) when the user clones a report. This closes a limitation
+ introduced in the reporter module for the web staff client.
+
+ Note that during the conversion, inner joins are used by
+ default when IDL classes have a 'has_a' relation rather than
+ defaulting to left outer joins, improving correctness of the
+ generated SQL query.
+
+ To test
+ -------
+ [0] Apply the patch.
+ [1] In a test database that has reporter templates created
+ by (or for) the XUL staff client, create clones of
+ those templates.
+ [2] Verify that the output of reports created using the new
+ templates matches output of reports from the original
+ templates.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Terran McCanna <tmccanna at georgialibraries.org>
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+114 15 Open-ILS/web/js/ui/default/staff/reporter/template/app.js
+24 0 Open-ILS/web/js/ui/default/staff/test/unit/egReporter.js
+2 3 Open-ILS/web/reports/oils_rpt_folder_window.js
+
+commit 49837dc3010755342a04c08527e4aa28d24e3832
+Author: Kyle Huckins <khuckins at catalyte.io>
+Date: Tue Sep 11 17:13:11 2018 +0000
+
+ lp1511742 Additional Scaffolding Fixes
+
+ - Apply scaffolding fixes to Aquisition Patron Requests,
+ Circ Age to Lost, and Auto Print settings UIs, preventing
+ Org Selector from taking up entire width of screen.
+
+ Signed-off-by: Kyle Huckins <khuckins at catalyte.io>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+4 3 Open-ILS/src/templates/staff/acq/requests/t_list.tt2
+6 6 Open-ILS/src/templates/staff/admin/local/circ/age_to_lost.tt2
+14 14 Open-ILS/src/templates/staff/admin/local/config/auto_print.tt2
+
+commit 3436eccbd9e1407cb564b7250e87ef9d5c5093d4
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Fri Sep 7 16:36:17 2018 -0400
+
+ LP#1511742 Org selector typeahead UI formatting
+
+ The display behavior of the org selector changed when migrating to a
+ typeahead. In some cases, the boundaries of the input need to be more
+ clearly defined or it will fill the page horizontally.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kyle Huckins <khuckins at catalyte.io>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+8 8 Open-ILS/src/templates/staff/admin/workstation/t_workstations.tt2
+5 2 Open-ILS/src/templates/staff/circ/patron/t_pending_list.tt2
+
+commit b0ed643b8efef834da6d9689be6c5c74047abaf6
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Fri Sep 7 15:59:35 2018 -0400
+
+ LP#1511742 Org unit selector typeahead
+
+ Reimplements <eg-org-selector> as an ngbTypeahead:
+
+ https://angular-ui.github.io/bootstrap/#!#typeahead
+
+ This allows for type-to-entry of the org selector. A few additional
+ bits of logic are added to support click-to-open of the selector
+ regardless of the selected value.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kyle Huckins <khuckins at catalyte.io>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+19 0 Open-ILS/src/templates/staff/share/t_org_select.tt2
+131 39 Open-ILS/web/js/ui/default/staff/services/ui.js
+ create mode 100644 Open-ILS/src/templates/staff/share/t_org_select.tt2
+
+commit 88072d56f1a55e3f03f28cd2f552595419193c55
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Fri Sep 14 10:06:33 2018 -0400
+
+ LP#1739286: Belt and suspenders on radio button flags
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+1 0 Open-ILS/web/js/ui/default/staff/cat/services/z3950.js
+
+commit 8b0e06fd7c87a20750e51fc0df5ce3e7818d59e1
+Author: Jason Etheridge <jason at EquinoxInitiative.org>
+Date: Tue Jul 10 19:46:04 2018 -0400
+
+ lp1739286 default search box in Z39.50
+
+ This change tweaks the layout of search fields in the web client Z39.50
+ interface and adds radio buttons for the default search field to auto-focus.
+ The behavior is "sticky" without the need for an explicit Save action. If the
+ current default field is not present due to a given combination of selected
+ services, then no field will be focused by default.
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+15 5 Open-ILS/src/templates/staff/cat/z3950/t_search_fields.tt2
+20 0 Open-ILS/web/js/ui/default/staff/cat/services/z3950.js
+
+commit 95378e51bed521eb991a4e25f38185e3ccba23af
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Mon Sep 10 10:07:54 2018 -0700
+
+ LP1727464: Adding record ID to the title link in the checkout interface
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: Garry Collum <gcollum at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/src/templates/staff/circ/patron/t_checkout.tt2
+
+commit 65f5afc47e9ed0d3006eeba963c6c7057479cdae
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Thu Sep 13 14:25:05 2018 -0400
+
+ LP#1792429: calculate queue position in correct order
+
+ This patch ensures that the relative hold queue position
+ displayed in the webstaff Hold Shelf and Record -> View Holds
+ interfaces is calculated in the correct order, i.e., (cut-in-line aside)
+ with holds requested earlier having a lower queue position than
+ holds requested later.
+
+ To test
+ -------
+ [1] Set up a bib with a number of hold requests.
+ [2] Under Record -> Viwe Holds, note that the queue
+ positions are reversed, with later holds having lower
+ queue positions.
+ [3] Apply the patch and repeat step #2. This time, the queue
+ positions should be correct.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+
+commit f594e2854a172ad61a5a27eaf3804d42a4a07020
+Author: Chris Sharp <csharp at georgialibraries.org>
+Date: Thu Sep 13 11:47:55 2018 -0400
+
+ LP#1774724 - stamp upgrade script
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+26 0 Open-ILS/src/sql/Pg/upgrade/1132.data.yaous_longoverdue_descrip_typos.sql
+0 26 Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaous_longoverdue_descrip_typos.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1132.data.yaous_longoverdue_descrip_typos.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaous_longoverdue_descrip_typos.sql
+
+commit 564ba9f18ebace573dc2ec4ef7c09a085adffe99
+Author: Remington Steed <rjs7 at calvin.edu>
+Date: Mon Apr 30 23:34:30 2018 -0400
+
+ LP#1774724: Fix copy-pasto's in Library Settings
+
+ Two long-overdue org unit settings made reference to "lost", being
+ apparently copied from the similar settings about lost items. This fixes
+ the wording, both in the settings database table and in the docs.
+
+ Signed-off-by: Remington Steed <rjs7 at calvin.edu>
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+
+3 3 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+26 0 Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaous_longoverdue_descrip_typos.sql
+1 1 docs/admin/librarysettings.adoc
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.yaous_longoverdue_descrip_typos.sql
+
+commit 8a1a43b57baf4036fe5ccf485caa0ed29e2fe2a2
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Wed Aug 29 10:58:20 2018 -0400
+
+ LP#1738688: Add cancel time to Most Recent Transits
+
+ Adds the transit cancel time to the Most Recent Transits section of
+ the Item Status Holds / Transit tab.
+
+ Test plan:
+ Place an item in transit and then cancel the transit. Retrieve the item in
+ Item Status / Detail View. In the Holds / Transit tab, there is no indication
+ the transit has been canceled before loading the patch. Post-patch, the
+ cancel time will display.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: John Amundson <jamundson at cwmars.org>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+6 0 Open-ILS/src/templates/staff/cat/item/t_holds_pane.tt2
+
+commit fab90985f34028b203a8de46c0f681b310fcb857
+Author: a. bellenir <ab at grpl.org>
+Date: Tue Jun 12 14:54:18 2018 -0400
+
+ LP#1773434: show in catalog
+
+ open a new staff client tab to the record's opac view, not a new opac tab
+
+ Signed-off-by: a. bellenir <ab at grpl.org>
+ Signed-off-by: Jeff Davis <jdavis at sitka.bclibraries.ca>
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit b19a728dbc515dde495174a5c4fb306c42af0291
+Author: a. bellenir <ab at grpl.org>
+Date: Mon Jun 4 19:41:55 2018 -0400
+
+ LP#1773434 missing option to "Show in Catalog"
+
+ Signed-off-by: a. bellenir <ab at grpl.org>
+ Signed-off-by: Garry Collum <gcollum at gmail.com>
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+
+2 0 Open-ILS/src/templates/staff/cat/item/t_list.tt2
+4 0 Open-ILS/web/js/ui/default/staff/cat/item/app.js
+6 0 Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit 4894212ed19a4ab6d90b9afd8505d71043fc6e93
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Thu Sep 13 10:25:20 2018 -0400
+
+ LP#1786534: ensure that changes don't regress
+
+ This patch ensures that somebody who installs a maintenance
+ release of 3.0 or 3.1 that includes update 1130, then subsequently
+ upgrades to 3.2 *and* applies the schema update scripts piecemeal
+ doesn't suffer a regression on actor.usr_merge not updating
+ Vandelay session ownership or patron name keywords.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+361 0 Open-ILS/src/sql/Pg/upgrade/1131.schema.keep_usr_merge_up_to_date.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1131.schema.keep_usr_merge_up_to_date.sql
+
+commit 6129d529f4456fe9c19c4e9fcf4f727eb2e612e6
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Thu Sep 13 10:16:04 2018 -0400
+
+ LP#1786534: stamp schema update
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+361 0 Open-ILS/src/sql/Pg/upgrade/1130.schema.actor_usr_merge-bail-on-same-user.sql
+0 361 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor_usr_merge-bail-on-same-user.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1130.schema.actor_usr_merge-bail-on-same-user.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor_usr_merge-bail-on-same-user.sql
+
+commit 7c580671be47cb2ea800b3e005f6a281acee4829
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Thu Sep 13 10:12:17 2018 -0400
+
+ LP#1786534: make update script reflect other recent changes in actor.usr_merge
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+35 1 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor_usr_merge-bail-on-same-user.sql
+
+commit ecae2ccba6ef760ea1ad90e1e7cac2fa60fe3dd7
+Author: Jason Stephenson <jason at sigio.com>
+Date: Fri Aug 10 15:10:04 2018 -0400
+
+ LP 1786534: Don't merge a user with itself.
+
+ It's possible to merge a user with itself using the actor.usr_merge
+ database function. This does not produce a useful result. One ends
+ up with a user that is flagged deleted, has a null card field, and is
+ likely to have their addresses and other cards deleted from the
+ database.
+
+ A simple check at the top of the database function to bail if the
+ src_usr and dest_usr are the same prevents this from happening. That
+ is the change that this commit makes.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Michele Morgan <mmorgan at noblenet.org>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+6 0 Open-ILS/src/sql/Pg/999.functions.global.sql
+327 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor_usr_merge-bail-on-same-user.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor_usr_merge-bail-on-same-user.sql
+
+commit 868904789b1be09470fc1deca68cc4789248719a
+Author: Chris Sharp <csharp at georgialibraries.org>
+Date: Tue Nov 7 16:49:37 2017 -0500
+
+ LP#1269574 - Exclude backordered copies from deletion.
+
+ When canceling a lineitem with a cancel reason that
+ keep debits = true, make sure we don't delete those copies.
+
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+ Signed-off-by: John Amundson <jamundson at cwmars.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+3 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
+
+commit cf2298b38273697e14381a442968e9e2097dbf79
+Author: Cesar Velez <cesar.velez at equinoxinitiative.org>
+Date: Mon Aug 27 16:07:48 2018 -0400
+
+ LP#1776917 - fix patron bill grid lacking bill ID
+
+ Without the required attribute in the grid template
+ declaration, the Bill# column *had* to be enabled for
+ bill payments to work. This adds required attribute to
+ the Bill #, so that it's fetched regardless of whether
+ displayed or not, so posting payments work correctly.
+
+ Signed-off by: Cesar Velez <cesar.velez at equinoxinitiative.org>
+ Signed-off-by: John Amundson <jamundson at cwmars.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+1 1 Open-ILS/src/templates/staff/circ/patron/t_bills_list.tt2
+
+commit be9f2cccfe464d1fb99f686e1f09e4c2ba70d953
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Mon Sep 10 11:23:12 2018 -0700
+
+ LP 1743654: Removing a duplicate flesh_fields array entry
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: John Amundson <jamundson at cwmars.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+1 1 Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit 5eaa1710418e237cd6ec9745b9c77e978b5fba5d
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Mon Sep 10 11:16:51 2018 -0700
+
+ LP1743654: Fleshing out the Created By column in Item Status
+
+ To test:
+ 1) Scan an item into Item Status.
+ 2) Turn on the Created By column.
+ 3) Note that the Created By column shows the ID of the user
+ that created the record.
+ 4) Apply this commit and repeat steps 1-2.
+ 5) Note that the Created By column now shows the creator's
+ user name as a link, which opens the creator's record in
+ a new tab.
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: John Amundson <jamundson at cwmars.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+8 1 Open-ILS/src/templates/staff/cat/item/t_list.tt2
+1 1 Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit bacd986156c1551bd5f9cbfca44aa49c66f2ec20
+Author: Ben Shum <ben at evergreener.net>
+Date: Wed Sep 12 14:26:25 2018 -0400
+
+ LP#1718459: Remove apache 2.2 language from README
+
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+3 5 docs/installation/server_installation.adoc
+
+commit c6437c29fdeb0a922eac46aa1d4f2190e43e9307
+Author: Jason Stephenson <jason at sigio.com>
+Date: Fri Sep 22 00:29:37 2017 -0400
+
+ Lp#1718459: Remove Debian 7 Wheezy Installation Support
+
+ Remove references to Debian 7 Wheezy in the installation and upgrade
+ documentation.
+
+ Remove debian-wheezy* targets from
+ Open-ILS/src/extras/Makefile.install and the supporting Makefiles.
+
+ Remove the example Apache 2.2 configuration files, since the supported
+ distributions all ship with Apache 2.4.
+
+ Move the eg_startup.in file from Open-ILS/example/apache to
+ Open-ILS/examples/apache_24.
+
+ Remove references to eg_wheezy_installer.sh in Perl live test
+ comments.
+
+ Remove Open-ILS/web/js/ui/default/staff/README.install, which is out
+ of date and entirely aimed at Debian 7 Wheezy.
+
+ To test: Simply install on a supported distribution other than Debian
+ 7 Wheezy and do the usual tests.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+0 154 Open-ILS/examples/apache/eg.conf.in
+0 29 Open-ILS/examples/apache/eg_startup.in
+0 859 Open-ILS/examples/apache/eg_vhost.conf.in
+29 0 Open-ILS/examples/apache_24/eg_startup.in
+3 11 Open-ILS/src/Makefile.am
+1 13 Open-ILS/src/extras/Makefile.install
+1 1 Open-ILS/src/extras/install/Makefile.debian-jessie
+0 159 Open-ILS/src/extras/install/Makefile.debian-wheezy
+1 2 Open-ILS/src/perlmods/live_t/01-auth.t
+1 2 Open-ILS/src/perlmods/live_t/02-simple_circ.t
+1 2 Open-ILS/src/perlmods/live_t/03-overdue_circ.t
+1 2 Open-ILS/src/perlmods/live_t/04-overdue_with_closed_dates.t
+1 2 Open-ILS/src/perlmods/live_t/05-pay_bills.t
+1 2 Open-ILS/src/perlmods/live_t/09-lp1198465_neg_balances.t
+17 67 docs/installation/server_installation.adoc
+2 3 docs/installation/server_upgrade.adoc
+ delete mode 100644 Open-ILS/examples/apache/eg.conf.in
+ delete mode 100755 Open-ILS/examples/apache/eg_startup.in
+ delete mode 100644 Open-ILS/examples/apache/eg_vhost.conf.in
+ create mode 100755 Open-ILS/examples/apache_24/eg_startup.in
+ delete mode 100644 Open-ILS/src/extras/install/Makefile.debian-wheezy
+
+commit 7567914437d0c0508d845f96c2677b29f9d411af
+Author: Steven Callender <stevecallender at esilibrary.com>
+Date: Tue Sep 11 15:20:55 2018 -0400
+
+ LP1792014: KPAC fix for opac.holds.org_unit_not_pickup_lib in org_selector.
+
+ Signed-off-by: Steven Callender <stevecallender at esilibrary.com>
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+1 1 Open-ILS/src/templates/kpac/getit.tt2
+
+commit f3e7a335a930842cc5129f6334eed8f285208c38
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Mon Sep 10 11:42:34 2018 -0700
+
+ LP1775640: Adds deposit columns to Item Status and Holdings View grids
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: Beth Willis <willis at noblenet.org>
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+2 0 Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2
+2 0 Open-ILS/src/templates/staff/cat/item/t_list.tt2
+
+commit b549d593f6d294c7a7f526e97d159182f33e32e9
+Author: Jason Stephenson <jason at sigio.com>
+Date: Mon Sep 10 16:39:45 2018 -0400
+
+ Lp 1746251: Fix Circulation Modifier typos.
+
+ Change "Circulation Modifer" to "Circulation Modifier" in two files.
+ This commit only addresses the obvious typos. I leave the Circ
+ Modifier versus Circulation Modifier debate as an open question. One
+ of my concerns is changing them all to one string may require some
+ reorganization of interfaces to avoid clunkiness.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+1 1 Open-ILS/src/templates/staff/admin/serials/t_attr_edit.tt2
+1 1 Open-ILS/src/templates/staff/cat/volcopy/t_attr_edit.tt2
+
+commit 6de97f9b7bf3588b901421682757146dbff3af40
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Mon Sep 10 09:23:29 2018 -0700
+
+ LP1665052: Fix checkin workstation display on recent circs view
+
+ To test:
+ 1) Go to Item Status > Detail View > Recent Circ History for
+ an item that is currently checked out.
+ 2) Note that the Checkin Workstation field says
+ "{{circ.checkin_workstation.name()}}"
+ 3) Apply this commit.
+ 4) Note that the Checkin Workstation field is empty if an
+ item is an item hasn't been checked in, but is filled with
+ the appropriate workstation name after it has been checked
+ in.
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+1 1 Open-ILS/src/templates/staff/cat/item/t_circs_pane.tt2
+
+commit ef3fa1488e4a84f998a4ba2671d796a553f7c07c
+Author: Cesar Velez <cesar.velez at equinoxinitiative.org>
+Date: Mon Aug 20 15:09:56 2018 -0400
+
+ LP#1739087 - enable vol to be zeroed
+
+ Allow user to "blank" or "zero out" a volume row by using the new "x"
+
+ Signed-off by: Cesar Velez <cesar.velez at equinoxinitiative.org>
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+5 1 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 7417b395d9b790cbcd66914a3884b6a3d248d2e0
+Author: Cesar Velez <cesar.velez at equinoxinitiative.org>
+Date: Thu Aug 16 17:40:56 2018 -0400
+
+ LP#1739087 - add [x] to volcopy editor volume rows-FollowUp
+
+ Since we're programmatically changing the Volume counter,
+ must manually trigger the change event, to prevent sync issues.
+
+ Signed-off by: Cesar Velez <cesar.velez at equinoxinitiative.org>
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+4 2 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit ad1d99ce712afef42c099b935d377f97a8ffb385
+Author: Cesar Velez <cesar.velez at equinoxinitiative.org>
+Date: Fri Jul 27 11:21:25 2018 -0400
+
+ LP#1739087 - add [x] to volcopy editor volume rows
+
+ Enable newly created call numbers to be removable in
+ VolCopyEditor.
+
+ Signed-off by: Cesar Velez <cesar.velez at equinoxinitiative.org>
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+41 4 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 6fb3aaba241eee24be54751b63e923436c38d047
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Aug 7 16:26:27 2018 -0400
+
+ LP#1785887 edi_order_pusher.pl sets message account
+
+ Apply the edi_message.account value when sending EDI order messages via
+ edi_order_pusher.pl. This solves a problem where EDI ORDERS message
+ were not visible in the interface, because there was no way to complete
+ the permission check.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+
+16 0 Open-ILS/src/support-scripts/edi_order_pusher.pl
+
+commit 8310bfccaaa30d0a8171a1050b42cbb280b93653
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Sun Jun 3 15:50:40 2018 -0700
+
+ LP1010635: Make bre dates populate in Item Status grid
+
+ To test:
+ 1) Enable the Date Record Created and Date Record Last Edited columns
+ in Item Status.
+ 2) Scan an item barcode into Item Status. Note that the two columns
+ you enabled are empty.
+ 3) Apply this commit.
+ 4) Reload the Item Status screen, and scan your barcode again. The
+ dates should now be populated.
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: Garry Collum <gcollum at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit e763bd684550bf44093734f14fb93ce05cddd458
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Jul 30 17:23:49 2018 -0400
+
+ LP#1724083 Webstaff approve pending patron address
+
+ Add support for approving pending patron addresses in the webstaff
+ patron edit interface.
+
+ To test:
+ [1] Enable the pending address org unit setting.
+ [2] Log into the catalog and "edit" an address.
+ [3] Edit same user in staff client and use the Approve action.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Garry Collum <gcollum at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+29 0 Open-ILS/src/templates/staff/circ/patron/t_edit.tt2
+7 0 Open-ILS/src/templates/staff/css/circ.css.tt2
+41 0 Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+
+commit 1d38620f4f01444d1bf9b9485f38a9bf3f9589d1
+Author: Dan Scott <dscott at laurentian.ca>
+Date: Sun Jun 3 14:34:04 2018 -0400
+
+ LP#1774886 Distinguish Phys Char Wizard with an edit icon
+
+ As both authority fields and the Physical Characteristics Wizard for 007 use
+ the same glyphicons-link class, it's not obvious to new users of the MARC
+ editor that the icons result in radically different actions.
+
+ Change the 007 icon to glyphicons-edit to reflect that it opens an editor
+ interface.
+
+ Signed-off-by: Dan Scott <dscott at laurentian.ca>
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/cat/services/marcedit.js
+
+commit f58e975bb6ddeacef05ee84b6ba58323f98f8ca4
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Tue Sep 11 09:15:19 2018 -0700
+
+ Docs: Adding info about supercat filters
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+14 0 docs/development/data_supercat.adoc
+
+commit 8bedbe0f06719418be323fe9c8e7b4e37cf0148d
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Fri Sep 7 11:21:00 2018 -0400
+
+ Translation updates - po files
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+3 3 build/i18n/po/cat.properties/ar-JO.po
+3 3 build/i18n/po/cat.properties/cs-CZ.po
+3 3 build/i18n/po/cat.properties/de-DE.po
+3 3 build/i18n/po/cat.properties/en-CA.po
+3 3 build/i18n/po/cat.properties/en-GB.po
+3 3 build/i18n/po/cat.properties/es-ES.po
+3 3 build/i18n/po/cat.properties/fi-FI.po
+3 3 build/i18n/po/cat.properties/fr-CA.po
+3 3 build/i18n/po/cat.properties/he-IL.po
+3 3 build/i18n/po/cat.properties/hu-HU.po
+3 3 build/i18n/po/cat.properties/hy-AM.po
+3 3 build/i18n/po/cat.properties/oc-FR.po
+3 3 build/i18n/po/cat.properties/pt-BR.po
+3 3 build/i18n/po/cat.properties/ru-RU.po
+3 3 build/i18n/po/cat.properties/sv-SE.po
+3 3 build/i18n/po/cat.properties/tr-TR.po
+7 7 build/i18n/po/circ.properties/cs-CZ.po
+20 15 build/i18n/po/circ.properties/en-GB.po
+3 3 build/i18n/po/common.properties/ar-JO.po
+3 3 build/i18n/po/common.properties/cs-CZ.po
+3 3 build/i18n/po/common.properties/de-DE.po
+3 3 build/i18n/po/common.properties/en-CA.po
+3 3 build/i18n/po/common.properties/en-GB.po
+3 3 build/i18n/po/common.properties/es-ES.po
+3 3 build/i18n/po/common.properties/fi-FI.po
+3 3 build/i18n/po/common.properties/fr-CA.po
+3 3 build/i18n/po/common.properties/he-IL.po
+3 3 build/i18n/po/common.properties/hu-HU.po
+3 3 build/i18n/po/common.properties/hy-AM.po
+3 3 build/i18n/po/common.properties/oc-FR.po
+3 3 build/i18n/po/common.properties/pt-BR.po
+3 3 build/i18n/po/common.properties/ru-RU.po
+3 3 build/i18n/po/common.properties/sv-SE.po
+3 3 build/i18n/po/common.properties/tr-TR.po
+12 12 build/i18n/po/conify/cs-CZ.po
+4019 3393 build/i18n/po/db.seed/ar-JO.po
+4124 3478 build/i18n/po/db.seed/cs-CZ.po
+3973 3365 build/i18n/po/db.seed/de-DE.po
+3982 3374 build/i18n/po/db.seed/en-CA.po
+3982 3374 build/i18n/po/db.seed/en-GB.po
+4024 3398 build/i18n/po/db.seed/es-ES.po
+3991 3383 build/i18n/po/db.seed/fi-FI.po
+3990 3382 build/i18n/po/db.seed/fr-CA.po
+3970 3362 build/i18n/po/db.seed/he-IL.po
+3970 3362 build/i18n/po/db.seed/hu-HU.po
+4033 3407 build/i18n/po/db.seed/hy-AM.po
+3974 3366 build/i18n/po/db.seed/oc-FR.po
+3988 3380 build/i18n/po/db.seed/pt-BR.po
+3983 3375 build/i18n/po/db.seed/ru-RU.po
+3970 3362 build/i18n/po/db.seed/sv-SE.po
+3970 3362 build/i18n/po/db.seed/tr-TR.po
+2943 2781 build/i18n/po/fm_IDL.dtd/ar-JO.po
+2945 2783 build/i18n/po/fm_IDL.dtd/cs-CZ.po
+2936 2774 build/i18n/po/fm_IDL.dtd/de-DE.po
+2943 2781 build/i18n/po/fm_IDL.dtd/en-CA.po
+2942 2780 build/i18n/po/fm_IDL.dtd/en-GB.po
+2952 2790 build/i18n/po/fm_IDL.dtd/es-ES.po
+2943 2781 build/i18n/po/fm_IDL.dtd/fi-FI.po
+2934 2772 build/i18n/po/fm_IDL.dtd/fr-CA.po
+2934 2772 build/i18n/po/fm_IDL.dtd/he-IL.po
+2934 2772 build/i18n/po/fm_IDL.dtd/hu-HU.po
+2943 2781 build/i18n/po/fm_IDL.dtd/hy-AM.po
+2934 2772 build/i18n/po/fm_IDL.dtd/oc-FR.po
+2942 2780 build/i18n/po/fm_IDL.dtd/pt-BR.po
+2942 2780 build/i18n/po/fm_IDL.dtd/ru-RU.po
+2934 2772 build/i18n/po/fm_IDL.dtd/sv-SE.po
+2934 2772 build/i18n/po/fm_IDL.dtd/tr-TR.po
+39 35 build/i18n/po/ils_events.xml/ar-JO.po
+39 35 build/i18n/po/ils_events.xml/cs-CZ.po
+39 35 build/i18n/po/ils_events.xml/de-DE.po
+39 35 build/i18n/po/ils_events.xml/en-CA.po
+39 35 build/i18n/po/ils_events.xml/en-GB.po
+39 35 build/i18n/po/ils_events.xml/es-ES.po
+39 35 build/i18n/po/ils_events.xml/fi-FI.po
+39 35 build/i18n/po/ils_events.xml/fr-CA.po
+39 35 build/i18n/po/ils_events.xml/he-IL.po
+39 35 build/i18n/po/ils_events.xml/hu-HU.po
+39 35 build/i18n/po/ils_events.xml/hy-AM.po
+39 35 build/i18n/po/ils_events.xml/oc-FR.po
+39 35 build/i18n/po/ils_events.xml/pt-BR.po
+39 35 build/i18n/po/ils_events.xml/ru-RU.po
+39 35 build/i18n/po/ils_events.xml/sv-SE.po
+39 35 build/i18n/po/ils_events.xml/tr-TR.po
+52 36 build/i18n/po/lang.dtd/ar-JO.po
+104 92 build/i18n/po/lang.dtd/cs-CZ.po
+25 26 build/i18n/po/lang.dtd/de-DE.po
+54 38 build/i18n/po/lang.dtd/en-CA.po
+54 38 build/i18n/po/lang.dtd/en-GB.po
+55 39 build/i18n/po/lang.dtd/es-ES.po
+55 39 build/i18n/po/lang.dtd/fi-FI.po
+25 26 build/i18n/po/lang.dtd/fr-CA.po
+25 26 build/i18n/po/lang.dtd/he-IL.po
+25 26 build/i18n/po/lang.dtd/hu-HU.po
+73 89 build/i18n/po/lang.dtd/hy-AM.po
+25 26 build/i18n/po/lang.dtd/oc-FR.po
+25 26 build/i18n/po/lang.dtd/pt-BR.po
+25 26 build/i18n/po/lang.dtd/ru-RU.po
+25 26 build/i18n/po/lang.dtd/sv-SE.po
+25 26 build/i18n/po/lang.dtd/tr-TR.po
+17 15 build/i18n/po/selfcheck.js/fr-CA.po
+461 282 build/i18n/po/tpac/ar-JO.po
+464 285 build/i18n/po/tpac/cs-CZ.po
+419 276 build/i18n/po/tpac/de-DE.po
+435 277 build/i18n/po/tpac/en-CA.po
+1264 1012 build/i18n/po/tpac/en-GB.po
+534 353 build/i18n/po/tpac/es-ES.po
+439 278 build/i18n/po/tpac/fi-FI.po
+447 286 build/i18n/po/tpac/fr-CA.po
+415 275 build/i18n/po/tpac/he-IL.po
+415 275 build/i18n/po/tpac/hu-HU.po
+461 282 build/i18n/po/tpac/hy-AM.po
+416 276 build/i18n/po/tpac/oc-FR.po
+428 276 build/i18n/po/tpac/pt-BR.po
+415 275 build/i18n/po/tpac/ru-RU.po
+415 275 build/i18n/po/tpac/sv-SE.po
+415 275 build/i18n/po/tpac/tr-TR.po
+1729 698 build/i18n/po/webstaff/ar-JO.po
+1778 738 build/i18n/po/webstaff/cs-CZ.po
+1681 695 build/i18n/po/webstaff/en-GB.po
+1855 805 build/i18n/po/webstaff/es-ES.po
+1691 696 build/i18n/po/webstaff/hy-AM.po
+1681 695 build/i18n/po/webstaff/ru-RU.po
+
+commit 40995f7f6b938c72094d4644d9782da563af2cbb
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Fri Sep 7 07:34:36 2018 -0700
+
+ Docs: finalizing acknowledgments section for 3.2 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+5 0 docs/RELEASE_NOTES_3_2.adoc
+
+commit 296b81441b3157fecf2509270e0ff0c638047659
+Author: Andrea Buntz Neiman <abneiman at equinoxinitiative.org>
+Date: Fri Sep 7 07:27:02 2018 -0700
+
+ Docs: Adding Equinox Open Library Initiative's acknowledgments
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+13 0 docs/RELEASE_NOTES_3_2.adoc
+
+commit bb466cd966fa3a2677e886d0c12364856b66c46a
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Thu Sep 6 21:01:17 2018 -0700
+
+ Docs: documenting new 3.2 features based on release notes
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+11 36 docs/RELEASE_NOTES_3_2.adoc
+15 0 docs/acquisitions/selection_lists_po.adoc
+18 0 docs/cataloging/authorities.adoc
+61 0 docs/development/support_scripts.adoc
+
+commit 832c606ce9fec181757e8dfdb430819cbdd140c9
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Thu Sep 6 17:24:06 2018 -0700
+
+ Docs: spellchecking 3.2 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+1212 1184 docs/.aspell.en.pws
+6 6 docs/RELEASE_NOTES_3_2.adoc
+
+commit b7abce6cbd5e74e2456a3f52424f16031b20740d
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Thu Sep 6 17:09:53 2018 -0700
+
+ Docs: adding more contributor info to 3.2 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+22 1 docs/RELEASE_NOTES_3_2.adoc
+
+commit bb8c14f0afdf8660d8f0fc701dadbe60f44f79a6
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Thu Sep 6 18:57:05 2018 -0400
+
+ LP#1791184: ensure that 'make clean' doesn't delete pingest.pl
+
+ This patch corrects an issue where pingest.pl was treated as if
+ it were generated from a pingest.pl.in source file during the configure
+ step, meaning that it got deleted by 'make clean'. This patch also
+ adds a couple helpful comments.
+
+ To test
+ -------
+ [1] Apply the patch.
+ [2] From a git checkout, run the configure and make steps, followed
+ by a 'make clean'. Verify that pingest.pl is not deleted from
+ the source tree.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+7 3 Open-ILS/src/Makefile.am
+
+commit 43e0db09a9c784619b5adfb6caaf8af21197bfb9
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Thu Sep 6 15:00:26 2018 -0700
+
+ Docs: Adding two more entries to 3.2 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+88 0 docs/RELEASE_NOTES_3_2.adoc
+
+commit 0469a1cb06a6adcaf80e04325618be9fca3895c7
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Wed Sep 5 16:44:08 2018 -0400
+
+ LP#1790923: add release notes
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+13 0 docs/RELEASE_NOTES_NEXT/Client/Disabling_Legacy_Staff_client.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Client/Disabling_Legacy_Staff_client.adoc
+
+commit 9d2ddf6d75b674cbf905817fa637b28397e1e354
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Wed Sep 5 16:39:13 2018 -0400
+
+ LP#1790923: adjust or remove references to old staff client in install doc
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+7 8 docs/installation/server_installation.adoc
+
+commit e3032ad3cd1fe2e684c949613b82841efd401867
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Wed Sep 5 16:36:53 2018 -0400
+
+ LP#1790923: make_release no longer munges STAMP_ID in the README
+
+ (As that text no longer exists; the installation instructions simply
+ will not mention the old staff client.)
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+0 2 build/tools/make_release
+
+commit 23fd5ef82afefa0732df9f4f386888ccffad8b1a
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Wed Sep 5 16:29:22 2018 -0400
+
+ LP#1790923: disable XUL staff client by default
+
+ This patch discourages use of the legacy XUL staff client
+ by adjusting the installation process so that a versioned XUL
+ server directory is not created. Instead, by default XUL
+ server files (which is still needed by a few web staff client
+ interfaces) end up in /openils/var/web/xul/legacy. During installation
+ and upgrade, the /openils/var/web/xul/server symbolic link is
+ set to point to /openils/var/web/xul/legacy/server if possible.
+
+ If for some reason a given installation of Evergreen 3.2.x does not
+ wish to stop using the XUL staff client, STAFF_CLIENT_STAMP_ID
+ can still be provided during the 'make install' step, and the
+ make_release script can still create the XUL client installers
+ if given the -x switch.
+
+ Note, however, that use of the XUL staff client in 3.2.x is
+ NOT RECOMMENDED and no longer under any guarantee of community
+ support.
+
+ To test
+ -------
+ [1] Perform a fresh installation and verify that /openils/var/web/xul/legacy
+ is created and that /openils/var/web/xul/server is a symlink
+ pointing to /openils/var/web/xul/legacy/server.
+ [2] Verify that the web staff client works and that the
+ user permissions editor in particular continues to work.
+ [3] Perform an upgrade; verify that /openils/var/web/xul/legacy exists
+ and that if /openils/var/web/xul/server started out as a symlink,
+ it has been repointed.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+21 1 Open-ILS/xul/staff_client/Makefile.am
+1 15 docs/installation/server_installation.adoc
+13 1 docs/installation/server_upgrade.adoc
+
+commit 81324a87efcaa46b2d4bf289d04280eacf7be625
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Thu Sep 6 17:07:35 2018 -0400
+
+ LP#1775466 Stamping DB upgrade for Ang6 app
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+106 0 Open-ILS/src/sql/Pg/upgrade/1129.data.acq-grid-settings.sql
+0 106 Open-ILS/src/sql/Pg/upgrade/XXXX.data.acq-grid-settings.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1129.data.acq-grid-settings.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.acq-grid-settings.sql
+
+commit 03d94e21e5052156efecefb1ac87de11206c9954
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Thu Sep 6 17:03:58 2018 -0400
+
+ LP#1775466: tweak how make_release prunes eg2/node_modules
+
+ Need the -f since some stuff under eg2/node_modules/.cache
+ ends up as 0444 for some reason, meaning that 'rm -r' doesn't
+ remove those files and complains about it.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 build/tools/make_release
+
+commit 52f83fe0fd7b5765dd541d597def27040eceee35
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Thu Sep 6 16:27:27 2018 -0400
+
+ LP#1775466: add a newly-added entry to the ang6 navbar
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+4 0 Open-ILS/src/eg2/src/app/staff/nav.component.html
+
+commit c37f7ba9e3cfbf7ff0feeb9c77710d706d63697d
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Thu Sep 6 16:26:45 2018 -0400
+
+ LP#1775466: improve release notes for the Angular6 app
+
+ More needs to be added to eg_vhost.conf when upgrading an
+ existing installation.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+4 0 docs/RELEASE_NOTES_NEXT/Architecture/angular6-app.adoc
+
+commit d28eeddfd5dda73db0b017a94c37573f68057f33
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 15:53:28 2018 -0400
+
+ LP#1775466 Angular6 base app release notes
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+66 0 docs/RELEASE_NOTES_NEXT/Architecture/angular6-app.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Architecture/angular6-app.adoc
+
+commit 48055f0527c77b71fb402d2af15c47b4d8db40e0
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 15:55:11 2018 -0400
+
+ LP#1775466 make_release builds Angular app
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+12 2 build/tools/make_release
+
+commit 060af9b3739033bc276b692b45c118b6eb4ba83b
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 15:57:51 2018 -0400
+
+ LP#1775466 Add Angular building to install docs
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+43 2 docs/installation/server_installation.adoc
+
+commit 9a79de4aa33b52f55397bcbcd6cd9f84c3dff149
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 15:56:41 2018 -0400
+
+ LP#1775466 developer prereqs update Node / add angular/cli
+
+ NodeJS version updated from v6 to v8.
+ Install angular/cli globally, needed for building the Angular app.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/src/extras/Makefile.install
+1 1 Open-ILS/src/extras/install/Makefile.common
+
+commit e8cf82d0ddb13dfbcbf96bf7528ce34e9574c0d1
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 15:58:23 2018 -0400
+
+ LP#1775466 Angular Apache configuration updates
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+31 0 Open-ILS/examples/apache/eg_vhost.conf.in
+30 0 Open-ILS/examples/apache_24/eg_vhost.conf.in
+
+commit a29408d79df4b5240bd206fcd2158cadc9547bae
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 15:54:21 2018 -0400
+
+ LP#1775466 Acq admin grid workstation settings
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+101 0 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+106 0 Open-ILS/src/sql/Pg/upgrade/XXXX.data.acq-grid-settings.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.acq-grid-settings.sql
+
+commit 038cd40207c5f63001bae2b68defdf44163c352d
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 16:04:19 2018 -0400
+
+ LP#1775466 AngularJS updates for Angular integration
+
+ Changes include:
+
+ * Navbar links to Angular acquisitions admin page.
+ * Auth cookie migration tool for moving AngularJS cookies from /eg/staff
+ to /.
+ * Store last printed receipt (etc) in its final compiled form so it can
+ be directly reprinted without having to recompile (via AngularJS).
+ This allows the reprint-last action to work in the Angular app.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+13 1 Open-ILS/src/templates/staff/navbar.tt2
+4 0 Open-ILS/web/js/ui/default/staff/services/auth.js
+20 2 Open-ILS/web/js/ui/default/staff/services/hatch.js
+22 15 Open-ILS/web/js/ui/default/staff/services/print.js
+
+commit 6c706f454b2b9cdf2d46df3c60e53a0d3cb531d7
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 16:11:41 2018 -0400
+
+ LP#1775466 Angular(6) base application
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 0 .gitignore
+13 0 Open-ILS/src/eg2/.editorconfig
+49 0 Open-ILS/src/eg2/.gitignore
+31 0 Open-ILS/src/eg2/CHEAT_SHEET.adoc
+155 0 Open-ILS/src/eg2/angular.json
+14 0 Open-ILS/src/eg2/e2e/app.e2e-spec.ts
+11 0 Open-ILS/src/eg2/e2e/app.po.ts
+14 0 Open-ILS/src/eg2/e2e/tsconfig.e2e.json
+43 0 Open-ILS/src/eg2/karma.conf.js
+10689 0 Open-ILS/src/eg2/package-lock.json
+84 0 Open-ILS/src/eg2/package.json
+28 0 Open-ILS/src/eg2/protractor.conf.js
+11 0 Open-ILS/src/eg2/src/app/app.component.ts
+33 0 Open-ILS/src/eg2/src/app/app.module.ts
+71 0 Open-ILS/src/eg2/src/app/common.module.ts
+9 0 Open-ILS/src/eg2/src/app/core/README
+341 0 Open-ILS/src/eg2/src/app/core/auth.service.ts
+55 0 Open-ILS/src/eg2/src/app/core/event.service.ts
+47 0 Open-ILS/src/eg2/src/app/core/event.spec.ts
+103 0 Open-ILS/src/eg2/src/app/core/format.service.ts
+90 0 Open-ILS/src/eg2/src/app/core/format.spec.ts
+137 0 Open-ILS/src/eg2/src/app/core/idl.service.ts
+28 0 Open-ILS/src/eg2/src/app/core/idl.spec.ts
+69 0 Open-ILS/src/eg2/src/app/core/locale.service.ts
+187 0 Open-ILS/src/eg2/src/app/core/net.service.ts
+278 0 Open-ILS/src/eg2/src/app/core/org.service.ts
+66 0 Open-ILS/src/eg2/src/app/core/org.spec.ts
+305 0 Open-ILS/src/eg2/src/app/core/pcrud.service.ts
+59 0 Open-ILS/src/eg2/src/app/core/perm.service.ts
+114 0 Open-ILS/src/eg2/src/app/core/server-store.service.ts
+107 0 Open-ILS/src/eg2/src/app/core/store.service.ts
+22 0 Open-ILS/src/eg2/src/app/core/store.spec.ts
+36 0 Open-ILS/src/eg2/src/app/resolver.service.ts
+29 0 Open-ILS/src/eg2/src/app/routing.module.ts
+6 0 Open-ILS/src/eg2/src/app/share/README
+26 0 Open-ILS/src/eg2/src/app/share/accesskey/accesskey-info.component.html
+25 0 Open-ILS/src/eg2/src/app/share/accesskey/accesskey-info.component.ts
+56 0 Open-ILS/src/eg2/src/app/share/accesskey/accesskey.directive.ts
+67 0 Open-ILS/src/eg2/src/app/share/accesskey/accesskey.service.ts
+249 0 Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts
+28 0 Open-ILS/src/eg2/src/app/share/catalog/catalog-common.module.ts
+143 0 Open-ILS/src/eg2/src/app/share/catalog/catalog-url.service.ts
+210 0 Open-ILS/src/eg2/src/app/share/catalog/catalog.service.ts
+90 0 Open-ILS/src/eg2/src/app/share/catalog/marc-html.component.ts
+266 0 Open-ILS/src/eg2/src/app/share/catalog/search-context.ts
+54 0 Open-ILS/src/eg2/src/app/share/catalog/unapi.service.ts
+25 0 Open-ILS/src/eg2/src/app/share/combobox/combobox-entry.component.ts
+27 0 Open-ILS/src/eg2/src/app/share/combobox/combobox.component.html
+241 0 Open-ILS/src/eg2/src/app/share/combobox/combobox.component.ts
+21 0 Open-ILS/src/eg2/src/app/share/date-select/date-select.component.html
+70 0 Open-ILS/src/eg2/src/app/share/date-select/date-select.component.ts
+17 0 Open-ILS/src/eg2/src/app/share/dialog/confirm.component.html
+17 0 Open-ILS/src/eg2/src/app/share/dialog/confirm.component.ts
+80 0 Open-ILS/src/eg2/src/app/share/dialog/dialog.component.ts
+5 0 Open-ILS/src/eg2/src/app/share/dialog/progress-inline.component.css
+28 0 Open-ILS/src/eg2/src/app/share/dialog/progress-inline.component.html
+92 0 Open-ILS/src/eg2/src/app/share/dialog/progress-inline.component.ts
+5 0 Open-ILS/src/eg2/src/app/share/dialog/progress.component.css
+33 0 Open-ILS/src/eg2/src/app/share/dialog/progress.component.html
+108 0 Open-ILS/src/eg2/src/app/share/dialog/progress.component.ts
+22 0 Open-ILS/src/eg2/src/app/share/dialog/prompt.component.html
+19 0 Open-ILS/src/eg2/src/app/share/dialog/prompt.component.ts
+146 0 Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.html
+302 0 Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts
+20 0 Open-ILS/src/eg2/src/app/share/grid/grid-body-cell.component.html
+57 0 Open-ILS/src/eg2/src/app/share/grid/grid-body-cell.component.ts
+39 0 Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html
+77 0 Open-ILS/src/eg2/src/app/share/grid/grid-body.component.ts
+69 0 Open-ILS/src/eg2/src/app/share/grid/grid-column-config.component.html
+16 0 Open-ILS/src/eg2/src/app/share/grid/grid-column-config.component.ts
+20 0 Open-ILS/src/eg2/src/app/share/grid/grid-column-width.component.html
+32 0 Open-ILS/src/eg2/src/app/share/grid/grid-column-width.component.ts
+57 0 Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts
+32 0 Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html
+85 0 Open-ILS/src/eg2/src/app/share/grid/grid-header.component.ts
+30 0 Open-ILS/src/eg2/src/app/share/grid/grid-print.component.html
+45 0 Open-ILS/src/eg2/src/app/share/grid/grid-print.component.ts
+33 0 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-action.component.ts
+43 0 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-button.component.ts
+37 0 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-checkbox.component.ts
+152 0 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html
+86 0 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.ts
+142 0 Open-ILS/src/eg2/src/app/share/grid/grid.component.css
+27 0 Open-ILS/src/eg2/src/app/share/grid/grid.component.html
+149 0 Open-ILS/src/eg2/src/app/share/grid/grid.component.ts
+50 0 Open-ILS/src/eg2/src/app/share/grid/grid.module.ts
+972 0 Open-ILS/src/eg2/src/app/share/grid/grid.ts
+17 0 Open-ILS/src/eg2/src/app/share/org-select/org-select.component.html
+212 0 Open-ILS/src/eg2/src/app/share/org-select/org-select.component.ts
+16 0 Open-ILS/src/eg2/src/app/share/print/print.component.html
+133 0 Open-ILS/src/eg2/src/app/share/print/print.component.ts
+41 0 Open-ILS/src/eg2/src/app/share/print/print.service.ts
+74 0 Open-ILS/src/eg2/src/app/share/string/string.component.ts
+78 0 Open-ILS/src/eg2/src/app/share/string/string.service.ts
+11 0 Open-ILS/src/eg2/src/app/share/toast/toast.component.css
+3 0 Open-ILS/src/eg2/src/app/share/toast/toast.component.html
+43 0 Open-ILS/src/eg2/src/app/share/toast/toast.component.ts
+39 0 Open-ILS/src/eg2/src/app/share/toast/toast.service.ts
+19 0 Open-ILS/src/eg2/src/app/share/tree/tree.component.css
+20 0 Open-ILS/src/eg2/src/app/share/tree/tree.component.html
+60 0 Open-ILS/src/eg2/src/app/share/tree/tree.component.ts
+20 0 Open-ILS/src/eg2/src/app/share/tree/tree.module.ts
+133 0 Open-ILS/src/eg2/src/app/share/tree/tree.ts
+78 0 Open-ILS/src/eg2/src/app/share/util/audio.service.ts
+111 0 Open-ILS/src/eg2/src/app/share/util/pager.ts
+57 0 Open-ILS/src/eg2/src/app/staff/about.component.html
+25 0 Open-ILS/src/eg2/src/app/staff/about.component.ts
+60 0 Open-ILS/src/eg2/src/app/staff/admin/acq/admin-acq-splash.component.html
+11 0 Open-ILS/src/eg2/src/app/staff/admin/acq/admin-acq-splash.component.ts
+24 0 Open-ILS/src/eg2/src/app/staff/admin/acq/admin-acq.module.ts
+22 0 Open-ILS/src/eg2/src/app/staff/admin/acq/routing.module.ts
+61 0 Open-ILS/src/eg2/src/app/staff/admin/basic-admin-page.component.ts
+28 0 Open-ILS/src/eg2/src/app/staff/admin/common.module.ts
+23 0 Open-ILS/src/eg2/src/app/staff/admin/routing.module.ts
+99 0 Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.html
+11 0 Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.ts
+24 0 Open-ILS/src/eg2/src/app/staff/admin/server/admin-server.module.ts
+19 0 Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts
+14 0 Open-ILS/src/eg2/src/app/staff/admin/workstation/routing.module.ts
+25 0 Open-ILS/src/eg2/src/app/staff/admin/workstation/workstations/routing.module.ts
+92 0 Open-ILS/src/eg2/src/app/staff/admin/workstation/workstations/workstations.component.html
+186 0 Open-ILS/src/eg2/src/app/staff/admin/workstation/workstations/workstations.component.ts
+18 0 Open-ILS/src/eg2/src/app/staff/admin/workstation/workstations/workstations.module.ts
+6 0 Open-ILS/src/eg2/src/app/staff/catalog/catalog.component.html
+18 0 Open-ILS/src/eg2/src/app/staff/catalog/catalog.component.ts
+44 0 Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts
+87 0 Open-ILS/src/eg2/src/app/staff/catalog/catalog.service.ts
+70 0 Open-ILS/src/eg2/src/app/staff/catalog/record/actions.component.html
+96 0 Open-ILS/src/eg2/src/app/staff/catalog/record/actions.component.ts
+53 0 Open-ILS/src/eg2/src/app/staff/catalog/record/copies.component.html
+91 0 Open-ILS/src/eg2/src/app/staff/catalog/record/copies.component.ts
+36 0 Open-ILS/src/eg2/src/app/staff/catalog/record/pagination.component.html
+164 0 Open-ILS/src/eg2/src/app/staff/catalog/record/pagination.component.ts
+37 0 Open-ILS/src/eg2/src/app/staff/catalog/record/record.component.html
+84 0 Open-ILS/src/eg2/src/app/staff/catalog/record/record.component.ts
+59 0 Open-ILS/src/eg2/src/app/staff/catalog/resolver.service.ts
+43 0 Open-ILS/src/eg2/src/app/staff/catalog/result/facets.component.html
+48 0 Open-ILS/src/eg2/src/app/staff/catalog/result/facets.component.ts
+8 0 Open-ILS/src/eg2/src/app/staff/catalog/result/pagination.component.css
+28 0 Open-ILS/src/eg2/src/app/staff/catalog/result/pagination.component.html
+51 0 Open-ILS/src/eg2/src/app/staff/catalog/result/pagination.component.ts
+132 0 Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html
+77 0 Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.ts
+30 0 Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.html
+84 0 Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.ts
+30 0 Open-ILS/src/eg2/src/app/staff/catalog/routing.module.ts
+16 0 Open-ILS/src/eg2/src/app/staff/catalog/search-form.component.css
+244 0 Open-ILS/src/eg2/src/app/staff/catalog/search-form.component.html
+137 0 Open-ILS/src/eg2/src/app/staff/catalog/search-form.component.ts
+19 0 Open-ILS/src/eg2/src/app/staff/circ/patron/bcsearch/bcsearch.component.html
+36 0 Open-ILS/src/eg2/src/app/staff/circ/patron/bcsearch/bcsearch.component.ts
+17 0 Open-ILS/src/eg2/src/app/staff/circ/patron/bcsearch/bcsearch.module.ts
+19 0 Open-ILS/src/eg2/src/app/staff/circ/patron/bcsearch/routing.module.ts
+15 0 Open-ILS/src/eg2/src/app/staff/circ/patron/routing.module.ts
+15 0 Open-ILS/src/eg2/src/app/staff/circ/routing.module.ts
+84 0 Open-ILS/src/eg2/src/app/staff/common.module.ts
+58 0 Open-ILS/src/eg2/src/app/staff/login.component.html
+96 0 Open-ILS/src/eg2/src/app/staff/login.component.ts
+72 0 Open-ILS/src/eg2/src/app/staff/nav.component.css
+432 0 Open-ILS/src/eg2/src/app/staff/nav.component.html
+72 0 Open-ILS/src/eg2/src/app/staff/nav.component.ts
+143 0 Open-ILS/src/eg2/src/app/staff/resolver.service.ts
+52 0 Open-ILS/src/eg2/src/app/staff/routing.module.ts
+1 0 Open-ILS/src/eg2/src/app/staff/sandbox/README
+16 0 Open-ILS/src/eg2/src/app/staff/sandbox/routing.module.ts
+133 0 Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.html
+188 0 Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.ts
+20 0 Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts
+1 0 Open-ILS/src/eg2/src/app/staff/share/README
+59 0 Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.html
+311 0 Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts
+70 0 Open-ILS/src/eg2/src/app/staff/share/bib-summary/bib-summary.component.html
+67 0 Open-ILS/src/eg2/src/app/staff/share/bib-summary/bib-summary.component.ts
+56 0 Open-ILS/src/eg2/src/app/staff/share/buckets/record-bucket-dialog.component.html
+109 0 Open-ILS/src/eg2/src/app/staff/share/buckets/record-bucket-dialog.component.ts
+57 0 Open-ILS/src/eg2/src/app/staff/share/holdings.service.ts
+22 0 Open-ILS/src/eg2/src/app/staff/share/link-table/link-table.component.html
+73 0 Open-ILS/src/eg2/src/app/staff/share/link-table/link-table.component.ts
+65 0 Open-ILS/src/eg2/src/app/staff/share/op-change/op-change.component.html
+77 0 Open-ILS/src/eg2/src/app/staff/share/op-change/op-change.component.ts
+15 0 Open-ILS/src/eg2/src/app/staff/share/staff-banner.component.ts
+63 0 Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.html
+145 0 Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.ts
+128 0 Open-ILS/src/eg2/src/app/staff/splash.component.html
+40 0 Open-ILS/src/eg2/src/app/staff/splash.component.ts
+8 0 Open-ILS/src/eg2/src/app/staff/staff.component.css
+19 0 Open-ILS/src/eg2/src/app/staff/staff.component.html
+118 0 Open-ILS/src/eg2/src/app/staff/staff.component.ts
+26 0 Open-ILS/src/eg2/src/app/staff/staff.module.ts
+11 0 Open-ILS/src/eg2/src/app/welcome.component.html
+13 0 Open-ILS/src/eg2/src/app/welcome.component.ts
+0 0 Open-ILS/src/eg2/src/assets/.gitkeep
+4 0 Open-ILS/src/eg2/src/environments/environment.prod.ts
+10 0 Open-ILS/src/eg2/src/environments/environment.ts
+- - Open-ILS/src/eg2/src/favicon.ico
+19 0 Open-ILS/src/eg2/src/index.html
+0 0 Open-ILS/src/eg2/src/locale/.gitkeep
+12 0 Open-ILS/src/eg2/src/main.ts
+80 0 Open-ILS/src/eg2/src/polyfills.ts
+161 0 Open-ILS/src/eg2/src/styles.css
+32 0 Open-ILS/src/eg2/src/test.ts
+52 0 Open-ILS/src/eg2/src/test_data/eg_mock.js
+36 0 Open-ILS/src/eg2/src/test_data/idl2js.pl
+13 0 Open-ILS/src/eg2/src/tsconfig.app.json
+21 0 Open-ILS/src/eg2/src/tsconfig.spec.json
+5 0 Open-ILS/src/eg2/src/typings.d.ts
+24 0 Open-ILS/src/eg2/tsconfig.json
+136 0 Open-ILS/src/eg2/tslint.json
+ create mode 100644 Open-ILS/src/eg2/.editorconfig
+ create mode 100644 Open-ILS/src/eg2/.gitignore
+ create mode 100644 Open-ILS/src/eg2/CHEAT_SHEET.adoc
+ create mode 100644 Open-ILS/src/eg2/angular.json
+ create mode 100644 Open-ILS/src/eg2/e2e/app.e2e-spec.ts
+ create mode 100644 Open-ILS/src/eg2/e2e/app.po.ts
+ create mode 100644 Open-ILS/src/eg2/e2e/tsconfig.e2e.json
+ create mode 100644 Open-ILS/src/eg2/karma.conf.js
+ create mode 100644 Open-ILS/src/eg2/package-lock.json
+ create mode 100644 Open-ILS/src/eg2/package.json
+ create mode 100644 Open-ILS/src/eg2/protractor.conf.js
+ create mode 100644 Open-ILS/src/eg2/src/app/app.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/app.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/common.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/README
+ create mode 100644 Open-ILS/src/eg2/src/app/core/auth.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/event.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/event.spec.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/format.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/format.spec.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/idl.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/idl.spec.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/locale.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/net.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/org.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/org.spec.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/pcrud.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/perm.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/server-store.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/store.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/core/store.spec.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/resolver.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/README
+ create mode 100644 Open-ILS/src/eg2/src/app/share/accesskey/accesskey-info.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/accesskey/accesskey-info.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/accesskey/accesskey.directive.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/accesskey/accesskey.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/catalog/catalog-common.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/catalog/catalog-url.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/catalog/catalog.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/catalog/marc-html.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/catalog/search-context.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/catalog/unapi.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/combobox/combobox-entry.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/combobox/combobox.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/combobox/combobox.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/date-select/date-select.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/date-select/date-select.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/confirm.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/confirm.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/dialog.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/progress-inline.component.css
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/progress-inline.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/progress-inline.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/progress.component.css
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/progress.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/progress.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/prompt.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/dialog/prompt.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-body-cell.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-body-cell.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-body.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-column-config.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-column-config.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-column-width.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-column-width.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-header.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-print.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-print.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-action.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-button.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-checkbox.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid.component.css
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/org-select/org-select.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/org-select/org-select.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/print/print.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/print/print.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/print/print.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/string/string.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/string/string.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/toast/toast.component.css
+ create mode 100644 Open-ILS/src/eg2/src/app/share/toast/toast.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/toast/toast.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/toast/toast.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/tree/tree.component.css
+ create mode 100644 Open-ILS/src/eg2/src/app/share/tree/tree.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/share/tree/tree.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/tree/tree.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/tree/tree.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/util/audio.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/share/util/pager.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/about.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/about.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/acq/admin-acq-splash.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/acq/admin-acq-splash.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/acq/admin-acq.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/acq/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/basic-admin-page.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/common.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/admin-server.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/workstation/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/workstation/workstations/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/workstation/workstations/workstations.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/workstation/workstations/workstations.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/workstation/workstations/workstations.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/catalog.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/catalog.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/catalog.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/actions.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/actions.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/copies.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/copies.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/pagination.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/pagination.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/record.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/record/record.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/resolver.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/result/facets.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/result/facets.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/result/pagination.component.css
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/result/pagination.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/result/pagination.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/result/results.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/search-form.component.css
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/search-form.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/catalog/search-form.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/circ/patron/bcsearch/bcsearch.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/circ/patron/bcsearch/bcsearch.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/circ/patron/bcsearch/bcsearch.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/circ/patron/bcsearch/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/circ/patron/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/circ/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/common.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/login.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/login.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/nav.component.css
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/nav.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/nav.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/resolver.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/sandbox/README
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/sandbox/routing.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/README
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/bib-summary/bib-summary.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/bib-summary/bib-summary.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/buckets/record-bucket-dialog.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/buckets/record-bucket-dialog.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/holdings.service.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/link-table/link-table.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/link-table/link-table.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/op-change/op-change.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/op-change/op-change.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/staff-banner.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/share/translate/translate.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/splash.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/splash.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/staff.component.css
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/staff.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/staff.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/staff/staff.module.ts
+ create mode 100644 Open-ILS/src/eg2/src/app/welcome.component.html
+ create mode 100644 Open-ILS/src/eg2/src/app/welcome.component.ts
+ create mode 100644 Open-ILS/src/eg2/src/assets/.gitkeep
+ create mode 100644 Open-ILS/src/eg2/src/environments/environment.prod.ts
+ create mode 100644 Open-ILS/src/eg2/src/environments/environment.ts
+ create mode 100644 Open-ILS/src/eg2/src/favicon.ico
+ create mode 100644 Open-ILS/src/eg2/src/index.html
+ create mode 100644 Open-ILS/src/eg2/src/locale/.gitkeep
+ create mode 100644 Open-ILS/src/eg2/src/main.ts
+ create mode 100644 Open-ILS/src/eg2/src/polyfills.ts
+ create mode 100644 Open-ILS/src/eg2/src/styles.css
+ create mode 100644 Open-ILS/src/eg2/src/test.ts
+ create mode 100644 Open-ILS/src/eg2/src/test_data/eg_mock.js
+ create mode 100644 Open-ILS/src/eg2/src/test_data/idl2js.pl
+ create mode 100644 Open-ILS/src/eg2/src/tsconfig.app.json
+ create mode 100644 Open-ILS/src/eg2/src/tsconfig.spec.json
+ create mode 100644 Open-ILS/src/eg2/src/typings.d.ts
+ create mode 100644 Open-ILS/src/eg2/tsconfig.json
+ create mode 100644 Open-ILS/src/eg2/tslint.json
+
+commit 6bcefced08f07d783b1d46bb4ee441ecde70df02
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 16:02:56 2018 -0400
+
+ LP#1775466 Public API wrapper for mk_copy_query
+
+ Adds 2 new APIs:
+
+ open-ils.search.bib.copies
+ open-ils.search.bib.copies.staff
+
+ Used by the in-progress Angular staff catalog.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+80 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm
+
+commit b0f99db6c9cf141fe10addccce075b95a26e6595
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Sep 5 16:00:51 2018 -0400
+
+ LP#1775466 Record entry flat display attrs link repair
+
+ Fleshing 'mattrs' on a bib record should return an array (i.e. replace
+ might_have with has_many).
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/examples/fm_IDL.xml
+
+commit 0f68495b9fcabb3b7cd85af697f08afabf8a6657
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Thu Sep 6 12:45:46 2018 -0700
+
+ More additions to the 3.2 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+8 2 docs/RELEASE_NOTES_3_2.adoc
+
+commit 689e9af8cfe5bfa7dbfd7475a8033054a23a0de8
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Thu Sep 6 12:05:17 2018 -0700
+
+ Docs: adding translators to 3.2 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+5 2 docs/RELEASE_NOTES_3_2.adoc
+
+commit 26d975edb233bed65801703c7c9747ff825aca9d
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Thu Sep 6 11:47:21 2018 -0700
+
+ Docs: creating basic release notes for 3.2
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+606 0 docs/RELEASE_NOTES_3_2.adoc
+0 6 docs/RELEASE_NOTES_NEXT/Acquisitions/PatronRequests.adoc
+0 13 docs/RELEASE_NOTES_NEXT/Acquisitions/autocancel_lineitems_when_all_copies_are_canceled.adoc
+0 34 docs/RELEASE_NOTES_NEXT/Acquisitions/invoice-close-date.adoc
+0 4 docs/RELEASE_NOTES_NEXT/Cataloging/add-upc-to-z3950.adoc
+0 27 docs/RELEASE_NOTES_NEXT/Cataloging/async-vandelay.adoc
+0 14 docs/RELEASE_NOTES_NEXT/Cataloging/inventory_date_support.adoc
+0 70 docs/RELEASE_NOTES_NEXT/Cataloging/pingest.adoc
+0 17 docs/RELEASE_NOTES_NEXT/Cataloging/view-authority-record-by-id.adoc
+0 22 docs/RELEASE_NOTES_NEXT/Circulation/Autorenewal_Feature.adoc
+0 22 docs/RELEASE_NOTES_NEXT/Circulation/EmergencyClosingHandler.adoc
+0 36 docs/RELEASE_NOTES_NEXT/Circulation/patron-pref-name.adoc
+0 54 docs/RELEASE_NOTES_NEXT/Client/pgtde.adoc
+0 71 docs/RELEASE_NOTES_NEXT/Client/workstation-server-settings.adoc
+0 76 docs/RELEASE_NOTES_NEXT/OPAC/Batch_Actions.adoc
+0 10 docs/RELEASE_NOTES_NEXT/OPAC/different_styles_for_searchbar.adoc
+0 6 docs/RELEASE_NOTES_NEXT/OPAC/username-hint.adoc
+ create mode 100644 docs/RELEASE_NOTES_3_2.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Acquisitions/PatronRequests.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Acquisitions/autocancel_lineitems_when_all_copies_are_canceled.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Acquisitions/invoice-close-date.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/add-upc-to-z3950.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/async-vandelay.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/inventory_date_support.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/pingest.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/view-authority-record-by-id.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/Autorenewal_Feature.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/EmergencyClosingHandler.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/patron-pref-name.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Client/pgtde.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Client/workstation-server-settings.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/OPAC/Batch_Actions.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/OPAC/different_styles_for_searchbar.adoc
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/OPAC/username-hint.adoc
+
+commit 46543fa2fb9dd628131887ea4bdd35c39366fd6a
+Author: Ben Shum <ben at evergreener.net>
+Date: Thu Sep 6 10:57:54 2018 -0400
+
+ Translation updates - newpot
+
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+3531 3512 build/i18n/po/db.seed/db.seed.pot
+2911 2781 build/i18n/po/fm_IDL.dtd/fm_IDL.dtd.pot
+37 33 build/i18n/po/ils_events.xml/ils_events.xml.pot
+409 269 build/i18n/po/tpac/tpac.pot
+950 311 build/i18n/po/webstaff/webstaff.pot
+
+commit 30a064631af68e2b715c5ab3b65e30dab403703f
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Thu Sep 6 10:24:14 2018 -0400
+
+ LP#1774277 Acq requests live test vandelay repair
+
+ Acq requests test now logs in with a workstation since under the covers
+ vandelay (used for acq imports) requires a workstation on the new
+ tracker tables.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+21 1 Open-ILS/src/perlmods/live_t/22-acq-requests.t
+
+commit 505e46bd6d843629fbcb822abd2d6eac6036d6e0
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Thu Sep 6 10:03:46 2018 -0400
+
+ LP#1635354 Invoice close date perl live test
+
+ Update Perl live test script to inspect invoice close dates instead of
+ the now-defunct 'complete' field.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+5 4 Open-ILS/src/perlmods/live_t/16-acq-invoicing.t
+
+commit 19e5d9750d5132cefdd78122fd5b7f8e58d50612
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Jun 12 12:02:02 2018 -0400
+
+ LP#1755258 Browser client auth proxy login support
+
+ Check if the auth_proxy service is enabled during login and use the
+ proxy login API when it's available, otherwise fall back to standard
+ Evergreen open-ils.auth login.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+28 2 Open-ILS/web/js/ui/default/staff/services/auth.js
+
+commit 9266a76a9f11fcc419e38d99a114216b9266aef6
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Jun 12 12:01:15 2018 -0400
+
+ LP#1755258 Improve network error handling
+
+ Improve promise handling and logging in browser client network request
+ failure handling.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+8 5 Open-ILS/web/js/ui/default/staff/services/net.js
+
+commit 90c716e3bd4be9c449a9e5d71849abd8d4f07e4f
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Wed Sep 5 10:56:43 2018 -0400
+
+ LP#1781235: fix changing primary user barcode in web client
+
+ This patch fixes a bug where the patron card dialog would
+ not allow the user to change the primary barcode under certain
+ circumstances. The fix is to ensure that the radio buttons
+ controlling the selection of the primary card are bound to
+ exactly one scope variable; otherwise, the /last/ barcode in the
+ list that had a primary value set after user interaction would
+ be the winner.
+
+ To test
+ -------
+ [1] Use the 'replace barcode' feature in the patron editor to
+ create a test patron with 3 barcodes:
+
+ - barcode A
+ - barcode B
+ - barcode C (which as last created, would be primary)
+
+ [2] Attempt to make barcode A the primary barcode again using
+ the 'See All' patron card dialog in the patron editor.
+ [3] Note that the change of primary barcode doesn't stick
+ upon saving the patron record.
+ [4] Apply the patch and repeat steps 1-3. This time, the
+ primary barcode should be changed as expected.
+ [5] Verify that other patron edit actions and registering a
+ new patron record continue to work as expected.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: John Amundson <jamundson at cwmars.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+
+3 2 Open-ILS/src/templates/staff/circ/patron/t_patron_cards_dialog.tt2
+18 8 Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+
+commit 55f5d3cd9e7bffbad8856b7328280b23eae0a0b8
+Author: Jeff Davis <jdavis at sitka.bclibraries.ca>
+Date: Wed Aug 29 11:51:24 2018 -0700
+
+ LP#1781641: make staff-applied patron blocks overridable on web client checkout/renew
+
+ To test
+ -------
+ [1] Apply a blocking penalty such as STAFF_CHR to a patron record.
+ [2] Attempt to check out an item; note that there is no option to
+ force the action.
+ [3] Apply the patch and repeat #2. This time, the staff user
+ should be given an option to force the action.
+ [4] Verify that forcing the checkout respects whether or not
+ the operator has (e.g.) the STAFF_CHR.override permission.
+
+ Signed-off-by: Jeff Davis <jdavis at sitka.bclibraries.ca>
+ Signed-off-by: Joan Kranich <jkranich at cwmars.org>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+16 2 Open-ILS/web/js/ui/default/staff/circ/services/circ.js
+
+commit 11d9725b548c609b4610de55195b40f41e1c42ee
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Tue Sep 4 23:55:08 2018 -0400
+
+ LP#1635354: Stamping upgrade script for acqusitions invoice timestamp
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+696 0 Open-ILS/src/sql/Pg/upgrade/1128.schema.invoice-close-date.sql
+0 696 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.invoice-close-date.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1128.schema.invoice-close-date.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.invoice-close-date.sql
+
+commit ba94b6d35c97dd289bf7f33b957085a563ed34e1
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Thu Apr 19 16:15:51 2018 -0400
+
+ LP#1635354 Support date is/not NULL ACQ searches
+
+ Adds support for searching on 'date is NULL' in the ACQ unified search
+ interface. To use, chose the 'is' or 'is not' matcher and leave the
+ text input value empty.
+
+ Update the canned completed invoices search to filter on 'close_date IS
+ NOT NULL' instead of the now-removed 'complete' field.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+3 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Search.pm
+8 4 Open-ILS/web/js/ui/default/acq/search/unified.js
+
+commit 52c11b2770af4bfe617845f9544273228fbbf371
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Mar 14 12:56:07 2018 -0400
+
+ LP#1635354 Invoice close date/by release notes
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+34 0 docs/RELEASE_NOTES_NEXT/Acquisitions/invoice-close-date.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Acquisitions/invoice-close-date.adoc
+
+commit c69f50f29a01f652bd4068e58ec5e2ac2e10d785
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Mar 13 16:02:41 2018 -0400
+
+ LP#1635354 Invoice close date/by fields
+
+ Acquisitions invoices have 2 new fields:
+
+ * Close Date -- This is set to the time when the ACQ user clicks the
+ "Close" button in the invoice interface.
+
+ This field replaces the existing "Complete" field. An invoice is now
+ considered complete if a close date value is set.
+
+ * Closed By -- This is set to the logged in staff user who performs the
+ "Close" action.
+
+ As with the now-defunct 'complete' field, but new fields are cleared in the
+ event an invoice is reopened.
+
+ These new fields are visible in the invoice interface under the 'Show
+ Details' action for closed invoices.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+3 1 Open-ILS/examples/fm_IDL.xml
+15 12 Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Invoice.pm
+4 1 Open-ILS/src/sql/Pg/200.schema.acq.sql
+2 0 Open-ILS/src/sql/Pg/999.functions.global.sql
+696 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.invoice-close-date.sql
+18 9 Open-ILS/web/js/ui/default/acq/invoice/view.js
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.invoice-close-date.sql
+
+commit 0020384a8daffa4225a22899be89e1cf7f60fb05
+Author: Cesar Velez <cesar.velez at equinoxinitiative.org>
+Date: Thu Feb 22 17:01:39 2018 -0500
+
+ LP#1746824 - WebStaff egGrid styling
+
+ This allows egGrid to receive CSS selector strings via egGridField
+ declarations in templates, or else auto-generates them based on the
+ path of the field. Also, sets the DOM id of the grid to its declared
+ persistKey, unless an id is explicitly given.
+
+ For example, due dates could be displayed in purple
+ as follows by adding the following CSS:
+
+ grid-due_date {
+ color: purple;
+ }
+
+ The above example uses the autog-enerated class name. One could also
+ set an explicit one in the eg-grid-field element, e.g.,
+
+ <eg-grid-field label="[% l('Due Date') %]" path='due_date' css-selector="purple" ...
+
+ In this case, the grid-due_date class would /not/ be generated, and the
+ developer would be expected to supply CSS for the purple class. (But
+ with semantic class names :) )
+
+ Signed-off by: Cesar Velez <cesar.velez at equinoxinitiative.org>
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 0 Open-ILS/src/templates/staff/share/t_autogrid.tt2
+22 2 Open-ILS/web/js/ui/default/staff/services/grid.js
+
+commit cb8a47c99b93ff479b40eeba6ac24af4e2c4157e
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Sep 4 17:37:32 2018 -0400
+
+ LP#1774277 Stamping upgrade for patron acq reqs
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+88 0 Open-ILS/src/sql/Pg/upgrade/1127.data.schema.acq.patron_requests.sql
+0 88 Open-ILS/src/sql/Pg/upgrade/XXXX.data.schema.acq.patron_requests.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1127.data.schema.acq.patron_requests.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.schema.acq.patron_requests.sql
+
+commit df507ca0fef135133221499c6c338621be16418f
+Author: Jason Etheridge <jason at EquinoxInitiative.org>
+Date: Thu Aug 23 15:18:05 2018 -0400
+
+ lp1774277 release notes for patron acq requests
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+6 0 docs/RELEASE_NOTES_NEXT/Acquisitions/PatronRequests.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Acquisitions/PatronRequests.adoc
+
+commit e9a9875da27e85e8437c082b6e40ad39ff9a1ba6
+Author: Jason Etheridge <jason at EquinoxInitiative.org>
+Date: Mon Mar 12 18:02:47 2018 -0400
+
+ lp1774277 Improvements to Patron Acquisition Request
+
+ Squashed and rebased against master, this is an Angular reimplementation of the
+ Patron Acquisition Request user interface with some improvements. It still
+ reaches into the Dojo-based Acquisition interfaces.
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ toward acq requests
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ 4-status-not-updating-to-recieved-unless-all-items-in-order-are-recieved
+
+ Change to acq patron request status logic, which now looks like this:
+
+ If a cancel_reason is set on the patron request, then status = "Canceled"
+
+ If there is an associated hold request that has fulfillment_time set,
+ then status = 'Fulfilled"
+
+ If there is an associated lineitem has a state of "received", then status =
+ "Received"
+
+ If there is an associated purchase order with a state of "on-order" and an
+ associated hold request, then status = "Ordered, Hold Placed"
+
+ If there is an associated purchase order with a state of "on-order" but no
+ associated hold request (created through the automated process), then status =
+ "Ordered, Hold Not Placed"
+
+ If there is an associated lineitem (selection list), then status = "Pending"
+
+ If there is no associated lineitem, then status = "New"
+
+ Any other condition, which should be impossible (I should never say that), will
+ give a status of "Error"
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ 6-upc-not-on-patron-request-form
+
+ Adds a UPC column to the patron acq request table
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ 2-hold-request-fields-that-make-use-of-user-preferences
+
+ For new requests (or edited requests when a user barcode is scanned), the user's
+ preferences (if any) for hold notifications and pickup library will be used to
+ set various fields in the request dialog.
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ 5-pick-up-library-not-defaulting-to-patrons-home-library
+
+ when creating new requests, given a user, default to the user's pickup library
+ preference setting, or absent a preference, default to their home library.
+
+ Absent a user, default to the pickup library selector value from the request
+ list, if it's of an org type that can have volumes. Otherwise, default to the
+ workstation library. Technically, the without-a-user behavior is going to be
+ mooted whenever a user is chosen.
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ 5-pick-up-library-not-defaulting-to-patrons-home-library
+
+ Fix defaulting to patron home library in absense of user setting when creating
+ acq patron request from user context
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ misc fixes
+
+ to the IDL and for the email_notify checkbox.
+
+ some refactoring to avoid using foreign fields in the request object
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ 7-retrieve-patron-fails-to-load-patron-record
+
+ give the user_request.view permission some parity with VIEW_USER
+
+ And some defensive programming if trying to create a request in
+ the user already known context without adequate permission
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ handle undefined values for email/hold checkboxes
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ remove acq.holds.allow_holds_from_purchase_request
+
+ This was added a long time ago but never actually used by the code.
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ match pcrud perm for aur with aurs
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+
+ live_t/ test
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+100 3 Open-ILS/examples/fm_IDL.xml
+135 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
+340 0 Open-ILS/src/perlmods/live_t/22-acq-requests.t
+22 1 Open-ILS/src/sql/Pg/200.schema.acq.sql
+13 16 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+88 0 Open-ILS/src/sql/Pg/upgrade/XXXX.data.schema.acq.patron_requests.sql
+26 0 Open-ILS/src/templates/staff/acq/requests/index.tt2
+31 0 Open-ILS/src/templates/staff/acq/requests/t_cancel.tt2
+25 0 Open-ILS/src/templates/staff/acq/requests/t_clear.tt2
+240 0 Open-ILS/src/templates/staff/acq/requests/t_edit.tt2
+82 0 Open-ILS/src/templates/staff/acq/requests/t_list.tt2
+25 0 Open-ILS/src/templates/staff/acq/requests/t_set_no_hold.tt2
+25 0 Open-ILS/src/templates/staff/acq/requests/t_set_yes_hold.tt2
+5 0 Open-ILS/src/templates/staff/circ/patron/index.tt2
+1 1 Open-ILS/src/templates/staff/navbar.tt2
+9 3 Open-ILS/web/js/ui/default/acq/common/li_table.js
+5 1 Open-ILS/web/js/ui/default/acq/picklist/brief_record.js
+239 0 Open-ILS/web/js/ui/default/staff/acq/requests/list.js
+582 0 Open-ILS/web/js/ui/default/staff/acq/services/requests.js
+ create mode 100644 Open-ILS/src/perlmods/live_t/22-acq-requests.t
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.schema.acq.patron_requests.sql
+ create mode 100644 Open-ILS/src/templates/staff/acq/requests/index.tt2
+ create mode 100644 Open-ILS/src/templates/staff/acq/requests/t_cancel.tt2
+ create mode 100644 Open-ILS/src/templates/staff/acq/requests/t_clear.tt2
+ create mode 100644 Open-ILS/src/templates/staff/acq/requests/t_edit.tt2
+ create mode 100644 Open-ILS/src/templates/staff/acq/requests/t_list.tt2
+ create mode 100644 Open-ILS/src/templates/staff/acq/requests/t_set_no_hold.tt2
+ create mode 100644 Open-ILS/src/templates/staff/acq/requests/t_set_yes_hold.tt2
+ create mode 100644 Open-ILS/web/js/ui/default/staff/acq/requests/list.js
+ create mode 100644 Open-ILS/web/js/ui/default/staff/acq/services/requests.js
+
+commit c68550260497e050307b49b0743e339f96417b53
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Tue Sep 4 18:35:28 2018 -0400
+
+ LP#1514085: stamp schema update
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+737 0 Open-ILS/src/sql/Pg/upgrade/1126.schema.vandelay-state-tracking.sql
+0 738 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay-state-tracking.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1126.schema.vandelay-state-tracking.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay-state-tracking.sql
+
+commit 32f9b0303588a571a29efb000d49b132e8bc0f7a
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Tue Sep 4 18:33:09 2018 -0400
+
+ LP#1514085: add to release notes with a server configuration note
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+8 0 docs/RELEASE_NOTES_NEXT/Cataloging/async-vandelay.adoc
+
+commit 889898936925335c545091721b6db008148625b3
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Tue Sep 4 17:46:49 2018 -0400
+
+ LP#1514085: sync schema update script to reflect changes in master
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+31 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay-state-tracking.sql
+
+commit 96bd60b86409c53da3238df335e1a9ad299cc29e
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Thu Aug 23 14:17:11 2018 -0400
+
+ LP#1514085 Release notes for vandelay session tracking
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+19 0 docs/RELEASE_NOTES_NEXT/Cataloging/async-vandelay.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/async-vandelay.adoc
+
+commit 5da0ea080077816154cb5d3d9d7bb32932e996dd
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Thu Jun 28 12:38:57 2018 -0400
+
+ LP#1514085 Vandelay in-database session tracking
+
+ Adds a new DB table vandelay.session_tracker for monitoring progress on
+ Vandelay enqueue and import sessions.
+
+ Enqueue and import APIs get a new option to exit early, returning the
+ newly created tracker object, so the caller can monitor the tracker
+ instead of listening to streamed responses, which are not supported in
+ browser client Dojo interfaces.
+
+ Teach the existing Dojo Vandelay UI to exit early on enqueu & export and
+ to poll for tracker data in lieu of waiting for streamed progress data.
+
+ On user merge / purge, trackers are migrated to the destination user.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+44 0 Open-ILS/examples/fm_IDL.xml
+161 20 Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm
+52 0 Open-ILS/src/sql/Pg/012.schema.vandelay.sql
+4 0 Open-ILS/src/sql/Pg/999.functions.global.sql
+707 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay-state-tracking.sql
+81 21 Open-ILS/web/js/ui/default/vandelay/vandelay.js
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay-state-tracking.sql
+
+commit 1e6cbaca69712d708bf4e720e14ac78e1dc24ab6
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Tue Sep 4 16:36:09 2018 -0400
+
+ LP#1777675 Stamping upgrade script for latest inventory date support
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+39 0 Open-ILS/src/sql/Pg/upgrade/1125.schema.lp1777675_latest_inventory_date_support.sql
+0 39 Open-ILS/src/sql/Pg/upgrade/XXXX-create-inventory-workstation-and-date.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1125.schema.lp1777675_latest_inventory_date_support.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX-create-inventory-workstation-and-date.sql
+
+commit ba4dcdd56abd51eda35aa51fe731cb3d362d014b
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Tue Sep 4 14:38:33 2018 -0400
+
+ LP#1777675: Change table names to Latest Inventory
+
+ Makes the backend code consistent with the new labels that have been added for
+ the latest inventory date.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+7 7 Open-ILS/examples/fm_IDL.xml
+8 8 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm
+17 17 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+2 2 Open-ILS/src/sql/Pg/040.schema.asset.sql
+4 4 Open-ILS/src/sql/Pg/800.fkeys.sql
+6 6 Open-ILS/src/sql/Pg/upgrade/XXXX-create-inventory-workstation-and-date.sql
+2 2 Open-ILS/src/templates/staff/cat/bucket/copy/t_pending.tt2
+2 2 Open-ILS/src/templates/staff/cat/bucket/copy/t_view.tt2
+2 2 Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2
+2 2 Open-ILS/src/templates/staff/cat/item/t_list.tt2
+2 2 Open-ILS/src/templates/staff/cat/item/t_summary_pane.tt2
+2 2 Open-ILS/src/templates/staff/circ/checkin/t_checkin_table.tt2
+4 4 Open-ILS/web/js/ui/default/staff/cat/item/app.js
+1 1 Open-ILS/web/js/ui/default/staff/cat/services/holdings.js
+2 2 Open-ILS/web/js/ui/default/staff/circ/checkin/app.js
+6 6 Open-ILS/web/js/ui/default/staff/circ/services/circ.js
+4 4 Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit f4c274de501f7e0c08838151b19f8ac36e5f2063
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Thu Aug 23 14:38:50 2018 -0400
+
+ LP#1777675 Tweak IDL label for copy inventory
+
+ "Last Copy Inventory" can be misunderstood at first reading as
+ inventory of the "last copy". "Latest Inventory" seems easier to
+ understand, and also still goes well with a potential future "All
+ Inventories" entry in the IDL.
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+2 2 Open-ILS/examples/fm_IDL.xml
+
+commit 1781f399b5458ac08783ba0c8e70f71abea90c6b
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Thu Aug 23 14:34:57 2018 -0400
+
+ LP#1777675 Re-add missing columns to checkin interface
+
+ During one iteration of the inventory code, a box was added to the
+ interface, and some room was made for it by shrinking these other
+ interface components.
+
+ Since the box is now gone, let's get this row back up to the expected
+ twelve units of width.
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+2 2 Open-ILS/src/templates/staff/circ/checkin/t_checkin.tt2
+
+commit cfdb4b998b8c751ea8ce60aaf47ddecae0ab4797
+Author: Remington Steed <rjs7 at calvin.edu>
+Date: Wed Aug 22 14:19:19 2018 -0400
+
+ LP#1777675: Fix code to update Item Status grid
+
+ Testing revealed that the grid rows use a different data structure, and
+ the object member names include dots (periods). Thus, bracket notation
+ is required to access those members.
+
+ This commit also makes a few smaller changes:
+ - Prevents an error in the Check-in app when a last_copy_inventory
+ doesn't exist yet.
+ - Removes the "refresh" parameter from the updateInventory() function,
+ which is never supplied when called, nor used by the function.
+ - Adds some brief code comments.
+
+ Signed-off-by: Remington Steed <rjs7 at calvin.edu>
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/circ/checkin/app.js
+5 3 Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+commit b7ce408d424141a5bc34d699c5bdf52274648117
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Tue Aug 21 13:31:59 2018 -0400
+
+ LP#1777675: Release notes entry for inventory date
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+14 0 docs/RELEASE_NOTES_NEXT/Cataloging/inventory_date_support.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/inventory_date_support.adoc
+
+commit 4b6552d74cf790b6c272a80edaa7cfe5a5538d29
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Tue Aug 21 13:04:13 2018 -0400
+
+ LP#1777675: Add inventory checkin modifier setting to server storage
+
+ Allows the inventory checkin modifier value to be stored on the server instead
+ of the browser as is done with other checkin modifier settings.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+7 0 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+11 1 Open-ILS/src/sql/Pg/upgrade/XXXX-create-inventory-workstation-and-date.sql
+
+commit b3609ca4768322f735358d596eddb4135ea6e44d
+Author: Kyle Huckins <khuckins at catalyte.io>
+Date: Mon Jul 9 18:11:05 2018 +0000
+
+ lp1777675 inventory date support
+
+ - Add toggle for updating inventory date and workstation on checkin
+ - Create new table asset.last_copy_inventory containing inventory date and inventory workstation columns.
+ - Add code to do_checkin subroutine to update last_copy_inventory table on checkin.
+ - Update Holdings view, Checkins table, copy buckets, and item detail grid and lists to display new
+ inventory date and workstation information.
+ - Add Update Inventory action to Item Status detail and list views.
+
+ Signed-off-by: Kyle Huckins <khuckins at catalyte.io>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+ Conflicts:
+ Open-ILS/web/js/ui/default/staff/circ/services/item.js
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+23 0 Open-ILS/examples/fm_IDL.xml
+31 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm
+35 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+8 0 Open-ILS/src/sql/Pg/040.schema.asset.sql
+16 0 Open-ILS/src/sql/Pg/800.fkeys.sql
+29 0 Open-ILS/src/sql/Pg/upgrade/XXXX-create-inventory-workstation-and-date.sql
+2 0 Open-ILS/src/templates/staff/cat/bucket/copy/t_pending.tt2
+2 0 Open-ILS/src/templates/staff/cat/bucket/copy/t_view.tt2
+2 0 Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2
+5 0 Open-ILS/src/templates/staff/cat/item/index.tt2
+4 0 Open-ILS/src/templates/staff/cat/item/t_list.tt2
+13 0 Open-ILS/src/templates/staff/cat/item/t_summary_pane.tt2
+15 2 Open-ILS/src/templates/staff/circ/checkin/t_checkin.tt2
+2 0 Open-ILS/src/templates/staff/circ/checkin/t_checkin_table.tt2
+10 0 Open-ILS/web/js/ui/default/staff/cat/bucket/copy/app.js
+26 2 Open-ILS/web/js/ui/default/staff/cat/item/app.js
+4 3 Open-ILS/web/js/ui/default/staff/cat/services/holdings.js
+8 2 Open-ILS/web/js/ui/default/staff/circ/checkin/app.js
+11 1 Open-ILS/web/js/ui/default/staff/circ/services/circ.js
+31 4 Open-ILS/web/js/ui/default/staff/circ/services/item.js
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX-create-inventory-workstation-and-date.sql
+
+commit 4dbdd7bba989fe9826a2f28d07dfd5823c4e5e2d
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Sep 4 13:37:33 2018 -0400
+
+ LP#1712854 Stamping DB upgrade for hold UIs sort/speed
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+25 0 Open-ILS/src/sql/Pg/upgrade/1124.data.wide_holds-workstation-settings.sql
+0 25 Open-ILS/src/sql/Pg/upgrade/XXXX.data.wide_holds-workstation-settings.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1124.data.wide_holds-workstation-settings.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.wide_holds-workstation-settings.sql
+
+commit b63e80d18dc87f30d66fdd4914ea77bd24d6a75e
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Wed Aug 29 17:00:39 2018 -0400
+
+ LP#1712854: Add wide_hold grid settings to server storage
+
+ Adds the new wide_hold grid settings used in the holds shelf and record holds
+ interfaces to server storage, as is done with other grid settings. Also removes
+ the legacy eg.grid.circ.holds.shelf and eg.grid.cat.catalog.holds settings.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+6 6 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+25 0 Open-ILS/src/sql/Pg/upgrade/XXXX.data.wide_holds-workstation-settings.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.wide_holds-workstation-settings.sql
+
+commit 5ef57330c9a49db91f5794e53874a47ce6432ff7
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Thu Aug 30 16:48:23 2018 -0400
+
+ LP#1712854: Provide context-relevant default sort orders
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+1 1 Open-ILS/web/js/ui/default/staff/circ/holds/app.js
+
+commit 0c4238dfce4cf2375ff02099b6dab55b692ec8a4
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Thu Aug 30 16:37:21 2018 -0400
+
+ LP#1712854: Include shelf-expired holds in the "clearable" set
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+
+commit 5cbc171516a9ed68bbbfa1d6058c97255e907f25
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Tue Aug 28 12:23:50 2018 -0400
+
+ LP#1712854: Make use of local cache when moving to All Holds list
+
+ Clearing holds takes care of local updates to the hold data, so there is no
+ need to refetch the hold list when moving from Clearable to All. Actions
+ that change hold state otherwise do cause a refetch, however.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+23 10 Open-ILS/web/js/ui/default/staff/circ/holds/app.js
+
+commit 3af031b4a1449d5e28bbaa15e5bdcf7a451c2c5f
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Tue Aug 28 11:45:11 2018 -0400
+
+ LP#1712854: Provide a "only last captured copy" option to filter holds shelf
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+18 2 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+1 0 Open-ILS/web/js/ui/default/staff/circ/holds/app.js
+
+commit 4b4e283e30c332f6dca9dea997e58d0e935f0808
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Tue Aug 28 11:09:06 2018 -0400
+
+ LP#1712854: Fix typo in function names for cancel and uncancel of wide holds
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+2 2 Open-ILS/src/templates/staff/circ/holds/t_shelf_list.tt2
+
+commit 14af809466039334348ba38b8417fb462d57f55b
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Wed Jul 18 20:52:25 2018 -0400
+
+ LP#1712854: Speed improvements for two hold interfaces
+
+ The Hold Shelf and Record -> View Holds interfaces are painfully slow when
+ faced with a large set of holds. The main reason is the 2-stage process used
+ to gather the data: 1) find hold IDs for the context 2) for each hold, fetch
+ all the requisite data using a relatively slow API.
+
+ Here we create a new API that provides a streaming response of pre-inflated
+ hold data. The full result set is loaded immediately, and once loaded, the
+ grid makes use of the "clientsort" feature to provide fast sorting without
+ the need to go back to the server when only changing the sort columns and
+ direction, and when paging through results. The Hold Shelf UI now has a
+ progress indicator that appears whenever the hold list is retrieved from the
+ server, and the progress indicator for the Record -> View Holds UI is enhanced
+ to provide more granular updates.
+
+ It is expected that other hold interfaces will be able to make use of this new
+ API for performance and functionality improvements.
+
+ NOTE: This includes an additional change required to protect localStorage from
+ overlarge values when attempting to save the "last printed value" for future
+ reprinting. Previously, when attempting to print a 2000+ hold list,
+ localStorage throws an error and the print fails. Now the print will succeed,
+ but the value is not stored for reprinting and a message is logged to the JS
+ console.
+
+ NOTE: The original development plan was base this a new API on a native
+ Postgres materialized view, and provide a LISTEN/NOTIFY daemon to monitor for
+ events that should trigger a refresh of that view. As it happens, the use of
+ other new Postgres features (primarily the LATERAL join type) allows us to
+ avoid that maintenance and run-time complication.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+ Conflicts:
+ Open-ILS/web/js/ui/default/staff/services/hatch.js
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+43 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
+310 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+154 45 Open-ILS/src/templates/staff/cat/catalog/t_holds.tt2
+141 44 Open-ILS/src/templates/staff/circ/holds/t_shelf_list.tt2
+92 63 Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+106 79 Open-ILS/web/js/ui/default/staff/circ/holds/app.js
+111 0 Open-ILS/web/js/ui/default/staff/circ/services/holds.js
+10 2 Open-ILS/web/js/ui/default/staff/services/hatch.js
+
+commit c4d1f82da6bb1f3cf73974153fa60644bbfa5e18
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Tue Sep 4 14:07:38 2018 -0400
+
+ LP#1779920: stamp database update
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+261 0 Open-ILS/src/sql/Pg/upgrade/1123.schema.autorenewals.sql
+0 260 Open-ILS/src/sql/Pg/upgrade/XXXX.autorenewals_acp_and_circ_duration.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1123.schema.autorenewals.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.autorenewals_acp_and_circ_duration.sql
+
+commit ab88fed1ef564fa0398c3a883ac1f51b0d1d5796
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Tue Sep 4 13:55:18 2018 -0400
+
+ LP#1779920: adjust release notes
+
+ Wrap text and change the order of the paragraphs to put the
+ intent of the feature first.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+19 6 docs/RELEASE_NOTES_NEXT/Circulation/Autorenewal_Feature.adoc
+
+commit 12294ccda64e0792b43a0970217d1658e4e36824
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Sep 4 10:31:00 2018 -0400
+
+ LP#1779920 Auto-renew modify related tables/views
+
+ Add new columns to these tables/views:
+
+ * action.all_circulation
+ * action.all_circulation_slim
+ * action.aged_circulation
+ * action.all_circ_chain
+ * action.summarize_all_circ_chain
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+7 4 Open-ILS/src/sql/Pg/090.schema.action.sql
+201 0 Open-ILS/src/sql/Pg/upgrade/XXXX.autorenewals_acp_and_circ_duration.sql
+
+commit 0c19fd9d220a92702bf3a0ef51a1a6c78672f5de
+Author: Cesar Velez <cesar.velez at equinoxinitiative.org>
+Date: Tue Aug 21 18:23:14 2018 -0400
+
+ LP#1779920 - Autorenewal Feature-Release Docs
+
+ Summary release notes for Autorenewal
+
+ Signed-off by: Cesar Velez <cesar.velez at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+9 0 docs/RELEASE_NOTES_NEXT/Circulation/Autorenewal_Feature.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/Autorenewal_Feature.adoc
+
+commit 7a120c31eac808708fdf58d09f1917ab915b4658
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Aug 29 17:19:07 2018 -0400
+
+ LP#1779920 Circ auto-renewal repairs
+
+ * Remove hard-coded granularity for auto-renewal notification event
+ generation
+ * Moved schema update changes from 950 seed file into schema files.
+ * Added CircIsOpen validator to auto-renewal reactor on the off chance
+ a circ is renewed by the patron in the middle of event processing.
+ * Notification template formatting and language updates, and removed
+ debugging content.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Cesar Velez <cesar.velez at equinoxinitiative.org>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+4 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/Circ/AutoRenew.pm
+2 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+3 1 Open-ILS/src/sql/Pg/090.schema.action.sql
+29 32 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+31 25 Open-ILS/src/sql/Pg/upgrade/XXXX.autorenewals_acp_and_circ_duration.sql
+
+commit a9c3660f2b7a61069b445b06a4805121d3cf2cda
+Author: Cesar Velez <cesar.velez at equinoxinitiative.org>
+Date: Tue Aug 28 16:13:51 2018 -0400
+
+ LP#1779920 - Autorenew Feature
+
+ This branch adds the necessary changes to allow Evergreen via the
+ Action/Trigger system to generate daily automatic renewals of
+ outstanding loans. Implemented as pair of A/T definitions: Autorenew and
+ AutorenewNotify.
+
+ Signed-off by: Cesar Velez <cesar.velez at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+3 0 Open-ILS/examples/fm_IDL.xml
+3 0 Open-ILS/src/extras/ils_events.xml
+20 2 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/CDBI/config.pm
+86 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/Circ/AutoRenew.pm
+32 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Validator.pm
+52 0 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+53 0 Open-ILS/src/sql/Pg/upgrade/XXXX.autorenewals_acp_and_circ_duration.sql
+1 1 Open-ILS/src/templates/conify/global/config/rule_circ_duration.tt2
+ create mode 100644 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/Circ/AutoRenew.pm
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.autorenewals_acp_and_circ_duration.sql
+
+commit 647710dbdbd153b7d06ecfcc36ddcf97a933851a
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Tue Sep 4 13:32:46 2018 -0400
+
+ LP#1776020: stamp database update
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+431 0 Open-ILS/src/sql/Pg/upgrade/1122.schema.patron-alt-name.sql
+0 434 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.patron-alt-name.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1122.schema.patron-alt-name.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.patron-alt-name.sql
+
+commit 5ccc7d919ac3317d14cca34efc65cbe17c77c50e
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Aug 27 22:49:12 2018 -0400
+
+ LP#1776020 Deduplicate name keywords in patron merge
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+16 4 Open-ILS/src/sql/Pg/999.functions.global.sql
+16 4 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.patron-alt-name.sql
+
+commit 7908f3c3eca891bd4d6319447f3a94c71ee7be49
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Aug 27 22:00:52 2018 -0400
+
+ LP#1776020 Add pref names to bills and items-out receipt templates
+
+ Add support (with inline docs) for pref_.* name fields in Bills
+ Current/Historical/Payment templates and the patron Items Out template.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 0 Open-ILS/src/templates/staff/share/print_templates/t_bill_payment.tt2
+1 0 Open-ILS/src/templates/staff/share/print_templates/t_bills_current.tt2
+1 0 Open-ILS/src/templates/staff/share/print_templates/t_bills_historical.tt2
+1 0 Open-ILS/src/templates/staff/share/print_templates/t_items_out.tt2
+15 0 Open-ILS/web/js/ui/default/staff/circ/patron/bills.js
+5 0 Open-ILS/web/js/ui/default/staff/circ/patron/items_out.js
+
+commit ab3d64d4a611e0a4674e02e304cf633dc6c3855f
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Mon Aug 27 16:15:31 2018 -0400
+
+ LP#1776020: Tweaks to display of name keywords
+
+ Add an icon next to the primary name to indicate the presence of name keywords,
+ which can be seen via hovering. The name keywords continue to display at the
+ bottom of the patron summary sidebar.
+
+ Also fixes a minor bug where preferred name would display for anyone with
+ a middle name.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+1 0 Open-ILS/src/templates/staff/circ/patron/index.tt2
+1 6 Open-ILS/src/templates/staff/circ/patron/t_summary.tt2
+7 0 Open-ILS/src/templates/staff/css/circ.css.tt2
+
+commit f8789b3767b4eabfa68b8336804c583c8ade5f50
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Aug 21 21:31:15 2018 -0400
+
+ LP#1776020 Release notes for pref name / keywords
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+36 0 docs/RELEASE_NOTES_NEXT/Circulation/patron-pref-name.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/patron-pref-name.adoc
+
+commit 8d0f5b6f4e65a6c77f2f943b29fc2642ac85dcab
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Sun May 20 22:15:23 2018 -0400
+
+ LP#1776020 Patron preferred name & name keywords
+
+ Preferred Name
+
+ Adds a new set of patron preferred name fields for prefix, first,
+ middle, last, and suffix allowing patrons to provide preferred name
+ information. Preferred names are optional and each acts as an overlay
+ to the analogous primary name field, making it possible to provide
+ preferred name values for individual fields.
+
+ For example, a patron named William Erickson may have a preferred first
+ name (pref_first_given_name) of Bill, in which case the preferred name
+ would be Bill Erickson. Note a preferred last name is not required in
+ this case as the code uses primary name values as defaults when not
+ replaced with a preferred version.
+
+ * Patrons will see primary names displayed in the catalog when set.
+ * Staff will see both primary name and preferred name in the patron
+ summary side bar.
+ * Patron searches for any given name field will search both the primary
+ and preferred name data.
+ * Preferred name fields are available in Action/Trigger templates and
+ are present in various patron-focused print templates.
+
+ Name Keywords
+
+ Adds a new field to store miscellaneous patron name search terms. These
+ values are only for searching and do not appear in any interfaces, apart
+ from the patron summary side bar and the patron edit UI.
+
+ Included is a new search field in the patron search UI which searches
+ keyword values and all other name fields. It's essentially a global patron
+ name keyword search.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+9 0 Open-ILS/examples/fm_IDL.xml
+50 16 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/actor.pm
+45 0 Open-ILS/src/sql/Pg/005.schema.actors.sql
+3 0 Open-ILS/src/sql/Pg/015.schema.staging.sql
+21 0 Open-ILS/src/sql/Pg/999.functions.global.sql
+422 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.patron-alt-name.sql
+5 3 Open-ILS/src/templates/opac/myopac/prefs.tt2
+4 1 Open-ILS/src/templates/opac/parts/topnav.tt2
+16 0 Open-ILS/src/templates/opac/register.tt2
+123 33 Open-ILS/src/templates/staff/circ/patron/t_edit.tt2
+19 0 Open-ILS/src/templates/staff/circ/patron/t_summary.tt2
+14 0 Open-ILS/src/templates/staff/css/circ.css.tt2
+6 0 Open-ILS/src/templates/staff/share/print_templates/t_checkout.tt2
+14 8 Open-ILS/src/templates/staff/share/t_patron_search_form.tt2
+3 0 Open-ILS/web/js/ui/default/staff/admin/workstation/app.js
+5 0 Open-ILS/web/js/ui/default/staff/circ/patron/checkout.js
+24 5 Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+2 0 Open-ILS/web/js/ui/default/staff/services/patron_search.js
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.patron-alt-name.sql
+
+commit 8dfe18454b87addd05a9cc867e7712b9f32bfbe3
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Sun Jun 3 21:09:20 2018 -0700
+
+ LP1752370: Add weight column to metabib fields grid
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 0 Open-ILS/src/templates/staff/admin/server/config/metabib_field.tt2
+
+commit 349d7e394ad943ddf1d09d1aef3c4870b29cfb70
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Aug 29 14:05:09 2018 -0400
+
+ LP#1740412 Double grid tooltip max width
+
+ Bump the max-width of the grid tooltip from 200 to 400px to accommodate
+ longer messages. Shorter messages will continue using narrower
+ tooltips.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Michele Morgan <mmorgan at noblenet.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+4 0 Open-ILS/src/templates/staff/css/style.css.tt2
+2 0 Open-ILS/src/templates/staff/share/t_autogrid.tt2
+
+commit 764725a28c25adafc4a1673cd3c7c42723bfa6b8
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Fri Aug 24 10:30:34 2018 -0400
+
+ LP#1740412 Grid cell tooltips moved to top-left
+
+ Avoid rendering the tooltip in the middle of a section of overflowed
+ text, since it can lead to tooltips being pushed far to the right.
+ Render at top left of cell instead.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Michele Morgan <mmorgan at noblenet.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+2 0 Open-ILS/src/templates/staff/share/t_autogrid.tt2
+
+commit 1e9c0ab388a0697a1f099970240f2da21bfb5e1f
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Thu Aug 23 13:52:38 2018 -0400
+
+ LP#1740412 Grid cell tooltips limited to long content
+
+ Only display grid cell tooltips when the content of the cell overflows
+ its container.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Michele Morgan <mmorgan at noblenet.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+5 2 Open-ILS/src/templates/staff/share/t_autogrid.tt2
+26 0 Open-ILS/web/js/ui/default/staff/services/grid.js
+
+commit 8f44a224943e85e168d8224524ad669ee68a0aa0
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Jun 25 12:19:36 2018 -0400
+
+ LP#1740412 Grid cell content tooltips
+
+ Display a tooltip (popover), containing the full grid contents, when
+ mousing over a grid cell. This allows users to see the full contents of
+ a cell without having to resize the grid column.
+
+ This applies to text contents and pre-compiled HTML contents.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Michele Morgan <mmorgan at noblenet.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+8 0 Open-ILS/src/templates/staff/css/style.css.tt2
+12 4 Open-ILS/src/templates/staff/share/t_autogrid.tt2
+
+commit 03317dc6af32e23339f693592ead3e5993691277
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Thu Aug 30 12:37:45 2018 -0400
+
+ LP#1744756: Stamping upgrade script for custom perm group display
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+22 0 Open-ILS/src/sql/Pg/upgrade/1121.schema.perm-group-display.sql
+0 22 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.perm-group-display.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1121.schema.perm-group-display.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.perm-group-display.sql
+
+commit dab2a9b8b9f9092202ba53707bccb1ad6a2b68ed
+Author: Kyle Huckins <khuckins at catalyte.io>
+Date: Wed Aug 29 15:20:17 2018 +0000
+
+ lp1744756 Utilize Parent Trees
+
+ - Allow Patron Edit interface to make use of Parent OU trees when
+ expect tree doesn't exist.
+
+ Signed-off-by: Kyle Huckins <khuckins at catalyte.io>
+
+ Changes to be committed:
+ modified: Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+12 3 Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+
+commit afaa47a266f72117d754c767317c4e159eb21142
+Author: Kyle Huckins <khuckins at catalyte.io>
+Date: Mon Aug 27 20:21:45 2018 +0000
+
+ lp1744756 Docs fix and Permission change
+
+ - Introduce MANAGE_CUSTOM_PERM_GRP_TREE permission.
+
+ - Remove unnecessary references to unused "disabled"
+ field for pgtdes.
+
+ - Update documentation to correctly explain how removing
+ and adding display entries works.
+
+ Changes to be committed:
+ modified: Open-ILS/examples/fm_IDL.xml
+ modified: Open-ILS/src/sql/Pg/006.schema.permissions.sql
+ modified: Open-ILS/src/sql/Pg/950.data.seed-values.sql
+ modified: Open-ILS/src/sql/Pg/upgrade/XXXX.schema.perm-group-display.sql
+ modified: Open-ILS/web/js/ui/default/staff/admin/local/permission/app.js
+ modified: Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+ modified: docs/RELEASE_NOTES_NEXT/Client/pgtde.adoc
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+3 4 Open-ILS/examples/fm_IDL.xml
+0 1 Open-ILS/src/sql/Pg/006.schema.permissions.sql
+3 1 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+4 1 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.perm-group-display.sql
+1 8 Open-ILS/web/js/ui/default/staff/admin/local/permission/app.js
+3 5 Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+4 3 docs/RELEASE_NOTES_NEXT/Client/pgtde.adoc
+
+commit c5e8a84e54af6fd925fe047c40e53559f6ae8d6e
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Aug 6 11:35:44 2018 -0400
+
+ LP#1744756 Grp display tree minor fixes.
+
+ 1. Fix group tree display entry IDL sequence copy/paste issue:
+
+ permission.grp_tree_id_seq => permission.grp_tree_display_entry_id_seq
+
+ 2. Apply consistent use of tabs in the IDL.
+
+ 3. Fix thinko use of grp as a function in the no-entries-exist scenario
+ in the patron editor.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kyle Huckins <khuckins at catalyte.io>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+11 11 Open-ILS/examples/fm_IDL.xml
+1 1 Open-ILS/src/templates/staff/circ/patron/t_edit.tt2
+
+commit 9e3e576bcd6ff3c215bd14cac26bc3ce568955f3
+Author: Kyle Huckins <khuckins at catalyte.io>
+Date: Thu Jun 14 16:11:34 2018 +0000
+
+ lp1744756 Release Notes for PGTDEs
+
+ - Include release notes for Permission Group Tree Display
+ Entry UI and usage.
+ - Include pictures of interface for documentation.
+
+ Signed-off-by: Kyle Huckins <khuckins at catalyte.io>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+53 0 docs/RELEASE_NOTES_NEXT/Client/pgtde.adoc
+- - docs/media/pgtde_01.png
+- - docs/media/pgtde_02.png
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Client/pgtde.adoc
+ create mode 100644 docs/media/pgtde_01.png
+ create mode 100644 docs/media/pgtde_02.png
+
+commit 0f43da13c5c602e0bf62b9a3154db1f5f59fbc53
+Author: Kyle Huckins <khuckins at catalyte.io>
+Date: Thu Mar 15 18:54:13 2018 +0000
+
+ lp1744756 Profile Tree Display Entry Admin UI
+
+ - Flesh out permission.group_tree_display_entries table.
+ - Create pgtde IDL class corresponding to new permission.group_tree_display_entries
+ table.
+ - Admin UI for Permission Group Tree Entries capable of viewing, adding, removing,
+ or changing position of entries within tree based on OU.
+ - Save functionality to persist any changes made.
+ - Persist changes in positions of permission group display
+ entries in Admin UI with the Profile Selector in the patron
+ edit interface.
+ - Make profile selector use original functionality if there are no
+ display entries.
+
+ Signed-off-by: Kyle Huckins <khuckins at catalyte.io>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+25 0 Open-ILS/examples/fm_IDL.xml
+14 0 Open-ILS/src/sql/Pg/006.schema.permissions.sql
+19 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.perm-group-display.sql
+26 0 Open-ILS/src/templates/staff/admin/local/permission/index.tt2
+60 0 Open-ILS/src/templates/staff/admin/local/permission/t_grp_tree_display_entry.tt2
+36 0 Open-ILS/src/templates/staff/admin/local/permission/t_pgtde_add_dialog.tt2
+1 0 Open-ILS/src/templates/staff/admin/local/t_splash.tt2
+8 2 Open-ILS/src/templates/staff/circ/patron/t_edit.tt2
+443 0 Open-ILS/web/js/ui/default/staff/admin/local/permission/app.js
+85 1 Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.perm-group-display.sql
+ create mode 100644 Open-ILS/src/templates/staff/admin/local/permission/index.tt2
+ create mode 100644 Open-ILS/src/templates/staff/admin/local/permission/t_grp_tree_display_entry.tt2
+ create mode 100644 Open-ILS/src/templates/staff/admin/local/permission/t_pgtde_add_dialog.tt2
+ create mode 100644 Open-ILS/web/js/ui/default/staff/admin/local/permission/app.js
+
+commit 05968579768d066280a16350cc8abb01d013265b
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Wed Aug 29 18:18:54 2018 -0400
+
+ Forward-port 3.1.5 upgrade script
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+95 0 Open-ILS/src/sql/Pg/version-upgrade/3.1.4-3.1.5-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.1.4-3.1.5-upgrade-db.sql
+
+commit 79bb4ecdc65aa423a8f834bfefab88a04c6ba8d4
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Wed Aug 29 18:18:25 2018 -0400
+
+ Forward-port 3.0.11 upgrade script
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+95 0 Open-ILS/src/sql/Pg/version-upgrade/3.0.10-3.0.11-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.0.10-3.0.11-upgrade-db.sql
+
+commit c8fc43ed2e4009df7291c598e96a40ab957e3b1b
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Fri Jul 27 14:30:07 2018 -0400
+
+ LP#978095 ACQ use last-canceled copy reason if best
+
+ Only use an alternate keep-debits cancel reason if the currently
+ canceled copy is not using a keep-debits reason.
+
+ Also clarify in the docs that if another keep-debits reason is selected,
+ it's essentially chosen at random, not necessarily the "last" copy.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+4 5 Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
+11 1 docs/RELEASE_NOTES_NEXT/Acquisitions/autocancel_lineitems_when_all_copies_are_canceled.adoc
+
+commit 848484c3171a53a173b86af404de1658e69153a3
+Author: Jason Etheridge <jason at EquinoxInitiative.org>
+Date: Fri Feb 2 11:30:36 2018 -0500
+
+ lp978095 auto-canceling lineitems
+
+ "Acq: lineitems display as "on order" even after all copies have been cancelled"
+
+ When a copy (lineitem detail) on a lineitem is canceled through the UI, all of
+ the sibling copies are examined, and if they also happen to be canceled, then a
+ cancel attempt is made on the parent lineitem.
+
+ The cancel reason fed to the lineitem cancelation attempt will be the last
+ cancel reason on an examined sibling lineitem where Keep Debits is True, or
+ failing that, the cancel reason used wih the copy just canceled.
+
+ The UI will refresh to the lineitem view when such an auto-cancelation happens.
+
+ Signed-off-by: Jason Etheridge <jason at EquinoxInitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+36 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
+3 0 Open-ILS/web/js/ui/default/acq/common/li_table.js
+3 0 docs/RELEASE_NOTES_NEXT/Acquisitions/autocancel_lineitems_when_all_copies_are_canceled.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Acquisitions/autocancel_lineitems_when_all_copies_are_canceled.adoc
+
+commit f1c3c905d3c5efded57616f67d630c801e713073
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Fri Aug 24 16:05:09 2018 -0400
+
+ LP#1768902 Stamping DB upgrade for Z39 UPC
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+15 0 Open-ILS/src/sql/Pg/upgrade/1120.data.add-upc-to-z3950.sql
+0 15 Open-ILS/src/sql/Pg/upgrade/XXXX.data.add-upc-to-z3950.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1120.data.add-upc-to-z3950.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.add-upc-to-z3950.sql
+
+commit 4b4b69d03eb5521b0ba16183db6fb7c94831c7f9
+Author: Ben Shum <ben at evergreener.net>
+Date: Thu May 3 12:36:31 2018 -0500
+
+ LP#1768902: quick release note entry
+
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+4 0 docs/RELEASE_NOTES_NEXT/Cataloging/add-upc-to-z3950.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/add-upc-to-z3950.adoc
+
+commit 0e9ae4e247923ee56bb038c4380d928b70f75014
+Author: Ben Shum <ben at evergreener.net>
+Date: Thu May 3 12:24:44 2018 -0500
+
+ LP#1768902: Add UPC to z3950 search for OCLC and LOC
+
+ Based on settings provided by Jane Sandberg, add the UPC as a search
+ attribute definition for OCLC and LOC z3950 targets.
+
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+ Signed-off-by: Garry Collum <gcollum at gmail.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+4 0 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+15 0 Open-ILS/src/sql/Pg/upgrade/XXXX.data.add-upc-to-z3950.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.add-upc-to-z3950.sql
+
+commit 26d52958c2103cb81914c17bf0d6734a42c2ff03
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Tue May 1 03:22:15 2018 -0500
+
+ Docs: adding release notes and docs for LP1760160
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+10 0 docs/RELEASE_NOTES_NEXT/OPAC/different_styles_for_searchbar.adoc
+24 0 docs/admin_initial_setup/different_styles_for_searchbar.adoc
+2 0 docs/root.adoc
+2 0 docs/root_command_line_admin.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/OPAC/different_styles_for_searchbar.adoc
+ create mode 100644 docs/admin_initial_setup/different_styles_for_searchbar.adoc
+
+commit ecee476ede872cc671c8fe4887eb6194d6b9ef85
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Sat Mar 31 06:48:49 2018 -0700
+
+ LP1760160: Search bar has a different CSS class when on the home page
+
+ To test:
+ 1. In templates/opac/css/style.css, add some highly noticeable CSS that
+ applies to .searchbar-home or an element within .searchbar-home, e.g.
+ .searchbar-home .search-box {
+ background-color: purple;
+ height: 4em;
+ }
+ 2. Go to the home page of your public catalog. The .searchbar-home .search-box CSS
+ should have taken effect.
+ 3. Go to another page of your public catalog, such as a search results
+ or login page. The CSS should not have taken effect here.
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/templates/opac/home.tt2
+2 1 Open-ILS/src/templates/opac/parts/searchbar.tt2
+
+commit 6afaf84691f593c8a48e528c4f54ef7f991a8a22
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Thu Aug 23 12:26:11 2018 -0400
+
+ LP 1768715: pingest.pl merge conflict typo fix: skip_dispaly
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/support-scripts/pingest.pl
+
+commit 4118424b8d80dfb34f3e32c12e1f538a20f8aa92
+Author: Jason Stephenson <jason at sigio.com>
+Date: Sat Jun 2 20:33:23 2018 -0400
+
+ LP 1768715: pingest.pl Release Notes and Installation
+
+ Add pingest.pl to Open-ILS/src/Makefile.am so it will be installed by
+ default.
+
+ Add release notes for pingest.pl.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+2 1 Open-ILS/src/Makefile.am
+70 0 docs/RELEASE_NOTES_NEXT/Cataloging/pingest.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/pingest.adoc
+
+commit 41e6fe45422e24c1b2af4f638d7113c109d7aff2
+Author: Jason Stephenson <jason at sigio.com>
+Date: Sat Jun 2 19:18:40 2018 -0400
+
+ LP 1768715: Fix pingest.pl bug discovered by Dan Scott of Laurentian U.
+
+ Reingest was not happening if all ingests were skipped, except for the
+ display field reingest. This came down to a matter of two conditional
+ statements not including checks for the $skip_display variable being
+ true.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+2 2 Open-ILS/src/support-scripts/pingest.pl
+
+commit ddfa6af287dc9c7fc69f558ab8e7b99ab9df4f15
+Author: Jeff Godin <jgodin at tadl.org>
+Date: Fri Nov 24 10:23:56 2017 -0500
+
+ LP 1768715: Use older named notation in pingest.pl
+
+ Use older style param := 'value' named notation for PostgreSQL
+ function calls in pingest.pl to support PostgreSQL versions < 9.5.
+
+ NOTE: This commit was modified to fit with the flow of the surrounding
+ commits from the master branch of the source repository.
+
+ Signed-off-by: Jeff Godin <jgodin at tadl.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+3 3 Open-ILS/src/support-scripts/pingest.pl
+
+commit 55093af49ba1d0bd5f63a1206972703ae31d273c
+Author: Jason Stephenson <jason at sigio.com>
+Date: Tue Nov 21 21:23:03 2017 -0500
+
+ LP 1768715: Whitespace cleanup in Blake's commit.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/support-scripts/pingest.pl
+
+commit 7e007cc03694799d2b5a49f6c6791df706b51d4d
+Author: Blake GH <blake at mobiusconsortium.org>
+Date: Tue Nov 21 10:41:48 2017 -0600
+
+ LP 1768715: Missing semi colon
+
+ Add missing semi-colon in pingest.pl.
+
+ Signed-off-by: Blake GH <blake at mobiusconsortium.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/support-scripts/pingest.pl
+
+commit d81eb554d9cc40b2b4339fe0ae68847587c8a12f
+Author: Jason Stephenson <jason at sigio.com>
+Date: Wed Oct 4 16:43:37 2017 -0400
+
+ LP 1768715: Handle the skip_display option of metabib.reingest_metabib_field_entries.
+
+ pingest.pl gets a --skip-display option of its own that disables the
+ display ingest. The display ingest is also skipped in the browse
+ ingest.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+6 2 Open-ILS/src/support-scripts/pingest.pl
+
+commit 3fc6f07190a31ff9c2c52caac10374fc5fe9b9bb
+Author: Jason Stephenson <jason at sigio.com>
+Date: Wed Oct 4 13:25:19 2017 -0400
+
+ LP 1768715: Add skip_browse where it was missed in pingest.pl.
+
+ I missed the named parameter for skip_browse in reingest_field_entries
+ in pingest.pl in the earlier commit.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/support-scripts/pingest.pl
+
+commit fa3af4113a3f8cff1bc2fb43dfc62af2977db78f
+Author: Jason Stephenson <jason at sigio.com>
+Date: Wed Oct 4 12:55:05 2017 -0400
+
+ LP 1768715: Use named arguments in function calls in pingest.pl.
+
+ This makes it work, more or less, with Evergreen 3.0 and the changes
+ to metabib.reingest_field_entries. Note that the new skip_display
+ parameter is not set, so you might get collisions between the browse
+ ingest and one of the other ingest processes if they both work on the
+ same record at once.
+
+ I will make a branch for use with Evergreen 3.0 until I upgrade to
+ Evergreen 3.0 and merge that branch into master.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+3 3 Open-ILS/src/support-scripts/pingest.pl
+
+commit bee32963d1be36b22ea1984a90262149f6330faf
+Author: Jason Stephenson <jason at sigio.com>
+Date: Wed Oct 4 11:18:35 2017 -0400
+
+ LP 1768715: Add database connection parameters to pingest.pl command line.
+
+ This will serve as the model for future Perl scripts that need to
+ connect to the PostgreSQL database with DBI. I may go back and alter
+ the existing scripts to use this method.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+18 3 Open-ILS/src/support-scripts/pingest.pl
+
+commit fe5ba7746f7ec5a1d33195160c00654a7bd869dc
+Author: Jason Stephenson <jstephenson at mvlcstaff.org>
+Date: Mon Apr 11 12:25:57 2016 -0400
+
+ LP 1768715: Make the pingest.pl --pipe option be greedy.
+
+ The --pipe option is used with pingest.pl now assumes that that any
+ string of digits in the input is a record id. Instead of using just
+ the first string of digits on a line, as it did before, it now uses
+ each string of digits on a line.
+
+ Signed-off-by: Jason Stephenson <jstephenson at mvlcstaff.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+3 3 Open-ILS/src/support-scripts/pingest.pl
+
+commit 1f2f392b42c5e1e10488d2034a0686c7e8768ad4
+Author: Jason Stephenson <jstephenson at mvlcstaff.org>
+Date: Mon Apr 11 10:39:02 2016 -0400
+
+ LP 1768715: Simplify Open-ILS/src/support-scripts/pingest.pl with selectcol_arrayref.
+
+ By switching to DBI->selectcol_arrayref in pingest.pl, we can avoid
+ having to check for references in the main loop. This eliminates an
+ extra variable and an extra line of code that are no longer needed.
+
+ Signed-off-by: Jason Stephenson <jstephenson at mvlcstaff.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+2 3 Open-ILS/src/support-scripts/pingest.pl
+
+commit 2da2f10b1e9f744cd57da8ced8fdb8779f1b5511
+Author: Jason Stephenson <jstephenson at mvlcstaff.org>
+Date: Fri Apr 1 10:02:45 2016 -0400
+
+ LP 1768715: Only connect to the database when needed in pingest.pl.
+
+ We chagne where we connect and disconnect the database in the parent
+ process in pingest.pl. There's no point connecting at all if the
+ --pipe option is used.
+
+ Signed-off-by: Jason Stephenson <jstephenson at mvlcstaff.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+2 2 Open-ILS/src/support-scripts/pingest.pl
+
+commit d762c9eb243eeb66f827873e602919598a1cf88d
+Author: Jason Stephenson <jstephenson at mvlcstaff.org>
+Date: Fri Apr 1 10:00:20 2016 -0400
+
+ LP 1768715: Fix bug in pingest.pl after --pipe option was added.
+
+ Apparently, the results of DBI->selectall_arrayref need to be cast to
+ an array and not just returned as a list.
+
+ Signed-off-by: Jason Stephenson <jstephenson at mvlcstaff.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/support-scripts/pingest.pl
+
+commit 844a1fbea2b94dc34802099c5b13376f0fbfab1d
+Author: Jason Stephenson <jstephenson at mvlcstaff.org>
+Date: Thu Mar 31 11:39:49 2016 -0400
+
+ LP 1768715: Add --pipe option to pingest.pl
+
+ With this option, pingest.pl reads a list of record IDs from standard
+ input, instead of running a query. This is useful if you have a
+ custom query to output only certain records to reingest and you can
+ pipe the output into pingest.pl.
+
+ Signed-off-by: Jason Stephenson <jstephenson at mvlcstaff.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+27 3 Open-ILS/src/support-scripts/pingest.pl
+
+commit 28d87c24928344307fc68338aa01ca2c1d97173a
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Feb 16 12:59:55 2016 -0500
+
+ LP 1768715: pingest supports max/min ID, duration, more ops
+
+ From the new help text:
+
+ --batch-size
+ Number of records to process per batch
+
+ --max-child
+ Max number of worker processes
+
+ --skip-browse
+ --skip-attrs
+ --skip-search
+ --skip-facets
+ Skip the selected reingest component
+
+ --start-id
+ Start processing at this record ID.
+
+ --end-id
+ Stop processing when this record ID is reached
+
+ --max-duration
+ Stop processing after this many total seconds have passed.
+
+ --help
+ Show this help text.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Jason Stephenson <jstephenson at mvlc.org>
+
+104 43 Open-ILS/src/support-scripts/pingest.pl
+
+commit 1ceab5e76d05e507da85302be22137f13d4a8635
+Author: Jason Stephenson <jstephenson at mvlc.org>
+Date: Mon Oct 26 10:32:19 2015 -0400
+
+ LP 1768715: Add pingest.pl to Evergreen.
+
+ Add Open-ILS/src/support-script/pingest.pl to do ingests in parallel.
+ See release notes for details.
+
+ NOTE: This and subsequent commits were added from a branch that
+ preserves the history of the repository from which pingest.pl was
+ copied. The dates on these commits represent when the code was added
+ or modified in the source repository. They do not reflect when the
+ code was added to Evergreen.
+
+ Also, pingest.pl predates this commit. The date on this commit was
+ when the source repository was split into separate directories for SQL
+ and Perl scripts.
+
+ Signed-off-by: Jason Stephenson <jstephenson at mvlc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+214 0 Open-ILS/src/support-scripts/pingest.pl
+ create mode 100755 Open-ILS/src/support-scripts/pingest.pl
+
+commit bd8912ee2d1016619ee208d513815072071fc6be
+Author: Jeff Davis <jdavis at sitka.bclibraries.ca>
+Date: Wed Nov 15 14:36:21 2017 -0800
+
+ LP#1732552: Move OPAC login username hint to separate template
+
+ Signed-off-by: Jeff Davis <jdavis at sitka.bclibraries.ca>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 2 Open-ILS/src/templates/opac/parts/login/form.tt2
+6 0 Open-ILS/src/templates/opac/parts/login/username_hint.tt2
+6 0 docs/RELEASE_NOTES_NEXT/OPAC/username-hint.adoc
+ create mode 100644 Open-ILS/src/templates/opac/parts/login/username_hint.tt2
+ create mode 100644 docs/RELEASE_NOTES_NEXT/OPAC/username-hint.adoc
+
+commit 3100c328934dcc2b83ea90039294048d4b26c09b
+Author: a. bellenir <ab at grpl.org>
+Date: Wed Aug 22 11:33:55 2018 -0400
+
+ LP#1788417: boolean fields should say 'Yes'/'No' instead of true/false
+
+ boolean fields on egGrid use tt2-translated strings for "Yes" and "No"
+ instead of letting the browser translate the values 'true' and 'false'
+ (in accordance with the prophecy of XUL)
+
+ Signed-off-by: a. bellenir <ab at grpl.org>
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+
+2 0 Open-ILS/src/templates/staff/base_js.tt2
+4 5 Open-ILS/web/js/ui/default/staff/services/grid.js
+
+commit d967aac09b076d5782047357b5dfcad4b7f1fe9a
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Wed Aug 15 18:10:08 2018 -0400
+
+ LP#1775216: Stamping upgrade script for inconsistent copy counts
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+0 88 Open-ILS/src/sql/Pg/upgrade/1112.schema.lp1775216_consistent_avail_counts.sql
+90 0 Open-ILS/src/sql/Pg/upgrade/1119.schema.lp1775216_consistent_avail_counts.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/1112.schema.lp1775216_consistent_avail_counts.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1119.schema.lp1775216_consistent_avail_counts.sql
+
+commit 4e0528b11a244734b0d2835dd8ce6c96fb28a5fd
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed Aug 15 14:08:41 2018 -0400
+
+ LP#1721575 Stamping DB upgrade: batch catalog actions
+
+ Also replaced a remaining reference to "cart" with "basket"
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+90 0 Open-ILS/src/sql/Pg/upgrade/1118.data.bre_format_title_fix.sql
+0 86 Open-ILS/src/sql/Pg/upgrade/XXXX.data.bre_format_title_fix.sql
+1 1 Open-ILS/src/templates/opac/parts/anon_list.tt2
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1118.data.bre_format_title_fix.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.bre_format_title_fix.sql
+
+commit ba5f74d896b52b8e64093324220ceba4f5100862
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Tue Aug 14 16:28:35 2018 -0400
+
+ LP#1721575: Changes to some strings
+
+ We missed one instance of cart when changing everything over to baskets. Also,
+ I updated language for clearing a basket after placing a hold to make it a
+ little clearer.
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/templates/opac/parts/place_hold.tt2
+1 1 Open-ILS/src/templates/opac/parts/result/table.tt2
+
+commit deab49ceef1b036c7918c3103282e0be13710980
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Mon May 14 15:24:59 2018 -0400
+
+ LP#1721575: Batch Actions In the Public Catalog
+
+ The public catalog now displays checkboxes on the bibliographic and
+ metarecord constituents results pages. Selecting one or more titles
+ by using the checkboxes will dynamically add those title to the
+ temporary list, which is now renamed the basket.
+
+ Above the results lists there is now a bar with a select-all checkbox,
+ a link to the basket management page that also indicates the number of
+ of titles in the basket, and a link to remove from the basket titles that
+ are selected on the currently displayed results page.
+
+ The search bar now includes an icon of a basket and displays the number
+ of titles currently in the basket. Next to that icon is a menu of basket
+ actions.
+
+ The basket actions available are Place Hold, Print Title Details,
+ Email Title Details, Add Cart to Saved List, and Clear Cart. In the
+ web staff client, the basket actions also include Add Cart to Bucket.
+ When an action is selected from this menu, the user is given an
+ opportunity to confirm the action and to optionally empty the basket
+ when the action is complete. The action is applied to all titles
+ in the basket.
+
+ Clicking on the basket icon brings the user to a page listing the
+ titles in the basket. From there, the user can select specific records
+ to request, print, email, add to a list, or remove from the basket.
+
+ The list of actions on the record details page now provides separate
+ links for adding the title to a basket or to a permanent list.
+
+ The permanent list management page in the public catalog now also
+ includes batch print and email actions.
+
+ Additional information
+ ++++++++++++++++++++++
+ * The checkboxes do not display on the metarecord results page, as
+ metarecords currently cannot be put into baskets or lists.
+ * The checkboxes are displayed only if Javascript is enabled. However,
+ users can still add items to the basket and perform batch actions on
+ the basket and on lists.
+ * A template `config.tt2` setting, `ctx.max_basket_size`, can be used to
+ set a soft limit on the number of titles that can be added to the
+ basket. If this limit is reached, checkboxes to add more records to the
+ basket are disabled unless existing titles in the basket are removed
+ first. The default value for this setting is 500.
+
+ Developer notes
+ +++++++++++++++
+
+ This patch adds the the public catalog two routes that return JSON
+ rather than HTML:
+
+ * `GET /eg/opac/api/mylist/add?record=45`
+ * `GET /eg/opac/api/mylist/delete?record=45`
+
+ The JSON response is a hash containing a mylist key pointing to the list
+ of bib IDs of contents of the basket.
+
+ The record parameter can be repeated to allow adding or removing
+ records as an atomic operation. Note that this change also now available
+ to `/eg/opac/mylist/{add,delete}`
+
+ More generally, this adds a way for EGWeb context loaders to specify that
+ a response should be emitted as JSON rather than rendering an HTML
+ page using `Template::Toolkit`.
+
+ Specifically, if the context as munged by the context loader contains
+ a `json_response` key, the contents of that key will to provide a
+ JSON reponse. The `json_response_cookie` key, if present, can be used
+ to set a cookie as part of the response.
+
+ Template Toolkit processing is bypassed entirely when emitting a JSON
+ response, so the context loader would be entirely reponsible for
+ localization of strings in the response meant for direct human
+ consumption.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+16 3 Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm
+55 14 Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm
+211 26 Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Container.pm
+60 6 Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm
+13 0 Open-ILS/src/perlmods/lib/OpenILS/WWW/EGWeb.pm
+4 2 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+86 0 Open-ILS/src/sql/Pg/upgrade/XXXX.data.bre_format_title_fix.sql
+1 0 Open-ILS/src/templates/opac/advanced.tt2
+1 0 Open-ILS/src/templates/opac/browse.tt2
+56 5 Open-ILS/src/templates/opac/css/style.css.tt2
+3 2 Open-ILS/src/templates/opac/mylist.tt2
+21 0 Open-ILS/src/templates/opac/mylist/clear.tt2
+29 0 Open-ILS/src/templates/opac/mylist/email.tt2
+29 0 Open-ILS/src/templates/opac/mylist/print.tt2
+25 1 Open-ILS/src/templates/opac/myopac/lists.tt2
+15 6 Open-ILS/src/templates/opac/parts/anon_list.tt2
+0 3 Open-ILS/src/templates/opac/parts/bookbag_actions.tt2
+30 0 Open-ILS/src/templates/opac/parts/cart.tt2
+5 0 Open-ILS/src/templates/opac/parts/config.tt2
+1 0 Open-ILS/src/templates/opac/parts/css/colors.tt2
+7 1 Open-ILS/src/templates/opac/parts/header.tt2
+10 0 Open-ILS/src/templates/opac/parts/js.tt2
+7 2 Open-ILS/src/templates/opac/parts/place_hold.tt2
+29 14 Open-ILS/src/templates/opac/parts/record/summary.tt2
+50 19 Open-ILS/src/templates/opac/parts/result/table.tt2
+1 0 Open-ILS/src/templates/opac/parts/searchbar.tt2
+1 1 Open-ILS/src/templates/opac/parts/topnav.tt2
+4 0 Open-ILS/src/templates/opac/record/email.tt2
+4 0 Open-ILS/src/templates/opac/record/print.tt2
+2 2 Open-ILS/src/templates/opac/results.tt2
+3 3 Open-ILS/src/templates/opac/temp_warn.tt2
+- - Open-ILS/web/images/add-to-cart.png
+- - Open-ILS/web/images/cart-md.png
+- - Open-ILS/web/images/cart-sm.png
+284 0 Open-ILS/web/js/ui/default/opac/record_selectors.js
+38 11 Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+76 0 docs/RELEASE_NOTES_NEXT/OPAC/Batch_Actions.adoc
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.bre_format_title_fix.sql
+ create mode 100644 Open-ILS/src/templates/opac/mylist/clear.tt2
+ create mode 100644 Open-ILS/src/templates/opac/mylist/email.tt2
+ create mode 100644 Open-ILS/src/templates/opac/mylist/print.tt2
+ create mode 100644 Open-ILS/src/templates/opac/parts/cart.tt2
+ create mode 100644 Open-ILS/web/images/add-to-cart.png
+ create mode 100644 Open-ILS/web/images/cart-md.png
+ create mode 100644 Open-ILS/web/images/cart-sm.png
+ create mode 100644 Open-ILS/web/js/ui/default/opac/record_selectors.js
+ create mode 100644 docs/RELEASE_NOTES_NEXT/OPAC/Batch_Actions.adoc
+
+commit 65baf6b58639ed883960c9b88efed54b1bc61a3b
+Author: Ben Shum <ben at evergreener.net>
+Date: Wed Aug 15 11:31:01 2018 -0400
+
+ Translation updates - newpot
+
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+3 3 build/i18n/po/cat.properties/cat.properties.pot
+3 3 build/i18n/po/common.properties/common.properties.pot
+3448 2723 build/i18n/po/db.seed/db.seed.pot
+2253 2221 build/i18n/po/fm_IDL.dtd/fm_IDL.dtd.pot
+24 25 build/i18n/po/lang.dtd/lang.dtd.pot
+40 40 build/i18n/po/tpac/tpac.pot
+828 523 build/i18n/po/webstaff/webstaff.pot
+
+commit e8e766724270ee2b5cac7ef193a4e5647d5d2ad7
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Thu Jul 5 14:33:24 2018 -0700
+
+ LP1164061: Edit authority record by database ID
+
+ Allow users to jump directly to the authority record MARC edit interface
+ by entering the authority record ID.
+
+ Includes release notes.
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+17 0 Open-ILS/src/templates/staff/cat/catalog/t_retrieve_by_authority_id.tt2
+6 0 Open-ILS/src/templates/staff/navbar.tt2
+20 0 Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+17 0 docs/RELEASE_NOTES_NEXT/Cataloging/view-authority-record-by-id.adoc
+ create mode 100644 Open-ILS/src/templates/staff/cat/catalog/t_retrieve_by_authority_id.tt2
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/view-authority-record-by-id.adoc
+
+commit 913237b92bcd9278cd3608ad4d6d1048bda1d1d0
+Author: Jason Stephenson <jason at sigio.com>
+Date: Sun Jul 8 14:19:10 2018 -0400
+
+ LP 1780660: Add more workstation functions to OpenILS::Utils::TestUtils.
+
+ Add methods find_or_register_workstation($name, $lib) and
+ find_workstation($name, $lib) to OpenILS::Utils::TestUtils. These can
+ be used when writing tests or other scripts to find or create
+ workstations.
+
+ The following Perl live tests were updated to use the new methods
+ rather than their hand-rolled versions:
+
+ * 14-lp1499123_csp_ignore_proximity.t
+ * 18-lp1592891_sip_standing_penalties.t
+ * 19-lp1306666-abort-transit-copy-status.t
+ * 25-lp1694058-multiple-hold-placement.t
+
+ Testing this is very simple:
+
+ 1. Install Evergreen from this branch.
+ 2. Load the Concerto dataset.
+ 3. Start Evergreen services with osrf_control.
+ 4. cd to the perlmods source directory.
+ 5. Do 'make livecheck' and see that all tests pass, particularly the 4
+ mentioned above.
+
+ Signed-off-by: Jason Stephenson <jason at sigio.com>
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+23 0 Open-ILS/src/perlmods/lib/OpenILS/Utils/TestUtils.pm
+1 16 Open-ILS/src/perlmods/live_t/14-lp1499123_csp_ignore_proximity.t
+1 16 Open-ILS/src/perlmods/live_t/18-lp1592891_sip_standing_penalties.t
+2 19 Open-ILS/src/perlmods/live_t/19-lp1306666-abort-transit-copy-status.t
+1 23 Open-ILS/src/perlmods/live_t/25-lp1694058-multiple-hold-placement.t
+
+commit beee20c5b0a63bf8248a630686f2fb262d4789ac
+Author: Kathy Lussier <klussier at masslnc.org>
+Date: Fri Aug 3 13:29:14 2018 -0400
+
+ LP#1750894: Stamping upgrade script for workstation settings on server
+
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+227 0 Open-ILS/src/sql/Pg/upgrade/1116.schema.workstation-settings.sql
+930 0 Open-ILS/src/sql/Pg/upgrade/1117.data.workstation-settings.sql
+0 227 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.workstation-settings.sql
+0 928 Open-ILS/src/sql/Pg/upgrade/YYYY.data.workstation-settings.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1116.schema.workstation-settings.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1117.data.workstation-settings.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.workstation-settings.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/YYYY.data.workstation-settings.sql
+
+commit d423090e2277daa2e69f49cef91f37235184db95
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Fri Aug 3 11:39:15 2018 -0400
+
+ LP#1750894 Remove errant phantomjs-killing comma
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/services/hatch.js
+
+commit 73b7ace22996370f5bc8e338f115a3d9dd03b349
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Jul 31 16:52:18 2018 -0400
+
+ LP#1750894 Additional workstation setting types + repairs
+
+ Added new workstation setting types:
+
+ circ.checkout.strict_barcode
+ cat.holdings_show_empty_org
+ cat.copy.defaults
+ cat.printlabels.default_template
+ cat.printlabels.templates
+
+ Bump perm ID in seed data, take 2.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+37 2 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+35 0 Open-ILS/src/sql/Pg/upgrade/YYYY.data.workstation-settings.sql
+
+commit 29f35dcc1862db26f486e9e0c6a2c0174281019b
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Jul 31 16:30:17 2018 -0400
+
+ LP#1750894 Batch settings lookup handles migration
+
+ As with a single getItem() call, the batch version of the call, when
+ making server requests, will migrate any settings necessary from
+ localStorage to server settings.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+25 11 Open-ILS/web/js/ui/default/staff/services/hatch.js
+
+commit a61fc24476f6c24bceea2a4b0b9cc900ac0fe735
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Fri Jul 27 17:52:24 2018 -0400
+
+ LP#1750894 Hatch set local storage item thinko
+
+ Ensure hatch.setItem() returns a promise for both server- and browser-
+ stored values.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/services/hatch.js
+
+commit edd1e288917ddde1cebedf3df57732af5fc86d8a
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Fri Jul 27 17:26:08 2018 -0400
+
+ LP#1750894 Bump perm ID; apply consistently
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+4 5 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+2 2 Open-ILS/src/sql/Pg/upgrade/YYYY.data.workstation-settings.sql
+
+commit 14803bb75f6129d59c3dc74e9c2df5909348969e
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Jun 4 17:14:24 2018 -0400
+
+ LP#1750894 Store grid limits in grid config
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+38 8 Open-ILS/web/js/ui/default/staff/services/grid.js
+
+commit f06c3c2110e164b01a46014972258ba41423aa7a
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Jun 4 12:10:20 2018 -0400
+
+ LP#1750894 Server-stored workstaion prefs admin view
+
+ Adds a new "Server Workstation Prefs" tab to the stored preferences
+ workstation admin interface. From here, users can view which
+ preferences are stored as server-stored workstation preferences and
+ delete select values.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+13 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/Settings.pm
+5 2 Open-ILS/src/templates/staff/admin/workstation/t_stored_prefs.tt2
+13 3 Open-ILS/web/js/ui/default/staff/admin/workstation/app.js
+2 2 Open-ILS/web/js/ui/default/staff/services/hatch.js
+8 0 docs/RELEASE_NOTES_NEXT/Client/workstation-server-settings.adoc
+
+commit ff6aa2ab53271740a0b2fd73859af785f7765f32
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Wed May 30 16:38:56 2018 -0400
+
+ LP#1750894 Workstation/Cascade setting pgtap tests
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+84 0 Open-ILS/src/sql/Pg/t/lp1750894-workststation-settings.pg
+ create mode 100644 Open-ILS/src/sql/Pg/t/lp1750894-workststation-settings.pg
+
+commit 7790968d6410a3de13ed606150b61f148f96b2bc
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue May 29 11:47:16 2018 -0400
+
+ LP#1750894 Workstation/Cascade settings Release Notes
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+63 0 docs/RELEASE_NOTES_NEXT/Client/workstation-server-settings.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Client/workstation-server-settings.adoc
+
+commit 7891c0241e9b5273f122f8d77cb20ebbf2d5cf6b
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Tue Mar 13 14:06:23 2018 -0400
+
+ LP#1750894 Workstation & Cascade settings
+
+ Adds a new config.workstation_setting_type table for managing
+ workstation-specific settings.
+
+ Adds new PG and perl API functionality for determining values for
+ settings which may be represnted as workstation, user, and/or org unit
+ settings.
+
+ Teaches the AngularJS browser client to load and apply most settings at
+ the server. Values for settings stored in localStorage/Hatch are migrated
+ to server settings at time of next use.
+
+ Stock workstation setting types added to accommodate most browser client
+ settings.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+45 1 Open-ILS/examples/fm_IDL.xml
+1 0 Open-ILS/src/perlmods/MANIFEST
+1 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm
+306 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/Settings.pm
+58 0 Open-ILS/src/sql/Pg/002.schema.config.sql
+164 0 Open-ILS/src/sql/Pg/005.schema.actors.sql
+893 1 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+227 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.workstation-settings.sql
+893 0 Open-ILS/src/sql/Pg/upgrade/YYYY.data.workstation-settings.sql
+2 0 Open-ILS/src/templates/staff/admin/workstation/index.tt2
+3 1 Open-ILS/web/js/ui/default/staff/admin/workstation/app.js
+10 3 Open-ILS/web/js/ui/default/staff/circ/checkin/app.js
+351 35 Open-ILS/web/js/ui/default/staff/services/hatch.js
+ create mode 100644 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/Settings.pm
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.workstation-settings.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/YYYY.data.workstation-settings.sql
+
+commit 26581c762f386104c5002b68b9dd99fb0a68116e
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Jul 30 10:23:37 2018 -0400
+
+ LP#1766716 Closed dates Perl live test API repair
+
+ Update the org unit close date Perl live test to match API changes for
+ emergecy org unit close dates handling.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+
+4 1 Open-ILS/src/perlmods/live_t/04-overdue_with_closed_dates.t
+
+commit 15c4db3b46d7c279ce5552ad55b08d3fe861bfb0
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Thu Jul 26 14:40:00 2018 -0400
+
+ LP#1766716 Stamping emergency closing DB upgrade
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+449 0 Open-ILS/src/sql/Pg/upgrade/1115.schema.emergency_closing.sql
+0 449 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.emergency_closing.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1115.schema.emergency_closing.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.emergency_closing.sql
+
+commit 76ff2328fdb1ec5ef1ff19056fb5a610bdda70d8
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Wed Jul 11 16:51:59 2018 -0400
+
+ LP#1766716: Adjust date display logic
+
+ We were using the wrong date formating filter, egDueDate, and additionly the
+ egOrgDateInContext filter was defaulting to the useless 'shortDate' format in
+ cases where a format was not passed (such as when $root.egDateAndTimeFormat
+ can't be found). Both of these are addressed here.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+2 2 Open-ILS/src/templates/staff/admin/local/actor/closed_dates.tt2
+1 0 Open-ILS/web/js/ui/default/staff/admin/local/actor/closed_dates.js
+1 1 Open-ILS/web/js/ui/default/staff/services/ui.js
+
+commit 3f249b1cc43dd59da8ac640767b74a151bed7cb5
+Author: Bill Erickson <berickxx at gmail.com>
+Date: Mon Jul 9 11:55:07 2018 -0400
+
+ LP#1766716 Closed dates API emergency filter fix
+
+ Fix closed dates emergency => emergency_closing DB column name thinko.
+
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/ClosedDates.pm
+
+commit a440cb0787455a97363eb045d4bd19a865ad19d2
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Wed May 9 12:28:00 2018 -0400
+
+ LP#1766716: (follow-up) expand CSS imports for now
+
+ The patches for bug 1739803 ended up removing the minification
+ of the CSS and constructing evergreen-staff-client-deps.0.0.1.min.css,
+ so consequently setting EXPAND_WEB_IMPORTS to 0 currently does not
+ work as expected. Unless that regression (if it is one) gets
+ fixed, stick with EXPAND_WEB_IMPORTS = 1 for now.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+1 1 Open-ILS/src/templates/staff/config.tt2
+
+commit 71c46499d080f38c53bd3b8ee34852e973a2daf1
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Tue Apr 24 16:45:31 2018 -0400
+
+ LP#1766716: Release notes
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+22 0 docs/RELEASE_NOTES_NEXT/Circulation/EmergencyClosingHandler.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/EmergencyClosingHandler.adoc
+
+commit 5caa4344f460f8496589b641854634cf799a6dca
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Tue Feb 27 16:49:57 2018 -0500
+
+ LP#1766716: Emergency Closing handler
+
+ New Feature Summary
+
+ Staff are provided with interfaces and mechanisms to create library closings
+ that, in addition to affecting future circulation and booking due dates, and
+ hold shelf expirations, will automatically move existing circulation and
+ booking due dates and hold shelf expiration times. This new functionality is
+ conceptually described as Emergency Closings and business logic implementing it
+ as the Emergency Closing Handler. It contains additions and adjustments to the
+ user interface, business logic, and database layers. Access to this
+ functionality is available through the Closed Dates Editor interface in the
+ staff client which has been ported to AngularJS.
+
+ Overview
+
+ This development has created new business logic code to inspect, in real time,
+ existing circulation, booking, and hold records, and modify such date and time
+ stamps so that the circulation, booking, or hold will end in the same state it
+ would have if the closing had existed at the time the circulation or booking
+ occurred, or the hold was placed and captured. Of specific note, hourly loans
+ will have their due date adjusted to be the end of the day following the
+ closing.
+
+ When the Emergency Closing is saved, any fines accrued during the closing may
+ be voided, as settings dictate, with the exception of circulations that have
+ been marked as LOST or LONG OVERDUE. That is, even for LOST and LONG OVERDUE
+ circulations with due dates that fall within the Emergency Closing, no fine
+ adjustment will be applied. Emergency Closing processing is permanent, and
+ cannot be rolled back.
+
+ This functionality is explicitly initiated by staff action. If staff do not
+ request an Emergency Closing, existing circulations, bookings, and holds will
+ not be processed and adjusted. However, if staff request any Closing that
+ starts nearer in time than the length of the longest circulation duration
+ configured for use in the Evergreen instance they will be prompted with the
+ option to create the closing as an Emergency Closing.
+
+ Action/Trigger hooks have been created for circulations and bookings that are
+ adjusted by the Emergency Closing Handler. These will facilitate the creation
+ of notifications to patrons that the due date has changed and to alert them to
+ potential changes in accrued fines.
+
+ Booking start dates are explicitly ignored in this implementation. Because an
+ Emergency Closing is, by its nature, an unexpected event, it will be up to
+ staff to address any bookings which intersect with a new Emergency Closings.
+ Reports can be used to identify booking start dates that overlap with a closing
+ and that may require staff intervention.
+
+ Staff requsting and Emergency Closing must have the new EMERGENCY_CLOSING
+ permission.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+141 0 Open-ILS/examples/fm_IDL.xml
+201 7 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/ClosedDates.pm
+457 0 Open-ILS/src/sql/Pg/096.schema.emergency_closing.sql
+3 0 Open-ILS/src/sql/Pg/400.schema.action_trigger.sql
+3 1 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+2 0 Open-ILS/src/sql/Pg/sql_file_manifest
+449 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.emergency_closing.sql
+87 0 Open-ILS/src/templates/staff/admin/local/actor/closed_dates.tt2
+116 0 Open-ILS/src/templates/staff/admin/local/actor/edit_closed_dates.tt2
+1 1 Open-ILS/src/templates/staff/config.tt2
+3 3 Open-ILS/src/templates/staff/share/t_datetime.tt2
+352 0 Open-ILS/web/js/ui/default/staff/admin/local/actor/closed_dates.js
+3 0 Open-ILS/web/js/ui/default/staff/services/org.js
+1 1 Open-ILS/web/js/ui/default/staff/services/ui.js
+ create mode 100644 Open-ILS/src/sql/Pg/096.schema.emergency_closing.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.emergency_closing.sql
+ create mode 100644 Open-ILS/src/templates/staff/admin/local/actor/closed_dates.tt2
+ create mode 100644 Open-ILS/src/templates/staff/admin/local/actor/edit_closed_dates.tt2
+ create mode 100644 Open-ILS/web/js/ui/default/staff/admin/local/actor/closed_dates.js
+
+commit b46d4eaac2a6b023c2cde2a1642ef61cb8206548
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Fri Mar 16 09:52:50 2018 -0400
+
+ LP#1766716 Supporting functionality added to date/time picker and progress dialog
+
+ Here the date/time picker is given the ability to dynamically hide the time
+ picking component when show-time-picker is in effect. This allows an
+ interface to use the time picker based on ephemeral state information and to
+ hide it when not useful.
+
+ Additionally, the progress dialog now takes an optional label property that
+ can be passed to both open() and update(), so that textual information can
+ be provided along with the numeric and visual progress data.
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+ Signed-off-by: Bill Erickson <berickxx at gmail.com>
+
+2 1 Open-ILS/src/templates/staff/share/t_datetime.tt2
+6 0 Open-ILS/src/templates/staff/share/t_progress_dialog.tt2
+3 0 Open-ILS/web/js/ui/default/staff/services/ui.js
+
+commit 827d0277af4405a5df1ddbbf5414c35e7250d3f2
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Thu Jul 26 10:38:02 2018 -0400
+
+ Forward-port 3.0.10 upgrade script
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+214 0 Open-ILS/src/sql/Pg/version-upgrade/3.0.9-3.0.10-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.0.9-3.0.10-upgrade-db.sql
+
+commit c1fac20422420e8a11cb950741f32b2f39fa4918
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Thu Jul 12 09:24:48 2018 -0400
+
+ Stamping upgrade script
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+211 0 Open-ILS/src/sql/Pg/upgrade/1113.function.acq.rollover-by-org-tree.sql
+0 211 Open-ILS/src/sql/Pg/upgrade/XXXX.function.acq.rollover-by-org-tree.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1113.function.acq.rollover-by-org-tree.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.function.acq.rollover-by-org-tree.sql
+
+commit 60eec432440657a51e8fd0fb6622e5620750ab9f
+Author: Galen Charlton <gmc at equinoxinitiative.org>
+Date: Tue Mar 27 14:56:23 2018 -0400
+
+ LP#1746566: Enable 500, 1K, and all rows in more patron grids
+
+ This enables the allowAll option in the Patron Items Checked Out
+ and Other/Special Circulations grids.
+
+ To test
+ -------
+ [1] Apply the patch.
+ [2] Verify that the Patron Items Checked Out, Other/Special Circulations,
+ Non-Catalogued Circulations, and Holds grids now include row
+ count options 500, 100, and All.
+ [3] Verify that the Item Status grid now includes the additional
+ row count options.
+ [4] Verify that when choosing the "All" row count that you are prompted
+ to confirm loading all of the rows.
+
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+
+1 1 Open-ILS/src/templates/staff/circ/patron/t_items_out.tt2
+
+commit 6c511a7d53eefa0b543c2212f8064f60cd74dd7a
+Author: Cesar Velez <cesar.velez at equinoxinitiative.org>
+Date: Wed Feb 7 12:05:10 2018 -0500
+
+ LP#1746566: Enable 500, 1K, and ALL-the-Rows in patron grids
+
+ This adds to the Patron (non-catalogued) Items Out, Patron Holds, and
+ Item Status grids an 'allowAll' grid feature which will enable the 500,
+ 1K, and ALL (really 10K) rows/pagesize. For the ALL option a modal has
+ been wired to that the action can be confirmed, since it might be a
+ very slow operation.
+
+ Signed-off by: Cesar Velez <cesar.velez at equinoxinitiative.org>
+ Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
+
+ Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+
+2 0 Open-ILS/src/templates/staff/base_js.tt2
+1 1 Open-ILS/src/templates/staff/cat/item/t_list.tt2
+1 1 Open-ILS/src/templates/staff/circ/patron/t_holds_list.tt2
+1 1 Open-ILS/src/templates/staff/circ/patron/t_items_out.tt2
+6 1 Open-ILS/src/templates/staff/share/t_autogrid.tt2
+14 2 Open-ILS/web/js/ui/default/staff/services/grid.js
+
+commit dfc9a81480c8c5f792b5e63cd6f84c77de88eeb7
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Fri Jun 29 12:41:26 2018 -0400
+
+ Forward port 3.0.9 upgrade script
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+15 0 Open-ILS/src/sql/Pg/version-upgrade/3.0.8-3.0.9-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.0.8-3.0.9-upgrade-db.sql
+
+commit a4856e5c20a5206bc0526ab24fae17addded1920
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Mon Jun 4 09:06:55 2018 -0400
+
+ Forward port 3.0.8 upgrade script
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+131 0 Open-ILS/src/sql/Pg/version-upgrade/3.0.7-3.0.8-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.0.7-3.0.8-upgrade-db.sql
+
+commit 0de55610cb544e58e7e7c4fc8286e24177a12ae8
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Fri May 25 14:12:25 2018 -0400
+
+ Moving upgrade script into place
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+35 0 Open-ILS/src/sql/Pg/upgrade/1111.data.copy_alert_perms.sql
+0 35 Open-ILS/src/sql/Pg/upgrade/XXXX.data.copy_alert_perms.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1111.data.copy_alert_perms.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.copy_alert_perms.sql
+
+commit 6f1ab733b8828d7a18260846e14d5a008c0c931d
+Author: Mike Rylander <mrylander at gmail.com>
+Date: Fri May 25 14:11:02 2018 -0400
+
+ Stamping upgrade script
+
+ Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+1 1 Open-ILS/src/sql/Pg/upgrade/XXXX.data.copy_alert_perms.sql
+
+commit 532a09a1bd800ef3325847c8fc9d4b51d50dfac7
+Author: Jane Sandberg <sandbej at linnbenton.edu>
+Date: Sun May 13 17:01:10 2018 -0700
+
+ Docs: starting 3.0.8 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej at linnbenton.edu>
+
+78 1 docs/RELEASE_NOTES_3_0.adoc
+
+commit d8e092ac014beee99ca75224a7524d3c0f41690b
+Author: Ben Shum <ben at evergreener.net>
+Date: Wed May 2 00:45:14 2018 -0500
+
+ Revert "LP#1387722: Update MARC leader when deleting a record"
+
+ This reverts commit 7dfcdd814f60a20c1b8b4522e69c0a27c23123b5.
+
+0 32 Open-ILS/src/sql/Pg/010.schema.biblio.sql
+0 39 Open-ILS/src/sql/Pg/t/lp1387722_record_leader_updates.pg
+0 37 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql
+0 7 docs/RELEASE_NOTES_NEXT/Cataloging/leader_updated_on_delete_creation_update.adoc
+ delete mode 100644 Open-ILS/src/sql/Pg/t/lp1387722_record_leader_updates.pg
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/leader_updated_on_delete_creation_update.adoc
+
+commit 159cf3c2dd9bd465f7cab8cd44e0841bf8006343
+Author: Ben Shum <ben at evergreener.net>
+Date: Wed May 2 00:45:12 2018 -0500
+
+ Revert "LP#1387722: Stamping upgrade script"
+
+ This reverts commit f9a4f76fc4ea4cac75687eabf4208cce234b3f05.
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+0 37 Open-ILS/src/sql/Pg/upgrade/1110.schema.set_record_status_in_leader_trigger.sql
+37 0 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/1110.schema.set_record_status_in_leader_trigger.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql
+
+commit f9a4f76fc4ea4cac75687eabf4208cce234b3f05
+Author: Ben Shum <ben at evergreener.net>
+Date: Tue May 1 22:08:13 2018 -0500
+
+ LP#1387722: Stamping upgrade script
+
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+37 0 Open-ILS/src/sql/Pg/upgrade/1110.schema.set_record_status_in_leader_trigger.sql
+0 37 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/1110.schema.set_record_status_in_leader_trigger.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql
+
+commit 7dfcdd814f60a20c1b8b4522e69c0a27c23123b5
+Author: Rogan Hamby <rogan.hamby at gmail.com>
+Date: Fri Mar 23 09:51:59 2018 -0400
+
+ LP#1387722: Update MARC leader when deleting a record
+
+ When merging bib records, in the Leader, position 05 - Record Status
+ of the deleted record, the code should be changed to "d," for deleted,
+ as it is when a record is simply deleted within the client.
+
+ Rogan's squashed branch for updating record status in leader, along with
+ pgtap test and release notes.
+
+ Signed-off-by: Rogan Hamby <rogan.hamby at gmail.com>
+ Signed-off-by: Ben Shum <ben at evergreener.net>
+
+32 0 Open-ILS/src/sql/Pg/010.schema.biblio.sql
+39 0 Open-ILS/src/sql/Pg/t/lp1387722_record_leader_updates.pg
+37 0 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql
+7 0 docs/RELEASE_NOTES_NEXT/Cataloging/leader_updated_on_delete_creation_update.adoc
+ create mode 100644 Open-ILS/src/sql/Pg/t/lp1387722_record_leader_updates.pg
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Cataloging/leader_updated_on_delete_creation_update.adoc
+
+commit 3a3cbc988c5431a1875397e9470ecf8025fa9e6b
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Thu Apr 19 09:49:54 2018 -0400
+
+ Forward-port 3.0.7 upgrade script
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+5 0 Open-ILS/src/sql/Pg/version-upgrade/3.0.6-3.0.7-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.0.6-3.0.7-upgrade-db.sql
+
+commit dc62e8f18d0ea74a8a8a507a69ae287c290cd1c8
+Author: Dan Wells <dbw2 at calvin.edu>
+Date: Wed Apr 18 16:25:34 2018 -0400
+
+ Touch up release notes for 3.0.7
+
+ Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+5 0 docs/RELEASE_NOTES_3_0.adoc
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application.pm
index d750216..8d6014e 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/Application.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/Application.pm
@@ -7,7 +7,7 @@ use OpenILS::Utils::Fieldmapper;
sub ils_version {
# version format is "x-y-z", for example "2-0-0" for Evergreen 2.0.0
# For branches, format is "x-y"
- return "HEAD";
+ return "3-2-0";
}
__PACKAGE__->register_method(
diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql
index 2aade1c..a598bdc 100644
--- a/Open-ILS/src/sql/Pg/002.schema.config.sql
+++ b/Open-ILS/src/sql/Pg/002.schema.config.sql
@@ -93,6 +93,7 @@ CREATE TRIGGER no_overlapping_deps
FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates');
INSERT INTO config.upgrade_log (version, applied_to) VALUES ('1133', :eg_version); -- berick/kmlussier
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('3.2.0', :eg_version);
CREATE TABLE config.bib_source (
id SERIAL PRIMARY KEY,
diff --git a/Open-ILS/src/sql/Pg/version-upgrade/3.1.5-3.2.0-upgrade-db.sql b/Open-ILS/src/sql/Pg/version-upgrade/3.1.5-3.2.0-upgrade-db.sql
new file mode 100644
index 0000000..bc276b0
--- /dev/null
+++ b/Open-ILS/src/sql/Pg/version-upgrade/3.1.5-3.2.0-upgrade-db.sql
@@ -0,0 +1,4904 @@
+--Upgrade Script for 3.1.5 to 3.2.0
+\set eg_version '''3.2.0'''
+BEGIN;
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('3.2.0', :eg_version);
+
+SELECT evergreen.upgrade_deps_block_check('1115', :eg_version);
+
+INSERT INTO permission.perm_list (id,code,description) VALUES ( 607, 'EMERGENCY_CLOSING', 'Create and manage Emergency Closings');
+
+INSERT INTO action_trigger.hook (key,core_type,description) VALUES ('checkout.due.emergency_closing','aecc','Circulation due date was adjusted by the Emergency Closing handler');
+INSERT INTO action_trigger.hook (key,core_type,description) VALUES ('hold.shelf_expire.emergency_closing','aech','Hold shelf expire time was adjusted by the Emergency Closing handler');
+INSERT INTO action_trigger.hook (key,core_type,description) VALUES ('booking.due.emergency_closing','aecr','Booking reservation return date was adjusted by the Emergency Closing handler');
+
+CREATE TABLE action.emergency_closing (
+ id SERIAL PRIMARY KEY,
+ creator INT NOT NULL REFERENCES actor.usr (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ create_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
+ process_start_time TIMESTAMPTZ,
+ process_end_time TIMESTAMPTZ,
+ last_update_time TIMESTAMPTZ
+);
+
+ALTER TABLE actor.org_unit_closed
+ ADD COLUMN emergency_closing INT
+ REFERENCES action.emergency_closing (id) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED;
+
+CREATE TABLE action.emergency_closing_circulation (
+ id BIGSERIAL PRIMARY KEY,
+ emergency_closing INT NOT NULL REFERENCES action.emergency_closing (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ circulation INT NOT NULL REFERENCES action.circulation (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ original_due_date TIMESTAMPTZ,
+ process_time TIMESTAMPTZ
+);
+CREATE INDEX emergency_closing_circulation_emergency_closing_idx ON action.emergency_closing_circulation (emergency_closing);
+CREATE INDEX emergency_closing_circulation_circulation_idx ON action.emergency_closing_circulation (circulation);
+
+CREATE TABLE action.emergency_closing_reservation (
+ id BIGSERIAL PRIMARY KEY,
+ emergency_closing INT NOT NULL REFERENCES action.emergency_closing (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ reservation INT NOT NULL REFERENCES booking.reservation (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ original_end_time TIMESTAMPTZ,
+ process_time TIMESTAMPTZ
+);
+CREATE INDEX emergency_closing_reservation_emergency_closing_idx ON action.emergency_closing_reservation (emergency_closing);
+CREATE INDEX emergency_closing_reservation_reservation_idx ON action.emergency_closing_reservation (reservation);
+
+CREATE TABLE action.emergency_closing_hold (
+ id BIGSERIAL PRIMARY KEY,
+ emergency_closing INT NOT NULL REFERENCES action.emergency_closing (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ hold INT NOT NULL REFERENCES action.hold_request (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ original_shelf_expire_time TIMESTAMPTZ,
+ process_time TIMESTAMPTZ
+);
+CREATE INDEX emergency_closing_hold_emergency_closing_idx ON action.emergency_closing_hold (emergency_closing);
+CREATE INDEX emergency_closing_hold_hold_idx ON action.emergency_closing_hold (hold);
+
+CREATE OR REPLACE VIEW action.emergency_closing_status AS
+ SELECT e.*,
+ COALESCE(c.count, 0) AS circulations,
+ COALESCE(c.completed, 0) AS circulations_complete,
+ COALESCE(b.count, 0) AS reservations,
+ COALESCE(b.completed, 0) AS reservations_complete,
+ COALESCE(h.count, 0) AS holds,
+ COALESCE(h.completed, 0) AS holds_complete
+ FROM action.emergency_closing e
+ LEFT JOIN (SELECT emergency_closing, count(*) count, SUM((process_time IS NOT NULL)::INT) completed FROM action.emergency_closing_circulation GROUP BY 1) c ON (c.emergency_closing = e.id)
+ LEFT JOIN (SELECT emergency_closing, count(*) count, SUM((process_time IS NOT NULL)::INT) completed FROM action.emergency_closing_reservation GROUP BY 1) b ON (b.emergency_closing = e.id)
+ LEFT JOIN (SELECT emergency_closing, count(*) count, SUM((process_time IS NOT NULL)::INT) completed FROM action.emergency_closing_hold GROUP BY 1) h ON (h.emergency_closing = e.id)
+;
+
+CREATE OR REPLACE FUNCTION evergreen.find_next_open_time ( circ_lib INT, initial TIMESTAMPTZ, hourly BOOL DEFAULT FALSE, initial_time TIME DEFAULT NULL, dow_count INT DEFAULT 0 )
+ RETURNS TIMESTAMPTZ AS $$
+DECLARE
+ day_number INT;
+ plus_days INT;
+ final_time TEXT;
+ time_adjusted BOOL;
+ hoo_open TIME WITHOUT TIME ZONE;
+ hoo_close TIME WITHOUT TIME ZONE;
+ adjacent actor.org_unit_closed%ROWTYPE;
+ breakout INT := 0;
+BEGIN
+
+ IF dow_count > 6 THEN
+ RETURN initial;
+ END IF;
+
+ IF initial_time IS NULL THEN
+ initial_time := initial::TIME;
+ END IF;
+
+ final_time := (initial + '1 second'::INTERVAL)::TEXT;
+ LOOP
+ breakout := breakout + 1;
+
+ time_adjusted := FALSE;
+
+ IF dow_count > 0 THEN -- we're recursing, so check for HOO closing
+ day_number := EXTRACT(ISODOW FROM final_time::TIMESTAMPTZ) - 1;
+ plus_days := 0;
+ FOR i IN 1..7 LOOP
+ EXECUTE 'SELECT dow_' || day_number || '_open, dow_' || day_number || '_close FROM actor.hours_of_operation WHERE id = $1'
+ INTO hoo_open, hoo_close
+ USING circ_lib;
+
+ -- RAISE NOTICE 'initial time: %; dow: %; close: %',initial_time,day_number,hoo_close;
+
+ IF hoo_close = '00:00:00' THEN -- bah ... I guess we'll check the next day
+ day_number := (day_number + 1) % 7;
+ plus_days := plus_days + 1;
+ time_adjusted := TRUE;
+ CONTINUE;
+ END IF;
+
+ IF hoo_close IS NULL THEN -- no hours of operation ... assume no closing?
+ hoo_close := '23:59:59';
+ END IF;
+
+ EXIT;
+ END LOOP;
+
+ final_time := DATE(final_time::TIMESTAMPTZ + (plus_days || ' days')::INTERVAL)::TEXT;
+ IF hoo_close <> '00:00:00' AND hourly THEN -- Not a day-granular circ
+ final_time := final_time||' '|| hoo_close;
+ ELSE
+ final_time := final_time||' 23:59:59';
+ END IF;
+ END IF;
+
+ -- Loop through other closings
+ LOOP
+ SELECT * INTO adjacent FROM actor.org_unit_closed WHERE org_unit = circ_lib AND final_time::TIMESTAMPTZ between close_start AND close_end;
+ EXIT WHEN adjacent.id IS NULL;
+ time_adjusted := TRUE;
+ -- RAISE NOTICE 'recursing for closings with final_time: %',final_time;
+ final_time := evergreen.find_next_open_time(circ_lib, adjacent.close_end::TIMESTAMPTZ, hourly, initial_time, dow_count + 1)::TEXT;
+ END LOOP;
+
+ EXIT WHEN breakout > 100;
+ EXIT WHEN NOT time_adjusted;
+
+ END LOOP;
+
+ RETURN final_time;
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE TYPE action.emergency_closing_stage_1_count AS (circulations INT, reservations INT, holds INT);
+CREATE OR REPLACE FUNCTION action.emergency_closing_stage_1 ( e_closing INT )
+ RETURNS SETOF action.emergency_closing_stage_1_count AS $$
+DECLARE
+ tmp INT;
+ touched action.emergency_closing_stage_1_count%ROWTYPE;
+BEGIN
+ -- First, gather circs
+ INSERT INTO action.emergency_closing_circulation (emergency_closing, circulation)
+ SELECT e_closing,
+ circ.id
+ FROM actor.org_unit_closed closing
+ JOIN action.emergency_closing ec ON (closing.emergency_closing = ec.id AND ec.id = e_closing)
+ JOIN action.circulation circ ON (
+ circ.circ_lib = closing.org_unit
+ AND circ.due_date BETWEEN closing.close_start AND (closing.close_end + '1s'::INTERVAL)
+ AND circ.xact_finish IS NULL
+ )
+ WHERE NOT EXISTS (SELECT 1 FROM action.emergency_closing_circulation t WHERE t.emergency_closing = e_closing AND t.circulation = circ.id);
+
+ GET DIAGNOSTICS tmp = ROW_COUNT;
+ touched.circulations := tmp;
+
+ INSERT INTO action.emergency_closing_reservation (emergency_closing, reservation)
+ SELECT e_closing,
+ res.id
+ FROM actor.org_unit_closed closing
+ JOIN action.emergency_closing ec ON (closing.emergency_closing = ec.id AND ec.id = e_closing)
+ JOIN booking.reservation res ON (
+ res.pickup_lib = closing.org_unit
+ AND res.end_time BETWEEN closing.close_start AND (closing.close_end + '1s'::INTERVAL)
+ )
+ WHERE NOT EXISTS (SELECT 1 FROM action.emergency_closing_reservation t WHERE t.emergency_closing = e_closing AND t.reservation = res.id);
+
+ GET DIAGNOSTICS tmp = ROW_COUNT;
+ touched.reservations := tmp;
+
+ INSERT INTO action.emergency_closing_hold (emergency_closing, hold)
+ SELECT e_closing,
+ hold.id
+ FROM actor.org_unit_closed closing
+ JOIN action.emergency_closing ec ON (closing.emergency_closing = ec.id AND ec.id = e_closing)
+ JOIN action.hold_request hold ON (
+ pickup_lib = closing.org_unit
+ AND hold.shelf_expire_time BETWEEN closing.close_start AND (closing.close_end + '1s'::INTERVAL)
+ AND hold.fulfillment_time IS NULL
+ AND hold.cancel_time IS NULL
+ )
+ WHERE NOT EXISTS (SELECT 1 FROM action.emergency_closing_hold t WHERE t.emergency_closing = e_closing AND t.hold = hold.id);
+
+ GET DIAGNOSTICS tmp = ROW_COUNT;
+ touched.holds := tmp;
+
+ UPDATE action.emergency_closing
+ SET process_start_time = NOW(),
+ last_update_time = NOW()
+ WHERE id = e_closing;
+
+ RETURN NEXT touched;
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE OR REPLACE FUNCTION action.emergency_closing_stage_2_hold ( hold_closing_entry INT )
+ RETURNS BOOL AS $$
+DECLARE
+ hold action.hold_request%ROWTYPE;
+ e_closing action.emergency_closing%ROWTYPE;
+ e_c_hold action.emergency_closing_hold%ROWTYPE;
+ closing actor.org_unit_closed%ROWTYPE;
+ day_number INT;
+ hoo_close TIME WITHOUT TIME ZONE;
+ plus_days INT;
+BEGIN
+ -- Gather objects involved
+ SELECT * INTO e_c_hold
+ FROM action.emergency_closing_hold
+ WHERE id = hold_closing_entry;
+
+ IF e_c_hold.process_time IS NOT NULL THEN
+ -- Already processed ... moving on
+ RETURN FALSE;
+ END IF;
+
+ SELECT * INTO e_closing
+ FROM action.emergency_closing
+ WHERE id = e_c_hold.emergency_closing;
+
+ IF e_closing.process_start_time IS NULL THEN
+ -- Huh... that's odd. And wrong.
+ RETURN FALSE;
+ END IF;
+
+ SELECT * INTO closing
+ FROM actor.org_unit_closed
+ WHERE emergency_closing = e_closing.id;
+
+ SELECT * INTO hold
+ FROM action.hold_request h
+ WHERE id = e_c_hold.hold;
+
+ -- Record the processing
+ UPDATE action.emergency_closing_hold
+ SET original_shelf_expire_time = hold.shelf_expire_time,
+ process_time = NOW()
+ WHERE id = hold_closing_entry;
+
+ UPDATE action.emergency_closing
+ SET last_update_time = NOW()
+ WHERE id = e_closing.id;
+
+ UPDATE action.hold_request
+ SET shelf_expire_time = evergreen.find_next_open_time(closing.org_unit, hold.shelf_expire_time, TRUE)
+ WHERE id = hold.id;
+
+ RETURN TRUE;
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE OR REPLACE FUNCTION action.emergency_closing_stage_2_circ ( circ_closing_entry INT )
+ RETURNS BOOL AS $$
+DECLARE
+ circ action.circulation%ROWTYPE;
+ e_closing action.emergency_closing%ROWTYPE;
+ e_c_circ action.emergency_closing_circulation%ROWTYPE;
+ closing actor.org_unit_closed%ROWTYPE;
+ adjacent actor.org_unit_closed%ROWTYPE;
+ bill money.billing%ROWTYPE;
+ last_bill money.billing%ROWTYPE;
+ day_number INT;
+ hoo_close TIME WITHOUT TIME ZONE;
+ plus_days INT;
+ avoid_negative BOOL;
+ extend_grace BOOL;
+ new_due_date TEXT;
+BEGIN
+ -- Gather objects involved
+ SELECT * INTO e_c_circ
+ FROM action.emergency_closing_circulation
+ WHERE id = circ_closing_entry;
+
+ IF e_c_circ.process_time IS NOT NULL THEN
+ -- Already processed ... moving on
+ RETURN FALSE;
+ END IF;
+
+ SELECT * INTO e_closing
+ FROM action.emergency_closing
+ WHERE id = e_c_circ.emergency_closing;
+
+ IF e_closing.process_start_time IS NULL THEN
+ -- Huh... that's odd. And wrong.
+ RETURN FALSE;
+ END IF;
+
+ SELECT * INTO closing
+ FROM actor.org_unit_closed
+ WHERE emergency_closing = e_closing.id;
+
+ SELECT * INTO circ
+ FROM action.circulation
+ WHERE id = e_c_circ.circulation;
+
+ -- Record the processing
+ UPDATE action.emergency_closing_circulation
+ SET original_due_date = circ.due_date,
+ process_time = NOW()
+ WHERE id = circ_closing_entry;
+
+ UPDATE action.emergency_closing
+ SET last_update_time = NOW()
+ WHERE id = e_closing.id;
+
+ SELECT value::BOOL INTO avoid_negative FROM actor.org_unit_ancestor_setting('bill.prohibit_negative_balance_on_overdues', circ.circ_lib);
+ SELECT value::BOOL INTO extend_grace FROM actor.org_unit_ancestor_setting('circ.grace.extend', circ.circ_lib);
+
+ new_due_date := evergreen.find_next_open_time( closing.org_unit, circ.due_date, EXTRACT(EPOCH FROM circ.duration)::INT % 86400 > 0 )::TEXT;
+ UPDATE action.circulation SET due_date = new_due_date::TIMESTAMPTZ WHERE id = circ.id;
+
+ -- Now, see if we need to get rid of some fines
+ SELECT * INTO last_bill
+ FROM money.billing b
+ WHERE b.xact = circ.id
+ AND NOT b.voided
+ AND b.btype = 1
+ ORDER BY billing_ts DESC
+ LIMIT 1;
+
+ FOR bill IN
+ SELECT *
+ FROM money.billing b
+ WHERE b.xact = circ.id
+ AND b.btype = 1
+ AND NOT b.voided
+ AND (
+ b.billing_ts BETWEEN closing.close_start AND new_due_date::TIMESTAMPTZ
+ OR (extend_grace AND last_bill.billing_ts <= new_due_date::TIMESTAMPTZ + circ.grace_period)
+ )
+ AND NOT EXISTS (SELECT 1 FROM money.account_adjustment a WHERE a.billing = b.id)
+ ORDER BY billing_ts
+ LOOP
+ IF avoid_negative THEN
+ PERFORM FROM money.materialized_billable_xact_summary WHERE id = circ.id AND balanced_owd < bill.amount;
+ EXIT WHEN FOUND; -- We can't go negative, and voiding this bill would do that...
+ END IF;
+
+ UPDATE money.billing
+ SET voided = TRUE,
+ void_time = NOW(),
+ note = COALESCE(note,'') || ' :: Voided by emergency closing handler'
+ WHERE id = bill.id;
+ END LOOP;
+
+ RETURN TRUE;
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE OR REPLACE FUNCTION action.emergency_closing_stage_2_reservation ( res_closing_entry INT )
+ RETURNS BOOL AS $$
+DECLARE
+ res booking.reservation%ROWTYPE;
+ e_closing action.emergency_closing%ROWTYPE;
+ e_c_res action.emergency_closing_reservation%ROWTYPE;
+ closing actor.org_unit_closed%ROWTYPE;
+ adjacent actor.org_unit_closed%ROWTYPE;
+ bill money.billing%ROWTYPE;
+ day_number INT;
+ hoo_close TIME WITHOUT TIME ZONE;
+ plus_days INT;
+ avoid_negative BOOL;
+ new_due_date TEXT;
+BEGIN
+ -- Gather objects involved
+ SELECT * INTO e_c_res
+ FROM action.emergency_closing_reservation
+ WHERE id = res_closing_entry;
+
+ IF e_c_res.process_time IS NOT NULL THEN
+ -- Already processed ... moving on
+ RETURN FALSE;
+ END IF;
+
+ SELECT * INTO e_closing
+ FROM action.emergency_closing
+ WHERE id = e_c_res.emergency_closing;
+
+ IF e_closing.process_start_time IS NULL THEN
+ -- Huh... that's odd. And wrong.
+ RETURN FALSE;
+ END IF;
+
+ SELECT * INTO closing
+ FROM actor.org_unit_closed
+ WHERE emergency_closing = e_closing.id;
+
+ SELECT * INTO res
+ FROM booking.reservation
+ WHERE id = e_c_res.reservation;
+
+ IF res.pickup_lib IS NULL THEN -- Need to be far enough along to have a pickup lib
+ RETURN FALSE;
+ END IF;
+
+ -- Record the processing
+ UPDATE action.emergency_closing_reservation
+ SET original_end_time = res.end_time,
+ process_time = NOW()
+ WHERE id = res_closing_entry;
+
+ UPDATE action.emergency_closing
+ SET last_update_time = NOW()
+ WHERE id = e_closing.id;
+
+ SELECT value::BOOL INTO avoid_negative FROM actor.org_unit_ancestor_setting('bill.prohibit_negative_balance_on_overdues', res.pickup_lib);
+
+ new_due_date := evergreen.find_next_open_time( closing.org_unit, res.end_time, EXTRACT(EPOCH FROM res.booking_interval)::INT % 86400 > 0 )::TEXT;
+ UPDATE booking.reservation SET end_time = new_due_date::TIMESTAMPTZ WHERE id = res.id;
+
+ -- Now, see if we need to get rid of some fines
+ FOR bill IN
+ SELECT *
+ FROM money.billing b
+ WHERE b.xact = res.id
+ AND b.btype = 1
+ AND NOT b.voided
+ AND b.billing_ts BETWEEN closing.close_start AND new_due_date::TIMESTAMPTZ
+ AND NOT EXISTS (SELECT 1 FROM money.account_adjustment a WHERE a.billing = b.id)
+ LOOP
+ IF avoid_negative THEN
+ PERFORM FROM money.materialized_billable_xact_summary WHERE id = res.id AND balanced_owd < bill.amount;
+ EXIT WHEN FOUND; -- We can't go negative, and voiding this bill would do that...
+ END IF;
+
+ UPDATE money.billing
+ SET voided = TRUE,
+ void_time = NOW(),
+ note = COALESCE(note,'') || ' :: Voided by emergency closing handler'
+ WHERE id = bill.id;
+ END LOOP;
+
+ RETURN TRUE;
+END;
+$$ LANGUAGE PLPGSQL;
+
+
+
+CREATE TYPE actor.cascade_setting_summary AS (
+ name TEXT,
+ value JSON,
+ has_org_setting BOOLEAN,
+ has_user_setting BOOLEAN,
+ has_workstation_setting BOOLEAN
+);
+
+SELECT evergreen.upgrade_deps_block_check('1116', :eg_version);
+
+CREATE TABLE config.workstation_setting_type (
+ name TEXT PRIMARY KEY,
+ label TEXT UNIQUE NOT NULL,
+ grp TEXT REFERENCES config.settings_group (name),
+ description TEXT,
+ datatype TEXT NOT NULL DEFAULT 'string',
+ fm_class TEXT,
+ --
+ -- define valid datatypes
+ --
+ CONSTRAINT cwst_valid_datatype CHECK ( datatype IN
+ ( 'bool', 'integer', 'float', 'currency', 'interval',
+ 'date', 'string', 'object', 'array', 'link' ) ),
+ --
+ -- fm_class is meaningful only for 'link' datatype
+ --
+ CONSTRAINT cwst_no_empty_link CHECK
+ ( ( datatype = 'link' AND fm_class IS NOT NULL ) OR
+ ( datatype <> 'link' AND fm_class IS NULL ) )
+);
+
+CREATE TABLE actor.workstation_setting (
+ id SERIAL PRIMARY KEY,
+ workstation INT NOT NULL REFERENCES actor.workstation (id)
+ ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ name TEXT NOT NULL REFERENCES config.workstation_setting_type (name)
+ ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED,
+ value JSON NOT NULL
+);
+
+
+CREATE INDEX actor_workstation_setting_workstation_idx
+ ON actor.workstation_setting (workstation);
+
+CREATE OR REPLACE FUNCTION config.setting_is_user_or_ws()
+RETURNS TRIGGER AS $FUNC$
+BEGIN
+
+ IF TG_TABLE_NAME = 'usr_setting_type' THEN
+ PERFORM TRUE FROM config.workstation_setting_type cwst
+ WHERE cwst.name = NEW.name;
+ IF NOT FOUND THEN
+ RETURN NULL;
+ END IF;
+ END IF;
+
+ IF TG_TABLE_NAME = 'workstation_setting_type' THEN
+ PERFORM TRUE FROM config.usr_setting_type cust
+ WHERE cust.name = NEW.name;
+ IF NOT FOUND THEN
+ RETURN NULL;
+ END IF;
+ END IF;
+
+ RAISE EXCEPTION
+ '% Cannot be used as both a user setting and a workstation setting.',
+ NEW.name;
+END;
+$FUNC$ LANGUAGE PLPGSQL STABLE;
+
+CREATE CONSTRAINT TRIGGER check_setting_is_usr_or_ws
+ AFTER INSERT OR UPDATE ON config.usr_setting_type
+ FOR EACH ROW EXECUTE PROCEDURE config.setting_is_user_or_ws();
+
+CREATE CONSTRAINT TRIGGER check_setting_is_usr_or_ws
+ AFTER INSERT OR UPDATE ON config.workstation_setting_type
+ FOR EACH ROW EXECUTE PROCEDURE config.setting_is_user_or_ws();
+
+CREATE OR REPLACE FUNCTION actor.get_cascade_setting(
+ setting_name TEXT, org_id INT, user_id INT, workstation_id INT)
+ RETURNS actor.cascade_setting_summary AS
+$FUNC$
+DECLARE
+ setting_value JSON;
+ summary actor.cascade_setting_summary;
+ org_setting_type config.org_unit_setting_type%ROWTYPE;
+BEGIN
+
+ summary.name := setting_name;
+
+ -- Collect the org setting type status first in case we exit early.
+ -- The existance of an org setting type is not considered
+ -- privileged information.
+ SELECT INTO org_setting_type *
+ FROM config.org_unit_setting_type WHERE name = setting_name;
+ IF FOUND THEN
+ summary.has_org_setting := TRUE;
+ ELSE
+ summary.has_org_setting := FALSE;
+ END IF;
+
+ -- User and workstation settings have the same priority.
+ -- Start with user settings since that's the simplest code path.
+ -- The workstation_id is ignored if no user_id is provided.
+ IF user_id IS NOT NULL THEN
+
+ SELECT INTO summary.value value FROM actor.usr_setting
+ WHERE usr = user_id AND name = setting_name;
+
+ IF FOUND THEN
+ -- if we have a value, we have a setting type
+ summary.has_user_setting := TRUE;
+
+ IF workstation_id IS NOT NULL THEN
+ -- Only inform the caller about the workstation
+ -- setting type disposition when a workstation id is
+ -- provided. Otherwise, it's NULL to indicate UNKNOWN.
+ summary.has_workstation_setting := FALSE;
+ END IF;
+
+ RETURN summary;
+ END IF;
+
+ -- no user setting value, but a setting type may exist
+ SELECT INTO summary.has_user_setting EXISTS (
+ SELECT TRUE FROM config.usr_setting_type
+ WHERE name = setting_name
+ );
+
+ IF workstation_id IS NOT NULL THEN
+
+ IF NOT summary.has_user_setting THEN
+ -- A workstation setting type may only exist when a user
+ -- setting type does not.
+
+ SELECT INTO summary.value value
+ FROM actor.workstation_setting
+ WHERE workstation = workstation_id AND name = setting_name;
+
+ IF FOUND THEN
+ -- if we have a value, we have a setting type
+ summary.has_workstation_setting := TRUE;
+ RETURN summary;
+ END IF;
+
+ -- no value, but a setting type may exist
+ SELECT INTO summary.has_workstation_setting EXISTS (
+ SELECT TRUE FROM config.workstation_setting_type
+ WHERE name = setting_name
+ );
+ END IF;
+
+ -- Finally make use of the workstation to determine the org
+ -- unit if none is provided.
+ IF org_id IS NULL AND summary.has_org_setting THEN
+ SELECT INTO org_id owning_lib
+ FROM actor.workstation WHERE id = workstation_id;
+ END IF;
+ END IF;
+ END IF;
+
+ -- Some org unit settings are protected by a view permission.
+ -- First see if we have any data that needs protecting, then
+ -- check the permission if needed.
+
+ IF NOT summary.has_org_setting THEN
+ RETURN summary;
+ END IF;
+
+ -- avoid putting the value into the summary until we confirm
+ -- the value should be visible to the caller.
+ SELECT INTO setting_value value
+ FROM actor.org_unit_ancestor_setting(setting_name, org_id);
+
+ IF NOT FOUND THEN
+ -- No value found -- perm check is irrelevant.
+ RETURN summary;
+ END IF;
+
+ IF org_setting_type.view_perm IS NOT NULL THEN
+
+ IF user_id IS NULL THEN
+ RAISE NOTICE 'Perm check required but no user_id provided';
+ RETURN summary;
+ END IF;
+
+ IF NOT permission.usr_has_perm(
+ user_id, (SELECT code FROM permission.perm_list
+ WHERE id = org_setting_type.view_perm), org_id)
+ THEN
+ RAISE NOTICE 'Perm check failed for user % on %',
+ user_id, org_setting_type.view_perm;
+ RETURN summary;
+ END IF;
+ END IF;
+
+ -- Perm check succeeded or was not necessary.
+ summary.value := setting_value;
+ RETURN summary;
+END;
+$FUNC$ LANGUAGE PLPGSQL;
+
+
+CREATE OR REPLACE FUNCTION actor.get_cascade_setting_batch(
+ setting_names TEXT[], org_id INT, user_id INT, workstation_id INT)
+ RETURNS SETOF actor.cascade_setting_summary AS
+$FUNC$
+-- Returns a row per setting matching the setting name order. If no
+-- value is applied, NULL is returned to retain name-response ordering.
+DECLARE
+ setting_name TEXT;
+ summary actor.cascade_setting_summary;
+BEGIN
+ FOREACH setting_name IN ARRAY setting_names LOOP
+ SELECT INTO summary * FROM actor.get_cascade_setting(
+ setting_Name, org_id, user_id, workstation_id);
+ RETURN NEXT summary;
+ END LOOP;
+END;
+$FUNC$ LANGUAGE PLPGSQL;
+
+
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1117', :eg_version);
+
+INSERT INTO permission.perm_list (id, code, description) VALUES
+ (608, 'APPLY_WORKSTATION_SETTING',
+ oils_i18n_gettext(608, 'APPLY_WORKSTATION_SETTING', 'ppl', 'description'));
+
+INSERT INTO config.workstation_setting_type (name, grp, datatype, label)
+VALUES (
+ 'eg.circ.checkin.no_precat_alert', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.checkin.no_precat_alert',
+ 'Checkin: Ignore Precataloged Items',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.checkin.noop', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.checkin.noop',
+ 'Checkin: Suppress Holds and Transits',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.checkin.void_overdues', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.checkin.void_overdues',
+ 'Checkin: Amnesty Mode',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.checkin.auto_print_holds_transits', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.checkin.auto_print_holds_transits',
+ 'Checkin: Auto-Print Holds and Transits',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.checkin.clear_expired', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.checkin.clear_expired',
+ 'Checkin: Clear Holds Shelf',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.checkin.retarget_holds', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.checkin.retarget_holds',
+ 'Checkin: Retarget Local Holds',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.checkin.retarget_holds_all', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.checkin.retarget_holds_all',
+ 'Checkin: Retarget All Statuses',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.checkin.hold_as_transit', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.checkin.hold_as_transit',
+ 'Checkin: Capture Local Holds as Transits',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.checkin.manual_float', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.checkin.manual_float',
+ 'Checkin: Manual Floating Active',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.patron.summary.collapse', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.patron.summary.collapse',
+ 'Collaps Patron Summary Display',
+ 'cwst', 'label'
+ )
+), (
+ 'circ.bills.receiptonpay', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'circ.bills.receiptonpay',
+ 'Print Receipt On Payment',
+ 'cwst', 'label'
+ )
+), (
+ 'circ.renew.strict_barcode', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'circ.renew.strict_barcode',
+ 'Renew: Strict Barcode',
+ 'cwst', 'label'
+ )
+), (
+ 'circ.checkin.strict_barcode', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'circ.checkin.strict_barcode',
+ 'Checkin: Strict Barcode',
+ 'cwst', 'label'
+ )
+), (
+ 'circ.checkout.strict_barcode', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'circ.checkout.strict_barcode',
+ 'Checkout: Strict Barcode',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.holdings_show_copies', 'cat', 'bool',
+ oils_i18n_gettext(
+ 'cat.holdings_show_copies',
+ 'Holdings View Show Copies',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.holdings_show_empty', 'cat', 'bool',
+ oils_i18n_gettext(
+ 'cat.holdings_show_empty',
+ 'Holdings View Show Empty Volumes',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.holdings_show_empty_org', 'cat', 'bool',
+ oils_i18n_gettext(
+ 'cat.holdings_show_empty_org',
+ 'Holdings View Show Empty Orgs',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.holdings_show_vols', 'cat', 'bool',
+ oils_i18n_gettext(
+ 'cat.holdings_show_vols',
+ 'Holdings View Show Volumes',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.copy.defaults', 'cat', 'object',
+ oils_i18n_gettext(
+ 'cat.copy.defaults',
+ 'Copy Edit Default Values',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.printlabels.default_template', 'cat', 'string',
+ oils_i18n_gettext(
+ 'cat.printlabels.default_template',
+ 'Print Label Default Template',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.printlabels.templates', 'cat', 'object',
+ oils_i18n_gettext(
+ 'cat.printlabels.templates',
+ 'Print Label Templates',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.patron.search.include_inactive', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.patron.search.include_inactive',
+ 'Patron Search Include Inactive',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.circ.patron.search.show_extras', 'circ', 'bool',
+ oils_i18n_gettext(
+ 'eg.circ.patron.search.show_extras',
+ 'Patron Search Show Extra Search Options',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.checkin.checkin', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.checkin.checkin',
+ 'Grid Config: circ.checkin.checkin',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.checkin.capture', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.checkin.capture',
+ 'Grid Config: circ.checkin.capture',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.server.config.copy_tag_type', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.server.config.copy_tag_type',
+ 'Grid Config: admin.server.config.copy_tag_type',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.server.config.metabib_field_virtual_map.grid', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.server.config.metabib_field_virtual_map.grid',
+ 'Grid Config: admin.server.config.metabib_field_virtual_map.grid',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.server.config.metabib_field.grid', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.server.config.metabib_field.grid',
+ 'Grid Config: admin.server.config.metabib_field.grid',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.server.config.marc_field', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.server.config.marc_field',
+ 'Grid Config: admin.server.config.marc_field',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.server.asset.copy_tag', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.server.asset.copy_tag',
+ 'Grid Config: admin.server.asset.copy_tag',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.local.circ.neg_balance_users', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.local.circ.neg_balance_users',
+ 'Grid Config: admin.local.circ.neg_balance_users',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.local.rating.badge', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.local.rating.badge',
+ 'Grid Config: admin.local.rating.badge',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.workstation.work_log', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.workstation.work_log',
+ 'Grid Config: admin.workstation.work_log',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.workstation.patron_log', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.workstation.patron_log',
+ 'Grid Config: admin.workstation.patron_log',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.serials.pattern_template', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.admin.serials.pattern_template',
+ 'Grid Config: admin.serials.pattern_template',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.serials.copy_templates', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.serials.copy_templates',
+ 'Grid Config: serials.copy_templates',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.record_overlay.holdings', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.record_overlay.holdings',
+ 'Grid Config: cat.record_overlay.holdings',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.bucket.record.search', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.bucket.record.search',
+ 'Grid Config: cat.bucket.record.search',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.bucket.record.view', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.bucket.record.view',
+ 'Grid Config: cat.bucket.record.view',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.bucket.record.pending', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.bucket.record.pending',
+ 'Grid Config: cat.bucket.record.pending',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.bucket.copy.view', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.bucket.copy.view',
+ 'Grid Config: cat.bucket.copy.view',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.bucket.copy.pending', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.bucket.copy.pending',
+ 'Grid Config: cat.bucket.copy.pending',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.items', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.items',
+ 'Grid Config: cat.items',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.volcopy.copies', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.volcopy.copies',
+ 'Grid Config: cat.volcopy.copies',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.volcopy.copies.complete', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.volcopy.copies.complete',
+ 'Grid Config: cat.volcopy.copies.complete',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.peer_bibs', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.peer_bibs',
+ 'Grid Config: cat.peer_bibs',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.catalog.holds', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.catalog.holds',
+ 'Grid Config: cat.catalog.holds',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.holdings', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.holdings',
+ 'Grid Config: cat.holdings',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.z3950_results', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.z3950_results',
+ 'Grid Config: cat.z3950_results',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.holds.shelf', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.holds.shelf',
+ 'Grid Config: circ.holds.shelf',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.holds.pull', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.holds.pull',
+ 'Grid Config: circ.holds.pull',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.in_house_use', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.in_house_use',
+ 'Grid Config: circ.in_house_use',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.renew', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.renew',
+ 'Grid Config: circ.renew',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.transits.list', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.transits.list',
+ 'Grid Config: circ.transits.list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.patron.holds', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.patron.holds',
+ 'Grid Config: circ.patron.holds',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.pending_patrons.list', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.pending_patrons.list',
+ 'Grid Config: circ.pending_patrons.list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.patron.items_out.noncat', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.patron.items_out.noncat',
+ 'Grid Config: circ.patron.items_out.noncat',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.patron.items_out', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.patron.items_out',
+ 'Grid Config: circ.patron.items_out',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.patron.billhistory_payments', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.patron.billhistory_payments',
+ 'Grid Config: circ.patron.billhistory_payments',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.user.bucket.view', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.user.bucket.view',
+ 'Grid Config: user.bucket.view',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.user.bucket.pending', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.user.bucket.pending',
+ 'Grid Config: user.bucket.pending',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.patron.staff_messages', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.patron.staff_messages',
+ 'Grid Config: circ.patron.staff_messages',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.patron.archived_messages', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.patron.archived_messages',
+ 'Grid Config: circ.patron.archived_messages',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.patron.bills', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.patron.bills',
+ 'Grid Config: circ.patron.bills',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.patron.checkout', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.patron.checkout',
+ 'Grid Config: circ.patron.checkout',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.serials.mfhd_grid', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.serials.mfhd_grid',
+ 'Grid Config: serials.mfhd_grid',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.serials.view_item_grid', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.serials.view_item_grid',
+ 'Grid Config: serials.view_item_grid',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.serials.dist_stream_grid', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.serials.dist_stream_grid',
+ 'Grid Config: serials.dist_stream_grid',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.circ.patron.search', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.circ.patron.search',
+ 'Grid Config: circ.patron.search',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.cat.record.summary.collapse', 'gui', 'bool',
+ oils_i18n_gettext(
+ 'eg.cat.record.summary.collapse',
+ 'Collapse Bib Record Summary',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.marcedit.flateditor', 'gui', 'bool',
+ oils_i18n_gettext(
+ 'cat.marcedit.flateditor',
+ 'Use Flat MARC Editor',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.marcedit.stack_subfields', 'gui', 'bool',
+ oils_i18n_gettext(
+ 'cat.marcedit.stack_subfields',
+ 'MARC Editor Stack Subfields',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.offline.print_receipt', 'gui', 'bool',
+ oils_i18n_gettext(
+ 'eg.offline.print_receipt',
+ 'Offline Print Receipt',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.offline.strict_barcode', 'gui', 'bool',
+ oils_i18n_gettext(
+ 'eg.offline.strict_barcode',
+ 'Offline Use Strict Barcode',
+ 'cwst', 'label'
+ )
+), (
+ 'cat.default_bib_marc_template', 'gui', 'string',
+ oils_i18n_gettext(
+ 'cat.default_bib_marc_template',
+ 'Default MARC Template',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.audio.disable', 'gui', 'bool',
+ oils_i18n_gettext(
+ 'eg.audio.disable',
+ 'Disable Staff Client Notification Audio',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.search.adv_pane', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.search.adv_pane',
+ 'Catalog Advanced Search Default Pane',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.bills_current', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.bills_current',
+ 'Print Template Context: bills_current',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.bills_current', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.bills_current',
+ 'Print Template: bills_current',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.bills_historical', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.bills_historical',
+ 'Print Template Context: bills_historical',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.bills_historical', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.bills_historical',
+ 'Print Template: bills_historical',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.bill_payment', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.bill_payment',
+ 'Print Template Context: bill_payment',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.bill_payment', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.bill_payment',
+ 'Print Template: bill_payment',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.checkin', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.checkin',
+ 'Print Template Context: checkin',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.checkin', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.checkin',
+ 'Print Template: checkin',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.checkout', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.checkout',
+ 'Print Template Context: checkout',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.checkout', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.checkout',
+ 'Print Template: checkout',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.hold_transit_slip', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.hold_transit_slip',
+ 'Print Template Context: hold_transit_slip',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.hold_transit_slip', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.hold_transit_slip',
+ 'Print Template: hold_transit_slip',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.hold_shelf_slip', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.hold_shelf_slip',
+ 'Print Template Context: hold_shelf_slip',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.hold_shelf_slip', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.hold_shelf_slip',
+ 'Print Template: hold_shelf_slip',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.holds_for_bib', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.holds_for_bib',
+ 'Print Template Context: holds_for_bib',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.holds_for_bib', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.holds_for_bib',
+ 'Print Template: holds_for_bib',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.holds_for_patron', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.holds_for_patron',
+ 'Print Template Context: holds_for_patron',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.holds_for_patron', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.holds_for_patron',
+ 'Print Template: holds_for_patron',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.hold_pull_list', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.hold_pull_list',
+ 'Print Template Context: hold_pull_list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.hold_pull_list', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.hold_pull_list',
+ 'Print Template: hold_pull_list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.hold_shelf_list', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.hold_shelf_list',
+ 'Print Template Context: hold_shelf_list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.hold_shelf_list', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.hold_shelf_list',
+ 'Print Template: hold_shelf_list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.in_house_use_list', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.in_house_use_list',
+ 'Print Template Context: in_house_use_list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.in_house_use_list', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.in_house_use_list',
+ 'Print Template: in_house_use_list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.item_status', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.item_status',
+ 'Print Template Context: item_status',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.item_status', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.item_status',
+ 'Print Template: item_status',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.items_out', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.items_out',
+ 'Print Template Context: items_out',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.items_out', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.items_out',
+ 'Print Template: items_out',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.patron_address', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.patron_address',
+ 'Print Template Context: patron_address',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.patron_address', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.patron_address',
+ 'Print Template: patron_address',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.patron_data', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.patron_data',
+ 'Print Template Context: patron_data',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.patron_data', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.patron_data',
+ 'Print Template: patron_data',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.patron_note', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.patron_note',
+ 'Print Template Context: patron_note',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.patron_note', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.patron_note',
+ 'Print Template: patron_note',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.renew', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.renew',
+ 'Print Template Context: renew',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.renew', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.renew',
+ 'Print Template: renew',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.transit_list', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.transit_list',
+ 'Print Template Context: transit_list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.transit_list', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.transit_list',
+ 'Print Template: transit_list',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.transit_slip', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.transit_slip',
+ 'Print Template Context: transit_slip',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.transit_slip', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.transit_slip',
+ 'Print Template: transit_slip',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.offline_checkout', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.offline_checkout',
+ 'Print Template Context: offline_checkout',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.offline_checkout', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.offline_checkout',
+ 'Print Template: offline_checkout',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.offline_renew', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.offline_renew',
+ 'Print Template Context: offline_renew',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.offline_renew', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.offline_renew',
+ 'Print Template: offline_renew',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.offline_checkin', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.offline_checkin',
+ 'Print Template Context: offline_checkin',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.offline_checkin', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.offline_checkin',
+ 'Print Template: offline_checkin',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template_context.offline_in_house_use', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template_context.offline_in_house_use',
+ 'Print Template Context: offline_in_house_use',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.print.template.offline_in_house_use', 'gui', 'string',
+ oils_i18n_gettext(
+ 'eg.print.template.offline_in_house_use',
+ 'Print Template: offline_in_house_use',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.serials.stream_names', 'gui', 'array',
+ oils_i18n_gettext(
+ 'eg.serials.stream_names',
+ 'Serials Local Stream Names',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.serials.items.do_print_routing_lists', 'gui', 'bool',
+ oils_i18n_gettext(
+ 'eg.serials.items.do_print_routing_lists',
+ 'Serials Print Routing Lists',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.serials.items.receive_and_barcode', 'gui', 'bool',
+ oils_i18n_gettext(
+ 'eg.serials.items.receive_and_barcode',
+ 'Serials Barcode On Receive',
+ 'cwst', 'label'
+ )
+);
+
+
+-- More values with fm_class'es
+INSERT INTO config.workstation_setting_type (name, grp, datatype, fm_class, label)
+VALUES (
+ 'eg.search.search_lib', 'gui', 'link', 'aou',
+ oils_i18n_gettext(
+ 'eg.search.search_lib',
+ 'Staff Catalog Default Search Library',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.search.pref_lib', 'gui', 'link', 'aou',
+ oils_i18n_gettext(
+ 'eg.search.pref_lib',
+ 'Staff Catalog Preferred Library',
+ 'cwst', 'label'
+ )
+);
+
+
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1118', :eg_version);
+
+UPDATE action_trigger.event_definition
+SET template =
+$$
+[%- USE date -%]
+[%- SET user = target.0.owner -%]
+To: [%- params.recipient_email || user.email %]
+From: [%- params.sender_email || default_sender %]
+Date: [%- date.format(date.now, '%a, %d %b %Y %T -0000', gmt => 1) %]
+Subject: Bibliographic Records
+Auto-Submitted: auto-generated
+
+[% FOR cbreb IN target %]
+[% FOR item IN cbreb.items;
+ bre_id = item.target_biblio_record_entry;
+
+ bibxml = helpers.unapi_bre(bre_id, {flesh => '{mra}'});
+ title = '';
+ FOR part IN bibxml.findnodes('//*[@tag="245"]/*[@code="a" or @code="b"]');
+ title = title _ part.textContent;
+ END;
+
+ author = bibxml.findnodes('//*[@tag="100"]/*[@code="a"]').textContent;
+ item_type = bibxml.findnodes('//*[local-name()="attributes"]/*[local-name()="field"][@name="item_type"]').getAttribute('coded-value');
+ publisher = bibxml.findnodes('//*[@tag="260"]/*[@code="b"]').textContent;
+ pubdate = bibxml.findnodes('//*[@tag="260"]/*[@code="c"]').textContent;
+ isbn = bibxml.findnodes('//*[@tag="020"]/*[@code="a"]').textContent;
+ issn = bibxml.findnodes('//*[@tag="022"]/*[@code="a"]').textContent;
+ upc = bibxml.findnodes('//*[@tag="024"]/*[@code="a"]').textContent;
+%]
+
+[% loop.count %]/[% loop.size %]. Bib ID# [% bre_id %]
+[% IF isbn %]ISBN: [% isbn _ "\n" %][% END -%]
+[% IF issn %]ISSN: [% issn _ "\n" %][% END -%]
+[% IF upc %]UPC: [% upc _ "\n" %] [% END -%]
+Title: [% title %]
+Author: [% author %]
+Publication Info: [% publisher %] [% pubdate %]
+Item Type: [% item_type %]
+
+[% END %]
+[% END %]
+$$
+WHERE hook = 'biblio.format.record_entry.email'
+-- from previous stock definition
+AND MD5(template) = 'ee4e6c1b3049086c570c7a77413d46c1';
+
+UPDATE action_trigger.event_definition
+SET template =
+$$
+<div>
+ <style> li { padding: 8px; margin 5px; }</style>
+ <ol>
+ [% FOR cbreb IN target %]
+ [% FOR item IN cbreb.items;
+ bre_id = item.target_biblio_record_entry;
+
+ bibxml = helpers.unapi_bre(bre_id, {flesh => '{mra}'});
+ title = '';
+ FOR part IN bibxml.findnodes('//*[@tag="245"]/*[@code="a" or @code="b"]');
+ title = title _ part.textContent;
+ END;
+
+ author = bibxml.findnodes('//*[@tag="100"]/*[@code="a"]').textContent;
+ item_type = bibxml.findnodes('//*[local-name()="attributes"]/*[local-name()="field"][@name="item_type"]').getAttribute('coded-value');
+ publisher = bibxml.findnodes('//*[@tag="260"]/*[@code="b"]').textContent;
+ pubdate = bibxml.findnodes('//*[@tag="260"]/*[@code="c"]').textContent;
+ isbn = bibxml.findnodes('//*[@tag="020"]/*[@code="a"]').textContent;
+ %]
+
+ <li>
+ Bib ID# [% bre_id %] ISBN: [% isbn %]<br />
+ Title: [% title %]<br />
+ Author: [% author %]<br />
+ Publication Info: [% publisher %] [% pubdate %]<br/>
+ Item Type: [% item_type %]
+ </li>
+ [% END %]
+ [% END %]
+ </ol>
+</div>
+$$
+WHERE hook = 'biblio.format.record_entry.print'
+-- from previous stock definition
+AND MD5(template) = '9ada7ea8417cb23f89d0dc8f15ec68d0';
+
+
+SELECT evergreen.upgrade_deps_block_check('1120', :eg_version);
+
+--Only insert if the attributes are not already present
+
+INSERT INTO config.z3950_attr (source, name, label, code, format, truncation)
+SELECT 'oclc','upc','UPC','1007','6','0'
+WHERE NOT EXISTS (SELECT name FROM config.z3950_attr WHERE source = 'oclc' AND name = 'upc');
+
+INSERT INTO config.z3950_attr (source, name, label, code, format, truncation)
+SELECT 'loc','upc','UPC','1007','1','1'
+WHERE NOT EXISTS (SELECT name FROM config.z3950_attr WHERE source = 'loc' AND name = 'upc');
+
+SELECT evergreen.upgrade_deps_block_check('1121', :eg_version);
+
+CREATE TABLE permission.grp_tree_display_entry (
+ id SERIAL PRIMARY KEY,
+ position INTEGER NOT NULL,
+ org INTEGER NOT NULL REFERENCES actor.org_unit (id)
+ DEFERRABLE INITIALLY DEFERRED,
+ grp INTEGER NOT NULL REFERENCES permission.grp_tree (id)
+ DEFERRABLE INITIALLY DEFERRED,
+ CONSTRAINT pgtde_once_per_org UNIQUE (org, grp)
+);
+
+ALTER TABLE permission.grp_tree_display_entry
+ ADD COLUMN parent integer REFERENCES permission.grp_tree_display_entry (id)
+ DEFERRABLE INITIALLY DEFERRED;
+
+INSERT INTO permission.perm_list (id, code, description)
+VALUES (609, 'MANAGE_CUSTOM_PERM_GRP_TREE', oils_i18n_gettext( 609,
+ 'Allows a user to manage custom permission group lists.', 'ppl', 'description' ));
+
+
+SELECT evergreen.upgrade_deps_block_check('1122', :eg_version);
+
+ALTER TABLE actor.usr
+ ADD COLUMN pref_prefix TEXT,
+ ADD COLUMN pref_first_given_name TEXT,
+ ADD COLUMN pref_second_given_name TEXT,
+ ADD COLUMN pref_family_name TEXT,
+ ADD COLUMN pref_suffix TEXT,
+ ADD COLUMN name_keywords TEXT,
+ ADD COLUMN name_kw_tsvector TSVECTOR;
+
+ALTER TABLE staging.user_stage
+ ADD COLUMN pref_first_given_name TEXT,
+ ADD COLUMN pref_second_given_name TEXT,
+ ADD COLUMN pref_family_name TEXT;
+
+CREATE INDEX actor_usr_pref_first_given_name_idx
+ ON actor.usr (evergreen.lowercase(pref_first_given_name));
+CREATE INDEX actor_usr_pref_second_given_name_idx
+ ON actor.usr (evergreen.lowercase(pref_second_given_name));
+CREATE INDEX actor_usr_pref_family_name_idx
+ ON actor.usr (evergreen.lowercase(pref_family_name));
+CREATE INDEX actor_usr_pref_first_given_name_unaccent_idx
+ ON actor.usr (evergreen.unaccent_and_squash(pref_first_given_name));
+CREATE INDEX actor_usr_pref_second_given_name_unaccent_idx
+ ON actor.usr (evergreen.unaccent_and_squash(pref_second_given_name));
+CREATE INDEX actor_usr_pref_family_name_unaccent_idx
+ ON actor.usr (evergreen.unaccent_and_squash(pref_family_name));
+
+-- Update keyword indexes for existing patrons
+
+UPDATE actor.usr SET name_kw_tsvector =
+ TO_TSVECTOR(
+ COALESCE(prefix, '') || ' ' ||
+ COALESCE(first_given_name, '') || ' ' ||
+ COALESCE(evergreen.unaccent_and_squash(first_given_name), '') || ' ' ||
+ COALESCE(second_given_name, '') || ' ' ||
+ COALESCE(evergreen.unaccent_and_squash(second_given_name), '') || ' ' ||
+ COALESCE(family_name, '') || ' ' ||
+ COALESCE(evergreen.unaccent_and_squash(family_name), '') || ' ' ||
+ COALESCE(suffix, '')
+ );
+
+CREATE OR REPLACE FUNCTION actor.user_ingest_name_keywords()
+ RETURNS TRIGGER AS $func$
+BEGIN
+ NEW.name_kw_tsvector := TO_TSVECTOR(
+ COALESCE(NEW.prefix, '') || ' ' ||
+ COALESCE(NEW.first_given_name, '') || ' ' ||
+ COALESCE(evergreen.unaccent_and_squash(NEW.first_given_name), '') || ' ' ||
+ COALESCE(NEW.second_given_name, '') || ' ' ||
+ COALESCE(evergreen.unaccent_and_squash(NEW.second_given_name), '') || ' ' ||
+ COALESCE(NEW.family_name, '') || ' ' ||
+ COALESCE(evergreen.unaccent_and_squash(NEW.family_name), '') || ' ' ||
+ COALESCE(NEW.suffix, '') || ' ' ||
+ COALESCE(NEW.pref_prefix, '') || ' ' ||
+ COALESCE(NEW.pref_first_given_name, '') || ' ' ||
+ COALESCE(evergreen.unaccent_and_squash(NEW.pref_first_given_name), '') || ' ' ||
+ COALESCE(NEW.pref_second_given_name, '') || ' ' ||
+ COALESCE(evergreen.unaccent_and_squash(NEW.pref_second_given_name), '') || ' ' ||
+ COALESCE(NEW.pref_family_name, '') || ' ' ||
+ COALESCE(evergreen.unaccent_and_squash(NEW.pref_family_name), '') || ' ' ||
+ COALESCE(NEW.pref_suffix, '') || ' ' ||
+ COALESCE(NEW.name_keywords, '')
+ );
+ RETURN NEW;
+END;
+$func$ LANGUAGE PLPGSQL;
+
+-- Add after the batch upate above to avoid duplicate updates.
+CREATE TRIGGER user_ingest_name_keywords_tgr
+ BEFORE INSERT OR UPDATE ON actor.usr
+ FOR EACH ROW EXECUTE PROCEDURE actor.user_ingest_name_keywords();
+
+
+-- merge pref names from source user to target user, except when
+-- clobbering existing pref names.
+CREATE OR REPLACE FUNCTION actor.usr_merge(src_usr INT, dest_usr INT,
+ del_addrs BOOLEAN, del_cards BOOLEAN, deactivate_cards BOOLEAN )
+ RETURNS VOID AS $$
+DECLARE
+ suffix TEXT;
+ bucket_row RECORD;
+ picklist_row RECORD;
+ queue_row RECORD;
+ folder_row RECORD;
+BEGIN
+
+ -- do some initial cleanup
+ UPDATE actor.usr SET card = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET mailing_address = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET billing_address = NULL WHERE id = src_usr;
+
+ -- actor.*
+ IF del_cards THEN
+ DELETE FROM actor.card where usr = src_usr;
+ ELSE
+ IF deactivate_cards THEN
+ UPDATE actor.card SET active = 'f' WHERE usr = src_usr;
+ END IF;
+ UPDATE actor.card SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+
+ IF del_addrs THEN
+ DELETE FROM actor.usr_address WHERE usr = src_usr;
+ ELSE
+ UPDATE actor.usr_address SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+ UPDATE actor.usr_note SET usr = dest_usr WHERE usr = src_usr;
+ -- dupes are technically OK in actor.usr_standing_penalty, should manually delete them...
+ UPDATE actor.usr_standing_penalty SET usr = dest_usr WHERE usr = src_usr;
+ PERFORM actor.usr_merge_rows('actor.usr_org_unit_opt_in', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('actor.usr_setting', 'usr', src_usr, dest_usr);
+
+ -- permission.*
+ PERFORM actor.usr_merge_rows('permission.usr_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_object_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_grp_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_work_ou_map', 'usr', src_usr, dest_usr);
+
+
+ -- container.*
+
+ -- For each *_bucket table: transfer every bucket belonging to src_usr
+ -- into the custody of dest_usr.
+ --
+ -- In order to avoid colliding with an existing bucket owned by
+ -- the destination user, append the source user's id (in parenthesese)
+ -- to the name. If you still get a collision, add successive
+ -- spaces to the name and keep trying until you succeed.
+ --
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.biblio_record_entry_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.biblio_record_entry_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.call_number_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.call_number_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.copy_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.copy_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.user_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.user_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE container.user_bucket_item SET target_user = dest_usr WHERE target_user = src_usr;
+
+ -- vandelay.*
+ -- transfer queues the same way we transfer buckets (see above)
+ FOR queue_row in
+ SELECT id, name
+ FROM vandelay.queue
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE vandelay.queue
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = queue_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ -- money.*
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'collector', src_usr, dest_usr);
+ UPDATE money.billable_xact SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE money.billing SET voider = dest_usr WHERE voider = src_usr;
+ UPDATE money.bnm_payment SET accepting_usr = dest_usr WHERE accepting_usr = src_usr;
+
+ -- action.*
+ UPDATE action.circulation SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.circulation SET circ_staff = dest_usr WHERE circ_staff = src_usr;
+ UPDATE action.circulation SET checkin_staff = dest_usr WHERE checkin_staff = src_usr;
+ UPDATE action.usr_circ_history SET usr = dest_usr WHERE usr = src_usr;
+
+ UPDATE action.hold_request SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.hold_request SET fulfillment_staff = dest_usr WHERE fulfillment_staff = src_usr;
+ UPDATE action.hold_request SET requestor = dest_usr WHERE requestor = src_usr;
+ UPDATE action.hold_notification SET notify_staff = dest_usr WHERE notify_staff = src_usr;
+
+ UPDATE action.in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET patron = dest_usr WHERE patron = src_usr;
+ UPDATE action.non_cat_in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.survey_response SET usr = dest_usr WHERE usr = src_usr;
+
+ -- acq.*
+ UPDATE acq.fund_allocation SET allocator = dest_usr WHERE allocator = src_usr;
+ UPDATE acq.fund_transfer SET transfer_user = dest_usr WHERE transfer_user = src_usr;
+
+ -- transfer picklists the same way we transfer buckets (see above)
+ FOR picklist_row in
+ SELECT id, name
+ FROM acq.picklist
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE acq.picklist
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = picklist_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE acq.purchase_order SET owner = dest_usr WHERE owner = src_usr;
+ UPDATE acq.po_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.po_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.provider_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.provider_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_usr_attr_definition SET usr = dest_usr WHERE usr = src_usr;
+
+ -- asset.*
+ UPDATE asset.copy SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.copy_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.call_number_note SET creator = dest_usr WHERE creator = src_usr;
+
+ -- serial.*
+ UPDATE serial.record_entry SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE serial.record_entry SET editor = dest_usr WHERE editor = src_usr;
+
+ -- reporter.*
+ -- It's not uncommon to define the reporter schema in a replica
+ -- DB only, so don't assume these tables exist in the write DB.
+ BEGIN
+ UPDATE reporter.template SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.report SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.schedule SET runner = dest_usr WHERE runner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.template_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.template_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.report_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.report_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.output_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.output_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- propagate preferred name values from the source user to the
+ -- destination user, but only when values are not being replaced.
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr)
+ UPDATE actor.usr SET
+ pref_prefix =
+ COALESCE(pref_prefix, (SELECT pref_prefix FROM susr)),
+ pref_first_given_name =
+ COALESCE(pref_first_given_name, (SELECT pref_first_given_name FROM susr)),
+ pref_second_given_name =
+ COALESCE(pref_second_given_name, (SELECT pref_second_given_name FROM susr)),
+ pref_family_name =
+ COALESCE(pref_family_name, (SELECT pref_family_name FROM susr)),
+ pref_suffix =
+ COALESCE(pref_suffix, (SELECT pref_suffix FROM susr))
+ WHERE id = dest_usr;
+
+ -- Copy and deduplicate name keywords
+ -- String -> array -> rows -> DISTINCT -> array -> string
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr),
+ dusr AS (SELECT * FROM actor.usr WHERE id = dest_usr)
+ UPDATE actor.usr SET name_keywords = (
+ WITH keywords AS (
+ SELECT DISTINCT UNNEST(
+ REGEXP_SPLIT_TO_ARRAY(
+ COALESCE((SELECT name_keywords FROM susr), '') || ' ' ||
+ COALESCE((SELECT name_keywords FROM dusr), ''), E'\\s+'
+ )
+ ) AS parts
+ ) SELECT ARRAY_TO_STRING(ARRAY_AGG(kw.parts), ' ') FROM keywords kw
+ ) WHERE id = dest_usr;
+
+ -- Finally, delete the source user
+ DELETE FROM actor.usr WHERE id = src_usr;
+
+END;
+$$ LANGUAGE plpgsql;
+
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1123', :eg_version);
+
+ ALTER TABLE config.rule_circ_duration
+ ADD column max_auto_renewals INTEGER;
+
+ ALTER TABLE action.circulation
+ ADD column auto_renewal BOOLEAN;
+
+ ALTER TABLE action.circulation
+ ADD column auto_renewal_remaining INTEGER;
+
+ ALTER TABLE action.aged_circulation
+ ADD column auto_renewal BOOLEAN;
+
+ ALTER TABLE action.aged_circulation
+ ADD column auto_renewal_remaining INTEGER;
+
+ INSERT INTO action_trigger.validator values('CircIsAutoRenewable', 'Checks whether the circulation is able to be autorenewed.');
+ INSERT INTO action_trigger.reactor values('Circ::AutoRenew', 'Auto-Renews a circulation.');
+ INSERT INTO action_trigger.hook(key, core_type, description) values('autorenewal', 'circ', 'Item was auto-renewed to patron.');
+
+ -- AutoRenewer A/T Def:
+ INSERT INTO action_trigger.event_definition(active, owner, name, hook, validator, reactor, delay, max_delay, delay_field, group_field)
+ values (false, 1, 'Autorenew', 'checkout.due', 'CircIsOpen', 'Circ::AutoRenew', '-23 hours'::interval,'-1 minute'::interval, 'due_date', 'usr');
+
+ -- AutoRenewal outcome Email notifier A/T Def:
+ INSERT INTO action_trigger.event_definition(active, owner, name, hook, validator, reactor, group_field, template)
+ values (false, 1, 'AutorenewNotify', 'autorenewal', 'NOOP_True', 'SendEmail', 'usr',
+$$
+[%- USE date -%]
+[%- user = target.0.usr -%]
+To: [%- params.recipient_email || user.email %]
+From: [%- params.sender_email || default_sender %]
+Date: [%- date.format(date.now, '%a, %d %b %Y %T -0000', gmt => 1) %]
+Subject: Items Out Auto-Renewal Notification
+Auto-Submitted: auto-generated
+
+Dear [% user.family_name %], [% user.first_given_name %]
+An automatic renewal attempt was made for the following items:
+
+[% FOR circ IN target %]
+ [%- SET idx = loop.count - 1; SET udata = user_data.$idx -%]
+ [%- SET cid = circ.target_copy || udata.copy -%]
+ [%- SET copy_details = helpers.get_copy_bib_basics(cid) -%]
+ Item# [% loop.count %]
+ Title: [% copy_details.title %]
+ Author: [% copy_details.author %]
+ [%- IF udata.is_renewed %]
+ Status: Loan Renewed
+ New Due Date: [% date.format(helpers.format_date(udata.new_due_date), '%Y-%m-%d') %]
+ [%- ELSE %]
+ Status: Not Renewed
+ Reason: [% udata.reason %]
+ Due Date: [% date.format(helpers.format_date(circ.due_date), '%Y-%m-%d') %]
+ [% END %]
+[% END %]
+$$
+ );
+
+ INSERT INTO action_trigger.environment (event_def, path ) VALUES
+ ( currval('action_trigger.event_definition_id_seq'), 'usr' ),
+ ( currval('action_trigger.event_definition_id_seq'), 'circ_lib' );
+
+
+DROP VIEW action.all_circulation;
+CREATE OR REPLACE VIEW action.all_circulation AS
+ SELECT id,usr_post_code, usr_home_ou, usr_profile, usr_birth_year, copy_call_number, copy_location,
+ copy_owning_lib, copy_circ_lib, copy_bib_record, xact_start, xact_finish, target_copy,
+ circ_lib, circ_staff, checkin_staff, checkin_lib, renewal_remaining, grace_period, due_date,
+ stop_fines_time, checkin_time, create_time, duration, fine_interval, recurring_fine,
+ max_fine, phone_renewal, desk_renewal, opac_renewal, duration_rule, recurring_fine_rule,
+ max_fine_rule, stop_fines, workstation, checkin_workstation, checkin_scan_time, parent_circ,
+ auto_renewal, auto_renewal_remaining, NULL AS usr
+ FROM action.aged_circulation
+ UNION ALL
+ SELECT DISTINCT circ.id,COALESCE(a.post_code,b.post_code) AS usr_post_code, p.home_ou AS usr_home_ou, p.profile AS usr_profile, EXTRACT(YEAR FROM p.dob)::INT AS usr_birth_year,
+ cp.call_number AS copy_call_number, circ.copy_location, cn.owning_lib AS copy_owning_lib, cp.circ_lib AS copy_circ_lib,
+ cn.record AS copy_bib_record, circ.xact_start, circ.xact_finish, circ.target_copy, circ.circ_lib, circ.circ_staff, circ.checkin_staff,
+ circ.checkin_lib, circ.renewal_remaining, circ.grace_period, circ.due_date, circ.stop_fines_time, circ.checkin_time, circ.create_time, circ.duration,
+ circ.fine_interval, circ.recurring_fine, circ.max_fine, circ.phone_renewal, circ.desk_renewal, circ.opac_renewal, circ.duration_rule,
+ circ.recurring_fine_rule, circ.max_fine_rule, circ.stop_fines, circ.workstation, circ.checkin_workstation, circ.checkin_scan_time,
+ circ.parent_circ, circ.auto_renewal, circ.auto_renewal_remaining, circ.usr
+ FROM action.circulation circ
+ JOIN asset.copy cp ON (circ.target_copy = cp.id)
+ JOIN asset.call_number cn ON (cp.call_number = cn.id)
+ JOIN actor.usr p ON (circ.usr = p.id)
+ LEFT JOIN actor.usr_address a ON (p.mailing_address = a.id)
+ LEFT JOIN actor.usr_address b ON (p.billing_address = b.id);
+
+
+DROP FUNCTION action.summarize_all_circ_chain (INTEGER);
+DROP FUNCTION action.all_circ_chain (INTEGER);
+
+-- rebuild slim circ view
+DROP VIEW action.all_circulation_slim;
+CREATE OR REPLACE VIEW action.all_circulation_slim AS
+ SELECT
+ id,
+ usr,
+ xact_start,
+ xact_finish,
+ unrecovered,
+ target_copy,
+ circ_lib,
+ circ_staff,
+ checkin_staff,
+ checkin_lib,
+ renewal_remaining,
+ grace_period,
+ due_date,
+ stop_fines_time,
+ checkin_time,
+ create_time,
+ duration,
+ fine_interval,
+ recurring_fine,
+ max_fine,
+ phone_renewal,
+ desk_renewal,
+ opac_renewal,
+ duration_rule,
+ recurring_fine_rule,
+ max_fine_rule,
+ stop_fines,
+ workstation,
+ checkin_workstation,
+ copy_location,
+ checkin_scan_time,
+ auto_renewal,
+ auto_renewal_remaining,
+ parent_circ
+ FROM action.circulation
+UNION ALL
+ SELECT
+ id,
+ NULL AS usr,
+ xact_start,
+ xact_finish,
+ unrecovered,
+ target_copy,
+ circ_lib,
+ circ_staff,
+ checkin_staff,
+ checkin_lib,
+ renewal_remaining,
+ grace_period,
+ due_date,
+ stop_fines_time,
+ checkin_time,
+ create_time,
+ duration,
+ fine_interval,
+ recurring_fine,
+ max_fine,
+ phone_renewal,
+ desk_renewal,
+ opac_renewal,
+ duration_rule,
+ recurring_fine_rule,
+ max_fine_rule,
+ stop_fines,
+ workstation,
+ checkin_workstation,
+ copy_location,
+ checkin_scan_time,
+ auto_renewal,
+ auto_renewal_remaining,
+ parent_circ
+ FROM action.aged_circulation
+;
+
+CREATE OR REPLACE FUNCTION action.all_circ_chain (ctx_circ_id INTEGER)
+ RETURNS SETOF action.all_circulation_slim AS $$
+DECLARE
+ tmp_circ action.all_circulation_slim%ROWTYPE;
+ circ_0 action.all_circulation_slim%ROWTYPE;
+BEGIN
+
+ SELECT INTO tmp_circ * FROM action.all_circulation_slim WHERE id = ctx_circ_id;
+
+ IF tmp_circ IS NULL THEN
+ RETURN NEXT tmp_circ;
+ END IF;
+ circ_0 := tmp_circ;
+
+ -- find the front of the chain
+ WHILE TRUE LOOP
+ SELECT INTO tmp_circ * FROM action.all_circulation_slim
+ WHERE id = tmp_circ.parent_circ;
+ IF tmp_circ IS NULL THEN
+ EXIT;
+ END IF;
+ circ_0 := tmp_circ;
+ END LOOP;
+
+ -- now send the circs to the caller, oldest to newest
+ tmp_circ := circ_0;
+ WHILE TRUE LOOP
+ IF tmp_circ IS NULL THEN
+ EXIT;
+ END IF;
+ RETURN NEXT tmp_circ;
+ SELECT INTO tmp_circ * FROM action.all_circulation_slim
+ WHERE parent_circ = tmp_circ.id;
+ END LOOP;
+
+END;
+$$ LANGUAGE 'plpgsql';
+
+-- same as action.summarize_circ_chain, but returns data collected
+-- from action.all_circulation, which may include aged circulations.
+CREATE OR REPLACE FUNCTION action.summarize_all_circ_chain
+ (ctx_circ_id INTEGER) RETURNS action.circ_chain_summary AS $$
+
+DECLARE
+
+ -- first circ in the chain
+ circ_0 action.all_circulation_slim%ROWTYPE;
+
+ -- last circ in the chain
+ circ_n action.all_circulation_slim%ROWTYPE;
+
+ -- circ chain under construction
+ chain action.circ_chain_summary;
+ tmp_circ action.all_circulation_slim%ROWTYPE;
+
+BEGIN
+
+ chain.num_circs := 0;
+ FOR tmp_circ IN SELECT * FROM action.all_circ_chain(ctx_circ_id) LOOP
+
+ IF chain.num_circs = 0 THEN
+ circ_0 := tmp_circ;
+ END IF;
+
+ chain.num_circs := chain.num_circs + 1;
+ circ_n := tmp_circ;
+ END LOOP;
+
+ chain.start_time := circ_0.xact_start;
+ chain.last_stop_fines := circ_n.stop_fines;
+ chain.last_stop_fines_time := circ_n.stop_fines_time;
+ chain.last_checkin_time := circ_n.checkin_time;
+ chain.last_checkin_scan_time := circ_n.checkin_scan_time;
+ SELECT INTO chain.checkout_workstation name FROM actor.workstation WHERE id = circ_0.workstation;
+ SELECT INTO chain.last_checkin_workstation name FROM actor.workstation WHERE id = circ_n.checkin_workstation;
+
+ IF chain.num_circs > 1 THEN
+ chain.last_renewal_time := circ_n.xact_start;
+ SELECT INTO chain.last_renewal_workstation name FROM actor.workstation WHERE id = circ_n.workstation;
+ END IF;
+
+ RETURN chain;
+
+END;
+$$ LANGUAGE 'plpgsql';
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1124', :eg_version);
+
+INSERT into config.workstation_setting_type (name, grp, datatype, label)
+VALUES (
+ 'eg.grid.circ.wide_holds.shelf', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.circ.wide_holds.shelf',
+ 'Grid Config: circ.wide_holds.shelf',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.cat.catalog.wide_holds', 'gui', 'object',
+ oils_i18n_gettext(
+ 'eg.grid.cat.catalog.wide_holds',
+ 'Grid Config: cat.catalog.wide_holds',
+ 'cwst', 'label'
+ )
+);
+
+DELETE from config.workstation_setting_type
+WHERE name = 'eg.grid.cat.catalog.holds' OR name = 'eg.grid.circ.holds.shelf';
+
+
+SELECT evergreen.upgrade_deps_block_check('1125', :eg_version);
+
+CREATE TABLE asset.latest_inventory (
+ id SERIAL PRIMARY KEY,
+ inventory_workstation INTEGER REFERENCES actor.workstation (id) DEFERRABLE INITIALLY DEFERRED,
+ inventory_date TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ copy BIGINT NOT NULL
+);
+CREATE INDEX latest_inventory_copy_idx ON asset.latest_inventory (copy);
+
+CREATE OR REPLACE FUNCTION evergreen.asset_latest_inventory_copy_inh_fkey() RETURNS TRIGGER AS $f$
+BEGIN
+ PERFORM 1 FROM asset.copy WHERE id = NEW.copy;
+ IF NOT FOUND THEN
+ RAISE foreign_key_violation USING MESSAGE = FORMAT(
+ $$Referenced asset.copy id not found, copy:%s$$, NEW.copy
+ );
+ END IF;
+ RETURN NEW;
+END;
+$f$ LANGUAGE PLPGSQL VOLATILE COST 50;
+
+CREATE CONSTRAINT TRIGGER inherit_asset_latest_inventory_copy_fkey
+ AFTER UPDATE OR INSERT ON asset.latest_inventory
+ DEFERRABLE FOR EACH ROW EXECUTE PROCEDURE evergreen.asset_latest_inventory_copy_inh_fkey();
+
+INSERT into config.workstation_setting_type (name, grp, datatype, label)
+VALUES (
+ 'eg.circ.checkin.do_inventory_update', 'circ', 'bool',
+ oils_i18n_gettext (
+ 'eg.circ.checkin.do_inventory_update',
+ 'Checkin: Update Inventory',
+ 'cwst', 'label'
+ )
+);
+
+
+SELECT evergreen.upgrade_deps_block_check('1126', :eg_version);
+
+CREATE TABLE vandelay.session_tracker (
+ id BIGSERIAL PRIMARY KEY,
+
+ -- string of characters (e.g. md5) used for linking trackers
+ -- of different actions into a series. There can be multiple
+ -- session_keys of each action type, creating the opportunity
+ -- to link multiple action trackers into a single session.
+ session_key TEXT NOT NULL,
+
+ -- optional user-supplied name
+ name TEXT NOT NULL,
+
+ usr INTEGER NOT NULL REFERENCES actor.usr(id)
+ DEFERRABLE INITIALLY DEFERRED,
+
+ -- org unit can be derived from WS
+ workstation INTEGER NOT NULL REFERENCES actor.workstation(id)
+ ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
+
+ -- bib/auth
+ record_type vandelay.bib_queue_queue_type NOT NULL DEFAULT 'bib',
+
+ -- Queue defines the source of the data, it does not necessarily
+ -- mean that an action is being performed against an entire queue.
+ -- E.g. some imports are misc. lists of record IDs, but they always
+ -- come from one queue.
+ -- No foreign key -- could be auth or bib queue.
+ queue BIGINT NOT NULL,
+
+ create_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
+ update_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
+
+ state TEXT NOT NULL DEFAULT 'active',
+
+ action_type TEXT NOT NULL DEFAULT 'enqueue', -- import
+
+ -- total number of tasks to perform / loosely defined
+ -- could be # of recs to import or # of recs + # of copies
+ -- depending on the import context
+ total_actions INTEGER NOT NULL DEFAULT 0,
+
+ -- total number of tasked performed so far
+ actions_performed INTEGER NOT NULL DEFAULT 0,
+
+ CONSTRAINT vand_tracker_valid_state
+ CHECK (state IN ('active','error','complete')),
+
+ CONSTRAINT vand_tracker_valid_action_type
+ CHECK (action_type IN ('upload', 'enqueue', 'import'))
+);
+
+
+CREATE OR REPLACE FUNCTION actor.usr_merge( src_usr INT, dest_usr INT, del_addrs BOOLEAN, del_cards BOOLEAN, deactivate_cards BOOLEAN ) RETURNS VOID AS $$
+DECLARE
+ suffix TEXT;
+ bucket_row RECORD;
+ picklist_row RECORD;
+ queue_row RECORD;
+ folder_row RECORD;
+BEGIN
+
+ -- do some initial cleanup
+ UPDATE actor.usr SET card = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET mailing_address = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET billing_address = NULL WHERE id = src_usr;
+
+ -- actor.*
+ IF del_cards THEN
+ DELETE FROM actor.card where usr = src_usr;
+ ELSE
+ IF deactivate_cards THEN
+ UPDATE actor.card SET active = 'f' WHERE usr = src_usr;
+ END IF;
+ UPDATE actor.card SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+
+ IF del_addrs THEN
+ DELETE FROM actor.usr_address WHERE usr = src_usr;
+ ELSE
+ UPDATE actor.usr_address SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+ UPDATE actor.usr_note SET usr = dest_usr WHERE usr = src_usr;
+ -- dupes are technically OK in actor.usr_standing_penalty, should manually delete them...
+ UPDATE actor.usr_standing_penalty SET usr = dest_usr WHERE usr = src_usr;
+ PERFORM actor.usr_merge_rows('actor.usr_org_unit_opt_in', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('actor.usr_setting', 'usr', src_usr, dest_usr);
+
+ -- permission.*
+ PERFORM actor.usr_merge_rows('permission.usr_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_object_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_grp_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_work_ou_map', 'usr', src_usr, dest_usr);
+
+
+ -- container.*
+
+ -- For each *_bucket table: transfer every bucket belonging to src_usr
+ -- into the custody of dest_usr.
+ --
+ -- In order to avoid colliding with an existing bucket owned by
+ -- the destination user, append the source user's id (in parenthesese)
+ -- to the name. If you still get a collision, add successive
+ -- spaces to the name and keep trying until you succeed.
+ --
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.biblio_record_entry_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.biblio_record_entry_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.call_number_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.call_number_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.copy_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.copy_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.user_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.user_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE container.user_bucket_item SET target_user = dest_usr WHERE target_user = src_usr;
+
+ -- vandelay.*
+ -- transfer queues the same way we transfer buckets (see above)
+ FOR queue_row in
+ SELECT id, name
+ FROM vandelay.queue
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE vandelay.queue
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = queue_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE vandelay.session_tracker SET usr = dest_usr WHERE usr = src_usr;
+
+ -- money.*
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'collector', src_usr, dest_usr);
+ UPDATE money.billable_xact SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE money.billing SET voider = dest_usr WHERE voider = src_usr;
+ UPDATE money.bnm_payment SET accepting_usr = dest_usr WHERE accepting_usr = src_usr;
+
+ -- action.*
+ UPDATE action.circulation SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.circulation SET circ_staff = dest_usr WHERE circ_staff = src_usr;
+ UPDATE action.circulation SET checkin_staff = dest_usr WHERE checkin_staff = src_usr;
+ UPDATE action.usr_circ_history SET usr = dest_usr WHERE usr = src_usr;
+
+ UPDATE action.hold_request SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.hold_request SET fulfillment_staff = dest_usr WHERE fulfillment_staff = src_usr;
+ UPDATE action.hold_request SET requestor = dest_usr WHERE requestor = src_usr;
+ UPDATE action.hold_notification SET notify_staff = dest_usr WHERE notify_staff = src_usr;
+
+ UPDATE action.in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET patron = dest_usr WHERE patron = src_usr;
+ UPDATE action.non_cat_in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.survey_response SET usr = dest_usr WHERE usr = src_usr;
+
+ -- acq.*
+ UPDATE acq.fund_allocation SET allocator = dest_usr WHERE allocator = src_usr;
+ UPDATE acq.fund_transfer SET transfer_user = dest_usr WHERE transfer_user = src_usr;
+
+ -- transfer picklists the same way we transfer buckets (see above)
+ FOR picklist_row in
+ SELECT id, name
+ FROM acq.picklist
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE acq.picklist
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = picklist_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE acq.purchase_order SET owner = dest_usr WHERE owner = src_usr;
+ UPDATE acq.po_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.po_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.provider_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.provider_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_usr_attr_definition SET usr = dest_usr WHERE usr = src_usr;
+
+ -- asset.*
+ UPDATE asset.copy SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.copy_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.call_number_note SET creator = dest_usr WHERE creator = src_usr;
+
+ -- serial.*
+ UPDATE serial.record_entry SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE serial.record_entry SET editor = dest_usr WHERE editor = src_usr;
+
+ -- reporter.*
+ -- It's not uncommon to define the reporter schema in a replica
+ -- DB only, so don't assume these tables exist in the write DB.
+ BEGIN
+ UPDATE reporter.template SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.report SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.schedule SET runner = dest_usr WHERE runner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.template_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.template_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.report_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.report_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.output_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.output_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- propagate preferred name values from the source user to the
+ -- destination user, but only when values are not being replaced.
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr)
+ UPDATE actor.usr SET
+ pref_prefix =
+ COALESCE(pref_prefix, (SELECT pref_prefix FROM susr)),
+ pref_first_given_name =
+ COALESCE(pref_first_given_name, (SELECT pref_first_given_name FROM susr)),
+ pref_second_given_name =
+ COALESCE(pref_second_given_name, (SELECT pref_second_given_name FROM susr)),
+ pref_family_name =
+ COALESCE(pref_family_name, (SELECT pref_family_name FROM susr)),
+ pref_suffix =
+ COALESCE(pref_suffix, (SELECT pref_suffix FROM susr))
+ WHERE id = dest_usr;
+
+ -- Copy and deduplicate name keywords
+ -- String -> array -> rows -> DISTINCT -> array -> string
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr),
+ dusr AS (SELECT * FROM actor.usr WHERE id = dest_usr)
+ UPDATE actor.usr SET name_keywords = (
+ WITH keywords AS (
+ SELECT DISTINCT UNNEST(
+ REGEXP_SPLIT_TO_ARRAY(
+ COALESCE((SELECT name_keywords FROM susr), '') || ' ' ||
+ COALESCE((SELECT name_keywords FROM dusr), ''), E'\\s+'
+ )
+ ) AS parts
+ ) SELECT ARRAY_TO_STRING(ARRAY_AGG(kw.parts), ' ') FROM keywords kw
+ ) WHERE id = dest_usr;
+
+ -- Finally, delete the source user
+ DELETE FROM actor.usr WHERE id = src_usr;
+
+END;
+$$ LANGUAGE plpgsql;
+
+
+CREATE OR REPLACE FUNCTION actor.usr_purge_data(
+ src_usr IN INTEGER,
+ specified_dest_usr IN INTEGER
+) RETURNS VOID AS $$
+DECLARE
+ suffix TEXT;
+ renamable_row RECORD;
+ dest_usr INTEGER;
+BEGIN
+
+ IF specified_dest_usr IS NULL THEN
+ dest_usr := 1; -- Admin user on stock installs
+ ELSE
+ dest_usr := specified_dest_usr;
+ END IF;
+
+ -- acq.*
+ UPDATE acq.fund_allocation SET allocator = dest_usr WHERE allocator = src_usr;
+ UPDATE acq.lineitem SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem SET selector = dest_usr WHERE selector = src_usr;
+ UPDATE acq.lineitem_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem_note SET editor = dest_usr WHERE editor = src_usr;
+ DELETE FROM acq.lineitem_usr_attr_definition WHERE usr = src_usr;
+
+ -- Update with a rename to avoid collisions
+ FOR renamable_row in
+ SELECT id, name
+ FROM acq.picklist
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE acq.picklist
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE acq.picklist SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.picklist SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.po_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.po_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.purchase_order SET owner = dest_usr WHERE owner = src_usr;
+ UPDATE acq.purchase_order SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.purchase_order SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.claim_event SET creator = dest_usr WHERE creator = src_usr;
+
+ -- action.*
+ DELETE FROM action.circulation WHERE usr = src_usr;
+ UPDATE action.circulation SET circ_staff = dest_usr WHERE circ_staff = src_usr;
+ UPDATE action.circulation SET checkin_staff = dest_usr WHERE checkin_staff = src_usr;
+ UPDATE action.hold_notification SET notify_staff = dest_usr WHERE notify_staff = src_usr;
+ UPDATE action.hold_request SET fulfillment_staff = dest_usr WHERE fulfillment_staff = src_usr;
+ UPDATE action.hold_request SET requestor = dest_usr WHERE requestor = src_usr;
+ DELETE FROM action.hold_request WHERE usr = src_usr;
+ UPDATE action.in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cat_in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ DELETE FROM action.non_cataloged_circulation WHERE patron = src_usr;
+ UPDATE action.non_cataloged_circulation SET staff = dest_usr WHERE staff = src_usr;
+ DELETE FROM action.survey_response WHERE usr = src_usr;
+ UPDATE action.fieldset SET owner = dest_usr WHERE owner = src_usr;
+ DELETE FROM action.usr_circ_history WHERE usr = src_usr;
+
+ -- actor.*
+ DELETE FROM actor.card WHERE usr = src_usr;
+ DELETE FROM actor.stat_cat_entry_usr_map WHERE target_usr = src_usr;
+
+ -- The following update is intended to avoid transient violations of a foreign
+ -- key constraint, whereby actor.usr_address references itself. It may not be
+ -- necessary, but it does no harm.
+ UPDATE actor.usr_address SET replaces = NULL
+ WHERE usr = src_usr AND replaces IS NOT NULL;
+ DELETE FROM actor.usr_address WHERE usr = src_usr;
+ DELETE FROM actor.usr_note WHERE usr = src_usr;
+ UPDATE actor.usr_note SET creator = dest_usr WHERE creator = src_usr;
+ DELETE FROM actor.usr_org_unit_opt_in WHERE usr = src_usr;
+ UPDATE actor.usr_org_unit_opt_in SET staff = dest_usr WHERE staff = src_usr;
+ DELETE FROM actor.usr_setting WHERE usr = src_usr;
+ DELETE FROM actor.usr_standing_penalty WHERE usr = src_usr;
+ UPDATE actor.usr_standing_penalty SET staff = dest_usr WHERE staff = src_usr;
+
+ -- asset.*
+ UPDATE asset.call_number SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.call_number_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.copy_note SET creator = dest_usr WHERE creator = src_usr;
+
+ -- auditor.*
+ DELETE FROM auditor.actor_usr_address_history WHERE id = src_usr;
+ DELETE FROM auditor.actor_usr_history WHERE id = src_usr;
+ UPDATE auditor.asset_call_number_history SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE auditor.asset_call_number_history SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE auditor.asset_copy_history SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE auditor.asset_copy_history SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE auditor.biblio_record_entry_history SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE auditor.biblio_record_entry_history SET editor = dest_usr WHERE editor = src_usr;
+
+ -- biblio.*
+ UPDATE biblio.record_entry SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE biblio.record_entry SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE biblio.record_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE biblio.record_note SET editor = dest_usr WHERE editor = src_usr;
+
+ -- container.*
+ -- Update buckets with a rename to avoid collisions
+ FOR renamable_row in
+ SELECT id, name
+ FROM container.biblio_record_entry_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.biblio_record_entry_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR renamable_row in
+ SELECT id, name
+ FROM container.call_number_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.call_number_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR renamable_row in
+ SELECT id, name
+ FROM container.copy_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.copy_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR renamable_row in
+ SELECT id, name
+ FROM container.user_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.user_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ DELETE FROM container.user_bucket_item WHERE target_user = src_usr;
+
+ -- money.*
+ DELETE FROM money.billable_xact WHERE usr = src_usr;
+ DELETE FROM money.collections_tracker WHERE usr = src_usr;
+ UPDATE money.collections_tracker SET collector = dest_usr WHERE collector = src_usr;
+
+ -- permission.*
+ DELETE FROM permission.usr_grp_map WHERE usr = src_usr;
+ DELETE FROM permission.usr_object_perm_map WHERE usr = src_usr;
+ DELETE FROM permission.usr_perm_map WHERE usr = src_usr;
+ DELETE FROM permission.usr_work_ou_map WHERE usr = src_usr;
+
+ -- reporter.*
+ -- Update with a rename to avoid collisions
+ BEGIN
+ FOR renamable_row in
+ SELECT id, name
+ FROM reporter.output_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.output_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ BEGIN
+ UPDATE reporter.report SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- Update with a rename to avoid collisions
+ BEGIN
+ FOR renamable_row in
+ SELECT id, name
+ FROM reporter.report_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.report_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ BEGIN
+ UPDATE reporter.schedule SET runner = dest_usr WHERE runner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ BEGIN
+ UPDATE reporter.template SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- Update with a rename to avoid collisions
+ BEGIN
+ FOR renamable_row in
+ SELECT id, name
+ FROM reporter.template_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.template_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- vandelay.*
+ -- Update with a rename to avoid collisions
+ FOR renamable_row in
+ SELECT id, name
+ FROM vandelay.queue
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE vandelay.queue
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE vandelay.session_tracker SET usr = dest_usr WHERE usr = src_usr;
+
+ -- NULL-ify addresses last so other cleanup (e.g. circ anonymization)
+ -- can access the information before deletion.
+ UPDATE actor.usr SET
+ active = FALSE,
+ card = NULL,
+ mailing_address = NULL,
+ billing_address = NULL
+ WHERE id = src_usr;
+
+END;
+$$ LANGUAGE plpgsql;
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1127', :eg_version);
+
+ALTER TABLE acq.user_request ADD COLUMN cancel_time TIMESTAMPTZ;
+ALTER TABLE acq.user_request ADD COLUMN upc TEXT;
+ALTER TABLE action.hold_request ADD COLUMN acq_request INT REFERENCES acq.user_request (id);
+
+UPDATE
+ config.org_unit_setting_type
+SET
+ label = oils_i18n_gettext(
+ 'circ.holds.canceled.display_age',
+ 'Canceled holds/requests display age',
+ 'coust', 'label'),
+ description = oils_i18n_gettext(
+ 'circ.holds.canceled.display_age',
+ 'Show all canceled entries in patron holds and patron acquisition requests interfaces that were canceled within this amount of time',
+ 'coust', 'description')
+WHERE
+ name = 'circ.holds.canceled.display_age'
+;
+
+UPDATE
+ config.org_unit_setting_type
+SET
+ label = oils_i18n_gettext(
+ 'circ.holds.canceled.display_count',
+ 'Canceled holds/requests display count',
+ 'coust', 'label'),
+ description = oils_i18n_gettext(
+ 'circ.holds.canceled.display_count',
+ 'How many canceled entries to show in patron holds and patron acquisition requests interfaces',
+ 'coust', 'description')
+WHERE
+ name = 'circ.holds.canceled.display_count'
+;
+
+INSERT INTO acq.cancel_reason (org_unit, keep_debits, id, label, description)
+ VALUES (
+ 1, 'f', 1015,
+ oils_i18n_gettext(1015, 'Canceled: Fulfilled', 'acqcr', 'label'),
+ oils_i18n_gettext(1015, 'This acquisition request has been fulfilled.', 'acqcr', 'description')
+ )
+;
+
+UPDATE
+ acq.user_request_type
+SET
+ label = oils_i18n_gettext('2', 'Articles', 'aurt', 'label')
+WHERE
+ id = 2
+;
+
+INSERT INTO acq.user_request_type (id,label)
+ SELECT 6, oils_i18n_gettext('6', 'Other', 'aurt', 'label');
+
+SELECT SETVAL('acq.user_request_type_id_seq'::TEXT, (SELECT MAX(id)+1 FROM acq.user_request_type));
+
+INSERT INTO permission.perm_list ( id, code, description ) VALUES
+ ( 610, 'CLEAR_PURCHASE_REQUEST', oils_i18n_gettext(610,
+ 'Clear Completed User Purchase Requests', 'ppl', 'description'))
+;
+
+CREATE TABLE acq.user_request_status_type (
+ id SERIAL PRIMARY KEY
+ ,label TEXT
+);
+
+INSERT INTO acq.user_request_status_type (id,label) VALUES
+ (0,oils_i18n_gettext(0,'Error','aurst','label'))
+ ,(1,oils_i18n_gettext(1,'New','aurst','label'))
+ ,(2,oils_i18n_gettext(2,'Pending','aurst','label'))
+ ,(3,oils_i18n_gettext(3,'Ordered, Hold Not Placed','aurst','label'))
+ ,(4,oils_i18n_gettext(4,'Ordered, Hold Placed','aurst','label'))
+ ,(5,oils_i18n_gettext(5,'Received','aurst','label'))
+ ,(6,oils_i18n_gettext(6,'Fulfilled','aurst','label'))
+ ,(7,oils_i18n_gettext(7,'Canceled','aurst','label'))
+;
+
+SELECT SETVAL('acq.user_request_status_type_id_seq'::TEXT, 100);
+
+-- not used
+DELETE FROM actor.org_unit_setting WHERE name = 'acq.holds.allow_holds_from_purchase_request';
+DELETE FROM config.org_unit_setting_type_log WHERE field_name = 'acq.holds.allow_holds_from_purchase_request';
+DELETE FROM config.org_unit_setting_type WHERE name = 'acq.holds.allow_holds_from_purchase_request';
+
+
+SELECT evergreen.upgrade_deps_block_check('1128', :eg_version);
+
+DROP VIEW auditor.acq_invoice_lifecycle;
+
+ALTER TABLE acq.invoice
+ ADD COLUMN close_date TIMESTAMPTZ,
+ ADD COLUMN closed_by INTEGER
+ REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED;
+
+-- duplicate steps for auditor table
+ALTER TABLE auditor.acq_invoice_history
+ ADD COLUMN close_date TIMESTAMPTZ,
+ ADD COLUMN closed_by INTEGER;
+
+UPDATE acq.invoice SET close_date = NOW() WHERE complete;
+UPDATE auditor.acq_invoice_history SET close_date = NOW() WHERE complete;
+
+ALTER TABLE acq.invoice DROP COLUMN complete;
+ALTER TABLE auditor.acq_invoice_history DROP COLUMN complete;
+
+-- this recreates auditor.acq_invoice_lifecycle;
+SELECT auditor.update_auditors();
+
+CREATE OR REPLACE FUNCTION actor.usr_merge( src_usr INT, dest_usr INT, del_addrs BOOLEAN, del_cards BOOLEAN, deactivate_cards BOOLEAN ) RETURNS VOID AS $$
+DECLARE
+ suffix TEXT;
+ bucket_row RECORD;
+ picklist_row RECORD;
+ queue_row RECORD;
+ folder_row RECORD;
+BEGIN
+
+ -- do some initial cleanup
+ UPDATE actor.usr SET card = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET mailing_address = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET billing_address = NULL WHERE id = src_usr;
+
+ -- actor.*
+ IF del_cards THEN
+ DELETE FROM actor.card where usr = src_usr;
+ ELSE
+ IF deactivate_cards THEN
+ UPDATE actor.card SET active = 'f' WHERE usr = src_usr;
+ END IF;
+ UPDATE actor.card SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+
+ IF del_addrs THEN
+ DELETE FROM actor.usr_address WHERE usr = src_usr;
+ ELSE
+ UPDATE actor.usr_address SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+ UPDATE actor.usr_note SET usr = dest_usr WHERE usr = src_usr;
+ -- dupes are technically OK in actor.usr_standing_penalty, should manually delete them...
+ UPDATE actor.usr_standing_penalty SET usr = dest_usr WHERE usr = src_usr;
+ PERFORM actor.usr_merge_rows('actor.usr_org_unit_opt_in', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('actor.usr_setting', 'usr', src_usr, dest_usr);
+
+ -- permission.*
+ PERFORM actor.usr_merge_rows('permission.usr_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_object_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_grp_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_work_ou_map', 'usr', src_usr, dest_usr);
+
+
+ -- container.*
+
+ -- For each *_bucket table: transfer every bucket belonging to src_usr
+ -- into the custody of dest_usr.
+ --
+ -- In order to avoid colliding with an existing bucket owned by
+ -- the destination user, append the source user's id (in parenthesese)
+ -- to the name. If you still get a collision, add successive
+ -- spaces to the name and keep trying until you succeed.
+ --
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.biblio_record_entry_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.biblio_record_entry_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.call_number_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.call_number_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.copy_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.copy_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.user_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.user_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE container.user_bucket_item SET target_user = dest_usr WHERE target_user = src_usr;
+
+ -- vandelay.*
+ -- transfer queues the same way we transfer buckets (see above)
+ FOR queue_row in
+ SELECT id, name
+ FROM vandelay.queue
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE vandelay.queue
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = queue_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ -- money.*
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'collector', src_usr, dest_usr);
+ UPDATE money.billable_xact SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE money.billing SET voider = dest_usr WHERE voider = src_usr;
+ UPDATE money.bnm_payment SET accepting_usr = dest_usr WHERE accepting_usr = src_usr;
+
+ -- action.*
+ UPDATE action.circulation SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.circulation SET circ_staff = dest_usr WHERE circ_staff = src_usr;
+ UPDATE action.circulation SET checkin_staff = dest_usr WHERE checkin_staff = src_usr;
+ UPDATE action.usr_circ_history SET usr = dest_usr WHERE usr = src_usr;
+
+ UPDATE action.hold_request SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.hold_request SET fulfillment_staff = dest_usr WHERE fulfillment_staff = src_usr;
+ UPDATE action.hold_request SET requestor = dest_usr WHERE requestor = src_usr;
+ UPDATE action.hold_notification SET notify_staff = dest_usr WHERE notify_staff = src_usr;
+
+ UPDATE action.in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET patron = dest_usr WHERE patron = src_usr;
+ UPDATE action.non_cat_in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.survey_response SET usr = dest_usr WHERE usr = src_usr;
+
+ -- acq.*
+ UPDATE acq.fund_allocation SET allocator = dest_usr WHERE allocator = src_usr;
+ UPDATE acq.fund_transfer SET transfer_user = dest_usr WHERE transfer_user = src_usr;
+ UPDATE acq.invoice SET closed_by = dest_usr WHERE closed_by = src_usr;
+
+ -- transfer picklists the same way we transfer buckets (see above)
+ FOR picklist_row in
+ SELECT id, name
+ FROM acq.picklist
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE acq.picklist
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = picklist_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE acq.purchase_order SET owner = dest_usr WHERE owner = src_usr;
+ UPDATE acq.po_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.po_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.provider_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.provider_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_usr_attr_definition SET usr = dest_usr WHERE usr = src_usr;
+
+ -- asset.*
+ UPDATE asset.copy SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.copy_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.call_number_note SET creator = dest_usr WHERE creator = src_usr;
+
+ -- serial.*
+ UPDATE serial.record_entry SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE serial.record_entry SET editor = dest_usr WHERE editor = src_usr;
+
+ -- reporter.*
+ -- It's not uncommon to define the reporter schema in a replica
+ -- DB only, so don't assume these tables exist in the write DB.
+ BEGIN
+ UPDATE reporter.template SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.report SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.schedule SET runner = dest_usr WHERE runner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.template_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.template_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.report_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.report_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.output_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.output_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- Finally, delete the source user
+ DELETE FROM actor.usr WHERE id = src_usr;
+
+END;
+$$ LANGUAGE plpgsql;
+
+
+CREATE OR REPLACE FUNCTION actor.usr_purge_data(
+ src_usr IN INTEGER,
+ specified_dest_usr IN INTEGER
+) RETURNS VOID AS $$
+DECLARE
+ suffix TEXT;
+ renamable_row RECORD;
+ dest_usr INTEGER;
+BEGIN
+
+ IF specified_dest_usr IS NULL THEN
+ dest_usr := 1; -- Admin user on stock installs
+ ELSE
+ dest_usr := specified_dest_usr;
+ END IF;
+
+ -- acq.*
+ UPDATE acq.fund_allocation SET allocator = dest_usr WHERE allocator = src_usr;
+ UPDATE acq.lineitem SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem SET selector = dest_usr WHERE selector = src_usr;
+ UPDATE acq.lineitem_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.invoice SET closed_by = dest_usr WHERE closed_by = src_usr;
+ DELETE FROM acq.lineitem_usr_attr_definition WHERE usr = src_usr;
+
+ -- Update with a rename to avoid collisions
+ FOR renamable_row in
+ SELECT id, name
+ FROM acq.picklist
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE acq.picklist
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE acq.picklist SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.picklist SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.po_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.po_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.purchase_order SET owner = dest_usr WHERE owner = src_usr;
+ UPDATE acq.purchase_order SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.purchase_order SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.claim_event SET creator = dest_usr WHERE creator = src_usr;
+
+ -- action.*
+ DELETE FROM action.circulation WHERE usr = src_usr;
+ UPDATE action.circulation SET circ_staff = dest_usr WHERE circ_staff = src_usr;
+ UPDATE action.circulation SET checkin_staff = dest_usr WHERE checkin_staff = src_usr;
+ UPDATE action.hold_notification SET notify_staff = dest_usr WHERE notify_staff = src_usr;
+ UPDATE action.hold_request SET fulfillment_staff = dest_usr WHERE fulfillment_staff = src_usr;
+ UPDATE action.hold_request SET requestor = dest_usr WHERE requestor = src_usr;
+ DELETE FROM action.hold_request WHERE usr = src_usr;
+ UPDATE action.in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cat_in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ DELETE FROM action.non_cataloged_circulation WHERE patron = src_usr;
+ UPDATE action.non_cataloged_circulation SET staff = dest_usr WHERE staff = src_usr;
+ DELETE FROM action.survey_response WHERE usr = src_usr;
+ UPDATE action.fieldset SET owner = dest_usr WHERE owner = src_usr;
+ DELETE FROM action.usr_circ_history WHERE usr = src_usr;
+
+ -- actor.*
+ DELETE FROM actor.card WHERE usr = src_usr;
+ DELETE FROM actor.stat_cat_entry_usr_map WHERE target_usr = src_usr;
+
+ -- The following update is intended to avoid transient violations of a foreign
+ -- key constraint, whereby actor.usr_address references itself. It may not be
+ -- necessary, but it does no harm.
+ UPDATE actor.usr_address SET replaces = NULL
+ WHERE usr = src_usr AND replaces IS NOT NULL;
+ DELETE FROM actor.usr_address WHERE usr = src_usr;
+ DELETE FROM actor.usr_note WHERE usr = src_usr;
+ UPDATE actor.usr_note SET creator = dest_usr WHERE creator = src_usr;
+ DELETE FROM actor.usr_org_unit_opt_in WHERE usr = src_usr;
+ UPDATE actor.usr_org_unit_opt_in SET staff = dest_usr WHERE staff = src_usr;
+ DELETE FROM actor.usr_setting WHERE usr = src_usr;
+ DELETE FROM actor.usr_standing_penalty WHERE usr = src_usr;
+ UPDATE actor.usr_standing_penalty SET staff = dest_usr WHERE staff = src_usr;
+
+ -- asset.*
+ UPDATE asset.call_number SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.call_number_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.copy_note SET creator = dest_usr WHERE creator = src_usr;
+
+ -- auditor.*
+ DELETE FROM auditor.actor_usr_address_history WHERE id = src_usr;
+ DELETE FROM auditor.actor_usr_history WHERE id = src_usr;
+ UPDATE auditor.asset_call_number_history SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE auditor.asset_call_number_history SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE auditor.asset_copy_history SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE auditor.asset_copy_history SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE auditor.biblio_record_entry_history SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE auditor.biblio_record_entry_history SET editor = dest_usr WHERE editor = src_usr;
+
+ -- biblio.*
+ UPDATE biblio.record_entry SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE biblio.record_entry SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE biblio.record_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE biblio.record_note SET editor = dest_usr WHERE editor = src_usr;
+
+ -- container.*
+ -- Update buckets with a rename to avoid collisions
+ FOR renamable_row in
+ SELECT id, name
+ FROM container.biblio_record_entry_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.biblio_record_entry_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR renamable_row in
+ SELECT id, name
+ FROM container.call_number_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.call_number_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR renamable_row in
+ SELECT id, name
+ FROM container.copy_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.copy_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR renamable_row in
+ SELECT id, name
+ FROM container.user_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.user_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ DELETE FROM container.user_bucket_item WHERE target_user = src_usr;
+
+ -- money.*
+ DELETE FROM money.billable_xact WHERE usr = src_usr;
+ DELETE FROM money.collections_tracker WHERE usr = src_usr;
+ UPDATE money.collections_tracker SET collector = dest_usr WHERE collector = src_usr;
+
+ -- permission.*
+ DELETE FROM permission.usr_grp_map WHERE usr = src_usr;
+ DELETE FROM permission.usr_object_perm_map WHERE usr = src_usr;
+ DELETE FROM permission.usr_perm_map WHERE usr = src_usr;
+ DELETE FROM permission.usr_work_ou_map WHERE usr = src_usr;
+
+ -- reporter.*
+ -- Update with a rename to avoid collisions
+ BEGIN
+ FOR renamable_row in
+ SELECT id, name
+ FROM reporter.output_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.output_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ BEGIN
+ UPDATE reporter.report SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- Update with a rename to avoid collisions
+ BEGIN
+ FOR renamable_row in
+ SELECT id, name
+ FROM reporter.report_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.report_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ BEGIN
+ UPDATE reporter.schedule SET runner = dest_usr WHERE runner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ BEGIN
+ UPDATE reporter.template SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- Update with a rename to avoid collisions
+ BEGIN
+ FOR renamable_row in
+ SELECT id, name
+ FROM reporter.template_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.template_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- vandelay.*
+ -- Update with a rename to avoid collisions
+ FOR renamable_row in
+ SELECT id, name
+ FROM vandelay.queue
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE vandelay.queue
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = renamable_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ -- NULL-ify addresses last so other cleanup (e.g. circ anonymization)
+ -- can access the information before deletion.
+ UPDATE actor.usr SET
+ active = FALSE,
+ card = NULL,
+ mailing_address = NULL,
+ billing_address = NULL
+ WHERE id = src_usr;
+
+END;
+$$ LANGUAGE plpgsql;
+
+
+
+
+
+-- UNDO (minus user purge/merge changes)
+/*
+
+DROP VIEW auditor.acq_invoice_lifecycle;
+ALTER TABLE acq.invoice ADD COLUMN complete BOOLEAN NOT NULL DEFAULT FALSE;
+ALTER TABLE auditor.acq_invoice_history
+ ADD COLUMN complete BOOLEAN NOT NULL DEFAULT FALSE;
+UPDATE acq.invoice SET complete = TRUE where close_date IS NOT NULL;
+UPDATE auditor.acq_invoice_history
+ SET complete = TRUE where close_date IS NOT NULL;
+SET CONSTRAINTS ALL IMMEDIATE; -- or get pending triggers error.
+ALTER TABLE acq.invoice DROP COLUMN close_date, DROP COLUMN closed_by;
+ALTER TABLE auditor.acq_invoice_history
+ DROP COLUMN close_date, DROP COLUMN closed_by;
+SELECT auditor.update_auditors();
+
+*/
+
+
+SELECT evergreen.upgrade_deps_block_check('1129', :eg_version);
+
+INSERT into config.workstation_setting_type (name, grp, datatype, label)
+VALUES (
+ 'eg.grid.admin.acq.cancel_reason', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.cancel_reason',
+ 'Grid Config: admin.acq.cancel_reason',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.claim_event_type', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.claim_event_type',
+ 'Grid Config: admin.acq.claim_event_type',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.claim_policy', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.claim_policy',
+ 'Grid Config: admin.acq.claim_policy',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.claim_policy_action', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.claim_policy_action',
+ 'Grid Config: admin.acq.claim_policy_action',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.claim_type', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.claim_type',
+ 'Grid Config: admin.acq.claim_type',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.currency_type', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.currency_type',
+ 'Grid Config: admin.acq.currency_type',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.edi_account', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.edi_account',
+ 'Grid Config: admin.acq.edi_account',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.edi_message', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.edi_message',
+ 'Grid Config: admin.acq.edi_message',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.exchange_rate', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.exchange_rate',
+ 'Grid Config: admin.acq.exchange_rate',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.fund_tag', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.fund_tag',
+ 'Grid Config: admin.acq.fund_tag',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.invoice_item_type', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.invoice_item_type',
+ 'Grid Config: admin.acq.invoice_item_type',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.invoice_payment_method', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.invoice_payment_method',
+ 'Grid Config: admin.acq.invoice_payment_method',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.lineitem_alert_text', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.lineitem_alert_text',
+ 'Grid Config: admin.acq.lineitem_alert_text',
+ 'cwst', 'label'
+ )
+), (
+ 'eg.grid.admin.acq.lineitem_marc_attr_definition', 'gui', 'object',
+ oils_i18n_gettext (
+ 'eg.grid.admin.acq.lineitem_marc_attr_definition',
+ 'Grid Config: admin.acq.lineitem_marc_attr_definition',
+ 'cwst', 'label'
+ )
+);
+
+
+SELECT evergreen.upgrade_deps_block_check('1130', :eg_version);
+
+CREATE OR REPLACE FUNCTION actor.usr_merge( src_usr INT, dest_usr INT, del_addrs BOOLEAN, del_cards BOOLEAN, deactivate_cards BOOLEAN ) RETURNS VOID AS $$
+DECLARE
+ suffix TEXT;
+ bucket_row RECORD;
+ picklist_row RECORD;
+ queue_row RECORD;
+ folder_row RECORD;
+BEGIN
+
+ -- Bail if src_usr equals dest_usr because the result of merging a
+ -- user with itself is not what you want.
+ IF src_usr = dest_usr THEN
+ RETURN;
+ END IF;
+
+ -- do some initial cleanup
+ UPDATE actor.usr SET card = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET mailing_address = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET billing_address = NULL WHERE id = src_usr;
+
+ -- actor.*
+ IF del_cards THEN
+ DELETE FROM actor.card where usr = src_usr;
+ ELSE
+ IF deactivate_cards THEN
+ UPDATE actor.card SET active = 'f' WHERE usr = src_usr;
+ END IF;
+ UPDATE actor.card SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+
+ IF del_addrs THEN
+ DELETE FROM actor.usr_address WHERE usr = src_usr;
+ ELSE
+ UPDATE actor.usr_address SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+ UPDATE actor.usr_note SET usr = dest_usr WHERE usr = src_usr;
+ -- dupes are technically OK in actor.usr_standing_penalty, should manually delete them...
+ UPDATE actor.usr_standing_penalty SET usr = dest_usr WHERE usr = src_usr;
+ PERFORM actor.usr_merge_rows('actor.usr_org_unit_opt_in', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('actor.usr_setting', 'usr', src_usr, dest_usr);
+
+ -- permission.*
+ PERFORM actor.usr_merge_rows('permission.usr_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_object_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_grp_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_work_ou_map', 'usr', src_usr, dest_usr);
+
+
+ -- container.*
+
+ -- For each *_bucket table: transfer every bucket belonging to src_usr
+ -- into the custody of dest_usr.
+ --
+ -- In order to avoid colliding with an existing bucket owned by
+ -- the destination user, append the source user's id (in parenthesese)
+ -- to the name. If you still get a collision, add successive
+ -- spaces to the name and keep trying until you succeed.
+ --
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.biblio_record_entry_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.biblio_record_entry_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.call_number_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.call_number_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.copy_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.copy_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.user_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.user_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE container.user_bucket_item SET target_user = dest_usr WHERE target_user = src_usr;
+
+ -- vandelay.*
+ -- transfer queues the same way we transfer buckets (see above)
+ FOR queue_row in
+ SELECT id, name
+ FROM vandelay.queue
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE vandelay.queue
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = queue_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE vandelay.session_tracker SET usr = dest_usr WHERE usr = src_usr;
+
+ -- money.*
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'collector', src_usr, dest_usr);
+ UPDATE money.billable_xact SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE money.billing SET voider = dest_usr WHERE voider = src_usr;
+ UPDATE money.bnm_payment SET accepting_usr = dest_usr WHERE accepting_usr = src_usr;
+
+ -- action.*
+ UPDATE action.circulation SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.circulation SET circ_staff = dest_usr WHERE circ_staff = src_usr;
+ UPDATE action.circulation SET checkin_staff = dest_usr WHERE checkin_staff = src_usr;
+ UPDATE action.usr_circ_history SET usr = dest_usr WHERE usr = src_usr;
+
+ UPDATE action.hold_request SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.hold_request SET fulfillment_staff = dest_usr WHERE fulfillment_staff = src_usr;
+ UPDATE action.hold_request SET requestor = dest_usr WHERE requestor = src_usr;
+ UPDATE action.hold_notification SET notify_staff = dest_usr WHERE notify_staff = src_usr;
+
+ UPDATE action.in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET patron = dest_usr WHERE patron = src_usr;
+ UPDATE action.non_cat_in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.survey_response SET usr = dest_usr WHERE usr = src_usr;
+
+ -- acq.*
+ UPDATE acq.fund_allocation SET allocator = dest_usr WHERE allocator = src_usr;
+ UPDATE acq.fund_transfer SET transfer_user = dest_usr WHERE transfer_user = src_usr;
+ UPDATE acq.invoice SET closed_by = dest_usr WHERE closed_by = src_usr;
+
+ -- transfer picklists the same way we transfer buckets (see above)
+ FOR picklist_row in
+ SELECT id, name
+ FROM acq.picklist
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE acq.picklist
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = picklist_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE acq.purchase_order SET owner = dest_usr WHERE owner = src_usr;
+ UPDATE acq.po_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.po_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.provider_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.provider_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_usr_attr_definition SET usr = dest_usr WHERE usr = src_usr;
+
+ -- asset.*
+ UPDATE asset.copy SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.copy_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.call_number_note SET creator = dest_usr WHERE creator = src_usr;
+
+ -- serial.*
+ UPDATE serial.record_entry SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE serial.record_entry SET editor = dest_usr WHERE editor = src_usr;
+
+ -- reporter.*
+ -- It's not uncommon to define the reporter schema in a replica
+ -- DB only, so don't assume these tables exist in the write DB.
+ BEGIN
+ UPDATE reporter.template SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.report SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.schedule SET runner = dest_usr WHERE runner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.template_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.template_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.report_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.report_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.output_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.output_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- propagate preferred name values from the source user to the
+ -- destination user, but only when values are not being replaced.
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr)
+ UPDATE actor.usr SET
+ pref_prefix =
+ COALESCE(pref_prefix, (SELECT pref_prefix FROM susr)),
+ pref_first_given_name =
+ COALESCE(pref_first_given_name, (SELECT pref_first_given_name FROM susr)),
+ pref_second_given_name =
+ COALESCE(pref_second_given_name, (SELECT pref_second_given_name FROM susr)),
+ pref_family_name =
+ COALESCE(pref_family_name, (SELECT pref_family_name FROM susr)),
+ pref_suffix =
+ COALESCE(pref_suffix, (SELECT pref_suffix FROM susr))
+ WHERE id = dest_usr;
+
+ -- Copy and deduplicate name keywords
+ -- String -> array -> rows -> DISTINCT -> array -> string
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr),
+ dusr AS (SELECT * FROM actor.usr WHERE id = dest_usr)
+ UPDATE actor.usr SET name_keywords = (
+ WITH keywords AS (
+ SELECT DISTINCT UNNEST(
+ REGEXP_SPLIT_TO_ARRAY(
+ COALESCE((SELECT name_keywords FROM susr), '') || ' ' ||
+ COALESCE((SELECT name_keywords FROM dusr), ''), E'\\s+'
+ )
+ ) AS parts
+ ) SELECT ARRAY_TO_STRING(ARRAY_AGG(kw.parts), ' ') FROM keywords kw
+ ) WHERE id = dest_usr;
+
+ -- Finally, delete the source user
+ DELETE FROM actor.usr WHERE id = src_usr;
+
+END;
+$$ LANGUAGE plpgsql;
+
+
+SELECT evergreen.upgrade_deps_block_check('1131', :eg_version);
+
+CREATE OR REPLACE FUNCTION actor.usr_merge( src_usr INT, dest_usr INT, del_addrs BOOLEAN, del_cards BOOLEAN, deactivate_cards BOOLEAN ) RETURNS VOID AS $$
+DECLARE
+ suffix TEXT;
+ bucket_row RECORD;
+ picklist_row RECORD;
+ queue_row RECORD;
+ folder_row RECORD;
+BEGIN
+
+ -- Bail if src_usr equals dest_usr because the result of merging a
+ -- user with itself is not what you want.
+ IF src_usr = dest_usr THEN
+ RETURN;
+ END IF;
+
+ -- do some initial cleanup
+ UPDATE actor.usr SET card = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET mailing_address = NULL WHERE id = src_usr;
+ UPDATE actor.usr SET billing_address = NULL WHERE id = src_usr;
+
+ -- actor.*
+ IF del_cards THEN
+ DELETE FROM actor.card where usr = src_usr;
+ ELSE
+ IF deactivate_cards THEN
+ UPDATE actor.card SET active = 'f' WHERE usr = src_usr;
+ END IF;
+ UPDATE actor.card SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+
+ IF del_addrs THEN
+ DELETE FROM actor.usr_address WHERE usr = src_usr;
+ ELSE
+ UPDATE actor.usr_address SET usr = dest_usr WHERE usr = src_usr;
+ END IF;
+
+ UPDATE actor.usr_note SET usr = dest_usr WHERE usr = src_usr;
+ -- dupes are technically OK in actor.usr_standing_penalty, should manually delete them...
+ UPDATE actor.usr_standing_penalty SET usr = dest_usr WHERE usr = src_usr;
+ PERFORM actor.usr_merge_rows('actor.usr_org_unit_opt_in', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('actor.usr_setting', 'usr', src_usr, dest_usr);
+
+ -- permission.*
+ PERFORM actor.usr_merge_rows('permission.usr_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_object_perm_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_grp_map', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('permission.usr_work_ou_map', 'usr', src_usr, dest_usr);
+
+
+ -- container.*
+
+ -- For each *_bucket table: transfer every bucket belonging to src_usr
+ -- into the custody of dest_usr.
+ --
+ -- In order to avoid colliding with an existing bucket owned by
+ -- the destination user, append the source user's id (in parenthesese)
+ -- to the name. If you still get a collision, add successive
+ -- spaces to the name and keep trying until you succeed.
+ --
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.biblio_record_entry_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.biblio_record_entry_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.call_number_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.call_number_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.copy_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.copy_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ FOR bucket_row in
+ SELECT id, name
+ FROM container.user_bucket
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE container.user_bucket
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = bucket_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE container.user_bucket_item SET target_user = dest_usr WHERE target_user = src_usr;
+
+ -- vandelay.*
+ -- transfer queues the same way we transfer buckets (see above)
+ FOR queue_row in
+ SELECT id, name
+ FROM vandelay.queue
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE vandelay.queue
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = queue_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE vandelay.session_tracker SET usr = dest_usr WHERE usr = src_usr;
+
+ -- money.*
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'usr', src_usr, dest_usr);
+ PERFORM actor.usr_merge_rows('money.collections_tracker', 'collector', src_usr, dest_usr);
+ UPDATE money.billable_xact SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE money.billing SET voider = dest_usr WHERE voider = src_usr;
+ UPDATE money.bnm_payment SET accepting_usr = dest_usr WHERE accepting_usr = src_usr;
+
+ -- action.*
+ UPDATE action.circulation SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.circulation SET circ_staff = dest_usr WHERE circ_staff = src_usr;
+ UPDATE action.circulation SET checkin_staff = dest_usr WHERE checkin_staff = src_usr;
+ UPDATE action.usr_circ_history SET usr = dest_usr WHERE usr = src_usr;
+
+ UPDATE action.hold_request SET usr = dest_usr WHERE usr = src_usr;
+ UPDATE action.hold_request SET fulfillment_staff = dest_usr WHERE fulfillment_staff = src_usr;
+ UPDATE action.hold_request SET requestor = dest_usr WHERE requestor = src_usr;
+ UPDATE action.hold_notification SET notify_staff = dest_usr WHERE notify_staff = src_usr;
+
+ UPDATE action.in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.non_cataloged_circulation SET patron = dest_usr WHERE patron = src_usr;
+ UPDATE action.non_cat_in_house_use SET staff = dest_usr WHERE staff = src_usr;
+ UPDATE action.survey_response SET usr = dest_usr WHERE usr = src_usr;
+
+ -- acq.*
+ UPDATE acq.fund_allocation SET allocator = dest_usr WHERE allocator = src_usr;
+ UPDATE acq.fund_transfer SET transfer_user = dest_usr WHERE transfer_user = src_usr;
+ UPDATE acq.invoice SET closed_by = dest_usr WHERE closed_by = src_usr;
+
+ -- transfer picklists the same way we transfer buckets (see above)
+ FOR picklist_row in
+ SELECT id, name
+ FROM acq.picklist
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE acq.picklist
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = picklist_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+
+ UPDATE acq.purchase_order SET owner = dest_usr WHERE owner = src_usr;
+ UPDATE acq.po_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.po_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.provider_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.provider_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE acq.lineitem_note SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE acq.lineitem_usr_attr_definition SET usr = dest_usr WHERE usr = src_usr;
+
+ -- asset.*
+ UPDATE asset.copy SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.copy SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.copy_note SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE asset.call_number SET editor = dest_usr WHERE editor = src_usr;
+ UPDATE asset.call_number_note SET creator = dest_usr WHERE creator = src_usr;
+
+ -- serial.*
+ UPDATE serial.record_entry SET creator = dest_usr WHERE creator = src_usr;
+ UPDATE serial.record_entry SET editor = dest_usr WHERE editor = src_usr;
+
+ -- reporter.*
+ -- It's not uncommon to define the reporter schema in a replica
+ -- DB only, so don't assume these tables exist in the write DB.
+ BEGIN
+ UPDATE reporter.template SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.report SET owner = dest_usr WHERE owner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ UPDATE reporter.schedule SET runner = dest_usr WHERE runner = src_usr;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.template_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.template_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.report_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.report_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+ BEGIN
+ -- transfer folders the same way we transfer buckets (see above)
+ FOR folder_row in
+ SELECT id, name
+ FROM reporter.output_folder
+ WHERE owner = src_usr
+ LOOP
+ suffix := ' (' || src_usr || ')';
+ LOOP
+ BEGIN
+ UPDATE reporter.output_folder
+ SET owner = dest_usr, name = name || suffix
+ WHERE id = folder_row.id;
+ EXCEPTION WHEN unique_violation THEN
+ suffix := suffix || ' ';
+ CONTINUE;
+ END;
+ EXIT;
+ END LOOP;
+ END LOOP;
+ EXCEPTION WHEN undefined_table THEN
+ -- do nothing
+ END;
+
+ -- propagate preferred name values from the source user to the
+ -- destination user, but only when values are not being replaced.
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr)
+ UPDATE actor.usr SET
+ pref_prefix =
+ COALESCE(pref_prefix, (SELECT pref_prefix FROM susr)),
+ pref_first_given_name =
+ COALESCE(pref_first_given_name, (SELECT pref_first_given_name FROM susr)),
+ pref_second_given_name =
+ COALESCE(pref_second_given_name, (SELECT pref_second_given_name FROM susr)),
+ pref_family_name =
+ COALESCE(pref_family_name, (SELECT pref_family_name FROM susr)),
+ pref_suffix =
+ COALESCE(pref_suffix, (SELECT pref_suffix FROM susr))
+ WHERE id = dest_usr;
+
+ -- Copy and deduplicate name keywords
+ -- String -> array -> rows -> DISTINCT -> array -> string
+ WITH susr AS (SELECT * FROM actor.usr WHERE id = src_usr),
+ dusr AS (SELECT * FROM actor.usr WHERE id = dest_usr)
+ UPDATE actor.usr SET name_keywords = (
+ WITH keywords AS (
+ SELECT DISTINCT UNNEST(
+ REGEXP_SPLIT_TO_ARRAY(
+ COALESCE((SELECT name_keywords FROM susr), '') || ' ' ||
+ COALESCE((SELECT name_keywords FROM dusr), ''), E'\\s+'
+ )
+ ) AS parts
+ ) SELECT ARRAY_TO_STRING(ARRAY_AGG(kw.parts), ' ') FROM keywords kw
+ ) WHERE id = dest_usr;
+
+ -- Finally, delete the source user
+ DELETE FROM actor.usr WHERE id = src_usr;
+
+END;
+$$ LANGUAGE plpgsql;
+
+
+-- check whether patch can be applied
+SELECT evergreen.upgrade_deps_block_check('1132', :eg_version); -- remingtron/csharp
+
+-- fix two typo/pasto's in setting descriptions
+UPDATE config.org_unit_setting_type
+SET description = oils_i18n_gettext(
+ 'circ.copy_alerts.forgive_fines_on_long_overdue_checkin',
+ 'Controls whether fines are automatically forgiven when checking out an '||
+ 'item that has been marked as long-overdue, and the corresponding copy alert has been '||
+ 'suppressed.',
+ 'coust', 'description'
+)
+WHERE NAME = 'circ.copy_alerts.forgive_fines_on_long_overdue_checkin';
+
+UPDATE config.org_unit_setting_type
+SET description = oils_i18n_gettext(
+ 'circ.longoverdue.xact_open_on_zero',
+ 'Leave transaction open when long-overdue balance equals zero. ' ||
+ 'This leaves the long-overdue copy on the patron record when it is paid',
+ 'coust', 'description'
+)
+WHERE NAME = 'circ.longoverdue.xact_open_on_zero';
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1133', :eg_version);
+
+/*
+Unique indexes are not inherited by child tables, so they will not prevent
+duplicate inserts on action.transit_copy and action.hold_transit_copy,
+for example. Use check constraints instead to enforce unique-per-copy
+transits accross all transit types.
+*/
+
+-- Create an index for speedy check constraint lookups.
+CREATE INDEX active_transit_for_copy
+ ON action.transit_copy (target_copy)
+ WHERE dest_recv_time IS NULL AND cancel_time IS NULL;
+
+-- Check for duplicate transits across all transit types
+CREATE OR REPLACE FUNCTION action.copy_transit_is_unique()
+ RETURNS TRIGGER AS $func$
+BEGIN
+ PERFORM * FROM action.transit_copy
+ WHERE target_copy = NEW.target_copy
+ AND dest_recv_time IS NULL
+ AND cancel_time IS NULL;
+ IF FOUND THEN
+ RAISE EXCEPTION 'Copy id=% is already in transit', NEW.target_copy;
+ END IF;
+ RETURN NULL;
+END;
+$func$ LANGUAGE PLPGSQL STABLE;
+
+-- Apply constraint to all transit tables
+CREATE CONSTRAINT TRIGGER transit_copy_is_unique_check
+ AFTER INSERT ON action.transit_copy
+ FOR EACH ROW EXECUTE PROCEDURE action.copy_transit_is_unique();
+
+CREATE CONSTRAINT TRIGGER hold_transit_copy_is_unique_check
+ AFTER INSERT ON action.hold_transit_copy
+ FOR EACH ROW EXECUTE PROCEDURE action.copy_transit_is_unique();
+
+CREATE CONSTRAINT TRIGGER reservation_transit_copy_is_unique_check
+ AFTER INSERT ON action.reservation_transit_copy
+ FOR EACH ROW EXECUTE PROCEDURE action.copy_transit_is_unique();
+
+/*
+-- UNDO
+DROP TRIGGER transit_copy_is_unique_check ON action.transit_copy;
+DROP TRIGGER hold_transit_copy_is_unique_check ON action.hold_transit_copy;
+DROP TRIGGER reservation_transit_copy_is_unique_check ON action.reservation_transit_copy;
+DROP INDEX action.active_transit_for_copy;
+*/
+
+
+COMMIT;
+
+\qecho A unique constraint was applied to action.transit_copy. This will
+\qecho only effect newly created transits. Admins are encouraged to manually
+\qecho remove any existing duplicate transits by applying values for cancel_time
+\qecho or dest_recv_time, or by deleting the offending transits. Below is a
+\qecho query to locate duplicate transits. Note dupes may exist accross
+\qecho parent (action.transit_copy) and child tables (action.hold_transit_copy,
+\qecho action.reservation_transit_copy)
+\qecho
+\qecho WITH dupe_transits AS (
+\qecho SELECT COUNT(*), target_copy FROM action.transit_copy
+\qecho WHERE dest_recv_time IS NULL AND cancel_time IS NULL
+\qecho GROUP BY 2 HAVING COUNT(*) > 1
+\qecho ) SELECT atc.*
+\qecho FROM dupe_transits
+\qecho JOIN action.transit_copy atc USING (target_copy)
+\qecho WHERE dest_recv_time IS NULL AND cancel_time IS NULL;
+\qecho
diff --git a/Open-ILS/xul/staff_client/chrome/content/main/about.html b/Open-ILS/xul/staff_client/chrome/content/main/about.html
index b2b87b6..0e48965 100644
--- a/Open-ILS/xul/staff_client/chrome/content/main/about.html
+++ b/Open-ILS/xul/staff_client/chrome/content/main/about.html
@@ -1,7 +1,7 @@
<html><head><script></script></head><body onload="var x = document.getElementById('version'); var version ='/xul/server/'.split(/\//)[2]; if (version == 'server') { version = 'versionless debug build'; } x.appendChild(document.createTextNode(version));">
<h1 style="text-decoration: underline">Evergreen</h1>
<p>Target Server ID: <span id="version"></span></p>
-<p>$HeadURL$</p>
+<p>http://git.evergreen-ils.org/?p=Evergreen.git;a=shortlog;h=refs/heads/tags/rel_3_2_0</p>
<h2>What is Evergreen?</h2>
<blockquote>
<p>
diff --git a/Open-ILS/xul/staff_client/defaults/preferences/prefs.js b/Open-ILS/xul/staff_client/defaults/preferences/prefs.js
index 0613a13..43db7d0 100644
--- a/Open-ILS/xul/staff_client/defaults/preferences/prefs.js
+++ b/Open-ILS/xul/staff_client/defaults/preferences/prefs.js
@@ -11,7 +11,7 @@ pref("toolkit.singletonWindowType", "eg_main");
pref("open-ils.enable_join_tabs", true);
// We'll use this one to help brand some build information into the client, and rely on subversion keywords
-pref("open-ils.repository.headURL","$HeadURL$");
+pref("open-ils.repository.headURL","http://git.evergreen-ils.org/?p=Evergreen.git;a=shortlog;h=refs/heads/tags/rel_3_2_0");
pref("open-ils.repository.author","$Author$");
pref("open-ils.repository.revision","$Revision$");
pref("open-ils.repository.date","$Date$");
diff --git a/Open-ILS/xul/staff_client/windowssetup.nsi b/Open-ILS/xul/staff_client/windowssetup.nsi
index a954357..ed4c4fe 100644
--- a/Open-ILS/xul/staff_client/windowssetup.nsi
+++ b/Open-ILS/xul/staff_client/windowssetup.nsi
@@ -3,7 +3,7 @@
; HM NIS Edit Wizard helper defines
; Old versions of makensis don't like this, moved to Makefile
;!define /file PRODUCT_VERSION "client/VERSION"
-!define PRODUCT_TAG "Master"
+!define PRODUCT_TAG "3.2"
!define PRODUCT_INSTALL_TAG "${PRODUCT_TAG}"
!define UI_IMAGESET "beta"
;!define UI_IMAGESET "release"
diff --git a/README b/README
deleted file mode 120000
index 1ee2103..0000000
--- a/README
+++ /dev/null
@@ -1 +0,0 @@
-docs/installation/server_installation.adoc
\ No newline at end of file
diff --git a/README b/README
new file mode 100644
index 0000000..8b81d35
--- /dev/null
+++ b/README
@@ -0,0 +1,647 @@
+Installing the Evergreen server
+===============================
+:toc:
+:numbered:
+
+Preamble: referenced user accounts
+----------------------------------
+
+In subsequent sections, we will refer to a number of different accounts, as
+follows:
+
+ * Linux user accounts:
+ ** The *user* Linux account is the account that you use to log onto the
+ Linux system as a regular user.
+ ** The *root* Linux account is an account that has system administrator
+ privileges. On Debian you can switch to this account from
+ your *user* account by issuing the `su -` command and entering the
+ password for the *root* account when prompted. On Ubuntu you can switch
+ to this account from your *user* account using the `sudo su -` command
+ and entering the password for your *user* account when prompted.
+ ** The *opensrf* Linux account is an account that you create when installing
+ OpenSRF. You can switch to this account from the *root* account by
+ issuing the `su - opensrf` command.
+ ** The *postgres* Linux account is created automatically when you install
+ the PostgreSQL database server. You can switch to this account from the
+ *root* account by issuing the `su - postgres` command.
+ * PostgreSQL user accounts:
+ ** The *evergreen* PostgreSQL account is a superuser account that you will
+ create to connect to the PostgreSQL database server.
+ * Evergreen administrator account:
+ ** The *egadmin* Evergreen account is an administrator account for
+ Evergreen that you will use to test connectivity and configure your
+ Evergreen instance.
+
+Preamble: developer instructions
+--------------------------------
+
+[NOTE]
+Skip this section if you are using an official release tarball downloaded
+from http://evergreen-ils.org/egdownloads
+
+Developers working directly with the source code from the Git repository,
+rather than an official release tarball, must perform one step before they
+can proceed with the `./configure` step.
+
+As the *user* Linux account, issue the following command in the Evergreen
+source directory to generate the configure script and Makefiles:
+
+[source, bash]
+------------------------------------------------------------------------------
+autoreconf -i
+------------------------------------------------------------------------------
+
+Installing prerequisites
+------------------------
+
+ * **PostgreSQL**: The minimum supported version is 9.4.
+ * **Linux**: Evergreen has been tested on Debian Stretch (9),
+ Debian Jessie (8), Ubuntu Xenial Xerus (16.04), and Ubuntu
+ Trusty Tahr (14.04).
+ If you are running an older version of these distributions, you may want
+ to upgrade before upgrading Evergreen. For instructions on upgrading these
+ distributions, visit the Debian or Ubuntu websites.
+ * **OpenSRF**: The minimum supported version of OpenSRF is 3.0.0.
+
+
+Evergreen has a number of prerequisite packages that must be installed
+before you can successfully configure, compile, and install Evergreen.
+
+1. Begin by installing the most recent version of OpenSRF (3.0.0 or later).
+ You can download OpenSRF releases from http://evergreen-ils.org/opensrf-downloads/
+2. On some distributions, it is necessary to install PostgreSQL 9.4+ from external
+ repositories.
++
+ * Ubuntu (Trusty) comes with an older version of PostgreSQL, so
+ steps are taken to automatically utilize the PostgreSQL
+ community's apt sources.
+ (For complete details, see: https://wiki.postgresql.org/wiki/Apt)
+ * Debian (Jessie/Stretch) and Ubuntu (Xenial) comes with PostgreSQL 9.4+,
+ so no additional steps are required.
++
+3. Issue the following commands as the *root* Linux account to install
+ prerequisites using the `Makefile.install` prerequisite installer,
+ substituting `debian-stretch`, `debian-jessie`,`ubuntu-xenial`,
+ or `ubuntu-trusty` for <osname> below:
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>
+------------------------------------------------------------------------------
++
+4. OPTIONAL: Developer additions
++
+To perform certain developer tasks from a Git source code checkout,
+additional packages may be required. As the *root* Linux account:
++
+ * To install packages needed for retrieving and managing web dependencies,
+ use the <osname>-developer Makefile.install target. Currently,
+ this is only needed for building and installing the web
+ staff client.
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>-developer
+------------------------------------------------------------------------------
++
+ * To install packages required for building Evergreen translations, use
+ the <osname>-translator Makefile.install target.
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>-translator
+------------------------------------------------------------------------------
++
+ * To install packages required for building Evergreen release bundles, use
+ the <osname>-packager Makefile.install target.
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>-packager
+------------------------------------------------------------------------------
+
+Extra steps for web staff client
+--------------------------------
+
+[NOTE]
+Skip this entire section if you are using an official release tarball downloaded
+from http://evergreen-ils.org/downloads
+
+Install dependencies for web staff client
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+[NOTE]
+You may skip this section if you have installed the
+<<optional_developer_additions,optional developer additions>>. You will still need to do the following
+steps in <<install_files_for_web_staff_client,Install files for web staff client>>.
+
+1. Install the long-term stability (LTS) release of
+https://nodejs.org[Node.js]. Add the Node.js `/bin` directory to your
+environment variable `PATH`.
+
+[[install_files_for_web_staff_client]]
+Install AngularJS files for web staff client
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+1. Building, Testing, Minification: The remaining steps all take place within
+ the staff JS web root:
++
+[source,sh]
+------------------------------------------------------------------------------
+cd $EVERGREEN_ROOT/Open-ILS/web/js/ui/default/staff/
+------------------------------------------------------------------------------
++
+2. Install Project-local Dependencies. npm inspects the 'package.json' file
+ for dependencies and fetches them from the Node package network.
++
+[source,sh]
+------------------------------------------------------------------------------
+npm install # fetch JS dependencies
+------------------------------------------------------------------------------
++
+3. Run the build script.
++
+[source,sh]
+------------------------------------------------------------------------------
+# build, run tests, concat+minify
+npm run build-prod
+npm run test
+------------------------------------------------------------------------------
+
+[[install_files_for_angular_web_staff_client]]
+Install Angular files for web staff client
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+1. Building, Testing, Minification: The remaining steps all take place within
+ the Angular staff root:
++
+[source,sh]
+------------------------------------------------------------------------------
+cd $EVERGREEN_ROOT/Open-ILS/src/eg2/
+------------------------------------------------------------------------------
++
+2. Install Project-local Dependencies. npm inspects the 'package.json' file
+ for dependencies and fetches them from the Node package network.
++
+[source,sh]
+------------------------------------------------------------------------------
+npm install # fetch JS dependencies
+------------------------------------------------------------------------------
++
+3. Run the build script.
++
+[source,sh]
+------------------------------------------------------------------------------
+# build and run tests
+ng build --prod
+npm run test
+------------------------------------------------------------------------------
+
+Configuration and compilation instructions
+------------------------------------------
+
+For the time being, we are still installing everything in the `/openils/`
+directory. From the Evergreen source directory, issue the following commands as
+the *user* Linux account to configure and build Evergreen:
+
+[source, bash]
+------------------------------------------------------------------------------
+PATH=/openils/bin:$PATH ./configure --prefix=/openils --sysconfdir=/openils/conf
+make
+------------------------------------------------------------------------------
+
+These instructions assume that you have also installed OpenSRF under `/openils/`.
+If not, please adjust PATH as needed so that the Evergreen `configure` script
+can find `osrf_config`.
+
+Installation instructions
+-------------------------
+
+1. Once you have configured and compiled Evergreen, issue the following
+ command as the *root* Linux account to install Evergreen and copy
+ example configuration files to `/openils/conf`.
++
+[source, bash]
+------------------------------------------------------------------------------
+make install
+------------------------------------------------------------------------------
+
+Change ownership of the Evergreen files
+---------------------------------------
+
+All files in the `/openils/` directory and subdirectories must be owned by the
+`opensrf` user. Issue the following command as the *root* Linux account to
+change the ownership on the files:
+
+[source, bash]
+------------------------------------------------------------------------------
+chown -R opensrf:opensrf /openils
+------------------------------------------------------------------------------
+
+Run ldconfig
+------------
+
+On Debian Stretch, run the following command as the root user:
+
+[source, bash]
+------------------------------------------------------------------------------
+ldconfig
+------------------------------------------------------------------------------
+
+Additional Instructions for Developers
+--------------------------------------
+
+[NOTE]
+Skip this section if you are using an official release tarball downloaded
+from http://evergreen-ils.org/egdownloads
+
+Developers working directly with the source code from the Git repository,
+rather than an official release tarball, need to install the Dojo Toolkit
+set of JavaScript libraries. The appropriate version of Dojo is included in
+Evergreen release tarballs. Developers should install the Dojo 1.3.3 version
+of Dojo by issuing the following commands as the *opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+wget http://download.dojotoolkit.org/release-1.3.3/dojo-release-1.3.3.tar.gz
+tar -C /openils/var/web/js -xzf dojo-release-1.3.3.tar.gz
+cp -r /openils/var/web/js/dojo-release-1.3.3/* /openils/var/web/js/dojo/.
+------------------------------------------------------------------------------
+
+
+Configure the Apache Web server
+-------------------------------
+
+. Use the example configuration files to configure your Web server for
+the Evergreen catalog, web staff client, Web services, and administration
+interfaces. Issue the following commands as the *root* Linux account:
++
+[source,bash]
+------------------------------------------------------------------------------------
+cp Open-ILS/examples/apache_24/eg_24.conf /etc/apache2/sites-available/eg.conf
+cp Open-ILS/examples/apache_24/eg_vhost_24.conf /etc/apache2/eg_vhost.conf
+cp Open-ILS/examples/apache_24/eg_startup /etc/apache2/
+# Now set up SSL
+mkdir /etc/apache2/ssl
+cd /etc/apache2/ssl
+------------------------------------------------------------------------------------
++
+. The `openssl` command cuts a new SSL key for your Apache server. For a
+production server, you should purchase a signed SSL certificate, but you can
+just use a self-signed certificate and accept the warnings in the
+and browser during testing and development. Create an SSL key for the Apache
+server by issuing the following command as the *root* Linux account:
++
+[source,bash]
+------------------------------------------------------------------------------
+openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
+------------------------------------------------------------------------------
++
+. As the *root* Linux account, edit the `eg.conf` file that you copied into
+place.
+ a. To enable access to the offline upload / execute interface from any
+ workstation on any network, make the following change (and note that
+ you *must* secure this for a production instance):
+ * Replace `Require host 10.0.0.0/8` with `Require all granted`
+. Change the user for the Apache server.
+ * As the *root* Linux account, edit
+ `/etc/apache2/envvars`. Change `export APACHE_RUN_USER=www-data` to
+ `export APACHE_RUN_USER=opensrf`.
+. As the *root* Linux account, configure Apache with KeepAlive settings
+ appropriate for Evergreen. Higher values can improve the performance of a
+ single client by allowing multiple requests to be sent over the same TCP
+ connection, but increase the risk of using up all available Apache child
+ processes and memory.
+ * Edit `/etc/apache2/apache2.conf`.
+ a. Change `KeepAliveTimeout` to `1`.
+ b. Change `MaxKeepAliveRequests` to `100`.
+. As the *root* Linux account, configure the prefork module to start and keep
+ enough Apache servers available to provide quick responses to clients without
+ running out of memory. The following settings are a good starting point for a
+ site that exposes the default Evergreen catalogue to the web:
++
+.`/etc/apache2/mods-available/mpm_prefork.conf`
+[source,bash]
+------------------------------------------------------------------------------
+<IfModule mpm_prefork_module>
+ StartServers 15
+ MinSpareServers 5
+ MaxSpareServers 15
+ MaxRequestWorkers 75
+ MaxConnectionsPerChild 500
+</IfModule>
+------------------------------------------------------------------------------
++
+. As the *root* user, enable the mpm_prefork module:
++
+[source,bash]
+------------------------------------------------------------------------------
+a2dismod mpm_event
+a2enmod mpm_prefork
+------------------------------------------------------------------------------
++
+. As the *root* Linux account, enable the Evergreen site:
++
+[source,bash]
+------------------------------------------------------------------------------
+a2dissite 000-default # OPTIONAL: disable the default site (the "It Works" page)
+a2ensite eg.conf
+------------------------------------------------------------------------------
++
+. As the *root* Linux account, enable Apache to write
+ to the lock directory; this is currently necessary because Apache
+ is running as the `opensrf` user:
++
+[source,bash]
+------------------------------------------------------------------------------
+chown opensrf /var/lock/apache2
+------------------------------------------------------------------------------
+
+Learn more about additional Apache options in the following sections:
+
+ * <<_apache_rewrite_tricks,Apache Rewrite Tricks>>
+ * <<_apache_access_handler_perl_module,Apache Access Handler Perl Module>>
+
+Configure OpenSRF for the Evergreen application
+-----------------------------------------------
+There are a number of example OpenSRF configuration files in `/openils/conf/`
+that you can use as a template for your Evergreen installation. Issue the
+following commands as the *opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+cp -b /openils/conf/opensrf_core.xml.example /openils/conf/opensrf_core.xml
+cp -b /openils/conf/opensrf.xml.example /openils/conf/opensrf.xml
+------------------------------------------------------------------------------
+
+When you installed OpenSRF, you created four Jabber users on two
+separate domains and edited the `opensrf_core.xml` file accordingly. Please
+refer back to the OpenSRF README and, as the *opensrf* Linux account, edit the
+Evergreen version of the `opensrf_core.xml` file using the same Jabber users
+and domains as you used while installing and testing OpenSRF.
+
+[NOTE]
+The `-b` flag tells the `cp` command to create a backup version of the
+destination file. The backup version of the destination file has a tilde (`~`)
+appended to the file name, so if you have forgotten the Jabber users and
+domains, you can retrieve the settings from the backup version of the files.
+
+`eg_db_config`, described in <<_creating_the_evergreen_database,Creating the Evergreen
+database>>, sets the database connection information in `opensrf.xml` for you.
+
+Configure action triggers for the Evergreen application
+-------------------------------------------------------
+_Action Triggers_ provide hooks for the system to perform actions when a given
+event occurs; for example, to generate reminder or overdue notices, the
+`checkout.due` hook is processed and events are triggered for potential actions
+if there is no checkin time.
+
+To enable the default set of hooks, issue the following command as the
+*opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+cp -b /openils/conf/action_trigger_filters.json.example /openils/conf/action_trigger_filters.json
+------------------------------------------------------------------------------
+
+For more information about configuring and running action triggers, see
+<<_processing_action_triggers,Notifications / Action Triggers>>.
+
+Creating the Evergreen database
+-------------------------------
+
+Setting up the PostgreSQL server
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+For production use, most libraries install the PostgreSQL database server on a
+dedicated machine. Therefore, by default, the `Makefile.install` prerequisite
+installer does *not* install the PostgreSQL 9 database server that is required
+by every Evergreen system. You can install the packages required by Debian or
+Ubuntu on the machine of your choice using the following commands as the
+*root* Linux account:
+
+. Installing PostgreSQL server packages
+
+Each OS build target provides the postgres server installation packages
+required for each operating system. To install Postgres server packages,
+use the make target 'postgres-server-<OSTYPE>'. Choose the most appropriate
+command below based on your operating system.
+
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-stretch
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-jessie
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-trusty
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-xenial
+------------------------------------------------------------------------------
+
+For a standalone PostgreSQL server, install the following Perl modules for your
+distribution as the *root* Linux account:
+
+.(Debian and Ubuntu)
+No extra modules required for these distributions.
+
+You need to create a PostgreSQL superuser to create and access the database.
+Issue the following command as the *postgres* Linux account to create a new
+PostgreSQL superuser named `evergreen`. When prompted, enter the new user's
+password:
+
+[source, bash]
+------------------------------------------------------------------------------
+createuser -s -P evergreen
+------------------------------------------------------------------------------
+
+.Enabling connections to the PostgreSQL database
+
+Your PostgreSQL database may be configured by default to prevent connections,
+for example, it might reject attempts to connect via TCP/IP or from other
+servers. To enable TCP/IP connections from localhost, check your `pg_hba.conf`
+file, found in the `/etc/postgresql/` directory on Debian and Ubuntu.
+A simple way to enable TCP/IP
+connections from localhost to all databases with password authentication, which
+would be suitable for a test install of Evergreen on a single server, is to
+ensure the file contains the following entries _before_ any "host ... ident"
+entries:
+
+------------------------------------------------------------------------------
+host all all ::1/128 md5
+host all all 127.0.0.1/32 md5
+------------------------------------------------------------------------------
+
+When you change the `pg_hba.conf` file, you will need to reload PostgreSQL to
+make the changes take effect. For more information on configuring connectivity
+to PostgreSQL, see
+http://www.postgresql.org/docs/devel/static/auth-pg-hba-conf.html
+
+Creating the Evergreen database and schema
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Once you have created the *evergreen* PostgreSQL account, you also need to
+create the database and schema, and configure your configuration files to point
+at the database server. Issue the following command as the *root* Linux account
+from inside the Evergreen source directory, replacing <user>, <password>,
+<hostname>, <port>, and <dbname> with the appropriate values for your
+PostgreSQL database (where <user> and <password> are for the *evergreen*
+PostgreSQL account you just created), and replace <admin-user> and <admin-pass>
+with the values you want for the *egadmin* Evergreen administrator account:
+
+[source, bash]
+------------------------------------------------------------------------------
+perl Open-ILS/src/support-scripts/eg_db_config --update-config \
+ --service all --create-database --create-schema --create-offline \
+ --user <user> --password <password> --hostname <hostname> --port <port> \
+ --database <dbname> --admin-user <admin-user> --admin-pass <admin-pass>
+------------------------------------------------------------------------------
+
+This creates the database and schema and configures all of the services in
+your `/openils/conf/opensrf.xml` configuration file to point to that database.
+It also creates the configuration files required by the Evergreen `cgi-bin`
+administration scripts, and sets the user name and password for the *egadmin*
+Evergreen administrator account to your requested values.
+
+You can get a complete set of options for `eg_db_config` by passing the
+`--help` parameter.
+
+Loading sample data
+~~~~~~~~~~~~~~~~~~~
+If you add the `--load-all-sample` parameter to the `eg_db_config` command,
+a set of authority and bibliographic records, call numbers, copies, staff
+and regular users, and transactions will be loaded into your target
+database. This sample dataset is commonly referred to as the _concerto_
+sample data, and can be useful for testing out Evergreen functionality and
+for creating problem reports that developers can easily recreate with their
+own copy of the _concerto_ sample data.
+
+Creating the database on a remote server
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+In a production instance of Evergreen, your PostgreSQL server should be
+installed on a dedicated server.
+
+PostgreSQL 9.4 and later
+^^^^^^^^^^^^^^^^^^^^^^^^
+To create the database instance on a remote database server running PostgreSQL
+9.4 or later, simply use the `--create-database` flag on `eg_db_config`.
+
+Starting Evergreen
+------------------
+1. As the *root* Linux account, start the `memcached` and `ejabberd` services
+(if they aren't already running):
++
+[source, bash]
+------------------------------------------------------------------------------
+/etc/init.d/ejabberd start
+/etc/init.d/memcached start
+------------------------------------------------------------------------------
++
+2. As the *opensrf* Linux account, start Evergreen. The `-l` flag in the
+following command is only necessary if you want to force Evergreen to treat the
+hostname as `localhost`; if you configured `opensrf.xml` using the real
+hostname of your machine as returned by `perl -ENet::Domain 'print
+Net::Domain::hostfqdn() . "\n";'`, you should not use the `-l` flag.
++
+[source, bash]
+------------------------------------------------------------------------------
+osrf_control -l --start-all
+------------------------------------------------------------------------------
++
+ ** If you receive the error message `bash: osrf_control: command not found`,
+ then your environment variable `PATH` does not include the `/openils/bin`
+ directory; this should have been set in the *opensrf* Linux account's
+ `.bashrc` configuration file. To manually set the `PATH` variable, edit the
+ configuration file `~/.bashrc` as the *opensrf* Linux account and add the
+ following line:
++
+[source, bash]
+------------------------------------------------------------------------------
+export PATH=$PATH:/openils/bin
+------------------------------------------------------------------------------
++
+3. As the *opensrf* Linux account, generate the Web files needed by the web staff
+ client and catalogue and update the organization unit proximity (you need to do
+ this the first time you start Evergreen, and after that each time you change the library org unit configuration.
+):
++
+[source, bash]
+------------------------------------------------------------------------------
+autogen.sh
+------------------------------------------------------------------------------
++
+4. As the *root* Linux account, restart the Apache Web server:
++
+[source, bash]
+------------------------------------------------------------------------------
+/etc/init.d/apache2 restart
+------------------------------------------------------------------------------
++
+If the Apache Web server was running when you started the OpenSRF services, you
+might not be able to successfully log in to the OPAC or web staff client until the
+Apache Web server is restarted.
+
+Testing connections to Evergreen
+--------------------------------
+
+Once you have installed and started Evergreen, test your connection to
+Evergreen via `srfsh`. As the *opensrf* Linux account, issue the following
+commands to start `srfsh` and try to log onto the Evergreen server using the
+*egadmin* Evergreen administrator user name and password that you set using the
+`eg_db_config` command:
+
+[source, bash]
+------------------------------------------------------------------------------
+/openils/bin/srfsh
+srfsh% login <admin-user> <admin-pass>
+------------------------------------------------------------------------------
+
+You should see a result like:
+
+ Received Data: "250bf1518c7527a03249858687714376"
+ ------------------------------------
+ Request Completed Successfully
+ Request Time in seconds: 0.045286
+ ------------------------------------
+
+ Received Data: {
+ "ilsevent":0,
+ "textcode":"SUCCESS",
+ "desc":" ",
+ "pid":21616,
+ "stacktrace":"oils_auth.c:304",
+ "payload":{
+ "authtoken":"e5f9827cc0f93b503a1cc66bee6bdd1a",
+ "authtime":420
+ }
+
+ }
+
+ ------------------------------------
+ Request Completed Successfully
+ Request Time in seconds: 1.336568
+ ------------------------------------
+[[install-troubleshooting-1]]
+If this does not work, it's time to do some troubleshooting.
+
+ * As the *opensrf* Linux account, run the `settings-tester.pl` script to see
+ if it finds any system configuration problems. The script is found at
+ `Open-ILS/src/support-scripts/settings-tester.pl` in the Evergreen source
+ tree.
+ * Follow the steps in the http://evergreen-ils.org/dokuwiki/doku.php?id=troubleshooting:checking_for_errors[troubleshooting guide].
+ * If you have faithfully followed the entire set of installation steps
+ listed here, you are probably extremely close to a working system.
+ Gather your configuration files and log files and contact the
+ http://evergreen-ils.org/communicate/mailing-lists/[Evergreen development
+mailing list] for assistance before making any drastic changes to your system
+ configuration.
+
+Getting help
+------------
+
+Need help installing or using Evergreen? Join the mailing lists at
+http://evergreen-ils.org/communicate/mailing-lists/ or contact us on the Freenode
+IRC network on the #evergreen channel.
+
+License
+-------
+This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
+Unported License. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative
+Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
diff --git a/configure.ac b/configure.ac
index dacb5a3..fd69d57 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,8 +20,8 @@
export PATH=${PATH}:/usr/sbin
AC_PREREQ(2.61)
-AC_INIT(Open-ILS, trunk, open-ils-dev at list.georgialibraries.org)
-AM_INIT_AUTOMAKE([OpenILS], [trunk])
+AC_INIT(Open-ILS, 3.2.0, open-ils-dev at list.georgialibraries.org)
+AM_INIT_AUTOMAKE([OpenILS], [3.2.0])
AC_REVISION($Revision: 0.1 $)
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_SUBDIRS([Open-ILS/xul/staff_client/external/libmar])
commit 6c0fc5ebb4a542b13d22d0c45dfaa371719d4c08
Author: Mike Rylander <mrylander at gmail.com>
Date: Mon Aug 27 12:08:37 2018 -0400
LP#1786987: Locale-less org tree cache object becomes stale
The autogen.sh script calls a function that flushes all org tree objects
cached by locale, but does not flush the one used when the locale is
unkown. This commit forces that flushing to occur.
berick: Definition of my $cache pushed up above first use.
Signed-off-by: Mike Rylander <mrylander at gmail.com>
Signed-off-by: Bill Erickson <berickxx at gmail.com>
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Utils/Configure.pm b/Open-ILS/src/perlmods/lib/OpenILS/Utils/Configure.pm
index 4bd5b3a..351a129 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/Utils/Configure.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/Utils/Configure.pm
@@ -88,9 +88,12 @@ sub org_tree_js {
# Get our list of locales
my $locales = get_locales();
+ # Remove the no-locale copy
+ my $cache = OpenSRF::Utils::Cache->new;
+ $cache->delete_cache("orgtree.");
+
foreach my $locale (@$locales) {
warn "removing OrgTree from the cache for locale " . $locale->code . "...\n";
- my $cache = OpenSRF::Utils::Cache->new;
$cache->delete_cache("orgtree.".$locale->code);
# fetch the org_unit's and org_unit_type's
-----------------------------------------------------------------------
hooks/post-receive
--
Evergreen ILS
More information about the open-ils-commits
mailing list