-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 3ec3e425c4fb2d80cdb6b5255c1a06ef039abe75
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Tue Aug 11 14:41:20 2020 -0700
+
+ bumping Perl version string for 3.5.1
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS.pm
+
+commit f18002fc8abf9f067be2bfbc2fb1d359d6afbdfb
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Tue Aug 11 14:40:15 2020 -0700
+
+ Translation updates - po files
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+3 3 build/i18n/po/AutoFieldWidget.js/ar-JO.po
+3 3 build/i18n/po/AutoFieldWidget.js/cs-CZ.po
+3 3 build/i18n/po/AutoFieldWidget.js/de-DE.po
+3 3 build/i18n/po/AutoFieldWidget.js/en-CA.po
+3 3 build/i18n/po/AutoFieldWidget.js/en-GB.po
+3 3 build/i18n/po/AutoFieldWidget.js/es-ES.po
+3 3 build/i18n/po/AutoFieldWidget.js/fi-FI.po
+3 3 build/i18n/po/AutoFieldWidget.js/fr-CA.po
+3 3 build/i18n/po/AutoFieldWidget.js/he-IL.po
+3 3 build/i18n/po/AutoFieldWidget.js/hu-HU.po
+3 3 build/i18n/po/AutoFieldWidget.js/hy-AM.po
+3 3 build/i18n/po/AutoFieldWidget.js/oc-FR.po
+3 3 build/i18n/po/AutoFieldWidget.js/pt-BR.po
+3 3 build/i18n/po/AutoFieldWidget.js/ru-RU.po
+3 3 build/i18n/po/AutoFieldWidget.js/sv-SE.po
+3 3 build/i18n/po/AutoFieldWidget.js/tr-TR.po
+3 3 build/i18n/po/FlattenerGrid.js/ar-JO.po
+3 3 build/i18n/po/FlattenerGrid.js/cs-CZ.po
+3 3 build/i18n/po/FlattenerGrid.js/de-DE.po
+3 3 build/i18n/po/FlattenerGrid.js/en-CA.po
+3 3 build/i18n/po/FlattenerGrid.js/en-GB.po
+3 3 build/i18n/po/FlattenerGrid.js/es-ES.po
+3 3 build/i18n/po/FlattenerGrid.js/fi-FI.po
+3 3 build/i18n/po/FlattenerGrid.js/fr-CA.po
+3 3 build/i18n/po/FlattenerGrid.js/hy-AM.po
+3 3 build/i18n/po/PCrudFilterPane.js/ar-JO.po
+3 3 build/i18n/po/PCrudFilterPane.js/cs-CZ.po
+3 3 build/i18n/po/PCrudFilterPane.js/de-DE.po
+3 3 build/i18n/po/PCrudFilterPane.js/en-GB.po
+3 3 build/i18n/po/PCrudFilterPane.js/es-ES.po
+3 3 build/i18n/po/PCrudFilterPane.js/fi-FI.po
+3 3 build/i18n/po/PCrudFilterPane.js/hy-AM.po
+3 3 build/i18n/po/Searcher.js/ar-JO.po
+3 3 build/i18n/po/Searcher.js/cs-CZ.po
+3 3 build/i18n/po/Searcher.js/de-DE.po
+3 3 build/i18n/po/Searcher.js/en-CA.po
+3 3 build/i18n/po/Searcher.js/en-GB.po
+3 3 build/i18n/po/Searcher.js/es-ES.po
+3 3 build/i18n/po/Searcher.js/fi-FI.po
+3 3 build/i18n/po/Searcher.js/fr-CA.po
+3 3 build/i18n/po/Searcher.js/hy-AM.po
+3 3 build/i18n/po/Searcher.js/oc-FR.po
+3 3 build/i18n/po/Searcher.js/pt-BR.po
+3 3 build/i18n/po/Searcher.js/ru-RU.po
+3 3 build/i18n/po/TranslatorPopup.js/ar-JO.po
+3 3 build/i18n/po/TranslatorPopup.js/cs-CZ.po
+3 3 build/i18n/po/TranslatorPopup.js/de-DE.po
+3 3 build/i18n/po/TranslatorPopup.js/en-CA.po
+3 3 build/i18n/po/TranslatorPopup.js/en-GB.po
+3 3 build/i18n/po/TranslatorPopup.js/es-ES.po
+3 3 build/i18n/po/TranslatorPopup.js/fi-FI.po
+3 3 build/i18n/po/TranslatorPopup.js/fr-CA.po
+3 3 build/i18n/po/TranslatorPopup.js/he-IL.po
+3 3 build/i18n/po/TranslatorPopup.js/hu-HU.po
+3 3 build/i18n/po/TranslatorPopup.js/hy-AM.po
+3 3 build/i18n/po/TranslatorPopup.js/oc-FR.po
+3 3 build/i18n/po/TranslatorPopup.js/pt-BR.po
+3 3 build/i18n/po/TranslatorPopup.js/ru-RU.po
+3 3 build/i18n/po/TranslatorPopup.js/sv-SE.po
+3 3 build/i18n/po/TranslatorPopup.js/tr-TR.po
+3 3 build/i18n/po/URLVerify.js/ar-JO.po
+3 3 build/i18n/po/URLVerify.js/cs-CZ.po
+3 3 build/i18n/po/URLVerify.js/de-DE.po
+3 3 build/i18n/po/URLVerify.js/en-GB.po
+3 3 build/i18n/po/URLVerify.js/es-ES.po
+3 3 build/i18n/po/URLVerify.js/hy-AM.po
+3 3 build/i18n/po/URLVerify.js/pt-BR.po
+3 3 build/i18n/po/URLVerify.js/tr-TR.po
+3 3 build/i18n/po/User.js/ar-JO.po
+3 3 build/i18n/po/User.js/cs-CZ.po
+3 3 build/i18n/po/User.js/de-DE.po
+3 3 build/i18n/po/User.js/en-CA.po
+3 3 build/i18n/po/User.js/en-GB.po
+3 3 build/i18n/po/User.js/es-ES.po
+3 3 build/i18n/po/User.js/fi-FI.po
+3 3 build/i18n/po/User.js/fr-CA.po
+3 3 build/i18n/po/User.js/he-IL.po
+3 3 build/i18n/po/User.js/hu-HU.po
+3 3 build/i18n/po/User.js/hy-AM.po
+3 3 build/i18n/po/User.js/oc-FR.po
+3 3 build/i18n/po/User.js/pt-BR.po
+3 3 build/i18n/po/User.js/ru-RU.po
+3 3 build/i18n/po/User.js/sv-SE.po
+3 3 build/i18n/po/User.js/tr-TR.po
+3 3 build/i18n/po/XULTermLoader.js/ar-JO.po
+3 3 build/i18n/po/XULTermLoader.js/cs-CZ.po
+3 3 build/i18n/po/XULTermLoader.js/de-DE.po
+3 3 build/i18n/po/XULTermLoader.js/en-CA.po
+3 3 build/i18n/po/XULTermLoader.js/en-GB.po
+3 3 build/i18n/po/XULTermLoader.js/es-ES.po
+3 3 build/i18n/po/XULTermLoader.js/fi-FI.po
+3 3 build/i18n/po/XULTermLoader.js/fr-CA.po
+3 3 build/i18n/po/XULTermLoader.js/he-IL.po
+3 3 build/i18n/po/XULTermLoader.js/hu-HU.po
+3 3 build/i18n/po/XULTermLoader.js/hy-AM.po
+3 3 build/i18n/po/XULTermLoader.js/oc-FR.po
+3 3 build/i18n/po/XULTermLoader.js/pt-BR.po
+3 3 build/i18n/po/XULTermLoader.js/ru-RU.po
+3 3 build/i18n/po/XULTermLoader.js/sv-SE.po
+3 3 build/i18n/po/XULTermLoader.js/tr-TR.po
+3 3 build/i18n/po/acq.js/ar-JO.po
+9 9 build/i18n/po/acq.js/cs-CZ.po
+3 3 build/i18n/po/acq.js/de-DE.po
+3 3 build/i18n/po/acq.js/en-CA.po
+3 3 build/i18n/po/acq.js/en-GB.po
+3 3 build/i18n/po/acq.js/es-ES.po
+3 3 build/i18n/po/acq.js/fi-FI.po
+3 3 build/i18n/po/acq.js/fr-CA.po
+3 3 build/i18n/po/acq.js/he-IL.po
+3 3 build/i18n/po/acq.js/hu-HU.po
+3 3 build/i18n/po/acq.js/hy-AM.po
+3 3 build/i18n/po/acq.js/oc-FR.po
+3 3 build/i18n/po/acq.js/pt-BR.po
+3 3 build/i18n/po/acq.js/ru-RU.po
+3 3 build/i18n/po/acq.js/sv-SE.po
+3 3 build/i18n/po/acq.js/tr-TR.po
+3 3 build/i18n/po/authority.js/ar-JO.po
+3 3 build/i18n/po/authority.js/cs-CZ.po
+3 3 build/i18n/po/authority.js/de-DE.po
+3 3 build/i18n/po/authority.js/en-CA.po
+3 3 build/i18n/po/authority.js/en-GB.po
+3 3 build/i18n/po/authority.js/es-ES.po
+3 3 build/i18n/po/authority.js/fi-FI.po
+3 3 build/i18n/po/authority.js/fr-CA.po
+3 3 build/i18n/po/authority.js/hy-AM.po
+3 3 build/i18n/po/authority.js/oc-FR.po
+3 3 build/i18n/po/authority.js/pt-BR.po
+3 3 build/i18n/po/authority.js/ru-RU.po
+3 3 build/i18n/po/authority.js/tr-TR.po
+3 3 build/i18n/po/capture.js/ar-JO.po
+3 3 build/i18n/po/capture.js/cs-CZ.po
+3 3 build/i18n/po/capture.js/de-DE.po
+3 3 build/i18n/po/capture.js/en-CA.po
+3 3 build/i18n/po/capture.js/en-GB.po
+3 3 build/i18n/po/capture.js/es-ES.po
+3 3 build/i18n/po/capture.js/fi-FI.po
+3 3 build/i18n/po/capture.js/fr-CA.po
+3 3 build/i18n/po/capture.js/he-IL.po
+3 3 build/i18n/po/capture.js/hu-HU.po
+3 3 build/i18n/po/capture.js/hy-AM.po
+3 3 build/i18n/po/capture.js/oc-FR.po
+3 3 build/i18n/po/capture.js/pt-BR.po
+3 3 build/i18n/po/capture.js/ru-RU.po
+3 3 build/i18n/po/capture.js/sv-SE.po
+3 3 build/i18n/po/capture.js/tr-TR.po
+3 3 build/i18n/po/conify.js/ar-JO.po
+3 3 build/i18n/po/conify.js/cs-CZ.po
+3 3 build/i18n/po/conify.js/de-DE.po
+3 3 build/i18n/po/conify.js/en-CA.po
+3 3 build/i18n/po/conify.js/en-GB.po
+3 3 build/i18n/po/conify.js/es-ES.po
+3 3 build/i18n/po/conify.js/fi-FI.po
+3 3 build/i18n/po/conify.js/fr-CA.po
+3 3 build/i18n/po/conify.js/he-IL.po
+3 3 build/i18n/po/conify.js/hu-HU.po
+3 3 build/i18n/po/conify.js/hy-AM.po
+3 3 build/i18n/po/conify.js/oc-FR.po
+3 3 build/i18n/po/conify.js/pt-BR.po
+3 3 build/i18n/po/conify.js/ru-RU.po
+3 3 build/i18n/po/conify.js/sv-SE.po
+3 3 build/i18n/po/conify.js/tr-TR.po
+19 19 build/i18n/po/conify/ar-JO.po
+19 19 build/i18n/po/conify/cs-CZ.po
+19 19 build/i18n/po/conify/es-ES.po
+19 19 build/i18n/po/conify/hy-AM.po
+2962 2931 build/i18n/po/db.seed/ar-JO.po
+2968 2937 build/i18n/po/db.seed/cs-CZ.po
+2959 2928 build/i18n/po/db.seed/de-DE.po
+2959 2928 build/i18n/po/db.seed/en-CA.po
+2959 2928 build/i18n/po/db.seed/en-GB.po
+2961 2930 build/i18n/po/db.seed/es-ES.po
+2961 2930 build/i18n/po/db.seed/fi-FI.po
+2959 2928 build/i18n/po/db.seed/fr-CA.po
+2957 2926 build/i18n/po/db.seed/he-IL.po
+2957 2926 build/i18n/po/db.seed/hu-HU.po
+2962 2931 build/i18n/po/db.seed/hy-AM.po
+2959 2928 build/i18n/po/db.seed/oc-FR.po
+2959 2928 build/i18n/po/db.seed/pt-BR.po
+2959 2928 build/i18n/po/db.seed/ru-RU.po
+2957 2926 build/i18n/po/db.seed/sv-SE.po
+2957 2926 build/i18n/po/db.seed/tr-TR.po
+3076 3055 build/i18n/po/fm_IDL.dtd/ar-JO.po
+3096 3069 build/i18n/po/fm_IDL.dtd/cs-CZ.po
+3073 3052 build/i18n/po/fm_IDL.dtd/de-DE.po
+3076 3055 build/i18n/po/fm_IDL.dtd/en-CA.po
+3076 3055 build/i18n/po/fm_IDL.dtd/en-GB.po
+3076 3055 build/i18n/po/fm_IDL.dtd/es-ES.po
+3076 3055 build/i18n/po/fm_IDL.dtd/fi-FI.po
+3073 3052 build/i18n/po/fm_IDL.dtd/fr-CA.po
+3073 3052 build/i18n/po/fm_IDL.dtd/he-IL.po
+3073 3052 build/i18n/po/fm_IDL.dtd/hu-HU.po
+3076 3055 build/i18n/po/fm_IDL.dtd/hy-AM.po
+3073 3052 build/i18n/po/fm_IDL.dtd/oc-FR.po
+3075 3054 build/i18n/po/fm_IDL.dtd/pt-BR.po
+3075 3054 build/i18n/po/fm_IDL.dtd/ru-RU.po
+3073 3052 build/i18n/po/fm_IDL.dtd/sv-SE.po
+3073 3052 build/i18n/po/fm_IDL.dtd/tr-TR.po
+91 87 build/i18n/po/ils_events.xml/ar-JO.po
+92 88 build/i18n/po/ils_events.xml/cs-CZ.po
+91 87 build/i18n/po/ils_events.xml/de-DE.po
+91 87 build/i18n/po/ils_events.xml/en-CA.po
+110 106 build/i18n/po/ils_events.xml/en-GB.po
+91 87 build/i18n/po/ils_events.xml/es-ES.po
+91 87 build/i18n/po/ils_events.xml/fi-FI.po
+91 87 build/i18n/po/ils_events.xml/fr-CA.po
+91 87 build/i18n/po/ils_events.xml/he-IL.po
+91 87 build/i18n/po/ils_events.xml/hu-HU.po
+91 87 build/i18n/po/ils_events.xml/hy-AM.po
+91 87 build/i18n/po/ils_events.xml/oc-FR.po
+91 87 build/i18n/po/ils_events.xml/pt-BR.po
+91 87 build/i18n/po/ils_events.xml/ru-RU.po
+91 87 build/i18n/po/ils_events.xml/sv-SE.po
+91 87 build/i18n/po/ils_events.xml/tr-TR.po
+29 17 build/i18n/po/kpac/ar-JO.po
+30 18 build/i18n/po/kpac/cs-CZ.po
+29 17 build/i18n/po/kpac/de-DE.po
+29 17 build/i18n/po/kpac/en-GB.po
+29 17 build/i18n/po/kpac/es-ES.po
+29 17 build/i18n/po/kpac/hy-AM.po
+7 7 build/i18n/po/lang.dtd/cs-CZ.po
+3 3 build/i18n/po/match_set.js/ar-JO.po
+3 3 build/i18n/po/match_set.js/cs-CZ.po
+3 3 build/i18n/po/match_set.js/en-GB.po
+3 3 build/i18n/po/match_set.js/es-ES.po
+3 3 build/i18n/po/match_set.js/fr-CA.po
+3 3 build/i18n/po/match_set.js/hy-AM.po
+3 3 build/i18n/po/opac.js/ar-JO.po
+3 3 build/i18n/po/opac.js/cs-CZ.po
+3 3 build/i18n/po/opac.js/de-DE.po
+3 3 build/i18n/po/opac.js/en-CA.po
+3 3 build/i18n/po/opac.js/en-GB.po
+3 3 build/i18n/po/opac.js/es-ES.po
+3 3 build/i18n/po/opac.js/fi-FI.po
+3 3 build/i18n/po/opac.js/fr-CA.po
+3 3 build/i18n/po/opac.js/he-IL.po
+3 3 build/i18n/po/opac.js/hu-HU.po
+3 3 build/i18n/po/opac.js/hy-AM.po
+3 3 build/i18n/po/opac.js/oc-FR.po
+3 3 build/i18n/po/opac.js/pt-BR.po
+3 3 build/i18n/po/opac.js/ru-RU.po
+3 3 build/i18n/po/opac.js/sv-SE.po
+3 3 build/i18n/po/opac.js/tr-TR.po
+3 3 build/i18n/po/pickup_and_return.js/ar-JO.po
+3 3 build/i18n/po/pickup_and_return.js/cs-CZ.po
+3 3 build/i18n/po/pickup_and_return.js/de-DE.po
+3 3 build/i18n/po/pickup_and_return.js/en-CA.po
+3 3 build/i18n/po/pickup_and_return.js/en-GB.po
+3 3 build/i18n/po/pickup_and_return.js/es-ES.po
+3 3 build/i18n/po/pickup_and_return.js/fi-FI.po
+3 3 build/i18n/po/pickup_and_return.js/fr-CA.po
+3 3 build/i18n/po/pickup_and_return.js/he-IL.po
+3 3 build/i18n/po/pickup_and_return.js/hu-HU.po
+3 3 build/i18n/po/pickup_and_return.js/hy-AM.po
+3 3 build/i18n/po/pickup_and_return.js/oc-FR.po
+3 3 build/i18n/po/pickup_and_return.js/pt-BR.po
+3 3 build/i18n/po/pickup_and_return.js/ru-RU.po
+3 3 build/i18n/po/pickup_and_return.js/sv-SE.po
+3 3 build/i18n/po/pickup_and_return.js/tr-TR.po
+3 3 build/i18n/po/pull_list.js/ar-JO.po
+3 3 build/i18n/po/pull_list.js/cs-CZ.po
+3 3 build/i18n/po/pull_list.js/de-DE.po
+3 3 build/i18n/po/pull_list.js/en-CA.po
+3 3 build/i18n/po/pull_list.js/en-GB.po
+3 3 build/i18n/po/pull_list.js/es-ES.po
+3 3 build/i18n/po/pull_list.js/fi-FI.po
+3 3 build/i18n/po/pull_list.js/fr-CA.po
+3 3 build/i18n/po/pull_list.js/he-IL.po
+3 3 build/i18n/po/pull_list.js/hu-HU.po
+3 3 build/i18n/po/pull_list.js/hy-AM.po
+3 3 build/i18n/po/pull_list.js/oc-FR.po
+3 3 build/i18n/po/pull_list.js/pt-BR.po
+3 3 build/i18n/po/pull_list.js/ru-RU.po
+3 3 build/i18n/po/pull_list.js/sv-SE.po
+3 3 build/i18n/po/pull_list.js/tr-TR.po
+3 3 build/i18n/po/register.js/ar-JO.po
+3 3 build/i18n/po/register.js/cs-CZ.po
+3 3 build/i18n/po/register.js/de-DE.po
+3 3 build/i18n/po/register.js/en-CA.po
+3 3 build/i18n/po/register.js/en-GB.po
+3 3 build/i18n/po/register.js/es-ES.po
+3 3 build/i18n/po/register.js/fi-FI.po
+3 3 build/i18n/po/register.js/fr-CA.po
+3 3 build/i18n/po/register.js/he-IL.po
+3 3 build/i18n/po/register.js/hu-HU.po
+3 3 build/i18n/po/register.js/hy-AM.po
+3 3 build/i18n/po/register.js/oc-FR.po
+3 3 build/i18n/po/register.js/pt-BR.po
+3 3 build/i18n/po/register.js/ru-RU.po
+3 3 build/i18n/po/register.js/sv-SE.po
+3 3 build/i18n/po/register.js/tr-TR.po
+3 3 build/i18n/po/reports.js/ar-JO.po
+3 3 build/i18n/po/reports.js/cs-CZ.po
+3 3 build/i18n/po/reports.js/de-DE.po
+3 3 build/i18n/po/reports.js/en-CA.po
+3 3 build/i18n/po/reports.js/en-GB.po
+3 3 build/i18n/po/reports.js/es-ES.po
+3 3 build/i18n/po/reports.js/fi-FI.po
+3 3 build/i18n/po/reports.js/fr-CA.po
+3 3 build/i18n/po/reports.js/he-IL.po
+3 3 build/i18n/po/reports.js/hu-HU.po
+3 3 build/i18n/po/reports.js/hy-AM.po
+3 3 build/i18n/po/reports.js/oc-FR.po
+3 3 build/i18n/po/reports.js/pt-BR.po
+3 3 build/i18n/po/reports.js/ru-RU.po
+3 3 build/i18n/po/reports.js/sv-SE.po
+3 3 build/i18n/po/reports.js/tr-TR.po
+3 3 build/i18n/po/reservation.js/ar-JO.po
+3 3 build/i18n/po/reservation.js/cs-CZ.po
+3 3 build/i18n/po/reservation.js/de-DE.po
+3 3 build/i18n/po/reservation.js/en-CA.po
+3 3 build/i18n/po/reservation.js/en-GB.po
+3 3 build/i18n/po/reservation.js/es-ES.po
+3 3 build/i18n/po/reservation.js/fi-FI.po
+3 3 build/i18n/po/reservation.js/fr-CA.po
+3 3 build/i18n/po/reservation.js/he-IL.po
+3 3 build/i18n/po/reservation.js/hu-HU.po
+3 3 build/i18n/po/reservation.js/hy-AM.po
+3 3 build/i18n/po/reservation.js/oc-FR.po
+3 3 build/i18n/po/reservation.js/pt-BR.po
+3 3 build/i18n/po/reservation.js/ru-RU.po
+3 3 build/i18n/po/reservation.js/sv-SE.po
+3 3 build/i18n/po/reservation.js/tr-TR.po
+3 3 build/i18n/po/selfcheck.js/ar-JO.po
+3 3 build/i18n/po/selfcheck.js/cs-CZ.po
+3 3 build/i18n/po/selfcheck.js/de-DE.po
+3 3 build/i18n/po/selfcheck.js/en-CA.po
+3 3 build/i18n/po/selfcheck.js/en-GB.po
+3 3 build/i18n/po/selfcheck.js/es-ES.po
+3 3 build/i18n/po/selfcheck.js/fi-FI.po
+3 3 build/i18n/po/selfcheck.js/fr-CA.po
+3 3 build/i18n/po/selfcheck.js/he-IL.po
+3 3 build/i18n/po/selfcheck.js/hu-HU.po
+3 3 build/i18n/po/selfcheck.js/hy-AM.po
+3 3 build/i18n/po/selfcheck.js/oc-FR.po
+3 3 build/i18n/po/selfcheck.js/pt-BR.po
+3 3 build/i18n/po/selfcheck.js/ru-RU.po
+3 3 build/i18n/po/selfcheck.js/sv-SE.po
+3 3 build/i18n/po/selfcheck.js/tr-TR.po
+3 3 build/i18n/po/serial.js/ar-JO.po
+3 3 build/i18n/po/serial.js/cs-CZ.po
+3 3 build/i18n/po/serial.js/de-DE.po
+3 3 build/i18n/po/serial.js/en-GB.po
+3 3 build/i18n/po/serial.js/es-ES.po
+3 3 build/i18n/po/serial.js/hy-AM.po
+563 493 build/i18n/po/tpac/ar-JO.po
+604 531 build/i18n/po/tpac/cs-CZ.po
+563 493 build/i18n/po/tpac/de-DE.po
+563 493 build/i18n/po/tpac/en-CA.po
+600 530 build/i18n/po/tpac/en-GB.po
+563 493 build/i18n/po/tpac/es-ES.po
+563 493 build/i18n/po/tpac/fi-FI.po
+567 497 build/i18n/po/tpac/fr-CA.po
+563 493 build/i18n/po/tpac/he-IL.po
+563 493 build/i18n/po/tpac/hu-HU.po
+563 493 build/i18n/po/tpac/hy-AM.po
+563 493 build/i18n/po/tpac/oc-FR.po
+563 493 build/i18n/po/tpac/pt-BR.po
+563 493 build/i18n/po/tpac/ru-RU.po
+563 493 build/i18n/po/tpac/sv-SE.po
+563 493 build/i18n/po/tpac/tr-TR.po
+5 5 build/i18n/po/urlverify/ar-JO.po
+5 5 build/i18n/po/urlverify/cs-CZ.po
+5 5 build/i18n/po/urlverify/de-DE.po
+5 5 build/i18n/po/urlverify/en-GB.po
+5 5 build/i18n/po/urlverify/es-ES.po
+5 5 build/i18n/po/urlverify/hy-AM.po
+3 3 build/i18n/po/vandelay.js/ar-JO.po
+3 3 build/i18n/po/vandelay.js/cs-CZ.po
+3 3 build/i18n/po/vandelay.js/en-CA.po
+3 3 build/i18n/po/vandelay.js/en-GB.po
+3 3 build/i18n/po/vandelay.js/es-ES.po
+3 3 build/i18n/po/vandelay.js/hy-AM.po
+3 3 build/i18n/po/vandelay.js/pt-BR.po
+13 12 build/i18n/po/vandelay/cs-CZ.po
+611 497 build/i18n/po/webstaff/ar-JO.po
+973 850 build/i18n/po/webstaff/cs-CZ.po
+611 497 build/i18n/po/webstaff/en-CA.po
+938 824 build/i18n/po/webstaff/en-GB.po
+611 497 build/i18n/po/webstaff/es-ES.po
+611 497 build/i18n/po/webstaff/hy-AM.po
+611 497 build/i18n/po/webstaff/ru-RU.po
+
+commit 57266cba0df0fbbae766d64041b22071e8da7b74
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Tue Aug 11 14:21:57 2020 -0700
+
+ Translation updates - newpot
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+15 15 build/i18n/po/conify/conify.pot
+2996 2970 build/i18n/po/db.seed/db.seed.pot
+3044 3022 build/i18n/po/fm_IDL.dtd/fm_IDL.dtd.pot
+12 0 build/i18n/po/kpac/kpac.pot
+2 2 build/i18n/po/tpac/tpac.pot
+400 316 build/i18n/po/webstaff/webstaff.pot
+
+commit a0fcb5a2204856bb8bcf073238dc3b7ecd1db76d
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Tue Aug 11 13:11:14 2020 -0700
+
+ Docs: 3.5.1 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+200 0 docs/RELEASE_NOTES_3_5.adoc
+
+commit bf5bf3fbeffe73eeb9649dcbeeec2b98e40578be
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Tue Aug 11 13:10:44 2020 -0700
+
+ Docs: tweaks to 3.4.4 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+31 1 docs/RELEASE_NOTES_3_4.adoc
+
+commit 4d9ebac5c46bd85de122c1670bc1bee4efcf5f2e
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Tue Aug 11 11:24:46 2020 -0700
+
+ Docs: 3.4.4 release notes
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+160 0 docs/RELEASE_NOTES_3_4.adoc
+
+commit 652a68cd350e5535594150ba1eed91bfe877de78
+Author: Remington Steed <rjs7@calvin.edu>
+Date: Wed Jun 10 12:06:05 2020 -0400
+
+ Docs: Release notes for 3.4.3
+
+ Signed-off-by: Remington Steed <rjs7@calvin.edu>
+
+88 0 docs/RELEASE_NOTES_3_4.adoc
+
+commit 515785ef611c5301184b1a22f7dd96db91f8bdd5
+Author: Michele Morgan <mmorgan@noblenet.org>
+Date: Tue Aug 27 08:55:06 2019 -0400
+
+ LP1811466 Add fields to holdings editor column pickers
+
+ Adds item fields creator, editor and last edit date to the working and
+ completed grids in the holdings editor.
+
+ Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+9 3 Open-ILS/src/templates/staff/cat/volcopy/t_edit.tt2
+1 1 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 3403cc4a63516af0d08682465baa94189f9e89ca
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Mon Aug 3 17:14:12 2020 -0400
+
+ LP#1839369: (follow-up) tweak button and styles
+
+ - Change the button text from "Search" to "Search Catalog"
+ - adjust the styling on the AngularJS side to cuddle the
+ button with the search input
+ - standardize the placeholder text as "Search for..."
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+1 1 Open-ILS/src/eg2/src/app/staff/splash.component.html
+9 9 Open-ILS/src/templates/staff/t_splash.tt2
+
+commit ed07687a0f7b56704750b6b2f3ea6f97e67156fe
+Author: Terran McCanna <tmccanna@georgialibraries.org>
+Date: Tue Oct 22 16:16:35 2019 -0400
+
+ LP#1839369 Accessibility for Search Box
+
+ This adds an accessible label to the Search box on the splash
+ page of the staff client as well as to the Angular version of
+ the splash page.
+
+ Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+2 1 Open-ILS/src/eg2/src/app/staff/splash.component.html
+1 0 Open-ILS/src/templates/staff/t_splash.tt2
+
+commit 86b8dc5ac090c86a0dd4c34176398e8915e5a08f
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Wed Mar 18 12:41:38 2020 -0400
+
+ LP1867834 Staffcat clear basket on logout
+
+ Tell the browser/local store service to treat the staff catalog basket
+ cache key as a "login item", meaning it should be cleared upon logout.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+3 0 Open-ILS/src/eg2/src/app/share/catalog/basket.service.ts
+
+commit b0937bec9e04c649112dfa88e737fd73cb448d70
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Tue Jul 28 11:09:45 2020 -0400
+
+ LP#1889251: make call number affix sort keys read-only
+
+ This patch makes the call number prefix and suffix label sort
+ key fields read-only on their respective Server Administration
+ pages, as any values that a user would try to set for them
+ would get overwritten by a database trigger.
+
+ To test
+ -------
+ [1] Apply the patch.
+ [2] Go to Server Administration -> Call Number Prefixes (or Suffixes)
+ and attempt create and edit new affixes.
+ [3] Verify that the label sort key is a read-only display field on the
+ edit modal.
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+
+10 0 Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts
+
+commit 54e8ad12a5c11124938208cc98f9aa22bf957e76
+Author: Josh Stompro <stompro@stompro.org>
+Date: Mon Mar 4 11:16:56 2019 -0600
+
+ LP#1674364 - Use database bib id for cover art lookup
+
+ Export the 901c as the URN:BIBID identifier to allow the
+ ATOM2XHTML.xsl to construct a cover art img link using it.
+
+ Testing Notes:
+
+ I used a bookbag to test this out.
+ 1. Create a public bookbag of items and grab the bookbag id.
+ 2. View the source of these links on your system to see the current output.
+ /opac/extras/feed/bookbag/atom/<bookbagid>
+ /opac/extras/feed/bookbag/html-full/<bookbagid>
+ Make note that the jacket img link uses the ISBN to lookup cover art.
+
+ Make changes.
+ 1. Restart supercat to re-load xsl transfor files.
+ osrf_control -l --service open-ils.supercat --restart
+ 2. View the source and output of these links on your system to see the changes.
+ /opac/extras/feed/bookbag/atom/<bookbagid>
+ /opac/extras/feed/bookbag/html-full/<bookbagid>
+ The cover art images should show up now in the html-full, and the
+ URN:BIBID: identifier should be populated in the atom file.
+
+ Signed-off-by: Josh Stompro <stompro@stompro.org>
+ Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+3 17 Open-ILS/xsl/ATOM2XHTML.xsl
+9 0 Open-ILS/xsl/MARC21slim2ATOM.xsl
+
+commit 3f1d031646eef2696eef0565b59284a28e26150d
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Mon Aug 3 17:38:48 2020 -0400
+
+ LP#1731370: (follow-up) fix a typo that was causing console noise
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit c39150adc163e7d71377783ae0f3955340b9420b
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Mon Aug 3 17:31:32 2020 -0400
+
+ LP#1761142: (follow-up) tweak field-change style
+
+ [1] Ensure that the border is displayed.
+ [2] Change the border color to one that has more contrast
+ as compared to the bg-success background color.
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/src/templates/staff/cat/volcopy/t_attr_edit.tt2
+
+commit 1201866cafc701e8921f63392bfa68a2ea811dc5
+Author: a. bellenir <abelleni@grpl.org>
+Date: Thu Mar 28 12:26:37 2019 -0400
+
+ LP1761142 Volume Copy Editor Changed Fields Hard to Discern
+
+ Add a changed_fields object to the scope and update it as copies are
+ changed. The function field_changed(field) determines if any of the
+ selected copies have altered the given field. finally, a CSS class,
+ field-changed, is applied to add a green border to fields whose values
+ have been modified.
+
+ Signed-off-by: a. bellenir <abelleni@grpl.org>
+ Signed-off-by: Ruth Frasur <rfrasur@gmail.com>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+21 18 Open-ILS/src/templates/staff/cat/volcopy/t_attr_edit.tt2
+11 0 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 7eb9d3c1a0c2f4848440a707e0dc3c792422c7f6
+Author: Josh Stompro <stompro@stompro.org>
+Date: Tue Jan 28 10:04:02 2020 -0600
+
+ LP#1783793 - Suspend holds when activation date set in web client angularjs
+
+ 1. Modify Dates popup changed to not allow picking dates in the past for hold
+ activation date both in the date picker, and if typed in manually. If a
+ date in the past is typed in, it is changed to today's date and an alert
+ message is displayed. The date picker just won't allow past days to be
+ selected. The alert message remains until a date in the future is selected.
+
+ 2. Suspend holds when the activation date is set and saved.
+
+ 3. Adds a note about the fact that the hold will be suspended when the hold
+ activation date is selected for editing. This makes the behavior clear so
+ staff don't have to figure it out by trial and error.
+
+ 4. Updates several sr-only (Screen Reader Only) labels in the holds date popup
+ template that were set to the wrong values. The file was copied from the hold
+ notification popup and the screen reader descriptions were left unchanged from
+ those values.
+
+ Signed-off-by: Josh Stompro <stompro@stompro.org>
+ Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+9 4 Open-ILS/src/templates/staff/circ/share/t_hold_dates.tt2
+17 1 Open-ILS/web/js/ui/default/staff/circ/services/holds.js
+
+commit 0a73a417c0585d5ba31426657d8df463bfb661bf
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Tue Jun 30 15:33:23 2020 -0400
+
+ LP#1885759: Count months and quarters across year boundaries
+
+ We need to add year-multiples of months or quarters when using the
+ months_ago or quarters_ago transforms in the reporter.
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+4 2 Open-ILS/src/perlmods/lib/OpenILS/Reporter/SQLBuilder.pm
+
+commit 489a77557ec21cf17b7bce48e187bb64720e77a8
+Author: Jeff Davis <jdavis@sitka.bclibraries.ca>
+Date: Tue Oct 8 16:00:12 2019 -0700
+
+ LP#1847343: fix Exclude Electronic Resources checkbox when locale picker is enabled
+
+ Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+2 4 Open-ILS/web/js/ui/default/opac/simple.js
+
+commit 9533ecd64e1de405f9fd6575dae8b7a87c5fa956
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Fri Oct 25 21:11:49 2019 -0700
+
+ LP #1717996 (follow-up) Change label for shareable user buckets
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+2 1 Open-ILS/src/templates/staff/circ/patron/bucket/t_bucket_create.tt2
+2 1 Open-ILS/src/templates/staff/circ/patron/bucket/t_bucket_edit.tt2
+
+commit 461079fd6a82c88820e638da35dbb5de5c597760
+Author: Tiffany Little <tlittle@georgialibraries.org>
+Date: Mon Oct 21 15:00:30 2019 -0400
+
+ LP #1717996 Change label for shareable buckets
+
+ Changes 'publicly visible' label on buckets and also adds a tooltip with an explanation. Also makes sure that clicking the tooltip does not check the checkbox automatically.
+
+ Signed-off-by: Tiffany Little <tlittle@georgialibraries.org>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+2 1 Open-ILS/src/templates/staff/cat/bucket/share/t_bucket_create.tt2
+2 1 Open-ILS/src/templates/staff/cat/bucket/share/t_bucket_edit.tt2
+
+commit c4fa3ca2c8fa7af9e5eb5e92b39477272edeb042
+Author: Jason Boyer <JBoyer@equinoxinitiative.org>
+Date: Fri Jul 31 12:39:23 2020 -0400
+
+ LP1842431: Add a release note
+
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+11 0 docs/RELEASE_NOTES_NEXT/Administration/autorenewal_action_trigger_result_code.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Administration/autorenewal_action_trigger_result_code.adoc
+
+commit 040c4d2c70f5ab0d1f78596aaf07bddc27444395
+Author: Jason Boyer <JBoyer@equinoxinitiative.org>
+Date: Fri Jul 31 11:10:24 2020 -0400
+
+ LP1842431: Remove redundant description field
+
+ This branch brings about a good change, but I think having reason
+ and description be identical in the case of a failure and blank /
+ 'SUCCESS' in the case of, well, success, is redundant and potentially
+ confusing. Also, if it's not used in the default template I doubt
+ anyone ever realizes it's there. :) Template editors can use
+ is_renewed to decide if they want to display success as a result
+ and that way the capitalization won't look like THE EIGHTIES have come
+ back in fashion again. :D
+
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+0 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/Circ/AutoRenew.pm
+
+commit 6c73a5ae26da71e1ff49c26a635a439c1dbd0b09
+Author: Jason Stephenson <jason@sigio.com>
+Date: Fri Sep 6 11:09:18 2019 -0400
+
+ LP#1842431 Split textcode and desc fields for AutoRenew user data
+
+ Split the event textcode and desc fields into textcode and description
+ fields, respectively, in the AutoRenew reactor's user data, but also
+ leave the reason field alone. This permits sites to show only the
+ description of the event if they want.
+
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+ Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+2 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/Circ/AutoRenew.pm
+
+commit 9def7f7349dcb2e8661c9bb3e4b211cb652f1cc1
+Author: Michele Morgan <mmorgan@noblenet.org>
+Date: Thu Sep 12 16:30:47 2019 -0400
+
+ LP#1842431 Make renewal failure reason more appropriate for patron notifications
+
+ Changes the failure reason for the autorenewal to include only the desc,
+ Removes the textcode of the event, which shouldn't be included in a patron notice.
+
+ Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/Circ/AutoRenew.pm
+
+commit a1ef32532714753bf568408dedddb1026d6e6135
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Mon Oct 8 17:24:20 2018 -0700
+
+ LP1731370: Distinguishing new copies and volumes with aditional means (WCAG 1.4.1)
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Elaine Hardy <ehardy@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+2 0 Open-ILS/src/templates/staff/cat/volcopy/index.tt2
+1 2 Open-ILS/src/templates/staff/css/cat.css.tt2
+6 4 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 7f14d09634fb9e631621c06033075533e37c680b
+Author: Jason Etheridge <jason@EquinoxInitiative.org>
+Date: Wed Sep 12 08:10:32 2018 -0400
+
+ lp1731370 CSS styling for new items and volumes
+
+ previous commit just handled volumes, this handles copies
+
+ Signed-off-by: Jason Etheridge <jason@EquinoxInitiative.org>
+ Signed-off-by: Elaine Hardy <ehardy@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 0 Open-ILS/src/templates/staff/css/cat.css.tt2
+3 1 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 187100f24a9354b407a598266c15c3f6cf9b3663
+Author: Jason Etheridge <jason@EquinoxInitiative.org>
+Date: Wed Sep 5 09:13:49 2018 -0400
+
+ lp1731370 CSS styling for new items and volumes
+
+ in vol/copy editor
+
+ Signed-off-by: Jason Etheridge <jason@EquinoxInitiative.org>
+ Signed-off-by: Elaine Hardy <ehardy@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+3 1 Open-ILS/src/templates/staff/css/cat.css.tt2
+1 1 Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+
+commit 0eabb01710b738cce91e0c57e49652ea20f7e842
+Author: Josh Stompro <stompro@stompro.org>
+Date: Wed Nov 6 12:24:36 2019 -0600
+
+ LP#1851541 - Add audio alert for item alert popups
+
+ Signed-off-by: Josh Stompro <stompro@stompro.org>
+ Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 0 Open-ILS/web/js/ui/default/staff/circ/services/circ.js
+
+commit c6d36312a91ee4d1dc042af7df2ee681cc7b86a1
+Author: Christine Morgan <cmorgan@noblenet.org>
+Date: Thu Nov 21 12:53:11 2019 -0500
+
+ LP1735568, LP1830443: MARC Editor Fixes
+
+ These style changes to the current MARC Editor fix the indicator box
+ resize problem and the blank subfield problem while improving usability.
+ Colors were tested using the Chrome extension Colorblindly, a
+ colorblindness simulator.
+
+ Signed-off-by: Christine Morgan <cmorgan@noblenet.org>
+ Signed-off-by: Elaine Hardy <ehardy@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+24 21 Open-ILS/src/templates/staff/cat/share/t_marcedit.tt2
+3 3 Open-ILS/src/templates/staff/cat/share/t_marcedit_editable.tt2
+27 11 Open-ILS/src/templates/staff/css/cat.css.tt2
+
+commit c9b47019a96b9e0596b4c2ba67c3ec38bd4c2ca8
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Tue Jul 28 17:21:28 2020 -0400
+
+ LP1889296 Staffcat holds request time includes time
+
+ Display the hold request time as date plus time in the general purpose
+ Angluar holds grid.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+2 1 Open-ILS/src/eg2/src/app/staff/share/holds/grid.component.html
+
+commit 9494eeac685be9531d86b5c927d9037f369a6fe5
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Fri Jun 26 10:45:37 2020 -0400
+
+ Forward-port 3.5.0 upgrade script
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+
+404 0 Open-ILS/src/sql/Pg/version-upgrade/3.4.3-3.5.0-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/3.4.3-3.5.0-upgrade-db.sql
+
+commit 906d5aa682ca3bc2ea91f1785dfef2d4b38a1a50
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Tue Jul 28 10:43:25 2020 -0400
+
+ LP#1776757: (follow-up) keep input for amount as type "number"
+
+ Doing this preserves the form validation that ensures that
+ the user cannot submit the form with a non-numeric amount.
+
+ This does lose forcing the display of default amounts such as
+ "1.50" to two decimal places, but I'm figuring that form validation
+ takes priority pending a longer-term solution such as a custom
+ value validator or using ng-currency.
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/src/templates/staff/circ/share/t_bill_patron_dialog.tt2
+1 1 Open-ILS/web/js/ui/default/staff/circ/services/billing.js
+
+commit 833a128f02d8dec9d4282aaf1d4f261c6bf6cde3
+Author: Mike Risher <mrisher@catalyte.io>
+Date: Wed Jan 29 20:20:35 2020 +0000
+
+ lp1776757 Default Billing Price Not Updating
+
+ Fix the following bug: When billing a patron and one switches from
+ one billing type to a different billing type, the price isn't updating
+ to show the new default price
+
+ Signed-off-by: Mike Risher <mrisher@catalyte.io>
+ Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/src/templates/staff/circ/share/t_bill_patron_dialog.tt2
+5 2 Open-ILS/web/js/ui/default/staff/circ/services/billing.js
+
+commit f1372798b1ee45639826974d3013a041c76e17f4
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Wed Oct 3 09:04:54 2018 -0700
+
+ LP1795469: Opac holdings sort now considers CN suffix
+
+ To test:
+ 1) Create a bunch of Call Number suffixes in Administration
+ -> Server Administration -> Call Number Suffixes.
+ 2) Go to a bib record, and add a bunch of holdings,
+ all with the same call number label, owning/circ libraries,
+ item numbers, and parts (if using parts) but with different
+ barcodes and CN suffixes.
+ 3) Look at the OPAC view of these holdings. Note that they
+ are in order by barcode, without any consideration for
+ the CN suffix.
+ 4) Apply this commit.
+ 5) Look at the OPAC view again. Note that they are now sorted
+ by CN suffix, and then by barcode.
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Josh Stompro <stompro@stompro.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 0 Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm
+
+commit 6d423f8d0f2f303db7b3dc6dc4c9d665ddc7c7f2
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Mon Jun 8 16:03:14 2020 -0400
+
+ LP1882591 Empty combobox avoids default selection
+
+ When clearing a combobox value, no combobox options are displayed in the
+ dropdown. This allows users to clear the value then tab out of the box
+ without the typeahead magic forcing selection of the first entry.
+
+ The full list can still be displayed by clicking on the combobox.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+7 6 Open-ILS/src/eg2/src/app/share/combobox/combobox.component.ts
+
+commit b2a0c4b68a3904e157200d0a10239a7e54c718e3
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Mon Jul 27 10:58:52 2020 -0400
+
+ LP1878079 Staffcat Add Holdings action support
+
+ Teaches the staff catalog Add Holdings button to open the holdings
+ editor using the appropriate parameters. If the holdings maintenance
+ grid is active, arguments to pass are based on the grid selection.
+ Otherwise it simply open the item editor with a single call number /
+ copy to be created 'here'.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+5 7 Open-ILS/src/eg2/src/app/staff/catalog/record/actions.component.ts
+2 2 Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.ts
+3 2 Open-ILS/src/eg2/src/app/staff/catalog/record/record.component.html
+28 0 Open-ILS/src/eg2/src/app/staff/catalog/record/record.component.ts
+
+commit 72e49866a2696cc5e30513bb38544215a605ef2c
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Wed May 13 12:17:19 2020 -0400
+
+ LP1878079 Staffcat 'Edit' items / call numbers support
+
+ Adds support to the Angular staff catalog to properly handle requests
+ to Edit Items, Edit Call Numbers, and Edit Call Numbers and Items.
+ Prior to his change, these operations would behave more like Add
+ operations than Edit operations.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+6 6 Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.html
+37 3 Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.ts
+14 12 Open-ILS/src/eg2/src/app/staff/share/holdings/holdings.service.ts
+
+commit 9d3fbd0285a946385352d8a6d50b1df5c41ce7bd
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Mon May 11 15:10:37 2020 -0400
+
+ LP1878079 Staffcat Add Call Nums honors selected orgs
+
+ When adding new call numbers from the Angular staff catalog Holdings
+ View grid, take all selected grid rows into consideration when
+ determining how many call numbers to add and what their owning libs
+ should be.
+
+ To test:
+ * Navigate to the Holdings View tab of a record detail page in the Angular
+ staff catalog.
+ * Select multiple rows in the grid which are org unit-only rows (i.e.
+ the row does not refer to a specific call number or item).
+ * From the action menu / right client menu, select "Add Callnumbers"
+ * Confirm that a call number entry for each selected org unit is present
+ in the spawned holdings editor.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+15 10 Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.ts
+
+commit 93dde328d1fae2788c6460dbd9e88113bafa43ce
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Mon Jul 27 10:55:19 2020 -0400
+
+ LP#1802166: stamp schema update
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+1 1 Open-ILS/src/sql/Pg/upgrade/{XXXX.function.actor_usr_delete.sql => 1211.function.actor_usr_delete.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.function.actor_usr_delete.sql => 1211.function.actor_usr_delete.sql} (96%)
+
+commit 74c3a9355a2e99d79824b3b2b078c3d7f2b862c1
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Mon Jul 27 10:51:37 2020 -0400
+
+ LP#1802166: (follow-up) document a way to clear names from already-purged patron records
+
+ For reference, the following SQL will clear the preferred name
+ and name keyword fields from already-purged records:
+
+ UPDATE actor.usr
+ SET pref_prefix = NULL,
+ pref_first_given_name = NULL,
+ pref_second_given_name = NULL,
+ pref_family_name = NULL,
+ pref_suffix = NULL,
+ name_keywords = NULL
+ WHERE usrname ~ ('^' || id || '-PURGED')
+ AND NOT active
+ AND deleted
+ AND (
+ pref_prefix IS NOT NULL OR
+ pref_first_given_name IS NOT NULL OR
+ pref_second_given_name IS NOT NULL OR
+ pref_family_name IS NOT NULL OR
+ pref_suffix IS NOT NULL OR
+ name_keywords IS NOT NULL
+ );
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+25 0 docs/RELEASE_NOTES_NEXT/Circulation/purge_usr_pref_names.adoc
+
+commit e15b0ab7d877f1340e75c0680b73c748023882fe
+Author: Jason Stephenson <jason@sigio.com>
+Date: Fri Feb 15 13:33:08 2019 -0500
+
+ Lp 1802166: Purge User Name Keywords
+
+ Add the name_keywords field to the fields that get set to null in
+ actor.usr_delete.
+
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 0 Open-ILS/src/sql/Pg/999.functions.global.sql
+1 0 Open-ILS/src/sql/Pg/upgrade/XXXX.function.actor_usr_delete.sql
+
+commit 7da2969b4743148aea6bc8952ebc8db0b09f1c12
+Author: Jason Stephenson <jason@sigio.com>
+Date: Fri Feb 15 12:21:19 2019 -0500
+
+ Lp 1802166: Purge User Preferred Names
+
+ When the preferred names feature was added, the new fields were not
+ added to the update in the actor.usr_delete function. This commit
+ sets those new fields to NULL in that function.
+
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+5 0 Open-ILS/src/sql/Pg/999.functions.global.sql
+124 0 Open-ILS/src/sql/Pg/upgrade/XXXX.function.actor_usr_delete.sql
+5 0 docs/RELEASE_NOTES_NEXT/Circulation/purge_usr_pref_names.adoc
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.function.actor_usr_delete.sql
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/purge_usr_pref_names.adoc
+
+commit f2dc7b6e990ebc1be4c43c57731a0166220ac11a
+Author: Jason Etheridge <jason@EquinoxInitiative.org>
+Date: Fri Jun 5 09:00:53 2020 -0400
+
+ LP1819542 Hanging transits can cause checkins to fail
+
+ So two bits of defensive programming for do_checkin:
+
+ sub fix_broken_transit_status
+ sub cancel_transit_if_circ_exists
+
+ I don't know if the first one does anything useful, but the idea is that it'll
+ at least temporarily set the copy status to In Transit for any status checks
+ within the do_checkin method that test for that. It doesn't actually repair
+ the status permanently (at least in the case of, say, an existing transit being
+ re-used for a ROUTE_ITEM event). We may want to do that.
+
+ The second one will abort an associated transit (including retargeting a hold
+ for a hold transit) if both an active transit and an active circulation exist
+ for the item. This handles the situation I've been using to test the bug:
+
+ 1) transit an item (CONC90000436 in Concerto)
+ 2) artificially change its status directly in the database (for example, to
+ Available)
+ 3) check it out to a patron (99999376864 in Concerto), noting
+ that the Cancel Transit prompt does not get triggered
+ 4) check in the item
+
+ Signed-off-by: Jason Etheridge <jason@EquinoxInitiative.org>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: John Amundson <jamundson@cwmars.org>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+42 15 Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
+
+commit b584ea2a39d6f7a26e40f87dde09327857185e3f
+Author: Jason Boyer <JBoyer@eoli.info>
+Date: Wed Jan 8 13:37:01 2020 -0500
+
+ LP1858701: prevent doubles slashes in opac iframe urls
+
+ The CGI module (used by mkurl()) does not like it
+ if we have two slashes in a URL sort/of/like//this.
+ Things work but the path portion of the URL is doubled
+ each time mkurl is used on it. This branch fixes 2
+ causes in the staff OPAC.
+
+ Signed-off-by: Jason Boyer <JBoyer@eoli.info>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+2 2 Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+
+commit d920660f94700d2c06d3296182b2e81fba81f334
+Author: Jeff Davis <jdavis@sitka.bclibraries.ca>
+Date: Tue Jun 18 13:48:44 2019 -0700
+
+ LP#1833300: wrap SRU query in parentheses before appending site param
+
+ Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
+ Signed-off-by: Mike Risher <mrisher@catalyte.io>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/src/perlmods/lib/OpenILS/WWW/SuperCat.pm
+
+commit eca9e6e08e4461e805035ad767f63f41f49aadba
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Mon Aug 19 12:43:33 2019 -0700
+
+ LP1739288: report back on invalid barcodes in Item Status screen
+
+ To test:
+
+ 1) Make a text file with both valid and invalid item barcodes.
+ 2) Go to Circulation > Item Status and upload your file.
+ 3) Note that the valid barcodes result in rows in the item status
+ screen, and the invalid barcodes are not displayed anywhere.
+ 4) Apply this commit.
+ 5) Repeat step 2.
+ 6) Notice that the invalid barcodes are now reported in a new alert.
+ 7) Make a text file with only valid barcodes and upload it.
+ 8) Upload it. Notice that the alert disappears.
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Josh Stompro <stompro@stompro.org>
+
+ LP1739288: Add a summary report to the list of bad barcodes.
+
+ (^^ squash of commit written by Josh Stompro)
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Josh Stompro <stompro@stompro.org>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+21 0 Open-ILS/src/templates/staff/cat/item/index.tt2
+11 1 Open-ILS/web/js/ui/default/staff/cat/item/app.js
+
+commit 6eb7c483360a7ea3eea7dbbaa66e197d601e0543
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Tue Oct 15 18:32:19 2019 -0400
+
+ LP#1847784: (docs) refer to the badge score generator cron job by name
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+2 2 docs/admin/popularity_badges_web_client.adoc
+
+commit ea24a23773298332216d0eaa9fabc25857e454c2
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Tue Oct 15 18:29:40 2019 -0400
+
+ LP#1847784: install badge_score_generator.pl by default
+
+ To test
+ -------
+ [1] Perform an Evergreen installation/upgrade.
+ [2] Verify that badge_score_generator.pl is present
+ in /openils/bin (or an alternative installation
+ location specified during the ./configure step).
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+1 0 Open-ILS/src/Makefile.am
+
+commit 9f8c057a3eb0196d5e0a5aa5efcae375d7e5dc94
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Sun Mar 15 08:49:48 2020 -0700
+
+ LP1867524: Add a help popover to the End field in the Closed Dates Editor
+
+ To test:
+ 1) Go to Administration > Local Administration > Closed Dates Editor.
+ 2) Click Add Closing.
+ 3) Under closing type, choose Multiple Day.
+ 4) Note that the End field has no guidance for the user.
+ 5) Apply this commit.
+ 6) Repeat steps 1-3.
+ 7) Notice that the End field has some clarifying guidance for the user.
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Mike Risher <mrisher@catalyte.io>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 0 Open-ILS/src/templates/staff/admin/local/actor/edit_closed_dates.tt2
+
+commit bfd07a628d60eeda978a1b9e9698a896912abeeb
+Author: Chris Sharp <csharp@georgialibraries.org>
+Date: Wed Nov 13 10:28:53 2019 -0500
+
+ LP#1852443 - Re-label duplicate-named "all circulations" source
+
+ Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+1 1 Open-ILS/examples/fm_IDL.xml
+13 0 docs/RELEASE_NOTES_NEXT/Reports/change_aacs_label.adoc
+ create mode 100644 docs/RELEASE_NOTES_NEXT/Reports/change_aacs_label.adoc
+
+commit 1ffe1609ddb0e302792006ec79533b154db2bafb
+Author: Jason Boyer <JBoyer@equinoxinitiative.org>
+Date: Fri Jul 24 09:53:16 2020 -0400
+
+ LP1747542: Stamp upgrade script
+
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+1 1 Open-ILS/src/sql/Pg/upgrade/{XXXX.lp1747542_action_item_user_circ_test.sql => 1209.lp1747542_action_item_user_circ_test.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.lp1747542_action_item_user_circ_test.sql => 1209.lp1747542_action_item_user_circ_test.sql} (99%)
+
+commit 82185fe71ee972a0753d748a93540c3f6edb2958
+Author: Chris Sharp <csharp@georgialibraries.org>
+Date: Mon Feb 5 18:58:43 2018 -0500
+
+ LP#1747542 - Repair item/user circulation test
+
+ The action.item_user_circ_test function was previously
+ ignoring lost or longoverdue and paid-for circulations.
+ Adding a check for whether the circulation is closed
+ fixes this.
+
+ Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+1 0 Open-ILS/src/sql/Pg/100.circ_matrix.sql
+237 0 Open-ILS/src/sql/Pg/upgrade/XXXX.lp1747542_action_item_user_circ_test.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.lp1747542_action_item_user_circ_test.sql
+
+commit f95cf009f6e131b1cad0bd02f8a31629dee658f0
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Tue Jul 7 16:24:49 2020 -0400
+
+ LP#1886713: fix issue where AngularJS hotkeys fail to initialize
+
+ Fixes a race condition where the navbar service can look for
+ eg-accesskey attributes before all of the elements that have
+ them meet the conditions to show up in the DOM.
+
+ To test
+ -------
+ [1] From an AngularJS part of the staff interface, note that
+ hitting F8 sometimes does not perform the retrieve
+ last patron action, nor does F8 show up on the list of
+ hot keys when you hit "?" outside of an input.
+ [2] Apply the patch and repeat step 1. This time, the F8
+ hotkey should consistently work.
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+
+7 4 Open-ILS/web/js/ui/default/staff/services/navbar.js
+
+commit d38082cd9df5080fc41c291e3025fade18fb0316
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Thu Jun 6 18:15:56 2019 -0700
+
+ LP1474874: Consistent page headers in the Angular client
+
+ This commit ensures that each screen in the Angular staff client uses
+ the <eg-staff-banner> component to better orient its users.
+
+ This commit also gives the eg-staff-banner some <h1> semantics, per
+ WebAIM's guidance: "Pages should be structured in a hierarchical manner,
+ generally with one 1st degree headings (<h1>) being the most important
+ (usually page titles or main content heading)" -- https://webaim.org/techniques/semanticstructure/
+
+ To test:
+
+ 1) Go to [your-server]/eg2/en-US/staff/catalog/search
+ 2) Confirm that there is a header that gives the page title at the top
+ of the page.
+ 3) Go to an Angular Vandelay page.
+ 4) Confirm that you see a similar header as in step 2.
+ 5) Go to an Angular Administration page.
+ 6) repeat step 4.
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+2 1 Open-ILS/src/eg2/src/app/staff/cat/vandelay/vandelay.component.html
+2 0 Open-ILS/src/eg2/src/app/staff/catalog/browse.component.html
+2 0 Open-ILS/src/eg2/src/app/staff/catalog/catalog.component.html
+2 0 Open-ILS/src/eg2/src/app/staff/catalog/cnbrowse.component.html
+1 1 Open-ILS/src/eg2/src/app/staff/share/staff-banner.component.ts
+
+commit 63cecbf966de5e98efa9031cb2c7e74e848267df
+Author: Jason Boyer <JBoyer@equinoxinitiative.org>
+Date: Fri Jul 24 08:41:49 2020 -0400
+
+ LP1870605: Stamp upgrade script
+
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+1 1 Open-ILS/src/sql/Pg/upgrade/{xxxx.schema.emergency_closing_fines_fix.sql => 1208.schema.emergency_closing_fines_fix.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{xxxx.schema.emergency_closing_fines_fix.sql => 1208.schema.emergency_closing_fines_fix.sql} (99%)
+
+commit a0f73155019638e7e5fa2aa99ddead01a3307483
+Author: Steven Callender <stevecallender@esilibrary.com>
+Date: Fri Apr 3 15:20:39 2020 -0400
+
+ LP1870605: Fix typo in emergency closing functions
+
+ The emergency closing handler was ignoring any
+ circulations that already had fines due to a typo
+ in the stage 2 circ and reservation functions.
+
+ Signed-off-by: Steven Callender <stevecallender@esilibrary.com>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
+
+2 2 Open-ILS/src/sql/Pg/096.schema.emergency_closing.sql
+191 0 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.emergency_closing_fines_fix.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/xxxx.schema.emergency_closing_fines_fix.sql
+
+commit 49b28c6d2d6b04c53ccdf51a7f447431044d7045
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Thu Jul 23 06:37:07 2020 -0700
+
+ LP#1705302: Stamping Upgrade Script
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+1 1 Open-ILS/src/sql/Pg/upgrade/{XXXX.data.lp1705302-update-receipt-template-setting-descriptions.sql => 1207.data.lp1705302-update-receipt-template-setting-descriptions.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.data.lp1705302-update-receipt-template-setting-descriptions.sql => 1207.data.lp1705302-update-receipt-template-setting-descriptions.sql} (96%)
+
+commit a4fa2284b788d7052a81ee48c28b736f93cac835
+Author: Mike Risher <mrisher@catalyte.io>
+Date: Tue Jun 11 09:57:58 2019 -0700
+
+ lp1705302 update description of receipt template
+
+ Updated editing instructions to give correct syntax and changing name
+ from receipt templates to Print Templates
+
+ Signed-off-by: Mike Risher <mrisher@catalyte.io>
+
+ Changes to be committed:
+ modified: src/sql/Pg/950.data.seed-values.sql
+ new file: src/sql/Pg/upgrade/XXXX.data.lp1705302-update-receipt-template-setting-descriptions.sql
+
+ Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+5 5 Open-ILS/src/sql/Pg/950.data.seed-values.sql
+36 0 Open-ILS/src/sql/Pg/upgrade/XXXX.data.lp1705302-update-receipt-template-setting-descriptions.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.data.lp1705302-update-receipt-template-setting-descriptions.sql
+
+commit 3168a635f7b95c55376aa126f96abf51bfd31b30
+Author: Jason Stephenson <jason@sigio.com>
+Date: Wed Jan 29 12:33:30 2020 -0500
+
+ LP#1775940: Archived Penalties/Messages does not Respect Date Range
+
+ This patch implements a.bellenir's suggestion of switching from
+ setQuery to watchQury in the archiveGrid of the web client circulation
+ patron app. It does now appear to respect the date range entered by
+ the user.
+
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+ Signed-off-by: John Amundson <jamundson@cwmars.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/web/js/ui/default/staff/circ/patron/app.js
+
+commit eae8919fe607392bbb40d6741f60b910032408e0
+Author: Josh Stompro <stompro@stompro.org>
+Date: Mon Feb 3 13:42:08 2020 -0600
+
+ LP#1754387 - User Buckets - Pending Users Enhancement
+
+ It wasn't possible to load more than 100 users from a barcode file import in
+ user buckets because of two issues. The pager was limited to only showing 100
+ barcodes at a time, and moving any users from the pending list would clear the
+ pending list.
+
+ Here is a branch that makes the following changes.
+
+ 1. Sets the default number of items to 100 and allows choosing the
+ 500,1000,10000 options for the pager.
+
+ 2. When moving users from pending to a bucket, only removes the moved users
+ from the pending list. This allows the user to move a larger number of
+ users to a bucket from pending, a batch at a time.
+
+ Testing Plan:
+
+ Before Changes:
+
+ 1. Load a file with 110 patron barcodes in the User Buckets, Pending Users interface.
+ 2. See that the pager only allows a max of 100 for the page size.
+ 3. Move one user to a bucket and note that the pending list gets cleared.
+
+ After Changes:
+
+ 1. Load a file with 110 patron barcodes.
+ 2. See that the pager allows for picking larger page sizes.
+ 3. Move one user to a bucket, and note that the pending list removes just that one user.
+
+ Another way to see the changes is to pick a pager size of 25, and select all the
+ entries. Then move them to a bucket and see that you can continue to move
+ batches of 25 until you have moved all the pending users.
+
+ Signed-off-by: Josh Stompro <stompro@stompro.org>
+ Signed-off-by: Gina Monti <gmonti@biblio.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+2 1 Open-ILS/src/templates/staff/circ/patron/bucket/t_pending.tt2
+18 2 Open-ILS/web/js/ui/default/staff/circ/patron/bucket/app.js
+
+commit 3d058276eee938efe7bb7090a050ae5858fc22bb
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Sun Mar 8 07:58:09 2020 -0700
+
+ LP1845241: Use the correct API call to Undelete a bib record
+
+ To test:
+
+ 1) Open up a delete-ready bibliographic record in the Web client
+ (no attached holdings, no located URI, no open orders attached, etc.)
+ 2) Delete it.
+ 3) Undelete it. Note that the "Undelete" button briefly turns into a
+ "Delete" button before changing back to an "Undelete" button. Note that
+ the bib record does not show up in search results within the Web client.
+ 4) Apply this commit.
+ 5) Now try undeleting the record again. Notice that the "Delete" button
+ does not revert to an "Undelete" button. Note also that the record is
+ once again showing up in search results (although you may have to be a
+ bit creative using search terms, due to search results caching).
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: blake <blake@mobiusconsortium.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+2 0 Open-ILS/src/templates/staff/cat/share/marcedit_strings.tt2
+18 2 Open-ILS/web/js/ui/default/staff/cat/services/marcedit.js
+
+commit 2ebe28bc8547df16a27ae0102fbb31bc1a867666
+Author: Jeff Davis <jeff.davis@bc.libraries.coop>
+Date: Thu Oct 10 16:01:06 2019 -0700
+
+ LP#1847680: live test for barcode completion
+
+ Signed-off-by: Jeff Davis <jeff.davis@bc.libraries.coop>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+99 0 Open-ILS/src/perlmods/live_t/30-barcode-completion.t
+ create mode 100644 Open-ILS/src/perlmods/live_t/30-barcode-completion.t
+
+commit 33bed7cce801d911fadee25484b4fc3c364d37af
+Author: Dan Scott <dan@coffeecode.net>
+Date: Tue Jan 7 15:05:06 2020 -0500
+
+ LP1805860: Display long patron names without obscuring input fields
+
+ Long patron names can obscure the input fields and menu items on patron
+ action screens. The only workaround is to reduce the font size using the
+ browser controls until the input fields and menu items are visible.
+
+ While the fixed position saves space at the top of the screen for
+ typical cases, it can be hard for staff to remember the font-reduction
+ workaround when they hit a long patron name.
+
+ Removing the fixed position CSS also better supports the display of
+ regular patron names on browsers that are not wide enough to display the
+ top menu (Search/Circulation/Cataloging/.../Workstation name/Locale) all
+ on a single line.
+
+ Signed-off-by: Dan Scott <dan@coffeecode.net>
+ Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+0 6 Open-ILS/src/templates/staff/css/circ.css.tt2
+
+commit b9f27dd2735b5cc2ef12be49a212333c3d2c20b0
+Author: Galen Charlton <gmc@equinoxinitiative.org>
+Date: Mon Jun 22 11:40:08 2020 -0400
+
+ LP#1844365: fix initialization of stat cats in patron registration form
+
+ If you edit a patron and it has (or gets added) a stat cat entry,
+ then from the registration form click on its inline patron search
+ link, fetch a patron that has no stat cats, then edit it, the
+ first patron's stat cats can show up in the registration form.
+ If the second patron does have stat cats, but not values set
+ for all of them, then the first patron's stat cat entries can
+ fill in cases where no entry was previously set.
+
+ This patch fixes patronRegSvc's initialization when loading
+ an existing patron record to avoid this.
+
+ To test
+ -------
+ [1] Edit a patron and ensure that it has at least one
+ statistical category set.
+ [2] From the patron search link in the patron app tab
+ bar, NOT the Search | Patron menu item, search for
+ and retrieve a patron that has no stat cats assigned.
+ [3] Edit the patron. Observe that the first patron's
+ stat cat entry displays in the second patron's
+ registration form.
+ [4] Apply the patch and repeats steps 1-3. This time,
+ the previous patron's stat cats should not infect
+ the second patron's registration form.
+
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Mike Risher <mrisher@catalyte.io>
+
+1 0 Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
+
+commit 8900bc3884b769e758a0d72365ceab878d352518
+Author: Kyle Huckins <khuckins@catalyte.io>
+Date: Thu May 23 21:47:02 2019 +0000
+
+ lp1775286 Color Indication of Overdue on Items Out
+
+ - Overdue items are highlighted in red in the Items Out UI.
+ - Ensure overdue-row and lost-row classes handle visited links
+
+ Signed-off-by: Kyle Huckins <khuckins@catalyte.io>
+ Signed-off-by: Jennifer Pringle <jennifer.pringle@bc.libraries.coop>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+3 2 Open-ILS/src/templates/staff/circ/patron/t_items_out.tt2
+1 1 Open-ILS/src/templates/staff/css/style.css.tt2
+9 0 Open-ILS/web/js/ui/default/staff/circ/patron/items_out.js
+
+commit 621cff2962c98412e040ab4933a79c84d4ec461d
+Author: Jeff Davis <jdavis@sitka.bclibraries.ca>
+Date: Tue May 5 10:34:36 2020 -0700
+
+ LP#1840294: use dedicated UI for match set admin, rather than auto-generated admin pages
+
+ Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.html
+
+commit bf8972d04d3436824ca3698d7dae43baaf66c0ce
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Fri Apr 24 16:09:57 2020 -0400
+
+ LP1874897 Staff catalog honors classification scheme
+
+ Use the org unit setting "cat.default_classification_scheme" to
+ determine which scheme to use when extracting the bib-level call number
+ for display in the Angular staff catalog.
+
+ This also modifies the API to look the value up so future calls to the
+ API will Just Work (and it's one less bit of data the browser has to
+ retrieve).
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 4 Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts
+13 3 Open-ILS/src/perlmods/lib/OpenILS/Application/Cat.pm
+
+commit 83c236951645ccfe244ba094684d26ba3b2d006a
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Fri Jul 3 10:05:33 2020 -0400
+
+ LP1886118 Staff catalog search format repair
+
+ Fixes an error in the staff catalog search params builder with regard to
+ encoding the search format. The 'format' param should be 'search_format'.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+
+1 1 Open-ILS/src/eg2/src/app/share/catalog/search-context.ts
+
+commit 09e7d384b0523be53c64e736889c141fd94108d0
+Author: Jason Stephenson <jason@sigio.com>
+Date: Fri Jul 17 07:09:29 2020 -0400
+
+ LP#1886852: Stamping Upgrade Script
+
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+1 1 Open-ILS/src/sql/Pg/002.schema.config.sql
+1 1 Open-ILS/src/sql/Pg/upgrade/{XXXX.function.distinct-regen_copy_map.sql => 1206.function.distinct-regen_copy_map.sql}
+ rename Open-ILS/src/sql/Pg/upgrade/{XXXX.function.distinct-regen_copy_map.sql => 1206.function.distinct-regen_copy_map.sql} (82%)
+
+commit bca8f5ec8040291b2b39a7e7ca31f223c51fb3f3
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Wed Jul 8 13:18:52 2020 -0400
+
+ LP#1886852: Protect against dupes in hold-copy map function
+
+ If the DB function that regenerates the hold-copy maps for a hold
+ receives duplicate copies in its second parameter, it blows up. This
+ commit prevents that by making the list unique at use time.
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+ Signed-off-by: Jason Stephenson <jason@sigio.com>
+
+1 1 Open-ILS/src/sql/Pg/090.schema.action.sql
+12 0 Open-ILS/src/sql/Pg/upgrade/XXXX.function.distinct-regen_copy_map.sql
+ create mode 100755 Open-ILS/src/sql/Pg/upgrade/XXXX.function.distinct-regen_copy_map.sql
+
+commit ee2d830686d02a37b8b26841ddd496fe1bfbe0c0
+Author: Jane Sandberg <sandbej@linnbenton.edu>
+Date: Sun Jul 12 08:10:26 2020 -0700
+
+ LP1848573: follow-up: minor changes to IDL labels for the ccs class
+
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+2 2 Open-ILS/examples/fm_IDL.xml
+
+commit 26d110b62f81ae38bf2cc4e8e98d89a76c490aa3
+Author: Shula Link <slink@gchrl.org>
+Date: Mon Mar 16 10:30:27 2020 -0400
+
+ LP1848573: Added nice labels to Open-ILS\examples\fm_IDL.xml
+ for copy status
+
+ Signed-off-by: Shula Link <slink@gchrl.org>
+ Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
+ Signed-off-by: Mike Risher <mrisher@catalyte.io>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+7 7 Open-ILS/examples/fm_IDL.xml
+
+commit c1f351be0393dd92251c3ca2cf5cedc8ca22b78c
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Wed Sep 12 09:14:58 2018 -0400
+
+ LP#1712854: Disable all server-side sorting, but provide a stub for later, if we move that way
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+ Signed-off-by: John Yorio <jyorio@equinoxinitiative.org>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+1 1 Open-ILS/src/templates/staff/circ/holds/t_shelf_list.tt2
+3 1 Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+34 1 Open-ILS/web/js/ui/default/staff/circ/holds/app.js
+
+commit 5b07204a98cd055f9945ded0540d96b0544b4943
+Author: Mike Rylander <mrylander@gmail.com>
+Date: Tue Sep 11 17:36:30 2018 -0400
+
+ LP#1712854: Add User Alias and User Alias or Display Name columns to shelf list
+
+ Signed-off-by: Mike Rylander <mrylander@gmail.com>
+ Signed-off-by: John Yorio <jyorio@equinoxinitiative.org>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+1 0 Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+2 0 Open-ILS/src/templates/staff/circ/holds/t_shelf_list.tt2
+
+commit d637584c4ac9d2b6d381b41e2f580cdb590cd329
+Author: Jason Boyer <JBoyer@eoli.info>
+Date: Fri Feb 21 16:08:36 2020 -0500
+
+ LP1864056: Don't compare multiple new Date()s
+
+ This branch addresses a race condition when
+ checking out or renewing items.
+ (The use of minDate in items_out was implicitly
+ immune to this issue, but that is made explicit
+ with this patch.)
+
+ To test
+ -------
+ [1] The race condition would be difficult to reliably
+ reproduce directly, although a tool like
+ https://github.com/mattzeunert/javascript-clock-speedup
+ might help simulate the problem, so to test, verify
+ that the following actions do not break:
+
+ * checking out a loan, both with and without
+ setting a specific due date
+ * renewing a loan with a specific due date
+ from the patron items out tab
+ * renewing a loan from Circulation -> Renew Items,
+ both with and without setting a specific due date.
+
+ Signed-off-by: Jason Boyer <JBoyer@eoli.info>
+ Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+3 2 Open-ILS/web/js/ui/default/staff/circ/patron/checkout.js
+3 2 Open-ILS/web/js/ui/default/staff/circ/patron/items_out.js
+3 3 Open-ILS/web/js/ui/default/staff/circ/renew/app.js
+
+commit 4062a68ccfcff1893ac5f2ec735ca40718ee3f4b
+Author: Mike Risher <mrisher@catalyte.io>
+Date: Thu Feb 20 23:07:30 2020 +0000
+
+ lp1735828 Copy Bucket multi show status
+
+ Revise the web client so that when one is in the copy bucket one can
+ select multiple entries and do "show status" on all of them.
+
+ Signed-off-by: Mike Risher <mrisher@catalyte.io>
+ Signed-off-by: Tiffany Little <tlittle@georgialibraries.org>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+2 0 Open-ILS/src/templates/staff/cat/bucket/copy/t_view.tt2
+9 0 Open-ILS/web/js/ui/default/staff/cat/bucket/copy/app.js
+
+commit 6ff6e8cd5413306663065e70ee84e581894bb767
+Author: Bill Erickson <berickxx@gmail.com>
+Date: Tue Mar 10 10:48:27 2020 -0400
+
+ LP1866546 MARC edit support authority record (un)delete
+
+ Teaches the Angular MARC editor to use PCRUD for deleting and undeleting
+ authority records instead of erroneously using the bib record delete /
+ undelete APIs.
+
+ Signed-off-by: Bill Erickson <berickxx@gmail.com>
+ Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
+
+87 28 Open-ILS/src/eg2/src/app/staff/share/marc-edit/editor.component.ts
--- /dev/null
+--Upgrade Script for 3.5.0 to 3.5.1
+\set eg_version '''3.5.1'''
+BEGIN;
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('3.5.1', :eg_version);
+
+SELECT evergreen.upgrade_deps_block_check('1206', :eg_version);
+
+CREATE OR REPLACE FUNCTION
+ action.hold_request_regen_copy_maps(
+ hold_id INTEGER, copy_ids INTEGER[]) RETURNS VOID AS $$
+ DELETE FROM action.hold_copy_map WHERE hold = $1;
+ INSERT INTO action.hold_copy_map (hold, target_copy) SELECT DISTINCT $1, UNNEST($2);
+$$ LANGUAGE SQL;
+
+
+SELECT evergreen.upgrade_deps_block_check('1207', :eg_version);
+
+UPDATE config.org_unit_setting_type
+ SET description = oils_i18n_gettext(
+ 'circ.staff_client.receipt.alert_text',
+ 'Text to be inserted into Print Templates in place of {{includes.alert_text}}',
+ 'cwst', 'label')
+ WHERE name = 'circ.staff_client.receipt.alert_text';
+UPDATE config.org_unit_setting_type
+ SET description = oils_i18n_gettext(
+ 'circ.staff_client.receipt.event_text',
+ 'Text to be inserted into Print Templates in place of {{includes.event_text}}',
+ 'cwst', 'label')
+ WHERE name = 'circ.staff_client.receipt.event_text';
+UPDATE config.org_unit_setting_type
+ SET description = oils_i18n_gettext(
+ 'circ.staff_client.receipt.footer_text',
+ 'Text to be inserted into Print Templates in place of {{includes.footer_text}}',
+ 'cwst', 'label')
+ WHERE name = 'circ.staff_client.receipt.footer_text';
+UPDATE config.org_unit_setting_type
+ SET description = oils_i18n_gettext(
+ 'circ.staff_client.receipt.header_text',
+ 'Text to be inserted into Print Templates in place of {{includes.header_text}}',
+ 'cwst', 'label')
+ WHERE name = 'circ.staff_client.receipt.header_text';
+UPDATE config.org_unit_setting_type
+ SET description = oils_i18n_gettext(
+ 'circ.staff_client.receipt.notice_text',
+ 'Text to be inserted into Print Templates in place of {{includes.notice_text}}',
+ 'cwst', 'label')
+ WHERE name = 'circ.staff_client.receipt.notice_text';
+
+
+SELECT evergreen.upgrade_deps_block_check('1208', :eg_version);
+
+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 balance_owed < 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 balance_owed < 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;
+
+
+
+SELECT evergreen.upgrade_deps_block_check('1209', :eg_version);
+
+CREATE OR REPLACE FUNCTION action.item_user_circ_test( circ_ou INT, match_item BIGINT, match_user INT, renewal BOOL ) RETURNS SETOF action.circ_matrix_test_result AS $func$
+DECLARE
+ user_object actor.usr%ROWTYPE;
+ standing_penalty config.standing_penalty%ROWTYPE;
+ item_object asset.copy%ROWTYPE;
+ item_status_object config.copy_status%ROWTYPE;
+ item_location_object asset.copy_location%ROWTYPE;
+ result action.circ_matrix_test_result;
+ circ_test action.found_circ_matrix_matchpoint;
+ circ_matchpoint config.circ_matrix_matchpoint%ROWTYPE;
+ circ_limit_set config.circ_limit_set%ROWTYPE;
+ hold_ratio action.hold_stats%ROWTYPE;
+ penalty_type TEXT;
+ items_out INT;
+ context_org_list INT[];
+ done BOOL := FALSE;
+ item_prox INT;
+ home_prox INT;
+BEGIN
+ -- Assume success unless we hit a failure condition
+ result.success := TRUE;
+
+ -- Need user info to look up matchpoints
+ SELECT INTO user_object * FROM actor.usr WHERE id = match_user AND NOT deleted;
+
+ -- (Insta)Fail if we couldn't find the user
+ IF user_object.id IS NULL THEN
+ result.fail_part := 'no_user';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ RETURN;
+ END IF;
+
+ -- Need item info to look up matchpoints
+ SELECT INTO item_object * FROM asset.copy WHERE id = match_item AND NOT deleted;
+
+ -- (Insta)Fail if we couldn't find the item
+ IF item_object.id IS NULL THEN
+ result.fail_part := 'no_item';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ RETURN;
+ END IF;
+
+ SELECT INTO circ_test * FROM action.find_circ_matrix_matchpoint(circ_ou, item_object, user_object, renewal);
+
+ circ_matchpoint := circ_test.matchpoint;
+ result.matchpoint := circ_matchpoint.id;
+ result.circulate := circ_matchpoint.circulate;
+ result.duration_rule := circ_matchpoint.duration_rule;
+ result.recurring_fine_rule := circ_matchpoint.recurring_fine_rule;
+ result.max_fine_rule := circ_matchpoint.max_fine_rule;
+ result.hard_due_date := circ_matchpoint.hard_due_date;
+ result.renewals := circ_matchpoint.renewals;
+ result.grace_period := circ_matchpoint.grace_period;
+ result.buildrows := circ_test.buildrows;
+
+ -- (Insta)Fail if we couldn't find a matchpoint
+ IF circ_test.success = false THEN
+ result.fail_part := 'no_matchpoint';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ RETURN;
+ END IF;
+
+ -- All failures before this point are non-recoverable
+ -- Below this point are possibly overridable failures
+
+ -- Fail if the user is barred
+ IF user_object.barred IS TRUE THEN
+ result.fail_part := 'actor.usr.barred';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ END IF;
+
+ -- Fail if the item can't circulate
+ IF item_object.circulate IS FALSE THEN
+ result.fail_part := 'asset.copy.circulate';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ END IF;
+
+ -- Fail if the item isn't in a circulateable status on a non-renewal
+ IF NOT renewal AND item_object.status <> 8 AND item_object.status NOT IN (
+ (SELECT id FROM config.copy_status WHERE is_available) ) THEN
+ result.fail_part := 'asset.copy.status';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ -- Alternately, fail if the item isn't checked out on a renewal
+ ELSIF renewal AND item_object.status <> 1 THEN
+ result.fail_part := 'asset.copy.status';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ END IF;
+
+ -- Fail if the item can't circulate because of the shelving location
+ SELECT INTO item_location_object * FROM asset.copy_location WHERE id = item_object.location;
+ IF item_location_object.circulate IS FALSE THEN
+ result.fail_part := 'asset.copy_location.circulate';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ END IF;
+
+ -- Use Circ OU for penalties and such
+ SELECT INTO context_org_list ARRAY_AGG(id) FROM actor.org_unit_full_path( circ_ou );
+
+ -- Proximity of user's home_ou to circ_ou to see if penalties should be ignored.
+ SELECT INTO home_prox prox FROM actor.org_unit_proximity WHERE from_org = user_object.home_ou AND to_org = circ_ou;
+
+ -- Proximity of user's home_ou to item circ_lib to see if penalties should be ignored.
+ SELECT INTO item_prox prox FROM actor.org_unit_proximity WHERE from_org = user_object.home_ou AND to_org = item_object.circ_lib;
+
+ IF renewal THEN
+ penalty_type = '%RENEW%';
+ ELSE
+ penalty_type = '%CIRC%';
+ END IF;
+
+ FOR standing_penalty IN
+ SELECT DISTINCT csp.*
+ FROM actor.usr_standing_penalty usp
+ JOIN config.standing_penalty csp ON (csp.id = usp.standing_penalty)
+ WHERE usr = match_user
+ AND usp.org_unit IN ( SELECT * FROM unnest(context_org_list) )
+ AND (usp.stop_date IS NULL or usp.stop_date > NOW())
+ AND (csp.ignore_proximity IS NULL
+ OR csp.ignore_proximity < home_prox
+ OR csp.ignore_proximity < item_prox)
+ AND csp.block_list LIKE penalty_type LOOP
+
+ result.fail_part := standing_penalty.name;
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ END LOOP;
+
+ -- Fail if the test is set to hard non-circulating
+ IF circ_matchpoint.circulate IS FALSE THEN
+ result.fail_part := 'config.circ_matrix_test.circulate';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ END IF;
+
+ -- Fail if the total copy-hold ratio is too low
+ IF circ_matchpoint.total_copy_hold_ratio IS NOT NULL THEN
+ SELECT INTO hold_ratio * FROM action.copy_related_hold_stats(match_item);
+ IF hold_ratio.total_copy_ratio IS NOT NULL AND hold_ratio.total_copy_ratio < circ_matchpoint.total_copy_hold_ratio THEN
+ result.fail_part := 'config.circ_matrix_test.total_copy_hold_ratio';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ END IF;
+ END IF;
+
+ -- Fail if the available copy-hold ratio is too low
+ IF circ_matchpoint.available_copy_hold_ratio IS NOT NULL THEN
+ IF hold_ratio.hold_count IS NULL THEN
+ SELECT INTO hold_ratio * FROM action.copy_related_hold_stats(match_item);
+ END IF;
+ IF hold_ratio.available_copy_ratio IS NOT NULL AND hold_ratio.available_copy_ratio < circ_matchpoint.available_copy_hold_ratio THEN
+ result.fail_part := 'config.circ_matrix_test.available_copy_hold_ratio';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ END IF;
+ END IF;
+
+ -- Fail if the user has too many items out by defined limit sets
+ FOR circ_limit_set IN SELECT ccls.* FROM config.circ_limit_set ccls
+ JOIN config.circ_matrix_limit_set_map ccmlsm ON ccmlsm.limit_set = ccls.id
+ WHERE ccmlsm.active AND ( ccmlsm.matchpoint = circ_matchpoint.id OR
+ ( ccmlsm.matchpoint IN (SELECT * FROM unnest(result.buildrows)) AND ccmlsm.fallthrough )
+ ) LOOP
+ IF circ_limit_set.items_out > 0 AND NOT renewal THEN
+ SELECT INTO context_org_list ARRAY_AGG(aou.id)
+ FROM actor.org_unit_full_path( circ_ou ) aou
+ JOIN actor.org_unit_type aout ON aou.ou_type = aout.id
+ WHERE aout.depth >= circ_limit_set.depth;
+ IF circ_limit_set.global THEN
+ WITH RECURSIVE descendant_depth AS (
+ SELECT ou.id,
+ ou.parent_ou
+ FROM actor.org_unit ou
+ WHERE ou.id IN (SELECT * FROM unnest(context_org_list))
+ UNION
+ SELECT ou.id,
+ ou.parent_ou
+ FROM actor.org_unit ou
+ JOIN descendant_depth ot ON (ot.id = ou.parent_ou)
+ ) SELECT INTO context_org_list ARRAY_AGG(ou.id) FROM actor.org_unit ou JOIN descendant_depth USING (id);
+ END IF;
+ SELECT INTO items_out COUNT(DISTINCT circ.id)
+ FROM action.circulation circ
+ JOIN asset.copy copy ON (copy.id = circ.target_copy)
+ LEFT JOIN action.circulation_limit_group_map aclgm ON (circ.id = aclgm.circ)
+ WHERE circ.usr = match_user
+ AND circ.circ_lib IN (SELECT * FROM unnest(context_org_list))
+ AND circ.checkin_time IS NULL
+ AND circ.xact_finish IS NULL
+ AND (circ.stop_fines IN ('MAXFINES','LONGOVERDUE') OR circ.stop_fines IS NULL)
+ AND (copy.circ_modifier IN (SELECT circ_mod FROM config.circ_limit_set_circ_mod_map WHERE limit_set = circ_limit_set.id)
+ OR copy.location IN (SELECT copy_loc FROM config.circ_limit_set_copy_loc_map WHERE limit_set = circ_limit_set.id)
+ OR aclgm.limit_group IN (SELECT limit_group FROM config.circ_limit_set_group_map WHERE limit_set = circ_limit_set.id)
+ );
+ IF items_out >= circ_limit_set.items_out THEN
+ result.fail_part := 'config.circ_matrix_circ_mod_test';
+ result.success := FALSE;
+ done := TRUE;
+ RETURN NEXT result;
+ END IF;
+ END IF;
+ SELECT INTO result.limit_groups result.limit_groups || ARRAY_AGG(limit_group) FROM config.circ_limit_set_group_map WHERE limit_set = circ_limit_set.id AND NOT check_only;
+ END LOOP;
+
+ -- If we passed everything, return the successful matchpoint
+ IF NOT done THEN
+ RETURN NEXT result;
+ END IF;
+
+ RETURN;
+END;
+$func$ LANGUAGE plpgsql;
+
+
+SELECT evergreen.upgrade_deps_block_check('1211', :eg_version); -- Dyrcona/rhamby/gmcharlt
+
+CREATE OR REPLACE FUNCTION actor.usr_delete(
+ src_usr IN INTEGER,
+ dest_usr IN INTEGER
+) RETURNS VOID AS $$
+DECLARE
+ old_profile actor.usr.profile%type;
+ old_home_ou actor.usr.home_ou%type;
+ new_profile actor.usr.profile%type;
+ new_home_ou actor.usr.home_ou%type;
+ new_name text;
+ new_dob actor.usr.dob%type;
+BEGIN
+ SELECT
+ id || '-PURGED-' || now(),
+ profile,
+ home_ou,
+ dob
+ INTO
+ new_name,
+ old_profile,
+ old_home_ou,
+ new_dob
+ FROM
+ actor.usr
+ WHERE
+ id = src_usr;
+ --
+ -- Quit if no such user
+ --
+ IF old_profile IS NULL THEN
+ RETURN;
+ END IF;
+ --
+ perform actor.usr_purge_data( src_usr, dest_usr );
+ --
+ -- Find the root grp_tree and the root org_unit. This would be simpler if we
+ -- could assume that there is only one root. Theoretically, someday, maybe,
+ -- there could be multiple roots, so we take extra trouble to get the right ones.
+ --
+ SELECT
+ id
+ INTO
+ new_profile
+ FROM
+ permission.grp_ancestors( old_profile )
+ WHERE
+ parent is null;
+ --
+ SELECT
+ id
+ INTO
+ new_home_ou
+ FROM
+ actor.org_unit_ancestors( old_home_ou )
+ WHERE
+ parent_ou is null;
+ --
+ -- Truncate date of birth
+ --
+ IF new_dob IS NOT NULL THEN
+ new_dob := date_trunc( 'year', new_dob );
+ END IF;
+ --
+ UPDATE
+ actor.usr
+ SET
+ card = NULL,
+ profile = new_profile,
+ usrname = new_name,
+ email = NULL,
+ passwd = random()::text,
+ standing = DEFAULT,
+ ident_type =
+ (
+ SELECT MIN( id )
+ FROM config.identification_type
+ ),
+ ident_value = NULL,
+ ident_type2 = NULL,
+ ident_value2 = NULL,
+ net_access_level = DEFAULT,
+ photo_url = NULL,
+ prefix = NULL,
+ first_given_name = new_name,
+ second_given_name = NULL,
+ family_name = new_name,
+ suffix = NULL,
+ alias = NULL,
+ guardian = NULL,
+ day_phone = NULL,
+ evening_phone = NULL,
+ other_phone = NULL,
+ mailing_address = NULL,
+ billing_address = NULL,
+ home_ou = new_home_ou,
+ dob = new_dob,
+ active = FALSE,
+ master_account = DEFAULT,
+ super_user = DEFAULT,
+ barred = FALSE,
+ deleted = TRUE,
+ juvenile = DEFAULT,
+ usrgroup = 0,
+ claims_returned_count = DEFAULT,
+ credit_forward_balance = DEFAULT,
+ last_xact_id = DEFAULT,
+ alert_message = NULL,
+ pref_prefix = NULL,
+ pref_first_given_name = NULL,
+ pref_second_given_name = NULL,
+ pref_family_name = NULL,
+ pref_suffix = NULL,
+ name_keywords = NULL,
+ create_date = now(),
+ expire_date = now()
+ WHERE
+ id = src_usr;
+END;
+$$ LANGUAGE plpgsql;
+
+COMMIT;
+
+-- Update auditor tables to catch changes to source tables.
+-- Can be removed/skipped if there were no schema changes.
+SELECT auditor.update_auditors();
--- /dev/null
+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.6.
+ * **Linux**: Evergreen has been tested on
+ Debian Buster (10),
+ Debian Stretch (9),
+ Debian Jessie (8),
+ Ubuntu Bionic Beaver (18.04),
+ and Ubuntu Xenial Xerus (16.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.2.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.2.0 or later).
+ You can download OpenSRF releases from http://evergreen-ils.org/opensrf-downloads/
++
+2. Issue the following commands as the *root* Linux account to install
+ prerequisites using the `Makefile.install` prerequisite installer,
+ substituting `debian-buster`,`debian-stretch`,`debian-jessie`,`ubuntu-bionic`, or
+ `ubuntu-xenial` for <osname> below:
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>
+------------------------------------------------------------------------------
++
+[[optional_developer_additions]]
+3. OPTIONAL: Developer additions
++
+To perform certain developer tasks from a Git source code checkout,
+including the testing of the Angular web client components,
+additional packages may be required. As the *root* Linux account:
++
+ * To install packages needed for retrieving and managing web dependencies,
+ use the <osname>-developer Makefile.install target. Currently,
+ this is only needed for building and installing the web
+ staff client.
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>-developer
+------------------------------------------------------------------------------
++
+ * To install packages required for building Evergreen translations, use
+ the <osname>-translator Makefile.install target.
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>-translator
+------------------------------------------------------------------------------
++
+ * To install packages required for building Evergreen release bundles, use
+ the <osname>-packager Makefile.install target.
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>-packager
+------------------------------------------------------------------------------
+
+Extra steps for web staff client
+--------------------------------
+
+[NOTE]
+Skip this entire section if you are using an official release tarball downloaded
+from http://evergreen-ils.org/downloads. Otherwise, ensure you have installed the
+<<optional_developer_additions,optional developer additions>> before proceeding.
+
+[[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, concat+minify
+npm run build-prod
+------------------------------------------------------------------------------
++
+4. OPTIONAL: Test web client code if the <osname>-developer packages were installed.
+ CHROME_BIN should be set to the path to chrome or chromimum, e.g.,
+ `/usr/bin/chromium`:
++
+[source,sh]
+------------------------------------------------------------------------------
+CHROME_BIN=/path/to/chrome 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
+------------------------------------------------------------------------------
++
+4. OPTIONAL: Test eg2 web client code if the <osname>-developer packages were installed:
+ CHROME_BIN should be set to the path to chrome or chromimum, e.g.,
+ `/usr/bin/chromium`:
++
+[source,sh]
+------------------------------------------------------------------------------
+CHROME_BIN=/path/to/chrome 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 / Buster, run the following command as the root user:
+
+[source, bash]
+------------------------------------------------------------------------------
+ldconfig
+------------------------------------------------------------------------------
+
+Additional Instructions for Developers
+--------------------------------------
+
+[NOTE]
+Skip this section if you are using an official release tarball downloaded
+from http://evergreen-ils.org/egdownloads
+
+Developers working directly with the source code from the Git repository,
+rather than an official release tarball, need to install the Dojo Toolkit
+set of JavaScript libraries. The appropriate version of Dojo is included in
+Evergreen release tarballs. Developers should install the Dojo 1.3.3 version
+of Dojo by issuing the following commands as the *opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+wget http://download.dojotoolkit.org/release-1.3.3/dojo-release-1.3.3.tar.gz
+tar -C /openils/var/web/js -xzf dojo-release-1.3.3.tar.gz
+cp -r /openils/var/web/js/dojo-release-1.3.3/* /openils/var/web/js/dojo/.
+------------------------------------------------------------------------------
+
+
+Configure the Apache Web server
+-------------------------------
+
+. Use the example configuration files to configure your Web server for
+the Evergreen catalog, web staff client, Web services, and administration
+interfaces. Issue the following commands as the *root* Linux account:
++
+[source,bash]
+------------------------------------------------------------------------------------
+cp Open-ILS/examples/apache_24/eg_24.conf /etc/apache2/sites-available/eg.conf
+cp Open-ILS/examples/apache_24/eg_vhost_24.conf /etc/apache2/eg_vhost.conf
+cp Open-ILS/examples/apache_24/eg_startup /etc/apache2/
+# Now set up SSL
+mkdir /etc/apache2/ssl
+cd /etc/apache2/ssl
+------------------------------------------------------------------------------------
++
+. The `openssl` command cuts a new SSL key for your Apache server. For a
+production server, you should purchase a signed SSL certificate, but you can
+just use a self-signed certificate and accept the warnings in the
+and browser during testing and development. Create an SSL key for the Apache
+server by issuing the following command as the *root* Linux account:
++
+[source,bash]
+------------------------------------------------------------------------------
+openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
+------------------------------------------------------------------------------
++
+. As the *root* Linux account, edit the `eg.conf` file that you copied into
+place.
+ a. To enable access to the offline upload / execute interface from any
+ workstation on any network, make the following change (and note that
+ you *must* secure this for a production instance):
+ * Replace `Require host 10.0.0.0/8` with `Require all granted`
+. Change the user for the Apache server.
+ * As the *root* Linux account, edit
+ `/etc/apache2/envvars`. Change `export APACHE_RUN_USER=www-data` to
+ `export APACHE_RUN_USER=opensrf`.
+. As the *root* Linux account, configure Apache with KeepAlive settings
+ appropriate for Evergreen. Higher values can improve the performance of a
+ single client by allowing multiple requests to be sent over the same TCP
+ connection, but increase the risk of using up all available Apache child
+ processes and memory.
+ * Edit `/etc/apache2/apache2.conf`.
+ a. Change `KeepAliveTimeout` to `1`.
+ b. Change `MaxKeepAliveRequests` to `100`.
+. As the *root* Linux account, configure the prefork module to start and keep
+ enough Apache servers available to provide quick responses to clients without
+ running out of memory. The following settings are a good starting point for a
+ site that exposes the default Evergreen catalogue to the web:
++
+.`/etc/apache2/mods-available/mpm_prefork.conf`
+[source,bash]
+------------------------------------------------------------------------------
+<IfModule mpm_prefork_module>
+ StartServers 15
+ MinSpareServers 5
+ MaxSpareServers 15
+ MaxRequestWorkers 75
+ MaxConnectionsPerChild 500
+</IfModule>
+------------------------------------------------------------------------------
++
+. As the *root* user, enable the mpm_prefork module:
++
+[source,bash]
+------------------------------------------------------------------------------
+a2dismod mpm_event
+a2enmod mpm_prefork
+------------------------------------------------------------------------------
++
+. As the *root* Linux account, enable the Evergreen site:
++
+[source,bash]
+------------------------------------------------------------------------------
+a2dissite 000-default # OPTIONAL: disable the default site (the "It Works" page)
+a2ensite eg.conf
+------------------------------------------------------------------------------
++
+. As the *root* Linux account, enable Apache to write
+ to the lock directory; this is currently necessary because Apache
+ is running as the `opensrf` user:
++
+[source,bash]
+------------------------------------------------------------------------------
+chown opensrf /var/lock/apache2
+------------------------------------------------------------------------------
+
+Learn more about additional Apache options in the following sections:
+
+ * <<_apache_rewrite_tricks,Apache Rewrite Tricks>>
+ * <<_apache_access_handler_perl_module,Apache Access Handler Perl Module>>
+
+Configure OpenSRF for the Evergreen application
+-----------------------------------------------
+There are a number of example OpenSRF configuration files in `/openils/conf/`
+that you can use as a template for your Evergreen installation. Issue the
+following commands as the *opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+cp -b /openils/conf/opensrf_core.xml.example /openils/conf/opensrf_core.xml
+cp -b /openils/conf/opensrf.xml.example /openils/conf/opensrf.xml
+------------------------------------------------------------------------------
+
+When you installed OpenSRF, you created four Jabber users on two
+separate domains and edited the `opensrf_core.xml` file accordingly. Please
+refer back to the OpenSRF README and, as the *opensrf* Linux account, edit the
+Evergreen version of the `opensrf_core.xml` file using the same Jabber users
+and domains as you used while installing and testing OpenSRF.
+
+[NOTE]
+The `-b` flag tells the `cp` command to create a backup version of the
+destination file. The backup version of the destination file has a tilde (`~`)
+appended to the file name, so if you have forgotten the Jabber users and
+domains, you can retrieve the settings from the backup version of the files.
+
+`eg_db_config`, described in <<_creating_the_evergreen_database,Creating the Evergreen
+database>>, sets the database connection information in `opensrf.xml` for you.
+
+Configure action triggers for the Evergreen application
+-------------------------------------------------------
+_Action Triggers_ provide hooks for the system to perform actions when a given
+event occurs; for example, to generate reminder or overdue notices, the
+`checkout.due` hook is processed and events are triggered for potential actions
+if there is no checkin time.
+
+To enable the default set of hooks, issue the following command as the
+*opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+cp -b /openils/conf/action_trigger_filters.json.example /openils/conf/action_trigger_filters.json
+------------------------------------------------------------------------------
+
+For more information about configuring and running action triggers, see
+<<_processing_action_triggers,Notifications / Action Triggers>>.
+
+Creating the Evergreen database
+-------------------------------
+
+Setting up the PostgreSQL server
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+For production use, most libraries install the PostgreSQL database server on a
+dedicated machine. Therefore, by default, the `Makefile.install` prerequisite
+installer does *not* install the PostgreSQL 9 database server that is required
+by every Evergreen system. You can install the packages required by Debian or
+Ubuntu on the machine of your choice using the following commands as the
+*root* Linux account:
+
+. Installing PostgreSQL server packages
+
+Each OS build target provides the postgres server installation packages
+required for each operating system. To install Postgres server packages,
+use the make target 'postgres-server-<OSTYPE>'. Choose the most appropriate
+command below based on your operating system. This will install PostgreSQL 9.6,
+the minimum supported version.
+
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-buster
+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-xenial
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-bionic
+------------------------------------------------------------------------------
+
+To install PostgreSQL version 10, use the following command for your operating
+system:
+
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-buster-10
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-stretch-10
+make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-jessie-10
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-xenial-10
+make -f Open-ILS/src/extras/Makefile.install postgres-server-ubuntu-bionic-10
+------------------------------------------------------------------------------
+
+For a standalone PostgreSQL server, install the following Perl modules for your
+distribution as the *root* Linux account:
+
+.(Debian and Ubuntu)
+No extra modules required for these distributions.
+
+You need to create a PostgreSQL superuser to create and access the database.
+Issue the following command as the *postgres* Linux account to create a new
+PostgreSQL superuser named `evergreen`. When prompted, enter the new user's
+password:
+
+[source, bash]
+------------------------------------------------------------------------------
+createuser -s -P evergreen
+------------------------------------------------------------------------------
+
+.Enabling connections to the PostgreSQL database
+
+Your PostgreSQL database may be configured by default to prevent connections,
+for example, it might reject attempts to connect via TCP/IP or from other
+servers. To enable TCP/IP connections from localhost, check your `pg_hba.conf`
+file, found in the `/etc/postgresql/` directory on Debian and Ubuntu.
+A simple way to enable TCP/IP
+connections from localhost to all databases with password authentication, which
+would be suitable for a test install of Evergreen on a single server, is to
+ensure the file contains the following entries _before_ any "host ... ident"
+entries:
+
+------------------------------------------------------------------------------
+host all all ::1/128 md5
+host all all 127.0.0.1/32 md5
+------------------------------------------------------------------------------
+
+When you change the `pg_hba.conf` file, you will need to reload PostgreSQL to
+make the changes take effect. For more information on configuring connectivity
+to PostgreSQL, see
+http://www.postgresql.org/docs/devel/static/auth-pg-hba-conf.html
+
+Creating the Evergreen database and schema
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Once you have created the *evergreen* PostgreSQL account, you also need to
+create the database and schema, and configure your configuration files to point
+at the database server. Issue the following command as the *root* Linux account
+from inside the Evergreen source directory, replacing <user>, <password>,
+<hostname>, <port>, and <dbname> with the appropriate values for your
+PostgreSQL database (where <user> and <password> are for the *evergreen*
+PostgreSQL account you just created), and replace <admin-user> and <admin-pass>
+with the values you want for the *egadmin* Evergreen administrator account:
+
+[source, bash]
+------------------------------------------------------------------------------
+perl Open-ILS/src/support-scripts/eg_db_config --update-config \
+ --service all --create-database --create-schema --create-offline \
+ --user <user> --password <password> --hostname <hostname> --port <port> \
+ --database <dbname> --admin-user <admin-user> --admin-pass <admin-pass>
+------------------------------------------------------------------------------
+
+This creates the database and schema and configures all of the services in
+your `/openils/conf/opensrf.xml` configuration file to point to that database.
+It also creates the configuration files required by the Evergreen `cgi-bin`
+administration scripts, and sets the user name and password for the *egadmin*
+Evergreen administrator account to your requested values.
+
+You can get a complete set of options for `eg_db_config` by passing the
+`--help` parameter.
+
+Loading sample data
+~~~~~~~~~~~~~~~~~~~
+If you add the `--load-all-sample` parameter to the `eg_db_config` command,
+a set of authority and bibliographic records, call numbers, copies, staff
+and regular users, and transactions will be loaded into your target
+database. This sample dataset is commonly referred to as the _concerto_
+sample data, and can be useful for testing out Evergreen functionality and
+for creating problem reports that developers can easily recreate with their
+own copy of the _concerto_ sample data.
+
+Creating the database on a remote server
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+In a production instance of Evergreen, your PostgreSQL server should be
+installed on a dedicated server.
+
+PostgreSQL 9.6 and later
+^^^^^^^^^^^^^^^^^^^^^^^^
+To create the database instance on a remote database server running PostgreSQL
+9.6 or later, simply use the `--create-database` flag on `eg_db_config`.
+
+Starting Evergreen
+------------------
+1. As the *root* Linux account, start the `memcached` and `ejabberd` services
+(if they aren't already running):
++
+[source, bash]
+------------------------------------------------------------------------------
+/etc/init.d/ejabberd start
+/etc/init.d/memcached start
+------------------------------------------------------------------------------
++
+2. As the *opensrf* Linux account, start Evergreen. The `-l` flag in the
+following command is only necessary if you want to force Evergreen to treat the
+hostname as `localhost`; if you configured `opensrf.xml` using the real
+hostname of your machine as returned by `perl -ENet::Domain 'print
+Net::Domain::hostfqdn() . "\n";'`, you should not use the `-l` flag.
++
+[source, bash]
+------------------------------------------------------------------------------
+osrf_control -l --start-all
+------------------------------------------------------------------------------
++
+ ** If you receive the error message `bash: osrf_control: command not found`,
+ then your environment variable `PATH` does not include the `/openils/bin`
+ directory; this should have been set in the *opensrf* Linux account's
+ `.bashrc` configuration file. To manually set the `PATH` variable, edit the
+ configuration file `~/.bashrc` as the *opensrf* Linux account and add the
+ following line:
++
+[source, bash]
+------------------------------------------------------------------------------
+export PATH=$PATH:/openils/bin
+------------------------------------------------------------------------------
++
+3. As the *opensrf* Linux account, generate the Web files needed by the web staff
+ client and catalogue and update the organization unit proximity (you need to do
+ this the first time you start Evergreen, and after that each time you change the library org unit configuration.
+):
++
+[source, bash]
+------------------------------------------------------------------------------
+autogen.sh
+------------------------------------------------------------------------------
++
+4. As the *root* Linux account, restart the Apache Web server:
++
+[source, bash]
+------------------------------------------------------------------------------
+/etc/init.d/apache2 restart
+------------------------------------------------------------------------------
++
+If the Apache Web server was running when you started the OpenSRF services, you
+might not be able to successfully log in to the OPAC or web staff client until the
+Apache Web server is restarted.
+
+Testing connections to Evergreen
+--------------------------------
+
+Once you have installed and started Evergreen, test your connection to
+Evergreen via `srfsh`. As the *opensrf* Linux account, issue the following
+commands to start `srfsh` and try to log onto the Evergreen server using the
+*egadmin* Evergreen administrator user name and password that you set using the
+`eg_db_config` command:
+
+[source, bash]
+------------------------------------------------------------------------------
+/openils/bin/srfsh
+srfsh% login <admin-user> <admin-pass>
+------------------------------------------------------------------------------
+
+You should see a result like:
+
+ Received Data: "250bf1518c7527a03249858687714376"
+ ------------------------------------
+ Request Completed Successfully
+ Request Time in seconds: 0.045286
+ ------------------------------------
+
+ Received Data: {
+ "ilsevent":0,
+ "textcode":"SUCCESS",
+ "desc":" ",
+ "pid":21616,
+ "stacktrace":"oils_auth.c:304",
+ "payload":{
+ "authtoken":"e5f9827cc0f93b503a1cc66bee6bdd1a",
+ "authtime":420
+ }
+
+ }
+
+ ------------------------------------
+ Request Completed Successfully
+ Request Time in seconds: 1.336568
+ ------------------------------------
+[[install-troubleshooting-1]]
+If this does not work, it's time to do some troubleshooting.
+
+ * As the *opensrf* Linux account, run the `settings-tester.pl` script to see
+ if it finds any system configuration problems. The script is found at
+ `Open-ILS/src/support-scripts/settings-tester.pl` in the Evergreen source
+ tree.
+ * Follow the steps in the http://evergreen-ils.org/dokuwiki/doku.php?id=troubleshooting:checking_for_errors[troubleshooting guide].
+ * If you have faithfully followed the entire set of installation steps
+ listed here, you are probably extremely close to a working system.
+ Gather your configuration files and log files and contact the
+ http://evergreen-ils.org/communicate/mailing-lists/[Evergreen development
+mailing list] for assistance before making any drastic changes to your system
+ configuration.
+
+Getting help
+------------
+
+Need help installing or using Evergreen? Join the mailing lists at
+http://evergreen-ils.org/communicate/mailing-lists/ or contact us on the Freenode
+IRC network on the #evergreen channel.
+
+License
+-------
+This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
+Unported License. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative
+Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.