Evergreen.git
8 months agoLP1681930 fm_IDL.xml billing/paid total column type correction.
Geoff Sams [Thu, 7 Mar 2019 02:54:15 +0000 (20:54 -0600)]
LP1681930 fm_IDL.xml billing/paid total column type correction.

Both xact_billing_totals and xact_paid_totals had incorrect unvoided
sum column types of int, this corrects them both to money instead.

Signed-off-by: Geoff Sams <gsams@roanoketexas.com>
Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1832146: Make sure that comboboxes don't get cut off
Jane Sandberg [Mon, 10 Jun 2019 03:57:49 +0000 (20:57 -0700)]
LP1832146: Make sure that comboboxes don't get cut off

To test:
1) Go to the sandbox and open the accordion.
2) Open the combobox. Note that it isn't cut off.
3) Go to Administration > Acquisitions Administration
> Exchange Rates.
4) Click New Exchange Rate.
5) Go to the "From Currency" and "To Currency" fields.
6) Note that the dropdowns are visible and not cut off.

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1831390: Don't clobber startId of combobox with null values
Jane Sandberg [Fri, 26 Jul 2019 18:28:13 +0000 (11:28 -0700)]
LP1831390: Don't clobber startId of combobox with null values

Also ensures that writeValue accepts only ComboboxEntry values,
so [(ngModel)] both gives and receives ComboboxEntry values, rather
than a confusing mix.

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1831390: Fixing implementation of registerOnTouch
Jane Sandberg [Mon, 8 Jul 2019 13:44:53 +0000 (06:44 -0700)]
LP1831390: Fixing implementation of registerOnTouch

This commit ensures that the onTouch callback is called on the blur
event, per the official Angular documentation.

Also improves the display of default values in the datepicker

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1831390 ControlValueAccessor continued
Bill Erickson [Fri, 28 Jun 2019 19:07:03 +0000 (15:07 -0400)]
LP1831390 ControlValueAccessor continued

Make eg-date-select traffic in Date objects instead of YMD strings.
Added simple combobox [(ngModel)] example.
Added combobox freetext testing
Avoid forcing startIdFiresOnChange for combobox.
Avoid redundant FormsModule import.
Minor lint repairs.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1831390: combobox and date-select implement ControlValueAccessor
Jane Sandberg [Tue, 25 Jun 2019 18:17:07 +0000 (11:17 -0700)]
LP1831390: combobox and date-select implement ControlValueAccessor

This makes both components compatible with [(ngModel)] and
reactive forms.

Also adds sandbox examples.

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1831788: (follow-up) removing small linting errors, unused imports
Jane Sandberg [Wed, 31 Jul 2019 21:19:08 +0000 (14:19 -0700)]
LP1831788: (follow-up) removing small linting errors, unused imports

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP#1831788: (follow-up) properly handle case where filter value is 0
Galen Charlton [Wed, 31 Jul 2019 20:15:21 +0000 (16:15 -0400)]
LP#1831788: (follow-up) properly handle case where filter value is 0

To test
-------
[1] In the sandbox's copy grid, display the status column and filter
    by the 'Available' status (ccs.id = 0).
[2] Verify that the correct rows are returned.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP1831788 Add EgCoreModule for CommonWidgetsModule, etc.
Bill Erickson [Wed, 31 Jul 2019 18:21:18 +0000 (14:21 -0400)]
LP1831788 Add EgCoreModule for CommonWidgetsModule, etc.

Collect core objects into their own module so they may be imported
without requiring task-specific modules to import EgCommonModule, which
provides a lot more than most sub-modules need.

In the case of CommonWidgetsModule, it required access to the
FormatPipe, which is a core object, originally exported from
EgCommonModule.  However, EgCommonModule was overkill for
CommonWidgetsModule and importing it would likely have created other
dependency problems.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP1831788 dialog dismissal and i18n repairs
Bill Erickson [Wed, 31 Jul 2019 18:56:43 +0000 (14:56 -0400)]
LP1831788 dialog dismissal and i18n repairs

Update sandbox dialog error handling to treat all error conditions as
errors.  Dialogs no longer produce an error on dismissal, they just
complete the obvservable.

Add i18n-placeholder attributes to some grid filter placeholder text.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1831788: (follow-up) rename grid method
Galen Charlton [Tue, 30 Jul 2019 20:05:27 +0000 (16:05 -0400)]
LP#1831788: (follow-up) rename grid method

Specifically, reloadSansPagerReset() =>  reloadWithoutPagerReset()

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1831788: (follow-up) update sandbox example
Galen Charlton [Tue, 30 Jul 2019 20:02:49 +0000 (16:02 -0400)]
LP#1831788: (follow-up) update sandbox example

- dialog adjusted for LP#1823041 changes
- typo fixed

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1831788: add user-level release notes
Galen Charlton [Wed, 5 Jun 2019 17:27:43 +0000 (13:27 -0400)]
LP#1831788: add user-level release notes

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1813788: add example of grid improvements to sandbox
Galen Charlton [Wed, 5 Jun 2019 15:18:14 +0000 (11:18 -0400)]
LP#1813788: add example of grid improvements to sandbox

This patch adds a new grid to the Angular sandbox page
that demonstrates the following features introduced
in the previous patch:

- grid filtering
- stick grid headers
- grid reloads without losing one's current paging
  location

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1831788: add result filtering and other improvements to the Angular eg-grid
Galen Charlton [Wed, 5 Jun 2019 15:19:36 +0000 (11:19 -0400)]
LP#1831788: add result filtering and other improvements to the Angular eg-grid

This patch enables users to filter results in Angular eg-grids that
use PCRUD-based data sources.

Filtering can be enabled in an eg-grid defintion by adding the following
attribute to <eg-grid>:

  [filterable]="true"

If, for some reason, a particular column should not be filterable by the
user, filtering can be disabled by passing false to the [filterable]
attribute of an <eg-grid-column> element like this:

  <eg-grid-column [sortable]="true" [filterable]="false"  path="barcode"></eg-grid-column>

When filtering is enabled, a new section of the grid header is displayed that
includes, for each filterable column:

* A drop-down menu letting the user specify an operator such as
  "is exactly", "exists" (i.e., is not null), "is greater than", and so
  forth. The drop-down also allows the user to clear a filter for a
  specific column or re-apply it after changing the operator.
* An input widget for setting the value to filter on. The type of input
  displayed depend on the IDL type of the column. For example, a text field
  will use a normal text <input>; an OU field will use an eg-org-select,
  a link to another IDL class will use a combobox, a timestamp field
  will use an eg-date-select, and so forth.
* A separate display of the current operator.

When filtering is enabled, the grid will also display a "Remove Filters" button
in the action bar.

