From: Dan Wells Date: Tue, 25 Sep 2018 19:12:53 +0000 (-0400) Subject: Bumping version numbers, adding Upgrade Script and Changelog X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=aa0ae67977b3727dd9b37b6103fcfc7aa60e5f39;p=evergreen%2Fpines.git Bumping version numbers, adding Upgrade Script and Changelog Signed-off-by: Dan Wells --- diff --git a/ChangeLog b/ChangeLog index 1f72b2c73e..c3a1a2903c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,5225 @@ -Evergreen doesn't keep a GNU-style ChangeLog except in release tarballs. -Those seeking a change log are encouraged to run 'git log -v', or read -it online at: http://git.evergreen-ils.org/?p=Evergreen.git;a=log +commit d34df02951bd08670687d22e43d350b39a14347f +Author: Mike Rylander +Date: Mon Aug 27 12:08:37 2018 -0400 + + LP#1786987: Locale-less org tree cache object becomes stale + + The autogen.sh script calls a function that flushes all org tree objects + cached by locale, but does not flush the one used when the locale is + unkown. This commit forces that flushing to occur. + + berick: Definition of my $cache pushed up above first use. + + Signed-off-by: Mike Rylander + Signed-off-by: Bill Erickson + +4 1 Open-ILS/src/perlmods/lib/OpenILS/Utils/Configure.pm + +commit 7df3d1640938c01ee28b5f692db13d8a3fbfbbd3 +Author: Dan Wells +Date: Mon Sep 24 17:47:24 2018 -0400 + + Update upgrade doc version numbers + + Signed-off-by: Dan Wells + +16 16 docs/installation/server_upgrade.adoc + +commit a199c376e4082f8eab0332b989c5217d91ad9242 +Author: Dan Wells +Date: Mon Sep 24 17:38:19 2018 -0400 + + Bumping Perl version string for 3.2 + + Signed-off-by: Dan Wells + +1 1 Open-ILS/src/perlmods/lib/OpenILS.pm + +commit 44cce14902dd778865f092344f168ddceaacb3fa +Author: Remington Steed +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 + +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 +Date: Tue Sep 25 13:04:11 2018 -0400 + + Translation updates - newpot + + Signed-off-by: Dan Wells + +140 87 build/i18n/po/webstaff/webstaff.pot + +commit 468e6f0330da5b6922b65cc8461753c5b1aba87b +Author: Dan Wells +Date: Mon Sep 24 17:33:12 2018 -0400 + + Translation updates - po files + + Signed-off-by: Dan Wells + +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 +Date: Mon Sep 24 17:23:45 2018 -0400 + + Docs: Remove old release notes files + + Signed-off-by: Remington Steed + +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 +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 + +161 16 docs/RELEASE_NOTES_3_2.adoc + +commit 1830cf6b7a2dc83f2f2a2b027f1e35cb4cd986a2 +Author: Remington Steed +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 + +49 5 docs/RELEASE_NOTES_3_2.adoc + +commit 861a750946844bb8642addeba7ca1832c0f98639 +Author: Remington Steed +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 + +1 1 docs/RELEASE_NOTES_3_2.adoc +1 1 docs/acquisitions/selection_lists_po.adoc + +commit 25f60b4e7d9ba78cb96cd177659c8f82493287e2 +Author: Bill Erickson +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 + Signed-off-by: Dan Wells + +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 +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 + 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 + Signed-off-by: Kathy Lussier + +15 1 Open-ILS/src/perlmods/t/14-OpenILS-Utils.t + +commit 110624bac23fcd0e53fef11d2af091c942e6d9aa +Author: Galen Charlton +Date: Mon Sep 24 13:55:39 2018 -0400 + + LP#1789442: restore column allocation for barcode input + + Signed-off-by: Galen Charlton + Signed-off-by: Kathy Lussier + +1 1 Open-ILS/src/templates/staff/circ/patron/t_checkout.tt2 + +commit 867da55cd97a0973b20ce0df26a6f4edfa7645eb +Author: Galen Charlton +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 + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Kathy Lussier + +5 7 Open-ILS/src/templates/staff/circ/patron/t_checkout.tt2 + +commit b1c3b925764f6d8bf7cfe8b9f9c9a4ebe4c09d04 +Author: Galen Charlton +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 + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Jason Stephenson + +2 2 Open-ILS/src/templates/staff/cat/share/t_marcedit.tt2 + +commit 8cdf97e8c608d10d41287d5f32f500badad9e2a4 +Author: Mike Rylander +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 + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Cat.pm + +commit f6cea03d0d017e2a1581aacdba096286f4002aa4 +Author: Galen Charlton +Date: Fri Sep 21 16:46:17 2018 -0400 + + LP#1791340: expand on comment about backdated checkin times + + Signed-off-by: Galen Charlton + +4 0 Open-ILS/web/js/ui/default/staff/circ/checkin/app.js + +commit c09dd9af04f4ac68307c953f623a930afe107e6d +Author: Dan Wells +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 + Signed-off-by: Galen Charlton + +4 4 Open-ILS/web/js/ui/default/staff/circ/checkin/app.js + +commit 1c3b4a9fac28e1e49234837debb275a8665abb40 +Author: Galen Charlton +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 + Signed-off-by: Mike Rylander + +16 7 Open-ILS/web/js/ui/default/staff/serials/services/core.js + +commit 437e7f826a9a36be2db65f96ad6862c9bea1094d +Author: Mike Rylander +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 + Signed-off-by: Jeanette Lundgren + Signed-off-by: Jason Stephenson + +5 12 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm + +commit a0a885fe5e7e4d1da89cf1da54df7feaac7cf524 +Author: Mike Rylander +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 + Signed-off-by: Jeanette Lundgren + Signed-off-by: Jason Stephenson + +10 3 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm + +commit 140ff94d566acf262486152bad8395b32429ed4b +Author: Mike Rylander +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 + Signed-off-by: Kathy Lussier + +32 32 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js + +commit 443ed531a19fdea611a01f931252316cffbbce47 +Author: Mike Rylander +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 + Signed-off-by: Kathy Lussier + +25 3 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js + +commit b98f8efea5a1937704c94b3de534d9028fd09d40 +Author: Mike Rylander +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 + Signed-off-by: Kathy Lussier + + 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 +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 + Signed-off-by: Terran McCanna + Signed-off-by: Kathy Lussier + +5 0 Open-ILS/web/js/ui/default/opac/record_selectors.js + +commit 5876118b87d38fc2a48af176473fd14e2208c2ed +Author: Kathy Lussier +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 + +1 1 Open-ILS/src/templates/staff/cat/catalog/t_add_to_bucket.tt2 + +commit 9157e87540ab6fbd4f7e19ddd6a8151f6b00cadb +Author: Sam Link +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 + +4 4 Open-ILS/src/templates/staff/cat/catalog/t_add_to_bucket.tt2 + +commit 1c1bc36222e90f34a94e6ba38c8daf7f90775283 +Author: Bill Erickson +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 + Signed-off-by: Kathy Lussier + +9 0 Open-ILS/src/templates/staff/circ/share/t_hold_shelf_dialog.tt2 + +commit 870cecad0ac527b5ceaf4d5b893f6612fce2867c +Author: Library Tech +Date: Tue Sep 18 16:12:57 2018 -0400 + + Translation updates - newpot + + Signed-off-by: Library Tech + +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 +Date: Wed Aug 22 19:46:10 2018 -0400 + + LP#1538691: Release notes entry for consistent terminology + + Signed-off-by: Kathy Lussier + Signed-off-by: Dan Wells + +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 +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 + Signed-off-by: Dan Wells + +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 +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 + + 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 + +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 +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 + Signed-off-by: Kathy Lussier + +20 3 Open-ILS/src/templates/opac/myopac/prefs.tt2 + +commit 86f732b4eade6a22b66979cb8258168ebbf1cbb2 +Author: Bill Erickson +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 + Signed-off-by: Kathy Lussier + +1 1 Open-ILS/src/templates/staff/circ/patron/t_summary.tt2 + +commit af72b32e28e1bca2ca22d0b23050c0874d4e7eb4 +Author: Kathy Lussier +Date: Tue Sep 18 14:53:47 2018 -0400 + + LP#1787274: Stamping upgrade script for no dupe transits + + Signed-off-by: Kathy Lussier + +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 +Date: Tue Sep 18 11:21:26 2018 -0400 + + LP#1787274 One active transit pgtap tests + + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Kathy Lussier + +13 2 Open-ILS/web/js/ui/default/staff/circ/services/circ.js + +commit cbdc7768e1e7026312f62e83fb8057cb47f193f2 +Author: Jane Sandberg +Date: Tue Sep 18 11:28:55 2018 -0700 + + Docs: LP1793184 adding to the 3.2 release notes + + Signed-off-by: Jane Sandberg + +3 2 docs/RELEASE_NOTES_3_2.adoc + +commit 9f8afc49756e7511aad843cc9f9f9cf2dc072b61 +Author: Jason Boyer +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 + Signed-off-by: Amy Constantino + Signed-off-by: Jason Stephenson + +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 +Date: Thu Sep 13 15:26:46 2018 -0400 + + LP#1745610 - Add release notes for hold targeter script change. + + Signed-off-by: Chris Sharp + Signed-off-by: Bill Erickson + +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 +Date: Thu Sep 13 15:25:21 2018 -0400 + + LP#1745610 - Update Makefile.am to reflect filename changes. + + Signed-off-by: Chris Sharp + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/Makefile.am + +commit 1873334054549b2c53b3aa2afd483d6bcda758aa +Author: Chris Sharp +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 + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Terran McCanna + Signed-off-by: Mike Rylander + +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 +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 + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Kyle Huckins + Signed-off-by: Galen Charlton + +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 +Date: Fri Sep 7 15:59:35 2018 -0400 + + LP#1511742 Org unit selector typeahead + + Reimplements 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 + Signed-off-by: Kyle Huckins + Signed-off-by: Galen Charlton + +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 +Date: Fri Sep 14 10:06:33 2018 -0400 + + LP#1739286: Belt and suspenders on radio button flags + + Signed-off-by: Mike Rylander + +1 0 Open-ILS/web/js/ui/default/staff/cat/services/z3950.js + +commit 8b0e06fd7c87a20750e51fc0df5ce3e7818d59e1 +Author: Jason Etheridge +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 + Signed-off-by: Chris Sharp + Signed-off-by: Mike Rylander + +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 +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 + Signed-off-by: Garry Collum + Signed-off-by: Galen Charlton + +1 1 Open-ILS/src/templates/staff/circ/patron/t_checkout.tt2 + +commit 65f5afc47e9ed0d3006eeba963c6c7057479cdae +Author: Galen Charlton +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 + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm + +commit f594e2854a172ad61a5a27eaf3804d42a4a07020 +Author: Chris Sharp +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 +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 + Signed-off-by: Chris Sharp + +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 +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 + Signed-off-by: John Amundson + Signed-off-by: Galen Charlton + +6 0 Open-ILS/src/templates/staff/cat/item/t_holds_pane.tt2 + +commit fab90985f34028b203a8de46c0f681b310fcb857 +Author: a. bellenir +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 + Signed-off-by: Jeff Davis + Signed-off-by: Chris Sharp + +1 1 Open-ILS/web/js/ui/default/staff/circ/services/item.js + +commit b19a728dbc515dde495174a5c4fb306c42af0291 +Author: a. bellenir +Date: Mon Jun 4 19:41:55 2018 -0400 + + LP#1773434 missing option to "Show in Catalog" + + Signed-off-by: a. bellenir + Signed-off-by: Garry Collum + Signed-off-by: Chris Sharp + +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 +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 + +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 +Date: Thu Sep 13 10:16:04 2018 -0400 + + LP#1786534: stamp schema update + + Signed-off-by: Galen Charlton + +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 +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 + +35 1 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor_usr_merge-bail-on-same-user.sql + +commit ecae2ccba6ef760ea1ad90e1e7cac2fa60fe3dd7 +Author: Jason Stephenson +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 + Signed-off-by: Michele Morgan + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: John Amundson + Signed-off-by: Jason Stephenson + +3 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm + +commit cf2298b38273697e14381a442968e9e2097dbf79 +Author: Cesar Velez +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 + Signed-off-by: John Amundson + Signed-off-by: Jason Stephenson + +1 1 Open-ILS/src/templates/staff/circ/patron/t_bills_list.tt2 + +commit be9f2cccfe464d1fb99f686e1f09e4c2ba70d953 +Author: Jane Sandberg +Date: Mon Sep 10 11:23:12 2018 -0700 + + LP 1743654: Removing a duplicate flesh_fields array entry + + Signed-off-by: Jane Sandberg + Signed-off-by: John Amundson + Signed-off-by: Jason Stephenson + +1 1 Open-ILS/web/js/ui/default/staff/circ/services/item.js + +commit 5eaa1710418e237cd6ec9745b9c77e978b5fba5d +Author: Jane Sandberg +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 + Signed-off-by: John Amundson + Signed-off-by: Jason Stephenson + +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 +Date: Wed Sep 12 14:26:25 2018 -0400 + + LP#1718459: Remove apache 2.2 language from README + + Signed-off-by: Ben Shum + +3 5 docs/installation/server_installation.adoc + +commit c6437c29fdeb0a922eac46aa1d4f2190e43e9307 +Author: Jason Stephenson +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 + Signed-off-by: Ben Shum + +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 +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 + Signed-off-by: Ben Shum + +1 1 Open-ILS/src/templates/kpac/getit.tt2 + +commit f3e7a335a930842cc5129f6334eed8f285208c38 +Author: Jane Sandberg +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 + Signed-off-by: Beth Willis + Signed-off-by: Ben Shum + +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 +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 + Signed-off-by: Ben Shum + +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 +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 + Signed-off-by: Ben Shum + +1 1 Open-ILS/src/templates/staff/cat/item/t_circs_pane.tt2 + +commit ef3fa1488e4a84f998a4ba2671d796a553f7c07c +Author: Cesar Velez +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 + + Signed-off-by: Jason Etheridge + +5 1 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js + +commit 7417b395d9b790cbcd66914a3884b6a3d248d2e0 +Author: Cesar Velez +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 + + Signed-off-by: Jason Etheridge + +4 2 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js + +commit ad1d99ce712afef42c099b935d377f97a8ffb385 +Author: Cesar Velez +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 + + Signed-off-by: Jason Etheridge + +41 4 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js + +commit 6fb3aaba241eee24be54751b63e923436c38d047 +Author: Bill Erickson +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 + Signed-off-by: Chris Sharp + +16 0 Open-ILS/src/support-scripts/edi_order_pusher.pl + +commit 8310bfccaaa30d0a8171a1050b42cbb280b93653 +Author: Jane Sandberg +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 + Signed-off-by: Garry Collum + Signed-off-by: Galen Charlton + +1 1 Open-ILS/web/js/ui/default/staff/circ/services/item.js + +commit e763bd684550bf44093734f14fb93ce05cddd458 +Author: Bill Erickson +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 + Signed-off-by: Garry Collum + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Jane Sandberg + Signed-off-by: Galen Charlton + +1 1 Open-ILS/web/js/ui/default/staff/cat/services/marcedit.js + +commit f58e975bb6ddeacef05ee84b6ba58323f98f8ca4 +Author: Jane Sandberg +Date: Tue Sep 11 09:15:19 2018 -0700 + + Docs: Adding info about supercat filters + + Signed-off-by: Jane Sandberg + +14 0 docs/development/data_supercat.adoc + +commit 8bedbe0f06719418be323fe9c8e7b4e37cf0148d +Author: Dan Wells +Date: Fri Sep 7 11:21:00 2018 -0400 + + Translation updates - po files + + Signed-off-by: Dan Wells + +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 +Date: Fri Sep 7 07:34:36 2018 -0700 + + Docs: finalizing acknowledgments section for 3.2 release notes + + Signed-off-by: Jane Sandberg + +5 0 docs/RELEASE_NOTES_3_2.adoc + +commit 296b81441b3157fecf2509270e0ff0c638047659 +Author: Andrea Buntz Neiman +Date: Fri Sep 7 07:27:02 2018 -0700 + + Docs: Adding Equinox Open Library Initiative's acknowledgments + + Signed-off-by: Jane Sandberg + +13 0 docs/RELEASE_NOTES_3_2.adoc + +commit bb466cd966fa3a2677e886d0c12364856b66c46a +Author: Jane Sandberg +Date: Thu Sep 6 21:01:17 2018 -0700 + + Docs: documenting new 3.2 features based on release notes + + Signed-off-by: Jane Sandberg + +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 +Date: Thu Sep 6 17:24:06 2018 -0700 + + Docs: spellchecking 3.2 release notes + + Signed-off-by: Jane Sandberg + +1212 1184 docs/.aspell.en.pws +6 6 docs/RELEASE_NOTES_3_2.adoc + +commit b7abce6cbd5e74e2456a3f52424f16031b20740d +Author: Jane Sandberg +Date: Thu Sep 6 17:09:53 2018 -0700 + + Docs: adding more contributor info to 3.2 release notes + + Signed-off-by: Jane Sandberg + +22 1 docs/RELEASE_NOTES_3_2.adoc + +commit bb8c14f0afdf8660d8f0fc701dadbe60f44f79a6 +Author: Galen Charlton +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 + + Signed-off-by: Jason Stephenson + +7 3 Open-ILS/src/Makefile.am + +commit 43e0db09a9c784619b5adfb6caaf8af21197bfb9 +Author: Jane Sandberg +Date: Thu Sep 6 15:00:26 2018 -0700 + + Docs: Adding two more entries to 3.2 release notes + + Signed-off-by: Jane Sandberg + +88 0 docs/RELEASE_NOTES_3_2.adoc + +commit 0469a1cb06a6adcaf80e04325618be9fca3895c7 +Author: Galen Charlton +Date: Wed Sep 5 16:44:08 2018 -0400 + + LP#1790923: add release notes + + Signed-off-by: Galen Charlton + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Bill Erickson + +7 8 docs/installation/server_installation.adoc + +commit e3032ad3cd1fe2e684c949613b82841efd401867 +Author: Galen Charlton +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 + Signed-off-by: Bill Erickson + +0 2 build/tools/make_release + +commit 23fd5ef82afefa0732df9f4f386888ccffad8b1a +Author: Galen Charlton +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 + Signed-off-by: Bill Erickson + +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 +Date: Thu Sep 6 17:07:35 2018 -0400 + + LP#1775466 Stamping DB upgrade for Ang6 app + + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Bill Erickson + +1 1 build/tools/make_release + +commit 52f83fe0fd7b5765dd541d597def27040eceee35 +Author: Galen Charlton +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 + Signed-off-by: Bill Erickson + +4 0 Open-ILS/src/eg2/src/app/staff/nav.component.html + +commit c37f7ba9e3cfbf7ff0feeb9c77710d706d63697d +Author: Galen Charlton +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 + Signed-off-by: Bill Erickson + +4 0 docs/RELEASE_NOTES_NEXT/Architecture/angular6-app.adoc + +commit d28eeddfd5dda73db0b017a94c37573f68057f33 +Author: Bill Erickson +Date: Wed Sep 5 15:53:28 2018 -0400 + + LP#1775466 Angular6 base app release notes + + Signed-off-by: Bill Erickson + Signed-off-by: Galen Charlton + +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 +Date: Wed Sep 5 15:55:11 2018 -0400 + + LP#1775466 make_release builds Angular app + + Signed-off-by: Bill Erickson + Signed-off-by: Galen Charlton + +12 2 build/tools/make_release + +commit 060af9b3739033bc276b692b45c118b6eb4ba83b +Author: Bill Erickson +Date: Wed Sep 5 15:57:51 2018 -0400 + + LP#1775466 Add Angular building to install docs + + Signed-off-by: Bill Erickson + Signed-off-by: Galen Charlton + +43 2 docs/installation/server_installation.adoc + +commit 9a79de4aa33b52f55397bcbcd6cd9f84c3dff149 +Author: Bill Erickson +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 + Signed-off-by: Galen Charlton + +1 1 Open-ILS/src/extras/Makefile.install +1 1 Open-ILS/src/extras/install/Makefile.common + +commit e8cf82d0ddb13dfbcbf96bf7528ce34e9574c0d1 +Author: Bill Erickson +Date: Wed Sep 5 15:58:23 2018 -0400 + + LP#1775466 Angular Apache configuration updates + + Signed-off-by: Bill Erickson + Signed-off-by: Galen Charlton + +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 +Date: Wed Sep 5 15:54:21 2018 -0400 + + LP#1775466 Acq admin grid workstation settings + + Signed-off-by: Bill Erickson + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Galen Charlton + +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 +Date: Wed Sep 5 16:11:41 2018 -0400 + + LP#1775466 Angular(6) base application + + Signed-off-by: Bill Erickson + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Galen Charlton + +80 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm + +commit b0f99db6c9cf141fe10addccce075b95a26e6595 +Author: Bill Erickson +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 + Signed-off-by: Galen Charlton + +1 1 Open-ILS/examples/fm_IDL.xml + +commit 0f68495b9fcabb3b7cd85af697f08afabf8a6657 +Author: Jane Sandberg +Date: Thu Sep 6 12:45:46 2018 -0700 + + More additions to the 3.2 release notes + + Signed-off-by: Jane Sandberg + +8 2 docs/RELEASE_NOTES_3_2.adoc + +commit 689e9af8cfe5bfa7dbfd7475a8033054a23a0de8 +Author: Jane Sandberg +Date: Thu Sep 6 12:05:17 2018 -0700 + + Docs: adding translators to 3.2 release notes + + Signed-off-by: Jane Sandberg + +5 2 docs/RELEASE_NOTES_3_2.adoc + +commit 26d975edb233bed65801703c7c9747ff825aca9d +Author: Jane Sandberg +Date: Thu Sep 6 11:47:21 2018 -0700 + + Docs: creating basic release notes for 3.2 + + Signed-off-by: Jane Sandberg + +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 +Date: Thu Sep 6 10:57:54 2018 -0400 + + Translation updates - newpot + + Signed-off-by: Ben Shum + +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 +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 + Signed-off-by: Ben Shum + +21 1 Open-ILS/src/perlmods/live_t/22-acq-requests.t + +commit 505e46bd6d843629fbcb822abd2d6eac6036d6e0 +Author: Bill Erickson +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 + Signed-off-by: Ben Shum + +5 4 Open-ILS/src/perlmods/live_t/16-acq-invoicing.t + +commit 19e5d9750d5132cefdd78122fd5b7f8e58d50612 +Author: Bill Erickson +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 + Signed-off-by: Galen Charlton + +28 2 Open-ILS/web/js/ui/default/staff/services/auth.js + +commit 9266a76a9f11fcc419e38d99a114216b9266aef6 +Author: Bill Erickson +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 + Signed-off-by: Galen Charlton + +8 5 Open-ILS/web/js/ui/default/staff/services/net.js + +commit 90c716e3bd4be9c449a9e5d71849abd8d4f07e4f +Author: Galen Charlton +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 + Signed-off-by: John Amundson + Signed-off-by: Jason Stephenson + +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 +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 + Signed-off-by: Joan Kranich + Signed-off-by: Galen Charlton + +16 2 Open-ILS/web/js/ui/default/staff/circ/services/circ.js + +commit 11d9725b548c609b4610de55195b40f41e1c42ee +Author: Kathy Lussier +Date: Tue Sep 4 23:55:08 2018 -0400 + + LP#1635354: Stamping upgrade script for acqusitions invoice timestamp + + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Kathy Lussier + +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 +Date: Wed Mar 14 12:56:07 2018 -0400 + + LP#1635354 Invoice close date/by release notes + + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Kathy Lussier + +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 +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., + + + Signed-off-by: Mike Rylander + Signed-off-by: Galen Charlton + + Signed-off-by: Kathy Lussier + +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 +Date: Tue Sep 4 17:37:32 2018 -0400 + + LP#1774277 Stamping upgrade for patron acq reqs + + Signed-off-by: Bill Erickson + +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 +Date: Thu Aug 23 15:18:05 2018 -0400 + + lp1774277 release notes for patron acq requests + + Signed-off-by: Bill Erickson + +6 0 docs/RELEASE_NOTES_NEXT/Acquisitions/PatronRequests.adoc + create mode 100644 docs/RELEASE_NOTES_NEXT/Acquisitions/PatronRequests.adoc + +commit e9a9875da27e85e8437c082b6e40ad39ff9a1ba6 +Author: Jason Etheridge +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 + + toward acq requests + + Signed-off-by: Jason Etheridge + + 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 + + 6-upc-not-on-patron-request-form + + Adds a UPC column to the patron acq request table + + Signed-off-by: Jason Etheridge + + 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 + + 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 + + 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 + + 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 + + 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 + + handle undefined values for email/hold checkboxes + + Signed-off-by: Jason Etheridge + + 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 + + match pcrud perm for aur with aurs + + Signed-off-by: Jason Etheridge + + live_t/ test + + Signed-off-by: Jason Etheridge + Signed-off-by: Bill Erickson + +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 +Date: Tue Sep 4 18:35:28 2018 -0400 + + LP#1514085: stamp schema update + + Signed-off-by: Galen Charlton + +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 +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 + +8 0 docs/RELEASE_NOTES_NEXT/Cataloging/async-vandelay.adoc + +commit 889898936925335c545091721b6db008148625b3 +Author: Galen Charlton +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 + +31 0 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay-state-tracking.sql + +commit 96bd60b86409c53da3238df335e1a9ad299cc29e +Author: Bill Erickson +Date: Thu Aug 23 14:17:11 2018 -0400 + + LP#1514085 Release notes for vandelay session tracking + + Signed-off-by: Bill Erickson + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Galen Charlton + +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 +Date: Tue Sep 4 16:36:09 2018 -0400 + + LP#1777675 Stamping upgrade script for latest inventory date support + + Signed-off-by: Dan Wells + +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 +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 + Signed-off-by: Dan Wells + +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 +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 + Signed-off-by: Kathy Lussier + +2 2 Open-ILS/examples/fm_IDL.xml + +commit 1781f399b5458ac08783ba0c8e70f71abea90c6b +Author: Dan Wells +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 + Signed-off-by: Kathy Lussier + +2 2 Open-ILS/src/templates/staff/circ/checkin/t_checkin.tt2 + +commit cfdb4b998b8c751ea8ce60aaf47ddecae0ab4797 +Author: Remington Steed +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 + Signed-off-by: Dan Wells + Signed-off-by: Kathy Lussier + +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 +Date: Tue Aug 21 13:31:59 2018 -0400 + + LP#1777675: Release notes entry for inventory date + + Signed-off-by: Kathy Lussier + Signed-off-by: Dan Wells + +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 +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 + Signed-off-by: Dan Wells + +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 +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 + Signed-off-by: Kathy Lussier + + Conflicts: + Open-ILS/web/js/ui/default/staff/circ/services/item.js + + Signed-off-by: Dan Wells + +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 +Date: Tue Sep 4 13:37:33 2018 -0400 + + LP#1712854 Stamping DB upgrade for hold UIs sort/speed + + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Bill Erickson + +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 +Date: Thu Aug 30 16:48:23 2018 -0400 + + LP#1712854: Provide context-relevant default sort orders + + Signed-off-by: Mike Rylander + Signed-off-by: Kathy Lussier + Signed-off-by: Bill Erickson + +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 +Date: Thu Aug 30 16:37:21 2018 -0400 + + LP#1712854: Include shelf-expired holds in the "clearable" set + + Signed-off-by: Mike Rylander + Signed-off-by: Kathy Lussier + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm + +commit 5cbc171516a9ed68bbbfa1d6058c97255e907f25 +Author: Mike Rylander +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 + Signed-off-by: Kathy Lussier + Signed-off-by: Bill Erickson + +23 10 Open-ILS/web/js/ui/default/staff/circ/holds/app.js + +commit 3af031b4a1449d5e28bbaa15e5bdcf7a451c2c5f +Author: Mike Rylander +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 + Signed-off-by: Kathy Lussier + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Kathy Lussier + Signed-off-by: Bill Erickson + +2 2 Open-ILS/src/templates/staff/circ/holds/t_shelf_list.tt2 + +commit 14af809466039334348ba38b8417fb462d57f55b +Author: Mike Rylander +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 + Signed-off-by: Kathy Lussier + + Conflicts: + Open-ILS/web/js/ui/default/staff/services/hatch.js + + Signed-off-by: Bill Erickson + +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 +Date: Tue Sep 4 14:07:38 2018 -0400 + + LP#1779920: stamp database update + + Signed-off-by: Galen Charlton + +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 +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 + +19 6 docs/RELEASE_NOTES_NEXT/Circulation/Autorenewal_Feature.adoc + +commit 12294ccda64e0792b43a0970217d1658e4e36824 +Author: Bill Erickson +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 + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Bill Erickson + + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Cesar Velez + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Bill Erickson + + Signed-off-by: Galen Charlton + +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 +Date: Tue Sep 4 13:32:46 2018 -0400 + + LP#1776020: stamp database update + + Signed-off-by: Galen Charlton + +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 +Date: Mon Aug 27 22:49:12 2018 -0400 + + LP#1776020 Deduplicate name keywords in patron merge + + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Kathy Lussier + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Bill Erickson + Signed-off-by: Galen Charlton + +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 +Date: Tue Aug 21 21:31:15 2018 -0400 + + LP#1776020 Release notes for pref name / keywords + + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + Signed-off-by: Galen Charlton + +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 +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 + Signed-off-by: Kathy Lussier + Signed-off-by: Galen Charlton + +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 +Date: Sun Jun 3 21:09:20 2018 -0700 + + LP1752370: Add weight column to metabib fields grid + + Signed-off-by: Jane Sandberg + Signed-off-by: Kathy Lussier + +1 0 Open-ILS/src/templates/staff/admin/server/config/metabib_field.tt2 + +commit 349d7e394ad943ddf1d09d1aef3c4870b29cfb70 +Author: Bill Erickson +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 + Signed-off-by: Michele Morgan + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Michele Morgan + Signed-off-by: Kathy Lussier + +2 0 Open-ILS/src/templates/staff/share/t_autogrid.tt2 + +commit 1e9c0ab388a0697a1f099970240f2da21bfb5e1f +Author: Bill Erickson +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 + Signed-off-by: Michele Morgan + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Michele Morgan + Signed-off-by: Kathy Lussier + +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 +Date: Thu Aug 30 12:37:45 2018 -0400 + + LP#1744756: Stamping upgrade script for custom perm group display + + Signed-off-by: Kathy Lussier + +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 +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 + + Changes to be committed: + modified: Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js + + Signed-off-by: Kathy Lussier + +12 3 Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js + +commit afaa47a266f72117d754c767317c4e159eb21142 +Author: Kyle Huckins +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 + +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 +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 + Signed-off-by: Kyle Huckins + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + +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 +Date: Wed Aug 29 18:18:54 2018 -0400 + + Forward-port 3.1.5 upgrade script + + Signed-off-by: Dan Wells + +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 +Date: Wed Aug 29 18:18:25 2018 -0400 + + Forward-port 3.0.11 upgrade script + + Signed-off-by: Dan Wells + +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 +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 + Signed-off-by: Mike Rylander + +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 +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 + Signed-off-by: Bill Erickson + Signed-off-by: Mike Rylander + +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 +Date: Fri Aug 24 16:05:09 2018 -0400 + + LP#1768902 Stamping DB upgrade for Z39 UPC + + Signed-off-by: Bill Erickson + +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 +Date: Thu May 3 12:36:31 2018 -0500 + + LP#1768902: quick release note entry + + Signed-off-by: Ben Shum + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Garry Collum + Signed-off-by: Bill Erickson + +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 +Date: Tue May 1 03:22:15 2018 -0500 + + Docs: adding release notes and docs for LP1760160 + + Signed-off-by: Jane Sandberg + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/templates/opac/home.tt2 +2 1 Open-ILS/src/templates/opac/parts/searchbar.tt2 + +commit 6afaf84691f593c8a48e528c4f54ef7f991a8a22 +Author: Bill Erickson +Date: Thu Aug 23 12:26:11 2018 -0400 + + LP 1768715: pingest.pl merge conflict typo fix: skip_dispaly + + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/support-scripts/pingest.pl + +commit 4118424b8d80dfb34f3e32c12e1f538a20f8aa92 +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Bill Erickson + +2 2 Open-ILS/src/support-scripts/pingest.pl + +commit ddfa6af287dc9c7fc69f558ab8e7b99ab9df4f15 +Author: Jeff Godin +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 + Signed-off-by: Jason Stephenson + Signed-off-by: Bill Erickson + +3 3 Open-ILS/src/support-scripts/pingest.pl + +commit 55093af49ba1d0bd5f63a1206972703ae31d273c +Author: Jason Stephenson +Date: Tue Nov 21 21:23:03 2017 -0500 + + LP 1768715: Whitespace cleanup in Blake's commit. + + Signed-off-by: Jason Stephenson + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/support-scripts/pingest.pl + +commit 7e007cc03694799d2b5a49f6c6791df706b51d4d +Author: Blake GH +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 + Signed-off-by: Jason Stephenson + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/support-scripts/pingest.pl + +commit d81eb554d9cc40b2b4339fe0ae68847587c8a12f +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +6 2 Open-ILS/src/support-scripts/pingest.pl + +commit 3fc6f07190a31ff9c2c52caac10374fc5fe9b9bb +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/support-scripts/pingest.pl + +commit fa3af4113a3f8cff1bc2fb43dfc62af2977db78f +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +3 3 Open-ILS/src/support-scripts/pingest.pl + +commit bee32963d1be36b22ea1984a90262149f6330faf +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +18 3 Open-ILS/src/support-scripts/pingest.pl + +commit fe5ba7746f7ec5a1d33195160c00654a7bd869dc +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +3 3 Open-ILS/src/support-scripts/pingest.pl + +commit 1f2f392b42c5e1e10488d2034a0686c7e8768ad4 +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +2 3 Open-ILS/src/support-scripts/pingest.pl + +commit 2da2f10b1e9f744cd57da8ced8fdb8779f1b5511 +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +2 2 Open-ILS/src/support-scripts/pingest.pl + +commit d762c9eb243eeb66f827873e602919598a1cf88d +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/support-scripts/pingest.pl + +commit 844a1fbea2b94dc34802099c5b13376f0fbfab1d +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +27 3 Open-ILS/src/support-scripts/pingest.pl + +commit 28d87c24928344307fc68338aa01ca2c1d97173a +Author: Bill Erickson +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 + Signed-off-by: Jason Stephenson + +104 43 Open-ILS/src/support-scripts/pingest.pl + +commit 1ceab5e76d05e507da85302be22137f13d4a8635 +Author: Jason Stephenson +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 + Signed-off-by: Bill Erickson + +214 0 Open-ILS/src/support-scripts/pingest.pl + create mode 100755 Open-ILS/src/support-scripts/pingest.pl + +commit bd8912ee2d1016619ee208d513815072071fc6be +Author: Jeff Davis +Date: Wed Nov 15 14:36:21 2017 -0800 + + LP#1732552: Move OPAC login username hint to separate template + + Signed-off-by: Jeff Davis + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Jason Stephenson + Signed-off-by: Chris Sharp + +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 +Date: Wed Aug 15 18:10:08 2018 -0400 + + LP#1775216: Stamping upgrade script for inconsistent copy counts + + Signed-off-by: Kathy Lussier + +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 +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 + +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 +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 + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Kathy Lussier + Signed-off-by: Bill Erickson + +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 +Date: Wed Aug 15 11:31:01 2018 -0400 + + Translation updates - newpot + + Signed-off-by: Ben Shum + +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 +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 + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Mike Rylander + +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 +Date: Fri Aug 3 13:29:14 2018 -0400 + + LP#1750894: Stamping upgrade script for workstation settings on server + + Signed-off-by: Kathy Lussier + +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 +Date: Fri Aug 3 11:39:15 2018 -0400 + + LP#1750894 Remove errant phantomjs-killing comma + + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + +1 1 Open-ILS/web/js/ui/default/staff/services/hatch.js + +commit 73b7ace22996370f5bc8e338f115a3d9dd03b349 +Author: Bill Erickson +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 + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Kathy Lussier + +25 11 Open-ILS/web/js/ui/default/staff/services/hatch.js + +commit a61fc24476f6c24bceea2a4b0b9cc900ac0fe735 +Author: Bill Erickson +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 + Signed-off-by: Kathy Lussier + +1 1 Open-ILS/web/js/ui/default/staff/services/hatch.js + +commit edd1e288917ddde1cebedf3df57732af5fc86d8a +Author: Bill Erickson +Date: Fri Jul 27 17:26:08 2018 -0400 + + LP#1750894 Bump perm ID; apply consistently + + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + +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 +Date: Mon Jun 4 17:14:24 2018 -0400 + + LP#1750894 Store grid limits in grid config + + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + +38 8 Open-ILS/web/js/ui/default/staff/services/grid.js + +commit f06c3c2110e164b01a46014972258ba41423aa7a +Author: Bill Erickson +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 + Signed-off-by: Kathy Lussier + +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 +Date: Wed May 30 16:38:56 2018 -0400 + + LP#1750894 Workstation/Cascade setting pgtap tests + + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + +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 +Date: Tue May 29 11:47:16 2018 -0400 + + LP#1750894 Workstation/Cascade settings Release Notes + + Signed-off-by: Bill Erickson + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Kathy Lussier + +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 +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 + Signed-off-by: Chris Sharp + +4 1 Open-ILS/src/perlmods/live_t/04-overdue_with_closed_dates.t + +commit 15c4db3b46d7c279ce5552ad55b08d3fe861bfb0 +Author: Bill Erickson +Date: Thu Jul 26 14:40:00 2018 -0400 + + LP#1766716 Stamping emergency closing DB upgrade + + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Bill Erickson + +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 +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 + +1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/ClosedDates.pm + +commit a440cb0787455a97363eb045d4bd19a865ad19d2 +Author: Galen Charlton +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 + Signed-off-by: Bill Erickson + +1 1 Open-ILS/src/templates/staff/config.tt2 + +commit 71c46499d080f38c53bd3b8ee34852e973a2daf1 +Author: Mike Rylander +Date: Tue Apr 24 16:45:31 2018 -0400 + + LP#1766716: Release notes + + Signed-off-by: Mike Rylander + Signed-off-by: Bill Erickson + +22 0 docs/RELEASE_NOTES_NEXT/Circulation/EmergencyClosingHandler.adoc + create mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/EmergencyClosingHandler.adoc + +commit 5caa4344f460f8496589b641854634cf799a6dca +Author: Mike Rylander +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 + Signed-off-by: Bill Erickson + +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 +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 + Signed-off-by: Bill Erickson + +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 +Date: Thu Jul 26 10:38:02 2018 -0400 + + Forward-port 3.0.10 upgrade script + + Signed-off-by: Dan Wells + +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 +Date: Thu Jul 12 09:24:48 2018 -0400 + + Stamping upgrade script + + Signed-off-by: Mike Rylander + +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 +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 + Signed-off-by: Chris Sharp + +1 1 Open-ILS/src/templates/staff/circ/patron/t_items_out.tt2 + +commit 6c511a7d53eefa0b543c2212f8064f60cd74dd7a +Author: Cesar Velez +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 + Signed-off-by: Galen Charlton + + Signed-off-by: Chris Sharp + +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 +Date: Fri Jun 29 12:41:26 2018 -0400 + + Forward port 3.0.9 upgrade script + + Signed-off-by: Dan Wells + +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 +Date: Mon Jun 4 09:06:55 2018 -0400 + + Forward port 3.0.8 upgrade script + + Signed-off-by: Dan Wells + +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 +Date: Fri May 25 14:12:25 2018 -0400 + + Moving upgrade script into place + + Signed-off-by: Mike Rylander + +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 +Date: Fri May 25 14:11:02 2018 -0400 + + Stamping upgrade script + + Signed-off-by: Mike Rylander + +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 +Date: Sun May 13 17:01:10 2018 -0700 + + Docs: starting 3.0.8 release notes + + Signed-off-by: Jane Sandberg + +78 1 docs/RELEASE_NOTES_3_0.adoc + +commit d8e092ac014beee99ca75224a7524d3c0f41690b +Author: Ben Shum +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 +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 +Date: Tue May 1 22:08:13 2018 -0500 + + LP#1387722: Stamping upgrade script + + Signed-off-by: Ben Shum + +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 +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 + Signed-off-by: Ben Shum + +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 +Date: Thu Apr 19 09:49:54 2018 -0400 + + Forward-port 3.0.7 upgrade script + + Signed-off-by: Dan Wells + +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 +Date: Wed Apr 18 16:25:34 2018 -0400 + + Touch up release notes for 3.0.7 + + Signed-off-by: Dan Wells + +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 d750216454..8d6014eec9 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 2aade1c737..a598bdc8b5 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 0000000000..bc276b0d57 --- /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 = +$$ +
+ +
    + [% 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; + %] + +
  1. + Bib ID# [% bre_id %] ISBN: [% isbn %]
    + Title: [% title %]
    + Author: [% author %]
    + Publication Info: [% publisher %] [% pubdate %]
    + Item Type: [% item_type %] +
  2. + [% END %] + [% END %] +
