ae0c8097e12e5ae519ee26c8163fd19c974b16b5
[Evergreen.git] / docs / RELEASE_NOTES_3_8.adoc
1 = Evergreen 3.8 Release Notes =
2 :toc:
3 :numbered:
4 :toclevels: 3
5
6 == Evergreen 3.8-beta ==
7
8 === Upgrade notes ===
9
10 ==== New Permissions ====
11
12 * UPDATE_USER_PHOTO_URL
13 * CREATE_RECORD_NOTE
14 * UPDATE_RECORD_NOTE
15 * DELETE_RECORD_NOTE
16
17 ==== Removed Permissions ====
18
19 * VIEW_STANDING_PENALTY
20
21 ==== New Library Settings ====
22
23 * Pickup Library Soft stalling interval
24 * Pickup Library Hard stalling interval
25 * Void item deposit fee on checkin
26 * Require Photo URL field on patron registration
27 * Show Photo URL field on patron registration
28 * Suggest Photo URL field on patron registration
29 * My Account URL
30 * Maximum number of spelling suggestions that may be offered
31 * Stripe ISO 4217 currency code
32 * Use Item Price or Cost as Primary Item Value
33 * Use Item Price or Cost as Backup Item Value
34 * Staff Catalog Search Filters
35 * Workstation OU is the default for staff-placed holds
36
37 ==== Backing Up Auditor `alert_message` Column ====
38
39 WARNING: The upgrade script will remove the alert_message field from the
40 auditor table, so if you care about preserving those you should run a query to
41 create a backup.
42
43 For example:
44
45 [source,sql]
46 ----
47 CREATE TABLE auditor.backup_usr_alert_msg AS
48    CREATE audit_id, audit_time, audit_action, audit_user,
49           audit_ws, id as "usr_id", last_update_time,
50           alert_message
51    FROM auditor.actor_usr_history
52    WHERE alert_message IS NOT NULL;
53 ----
54
55 ==== Updating Reports on Patron Notes ====
56
57 The underlying data structure for patron notes has changed with all notes
58 living in the `actor.usr_message` table, so report writers will need to change
59 the following paths in existing reports:
60
61  * `actor.usr_note` -> all columns
62  * `actor.usr` -> `alert_message`
63  * `actor.usr_standing_penalty` -> note
64
65 And for `actor.usr_message`, there is now both a `pub` column and a `deleted` column.
66
67 ==== Holdings Editor Preferences ====
68
69 Given the number of changes between the AngJS holdings editor and the
70 new Angular interfaces, preferences stored for the AngJS interface will
71 not be honored by the new interface.  New preferences will have to be
72 applied by staff as needed.
73
74 === New Features ===
75
76 ==== Acquisitions ====
77
78 ===== Angular Rewrite of Acquisitions Administration Interfaces =====
79
80 Several administrative interfaces for acquisitions have been rewritten
81 to use the Angular framework:
82
83   * Claiming
84   * Currencies and Exchange Rates
85   * Distribution Formulas
86   * EDI Attribute Sets
87   * Fund Administration
88
89 ====== Claiming ======
90
91 The interface for managing claim policies is now a single multi-tabbed
92 page that combines the previous interfaces for:
93
94   * Claim Policies
95   * Claim Policy Actions
96   * Claim Types
97   * Claim Event Types
98
99 The new interface can be found in Administration > Acquisitions
100 Administration > Claiming.
101
102 ====== Currencies and Exchange Rates ======
103
104 The previous two interfaces for managing currencies and exchange
105 rates have been consolidated into one. The new interface allows
106 users to create, modify, and delete currency types. In addition,
107 the list of currencies now has 'Manage Exchange Rates' buttons
108 to allow specifying the exchange rate from the selected currency
109 to another one.
110
111 If an exchange is set in one direction, e.g., from USD to EUR,
112 opening the 'Manage Exchange Rates' for EUR will show the inverse
113 of the exchange rate for USD as a read-only field.
114
115 The new interface can be found in Administration > Acquisitions
116 Administration > Currencies and Exchange Rates.
117
118 ====== Distribution Formulas ======
119
120 The Angular interface for managing distribution formulas displays
121 a grid of existing formulas and allows authorized users to create,
122 modify, and delete formulas. The dialog for editing a formula
123 allows the user to define one or more entries containing
124 owning library, number of items, and optionally shelving location, fund,
125 circulation modifier, and collection code.
126
127 The new interface can be found in Administration > Acquisitions
128 Administration > Distribution Formulas.
129
130 ====== EDI Attribute Sets ======
131
132 The Angular EDI attribute sets interface is similar to the previous
133 one. However, it includes enhancements to display the number of
134 providers using an attribute set as well as a 'View Providers' button
135 to navigate to those providers.
136
137 The new interface can be found in Administration > Acquisitions
138 Administration > EDI Attribute Sets.
139
140 ====== Fund Administration ======
141
142 The new fund administration interface unifies configuration of funding
143 sources, purchasing funds, and fund tags. The interface has three tabs:
144
145   * Funds
146   * Funding Sources
147   * Fund Tags
148
149 The Funds tab displays a filterable list of funds that allows the
150 user to create, modify, and remove funds. The fund name is hyperlinked;
151 clicking that hyperlink opens a dialog that has the following tabs:
152
153   * Summary: this contains summary information about the fund,
154     including various balances.
155   * Allocations: this lists allocations to and from the fund.
156   * Transfers: this lists fund transfers to and from the fund.
157   * Debits: this lists debits against the fund. As an enhancement
158     from the previous version of the funds interface, the grid
159     of debits now has links to the line item, purchase order,
160     and/or invoice associated with the debit.
161   * Tags: this lists the tags associated with the funds and allows
162     the user to add or remove tag associations.
163
164 The fund management dialog also allows the user to create allocations
165 into the fund and transfer money away from the fund.
166
167 The funds tab also has a 'Fiscal Propagation and Rollover' button.
168 The library from the selector on the funds tab is used to set the
169 context org unit for the propagation and rollover. Upon clicking the
170 button, a dialog box appears that allows the user to select the fiscal
171 year to propagate or rollover, checkboxes to specify whether to also
172 perform a fiscal year close-out and whether to limit a close-out to
173 encumbrances, and a checkbox to specify whether or not to do a dry run.
174 Upon completion of the propagation, the dialog will display summary
175 results.
176
177
178 The Funding Sources tab displays a filterable list of funding
179 sources and allows the user to create funding sources, apply and view
180 credits, allocate money to funds, and view allocations.
181
182 The Fund Tags tab presents a grid that allows users view view,
183 create, modify, and delete fund tags. Assigning a tag to a fund is
184 done using the fund management dialog.
185
186 The new interface can be found in Administration > Acquisitions
187 Administration > Fund Administration.
188
189 ====== Other Changes ======
190
191 The following miscellaneous changes are included in this work:
192
193 * Funds are now displayed in Angular selectors with the pattern
194   "CODE (YEAR) (OWNING_LIBRARY)"
195 * The automatically generated fund allocation note associated with
196   fund transfers now reads "Transfer to/form fund CODE (YEAR) (OWNER)".
197   Previously, the fund was identified only by its numeric fund ID.
198 * A new style was added for display of negative money amounts. By
199   default, these amounts display with red text.
200 * The fund propagation and rollover report now includes the total
201   amount of encumbrances that were rolled over.
202 * Various dynamic Angular comboboxes will now display up to 100
203   entries upon a click without requiring that the user submit a
204   search term.
205 * Various Angular record editing forms will now complain if
206   the user tries to save a field value that contains only whitespace.
207 * Currency amounts in Angular are no longer displayed with a currency
208   symbol. Prior to this change, monetary amounts were displayed with
209   a dollar sign regardless of the intended currency.
210 * Various changes were made in the IDL to adjust field labels and
211   to mark certain fields as required.
212
213 ===== Fund Debit Auditor Table =====
214
215 A new auditor table now exists for the `acq.fund_debit` table. This
216 allows detailed reporting on changes to encumbrances and expenditures
217 over time.
218
219
220 ===== Miscellaneous =====
221
222 * Funding sources now have an active flag. If a funding source is marked
223   as inactive, adding credits to it or allocating from it is disabled, and
224   it will not show up in the list of possible funding sources when allocating
225   to a fund.
226
227 ==== Administration ====
228
229 ===== Case Insensitive Browse Entries =====
230
231 It is now possible for a system administrator to select whether
232 a particular browse entry field's case should be considered when
233 determining uniqueness.  A new "Browse Folding is Case-Insensitive"
234 column has been added to the Administration -> Server Administration
235 -> MARC Search/Facet Fields interface.  Note that a bib record reingest
236 will be required for changes to take effect.
237
238 ===== Miscellaneous =====
239
240 * The 'Search Filter Groups' administration interface is now ported
241   to Angular.
242
243 ==== Cataloging ====
244
245 ===== Holdings Maintenance & Item Attributes Editor Angular Port =====
246
247 Key differences from the AngularJS Holdings and Item Attr. editor 
248 interfaces include the following:
249
250 * Tabbed Holdings vs. Item Attr. interfaces.
251 ** With option to display as a unified interface without tabs.
252 * Item Attr. fields retain position when showing/hiding
253 * Improve keyboard navigation of Item Attr. editor.
254 * Templates are once again managed directly in the Item Attr. editor.
255 * Item Attr. displays values as counts summaries with option to edit by
256   clicking on a field (or tabbing + Enter) a la XUL.
257 * Item Attr batch values support changing only items with selected values.
258 * Batch value display limit vertical expansion of long lists with option for 
259   manual expansion.
260 * All fields are visible by default; hidden by modifying preferences. 
261 * Owning Library is managed in the Item Attr editor a la XUL.
262 * New feature called "Change Circ Lib When Owning Lib Changes"
263 * Generate Barcodes and Use Checkdigit are visible in the main holdings
264   form with option to hide.
265 * Print Labels checkbox moved from Preferences to the save actions toolbar.
266 * Option to hide various Holdings interface columns for extra horizontal space.
267 * Option to temporarily expand columns in the Holdings interface for reviewing
268   wide columns of text.
269
270 ===== Fix for Authority Records with Long Subfields =====
271
272 Importing or updating authority records with long subfields, i.e. in
273 the vicinity of 5,000 characters or more in length, can cause database
274 errors that will prevent the update or import from happening.  The
275 error occurs because non-full text indexes in PostgreSQL have a
276 limited length, and long fields sometimes lead to index entries that
277 exceed this maximum value.
278
279 In order to rectify this issue, two database indexes on the
280 `authority.full_rec` table's `value` column have been redefined to
281 match their counterparts in the `metabib.real_full_rec` table.  After
282 this update, only the first 1024 characters of an authority field or
283 subfield will be considered by these indexes.
284
285 NOTE: These indexes are not used for authority record search, though
286 they are used for sorting and paging.
287
288 ===== Bib Record -1 Can No Longer Be Edited =====
289
290 Now when retrieving the bibliographic record with the id of -1 the
291 delete button will be missing and the save button is disabled.
292
293 In addition, new database rules now protect bib record ID -1,
294 call number ID -1 and copy location ID 1 from editing.
295
296 ===== MARC Batch Import/Export Separate Edit Date/Editor Toggle =====
297
298 Adds a new field "Update Bib Edit Date" to Vandelay merge profiles which
299 allows users to update the edit date and editor information on a
300 merged/overlaid bib record without also having to modify the bib source.
301
302 For backwards compatibility, any existing merge profiles that have 
303 "Update Bib Source" applied will also get "Update Bib Edit Date" applied.
304
305 ===== Browse Heading Navigation =====
306
307 In the Angular staff catalog, when viewing the list of bib records linked
308 to a heading, it's now possible to navigate to the previous or next heading
309 directly on the bib list page without having to return to the original
310 browse search.
311
312 ===== Bibliographic Record Notes =====
313
314 Bibliographic record notes (i.e., administrative notes stored in the
315 `biblio.record_note` table, not 5XX fields in the MARC record) can now
316 be edited from the Record Notes tab.  Three new permissions manage this
317 and should be added to cataloging accounts and permission groups as
318 appropriate:  `CREATE_RECORD_NOTE`, `UPDATE_RECORD_NOTE`, and
319 `DELETE_RECORD_NOTE`. There is an optional public display flag that is
320 not yet supported in the public catalog but included to support future functionality.
321
322 ==== Circulation ====
323
324 ===== Granular control over how to use price and acquisition cost to determine item value  =====
325
326 This feature adds two new library settings:
327
328  * Use Item Price or Cost as Primary Item Value
329  * Use Item Price or Cost as Backup Item Value
330
331 Which intersect the behavior of these existing settings:
332
333  * Charge lost on zero
334  * Default Item Price
335  * Minimum Item Price
336  * Maximum Item Price
337
338 Each of these settings affect how item price is used in
339 various contexts and is not limited to "lost" items, but
340 can affect notices, fine rules, and billings for long
341 overdue and damaged items (as well as lost items).
342
343 By default, the price field on items is the only field
344 considered by these various uses, but if we set, for
345 example, "Use Item Price or Cost as Primary Item Value" to
346 "cost", then we'll use the cost field instead of the price
347 field.
348
349 Alternately, if we set the "Backup Item Value" to "cost"
350 and either leave the "Primary Item Value" setting unset or
351 set to "price", then we'll consider the price field first,
352 and if it is either unset/null or equal to 0 (and
353 "Charge lost on zero" is true), then it'll fall-through to
354 the cost field.  We can also flip the behavior with these
355 settings and consider cost first and then price second.
356
357 The primary intended use case for this feature is:
358
359  - If there's an acquisition cost, charge this as the lost value.
360  - If there's not an acquisition cost, but there's a price, charge the price.
361  - If neither, charge the default value.
362
363 ===== Library selector on the holds pull list =====
364
365 The holds pull list screen now includes a library/org unit selector.
366 This allows staff to view the pull list of any library where they have
367 VIEW_HOLDS permissions, rather than having to log in to a workstation
368 at that library.
369
370 ===== Angular Holds Pull List =====
371
372 The holds pull list now uses Angular and has an address of `/eg2/en-US/staff/circ/holds/pull-list`.
373
374 ===== New Item Triggered Events Log =====
375
376 A reimplementation of the Item Triggered Events Log interface, building
377 on the Patron Triggered Events Log Angular reimplementation.
378
379 ===== Template Support for Information and My Account URLs =====
380
381 A new setting has been added named `lib.my_account_url` to provide a
382 path usable in templates to a patron's account login. Both this and
383 the existing `lib.info_url` settings are now available in the
384 server-side processed templates, action triggers and traditional print
385 receipts.
386
387 Web side processed templates can be found in 
388 Administration -> Server Administration -> Print Templates.
389
390 You can add settings using the following syntax:
391
392 [source,html]
393 ----
394 <div>[% helpers.get_org_setting(staff_org.id, 'lib.info_url'); %]</div>
395 <div>[% helpers.get_org_setting(staff_org.id, 'lib.my_account_url'); %]</div>
396 ----
397
398 Print Receipts found in Administration -> Workstation -> Print Templates
399 can be added with these includes:
400
401 [source,conf]
402 ----
403 {{includes.info_url}}
404 {{includes.my_account_url}}
405 ----
406
407 Action triggers can use both values with the `helpers.get_org_setting`
408 include.  Example:
409
410 [source,conf]
411 ----
412 [% helpers.get_org_setting(circ_lib.id, 'lib.my_account_url') %]
413 ----
414
415
416 ===== Override Dialogs  =====
417
418 This reworks the override action dialogs in the patron display for Check Out
419 and Items Out, and in the Circulation -> Renew Items interface.  It exposes the
420 auto-override behavior as checkboxes giving staff more fine-grained control
421 over which events are auto-forced or skipped upon subsequent encounters.  It
422 also changes the Cancel action for batch renewals to abort the remaining
423 renewals in the batch, and makes it so that new authorization credentials
424 provided during such a batch will be treated as an operator change for the
425 entire batch.  We also fix an existing bug where events marked as already
426 encountered for auto-override could leak into other patron contexts via Patron
427 Search.
428
429 ===== New Patron Triggered Events Log =====
430
431 A reimplementation of the Patron Triggered Events Log interface along with
432 supporting infrastructure for speedier results with large datasets.
433
434 ===== Photo URL  =====
435
436 Editing of the patron's photo URL can now be done in the staff client's patron
437 registration and edit screen. A new permission UPDATE_USER_PHOTO_URL controls
438 the ability to actually edit the field.
439
440 ===== `open-ils.circ.renew.auto` Removed =====
441
442 The deprecated `open-ils.circ.renew.auto` API was removed.  You will
443 want to use `open-ils.circ.renew` with the `auto_renewal` option set
444 to 1.  This mainly affects those who have written custom code using
445 the open-ils.circ backend.
446
447 ===== Void Deposit Billing at Checkin =====
448
449 There is a new setting called "Void item deposit fee on checkin"
450 that, when enabled, will cause items that have deposit billings
451 to be automatically voided.
452
453 ===== Miscellaneous =====
454
455 * The patron record editor now has a button to send a password
456   reset email to the patron's email address.
457 * Add a new pair of library settings to support pickup library-based
458   hold stalling. 'Pickup Library Soft stalling interval', when set for,
459   the pickup library, specifies that for holds with a request time age
460   smaller than the specified interval only items scanned at the pickup
461   library can be opportunistically captured. Example "5 days". This setting
462   takes precedence over "Soft stalling interval" (circ.hold_stalling.soft)
463   when the interval is in force. 'Pickup Library Hard stalling interval',
464   when set for the pickup library, specifies that no items with a
465   calculated proximity greater than 0 from the pickup library can be
466   directly targeted for this time period if there are local available
467   copies.
468 * Add a new library setting, 'Workstation OU is the default for staff-placed holds',
469   to indicate that the workstation OU should be set as the default pickup
470   location for hold requests that are placed via the staff interface. The
471   process for setting the default pickup location is now:
472   . Workstation if the 'Workstation OU is the default for staff-placed holds' setting
473     is turned on
474   . The user's preferred pickup location, if set
475   . if the user's preferred pickup location is not set, the
476     Workstation if the 'Workstation OU fallback for staff-placed holds'
477     setting is turned on
478   . Otherwise, it defaults to the user's home library.
479
480 ==== Client ====
481
482 ===== Consolidate Patron Notes, Alerts, and Messages =====
483
484 Patron notes, messages, alert messages, and standing penalties have been folded
485 into one Notes interface.  Notes designated as public will show in the My
486 Account -> Message Center in the public catalog for patrons.
487
488 The underlying data structure has also changed with all notes living in the
489 `actor.usr_message` table, so report writers will need to change the following
490 paths in existing reports:
491
492  * `actor.usr_note` -> all columns
493  * `actor.usr` -> `alert_message`
494  * `actor.usr_standing_penalty` -> note
495
496 And for `actor.usr_message`, there is now both a `pub` column and a `deleted` column.
497
498 Depending on privacy policies, system administrators may wish to set up a
499 recurring process to truly delete older entries in `actor.usr_message` that have
500 been flagged as deleted.
501
502 WARNING: The upgrade script will remove the alert_message field from the
503 auditor table, so if you care about preserving those you should run a query to
504 create a backup.
505
506 For example:
507
508 [source,sql]
509 ----
510 CREATE TABLE auditor.backup_usr_alert_msg AS
511    CREATE audit_id, audit_time, audit_action, audit_user,
512           audit_ws, id as "usr_id", last_update_time,
513           alert_message
514    FROM auditor.actor_usr_history
515    WHERE alert_message IS NOT NULL;
516 ----
517
518 ===== Fix for Staff Splash Page Multi-Word Search =====
519
520 The addition of the Angular Staff Catalog surfaced a double-encoding issue
521 with redirects in certain Apache versions. This caused searches for multiple
522 words to have %20 in place of spaces, almost certainly resulting in 0 results.
523
524 In order to apply this fix, change the Angular redirects in eg_vhost.conf from
525
526  RewriteRule ^/eg2/(.*) https://%{HTTP_HOST}/eg2/en-US/$1 [R=307,L]
527
528 to
529
530  RewriteRule ^/eg2/(.*) https://%{HTTP_HOST}/eg2/en-US/$1 [NE,R=307,L]
531
532 ===== Miscellaneous =====
533
534 * In the Angular staff catalog, rename 'Catalog Preferences' to
535   'Search Preferences' and add a return button.
536 * Angular grids now have a have a 'Manage Actions Menu' configuration
537   action to allow users to control which actions are displayed
538   on the context menu for the grid.
539 * The item table and holdings view in the Angular staff catalog record
540   details page now include 'Total Circ Count' and 'Last Circ Date' columns.
541 * There is a new library setting, 'Staff Catalog Search Filters', that can be
542   used to customize the list of search filters that are available on the
543   Angular staff catalog advanced search form. This setting takes an array
544   of desired filters, e.g., `["item_lang","audience","lit_form"]`. The complete
545   list of available filters is item_type, item_form, item_lang, audience,
546   vr_format, bib_level, and lit_form. If the library setting is not set,
547   all of the filters are displayed.
548
549 ==== Public Catalog ====
550
551 ===== Credit card payments using Stripe now implemented with PaymentIntents instead of Charges =====
552
553 This changes the Stripe code in the public catalog to use their PaymentIntents and confirmCreditCard API,
554 which is recommended over their Charges API.  Credit card charges are no longer finalized
555 (captured/confirmed) on Evergreen's backend, though the backend does check whether a payment was
556 made successfully before recording it.
557
558 ===== Miscellaneous =====
559
560 * The Bootstrap public catalog now displays cover images on the My Account
561   items checked out, check out history, holds, and holds history pages.
562 * Carousels on the public catalog home page now take up 80% of the page width
563   by default rather than just 40%.
564
565 ==== Reports ====
566
567 ===== Reporter Item Statistics View =====
568
569 A new reports source, Item Statistics View is available.
570 Certain third-party products such as collection development
571 management providers require copy statistics that are not
572 readily available in a single report.  This view adds those,
573 which will also benefit library staff reports generally.
574
575 To add the view, a system administrator will need to (re-)run
576 the example.reporter-extension.sql script, which will create 
577 the new view in the database.
578
579 ===== Hold/Copy Ratio Report Source Changes =====
580
581 This standardizes how the existing Hold/Copy Ratio reports sources count holdable copies; notably, metarecord copies are no longer counted in these report sources and all sources now use action.hold_copy_map. 
582
583 Any reports using these sources will need to be rewritten.
584
585 A new source that breaks out counts by patron home library was also added, named Hold/Copy Ratio per Bib and Home Library.
586
587
588 ===== Add Dewey Call Number Blocks and Ranges to Reports =====
589
590 A new view is added to the reporter with links from Call Number that
591 will allow users to display or filter on the Dewey 10's or 100's block
592 or range that a call number falls within. They can be accessed by
593 following the "Dewey Classification" link from Call Number.
594
595 ===== More Granular Age Divisions for Reports =====
596
597 Reports now include an option for more detailed age divisions for users
598 based on the entered date of birth.  Divisions include:
599
600  * Child 0-5 Years Old
601  * Child 6-12 Years Old
602  * Teen 13-17 Years Old
603  * Adult 18-25 Years Old
604  * Adult 26-49 Years Old
605  * Adult 50-59 Years Old
606  * Adult 60-69 Years Old
607  * Adult 70+
608
609 This new column is accessible from ILS User -> Demographic Info and the new
610 field is named "Detailed Age Division".
611
612 === Acknowledgments ===
613
614 The Evergreen project would like to acknowledge the following
615 organizations that commissioned developments in this release of
616 Evergreen:
617
618 * CW MARS
619 * Evergreen Community Development Initiative
620 * NOBLE
621 * PaILS
622 * Westchester Library System
623
624 We would also like to thank the following individuals who contributed
625 code, translations, documentations, patches, and tests to this release of
626 Evergreen:
627
628 * Adam Bowling
629 * Andrea Buntz Neiman
630 * Angela Kilsdonk
631 * Beth Willis
632 * Bill Erickson
633 * Blake Graham-Henderson
634 * Chris Sharp
635 * Christine Burns
636 * Christine Morgan
637 * Chrisy Schroth
638 * Dan Briem
639 * Dawn Dale
640 * Elaine Hardy
641 * Erica Rohlfs
642 * Galen Charlton
643 * Garry Collum
644 * Gina Monti
645 * Jane Sandberg
646 * Jason Boyer
647 * Jason Etheridge
648 * Jason Stephenson
649 * Jeff Davis
650 * Jeff Godin
651 * Jennifer Bruch
652 * Jennifer Pringle
653 * Jennifer Weston
654 * Jessica Woolford
655 * John Amundson
656 * Josh Stompro
657 * Katie G. Martin
658 * Kyle Huckins
659 * Lindsay Stratton
660 * Lisa Carlucci
661 * Lynn Floyd
662 * Mary Llewellyn
663 * Michele Morgan
664 * Mike Risher
665 * Mike Rylander
666 * Rogan Hamby
667 * Rosie Le Faive
668 * Ruth Frasur
669 * Seth Erickson
670 * Shula Link
671 * Stephen Wills
672 * Terran McCanna
673 * Tiffany Little
674 * Verbio Group
675
676 We also thank the following organizations whose employees contributed
677 patches:
678
679 * BC Libraries Coop
680 * Bibliomation
681 * Catalyte
682 * CW MARS
683 * Emerald Data
684 * Equinox Open Library Initiative
685 * Georgia Public Library Service
686 * Greater Clarks Hill Regional Library
687 * Indiana State Library
688 * Kenton County Library
689 * King County Library System
690 * Linn Benton Community College
691 * MOBIUS
692 * NOBLE
693 * PaILS
694 * Sigio
695 * University of Prince Edward Island
696 * Westchester Library System
697
698 We regret any omissions.  If a contributor has been inadvertently
699 missed, please open a bug at http://bugs.launchpad.net/evergreen/
700 with a correction.