Under the hood, the widgets for entering filtering parameters expect
the data source to have a "filters" key that in turn contains a
dictionary of PCRUD-style filtering conditions indexed by column name.
Consequently, a grid data source that wants to use filtering should
look something like this:

    this.acpSource.getRows = (pager: Pager, sort: any[]) => {
        const orderBy: any = {acp: 'id'};
        if (sort.length) {
            orderBy.acp = sort[0].name + ' ' + sort[0].dir;
        }

        // base query to grab everything
        let base: Object = {};
        base[this.idl.classes['acp'].pkey] = {'!=' : null};
        var query: any = new Array();
        query.push(base);

        // and add any filters
        Object.keys(this.acpSource.filters).forEach(key => {
            Object.keys(this.acpSource.filters[key]).forEach(key2 => {
                query.push(this.acpSource.filters[key][key2]);
            });
        });
        return this.pcrud.search('acp',
            query, {
            flesh: 1,
            flesh_fields: {acp: ['location']},
            offset: pager.offset,
            limit: pager.limit,
            order_by: orderBy
        });
    };

This patch also adds two related grid options, sticky headers and the ability
to reload the data source without losing one's current place in page.

Sticky headers are enabled by adding the following attribute to the
<eg-grid> element:

  [stickyHeader]="true"

When this is enabled, as the user scrolls the grid from top to bottom, the
header row, including the filter controls, will continue to remain visible
at the top of the viewport until the user scrolls past the end of the
grid entirely.

Reloading grids without losing the current paging settings can now be
done by a caller (such as code that opens an edit modal)  invoking a new
reloadSansPagerReset() method.

Implementation Notes
--------------------
[1] This patch adds special-case logic for handling the "dob" column,
    which is the sole date column in the Evergreen schema. Longer-term,
    it would be better to define a new "date" IDL field type that's
    distinct from "timestamp".
[2] stickyHeader currently makes only the grid header sticky, not both
    the header and the action bar. This outcome is a result of z-index
    messiness with the ng-bootstrap dropdown menu which I couldn't get
    past. However, the forthcoming grid context menus hopefully will
    be a reasonable amelioration.
[3] During testing it became evident that it would be handy to add
    support for open-ils.fielder as a grid data source at some
    point in the near future.

To test
-------
General testing can be done using the new second grid in the
Angular sandbox page added by the following test. Things to check
include:

- grid filter operators are displayed
- hitting enter in text inputs activates the filter
- the grid-level Remove Filters button works
- per-column filter clearing works
- operators have the expected results
- The header of both grids on the sandbox page is sticky. This can
  be tested by increasing the row count in the second grid and
  scrolling.

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1831788: create CommonWidgetsModule
Galen Charlton [Mon, 25 Mar 2019 19:27:05 +0000 (15:27 -0400)]
LP#1831788: create CommonWidgetsModule

This patch moves some commonly-shared components off to a separate
module. The immediate motivation is to avoid circular dependencies
when adding filtering widgets to eg-grid.

Components included in CommonWidgetsModule should be "core" in the
sense that they are unlikely to ever need to embed one another.

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1634244 - prevent bibs from being deleted when they have on-order, pending-order...
Rogan Hamby [Fri, 19 Apr 2019 19:39:57 +0000 (15:39 -0400)]
LP#1634244 - prevent bibs from being deleted when they have on-order, pending-order or new line items attached to them

Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
8 months agolp1034058 Disable Renewal Due Dates in the Past
Kyle Huckins [Thu, 23 May 2019 20:53:11 +0000 (20:53 +0000)]
lp1034058 Disable Renewal Due Dates in the Past

Apply minimum date and an out of range flag to prevent
selecting or inputting a past date when renewing items from
Circulation->Renew Items or Patron->Items Out->Actions->
Renew With Specific Due Date.

To test
-------
[1] Create a loan.
[2] From the patron's Item Out page, use the Renew With
    Specific Due Date action. Note that the date widget
    will allow you to specify a due date in the past.
[3] From the Circulation -> Renew interface, note that
    the date widget will also let you specify a due
    date in the past.
[4] Apply the patch and repeat steps #2 and #3. This time,
    a due date in the past cannot be entered, both via
    the calendar button and by direct entry in the text
    box.

Signed-off-by: Kyle Huckins <khuckins@catalyte.io>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
8 months agoLP#1006466 - remove testing upgrade script
Chris Sharp [Thu, 1 Aug 2019 11:25:37 +0000 (07:25 -0400)]
LP#1006466 - remove testing upgrade script

Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
8 months agoLP#1006466 - Stamping upgrade script
Chris Sharp [Thu, 1 Aug 2019 10:57:31 +0000 (06:57 -0400)]
LP#1006466 - Stamping upgrade script

Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
8 months agoadding fk constraint to hold_type on action.hold_request and reporter class
Rogan Hamby [Tue, 16 Apr 2019 16:49:07 +0000 (12:49 -0400)]
adding fk constraint to hold_type on action.hold_request and reporter class

Signed-off-by: Rogan Hamby <rogan.hamby@gmail.com>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
8 months agoLP1832148 Clear selection for deleted grid rows
Bill Erickson [Tue, 25 Jun 2019 14:44:57 +0000 (10:44 -0400)]
LP1832148 Clear selection for deleted grid rows

Ignore rows which are no longer present in the grid when displaying the
"X selected" rows label along the top of the Angular grid.

Additionally, teach the grid to clear selected indexes for rows that are
no longer present for a bit of low-impact release of memory.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP1834969 Indicate failures in Angular login
Bill Erickson [Wed, 3 Jul 2019 15:05:47 +0000 (11:05 -0400)]
LP1834969 Indicate failures in Angular login

Display a Login Failed message in the Angular staff login form when a
login attempt fails.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP#1837478: stamp DB update
Galen Charlton [Wed, 31 Jul 2019 19:25:28 +0000 (15:25 -0400)]
LP#1837478: stamp DB update

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1837478 Ang catalog recents/templates release notes
Bill Erickson [Thu, 25 Jul 2019 14:24:15 +0000 (10:24 -0400)]
LP1837478 Ang catalog recents/templates release notes

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1837478 Angular Catalog Recent Searches & Templates
Bill Erickson [Mon, 22 Jul 2019 21:50:01 +0000 (17:50 -0400)]
LP1837478 Angular Catalog Recent Searches & Templates

Adds two new dropdowns (below basket actions) for recent searches
(similar to those found in the staff TPAC) and search templates.

Search templates are a new feature which allow staff to save canned
search filters/settings without the query content, so common searches
may be easily recalled.

For UI consistency and to preserve some space, the Basket Actions selector
is now a dropdown instead of a select element.

