EDI Invoicing

Includes patch for edi4r to make invoice parsing possible.

Also adds OpenILS::Utils::LooseEDI module.  This doesn't try to do the
validation and other helpful things that Business::EDI aims to do, but it
does let us get up and running relatively quickly at getting data from EDI
invoices if we know what we're looking for.

[Amended to add bits about tax, plus release note blurb.]

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Signed-off-by: Bill Erickson <berick@esilibrary.com>
ACQ lineitem summary moved to real DB view

This is allows us to create new IDL views based on the lineitem summary.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
EditPane.js API repairs

By default, don't throw an exception from EditPane.getFieldValue when a
field is required and the value is null.  Otherwise, external code is
unable to use this method for inspecting the pane.  Make checkRequired
an additional method flag.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
EditPane setFieldValue method

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
ACQ invoice inline lineitem search and add

The Invoice UI is how composed of two tabs, the main invoice tab and a new
Search tab.  The search tab consists of a subset of the Acquisitions unified
search interface.  The goal is to allow users to search for lineitems to
invoice.  Search results may be added directly to the growing invoice.  A
number of small usability features are included.

Features
~~~~~~~~

    * Option (default) to limit searches to invoiceable items.
        ** These are lineitems that are not cancelled, have at least one
           invoiceable copy, linked to a PO whose provider matches that of the
           current invoice, and are not already linked to the current invoice.

    * Search defaults to last-run search (on workstation).
    * New Lineitem Detail filter options
    * Sort searches by lineitem number (default) and title.
    * There is a new Expected Cost field which includes both the total invoiced
      cost plus the anticipated cost of lineitems as they are added.
    * New Price per Copy field
    * Lineitem count field
    * Show / Hide Invoice details button.  Details are displayed by default, but
      hidden when the user enters the search tab.  From there it remains hidden
      until manually shown (or a new invoice is opened).
    * A new "Save & Clear" button which saves the current invoice then clears
      the invoice display to create a new invoice.
    * Provider, shipper, and receiver fields are auto-populated from the
      first-added invoice data (when not already set).
    * Totals are now read-only, since they are derived from existing data (and
      are informational only).

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
ACQ invoice formatting improvements

Prevent # invoiced and # paid inputs from wrapping.  Also, make the text
boxes a little smaller to reduce horizontal space requirements.  It's
still possible to enter any value, but only the 4 least significant
digits are visible.  Since it's not common to invoice 10k+ copies of the
same item, this seems like a fair trade off.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
ACQ unified search submit on enter (for real)

This replaces the old-style submit on enter handler which was based
attaching key handlers to the dijit domNode, which does not work for
filtering selects (i.e. more complicated dijits) w/ the dijit-sanctioned
dojo.connect(..., 'onkeyup', ...), which works regardless.  This also
covers more form input elements which were overlooked with the original
submit-on-enter code.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Stamping upgrade script 0732

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Teach Fieldmapper how to turn FM objects into simple XML

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Fieldmapper toXML repairs and additions

1. Be sure the append the current element to the document in progress

2. Use the class hint instead of the fully qualified class_name (e.g.
Fielmapper::actor::user) to avoid XML errors:

namespace error : Failed to parse QName 'Fieldmapper:'

3. Added support for additional options including "no_virt" which tells
the routine to skip all virtual fields and "skip_fields" to support
leaving specific fields out of the output.  The main use case for skip
fields is au => ['passwd'], but other examples might include large
fields like bre => ['marc'].

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Collections user balance API / batch file output

New API open-ils.collections.user_balance_summary.generate,
which generates summary information on patron balance owed for all open
transactions that occurred at the requested location.  Optional flag
supports including per-xact summary information as well.  The summary
information is written to an XML file and placed in a protected, shared
web directory for download after the file has been generated.

During creation, the output file will have a .tmp suffix, allowing
clients to poll for file completion.

Includes a new opensrf.xml app_setting for open-ils.collections to
specifiy the batch file directory as well as a sample Apache config in
eg_vhost.conf

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Whitespace fixes in Collections.pm

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Feed JEDI to the EDI translator to get EDI, and vice versa.

