[open-ils-commits] ***SPAM*** [GIT] Evergreen ILS branch master updated. a9d88279ea90355b9c683218f8d0b0192970f40f

Evergreen Git git at git.evergreen-ils.org
Thu Sep 12 13:34:52 EDT 2013


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Evergreen ILS".

The branch, master has been updated
       via  a9d88279ea90355b9c683218f8d0b0192970f40f (commit)
      from  dc7ec6cfb60d66150ad43d4157a63ea739667217 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit a9d88279ea90355b9c683218f8d0b0192970f40f
Author: Bill Erickson <berick at esilibrary.com>
Date:   Thu Jun 20 15:46:33 2013 -0400

    LP1193095 lineitem batch actions sanity filters
    
    Avoid applying the following actions to lineitems which are in a state
    where each action makes no sense.
    
    The following actions are affected.  For each, the set of states for
    which a lineitem must be in for the action to proceed is listed.
    
    create PO
        - new selector-ready order-ready approved
    add to PO
        - new selector-ready order-ready approved
    create invoice
        - !cancelled
    add to invoice
        - !cancelled
    cancel lineitem
        - !cancelled
    mark selector ready
        - new
    mark order ready
        - new selector-ready
    mark received
        - pending-order on-order
    
    Depending on the interface, some top-level lineitem actions may be
    globally disabled.  The list of states listed above represent the bare
    minimum requirements.
    
    Signed-off-by: Bill Erickson <berick at esilibrary.com>
    Signed-off-by: Mike Rylander <mrylander at gmail.com>

diff --git a/Open-ILS/web/js/dojo/openils/acq/nls/acq.js b/Open-ILS/web/js/dojo/openils/acq/nls/acq.js
index a202039..c7e0bd3 100644
--- a/Open-ILS/web/js/dojo/openils/acq/nls/acq.js
+++ b/Open-ILS/web/js/dojo/openils/acq/nls/acq.js
@@ -93,5 +93,5 @@
     "INVOICE_COPY_COUNT_INFO": "Copies received on this invoice: ${0} out of ${1}.",
     "INVOICE_IDENT_COLLIDE": "There is already an invoice in the system with the given combination of 'Vendor Invoice ID' and 'Provider,' which is not allowed.",
     "NEW_INVOICE": "New Invoice",
-    "NO_LI_GENERAL" : "You have not selected any line items."
+    "NO_LI_GENERAL" : "You have not selected any (suitable) line items."
 }
diff --git a/Open-ILS/web/js/ui/default/acq/common/li_table.js b/Open-ILS/web/js/ui/default/acq/common/li_table.js
index 2efadf7..2bca126 100644
--- a/Open-ILS/web/js/ui/default/acq/common/li_table.js
+++ b/Open-ILS/web/js/ui/default/acq/common/li_table.js
@@ -44,6 +44,18 @@ var fundStyles = {
     "warning": "color: #c93;"
 };
 