Adds a new workstation setting 'eg.catalog.search_templates' for storing
templates.

Includes a number of improvements to the underlying Catalog code and a
new ArrayUtil class, which adds a simple equals() function for comparing
arrays.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoDocs: LP#1813225: Adding brief release note
Jane Sandberg [Wed, 31 Jul 2019 19:23:31 +0000 (12:23 -0700)]
Docs: LP#1813225: Adding brief release note

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1813225 Link Billing Location to Library Info
Terran McCanna [Wed, 13 Feb 2019 18:19:35 +0000 (13:19 -0500)]
LP#1813225 Link Billing Location to Library Info

Converts library shortname on billing details page to a
link which opens in a new tab so that staff can easily
get to library contact info.

Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Signed-off-by: Garry Collum <gcollum@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP1766982 - CSV downloads contain the string 'null' for null values.
Garry Collum [Fri, 18 May 2018 23:57:42 +0000 (19:57 -0400)]
LP1766982 - CSV downloads contain the string 'null' for null values.

Adds a check for null and undefined in the getItemTextContent function
in grid.js which is called by both the code to download grid data as
CSV and for printing grids.

To test
1. Place holds on a couple of titles, one of which has no author. In the
   test data TCN 226, The Crow, has no author data.
2. Pull up the Holds Pull List.
3. Download Full CSV - to download the CSV file and view it in a
   spreadsheet or text editor looking specifically at the Author column.
4. Print Full Grid - to view the data in a printout, since this function
   also affects printing.
5. Go back to the Holds Pull List and click on one of the barcodes under
   the Current Copy column.
6. Click on the List View.
7. Download Full CSV - open the resulting file to inspect the
   Alert Message data.
8. Apply patch and repeat steps 2-7.

Signed-off-by: gcollum <gcollum@gmail.com>
Signed-off-by: Josh Stompro <stompro@stompro.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1779467: Fix bug with charging fees when marking item damaged.
Jason Stephenson [Sun, 3 Feb 2019 16:44:09 +0000 (11:44 -0500)]
LP1779467: Fix bug with charging fees when marking item damaged.

Revert the changes made to the mark_damaged function in the web staff
client code (Open-ILS/web/js/ui/default/staff/circ/services/circ.js)
earlier in this branch.  The new code does not handle the mark damaged
process correctly, but the original code does.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
8 months agoLP 1779467: Fix Error When Marking Item on Hold as Discard/Weed
Jason Stephenson [Mon, 12 Nov 2018 14:17:11 +0000 (09:17 -0500)]
LP 1779467: Fix Error When Marking Item on Hold as Discard/Weed

Fix the following error when marking an on-hold item as Discard/Weed:

Can't use an undefined value as an ARRAY reference at
/usr/local/share/perl/5.18.2/OpenILS/Application/Circ.pm line 1393.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
LP#1779467: Fix 'Dicard' typo

Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
8 months agoLP 1779467: Fix SyntaxError: missing ) after argument list
Jason Stephenson [Mon, 5 Nov 2018 21:38:48 +0000 (16:38 -0500)]
LP 1779467: Fix SyntaxError: missing ) after argument list

Missing parenthesis in Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
caused the titular error when searching the catalog.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
LP 1779467: Fix typo in circ/renew/app.js.

Had copyies for copies in one location and this prevented marking an
item as Discard/Weed from working on the renew item interface.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
8 months agoLP 1779467: Enhance Mark Items Functionality
Jason Stephenson [Sat, 27 Oct 2018 19:48:54 +0000 (15:48 -0400)]
LP 1779467: Enhance Mark Items Functionality

A new option to "Mark Item as Discard/Weed" is added to many actions
menus in the staff client.  This command is connected to the back end
function open-ils.circ.mark_item_discard.

The back end functionality for the open-ils.circ.mark_item_* family of
functions is altered to provide more consistent behavior and to avoid
some strange situations that have come up in the past, such as items
with the Missing status having active transits or open circulations.

The code for "Mark Item as Damaged" and "Mark Item as Missing" are
altered to take advantage of the back end changes.  NB: These changes
do not affect the "Mark Item as Missing Pieces" function, as that is
handled by different back end code.

Perl live tests are added for the backend functionality changes to
test that certain conditions works.  Like most of our tests these
could be expanded to cover more potential situations.

See the release notes for more detail on changes in functionality.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
8 months agoLP#1778414: (follow-up) update Angular client menu as well
Galen Charlton [Wed, 31 Jul 2019 15:11:16 +0000 (11:11 -0400)]
LP#1778414: (follow-up) update Angular client menu as well

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP#1778414 Add Item Status to the Catalog menu
Garry Collum [Wed, 27 Jun 2018 20:08:34 +0000 (16:08 -0400)]
LP#1778414 Add Item Status to the Catalog menu

This patch adds Item Status as an option in the Catalog menu.

Signed-off-by: Garry Collum <gcollum@gmail.com>
Signed-off-by: Meg Stroup <mstroup@statelibrary.sc.gov>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP#1831784: fix Angular's formatting of DOB field
Galen Charlton [Mon, 6 May 2019 21:41:31 +0000 (17:41 -0400)]
LP#1831784: fix Angular's formatting of DOB field

Otherwise, depending on the local time zone, the date displayed
could be off a day.

The 'dob' columns are currently the the _only_ database/IDL fields
that are truly dates, not timestamps, hence the hard-coded exception.
However, an alternative approach would be to define a new 'date'
field type in the IDL.

To test
-------
[1] Construct an eg-grid (say, on the Angular sandbox page) that retrieves
    patron records. For users in North America, the birth dates are
    likely off by a day.
[2] Apply the patch and repeat step 1. This time, the birth dates should
    display as entered.

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP#1822414: (follow-up) remove au-linked fields sandbox editDialog
Galen Charlton [Wed, 31 Jul 2019 14:55:06 +0000 (10:55 -0400)]
LP#1822414: (follow-up) remove au-linked fields sandbox editDialog

Otherwise, the drop-downs for the User and Capture Staff fields
will attempt to fetch all user IDs from the database, which would
be awkward if attempted on a large database.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1822414 Ang date select readOnly & fixes
Bill Erickson [Sun, 26 May 2019 18:02:44 +0000 (11:02 -0700)]
LP1822414 Ang date select readOnly & fixes

Adds an @Input() readOnly field to eg-date-select.  When set, the date
value will be displayed as plain text - no widget.

Teach the eg-fm-editor to pass the readOnly flag to the eg-date-select.

Includes sandbox example.

Fixes a display issue where the date select calendar button was bigger
than the paired input group adding text input, because the material
icon was too big.