Run this script as the opensrf user.

INPUT_IS_EDI=1 perl test_edi_translator.pl < blob.edi

-or-

perl test_edi_translator.pl < blob.jedi

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Added debug-only option to edi_pusher.pl

Option causes the final EDI to be printed to STDOUT, but does not
populate any data in the DB nor does it FTP the file to the vendor.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
EDI ORDER template, now with copies

Adds a new "copies" structure to the stock JEDI ORDER template.  Copies
are ultimately mapped into one or more GIR segments in the outbound EDI.
This commit only adds the change to the stock template (seed data).  It
also adds entries to the environment for the stock template and existing
template 23 via upgrade script (to expedite local template editing).

With the current template, GIR segments look like so:

GIR+001+8:LCO+TESTFUND2:LFN+SYS1-BR1:LLO+FIC ROW 456:LSM+Stacks:LSQ'
GIR+002+9:LCO+TESTFUND2:LFN+SYS1-BR1:LLO+FIC ROW 456:LSM+Stacks:LSQ'
GIR+003+10:LCO+TESTFUND2:LFN+SYS1-BR1:LLO+FIC ROW 456:LSM+Stacks:LSQ'
GIR+004+11:LCO+TESTFUND2:LFN+SYS1-BR1:LLO+FIC ROW 456:LSM+Stacks:LSQ'
GIR+005+12:LCO+TESTFUND2:LFN+SYS1-BR1:LLO+FIC ROW 456:LSM+Stacks:LSQ'
GIR+006+13:LCO+TESTFUND2:LFN+SYS1-BR2:LLO+FIC ROW 456:LSM+Young Adult:LSQ'
GIR+007+14:LCO+TESTFUND2:LFN+SYS1-BR2:LLO+FIC ROW 456:LSM+Young Adult:LSQ'
GIR+008+15:LCO+TESTFUND2:LFN+SYS1-BR2:LLO+FIC ROW 456:LSM+Young Adult:LSQ'

LQT / quantity is also supported.

The current implementation is meant to cover all possible fields so that
users can remove/alter items on a vendor by vendor basis as needed.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Stamping upgrade script for JEDI with Copies

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Rip modal_xulG_stack out, replace with openDialog

This converts the util/window.js open function to a wrapper around the
openDialog function and passes xulG in that way, as well as teaches
global_util.js to look for it having been passed in via the arguments
parameter on window.

The non-modal "push it into place" is still done as well, in case some
window isn't using global_util.js and needs xulG.

Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Operator Change Fun

Allow for temporary, staff, and permanent operator changes.

Temporary uses a temp authtoken for a few minute timeout.

Staff uses a normal staff login authtoken for a multi-hour timeout.

Permanent is a staff change that disregards the previous login instead of
allowing it to be recovered by using the menu item again.

I also fixed things up so later timeouts can re-use the previous duration
and fixed up some title bar issues:

1 - Login screen shows version again (needed a document in the title set)
2 - Menu windows don't forget the server name
3 - Menu windows keep the same number for their lifetime

Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
Signed-off-by: Bill Erickson <berick@esilibrary.com>
TPac: Hide place hold links when not holdable

The only check done is on the holdable flags:
Copy
Status
Location

Hold rules themselves are not checked.

Note that place hold links are shown either way when you can have the
PLACE_UNFILLABLE_HOLD permission and are logged into the staff client.

Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
Signed-off-by: Dan Scott <dscott@laurentian.ca>
Block "Place Hold" link in TPAC if item is available

Suppress the display of the "Place Hold" link based on whether an item
is available. This is set as a preference in config.tt2. Some sites
may want the ability to place holds regardless of availability.

Signed-off-by: Art Rhyno <art632000@yahoo.ca>
Signed-off-by: Dan Scott <dscott@laurentian.ca>

Conflicts:
	Open-ILS/src/templates/opac/parts/record/summary.tt2
	Open-ILS/src/templates/opac/parts/result/table.tt2

Signed-off-by: Dan Scott <dscott@laurentian.ca>