+/**
+ * We're not using 'approved' today, but there is API support for it.
+ * I believe it's been replaced by "order-ready".
+ * LIs go new => selector-ready => order-ready/approved => pending-order => 
+ * on-order => received.  'cancelled' can pop up anywhere.
+ * Is this all of 'em?
+ */
+var li_pre_po_states = ["new", "selector-ready", "order-ready", "approved"];
+var li_post_po_states = ["pending-order", "on-order", "received"];
+// i.e. not-canceled ("cancelled") lineitems
+var li_active_states = li_pre_po_states.concat(li_post_po_states);
+
 function AcqLiTable() {
 
     var self = this;
@@ -133,7 +145,12 @@ function AcqLiTable() {
     }
     acqLitSaveLiStateButton.onClick = function() {
         acqLitChangeLiStateDialog.hide();
-        self._updateLiState(acqLitChangeLiStateDialog.getValues(), acqLitChangeLiStateDialog.attr('state'));
+        var state = acqLitChangeLiStateDialog.attr('state');
+        var state_filter = ['new'];
+        if (state == 'order-ready')
+            state_filter.push('selector-ready');
+        self._updateLiState(
+            acqLitChangeLiStateDialog.getValues(), state, state_filter);
     }
 
 
@@ -437,12 +454,15 @@ function AcqLiTable() {
     };
 
 
-    this.getAll = function(callback, id_only) {
+    this.getAll = function(callback, id_only, state) {
         /* For some uses of the li table, we may not really know about "all"
          * the lineitems that the user thinks we know about. If we're a paged
          * picklist, for example, we only know about the lineitems we've
          * displayed, but not necessarily all the lineitems on the picklist.
          * So we reach out to pcrud to inform us.
+         * state: string/array.  only lineitems in one of these states are
+         * included in the final result set.  Not currently supported for
+         * paging mode.
          */
 
         var oncomplete = function(r) {
@@ -454,8 +474,10 @@ function AcqLiTable() {
         };
 
         if (this.isPL) {
+            var search = {"picklist": this.isPL};
+            if (state) search.state = state;
             this.pcrud.search(
-                "jub", {"picklist": this.isPL}, {
+                "jub", search, {
                     "id_list": true,    /* sic, even if id_only */
                     "async": true,
                     "oncomplete": oncomplete
@@ -463,8 +485,10 @@ function AcqLiTable() {
             );
             return;
         } else if (this.isPO) {
+            var search = {"purchase_order": this.isPO};
+            if (state) search.state = state;
             this.pcrud.search(
-                "jub", {"purchase_order": this.isPO}, {
+                "jub", search, {
                     "id_list": true,
                     "async": true,
                     "oncomplete": oncomplete
@@ -480,7 +504,7 @@ function AcqLiTable() {
          * any special tricks to find out the "real" list of "all" lineitems
          * in this context, so we fall back to the old method.
          */
-        callback(this.getSelected(true, null, id_only));
+        callback(this.getSelected(true, null, id_only, state));
     };
 
     /** @param all If true, assume all are selected */
@@ -489,10 +513,12 @@ function AcqLiTable() {
         callback /* If you want a "good" idea of "all" lineitems, you must
         provide a callback that accepts an array parameter, rather than
         relying on the return value of this method itself. */,
-        id_only
+        id_only,
+        state 
     ) {
+        console.log("getSelected states = " + state);
         if (all && callback)
-            return this.getAll(callback, id_only);
+            return this.getAll(callback, id_only, filter);
 
         var indices = {};   /* use to uniqify. needed in paging situations. */
         dojo.forEach(this.selectors,
@@ -504,6 +530,19 @@ function AcqLiTable() {
 
         var result = openils.Util.objectProperties(indices);
 
+        // caller provided a lineitem state filter.  remove IDs for lineitems 
+        // not in the selected state.
+        if (state) {
+            var trimmed = [];
+            if (!dojo.isArray(state)) state = [state];
+            dojo.forEach(result, function(liId) {
+                console.log('filter LI state ' + self.liCache[liId].state());
+                if (state.indexOf(self.liCache[liId].state()) >= 0)
+                    trimmed.push(liId);
+            });
+            result = trimmed;
+        };
+
         if (!id_only)
             result = result.map(function(liId) { return self.liCache[liId]; });
 
@@ -2694,8 +2733,15 @@ function AcqLiTable() {
             case 'add_to_order':
                 addToPoDialog._get_li = dojo.hitch(
                     this,
-                    function() { return this.getSelected(false, null, true); }
+                    function() { 
+                        return this.getSelected(
+                            false, null, true, li_pre_po_states);
+                    }
                 );
+                if (addToPoDialog._get_li().length == 0) {
+                    alert(localeStrings.NO_LI_GENERAL);
+                    return;
+                }
                 addToPoDialog.show();
                 break;
 
@@ -2759,6 +2805,7 @@ function AcqLiTable() {
                 break;
 
             case "cancel_lineitems":
+                console.log('HERE');
                 this.maybeCancelLineitems();
                 break;
 
@@ -2872,7 +2919,12 @@ function AcqLiTable() {
     };
 
     this._cancelLineitems = function(reason) {
-        var id_list = this.getSelected().map(function(o) { return o.id(); });
+        var id_list = this.getSelected(
+            null, null, true, li_active_states);
+        if (!id_list.length) {
+            alert(localeStrings.NO_LI_GENERAL);
+            return;
+        }
         fieldmapper.standardRequest(
             ["open-ils.acq", "open-ils.acq.lineitem.cancel.batch"], {
                 "params": [openils.User.authtoken, id_list, reason],
@@ -2980,8 +3032,12 @@ function AcqLiTable() {
     };
 
     this.batchCreateInvoice = function() {
-        var liIds = this.getSelected(false, null, true /* id_list */)
-        if (!liIds.length) return;
+        var liIds = this.getSelected(
+            false, null, true /* id_list */, li_active_states)
+        if (!liIds.length) {
+            alert(localeStrings.NO_LI_GENERAL);
+            return;
+        }
         var path = oilsBasePath + '/acq/invoice/view?create=1';
         dojo.forEach(liIds, function(li, idx) { path += '&attach_li=' + li });
         if (openils.XUL.isXUL())
@@ -2991,8 +3047,12 @@ function AcqLiTable() {
     };
 
     this.batchLinkInvoice = function(create) {
-        var liIds = this.getSelected(false, null, true /* id_list */)
-        if (!liIds.length) return;
+        var liIds = this.getSelected(
+            false, null, true /* id_list */, li_active_states)
+        if (!liIds.length) {
+            alert(localeStrings.NO_LI_GENERAL);
+            return;
+        }
         if (!self.invoiceLinkDialogManager) {
             self.invoiceLinkDialogManager =
                 new InvoiceLinkDialogManager("li");
@@ -3002,7 +3062,9 @@ function AcqLiTable() {
     };
 
     this.receiveSelectedLineitems = function() {
-        var li_list = this.getSelected();
+        var states = li_post_po_states.filter(
+            function(s) { return s != 'received' });
+        var li_list = this.getSelected(null, null, null, states);
 
         if (!li_list.length) {
             alert(localeStrings.NO_LI_GENERAL);
@@ -3135,15 +3197,21 @@ function AcqLiTable() {
             this.getSelected(
                 true, function(list) {
                     self._createPOFromLineitems(fields, list);
-                }, /* id_list */ true
+                }, /* id_list */ true, li_pre_po_states
             );
         } else {
-            this._createPOFromLineitems(fields, this.getSelected(false, null, true /* id_list */));
+            this._createPOFromLineitems(
+                fields, this.getSelected(
+                    false, null, true /* id_list */, li_pre_po_states)
+            );
         }
     };
 
     this._createPOFromLineitems = function(fields, selected) {
-        if (selected.length == 0) return;
+        if (selected.length == 0) {
+            alert(localeStrings.NO_LI_GENERAL);
+            return;
+        }
         var self = this;
 
         var po = new fieldmapper.acqpo();
@@ -3347,18 +3415,22 @@ function AcqLiTable() {
         }
     };
 
-    this._updateLiState = function(values, state) {
+    this._updateLiState = function(values, state, state_filter) {
         progressDialog.show(true);
         this.getSelected(
             (values.which == 'all'),
             function(list) {
                 self._updateLiStateFromLineitems(values, state, list);
-            }
+            }, false /* id_list */, state_filter
         );
     };
 
     this._updateLiStateFromLineitems = function(values, state, selected) {
-        if(!selected.length) return;
+        if(!selected.length) {
+            try { progressDialog.hide() } catch(E) {};
+            alert(localeStrings.NO_LI_GENERAL);
+            return;
+        }
         dojo.forEach(selected, function(li) {li.state(state);});
         self._updateLiList(null, selected, 0,
             // TODO consider inline updates for efficiency

-----------------------------------------------------------------------

Summary of changes:
 Open-ILS/web/js/dojo/openils/acq/nls/acq.js       |    2 +-
 Open-ILS/web/js/ui/default/acq/common/li_table.js |  112 +++++++++++++++++----
 2 files changed, 93 insertions(+), 21 deletions(-)


hooks/post-receive
-- 
Evergreen ILS


More information about the open-ils-commits mailing list