2019-07-31 rebasing note: the style added in the original patch was
moved to data-select.component.css.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1822414 Angular format service formatValue pipe
Bill Erickson [Sun, 26 May 2019 18:01:40 +0000 (11:01 -0700)]
LP1822414 Angular format service formatValue pipe

Create a pipe version of FormatService.transform() function so strings
may be generated from fields directly in templates.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP#1798187 - Support CRLF and LF format for item status import files
Josh Stompro [Wed, 27 Feb 2019 21:07:43 +0000 (15:07 -0600)]
LP#1798187 - Support CRLF and LF format for item status import files

Testing Plan:

Before patch, try to import a file in CRLF end of line format that includes
leading and trailing spaces, empty lines, lines of just spaces or
barcodes with spaces.  The import will fail to load those items and will
stop processing when it hits certain situations.

After patch, try to import a file in CRLF EOL format that includes barcodes
with trailing spaces, leading spaces, barcodes with spaces, and/or
empty lines.  The import will load all barcodes.

Signed-off-by: Josh Stompro <stompro@stompro.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1831780: various improvements to the Angular date-select widget
Galen Charlton [Mon, 25 Mar 2019 19:21:46 +0000 (15:21 -0400)]
LP#1831780: various improvements to the Angular date-select widget

Styling
-------
- the widget is now narrower
- the widget now enables form validation styles; in particular,
  entry of an incorrectly-formatted date is now highlighted
- the calendar drop-down is now allowed to overflow the containing
  element when expanded, making it easier to embed the date
  selector in other controls
- the calendar button (and any material icons button that's part of
  an input group) now has the same default font size as main text,
  making the overall date-select look cleaner

API
---
- add a reset() method
- hitting enter in the text box can now triggers emitting date
  change events
- a new onCleared event is emitted if the suer hits enter on an
  empty input
- onChangeAsYmd() now pads month and day to two digits apiece,
  making the result conform to ISO 8601 and thus more easily
  plugged into queries.
- adds the following methods to retrieve the current date; these
  are meant to be used via local template references in parent
  templates:

  currentAsYmd()
  currentAsIso()
  currentAsDate()

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP#1831783: improvements to the Angular org-select widget
Galen Charlton [Tue, 4 Jun 2019 14:01:27 +0000 (10:01 -0400)]
LP#1831783: improvements to the Angular org-select widget

- add reset() method
- add method for retrieve current selected OU. This can be invoked
  from local template references in parent templates like this:

    <button ... (click)="doAction(ousel.selectedOrg())" ...
    ...
    <eg-org-select (onChange)="doAction($event)" #ousel></eg-org-select>

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP#1831907: bump up ng-bootstrap
Galen Charlton [Tue, 30 Jul 2019 18:44:16 +0000 (14:44 -0400)]
LP#1831907: bump up ng-bootstrap

This bumps up ng-bootstrap to ^4.2.0, which as of the date
of this patch resolves to 4.2.1. Also as of the date of this
patch, ng-bootstrap 5.1.0 is available, but cannot be used
prior to upgrading Angular from 7 to 8.

To test
-------
[1] Install the patch.
[2] In the sandbox (/eg2/en-US/staff/sandbox) verify that keyboard
    navigation for the grid action menu's dropdowns works.
[3] Look for other oddities in the Angular client.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP1683385 AngJS grid avoid dupe auto-fields
Bill Erickson [Wed, 17 Apr 2019 14:51:45 +0000 (10:51 -0400)]
LP1683385 AngJS grid avoid dupe auto-fields

When generating grid fields from an IDL class in the AngJS grid, avoid
adding any fields that match fields already defined in the markup.

An example of such a grid is the Pending Item Buckets page.

To test
-------
[1] Go to Item Buckets and add an item to the Pending Items page.
[2] Note that in the column picker there are two barcode fields,
    one that hyperlinks the item and one that does not.
[3] Apply the patch and repeat steps 1-2.
[4] This time, there is only one barcode column (the one that
    hyperlinks the results).

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1809183: Allow passing template to eg-confirm-dialog
Jane Sandberg [Wed, 19 Dec 2018 23:51:25 +0000 (15:51 -0800)]
LP1809183: Allow passing template to eg-confirm-dialog

Adds an input called dialogBodyTemplate to <eg-confirm-dialog>. This can
be useful when you want to pass ICU messages to <eg-confirm-dialog>
(e.g. "Are you sure you want to cancel these 3 holds?" vs. "Are you sure
you want to cancel this hold?").

If both dialogBody and dialogBodyTemplate are defined, it will show the
dialogBodyTemplate message.

Also adds a sandbox example.

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP1836962: correcting comments in the Angular client
Jane Sandberg [Wed, 17 Jul 2019 21:24:49 +0000 (14:24 -0700)]
LP1836962: correcting comments in the Angular client

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1830424 Implement Angular "retrieve last bib record"
Bill Erickson [Wed, 29 May 2019 18:03:38 +0000 (14:03 -0400)]
LP1830424 Implement Angular "retrieve last bib record"

Repair the Angular navbar menu entry for "Retrieve Last Bib Record" by
replacing the copy/paste'd ng-click handler with an Angular (click)
handler and local implementation.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP1831785 Combobox pcrud selector and pkey support
Bill Erickson [Mon, 29 Jul 2019 15:36:38 +0000 (11:36 -0400)]
LP1831785 Combobox pcrud selector and pkey support

Teach the PCRUD-driven combobox to use the IDL class' selector field
as the sort and display field when no idlField value is provided.

Teach the async source to use the pkey field of the IDL class instead of
assuming the 'id' field.

Tweak the sandbox example to fetch data for a class which uses a
selector not called "name" and a pkey not called "id".

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP1831785 (follow-up): simplifying static string binding, removing empty else statement
Jane Sandberg [Sat, 27 Jul 2019 17:50:40 +0000 (10:50 -0700)]
LP1831785 (follow-up): simplifying static string binding, removing empty else statement

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP#1831785: eg-combobox support automatic pcrud-based IDL data sources
Jason Etheridge [Wed, 5 Jun 2019 15:42:29 +0000 (11:42 -0400)]
LP#1831785: eg-combobox support automatic pcrud-based IDL data sources

This patch adds new idlClass and idlField attributes to eg-combobox to
enable it to automatically construct a pcrud-base data source. The
idlClass property specifies which table/class to use as the base
data source, while idlField specifies the label to display. If idlField
is not supplied, the label field defaults to "name".

It also adds an asyncSupportsEmptyTermClick option to specify that an
async data source (whether or not it is automatically built) is
expected to never return more than a couple hundred entries or so;
when supplied, it will allow fetching the entire contents of the
data source when the user clicks on the drop-down.

To test
-------
[1] Apply the patch and exercise the comboboxes on the
     Angular sandbox page (/eg2/en-US/staff/sandbox)

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Jason Etheridge <jason@EquinoxInitiative.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1796903: (follow-up) disabled the calendar button when the text input is disabled
Galen Charlton [Fri, 24 May 2019 18:04:33 +0000 (14:04 -0400)]
LP#1796903: (follow-up) disabled the calendar button when the text input is disabled

Disabling the calendar button when the datepicker is disabled allows
ChromeVox (at least) to skip past a button that cannot be invoked
until (like is possible in the checkout page) the picker is enabled.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP1796903: Make date picker calendar button more accessible
Jane Sandberg [Tue, 9 Oct 2018 14:37:56 +0000 (07:37 -0700)]
LP1796903: Make date picker calendar button more accessible

To test:

1) After applying this commit, navigate to a place in the Web client
that includes a date picker (such as the checkin screen).
2) Hover over the calendar button with your mouse and confirm that a
tooltip appears.
3) Verify that the button element has an aria-label attribute.
4) Verify that the button element has an aria-pressed attribute that
is false when the date picker is closed; true when it is open.
5) Use a screen reader (like NVDA or ChromeVox).  Verify that when you
tab over to the date picker, the user is informed of the aria-label
and aria-pressed values

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP#1795972: stamp DB update
Galen Charlton [Tue, 30 Jul 2019 14:21:17 +0000 (10:21 -0400)]
LP#1795972: stamp DB update

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP#1795972: Add description for APPLY_WORKSTATION_SETTING permission.
Chris Sharp [Mon, 20 May 2019 19:07:08 +0000 (15:07 -0400)]
LP#1795972: Add description for APPLY_WORKSTATION_SETTING permission.

Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Kyle Huckins <khuckins@catalyte.io>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agolp1836229 Disable Edit buttons in Merge Records when Editing
Kyle Huckins [Thu, 11 Jul 2019 16:36:36 +0000 (16:36 +0000)]
lp1836229 Disable Edit buttons in Merge Records when Editing

