Acq: minor usability improvements to receiving copies from invoice
authorLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Wed, 2 Nov 2011 16:23:47 +0000 (12:23 -0400)
committerMike Rylander <mrylander@gmail.com>
Mon, 20 Feb 2012 19:27:28 +0000 (14:27 -0500)
1) Show an "X out of Y copies received" message near the top of the
display.

2) Provide a button to return to the primary interface for invoice view.

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>

Open-ILS/src/templates/acq/invoice/receive.tt2
Open-ILS/web/js/dojo/openils/acq/nls/acq.js
Open-ILS/web/js/ui/default/acq/invoice/receive.js

index 6a2abb9..f728a7b 100644 (file)
@@ -21,7 +21,9 @@
 <div>
     <p><big>[% ctx.page_title %]</big></p>
     <p><strong id="inv-header"></strong></p>
+    <p id="inv-copy-count-info"></p>
     <div id="non-empty">
+        <p>The remaining are listed below.</p>
         <p>
             <span id="set-list-mode">[ <a id="set-list-mode-link" href="javascript:void(0);">Use List Mode</a> ]</span>
             <span id="set-number-mode">[ <a id="set-number-mode-link" href="javascript:void(0);">Use Numeric Mode</a> ]</span>
@@ -57,6 +59,9 @@
     <div class="hidden" id="empty">
         This invoice has no more copies to receive.
     </div>
+    <p>
+        <button onclick="copy_table.back_to_invoice();">Return to Invoice</button>
+    </p>
     <div class="hidden">
         <div dojoType="openils.widget.ProgressDialog" jsId="progress_dialog"></div>
     </div>
index 9e29f0f..7d4ce58 100644 (file)
@@ -85,5 +85,6 @@
     "ADD_LI_TO_PO_BAD_LI_STATE" : "The selected lineitem is not in a state that can be added to a purchase order",
     "INVOICE_NUMBER": "Invoice #${0}",
     "COPIES_TO_RECEIVE": "Number of copies to receive: ",
-    "CREATE_PO_INVALID": "A purchase order must have an ordering agency and a provider."
+    "CREATE_PO_INVALID": "A purchase order must have an ordering agency and a provider.",
+    "INVOICE_COPY_COUNT_INFO": "Copies received on this invoice: ${0} out of ${1}."
 }
index 3930b52..d414676 100644 (file)
@@ -118,6 +118,24 @@ function ReceivableCopyTable() {
 //        return n > 0 ? n : 0;
     };
 
+    this._render_copy_count_info = function() {
+        dojo.byId("inv-copy-count-info").innerHTML =
+            dojo.string.substitute(
+                localeStrings.INVOICE_COPY_COUNT_INFO,
+                [this.copy_number_received, this.copy_number_total]
+            );
+    };
+
+    this._increment_copy_count_info = function(li) {
+        var all_uncanceled = li.lineitem_details().filter(
+            function(lid) { return !lid.cancel_reason(); }
+        );
+        this.copy_number_total += all_uncanceled.length;
+        this.copy_number_received += all_uncanceled.filter(
+            function(lid) { return Boolean(lid.recv_time()); }
+        ).length;
+    };
+
     this._add_lineitem_number_mode = function(details, li, preselect_count) {
         var tr = dojo.create("tr", null, this.tbody);
         var td = dojo.create("td", {
@@ -181,6 +199,10 @@ function ReceivableCopyTable() {
      * that are still receivable, and preselect lineitem details up to the
      * number specified in ie.phys_item_count() */
     this.add_lineitem = function(ie, li, displayHTML) {
+        /* This call only affects the blurb about received vs. total copies
+         * on the invoice near the top of the display. */
+        this._increment_copy_count_info(li);
+
         var receivable_details = this._get_receivable_details(li);
         if (!receivable_details.length) return;
 
@@ -211,6 +233,8 @@ function ReceivableCopyTable() {
 
         this.user_has_acked = [];
         this.li_by_lid = {};
+        this.copy_number_received = 0;
+        this.copy_number_total = 0;
 
         if (this.spinners) {
             for (var key in this.spinners)
@@ -253,6 +277,8 @@ function ReceivableCopyTable() {
             }
         );
 
+        this._render_copy_count_info();
+
         if (openils.Util.objectProperties(this.li_by_lid).length) {
             openils.Util.show("non-empty");
             openils.Util.hide("empty");
@@ -345,6 +371,10 @@ function ReceivableCopyTable() {
         );
     };
 
+    this.back_to_invoice = function() {
+        location.href = oilsBasePath + "/acq/invoice/view/" + this.inv_id;
+    };
+
     this._init.apply(this, arguments);
 }