+
+$$ +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 b2b87b683f..0e489654b6 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 @@

Evergreen

Target Server ID:

-

$HeadURL$

+

http://git.evergreen-ils.org/?p=Evergreen.git;a=shortlog;h=refs/heads/tags/rel_3_2_0

What is Evergreen?

diff --git a/Open-ILS/xul/staff_client/defaults/preferences/prefs.js b/Open-ILS/xul/staff_client/defaults/preferences/prefs.js index 0613a13ddf..43db7d073c 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 a9543579a8..ed4c4febe1 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 1ee2103e6f..0000000000 --- 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 0000000000..8b81d350f1 --- /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 below: ++ +[source, bash] +------------------------------------------------------------------------------ +make -f Open-ILS/src/extras/Makefile.install +------------------------------------------------------------------------------ ++ +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 -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 -developer +------------------------------------------------------------------------------ ++ + * To install packages required for building Evergreen translations, use + the -translator Makefile.install target. ++ +[source, bash] +------------------------------------------------------------------------------ +make -f Open-ILS/src/extras/Makefile.install -translator +------------------------------------------------------------------------------ ++ + * To install packages required for building Evergreen release bundles, use + the -packager Makefile.install target. ++ +[source, bash] +------------------------------------------------------------------------------ +make -f Open-ILS/src/extras/Makefile.install -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 +<>. You will still need to do the following +steps in <>. + +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] +------------------------------------------------------------------------------ + + StartServers 15 + MinSpareServers 5 + MaxSpareServers 15 + MaxRequestWorkers 75 + MaxConnectionsPerChild 500 + +------------------------------------------------------------------------------ ++ +. 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-'. 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 , , +, , and with the appropriate values for your +PostgreSQL database (where and are for the *evergreen* +PostgreSQL account you just created), and replace and +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 --password --hostname --port \ + --database --admin-user --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 +------------------------------------------------------------------------------ + +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 dacb5a36b7..fd69d57241 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@list.georgialibraries.org) -AM_INIT_AUTOMAKE([OpenILS], [trunk]) +AC_INIT(Open-ILS, 3.2.0, open-ils-dev@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])