- Apply disabled attribute to Edit buttons rather than just the class,
preventing users from clicking buttons that appear disabled in the Merge UI.

Signed-off-by: Kyle Huckins <khuckins@catalyte.io>
 Changes to be committed:
modified:   Open-ILS/src/templates/staff/cat/bucket/record/t_merge_records.tt2

Signed-off-by: Garry Collum <gcollum@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
8 months agoLP#1776003: show codes throughout the Physical Characteristics Wizard
Galen Charlton [Wed, 22 May 2019 18:57:52 +0000 (14:57 -0400)]
LP#1776003: show codes throughout the Physical Characteristics Wizard

This patch extends on the previous one to show the code (as well as the
label) in all drop-downs used in the Physical Characteristics Wizard. It
also makes the drop-down text accessible for translations, in case there
are any locales where "code: label" is not preferred.

This patch also adds release notes.

To test
-------
[1] Apply the patches and use the web staff MARC editor to edit or
    create an 007 field, then use the Physical Characteristics Wizard.
[2] Verify that the drop-downs now display both the code and the label
    for each value.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1776003: Show MARC Code in 'Category of Material' in Physical Characteristics...
a. bellenir [Thu, 23 Aug 2018 19:42:28 +0000 (15:42 -0400)]
LP#1776003: Show MARC Code in 'Category of Material' in Physical Characteristics Wizard

display the ptype_key from the marc21_physical_characteristic_type_map (cmpctm)
alongside the label in the physical characteristics wizard

Signed-off-by: a. bellenir <ab@grpl.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#741788: install the MARC stream importer better
Galen Charlton [Wed, 22 Apr 2015 17:37:29 +0000 (17:37 +0000)]
LP#741788: install the MARC stream importer better

This patch ensures that marc_stream_importer.pl gets
installed in the Evergreen binary directory and that an
example configuration file gets installed in the appropriate
configuration directory (rather than, as in the past,
the Evergreen bindir).

This patch also causes `oils_header.pl`, which is used by
other command-line scripts, to be installed in the bin
directory
by default.

To test
-------
[1] Run a normal Evergreen installation. Verify that
    marc_stream_importer.pl is installed in /openils/bin
    (or the equivalent if you've chosen a non-default installation
    directory) and that marc_stream_importer.conf is
    installed in /openils/conf (or its equivalent)
[2] (optional) If you have access to OCLC Connexion, verify that you
    can run the MARC stream importer and use it to push records into
    Evergreen.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Josh Stompro <stomproj@larl.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jason Stephenson <jason@sigio.com>
8 months agoLP#1835458: Add install support for Debian 10 Buster
Ben Shum [Thu, 4 Jul 2019 19:53:35 +0000 (15:53 -0400)]
LP#1835458: Add install support for Debian 10 Buster

Signed-off-by: Ben Shum <ben@evergreener.net>
Signed-off-by: Jason Stephenson <jason@sigio.com>
8 months agoLP#1834208: Use X-Forwarded-For in example Apache configuration
Jason Stephenson [Tue, 2 Jul 2019 16:53:16 +0000 (12:53 -0400)]
LP#1834208: Use X-Forwarded-For in example Apache configuration

Change X-Real-IP to X-Fowarded-For in Open-ILS/examples/apache_24/
eg_vhost.conf.in to match changes in the OpenSRF example proxy
configurations for nginx and haproxy.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Ben Shum <ben@evergreener.net>
8 months agoLP1837067: Fixing unsubscribed Observable in Replace Barcodes dialog
Jane Sandberg [Thu, 18 Jul 2019 15:22:35 +0000 (08:22 -0700)]
LP1837067: Fixing unsubscribed Observable in Replace Barcodes dialog

To test:
1) In the experimental Angular staff catalog, open up a bib record.
2) Open the Holdings View tab.
3) Select several items.
4) Use the Actions for Selected Rows menu to Replace Barcodes
5) Change the first barcode to something recognizable. Click the
Replace Barcode button.
6) Note that the dialog opens again to ask you to replace the
barcode you just added.
7) Apply this patch.
8) Repeat steps 1-5.
9) Note that the dialog opens again to ask you to replace the next
barcode.

Also removes some unused imports, and consolidates two RxJS pipes that
were next to one another.

Bill's Additions:

Removes an unnecessary throwError which was called every time the dialog
completed.

NOTE: the source of the bug was that the Observable returned by
pcrud.search(...) was never subscribed-to, so it never fired.  Calling
.toPromise() forces the observable to execute.

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP#1823367 Make search bar area neutral
Dan Wells [Wed, 29 May 2019 19:17:31 +0000 (15:17 -0400)]
LP#1823367 Make search bar area neutral

