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