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