Though the color had started to grow on me, let's go back to neutral for
the top seach area, for now.

It both makes sense and would be useful to have a secondary decorative
color, but if we go that route, we probably want just one for the whole
application, so we will want to tread carefully there.

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1823367 Add place to collect style guidelines
Dan Wells [Wed, 29 May 2019 17:32:49 +0000 (13:32 -0400)]
LP#1823367 Add place to collect style guidelines

Let's start a place to collect some of the reasoning behind EG2 style
choices.  This will help us be more consistent, and to recall why things
are as they are.

This commit does nothing groundbreaking, but rather tries mainly to
capture what is already being done.

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1823367 De-encapsulate holdings grid styles to fix row highlighting
Dan Wells [Wed, 29 May 2019 17:06:50 +0000 (13:06 -0400)]
LP#1823367 De-encapsulate holdings grid styles to fix row highlighting

By default, Angular will encapsulate CSS styles at the component level,
applying them only to the component who loads them.  The encapsulation
is helpful in some circumstances, a burden in others, and can be worked
around in at least two ways.

One way is the use of ':host /deep/' in the style declaration.  This
will in effect apply the style to all child components of the current
component's host, and is what we were doing here to style the grid rows
internal to the holdings component.  This worked, but the encapsulated
style is created in such a way that it overrides any global styles. In
addition, /deep/ is deprecated (although with no clear replacement).

A second way to work around CSS encapsulation is to simply disable it.
Right now, our grid styles are all at the global level, as encapsulation
is disabled in the grid.  Combined with the facts above, the end result
is that our new row styles always trump the grid highlight style, and
the rows no longer highlight.

There are a number of ways to work around this, but none seemed
obviously better than the others at this stage of development.  This
commit does both the simplest option and the one which matches the
existing grid practice.  That is, it disables CSS encapsulation for the
holdings component so that the holdings styles can coexist with, and be
overridden by, the grid styles (as needed in this case).

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1823367 Tone down org unit row coloring
Dan Wells [Wed, 29 May 2019 16:55:48 +0000 (12:55 -0400)]
LP#1823367 Tone down org unit row coloring

Some of the text was a little hard to see, and the overall effect of
the many colors, while attractive, was also a little distracting. In
addition, the lighter blue colors were not obviously different from
our standard selected-row-highlight blue.

This commit tries a different direction, using some mild green shades
based on the standard Evergreen green color base.  They are easy to
read and still accomplish the overall goal of bringing out the org
units (a little) and the call numbers (a little more).

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP#1777207: teach egGrid how to prepend rows more efficiently
Galen Charlton [Wed, 3 Jul 2019 21:53:01 +0000 (17:53 -0400)]
LP#1777207: teach egGrid how to prepend rows more efficiently

The checkin and checkout grids in the AngularJS client have
been doing full grid refreshes when adding a checkin or
checkout to their respective grids. While this does not
result in re-fetching data for the loans that were already
processed, as more entries get added to the grid the time
it takes to do a full digest of the grid contents during a
egGrid.collect() (which empties the list of displayed rows,
then refills it), gets progressively longer. Grids that have
only ~40 entries have been observed to take several seconds
purely on the AngularJS rendering phase.

This patch teaches egGrid a new prepend() method that
takes the first element from the underlying data source and
unshifts it onto the list of displayed grid rows, saving much
rendering time. The prepend() method will also force the
grid offset back to 0 if it isn't already. Note that if
an item that would be added via prepend() might duplicate an
existing row entry, prepend() will do a full collect() instead.

If the data source has sort options set, the prepend() will
remove them. For arrayNotifier-based data sources, as are used
in the checkin and checkout grids, this means that if the user
sorts the contents of the grid, then does a circ transaction,
the new transaction will still appear at the top of the list.
Due to the way arrayNotifier currently works, the remaining
entries will retain their previous ordering.

As an implementation note, prepend() is likely going to work
/only/ for arrayNotifier grid data sources.

To test
-------
[1] In the checkin grid, check in a large number of items.
    Note that the time it takes to each each item gets
    progressively longer.
[2] Apply the patch and repeat step 1. This time, the time
    for each checkin should not significantly vary.
[3] Verify that column sorting works as expected.
[4] Upon sorting the grid, do more checkins and note that
    the new transactions show up at the top.
[5] Verify that the checkout grid continues to behave as expected.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Dan Wells <dbw2@calvin.edu>
8 months agoLP#1777207: have eg-grid generate DOM nodes only for visible columns
Galen Charlton [Tue, 9 Jul 2019 18:43:18 +0000 (14:43 -0400)]
LP#1777207: have eg-grid generate DOM nodes only for visible columns

This patch changes an ng-show to an ng-if to generate DOM nodes
for grid cells only for visible columns. Prior to this patch, all
grid cells were generated, but the ones that corresponded to hidden
columns would simply be set as hidden.

By not generating the cells unless they're meant to be visible, grid
refreshes for wide grids (like the checkin table) render much more
quickly for a couple reasons:

- simply that there are fewer DOM nodes to process
- probably more importantly, fewer AngularJS watches get
  created

To test
-------
[1] In the checkin grid, check in a large number of items, then
    observe/profile timing as you change the number of visible rows.
[2] Apply the patch and repeat step 1. This time, the grid
    refreshe should be measurably (and visibly) faster.
[3] Test other AngularJS grids and verify that grid display and
    grid actions are normal.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Dan Wells <dbw2@calvin.edu>
8 months agoLP1828840: Option to hide grid save settings button in angular grid
Jane Sandberg [Sun, 26 May 2019 01:46:03 +0000 (18:46 -0700)]
LP1828840: Option to hide grid save settings button in angular grid

To test:

1) Apply this commit.
2) Create an eg-grid in the Angular staff client without a persistKey
attribute (or use the one in the sandbox).
3) Compile the client and open the grid in your browser.  Open the
column picker menu.  Note that the Save button does not display.
4) Add an arbitrary value to the persistKey attribute.
5) Repeat step 3.  Note that the Save button does display.
6) Change the value of the persistKey attribute to "disabled".
7) Repeat step 3.  Note that the Save button does not display.

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP1835990: remove i18n inside i18n element
Jane Sandberg [Wed, 10 Jul 2019 04:33:41 +0000 (21:33 -0700)]
LP1835990: remove i18n inside i18n element

Angular doesn't allow an i18n element within another i18n element.  This
commit allows xi18n to run successfully again.

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP1830432 Org family renders checkboxes horizontally
Bill Erickson [Tue, 9 Jul 2019 15:46:02 +0000 (11:46 -0400)]
LP1830432 Org family renders checkboxes horizontally

