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