]> git.evergreen-ils.org Git - Evergreen.git/blob - docs/RELEASE_NOTES_2_10.adoc
19550760aa2917008ce0ec42b7a8be2fd4f5dd33
[Evergreen.git] / docs / RELEASE_NOTES_2_10.adoc
1 Evergreen 2.10.1 Release Notes
2 ==============================
3 :toc:
4 :numbered:
5
6 Evergreen 2.10.2
7 ---------------
8 This release contains several bugfixes improving on Evergreen 2.10.1
9
10 * Fixes a bug where phrase searching in the catalog failed when the phrase
11 started or ended with punctuation.
12 * Fixes a bug where changing the sort order in the public catalog to
13 "relevance" could fail.
14 * Fixes a bug that prevented users from recreating a monograph part that
15 had previously been deleted.
16 * Fixes a bug where serials checkouts failed for users that track circulation
17 history.
18 * Fixes a bug that prevented the Library Settings Editor from
19 consistently retrieving the values of library settings.
20 * Fixes several issues with the new web-based Angular patron editor, including:
21 ** Allows barcodes to be used as user name even if it doesn't match the user
22 name regex.
23 ** Presents an alert when trying to save a form with invalid values.
24 ** Allows staff to delete all patron addresses if the corresponding Library 
25 Setting allows them to do so.
26 ** Honors Library Settings to require the county and state fields at patron
27 registration time.
28 ** Resizes checkboxes that had become huge in some browsers.
29 ** Displays the New Address button at all times.
30 ** Prevents staff from editing linked addresses for cloned users.
31 ** Fixes a bug where out-of-scope stat cats would be incorrectly bundled in the 
32 patron save operation, resulting in a server-side error on save.
33 * Silences unnecessary warnings emitted for libraries using extending grace
34 periods.
35 * Removes support for Debian Squeeze now that its long-term support period
36 has ended.
37 * Fixes a bug that had prevented the dependency libpcre3 from being
38 intalled on Debian Jessie.
39 * Fixes some QA tests that had been failing.
40 * Renumbers the Perl unit test files.
41
42 Acknowledgements
43 ~~~~~~~~~~~~~~~~
44 We would like to thank the following individuals who contributed
45 code and documentation patches to the 2.10.2 point release of Evergreen:
46
47 * Jason Boyer
48 * Steve Callender
49 * Galen Charlton
50 * Bill Erickson
51 * Anna Goben
52 * Angela Kilsdonk
53 * Debbie Luchenbill
54 * Jennifer Pringle
55 * Mike Rylander
56 * Jane Sandberg
57 * Jason Stephenson
58 * Yamil Suarez
59
60 We also thank the following organizations whose employees contributed
61 patches:
62
63 * BC Libraries Cooperative
64 * Berklee College of Music
65 * Equinox Software, Inc.
66 * Evergreen Indiana
67 * King County Library System
68 * Linn Libraries Consortium
69 * Merrimack Valley Library Consortium
70 * MOBIUS
71
72
73 Evergreen 2.10.1
74 ----------------
75
76 Evergreen 2.10.1 is a bugfix release that fixes one significant
77 bug in 2.10.0:
78
79 * https://bugs.launchpad.net/bugs/1560174[Bug 1560174: Importing MARC records can fail in database upgraded to 2.10.0]
80
81 This bug affected only databases that were upgraded to 2.10.0 from a
82 previous version; fresh installations of 2.10.0 are not affected.
83
84 Evergreen users who prefer not to perform a full upgrade from 2.10.0
85 to 2.10.1 can fix the bug by applying the database update script
86 `2.10.0-2.10.1-upgrade-db.sql` (found in the source directory
87 `Open-ILS/src/sql/Pg/version-upgrade`).
88
89 Evergreen 2.10.1 Acknowledgments
90 --------------------------------
91 The Evergreen project would like to thank the following 
92 individuals who contributed code and testing to this release
93 of Evergreen:
94
95  * Galen Charlton
96  * Dan Wells
97
98 Evergreen 2.10.0 Upgrade notes
99 ------------------------------
100
101 * Support for PostgreSQL 9.1 is deprecated as of
102   the release of Evergreen 2.10.0. Users are recommended
103   to install Evergreen on PostgreSQL 9.2 or later.
104 * In the next major release following 2.10.0, Evergreen will no
105   longer officially support PostgreSQL 9.1.
106 * Please read the release notes thoroughly for information
107   about changes that Evergreen administrators may need
108   to make manually when upgrading to 2.10.0.  In particular,
109   the enhancement to user password storage introduces a
110   new service, `open-ils.auth_internal`, and requires
111   changes to `opensrf.xml` in order for users to be able
112   log in.
113
114 Evergreen 2.10.0 New Features
115 -----------------------------
116
117
118
119 Acquisitions
120 ~~~~~~~~~~~~
121
122
123
124 PO Line item "paid" label
125 ^^^^^^^^^^^^^^^^^^^^^^^^^
126 A new "paid" label appears along the bottom of each line item in the PO 
127 display when every non-canceled copy on the line item has been invoiced.
128
129
130
131
132 Disencumber funds on invoice close
133 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
134
135 Fund debits linked to an invoice are now marked as paid (encumbrance=false)
136 when the invoice is marked as closed/complete instead of at invoice create
137 time.  This is particularly useful for EDI invoices which may be 
138 created well in advance of receipt and payment.
139
140
141
142
143
144 PO actions selector always visible
145 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
146
147 The actions selector is now always visible in the purchase order view,
148 even when no line items exist.  With this, users can print PO's that
149 only contain direct charges.
150
151 The custom "Add Brief Record" button is no longer present, since the
152 same action is accessible via the now-visible selector.
153
154
155
156
157 Administration
158 ~~~~~~~~~~~~~~
159
160
161
162 Set application name when connecting to database
163 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
164 The services that connect directly to the PostgreSQL database
165 (and Clark Kent) now look for an application_name parameter
166 as part of the database login credentials specified in
167 `opensrf.xml`.  If present, the value is used to set the
168 application name Pg connection value; this in turn shows up in
169 the Postgres `pg_stat_activity` table and Pg's logs.
170
171
172
173
174 Credit card receipts and privacy
175 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
176
177 To improve privacy and security, Evergreen now stores less data 
178 about credit card transactions.  The following fields are no 
179 longer stored:
180
181  * `cc_type`
182  * `cc_first_name`
183  * `cc_last_name`
184  * `expire_month`
185  * `expire_year`
186
187 NOTE: All existing data within these fields will be deleted during
188 the upgrade.  Reports using this data will no longer function.
189
190 Additionally, a tool has been added to Evergreen for clearing the 
191 last 4 digits of the credit payment from the database after payments
192 reach a certain age.
193
194 Print/email templates
195 +++++++++++++++++++++
196
197 The stock print and email payment templates have been modified to no 
198 longer use these fields, but only when the existing templates matched
199 the stock templates.  If local changes have been applied, it will
200 be necessary to modify local templates to avoid referencing these
201 fields which no longer exist.
202
203 Any templates whose hook is "money.format.payment_receipt.print" or 
204 "money.format.payment_receipt.email" may need modification.  In stock
205 Evergreen, these are templates:
206
207 1. "money.payment_receipt.email" (stock id 29)
208 2. "money.payment_receipt.print" (stock id 30)
209
210 Example diff:
211
212 [source,diff]
213 ---------------------------------------------
214 -  [% CASE "credit_card_payment" %]credit card (
215 -      [%- SET cc_chunks = mp.credit_card_payment.cc_number.replace(' ','').chunk(4); -%]
216 -      [%- cc_chunks.slice(0, -1+cc_chunks.max).join.replace('\S','X') -%] 
217 -      [% cc_chunks.last -%]
218 -      exp [% mp.credit_card_payment.expire_month %]/[% mp.credit_card_payment.expire_year -%]
219 -  )
220 +  [% CASE "credit_card_payment" %]credit card
221 +  [%- IF mp.credit_card_payment.cc_number %] ([% mp.credit_card_payment.cc_number %])[% END %]
222 ---------------------------------------------
223
224 Clearing the last 4 of the CC number
225 ++++++++++++++++++++++++++++++++++++
226
227 To activate automatic CC number clearing, add the following to opensrf's
228 crontab.  Change timing to suit.
229
230 [source,sh]
231 ---------------------------------------------
232 5  4  * * *   . ~/.bashrc && $EG_BIN_DIR/clear_cc_number.srfsh
233 ---------------------------------------------
234
235 The default retention age is 1 year, but this can be changed by modifying
236 `clear_cc_number.srfsh` (typically found in `/openils/bin/`).  Replace "1 year"
237 with the age of your choice.
238
239
240
241
242
243
244 Configure multiple telephony servers via action/trigger
245 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
246 If you are using the AstCall action/trigger reactor
247 to generate callfiles to send to an Asterisk server, until
248 now the only place to specify the relevant configuration
249 was in `opensrf.xml`. However, this restricted an Evergreen
250 consortium to using only one Asterisk instance.
251
252 Now, the telephony parameters can also be specified as 
253 A/T event parameters, allowing per-library configuration.
254
255 .Telephony parameters
256 |===
257 | Name | Example value
258
259 | enabled
260 | 0
261
262 | driver
263 | "SIP"
264
265 | channels
266 | ["Zap/1", "Zap/2", "IAX/user:secret@widgets.biz"]
267
268 | host
269 | "localhost"
270
271 | port
272 | "10080"
273
274 | user
275 | "evergreen"
276
277 | pw
278 | "evergreen"
279
280 | callfile_lines
281 | ["MaxRetries: 3", "RetryTime: 60", "WaitTime: 30", "Archive: 1", "Extension: 10"]
282 |===
283
284
285
286
287 Juvenile-to-adult batch script honors library setting
288 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
289
290 The batch `juv_to_adult.srfsh` script that, when set up as a cronjob,
291 is responsible for toggling a patron from juvenile to adult now
292 honors the age value set in the library setting named "Juvenile Age
293 Threshold" (`global.juvenile_age_threshold`).  When no library setting value
294 is present at a given patron's home library, the value passed in to the
295 script will be used as a default.
296
297
298
299
300 New reporting source for hold/copy ratios
301 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
302 A new reporting source is added, "Hold/Copy Ratio per Bib
303 and Pickup Library (and Descendants)", that, for each bib
304 that has a hold request on it or any of its components,
305 calculates the following:
306
307  * active holds at each OU (including the OU's descendants)
308  * holdable copies at each OU (and its descendants)
309  * the ratio of the above two counts
310  * counts and ratio across the entire consortium
311
312 This source differs from the "Hold/Copy Ratio per Bib
313 and Pickup Library" source by including all descendants
314 of the organization unit one is filtering on.
315
316 One use case is allowing a multi-branch system within an
317 Evergreen consortium that doesn't do full resource sharing
318 to readily calculate whether additional copies should be
319 purchased for that system.
320
321
322
323
324 New patron action/trigger notice
325 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
326
327 A new action/trigger event definition ("New User Created Welcome Notice") 
328 has been added that will allow you to send a notice after a new patron has 
329 been created, based on the actor.usr create-date field.
330
331 This notice can be used for various tasks.
332
333   * Sending a welcome email to new patrons to market library services.
334   * Confirm that a new patron email address is correct.
335   * Generate postal notices to send a welcome packet to new patrons.
336
337 Enable this event in the staff client at *Admin* -> *Local Administration* 
338 -> *Notifications / Action Triggers*.
339
340
341
342
343 Improved password management and authentication
344 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
345 Evergreen user passwords are now stored with additional layers of 
346 encryption and may only be accessed directly by the database, not
347 the application layer.
348
349 All API changes are backwards compatible with existing 3rd-party
350 clients.
351
352 Migrating passwords
353 +++++++++++++++++++
354
355 Passwords are migrated for each user automatically the first time a user
356 logs in under the new setup.  However, it is also possible to force
357 password migration for a given user via a database function:
358
359 [source,sql]
360 ------------------------------------------------------------
361 -- actor.migrate_passwd() will only migrate un-migrated 
362 -- accounts, but it's faster to avoid any re-migration attempts.
363 SELECT actor.migrate_passwd(au.id)
364 FROM actor.usr au
365     LEFT JOIN actor.passwd pw ON (pw.usr = au.id)
366 WHERE pw.usr IS NULL; 
367 ------------------------------------------------------------
368
369 Using this, admins could perform manual batch updates to force all
370 users to use the new, more secure passwords, regardless of when or
371 whether a patron logs back into the system.  
372
373 Beware that doing this for all users in a large database will 
374 take some time and should probably be performed in batches.
375
376 Changing Encryption Work Factor
377 +++++++++++++++++++++++++++++++
378
379 Roughly speaking, the 'work factor' determines the amount of time/effort
380 required to crack passwords.  The higher the value, the more secure the
381 password.  Higher values also mean that it takes longer for password
382 verification (e.g. during login) to work.
383
384 At time of release, Evergreen uses a work factor value of 10.  The value
385 is set in the database table/column actor.passwd_type.iter_count (hash
386 iteration count).  When this value is modified, any passwords created or
387 modified after the change will use the new work factor.  Other passwords
388 will continue using the work factor in place when they were
389 created/modified, until they are changed once again.
390
391 Beware that raising the work factor can have a significant impact on
392 login speeds.  A work factor of 10 requires ~0.1 seconds to verify a
393 password.  A work factor of 15 takes almost 2 full seconds!  Also beware
394 that once a password is encoded with a higher work factor, it cannot be
395 lowered again through any automatic means.  The owner of the password
396 would have to log in and modify the password after the work factor is
397 re-lowered.
398
399 Because of this, it's recommended that admins thoroughly test work
400 factor modifications before deploying to production.
401
402 To check encryption timing:
403
404 [source,sql]
405 --------------------------------------------------------------------------
406 -- enable psql timing
407 evergreen=# \timing
408
409 -- encode password "HELLOWORLD" with a work factor of 10.
410 evergreen=# select crypt('HELLOWORLD', gen_salt('bf', 10));
411 (1 row)
412
413 Time: 95.082 ms
414 --------------------------------------------------------------------------
415
416 open-ils.auth_internal
417 ++++++++++++++++++++++
418 To support the new storage mechanism, a new Evergreen service has
419 been added called `open-ils.auth_internal`.  This service runs on
420 the private OpenSRF/XMPP domain and is used to store authenticated 
421 user data in the authentication cache.  
422
423 This is a required service and changes to `opensrf.xml` (typically 
424 `/openils/conf/opensrf.xml`) are needed to run the new service.
425
426 .Modifying opensrf.xml
427 * A new `<open-ils.auth_internal>` app stanza is added to define the 
428   new service
429 * Cache timeout settings are moved from the app stanza for `open-ils.auth`
430   into `open-ils.auth_internal`
431 * `open-ils.auth_internal` is added to the set of running services for the 
432   domain.
433
434 Example diff:
435
436 [source,diff]
437 ---------------------------------------------------------------------
438 diff --git a/Open-ILS/examples/opensrf.xml.example b/Open-ILS/examples/opensrf.xml.example
439 index 3b47481..59f737a 100644
440 --- a/Open-ILS/examples/opensrf.xml.example
441 +++ b/Open-ILS/examples/opensrf.xml.example
442 @@ -424,6 +424,29 @@ vim:et:ts=4:sw=4:
443                  </unix_config>
444                  <app_settings>
445                      <!-- defined app-specific settings here -->
446 +                    <auth_limits>
447 +                        <seed>30</seed> <!-- amount of time a seed request is valid for -->
448 +                        <block_time>90</block_time> <!-- amount of time since last auth or seed request to save failure counts -->
449 +                        <block_count>10</block_count> <!-- number of failures before blocking access -->
450 +                    </auth_limits>
451 +                </app_settings>
452 +            </open-ils.auth>
453 +
454 +            <!-- Internal authentication server -->
455 +            <open-ils.auth_internal>
456 +                <keepalive>5</keepalive>
457 +                <stateless>1</stateless>
458 +                <language>c</language>
459 +                <implementation>oils_auth_internal.so</implementation>
460 +                <unix_config>
461 +                    <max_requests>1000</max_requests>
462 +                    <min_children>1</min_children>
463 +                    <max_children>15</max_children>
464 +                    <min_spare_children>1</min_spare_children>
465 +                    <max_spare_children>5</max_spare_children>
466 +                </unix_config>
467 +                <app_settings>
468 +                    <!-- defined app-specific settings here -->
469                      <default_timeout>
470                          <!-- default login timeouts based on login type -->
471                          <opac>420</opac>
472 @@ -431,13 +454,10 @@ vim:et:ts=4:sw=4:
473                          <temp>300</temp>
474                          <persist>2 weeks</persist>
475                      </default_timeout>
476 -                    <auth_limits>
477 -                        <seed>30</seed> <!-- amount of time a seed request is valid for -->
478 -                        <block_time>90</block_time> <!-- amount of time since last auth or seed request to save failure counts -->
479 -                        <block_count>10</block_count> <!-- number of failures before blocking access -->
480 -                    </auth_limits>
481                  </app_settings>
482 -            </open-ils.auth>
483 +            </open-ils.auth_internal>
484 +
485 +
486  
487              <!-- Authentication proxy server -->
488              <open-ils.auth_proxy>
489 @@ -1177,6 +1197,7 @@ vim:et:ts=4:sw=4:
490                  <appname>open-ils.circ</appname> 
491                  <appname>open-ils.actor</appname> 
492                  <appname>open-ils.auth</appname> 
493 +                <appname>open-ils.auth_internal</appname>
494                  <appname>open-ils.auth_proxy</appname> 
495                  <appname>open-ils.storage</appname>  
496                  <appname>open-ils.justintime</appname>  
497 ---------------------------------------------------------------------
498
499
500
501
502
503
504
505
506 Sortable HTML reports
507 ^^^^^^^^^^^^^^^^^^^^^
508 HTML reports can now be sorted by clicking on the header for a given column.
509 Clicking on the header toggles between sorting the column in ascending and
510 descending order. Note that sorting is available only when there are
511 at most 10,000 rows of output.
512
513
514
515
516 Cataloging
517 ~~~~~~~~~~
518
519
520
521 Additional fixed fields
522 ^^^^^^^^^^^^^^^^^^^^^^^
523 The AccM, Comp, CrTp, EntW, Cont, FMus, LTxt, Orig, Part, Proj, Relf, SpFm,
524 SrTp, Tech, and TrAr fixed fields have been defined and coded value maps added
525 so they can also be used for Advanced Searches or inclusion in Composite Value Maps.
526
527 Note that AccM, Cont, LTxt, Relf, and SpFm are  compositite values based on
528 the values of "helper" fields like AccM(1), AccM(2), and so on. These positional
529 fields can be ignored.
530
531 Coded value maps have also been added for Cont, Ctry, and DtSt, and the Time field
532 has been defined. All of these fields are now available in the Fixed Field Editor
533 when editing the appropriate records.
534
535
536
537
538 Quickly export non-imported records
539 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
540 When inspecting a queue in MARC Batch Import/Export, there is now
541 a link to download to MARC file any records in the queue that were
542 not imported into the catalog.  This allows catalogers to quickly
543 manipulate the records that failed to import using an external
544 tool, then attempt to import them again.
545
546
547
548
549 Link personal name/title series added entries
550 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
551 The authority linker script now supports linking the MARC21
552 field 800 (series added entry - personal name) to authority
553 records.
554
555
556
557
558 MARC stream importer authority records and repairs
559 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
560
561 The MARC stream importer script, commonly used with external 
562 services like OCLC Connexion, is now capable of importing authority
563 records in addition to bib records.  A single running instance of
564 the script can import either type of record, based on the record
565 leader.
566
567 New Options
568 +++++++++++
569
570  * --auth-merge-profile
571  * --auth-queue
572  * --bib-import-no-match
573  * --bib-auto-overlay-exact
574  * --bib-auto-overlay-1match
575  * --bib-auto-overlay-best-match
576  * --auth-import-no-match
577  * --auth-auto-overlay-exact
578  * --auth-auto-overlay-1match
579  * --auth-auto-overlay-best-match
580
581 Deprecated options
582 ++++++++++++++++++
583
584 The following options still work and map to the "bib" equivalent
585 of the option, however a deprecation warning message is generated 
586 when the script is started.
587
588  * --import-no-match
589  * --auto-overlay-exact
590  * --auto-overlay-1match
591  * --auto-overlay-best-match
592
593 No longer supported options
594 +++++++++++++++++++++++++++
595
596 --import-by-queue is no longer supported.  This option serves no
597 particular purpose and is a bad idea when re-using the same queue over
598 and over as most people do, because queue bloat will increase run times.
599
600 --noqueue (AKA "direct import") is no longer supported.  All imports go
601 through Vandelay now.
602
603
604
605
606 Support for monograph parts import in MARC Batch Import/Export
607 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
608 When adding or overlaying copies in MARC Batch Import/Export
609 (Vandelay), monograph part labels can now be assigned during the import
610 process.  This feature is modeled after the existing support for
611 statistical category import.  As such, it:
612
613  * Uses '|' characters to separate labels to allow for multiple part
614    assignment
615  * Adds to (rather than replaces) any existing parts assigned to overlay
616    copies
617
618
619
620
621 Circulation
622 ~~~~~~~~~~~
623
624
625
626 Alternate parts selection display when placing holds
627 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
628 Users often miss the list of parts on the Place Holds screen, leading to many
629 title-level holds on records where only one or two libraries may have
630 'unparted' copies.
631
632 A new option is available to change this display so that a part is selected
633 via radio buttons instead of the traditional dropdown menu. This display
634 increases the visibility of parts on the Place Holds screen and also
635 forces users to make an explicit choice.
636
637 To enable the alternate display, set the enable.radio.parts option to 'true'
638 in config.tt2.
639
640 New config.tt2 setting
641 ++++++++++++++++++++++
642 enable.radio.parts
643
644
645 Web staff client patron editor
646 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
647 The web staff interface now includes a patron editor/registration form
648 that is written using AngularJS, leading to faster and more responsive
649 patron editing.  This feature is currently available in preview mode, but
650 supports the following actions:
651
652   * adding and editing base patron records and addresses
653   * setting statistical categories
654   * editing secondary groups
655   * cloning patron records
656   * duplicate detection
657   * surveys
658
659
660
661
662 ==== Non-active status copy transit message ====
663
664 After copy checkin, if the copy is in transit, display a special
665 message in the transit alert dialog and in the printed transit receipt
666 (optionally, via macro) if the copy is in (or, rather, will be once it
667 arrives at its destination) a non-active copy status.
668
669 ===== Upgrade notes =====
670
671  * To add the new message to the transit slip, add the
672    'transit_copy_status_msg' MACRO.
673  * To remove the new message from the alert dialog, remove the 
674    'staff.circ.utils.transit.copy_status_message' string property
675    from 'Open-ILS/xul/staff_client/server/locale/LOCALE/circ.properties'
676  * For a list of non-active copy statuses, see in the staff client
677    under Admin -> Server Administration -> Copy Statuses.
678
679
680
681
682
683 Selectively disallow opt-in based on patron's home library
684 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
685 A new library setting has been added which enables a library to prevent their
686 patrons from being opted in at other libraries.
687
688 For example, consider the following org unit hierarchy:
689
690        Org Units          Depth
691
692           CONS              0
693            |
694       +-----+-----+
695       |           |
696      SYS1        SYS2       1
697       |           |
698    +--+--+     +--+--+
699    |     |     |     |
700   BR1   BR2   BR3   BR4     2
701
702 Suppose that SYS1 wishes to prevent its patrons from being opted in at SYS2.
703 To accomplish this, it sets the value of the "Restrict patron opt-in to home
704 library and related orgs at specified depth" setting to 1, meaning that patrons
705 at SYS1 libraries at or below that depth in the org tree cannot be opted in by
706 libraries outside that part of the org tree.  Thus, BR1 patrons can be opted in
707 at BR2, but not at BR3 or BR4.
708
709 (This setting is distinct from the "Patron Opt-In Boundary" setting, which
710 merely determines the depth at which Evergreen prompts for the patron to opt
711 in.)
712
713 New library setting
714 +++++++++++++++++++
715   * Restrict patron opt-in to home library and related orgs at specified depth (`org.restrict_opt_to_depth`)
716
717
718
719
720 Standing penalty ignore proximity
721 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
722
723 Standing penalties now have an `ignore_proximity` field that takes an
724 integer value.  When set, the value of this field represents the
725 proximity from the user's home organizational unit where this penalty
726 will be ignored for purposes of circulation and holds.  Typical values
727 for this field would be 0, 1, or 2 when using a standard hierarchy of
728 Consortium -> System -> Branch -> Sublibrary/Bookmobile.  A value of 1
729 would cause the penalty to be ignored at the user's home organization
730 unit, its parent and/or immediate child.  A value of 2 should cause
731 it to be ignored at the above as well as all sibling organizational
732 units to the user's home.  In all cases, a value of zero causes the
733 penalty to be ignored at the user's home and to apply at all other
734 organizational units.  If the value of this field is left unset (or
735 set to a negative value), the penalty will still take effect
736 everywhere using the normal organizational unit and depth values.  If
737 you use a custom hierarchy, you will need to figure out any values
738 greater than 0 on your own.
739
740 The `ignore_proximity` does not affect where penalties are applied. It
741 is used when determining whether or not a penalty blocks an activity
742 at the current organizational unit or the organizational unit that
743 owns the copy involved in the current transaction.  For instance, if
744 you set the `ignore_proximity` to 0 on patron exceeds overdue fines,
745 then the patron will still be able to place holds on and checkout
746 copies owned by their home organizational unit at their home
747 organizational unit.  They will not, however, be able to receive
748 copies from other organizational units, nor use other organizational
749 units as a patron.
750
751
752
753 Patron checkout history stored in a dedicated table
754 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
755
756 Patron checkout history is now stored in separate, dedicated database 
757 table instead of being derived from the main circulation data.  This
758 allows us to age/anonymize circulations more aggressively, since they 
759 no longer need to stick around in cases where they represent a patron's
760 opt-in checkout history.
761
762 This has a number of patron privacy implications.
763
764  * Minimal metadata is stored in the new patron checkout history table, 
765    so once the corresponding circulation is aged, the full set of 
766    circulation metadata is no longer linked to a patron's reading history.
767    ** It is limited to checkout date, due date, checkin date, and copy data.
768  * Staff can no longer report on a patron's reading history.  
769    ** While it is possible to build aggregate reports on reading history 
770       data, it is not possible to report on which user an entry in the
771       history table belongs to.  (The 'usr' column is hidden from the 
772       reporter).
773  * Staff can no longer retrieve a patron's reading history via API.  Only
774    the user that owns the history data can access it.
775
776 Upgrade notes
777 +++++++++++++
778
779 Administrators should verify the CSV export of checkout history works after
780 deploying this change.  If local changes were made to the CSV template,
781 the template will not be updated as part of this deployment.  The stock
782 template was modified to handle gracefully NULL values for checkin_time.
783
784 For example:
785
786 [source,diff]
787 ------------------------------------------------------------------------
788 -    Returned: [% date.format(helpers.format_date(circ.checkin_time), '%Y-%m-%d') %]
789 +    Returned: [%
790 +        date.format(
791 +            helpers.format_date(circ.checkin_time), '%Y-%m-%d')
792 +            IF circ.checkin_time;
793 +    %]
794 ------------------------------------------------------------------------
795
796
797
798 Client
799 ~~~~~~
800
801
802
803 Holds count column picker option
804 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
805 A new column picker option showing the number of holds for a given item will
806 now be available in various interfaces displaying item information, including
807 the patron's Items Out tab and the Item Status, Check Out, Check In, Renew
808 Item and Record In-House Use screens.
809
810 Note: Because the holds count is generated from the hold_copy_map, newly-added
811 items and items in a non-holdable status will not display accurate hold counts
812 until 24 hours after they have been added to the system or moved to a holdable
813 copy status.
814
815
816 Distinct images for pop-ups and slips
817 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
818 The client now supports using distinct images for hold, transit, and booking
819 reservation popup windows and slips. In addition, three new images have been
820 provided, replacing the turtle that previously displayed. The turtle file
821 is still available in the images directory for those sites that still wish
822 to use it.
823
824
825 Development
826 ~~~~~~~~~~~
827
828
829
830 Removal of unused methods
831 ^^^^^^^^^^^^^^^^^^^^^^^^^
832 The following public methods, which were both broken and not in use,
833 are removed:
834
835  * `open-ils.actor.org_unit.closed_date.create`
836  * `open-ils.actor.org_unit.closed_date.delete`
837
838
839
840
841
842 Public catalog
843 ~~~~~~~~~~~~~~
844
845 Editable borrowing history
846 ^^^^^^^^^^^^^^^^^^^^^^^^^^
847 Patrons can now delete titles that they do not wish to appear in their
848 Check Out History.
849
850  * In "My Account", click on the "Items Checked Out" tab, then
851    the "Check Out History" sub-tab.
852  * Check off the items to conceal.
853  * Click the Go button next to the "Delete Selected Titles" drop-down box.
854  * Click OK in the pop-up to confirm the deletion.  Note that deletions
855    cannot be undone.
856
857 Deleted titles will also not appear in the downloaded CSV file.
858
859 Patron history disable warning
860 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
861
862 When disabling checkout and/or holds history in the public catalog's
863 Search and History Preferences tab, patrons will be warned that the
864 operation is irreversible when history data exists that will be
865 deleted as part of the update.
866
867
868
869 Include parts label when sorting copies on the record details page
870 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
871 The list of copies on the catalog's record details page now includes
872 the part label in the default sort order.
873
874 Specifically, copies are now sorted by (in order), org unit, then
875 call number, then part label sortkey, then copy number, and
876 finally barcode.
877
878 Previously, the hierarchy was org unit, then call number,
879 then copy number, and finally barcode
880
881
882
883 Quick option to change search scope to all libraries
884 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
885 A common usage of the catalog is to do a search in a restricted scope,
886 like a local library. When the results are lacking, the search is repeated in a
887 consortium-wide scope.  This feature provides an optional button and checkbox
888 to alter the depth of the search to a defined level.
889
890 This feature is enabled by default and can be configured in the Depth Button/
891 Checkbox section of config.tt2.
892
893 New config.tt2 settings
894 +++++++++++++++++++++++
895   * ctx.depth_sel_checkbox
896   * ctx.depth_sel_button
897   * ctx.depth_sel_depth
898   * ctx.sel_button_label
899   * ctx.depth_sel_button_class
900   * ctx.depth_sel_checkbox_label
901   * ctx.depth_sel_tooltip
902   * ctx.depth_sel_resultshint
903
904 Limiter to exclude electronic resources
905 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
906 A limiter to exclude electronic resources from search results is now available
907 on the advanced search screen and from the search results page. This limiter
908 will exclude any search results with an item form of o or s. This limiter
909 will be applied on top of any other format limiters used in the search.
910
911 The checkboxes are disabled by default. To display them in both places, set
912 the 'ctx.exclude_electronic_checkbox' setting in config.tt2 to 1.
913
914 New config.tt2 setting
915 ++++++++++++++++++++++
916 ctx.exclude_electronic_checkbox
917
918
919 Expand unAPI API
920 ^^^^^^^^^^^^^^^^
921 Evergreen's unAPI support now includes access to many more
922 record types. For example, the following URL would fetch
923 bib 267 in MODS32 along with holdings, volume, copy,
924 and record attribute information:
925
926 https://example.org/opac/extras/unapi?id=tag::U2@bre/267{holdings_xml,acn,acp,mra}&format=mods32
927
928 To access the new unAPI features, the unAPI ID should have the
929 following form:
930
931   * +tag::U2@+
932   * followed by class name, which may be
933     * +bre+ (bibs)
934     * +biblio_record_entry_feed+ (multiple bibs)
935     * +acl+ (copy locations)
936     * +acn+ (volumes)
937     * +acnp+ (call number prefixes)
938     * +acns+ (call number suffixes)
939     * +acp+ (copies)
940     * +acpn+ (copy notes)
941     * +aou+ (org units)
942     * +ascecm+ (copy stat cat entries)
943     * +auri+ (located URIs)
944     * +bmp+ (monographic parts)
945     * +cbs+ (bib sources)
946     * +ccs+ (copy statuses)
947     * +circ+ (loan checkout and due dates)
948     * +holdings_xml+ (holdings)
949     * +mmr+ (metarecords)
950     * +mmr_holdings_xml+ (metarecords with holdings)
951     * +mmr_mra+ (metarecords with record attributes)
952     * +mra+ (record attributes)
953     * +sbsum+ (serial basic summaries)
954     * +sdist+ (serial distributions)
955     * +siss+ (serial issues)
956     * +sisum+ (serial index summaries)
957     * +sitem+ (serial items)
958     * +sssum+ (serial supplement summaries)
959     * +sstr+ (serial streams)
960     * +ssub+ (serial subscriptions)
961     * +sunit+ (serial units)
962   * followed by +/+
963   * followed by a record identifier (or in the case of
964     the +biblio_record_entry_feed+ class, multiple IDs separated
965     by commas)
966   * followed, optionally, by limit and offset in square brackets
967   * followed, optionally, by a comma-separated list of "includes"
968     enclosed in curly brackets.  The list of includes is
969     the same as the list of classes with the following addition:
970     * +bre.extern+ (information from the non-MARC parts of a bib
971       record)
972    * followed, optionally, by +/+ and org unit; "-" signifies
973      the top of the org unit tree
974    * followed, optionally, by +/+ and org unit depth
975    * followed, optionally, by +/+ and a path. If the path
976      is +barcode+ and the class is +acp+, the record ID is taken
977      to be a copy barcode rather than a copy ID; for example, in
978      +tag::U2@acp/ACQ140{acn,bre,mra}/-/0/barcode+, +ACQ140+ is
979      meant to be a copy barcode.
980    * followed, optionally, by +&format=+ and the format in which the record
981      should be retrieved. If this part is omitted, the list of available 
982      formats will be retrieved. 
983
984
985
986
987 New form/genre search and facet index
988 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
989 The stock indexing definitions now include a search and facet index on the
990 form/genre field (tag 655). This allows genre links in the public catalog
991 record display to retrieve works in the same genre. The public catalog genre
992 links will no longer display content from the 659 MARC fields. 
993
994 The genre facet will also display by default in the public catalog.  A partial
995 reingest during upgrade is required to use this index.
996
997
998
999
1000 Limit number of facets retrieved during search
1001 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1002 Catalog search now limits the number of facets retrieved
1003 per defined facet field. Setting a limit is useful so that
1004 `open-ils.cstore backends don't end up needlessly consuming
1005 memory when fetching facets for a large result set; if a broad
1006 search retrieves over 10,000 author facets (say), even the most
1007 persistant user is not going to actually look at all of them. Fetching
1008 fewer facets can also slightly speed up generation of search results.
1009
1010 The limit is controlled by a new global flag, `search.max_facets_per_field`,
1011 whose label is "Search: maximum number of facet values to retrieve for
1012 each facet field".  The default limit value is 1,000, but lower values
1013 (e.g., 100) are perhaps even better for most catalogs.
1014
1015 Significant bugfixes
1016 ~~~~~~~~~~~~~~~~~~~~
1017
1018 Add acquisitions cancel reason 85 for Baker & Taylor EDI
1019 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1020 Baker & Taylor send backs a quantity status code of 85
1021 when a line item is canceled when using EDI.  That code
1022 is now included in the system so those cancelations get 
1023 properly registered. 
1024
1025 Self-check printing
1026 ^^^^^^^^^^^^^^^^^^^
1027 Corrections were made to the self-check holds and fines printing
1028 functionality to so that the proper transactions can be printed.
1029 The change requires that the Self-Checkout Fines Receipt and
1030 Self-Checkout Holds Receipt action/trigger templates be updated
1031 in order to work properly. 
1032
1033 Miscellaneous
1034 ~~~~~~~~~~~~~
1035
1036 * Copy records in the "Concerto" test data set now have prices.
1037 * The web-based self-check interface now displays the patron
1038   information area only when a patron is logged in.
1039 * The progress page displayed by MARC Batch Edit is improved.
1040 * The public catalog now better handles the situation where
1041   a patron who does not have an email address registered in
1042   Evergreen tries to email a record.
1043
1044 Evergreen 2.10.0 bugs closed
1045 ----------------------------
1046
1047 * https://bugs.launchpad.net/bugs/838525[Bug 838525: Timestamp on dob can make date appear off by a day]
1048 * https://bugs.launchpad.net/bugs/963341[Bug 963341: Allow the JSPac and TPac to display both MFHD records and Serial Control/Alternate records,]
1049 * https://bugs.launchpad.net/bugs/1067823[Bug 1067823: tpac: genre links in record details page launch subject search]
1050 * https://bugs.launchpad.net/bugs/1164174[Bug 1164174: Add support for author/title series added entry]
1051 * https://bugs.launchpad.net/bugs/1175711[Bug 1175711: can't renew items on OPAC due to items being on Booking resource list]
1052 * https://bugs.launchpad.net/bugs/1197636[Bug 1197636: Email record detail does not check for email]
1053 * https://bugs.launchpad.net/bugs/1202742[Bug 1202742: Support alert/print message for transiting, non-active copies]
1054 * https://bugs.launchpad.net/bugs/1206936[Bug 1206936: money.transaction_billing_summary view displays incorrect billing_type and billing_note for the actual last transaction]
1055 * https://bugs.launchpad.net/bugs/1208613[Bug 1208613: Expand All button does not work past the 1st page when viewing a large picklist.]
1056 * https://bugs.launchpad.net/bugs/1229757[Bug 1229757: support distinct pop-up images for holds, transits, and hold transits]
1057 * https://bugs.launchpad.net/bugs/1240657[Bug 1240657: OpenILS::Application::Actor should check_perms for CREATE_CLOSED_DATE, not CREATE_CLOSEING]
1058 * https://bugs.launchpad.net/bugs/1251415[Bug 1251415: Use the juvenile setting when auto-removing juvenile flag.]
1059 * https://bugs.launchpad.net/bugs/1275118[Bug 1275118: Holds history displays canceled holds as active]
1060 * https://bugs.launchpad.net/bugs/1312699[Bug 1312699: Editable Checkout History]
1061 * https://bugs.launchpad.net/bugs/1319998[Bug 1319998: money.materialized_summary_billing_del() ADDS to balance_owed]
1062 * https://bugs.launchpad.net/bugs/1333254[Bug 1333254: EDI invoices automatically expend debits]
1063 * https://bugs.launchpad.net/bugs/1367926[Bug 1367926: Add support for (nearly) direct access to the full unapi backend]
1064 * https://bugs.launchpad.net/bugs/1370694[Bug 1370694: Selfcheck "Print List" for Holds view does not work]
1065 * https://bugs.launchpad.net/bugs/1371647[Bug 1371647: config.marc21_ff_pos_map needs an audit]
1066 * https://bugs.launchpad.net/bugs/1375043[Bug 1375043: Support for in-A/T telephony configuration]
1067 * https://bugs.launchpad.net/bugs/1380709[Bug 1380709: invoice print amounts-per-fund uses wrong value when item price varies]
1068 * https://bugs.launchpad.net/bugs/1384740[Bug 1384740: Add authority records support to marc stream importer (Connexion)]
1069 * https://bugs.launchpad.net/bugs/1391282[Bug 1391282: Default Action Trigger Templates  Updates]
1070 * https://bugs.launchpad.net/bugs/1392396[Bug 1392396: Wishlist: Action Trigger for new user creation]
1071 * https://bugs.launchpad.net/bugs/1402018[Bug 1402018: Acq Copy location UI scoped to registered workstation]
1072 * https://bugs.launchpad.net/bugs/1402770[Bug 1402770: Add column picker option for number of holds in item context]
1073 * https://bugs.launchpad.net/bugs/1406786[Bug 1406786: Merge parts functionality fails to preserve copy_part mapping]
1074 * https://bugs.launchpad.net/bugs/1422802[Bug 1422802: Parts need to be more visible on the place holds screen]
1075 * https://bugs.launchpad.net/bugs/1422932[Bug 1422932: TPAC: Holds history pager typo]
1076 * https://bugs.launchpad.net/bugs/1429268[Bug 1429268: Credit card payment fails on NULL mailing address]
1077 * https://bugs.launchpad.net/bugs/1452950[Bug 1452950: Angularize the patron editor]
1078 * https://bugs.launchpad.net/bugs/1454871[Bug 1454871: KPAC Hold Notifications - SMS]
1079 * https://bugs.launchpad.net/bugs/1454884[Bug 1454884: Hold placed on grouped metabib result displays wrong title]
1080 * https://bugs.launchpad.net/bugs/1464765[Bug 1464765: evergreen.lpad_number_substrings doesn't handle internal substring matches properly]
1081 * https://bugs.launchpad.net/bugs/1466173[Bug 1466173: Wishlist: Selfcheck Hide UI Elements until patron auth]
1082 * https://bugs.launchpad.net/bugs/1466990[Bug 1466990: Detailed search results shows parts for items that dont have parts]
1083 * https://bugs.launchpad.net/bugs/1468422[Bug 1468422: Improve Password Management and Authentication]
1084 * https://bugs.launchpad.net/bugs/1470957[Bug 1470957: Items are incorrectly sorting when using the Sort By Publication date feature]
1085 * https://bugs.launchpad.net/bugs/1474051[Bug 1474051: Avoid storing partial credit card payment info]
1086 * https://bugs.launchpad.net/bugs/1474455[Bug 1474455: Fixed navigation menu for the web client]
1087 * https://bugs.launchpad.net/bugs/1474566[Bug 1474566: Credit card API amount paid rounding error.]
1088 * https://bugs.launchpad.net/bugs/1482336[Bug 1482336: create_release_notes.sh include .adoc files]
1089 * https://bugs.launchpad.net/bugs/1483500[Bug 1483500: evergreen.lowercase needs test]
1090 * https://bugs.launchpad.net/bugs/1483506[Bug 1483506: public.first_agg needs test]
1091 * https://bugs.launchpad.net/bugs/1483508[Bug 1483508: public.text_concat needs tests]
1092 * https://bugs.launchpad.net/bugs/1486151[Bug 1486151: Modifying password regular expression in Library Settings Editor can cause helper on the Update Password page to be invalid]
1093 * https://bugs.launchpad.net/bugs/1486294[Bug 1486294: Add acquisitions data to the Concerto dataset]
1094 * https://bugs.launchpad.net/bugs/1486592[Bug 1486592: Copies in concerto data should have prices]
1095 * https://bugs.launchpad.net/bugs/1487527[Bug 1487527: TPAC: Provide shortcut for changing search scope]
1096 * https://bugs.launchpad.net/bugs/1491571[Bug 1491571: When circ.password_reset_request_requires_matching_email setting is true, email case must match in addition to content]
1097 * https://bugs.launchpad.net/bugs/1492793[Bug 1492793: Support for PostgreSQL Application Name Connection Options]
1098 * https://bugs.launchpad.net/bugs/1496837[Bug 1496837: xml-related test is invalid]
1099 * https://bugs.launchpad.net/bugs/1499123[Bug 1499123: Ability to Ignore Certain Standing Penalties Within a Proximity to the Patron's Home Library]
1100 * https://bugs.launchpad.net/bugs/1501471[Bug 1501471: fetching OU settings in batch can be made faster]
1101 * https://bugs.launchpad.net/bugs/1501516[Bug 1501516: Indicate whether a lineitem is fully paid/invoiced in PO list]
1102 * https://bugs.launchpad.net/bugs/1502152[Bug 1502152: Trap Warnings in marc_export for better error reporting]
1103 * https://bugs.launchpad.net/bugs/1504615[Bug 1504615: OPAC: Suggest record detail more useful when sorted by parts]
1104 * https://bugs.launchpad.net/bugs/1505286[Bug 1505286: set limit on facets retrieved during search]
1105 * https://bugs.launchpad.net/bugs/1506534[Bug 1506534: valid_z3950_attr_type check constraint can cause errors during pg_restore]
1106 * https://bugs.launchpad.net/bugs/1507845[Bug 1507845: Correct search engine optimization -- allow robots to crawl, but not index, results]
1107 * https://bugs.launchpad.net/bugs/1508477[Bug 1508477: browser client: hotkeys don't work if an input element has focus]
1108 * https://bugs.launchpad.net/bugs/1509479[Bug 1509479: infinite loop when parsing modified unclosed phrase search query]
1109 * https://bugs.launchpad.net/bugs/1510641[Bug 1510641: Cannot print PO without lineitems]
1110 * https://bugs.launchpad.net/bugs/1513554[Bug 1513554: It is possible to delete acq.cancel_reasons that are used by the system]
1111 * https://bugs.launchpad.net/bugs/1516022[Bug 1516022: reporting source for copy/hold ratio at pickup library and descendants]
1112 * https://bugs.launchpad.net/bugs/1516104[Bug 1516104: Wishlist: Additional Acq Toolbar Options]
1113 * https://bugs.launchpad.net/bugs/1516707[Bug 1516707: Relevance ranking deteriorates when phrases are added to search]
1114 * https://bugs.launchpad.net/bugs/1516757[Bug 1516757: SIP Date of Birth off by one day / parsed as UTC]
1115 * https://bugs.launchpad.net/bugs/1516867[Bug 1516867: HTML reports should be dynamically sortable]
1116 * https://bugs.launchpad.net/bugs/1519055[Bug 1519055: Simple checkbox to exclude electronic resources from search results]
1117 * https://bugs.launchpad.net/bugs/1519465[Bug 1519465: Purchase Orders with spaces in the name cause problems with EDI processing]
1118 * https://bugs.launchpad.net/bugs/1519911[Bug 1519911: Typo in seed data for hold cancel notification action triggers]
1119 * https://bugs.launchpad.net/bugs/1519925[Bug 1519925: Add UPC search to MARC Federated Search -  Native Evergreen option]
1120 * https://bugs.launchpad.net/bugs/1522538[Bug 1522538: Unexpected Journal Title Search Results when using second or third Search Input in Advanced Search]
1121 * https://bugs.launchpad.net/bugs/1522604[Bug 1522604: webclient: Red font to highlight Lost items in patron summary extends to Non-Cataloged label]
1122 * https://bugs.launchpad.net/bugs/1526543[Bug 1526543: Cannot disable password reset in TPAC]
1123 * https://bugs.launchpad.net/bugs/1526546[Bug 1526546: Parts do not sort correctly on Holdings Maintenance screen]
1124 * https://bugs.launchpad.net/bugs/1526547[Bug 1526547: Overdues adjusted via lost (or long overdue) processing get an incorrect note ("VOIDED FOR BACKDATE")]
1125 * https://bugs.launchpad.net/bugs/1527342[Bug 1527342: Maintain patron reading history in a dedicated table.]
1126 * https://bugs.launchpad.net/bugs/1528596[Bug 1528596: Another untrapped marc_export warning]
1127 * https://bugs.launchpad.net/bugs/1531976[Bug 1531976: Triggered Events UI not loading after visiting Message Center UI and vice-versa]
1128 * https://bugs.launchpad.net/bugs/1533329[Bug 1533329: Selectively disallow opt-in based on patron's home library]
1129 * https://bugs.launchpad.net/bugs/1533331[Bug 1533331: evergreen.protect_reserved_rows_from_delete() trigger function returning error]
1130 * https://bugs.launchpad.net/bugs/1538697[Bug 1538697: webclient: copy record does not save when changing stat cat entries]
1131 * https://bugs.launchpad.net/bugs/1539088[Bug 1539088: marc export should only print "Waiting for Input" when running interactively]
1132 * https://bugs.launchpad.net/bugs/1539776[Bug 1539776: webclient: Wrapping improvements for vol / copy editor]
1133 * https://bugs.launchpad.net/bugs/1544723[Bug 1544723: Add webstaff to update_pofiles]
1134 * https://bugs.launchpad.net/bugs/1545178[Bug 1545178: two dead methods for dealing with closed dates should be removed]
1135 * https://bugs.launchpad.net/bugs/1545226[Bug 1545226: MARC Batch Editor summary table html problems]
1136 * https://bugs.launchpad.net/bugs/1546125[Bug 1546125: Print Templates -&gt; Save Locally not working]
1137 * https://bugs.launchpad.net/bugs/1548143[Bug 1548143: Add Parts Support to Vandelay Item Import]
1138 * https://bugs.launchpad.net/bugs/1548147[Bug 1548147: Quick Export Feature for Vandelay Queues]
1139 * https://bugs.launchpad.net/bugs/1548869[Bug 1548869: KPAC - hold results screen not showing title]
1140 * https://bugs.launchpad.net/bugs/1549393[Bug 1549393: AddedContent: Invalid ISBN's are sent to Content Cafe as blank string]
1141 * https://bugs.launchpad.net/bugs/1550495[Bug 1550495: EDI Default Cancel Reason for Baker &amp; Taylor not included: Code 85]
1142 * https://bugs.launchpad.net/bugs/1551447[Bug 1551447: Selfcheck: Printing Fines Prints All Open Transactions]
1143 * https://bugs.launchpad.net/bugs/1552060[Bug 1552060: Persistent login no longer working in OPAC]
1144 * https://bugs.launchpad.net/bugs/1553813[Bug 1553813: Browser patron editor field validation and permission checks]
1145 * https://bugs.launchpad.net/bugs/1556339[Bug 1556339: API attempts to use nonexistent user_visible_circs method]
1146 * https://bugs.launchpad.net/bugs/1557525[Bug 1557525: Release Notes Omission]
1147 * https://bugs.launchpad.net/bugs/1557621[Bug 1557621: Verify password API fails on barcode; returns success on deleted users]
1148 * https://bugs.launchpad.net/bugs/1557683[Bug 1557683: Missing semicolon in 0953.function.unapi-bre.external-includes.sql]
1149
1150 Evergreen 2.10.0 Acknowledgments
1151 --------------------------------
1152 The Evergreen project would like to thank the following 
1153 individuals who contributed code, documentations patches and
1154 tests to this release of Evergreen:
1155
1156  * Thomas Berezansky
1157  * Adam Bowling
1158  * Jason Boyer
1159  * Kate Butler
1160  * Steven Callender
1161  * Steven Chan
1162  * Galen Charlton
1163  * Mark Cooper
1164  * Jeff Davis
1165  * Martha Driscoll
1166  * Bill Erickson
1167  * Jason Etheridge
1168  * Blake Henderson
1169  * Pasi Kallinen
1170  * Jake Litrell
1171  * Kathy Lussier
1172  * Terran McCanna
1173  * Christine Morgan
1174  * Dan Pearl
1175  * Michael Peters
1176  * Jennifer Pringle
1177  * Mike Rylander
1178  * Dan Scott
1179  * Chris Sharp
1180  * Ben Shum
1181  * Remington Steed
1182  * Jason Stephenson
1183  * Josh Stompro
1184  * Yamil Suarez
1185  * Dan Wells
1186  * Bob Wicksall
1187
1188 We would also like to thank the following individuals who
1189 tested and signed off on patches:
1190
1191  * Christine Burns
1192  * Andrea Neiman
1193  * Erica Rohlfs
1194
1195 We would also like to thank the following organizations who
1196 commissioned developments in this release of Evergreen:
1197
1198  * Linn Libraries Consortium
1199  * King County Library System
1200  * MassLNC
1201
1202 We also thank the following organizations whose employees contributed
1203 to this release:
1204
1205  * BC Libraries Coooperative
1206  * Berklee College of Music
1207  * Bibliomation
1208  * Calvin College
1209  * CW/MARS
1210  * Emerald Data
1211  * Equinox Software
1212  * Georgia Public Library Service
1213  * Indiana State Library
1214  * Kent County Public Library
1215  * King County Library System
1216  * Lake Agassiz Regional Library
1217  * Laurentian University
1218  * MassLNC
1219  * MOBIUS
1220  * MVLC
1221  * NOBLE
1222  * Rodgers Memorial Library
1223  * Sigio
1224
1225 We regret any omissions.  If a contributor has been inadvertantly
1226 missed, please open a bug at http://bugs.launchpad.net/evergreen/
1227 with a correction.
1228