Consistent with the original layout of the org-select + checkboxes,
render the org family selector with checkboxes stacked vertically
along the right of the selector instead of below it.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP1830432: Use a stub callback with registerOnTouched
Jane Sandberg [Mon, 8 Jul 2019 14:03:50 +0000 (07:03 -0700)]
LP1830432: Use a stub callback with registerOnTouched

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP1830432 Uniqify reported org IDs / sandbox tweaks
Bill Erickson [Fri, 5 Jul 2019 15:18:59 +0000 (11:18 -0400)]
LP1830432 Uniqify reported org IDs / sandbox tweaks

Err on the side of caution and ensure the org family selector always
reports a unique list of org unit IDs.

Sandbox language tweaks.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
8 months agoLP1830432: Make sure that unit tests have an org unit selected
Jane Sandberg [Wed, 3 Jul 2019 16:46:04 +0000 (09:46 -0700)]
LP1830432: Make sure that unit tests have an org unit selected

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
8 months agoLP1830432: Make the org-family-select reusable
Jane Sandberg [Sun, 23 Jun 2019 17:22:20 +0000 (10:22 -0700)]
LP1830432: Make the org-family-select reusable

This commit removes Bill Erickson's automagic org unit select with
+Ancestors and +Descendants checkboxes from the admin-page component,
and gives it a component of its own, called <eg-org-family-select>.

This commit also makes it compatible with [(ngModel)], reactive forms,
and any custom Angular validators you might want to throw at it.
Examples of all three are available in the sandbox.

Also includes some component tests.

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
9 months agoForward-port 3.3.2 upgrade script
Dan Wells [Wed, 3 Jul 2019 15:49:47 +0000 (11:49 -0400)]
Forward-port 3.3.2 upgrade script

Signed-off-by: Dan Wells <dbw2@calvin.edu>
9 months agoForward-port 3.2.7 upgrade script
Dan Wells [Wed, 3 Jul 2019 15:47:51 +0000 (11:47 -0400)]
Forward-port 3.2.7 upgrade script

Signed-off-by: Dan Wells <dbw2@calvin.edu>
9 months agoForward-port 3.1.13 upgrade script
Dan Wells [Wed, 3 Jul 2019 15:33:10 +0000 (11:33 -0400)]
Forward-port 3.1.13 upgrade script

Signed-off-by: Dan Wells <dbw2@calvin.edu>
9 months agoLP#1830394: remove console noise from the holdings editor
Galen Charlton [Fri, 24 May 2019 15:06:04 +0000 (11:06 -0400)]
LP#1830394: remove console noise from the holdings editor

This patch removes browser console noise that occurs (among other
places) when moving a working item to the completed list in
the holdings editor

TypeError: "$scope.working.MultiMap[keys[i]] is undefined"
    hasMulti https://evergreen.example.org/js/ui/default/staff/cat/volcopy/app.js:1203
    ...

To test
-------
[1] Open the holdings editor to add or edit an item, then open the
    browser debug console.
[2] Make a change and move the item from working to complete. Note
    that the error message above shows up repeated in the
    console log.
[3] Apply the patch and repeat steps 1 and 2. This time, the errors
    should not appear.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Kyle Huckins <khuckins@catalyte.io>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
9 months agoDocs: Revise 3.3.2 bugfix release notes
Dan Wells [Fri, 28 Jun 2019 19:59:17 +0000 (15:59 -0400)]
Docs: Revise 3.3.2 bugfix release notes

Signed-off-by: Dan Wells <dbw2@calvin.edu>
9 months agoLP#1831781: tweaks to eg-help-popover
Galen Charlton [Mon, 17 Jun 2019 16:32:05 +0000 (12:32 -0400)]
LP#1831781: tweaks to eg-help-popover

- Wrap the image in a button; this removes the need for setting
  tabindex and makes the cursor display as a pointer when it
  is over the popover.
- Add aria-label attributes
- add some usage comments

Thanks to Jane Sandberg for the feedback that inspired this patch.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoLP#1831781: add eg-help-popover Angular component
Cesar Velez [Wed, 6 Mar 2019 23:06:57 +0000 (18:06 -0500)]
LP#1831781: add eg-help-popover Angular component

Usage:

<eg-help-popover helpLink="https://youtu.be/dQw4w9WgXcQ"
 helptext="Helpful msg. Optional link."></eg-help-popover>

Additional placement attributes accepted. Basically wraps
ng-bootstrap's
https://ng-bootstrap.github.io/#/components/popover/examples#basic

To test
-------
[1] Go to the Angular sandbox page (/eg2/en-US/staff/sandbox) and
    verify functioning of the popovers, which display question marks.

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System
Signed-off-by: Cesar Velez <cesar.velez@equinoxinitiative.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoCorrect False Positive on Offline Test
Jason Boyer [Fri, 28 Jun 2019 11:42:40 +0000 (07:42 -0400)]
Correct False Positive on Offline Test

Now that we have filenames with hashes in them
the likelyhood of finding the numbers 4, 0, and 4
not as an http status are much higher, leading to
a false negative on tests that look at the http
status code. Looking for the string ' 404 ' narrows
the search to actual 404 errors (at least until we
have a file that's exactly 404 bytes long in the
offline interface).

Signed-off-by: Jason Boyer <JBoyer@library.in.gov>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
9 months agolp1735835 Transfer Bucket Contents to Pending
Kyle Huckins [Mon, 20 May 2019 17:54:00 +0000 (17:54 +0000)]
lp1735835 Transfer Bucket Contents to Pending

- Add new option in Copy/Record buckets to transfer select
items to Pending Copy/Records.

Signed-off-by: Kyle Huckins <khuckins@catalyte.io>
modified:   Open-ILS/src/templates/staff/cat/bucket/copy/t_view.tt2
modified:   Open-ILS/src/templates/staff/cat/bucket/record/t_view.tt2
modified:   Open-ILS/web/js/ui/default/staff/cat/bucket/copy/app.js
modified:   Open-ILS/web/js/ui/default/staff/cat/bucket/record/app.js

Signed-off-by: Bill Erickson <berickxx@gmail.com>
9 months agoLP#1759343 Clean up data seed values
Dan Wells [Fri, 21 Jun 2019 15:36:44 +0000 (11:36 -0400)]
LP#1759343 Clean up data seed values

1) Add missing translation wrapper for new annotatepayment setting.

2) While we are at it, try to stem the proliferation of workstation
setting INSERT chunks.  (More could be done here...)

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
9 months agoLP#1759343 Fix annotate payment setting name
Dan Wells [Fri, 21 Jun 2019 15:16:59 +0000 (11:16 -0400)]
LP#1759343 Fix annotate payment setting name

