Dan Wells [Fri, 14 Dec 2012 19:02:22 +0000 (14:02 -0500)]
Add new option for max/min lost item pricing
In addition to a 'default' price when price is missing or zero,
we can also accommodate a range of prices by saying it should be
at least 'X' and not more than 'Y'. This also allows you to
effectively set a fixed price for all lost items by setting min
and max to an equal amount.
Signed-off-by: Dan Wells <dbw2@calvin.edu> Signed-off-by: Jeff Godin <jgodin@tadl.org>
Remington Steed [Wed, 27 Nov 2013 14:55:35 +0000 (09:55 -0500)]
LP#842991 Reports needs to error when deleting fails
When attempting to delete a report template, the reports interface
incorrectly shows "Action Succeeded" even when it partly fails. If the
user performing the delete does not own all the dependent reports and
outputs, then the perl function returns 1 to indicate that some were
deleted, but not all. However, the javascript that calls that function
does not check for a return value of 1. This commit adds that check, and
also improves the formatting of the related error messages.
Signed-off-by: Remington Steed <rjs7@calvin.edu> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Serials: improve routing slips per Dan Wells' suggestions on LP #1229349
- Don't repeat the same address for the same user
- Label mailing vs. billing
- Border to separate mailing and billing addresses
- [Also] move some inline styles to a CSS file
Dan Scott [Mon, 6 Jan 2014 19:33:04 +0000 (14:33 -0500)]
Copy details link to Evergreen library page by default
Add a new library setting, 'lib.prefer_external_url', to force library names in
copy details pages to link to their associated 'lib.info_url' setting rather
than the Evergreen-generated page. In the absence of a 'lib.info_url' setting,
the name will fall back to being linked to the Evergreen-generated page.
Per discussion with Ben Shum and Kathy Lussier.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Dan Scott [Mon, 6 Jan 2014 17:22:28 +0000 (12:22 -0500)]
Use the 'format.time' OUS to format library hours
Sparked by a concern that Ben Shum had over the display of library hours in 24
hour format, I eventually figured out that we could use the Template::Toolkit
Date module to format the times according to library preferences. And given
that we already have a format.time OUS, let's use it.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Dan Scott [Mon, 28 Oct 2013 15:26:55 +0000 (11:26 -0400)]
TPAC Library schema info - add some caching
Rather than hitting the database every time, cache our requests for a
period of time. It's unlikely that hours of operation or addresses are
going to change very often...
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Dan Scott [Tue, 17 Dec 2013 21:29:35 +0000 (16:29 -0500)]
Link from copies to library info page
In the absence of a specific lib.info_url org unit setting, link to the library
info page.
If we _do_ have a lib.info_url org unit setting, link from the library info
page to to the external web site.
Rather than wrapping everything in the table cell as the seller, focus
on the <a> and give it an explicit Library typeof attribute; then we can
offer up the name of the library as the name attribute, should the
crawler be too lazy to follow the link.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Dan Scott [Sat, 26 Oct 2013 21:32:22 +0000 (17:32 -0400)]
First inklings of schema.org support for library pages
Adds a TPAC page where the information for a given library can be publicly
exposed; in addition, that information is marked up with schema.org structured
data so that, for example, a search engine can offer up the hours of operation
and contact information for a given branch right on the search results page.
We give the content-wrapper a main-content for indentation, to be consistent
with other pages in the TPAC.
We also add the cargo-cult common-full-pad div for a bottom margin.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Steven Callender [Thu, 10 Oct 2013 20:09:06 +0000 (16:09 -0400)]
Fixed title/author display at checkout for non-pre-cat items.
Fixed a display problem on checkout where items that were formely pre-cats
were still displaying the pre-cat data. Now it will make sure the item is
still a pre-cat before using the dummy data.
Signed-off-by: Steven Callender <stevecallender@esilibrary.com> Signed-off-by: Ben Shum <bshum@biblio.org>
Dan Scott [Thu, 16 Jan 2014 03:33:25 +0000 (22:33 -0500)]
TPAC: Display authors using inline-block
Rather than letting author credits wrap willy-nilly, use inline-block mode so
that each line will begin with a new author. Devices with constrained screens
in particular benefit from this, as the list of authors is much easier to scan,
and wider screens can still fit multiple authors on a single line.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Ben Shum <bshum@biblio.org>
Dan Scott [Wed, 15 Jan 2014 20:25:02 +0000 (15:25 -0500)]
TPAC: Use indexed subfields only in author search links
Addresses LP# 1267231 in which we found that the titles of works in the added
author field (such as subfield t) were showing up in the link ahead of the
author's birth and death date (if applicable). Now we reserve the link for
only the indexed author subfields (depends on whether the name is personal,
corporate, or conference, but generally subfields a/b/c/d/e/n/q), then the
extra subfields go after the name + dates, then we finally put the relationship
into the parentheses after everything else.
We also simplify the markup so that each name is contained in a single <span
class="rdetail_author_div"> element to make it easier to control the layout.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Ben Shum <bshum@biblio.org>
Serials: Batch Receive interface Copy Location widget was inert
Choosing a value from the Copy Location widget wasn't working. You'd
get a default copy location (or the one supplied by the Receive Unit
Copy Template) no matter what you set that control too.
This is fixed. One does not read from XUL menulist element by using its
'value' property.
LP#882586: In Serial Control View, show copy templates owned by ancestors
When creating/editing distributions, dropdowns for Receive Unit Template
and Bind Unit Template now show copy templates owned not only at the
distribution's holding lib, but at any of the holding lib's ancestors.
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Dan Scott [Mon, 20 Jan 2014 03:24:07 +0000 (22:24 -0500)]
Create 008 - take only the first field/subfield combo
In the event that there were multiple $a subfields in, say, 044, the create 008
function could spew raw XML into the 008 field. Avoid that by taking the primary
instance.
Pasi Kallinen [Thu, 18 Jul 2013 18:00:31 +0000 (21:00 +0300)]
Allow generating fixed data in control field 008 quickly
Language and country codes come from 041a and 044a,
Date1 comes from 260c, and the record date is set to current day.
Signed-off-by: Pasi Kallinen <pasi.kallinen@pttk.fi> Signed-off-by: Dan Scott <dscott@laurentian.ca>
Conflicts:
Open-ILS/xul/staff_client/server/cat/marcedit.js
Galen Charlton [Fri, 4 Oct 2013 21:44:56 +0000 (14:44 -0700)]
LP#1235474: fix failure of authority browse context menu to render
This patch fixes a situation where if an authority record that would
be brought up by the authority browse context menu in the MARC editor
lacks an 003 field, the context menu would not be rendered all, meaning
that the default context menu (e.g., cut/copy/paste/etc.) would be
displayed instead.
Signed-off-by: Galen Charlton <gmc@esilibrary.com> Signed-off-by: Dan Scott <dscott@laurentian.ca>
Elliot Voris [Mon, 9 Dec 2013 18:57:20 +0000 (12:57 -0600)]
LP104785: Selfcheck needs to be run with HTTPS
Redirect attempts to connect to the self-check via HTTP to the more secure
HTTPS instead. Addresses this bug reported in launchpad:
https://bugs.launchpad.net/evergreen/+bug/1047485
Based on work for Apache 2.2 by Michael Peters <mrpeters@library.in.gov>,
updated and applied to 2.4 by Elliot Voris.
Signed-off-by: Elliot Voris <evoris@slcconline.edu> Signed-off-by: Dan Scott <dscott@laurentian.ca>
Dan Scott [Sun, 19 Jan 2014 16:30:57 +0000 (11:30 -0500)]
Fedora: Net::SSLeay 1.55 is too new for Net::HTTPS::Any
Although Net::HTTPS:Any wants Net:SSLeay 1.30 or later, 1.55 is apparently too
late, or something. The alternative is Crypt::SSLeay, which seems to work, so
let's go with that.
Pasi Kallinen [Fri, 28 Jun 2013 05:47:11 +0000 (08:47 +0300)]
Replace deprecated javascript escape() with encodeURIComponent()
Signed-off-by: Pasi Kallinen <pasi.kallinen@pttk.fi> Signed-off-by: Dan Scott <dscott@laurentian.ca>
Conflicts:
Open-ILS/xul/staff_client/chrome/content/auth/controller.js
Open-ILS/xul/staff_client/chrome/content/util/error.js
Open-ILS/xul/staff_client/chrome/content/util/print.js
Open-ILS/xul/staff_client/server/admin/offline_manage_xacts.js
Open-ILS/xul/staff_client/server/circ/print_list_template_editor.js
Mike Rylander [Thu, 16 Jan 2014 18:58:12 +0000 (13:58 -0500)]
Fix proximity adjustment calculator
The canonical use case for proximity adjustment is to use it broadly
to effect the local proximity of items within a particular area, in
a like manner, across many parts of the org tree. However, in cases
where it is lightly used, or used with non-overlapping criteria columns,
there are cases where the adjustment will spread beyond its intended
range of influence.
The changes here create a much stricter and correct test for rule
matching, which will end in the correct choice of rules in all cases.
Signed-off-by: Mike Rylander <mrylander@gmail.com> Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com> Signed-off-by: Mike Rylander <mrylander@gmail.com>
In prereq installer, don't try to chown extracted files to original UID/GID
As this Makefile is designed to be used by a make process running as
root, this will avoid problems on some systems when tar extracts
files and tries to give them the same UID/GID as they have in their
archives, but those accounts don't exist on the local system.
e.g, libdbi has files set 1000/1000. On most systems, there's a user
and a group with these IDs, but there can be systems where nothing
uses those IDs, and where tar fails with e.g. 'tar: libdbi-0.8.3:
Cannot change ownership to uid 1000, gid 1000: Invalid argument'
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com> Signed-off-by: Mike Rylander <mrylander@gmail.com>
Galen Charlton [Tue, 14 Jan 2014 18:30:48 +0000 (13:30 -0500)]
LP#1234201: fix menu item to display patron requests (if summary is horizontal)
This patch adds a missing command element to the horizontal
patron summary display so that the 'Acquisition Requests' menu
item will work.
To test:
[1] Set the Patron circulation summary is horizontal library setting
to true.
[2] Retrieve a patron and try using the Acquisition Requests menu
item. It will do nothing.
[3] Apply the patch and clear cache in the staff client.
[4] Repeat step 2. This time, the Acquisitions Request menu item
should bring up the list of the patron's requests.
Signed-off-by: Galen Charlton <gmc@esilibrary.com> Signed-off-by: Srey Seng <sreyseng@gmail.com>
Dan Scott [Fri, 25 Oct 2013 17:54:35 +0000 (13:54 -0400)]
Add pgTAP test for normalized MARC records
Specifically, we're concerned about ensuring that any changes related to
the fix for Encode (requiring the removal of the effectively useless but
now erroring decode_utf8()) do not inadvertently change the content of
the MARC records on ingest. Because we wouldn't want to have to reingest
everything to normalize search, etc.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Dan Scott [Mon, 21 Oct 2013 15:58:06 +0000 (11:58 -0400)]
Encode.pm change to the UTF8 flag
In the past, decode_utf8() silently ignored attempts to decode data
with the UTF8 flag on. However, Encode.pm changed around 2.53 and
resulted in wide-character errors preventing the likes of
--load-all-sample from working.
Since our data should already be UTF8 when it hits these functions, we
should not be trying to decode it in the first place.
Signed-off-by: Dan Wells <dbw2@calvin.edu> Signed-off-by: Dan Scott <dscott@laurentian.ca>
Galen Charlton [Tue, 14 Jan 2014 16:00:38 +0000 (11:00 -0500)]
LP#1269042: prevent acq seach from building dropdown of every copy ID in the DB
This patch ensures that if a user sets a search field in the
acquisitions general search form to the line item details copy ID
(labeled "LID - Evergreen Copy ID"), the form presents a normal
input widget rather than trying to build a drop-down containing
every copy ID in the database. Except for very small databases,
the previous behavior would mean that an open-ils.pcrud backend
would eventually consume a great deal of memory trying to service
a request for all copies in the system.
Signed-off-by: Galen Charlton <gmc@esilibrary.com> Signed-off-by: Mike Rylander <mrylander@gmail.com>
Jeff Godin [Wed, 30 Oct 2013 19:29:24 +0000 (15:29 -0400)]
Treat empty username as invalid in user editor
There seems to be undesired interaction between the required
attribute and the isValid method on a dojo/dijit ValidationTextBox.
If both are set, isValid needs to check for an empty value,
otherwise the field is considered valid the moment it gains focus.
We don't want an empty username to be considered valid, because we
know that we will be unable to save the user.
We can work around this by teaching the isValid function to consider
an empty value as invalid.
Signed-off-by: Jeff Godin <jgodin@tadl.org> Signed-off-by: Melissa Ceraso <mceraso@biblio.org> Signed-off-by: Ben Shum <bshum@biblio.org>
Dan Scott [Thu, 9 Jan 2014 17:19:38 +0000 (12:19 -0500)]
Fedora needs Locale::Maketext::Lexicon too
Per commit 66c45b647, install Locale::Maketext::Lexicon on Fedora to satisfy
that dependency. How did _this_ one slip by so long! Thank heavens for
tests.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Dan Scott [Thu, 9 Jan 2014 03:39:57 +0000 (22:39 -0500)]
Repair the live_t regression tests
When we added more realistic hours of operation for some of the branches,
several of the live_t regression tests failed because they depended on the
default hours of operation for BR4. Rather than change the regression test,
just switch BR4 back to the default hours of operation and use BR1 as the
closed-on-weekends branch instead.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Bill Erickson <berick@esilibrary.com>
Srey Seng [Tue, 7 Jan 2014 22:30:49 +0000 (14:30 -0800)]
LP#1266937: Fix missing/incorrect regex for authority in Vandelay.pm
Add in missing "~" in function import_record_list_impl when
type is authority records. Also replace "auth" with "authority"
so that the generated values match up with functions in the
database.
Signed-off-by: Srey Seng <sreyseng@gmail.com> Signed-off-by: Bill Erickson <berick@esilibrary.com>
Chris Sharp [Wed, 8 Jan 2014 19:51:59 +0000 (14:51 -0500)]
fix pub date data type in reporter.classic_item_list
As noticed by Ben Shum in IRC, reporter.classic_item_list
had pub_date, a free text field, classified as "int". This
changes that to "text" to prevent errors.
Signed-off-by: Chris Sharp <csharp@georgialibraries.org> Signed-off-by: Ben Shum <bshum@biblio.org>
Dan Scott [Mon, 30 Dec 2013 06:47:19 +0000 (01:47 -0500)]
TPAC: Display public hold notes in user holds list
If a given hold has a note marked as public, and not marked for staff, then
display the note in the My Account -> Holds list. This enhancement also
includes sample notes for each hold, to include data that ensures that the TPAC
does not display any hold notes that are not marked public, or which are marked
for staff.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
TPAC: Get rid of all unneccessary uppercase and some bold
This gets rid of all places in the TPAC where CSS uses text-transform:
uppercase or capitalize. The former is bad for readability, and the
latter can only confuse users when strings might appear to be
capitalized differently in one context than another (esp. users'
personal names).
This mostly, but not exclusively, affects the My Account section.
Also, one wholly unused CSS class was removed altogether.
It also gets rid of some bold style that was applied too liberally to
the whole contents of tables.
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com> Signed-off-by: Dan Scott <dscott@laurentian.ca>
Dan Scott [Tue, 17 Dec 2013 17:02:56 +0000 (12:02 -0500)]
Add sample library addresses and hours of operation
Provide branch-level granularity of addresses and hours of operation, using
different addresses in some cases for mailing vs. billing vs. ILL vs. holds for
more realism.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Bill Erickson <berick@esilibrary.com> Signed-off-by: Ben Shum <bshum@biblio.org>
Dan Scott [Tue, 17 Dec 2013 15:16:32 +0000 (10:16 -0500)]
Move default actor.org_unit entries into sample data
The only actor.org_unit entry we absolutely require in the sample data is the
consortium, as many things are owned by it. Otherwise, we should treat the
libraries and associated settings such as addresses as sample data.
Signed-off-by: Dan Scott <dscott@laurentian.ca> Signed-off-by: Bill Erickson <berick@esilibrary.com> Signed-off-by: Ben Shum <bshum@biblio.org>
Remington Steed [Tue, 17 Dec 2013 16:17:25 +0000 (11:17 -0500)]
Docs: bug fixes in new files
This commit fixes a small bug in the new Action Triggers chapter and a
few small formatting bugs in the new subsection in the Holds Management
chapter. It also fixes a small wording typo in the Holds Management intro.
Steven Callender [Thu, 12 Dec 2013 20:13:57 +0000 (15:13 -0500)]
Updated the label on the desk renewal global setting.
Updated the label on the desk renewal global flag circ.desk_renewal.use_original_circ_lib
to properly explain the it's the workstation library that will not be used rather than the
user home library. The OPAC renewal uses the users home library and desk renewals use
the workstation library.
Signed-off-by: Steven Callender <stevecallender@esilibrary.com> Signed-off-by: Ben Shum <bshum@biblio.org>
Galen Charlton [Mon, 25 Nov 2013 18:05:21 +0000 (10:05 -0800)]
LP#1254816: prevent cases where a Google Book preview is not displayed
Due to quirks in how different parts of the Google Books API
processes ISBN searches, it is possible for a Google Books Preview
badge to get displayed, but when the user tries to display the preview,
the embedded preview does not get displayed.
This patch fixes the problem by grabbing the preview link from
the GB volumes search results, which in turn can be fed into the
Embedded Viewer initialization.
An ISBN that can be used to reproduce the problem is 9781937994198.
Before the patch, the badge is displayed but not the preview; after
the patch, both badge and preview should be displayed.
Signed-off-by: Galen Charlton <gmc@esilibrary.com> Signed-off-by: Mike Rylander <mrylander@gmail.com>
Remington Steed [Wed, 20 Nov 2013 14:40:10 +0000 (09:40 -0500)]
Revive and update Action Triggers docs for 2.5
This commit revives the missing Action Triggers docs section, last seen
in the 2.0 version of the docs. Also, several small corrections and
wording edits were made, as well as a few actual feature changes since
version 2.0. The most explicit of these feature changes is the addition
of a basic description for a new Event Definition field in 2.5: "Event
Repeatability Delay".
Steven Chan [Wed, 15 May 2013 21:30:15 +0000 (14:30 -0700)]
Fix LP1180140, View Holds not working for a serial with subscription and no issuances
A request is made to
open-ils.circ.holds.retrieve_all_from_title,
which is the function Circ/Holds.pm/all_rec_holds().
In the function, when checking for issuance holds, there is a missing @
to dereference the list of issuance IDs, so that the ahr table is search
with badly formed input, which results in returning an undefined list
instead of an empty list. The error will occur for any record with a
serial.subscription entry but with no related entries in
serial.issuance.
We also recode the initialization of the response object in order to
clarify its expected structure, a hash of array references.
Signed-off-by: Steven Chan <schan@sitka.bclibraries.ca> Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Angela Kilsdonk [Tue, 10 Dec 2013 19:30:28 +0000 (14:30 -0500)]
New documentation for 2.5
Documentation for:
-Z39.50 Search Enhancements
-Catalog Browse
-Alternative Hold Pick-up Location
-Marking Items Long Overdue
-Lost and Long Overdue Bill Colors
-Vandelay Item Load
Remington Steed [Thu, 21 Nov 2013 15:29:22 +0000 (10:29 -0500)]
Docs: integrate holds docs from EG 2.1
The small amount of Holds docs present in master seemed to fit well at
the end of the older Holds documentation, so this commit appends them
to the new holds.txt file, deletes the previous holds_management.txt file,
and makes the appropriate change to root.txt.
This commit also includes several small formatting improvements, wording
changes, and bug fixes.
Mike Rylander [Wed, 13 Nov 2013 23:15:21 +0000 (18:15 -0500)]
Fix boolean lists; Better atom regex; Caching
First, we didn't need to make $last_type local, and it broke explicit
grouping anyway. That's removed, and we now reset that (and a few more
like it) at calls to the top level parse() method. This introduces a
situation where a long list of booleans could cause query plan problems,
so we limit the plan depth to 40 (20 ||'d conditions).
Second, we are smarter about finding the boundary of atoms. Previous
to this commit, and curly brace could send the parser into a tailspin
from which it would not recover. Now we use alternation instead of
a character class, which is much safer with the default multi-character
float syntax specifier.
Third, as a catch-all, if we can't parse the remained of a query we
now simply say so (when in debug mode) and go away, instead of risking
an infinite loop. We do this via a final, unqualified "else" clause
in decompose().
Finally, instead of building 10+ regexp objects on each query parse,
cache them per QP subclass and reuse them.
Signed-off-by: Mike Rylander <mrylander@gmail.com> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Bill Erickson [Mon, 28 Oct 2013 14:24:37 +0000 (10:24 -0400)]
LP#1238015 hide patron credit summary when disabled
When the circ.disable_patron_credit / "Disable Patron Credit" org unit
setting is disabled, also hide the patron credit summary information in
the bills interface.
Signed-off-by: Bill Erickson <berick@esilibrary.com> Signed-off-by: Dan Wells <dbw2@calvin.edu>
Mike Rylander [Mon, 25 Nov 2013 15:14:08 +0000 (10:14 -0500)]
Re-apply the changes provided by 0802 for backport
Preserve record order of subfields for authority heading extraction
When extracting headings from authority records we currently read the
subfields of a tag in configuration order. We should, instead, read
them in record order, to preserve the desired sorting properties that
the cataloger has encoded in the record.
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Bill Erickson [Fri, 22 Nov 2013 19:55:26 +0000 (14:55 -0500)]
LP#1254146 gracefully handle custom trees sans entries
Avoid references to custom tree entries when no tree entries for a
custom tree exist. Prevents:
egweb: template error: undef error - Can't call method "org_unit" on an
undefined value at
/usr/local/share/perl/5.10.1/OpenILS/WWW/EGCatLoader/Util.pm line 185.\n
Signed-off-by: Bill Erickson <berick@esilibrary.com> Signed-off-by: Ben Shum <bshum@biblio.org>
Dan Wells [Thu, 14 Nov 2013 20:12:46 +0000 (15:12 -0500)]
Improve facet styling
1) Facets currently display very poorly when the number reaches 3-4
digits. Facet data is more or less a two column table, so let's style
it that way to make it more robust.
2) Rearrange some styles to reduce redundancy, and allow overflow
where possible.
3) Change the selected highlight to look a little better.
Signed-off-by: Dan Wells <dbw2@calvin.edu> Signed-off-by: Ben Shum <bshum@biblio.org>
Mike Rylander [Fri, 15 Nov 2013 21:40:36 +0000 (16:40 -0500)]
Enforce one-payment-per-xact-per-call
There is no legitimate reason for a transaction to receive more than
one payment per call to open-ils.circ open-ils.circ.money.payment,
but we have seen the staff client generate such a data structure. This
leads to seemingly duplicate payments, and is bad all around. So,
we will enforce the restriction by taking only the first payment per
xact in the list of payments.
Signed-off-by: Mike Rylander <mrylander@gmail.com> Signed-off-by: Bill Erickson <berick@esilibrary.com>