[open-ils-commits] [GIT] Evergreen ILS branch tags/rel_3_2_rc1 updated. b0c70b6fec191872975278c2310d4fa8722429e9

Evergreen Git git at git.evergreen-ils.org
Wed Sep 26 12:01:24 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_rc1 has been updated
       via  b0c70b6fec191872975278c2310d4fa8722429e9 (commit)
       via  83504d6e883a4576deb6dec7f8a8ea729c6c3670 (commit)
       via  7df3d1640938c01ee28b5f692db13d8a3fbfbbd3 (commit)
       via  a199c376e4082f8eab0332b989c5217d91ad9242 (commit)
      from  44cce14902dd778865f092344f168ddceaacb3fa (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit b0c70b6fec191872975278c2310d4fa8722429e9
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..048d5bd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5221 @@
-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 83504d6e883a4576deb6dec7f8a8ea729c6c3670
+Author: Dan Wells <dbw2 at calvin.edu>
+Date:   Tue Sep 25 14:58:41 2018 -0400
+
+    Add RC1 "branding" to the file
+    
+    This tries to strike a balance between making the release as true
+    as possible to final while still keeping it identifiable.
+    
+    Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+4	4	docs/installation/server_upgrade.adoc
+
+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 83504d6e883a4576deb6dec7f8a8ea729c6c3670
Author: Dan Wells <dbw2 at calvin.edu>
Date:   Tue Sep 25 14:58:41 2018 -0400

    Add RC1 "branding" to the file
    
    This tries to strike a balance between making the release as true
    as possible to final while still keeping it identifiable.
    
    Signed-off-by: Dan Wells <dbw2 at calvin.edu>

diff --git a/docs/installation/server_upgrade.adoc b/docs/installation/server_upgrade.adoc
index c81e35b..3a54e19 100644
--- a/docs/installation/server_upgrade.adoc
+++ b/docs/installation/server_upgrade.adoc
@@ -7,7 +7,7 @@ Software Prerequisites
 ~~~~~~~~~~~~~~~~~~~~~~
 
   * **PostgreSQL**: The minimum supported version is 9.4.
-  * **Linux**: Evergreen 3.2.0 has been tested on Debian Stretch (9.0),
+  * **Linux**: Evergreen 3.2.0 [RC1] has been tested on Debian Stretch (9.0),
     Debian Jessie (8.0), 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
@@ -42,12 +42,12 @@ osrf_control --localhost --stop-all
  .. Back up the /openils directory.
 . Upgrade OpenSRF. Download and install the latest version of OpenSRF from
 the https://evergreen-ils.org/opensrf-downloads/[OpenSRF download page].
-. As the *opensrf* user, download and extract Evergreen 3.2.0:
+. As the *opensrf* user, download and extract Evergreen 3.2.0 [RC1]:
 +
 [source, bash]
 -----------------------------------------------
-wget https://evergreen-ils.org/downloads/Evergreen-ILS-3.2.0.tar.gz
-tar xzf Evergreen-ILS-3.2.0.tar.gz
+wget https://evergreen-ils.org/downloads/Evergreen-ILS-3.2-rc1.tar.gz
+tar xzf Evergreen-ILS-3.2-rc1.tar.gz
 -----------------------------------------------
 +
 [NOTE]

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>

diff --git a/docs/installation/server_upgrade.adoc b/docs/installation/server_upgrade.adoc
index 1983804..c81e35b 100644
--- a/docs/installation/server_upgrade.adoc
+++ b/docs/installation/server_upgrade.adoc
@@ -7,7 +7,7 @@ Software Prerequisites
 ~~~~~~~~~~~~~~~~~~~~~~
 
   * **PostgreSQL**: The minimum supported version is 9.4.
-  * **Linux**: Evergreen 2.12.0 has been tested on Debian Stretch (9.0),
+  * **Linux**: Evergreen 3.2.0 has been tested on Debian Stretch (9.0),
     Debian Jessie (8.0), 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
@@ -42,12 +42,12 @@ osrf_control --localhost --stop-all
  .. Back up the /openils directory.
 . Upgrade OpenSRF. Download and install the latest version of OpenSRF from
 the https://evergreen-ils.org/opensrf-downloads/[OpenSRF download page].
-. As the *opensrf* user, download and extract Evergreen 2.12.0:
+. As the *opensrf* user, download and extract Evergreen 3.2.0:
 +
 [source, bash]
 -----------------------------------------------
-wget https://evergreen-ils.org/downloads/Evergreen-ILS-2.12.0.tar.gz
-tar xzf Evergreen-ILS-2.12.0.tar.gz
+wget https://evergreen-ils.org/downloads/Evergreen-ILS-3.2.0.tar.gz
+tar xzf Evergreen-ILS-3.2.0.tar.gz
 -----------------------------------------------
 +
 [NOTE]
@@ -57,7 +57,7 @@ For the latest edition of Evergreen, check the https://evergreen-ils.org/egdownl
 +
 [source, bash]
 ---------------------------------------------
-cd /home/opensrf/Evergreen-ILS-2.12.0
+cd /home/opensrf/Evergreen-ILS-3.2.0
 ---------------------------------------------
 +
 On the next command, replace `[distribution]` with one of these values for your
@@ -81,7 +81,7 @@ make -f Open-ILS/src/extras/Makefile.install [distribution]
 +
 [source, bash]
 ------------------------------------------------------------
-cd /home/opensrf/Evergreen-ILS-2.12.0
+cd /home/opensrf/Evergreen-ILS-3.2.0
 PATH=/openils/bin:$PATH ./configure --prefix=/openils --sysconfdir=/openils/conf
 make
 ------------------------------------------------------------
@@ -92,7 +92,7 @@ These instructions assume that you have also installed OpenSRF under /openils/.
 +
 [source, bash]
 ------------------------------------------------------------
-cd /home/opensrf/Evergreen-ILS-2.12.0
+cd /home/opensrf/Evergreen-ILS-3.2.0
 make install
 ------------------------------------------------------------
 +
@@ -103,8 +103,8 @@ can supply `STAFF_CLIENT_STAMP` during the `make install` step like this:
 +
 [source, bash]
 ------------------------------------------------------------
-cd /home/opensrf/Evergreen-ILS-2.12.0
-make STAFF_CLIENT_STAMP_ID=rel_2_12_rc install
+cd /home/opensrf/Evergreen-ILS-3.2.0
+make STAFF_CLIENT_STAMP_ID=rel_3_2_0 install
 ------------------------------------------------------------
 +
 . As the *root* user, change all files to be owned by the opensrf user and group:
@@ -121,7 +121,7 @@ chown -R opensrf:opensrf /openils
 -----------------------------------------------------------
 cd /openils/var/web/xul/
 rm server
-ln -sf rel_2_12_rc/server server
+ln -sf rel_3_2_0/server server
 ----------------------------------------------------------
 +
 . As the *opensrf* user, update opensrf_core.xml and opensrf.xml by copying the
@@ -141,7 +141,7 @@ Copying these configuration files will remove any customizations you have made t
 +
 [source, bash]
 -------------------------------------------------------------------------
-cd /home/opensrf/Evergreen-ILS-2.12.0
+cd /home/opensrf/Evergreen-ILS-3.2.0
 perl Open-ILS/src/support-scripts/eg_db_config --update-config --service all \
 --create-offline --database evergreen --host localhost --user evergreen --password evergreen
 -------------------------------------------------------------------------
@@ -165,21 +165,21 @@ The diff command can be used to show the differences between the distribution ve
 +
 [source, bash]
 ----------------------------------------------------------
-cp /home/opensrf/Evergreen-ILS-2.12.0/Open-ILS/examples/apache/eg_startup /etc/apache2/eg_startup
+cp /home/opensrf/Evergreen-ILS-3.2.0/Open-ILS/examples/apache/eg_startup /etc/apache2/eg_startup
 ----------------------------------------------------------
 +
 .. Update /etc/apache2/eg_vhost.conf by copying the example from Open-ILS/examples/apache/eg_vhost.conf.
 +
 [source, bash]
 ----------------------------------------------------------
-cp /home/opensrf/Evergreen-ILS-2.12.0/Open-ILS/examples/apache/eg_vhost.conf /etc/apache2/eg_vhost.conf
+cp /home/opensrf/Evergreen-ILS-3.2.0/Open-ILS/examples/apache/eg_vhost.conf /etc/apache2/eg_vhost.conf
 ----------------------------------------------------------
 +
 .. Update /etc/apache2/sites-available/eg.conf by copying the example from Open-ILS/examples/apache/eg.conf.
 +
 [source, bash]
 ----------------------------------------------------------
-cp /home/opensrf/Evergreen-ILS-2.12.0/Open-ILS/examples/apache/eg.conf /etc/apache2/sites-available/eg.conf
+cp /home/opensrf/Evergreen-ILS-3.2.0/Open-ILS/examples/apache/eg.conf /etc/apache2/sites-available/eg.conf
 ----------------------------------------------------------
 
 Upgrade the Evergreen database schema
@@ -278,8 +278,8 @@ as a user with the ability to connect to the database server.
 
 [source, bash]
 ----------------------------------------------------------
-cd /home/opensrf/Evergreen-ILS-2.12.0/Open-ILS/src/sql/Pg
-psql -U evergreen -h localhost -f version-upgrade/2.11.3-2.12.0-upgrade-db.sql evergreen
+cd /home/opensrf/Evergreen-ILS-3.2.0/Open-ILS/src/sql/Pg
+psql -U evergreen -h localhost -f version-upgrade/3.1.5-3.2.0-upgrade-db.sql evergreen
 ----------------------------------------------------------
 
 [TIP]

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>

diff --git a/Open-ILS/src/perlmods/lib/OpenILS.pm b/Open-ILS/src/perlmods/lib/OpenILS.pm
index d7235ce..d74f91f 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS.pm
@@ -6,6 +6,6 @@ OpenILS - Client and server support for the Evergreen open source library system
 
 =cut
 
-our $VERSION = '2.4';
+our $VERSION = '3.0200';
 
 1;

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          | 5224 +++++++++++++++++++-
 Open-ILS/src/perlmods/lib/OpenILS.pm               |    2 +-
 Open-ILS/src/perlmods/lib/OpenILS/Application.pm   |    2 +-
 Open-ILS/src/sql/Pg/002.schema.config.sql          |    1 +
 .../Pg/version-upgrade/3.1.5-3.2.0-upgrade-db.sql  | 4904 ++++++++++++++++++
 .../staff_client/chrome/content/main/about.html    |    2 +-
 .../xul/staff_client/defaults/preferences/prefs.js |    2 +-
 Open-ILS/xul/staff_client/windowssetup.nsi         |    2 +-
 README                                             |  648 +++-
 configure.ac                                       |    4 +-
 docs/installation/server_upgrade.adoc              |   32 +-
 11 files changed, 10796 insertions(+), 27 deletions(-)
 create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.1.5-3.2.0-upgrade-db.sql
 mode change 120000 => 100644 README


hooks/post-receive
-- 
Evergreen ILS




More information about the open-ils-commits mailing list