This setting was added to the database with the 'eg.' prefix, but in
the code it was not used.  The end effect was that the setting likely
worked, but was not saved in the way expected.

This makes the setting name in the code match the DB.

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
9 months agoLP#1833080: have eg-bool recognize IDL bool string values
Galen Charlton [Mon, 17 Jun 2019 14:46:14 +0000 (10:46 -0400)]
LP#1833080: have eg-bool recognize IDL bool string values

This patch updates eg-bool so that it can format both
true Boolean and IDL bool string values (i.e., 't' or 'f'). Prior
to this patch, IDL bool values would always be rendered as 'Yes'.

This patch relaxes the type restriction on the value setter
and getter; unfortunately, there's no way to overload the
setter or making it accept (say) boolean|string.A

This patch also supplies some unit sets.

To test
-------
[1] View an Angular grid that has Boolean fields. The Copy
    Status server admin page is a good one.
[2] Note that the boolean values are all rendered as "Yes".
[3] Apply the patch and repeat step 1. This time, false
    values should be displayed as "No".
[4] Verify that 'npm run test' for the Angular app passes.

Sponsored-by: PaILS
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
9 months agoLP1823041 Confirm dialog returns true/false repairs
Bill Erickson [Wed, 19 Jun 2019 20:41:26 +0000 (16:41 -0400)]
LP1823041 Confirm dialog returns true/false repairs

The new Observable-driven confirm dialogs return true or false depending
on the user response (or nothing if dismissed), so the calling code needs
to verify the user confirmed the request before continuing.

Removed an unused confirm dialog import for clarity.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoLP1823041 Observable dialogs repairs and cleanup
Bill Erickson [Wed, 19 Jun 2019 20:25:51 +0000 (16:25 -0400)]
LP1823041 Observable dialogs repairs and cleanup

Fixes a few instances where dialog.open() calls did not return
Observables.

Replace a number of calls to the now deprecated dialog.dismiss() with
calls to dialog.close().

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoLP1823041 Remove unintentially merged code blocks
Bill Erickson [Wed, 19 Jun 2019 20:14:39 +0000 (16:14 -0400)]
LP1823041 Remove unintentially merged code blocks

A chunk of Angular code which was removed before merging this LP was
added back during the rebase/merge process.  This removes the errant
code.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoLP1823041: Converting new dialogs to observables
Jane Sandberg [Wed, 19 Jun 2019 17:17:40 +0000 (10:17 -0700)]
LP1823041: Converting new dialogs to observables

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
9 months agoLP1823041 Angular dialogs return observables
Bill Erickson [Wed, 3 Apr 2019 16:14:52 +0000 (12:14 -0400)]
LP1823041 Angular dialogs return observables

Dialog.open() now returns an observable to the caller.  This allows
dialogs to pass 0 or more success events, error events, and close events
each as descrete actions to the caller.

Existing dialogs are updated to expect an Observable response to
.open().

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoDocs: 3.3.2 release notes
Jane Sandberg [Wed, 19 Jun 2019 13:49:35 +0000 (06:49 -0700)]
Docs: 3.3.2 release notes

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoDocs: Release notes for 3.2.7
Jane Sandberg [Wed, 19 Jun 2019 13:44:58 +0000 (06:44 -0700)]
Docs: Release notes for 3.2.7

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoDocs: 3.1.13 release notes
Jane Sandberg [Wed, 19 Jun 2019 13:31:26 +0000 (06:31 -0700)]
Docs: 3.1.13 release notes

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agolp1770217 Items Out count shouldn't increment on renew
Mike Risher [Mon, 10 Jun 2019 18:11:38 +0000 (11:11 -0700)]
lp1770217 Items Out count shouldn't increment on renew

Determine if this item is currently out to the patron and is being
checked out again.  If so, be sure not to increment "Items Out" count.

Signed-off-by: Mike Risher <mrisher@catalyte.io>
Changes to be committed:
modified:   web/js/ui/default/staff/circ/patron/checkout.js
modified:   web/js/ui/default/staff/circ/services/circ.js

Signed-off-by: Bill Erickson <berickxx@gmail.com>
9 months agoLP1803787 (follow-up) removing unnecessary arguments
Jane Sandberg [Mon, 10 Jun 2019 00:46:15 +0000 (17:46 -0700)]
LP1803787 (follow-up) removing unnecessary arguments

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
9 months agoLP1803787 Migrate grid action/button click handlers; lint
Bill Erickson [Fri, 31 May 2019 15:47:03 +0000 (11:47 -0400)]
LP1803787 Migrate grid action/button click handlers; lint

Migrate the basic admin page and sandbox grids to use the click handlers
for grid toolbar buttons and actions, so the actions may be performed
against class methods instead of anonymous functions.

Minor lint repairs.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoLP1803787 Grid actions menu tabindex
Bill Erickson [Fri, 31 May 2019 15:45:52 +0000 (11:45 -0400)]
LP1803787 Grid actions menu tabindex

Allow the browser to focus the actions menu entries on tab so 'Enter'
action will not inadvertantly fire the row activate handler as well.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
9 months agoLP1803787: Add keyboard support (Shift+F10)
Jane Sandberg [Fri, 17 May 2019 19:31:56 +0000 (12:31 -0700)]
LP1803787: Add keyboard support (Shift+F10)

This allows a user to set focus to a row using a checkbox, then
press the standard keyboard shortcut to open the row context menu.

This commit sets the Shift+F10 keyboard combination to fire the
contextmenu javascript event throughout the Angular staff client, so
other interfaces that need to override the browser's context menu should
be able to respond to Shift+F10.

To test:

1) Open an eg2 grid interface (Server Administration -> Authority
Thesaurus is a good one).
2) Use the tab key to set focus onto the checkbox for one of the rows.
3) Note that pressing Shift + F10 opens the browser's context menu.
4) Apply this commit
5) Repeat steps 1+2
6) Press Shift + F10.
7) Note that the context menu opens, and that you can use Tab and
Shift+Tab to move through the various actions.
8) Note that you can press the Esc key to exit the context menu

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
9 months agoLP1803787 Grid toolbar actions menu component; cleanup
Bill Erickson [Thu, 9 May 2019 15:50:19 +0000 (11:50 -0400)]
LP1803787 Grid toolbar actions menu component; cleanup

Moves the guts of the grid toolbar actions menu (the buttons) to a
dedicated component that can be shared by both the actions drop-down
menu and the actions popover.  This adds support for honoring
disableOnRow for the popover actions. And avoids duplication.

Adds a sandbox example of using the toolbar action click event and
divider.

Some minor code cleanup/consistency changes.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>