JBAS-773 Merge custom PO view changes to stock
authorBill Erickson <berickxx@gmail.com>
Tue, 23 Jun 2015 14:55:52 +0000 (10:55 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Mar 2019 19:46:23 +0000 (15:46 -0400)
Use stock PO view code with custom changes instead of using custom files
which are getting out of sync.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Conflicts:
KCLS/openils/var/templates_kcls/acq/po/view.tt2
Open-ILS/web/js/ui/default/acq/po/view_po.js
Open-ILS/web/js/ui/kcls/acq/po/view_po.js

KCLS/openils/var/templates_kcls/acq/po/view.tt2 [deleted file]
Open-ILS/src/templates/acq/po/view.tt2
Open-ILS/web/js/ui/default/acq/po/view_po.js
Open-ILS/web/js/ui/kcls/acq/po/view_po.js [deleted file]

diff --git a/KCLS/openils/var/templates_kcls/acq/po/view.tt2 b/KCLS/openils/var/templates_kcls/acq/po/view.tt2
deleted file mode 100644 (file)
index ce58e62..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-[% WRAPPER 'base.tt2' %]
-[% ctx.page_title = l("Purchase Order") %]
-<div dojoType="dijit.layout.ContentPane" style="height:100%">
-    <div id='oils-scroll-to-top'></div>
-    <div>
-        <div id='oils-acq-picklist-header'>
-            <big>
-                [% l('Purchase Order ([_1])', '<span id="acq-po-view-state"></span>') %] 
-            </big>
-            <span id='acq-po-activated-on' class='hidden'></span>
-            <table class="oils-generic-table acq-po-info">
-                <tr>
-                    <th>[% l('ID') %]</th><td><a id="acq-po-view-id"/></td>
-                    <th>[% l('Prepayment Required?') %]</th>
-                    <td><span id="acq-po-view-prepay"></span></td>
-                </tr>
-                <tr>
-                    <th>[% l('Name') %]</th>
-                    <td><a id="acq-po-view-name" href="javascript:void(0);"
-                        onclick="updatePoName()"></a></td>
-                    <th>[% l('Activatable?') %]</th>
-                    <td>
-                        <span id="acq-po-activate-checking"></span>
-                        <span class="hidden" id="acq-po-activate-links" style='padding: 5px'>
-                            <span dojoType="dijit.form.Button" onClick="activatePo('noVandelay')" jsId="activatePoButton">
-                                [% l('Activate Order') %]
-                            </span>
-                            <span style='padding: 5px;'> / </span>
-                            <span dojoType="dijit.form.Button" onClick="activatePo('noAssets')" jsId="activatePoNoAssetsButton">
-                                [% l('Activate Without Loading Items') %]
-                            </span>
-                        </span>
-                        <span class="hidden" id="acq-po-finalize-links" style='padding: 5px'>
-                            <span dojoType="dijit.form.Button" onClick="finalizePo()" jsId="finalizePoButton">
-                                [% l('Finalize Blanket Order') %]
-                            </span>
-                        </span>
-                    </td>
-                </tr>
-                <tr>
-                    <th>[% l('Provider') %]</th>
-                    <td><span id="acq-po-view-provider"></span></td>
-                    <th>[% l('Notes') %]</th>
-                    <td>
-                        <a href="javascript:void(0);"
-                            id="acq-po-view-notes"></a>
-                    </td>
-                </tr>
-                <tr>
-                    <th>[% l('Total Lineitems') %]</th>
-                    <td><span id="acq-po-view-total-li"></span></td>
-                    <th>[% l('EDI Messages') %]</th>
-                    <td>
-                        <a href="javascript:void(0);"
-                            id="acq-po-view-edi-messages"></a>
-                    </td>
-                </tr>
-                <tr>
-                    <th>[% l('Total Estimated') %]</th>
-                    <td>[% l('$[_1]', '<span id="acq-po-view-total-estimated"></span>') %]</td>
-                    <th>[% l('History') %]</th>
-                    <td>
-                        <a class="hidden" href="javascript:void(0);"
-                            id="acq-po-view-history">[% l('View') %]</a>
-                    </td>
-                </tr>
-                <tr>
-                    <th>[% l('Total Encumbered') %]</th>
-                    <td>[% l('$[_1]', '<span id="acq-po-view-total-enc"></span>') %]</td>
-                    <th id="acq-po-invoice-label" class="hidden">[% l('Invoicing') %]</th>
-                    <td id="acq-po-invoice-stuff" class="hidden">
-                        <button dojoType="dijit.form.Button"
-                            id="acq-po-view-invoice-link">
-                            [% l('View Invoices ([_1])',
-                            '<span id="acq-po-view-invoice-count"></span>') %]
-                        </button> &nbsp;
-                        <button dojoType="dijit.form.Button"
-                            id="acq-po-create-invoice-link">
-                            [% l('Create Invoice') %]
-                        </button> &nbsp;
-                        <button dojoType="dijit.form.DropDownButton">
-                            <span>[% l('Link Invoice') %]</span>
-                            <div dojoType="dijit.TooltipDialog"
-                                id="acq-po-link-invoice">
-                                <script type="dojo/connect" event="onOpen">
-                                    if (!invoiceLinkDialogManager) {
-                                        invoiceLinkDialogManager =
-                                            new InvoiceLinkDialogManager(
-                                                "po", PO
-                                            );
-                                    }
-                                </script>
-                                [% INCLUDE "acq/common/inv_dialog.tt2"
-                                    which = "po" %]
-                            </div>
-                        </button>
-                    </td>
-                </tr>
-                <tr>
-                    <th>[% l('Total Spent') %]</th>
-                    <td>[% l('$[_1]', '<span id="acq-po-view-total-spent"></span>') %]</td>
-                    <th id="acq-po-cancel-label"></th>
-                    <td>
-                        <span id="acq-po-view-cancel-reason"></span>
-                        <span id="acq-po-choose-cancel-reason" class="hidden">
-                            <span dojoType="dijit.form.DropDownButton">
-                                <span>[% l('Cancel order') %]</span>
-                                <span dojoType="dijit.TooltipDialog">
-                                    <label for="acq-po-cancel-reason">
-                                        [% l('Reason:') %]
-                                    </label>
-                                    <span id="acq-po-cancel-reason"></span>
-                                    <button jsId="acqPoCancelReasonSubmit"
-                                        dojoType="dijit.form.Button"
-                                        type="submit">[% l('Cancel order') %]</button>
-                                </span>
-                            </span>
-                        </span>
-                    </td>
-                </tr>
-                <tr>
-                    <th></th>
-                    <td>
-                        <div class='hidden' id='acq-po-return-to-search'>
-                            <button dojoType='dijit.form.Button' id='acq-po-return-to-search-button'>[% l('&#x2196; Return to Search') %]</button>
-                        </div>
-                        <div class='hidden' id='acq-po-return-to-invoice'>
-                            <button dojoType='dijit.form.Button' id='acq-po-return-to-invoice-button'>[% l('&#x2196; Return to Invoice') %]</button>
-                        </div>
-                    </td>
-                    <th class="hidden" id="acq-po-zero-activate-label">[% l('Allow activation with <br/> zero-copy lineitems') %]</th>
-                    <td class="hidden" id="acq-po-zero-activate"><input type='checkbox' id='acq-po-activate-zero-copies' onclick='checkCouldActivatePo()'/></td>
-                </tr>
-                <tr>
-                    <td colspan='3'>
-                        <a class="hidden" id="acq-po-split" href="javascript:void(0);"
-                            onclick="if (confirm(localeStrings.CONFIRM_SPLIT_PO)) splitPo();">
-                            [% l('Split Order by Lineitems') %]
-                        </a>
-                    </td>
-                </tr>
-            </table>
-        </div>
-    </div>
-    <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/acq/common/base64.js"></script>
-    <script type="text/javascript" src='[% ctx.media_prefix %]/js/ui/kcls/acq/po/view_po.js'></script>
-    <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/acq/po/item_table.js"></script>
-    <script type="text/javascript">
-        var poId = "[% ctx.page_args.1 %]";
-        var liFocus = "[% ctx.page_args.0 %]";
-        if (liFocus && !poId) {
-            poId = liFocus;
-            liFocus = null;
-        }
-    </script>
-    [% INCLUDE 'acq/common/li_table.tt2' %]
-    [% INCLUDE "acq/common/notes.tt2" which = "Po" %]
-    <div class='hidden' id='acq-po-no-lineitems'>
-        <button type='dijit.form.Button' onclick='location.href = oilsBasePath + "/acq/picklist/brief_record?po=" + poId'>
-            [% l('Add Brief Record') %]
-        </button>
-    </div>
-    [% INCLUDE "acq/po/item_table.tt2" %]
-</div>
-[% END %]
index 2bed1ee..aa0cf1a 100644 (file)
                     <td>
                         <span id="acq-po-activate-checking"></span>
                         <span class="hidden" id="acq-po-activate-links" style='padding: 5px'>
-                            <span dojoType="dijit.form.Button" onClick="activatePo()" jsId="activatePoButton">
+                            <span dojoType="dijit.form.Button" onClick="activatePo('noVandelay')" jsId="activatePoButton">
                                 [% l('Activate Order') %]
                             </span>
                             <span style='padding: 5px;'> / </span>
-                            <span dojoType="dijit.form.Button" onClick="activatePo(true)" jsId="activatePoNoAssetsButton">
+                            <span dojoType="dijit.form.Button" onClick="activatePo('noAssets')" jsId="activatePoNoAssetsButton">
                                 [% l('Activate Without Loading Items') %]
                             </span>
                         </span>
index 53989cc..19febae 100644 (file)
@@ -652,7 +652,7 @@ function finalizePo() {
     );
 }
 
-function activatePo(noAssets) {
+function activatePo(argument) {
     activatePoButton.attr("disabled", true);
     activatePoNoAssetsButton.attr("disabled", true);
 
@@ -670,9 +670,12 @@ function activatePo(noAssets) {
         }
     }
 
-    if (noAssets) {
+    if (argument == 'noAssets') {
         // no need for AssetCreator when assets are not desired
         activatePoStage2(true);
+    } else if (argument == 'noVandelay'){
+        //skip Asset Creator screen & Vandelay check
+        liTable.createAssets(activatePoStage2, true);
     } else {
         liTable.showAssetCreator(activatePoStage2);
     }
diff --git a/Open-ILS/web/js/ui/kcls/acq/po/view_po.js b/Open-ILS/web/js/ui/kcls/acq/po/view_po.js
deleted file mode 100644 (file)
index 5a67e8f..0000000
+++ /dev/null
@@ -1,749 +0,0 @@
-dojo.require("dijit.form.Button");
-dojo.require("dojo.string");
-dojo.require('dijit.layout.ContentPane');
-dojo.require('openils.PermaCrud');
-
-var pcrud = new openils.PermaCrud();
-var PO = null;
-var liTable;
-var poItemTable;
-var poNoteTable;
-var invoiceLinkDialogManager;
-
-function AcqPoNoteTable() {
-    var self = this;
-
-    this.notesTbody = dojo.byId("acq-po-notes-tbody");
-    this.notesRow = this.notesTbody.removeChild(dojo.byId("acq-po-notes-row"));
-
-    dojo.byId("acq-po-notes-back-button").onclick = function() { self.hide(); };
-    dojo.byId("acq-po-view-notes").onclick = function() { self.show(); };
-
-    /* widgets' event properties are cased likeThis */
-    acqPoCreateNoteSubmit.onClick = function() {
-        if (!acqPoCreateNoteText.attr("value")) return;
-
-        /* prep new note */
-        var note = new acqpon();
-        note.vendor_public(
-            Boolean(acqPoCreateNoteVendorPublic.attr('checked'))
-        );
-        note.value(acqPoCreateNoteText.attr("value"));
-        note.purchase_order(PO.id());
-        note.isnew(true);
-
-        /* save it */
-        self.updatePoNotes(note);
-
-        /* reset fields for next use */
-        acqPoCreateNoteText.attr("value", "");
-        acqPoCreateNoteVendorPublic.attr("checked", false);
-    };
-
-    this.drawPoNote = function(note) {
-        if (note.isdeleted())
-            return;
-
-        var row = dojo.clone(this.notesRow);
-
-        nodeByName("value", row).innerHTML = note.value();
-
-        if (openils.Util.isTrue(note.vendor_public()))
-            nodeByName("vendor_public", row).innerHTML =
-                localeStrings.VENDOR_PUBLIC;
-
-        nodeByName("delete", row).onclick = function() {
-            note.isdeleted(true);
-            self.notesTbody.removeChild(row);
-            self.updatePoNotes();
-        };
-
-        if (note.edit_time()) {
-            nodeByName("edit_time", row).innerHTML =
-                dojo.date.locale.format(
-                    dojo.date.stamp.fromISOString(note.edit_time()),
-                    {"formatLength": "short"}
-                );
-        }
-
-        self.notesTbody.appendChild(row);
-    };
-
-    this.drawPoNotes = function() {
-        /* sort */
-        PO.notes(
-            PO.notes().sort(
-                function(a, b) {
-                    return (a.edit_time() < b.edit_time()) ? 1 : -1;
-                }
-            )
-        );
-
-        /* remove old renderings of notes */
-        dojo.empty(this.notesTbody);
-
-        PO.notes().forEach(function(o) { self.drawPoNote(o); });
-    };
-
-    this.updatePoNotesCount = function() {
-        dojo.byId("acq-po-view-notes").innerHTML =
-            "(" + PO.notes().length + ")";
-    };
-
-    this.updatePoNotes = function(newNote) {
-        var notes = newNote ?
-            [newNote] :
-            PO.notes().filter(
-                function(o) {
-                    if (o.ischanged() || o.isnew() || o.isdeleted())
-                        return o;
-                }
-            );
-
-        if (notes.length < 1)
-            return;
-
-        progressDialog.show();
-
-        fieldmapper.standardRequest(
-            ["open-ils.acq", "open-ils.acq.po_note.cud.batch"], {
-                "async": true,
-                "params": [openils.User.authtoken, notes],
-                "onresponse": function(r) {
-                    var resp = openils.Util.readResponse(r);
-                    if (resp) {
-                        progressDialog.update(resp);
-
-                        if (!resp.note.isdeleted()) {
-                            resp.note.isnew(false);
-                            resp.note.ischanged(false);
-                            PO.notes().push(resp.note);
-                        }
-                    }
-                },
-                "oncomplete": function() {
-                    if (!newNote) {
-                        /* remove the old changed notes */
-                        var list = [];
-                        PO.notes(
-                            PO.notes().filter(
-                                function(o) {
-                                    return (!(
-                                        o.ischanged() || o.isnew() ||
-                                        o.isdeleted()
-                                    ));
-                                }
-                            )
-                        );
-                    }
-
-                    progressDialog.hide();
-                    self.updatePoNotesCount();
-                    self.drawPoNotes();
-                }
-            }
-        );
-    };
-
-    this.hide = function() {
-        openils.Util.hide("acq-po-notes-div");
-        liTable.show("list");
-        poItemTable.show();
-    };
-
-    this.show = function() {
-        liTable.hide();
-        poItemTable.hide();
-        self.drawPoNotes();
-        openils.Util.show("acq-po-notes-div");
-    };
-}
-
-function updatePoState(po_info) {
-    var data = po_info[PO.id()];
-    if (data) {
-        for (var key in data)
-            PO[key](data[key]);
-        renderPo();
-    }
-}
-
-function cancellationUpdater(r) {
-    var r = openils.Util.readResponse(r);
-    if (r) {
-        if (r.po) updatePoState(r.po);
-        if (r.li) {
-            for (var id in r.li) {
-                liTable.liCache[id].state(r.li[id].state);
-                liTable.liCache[id].cancel_reason(r.li[id].cancel_reason);
-                liTable.updateLiState(liTable.liCache[id]);
-            }
-        }
-        if (r.lid && liTable.copyCache) {
-            for (var id in r.lid) {
-                if (liTable.copyCache[id]) {
-                    liTable.copyCache[id].cancel_reason(
-                        r.lid[id].cancel_reason
-                    );
-                    liTable.updateLidState(liTable.copyCache[id]);
-                }
-            }
-        }
-    }
-}
-
-function makeProviderLink(node, provider) {
-    return dojo.create(
-        "a", {
-            "href": oilsBasePath + "/conify/global/acq/provider/" + provider.id(),
-            "innerHTML": provider.name() + " (" + provider.code() + ")",
-        },
-        node,
-        "only"
-    );
-}
-function makePrepayWidget(node, prepay) {
-    if (prepay) {
-        openils.Util.addCSSClass(node, "oils-acq-po-prepay");
-        node.innerHTML = localeStrings.YES;
-    } else {
-        openils.Util.removeCSSClass(node, "oils-acq-po-prepay");
-        node.innerHTML = localeStrings.NO;
-    }
-}
-
-function makeCancelWidget(node, labelnode) {
-    openils.Util.hide("acq-po-choose-cancel-reason");
-
-    if (PO.cancel_reason()) {
-        labelnode.innerHTML = localeStrings.CANCEL_REASON;
-        node.innerHTML = PO.cancel_reason().description() + " (" +
-            PO.cancel_reason().label() + ")";
-    } else if (["on-order", "pending"].indexOf(PO.state()) == -1) {
-        dojo.destroy(this.oldTip);
-        labelnode.innerHTML = "";
-        node.innerHTML = "";
-    } else {
-        dojo.destroy(this.oldTip);
-        labelnode.innerHTML = localeStrings.CANCEL;
-        node.innerHTML = "";
-        if (!acqPoCancelReasonSubmit._prepared) {
-            var widget = new openils.widget.AutoFieldWidget({
-                "fmField": "cancel_reason",
-                "fmClass": "acqpo",
-                "parentNode": dojo.byId("acq-po-cancel-reason"),
-                "orgLimitPerms": ["CREATE_PURCHASE_ORDER"],
-                "forceSync": true
-            });
-            widget.build(
-                function(w, ww) {
-                    acqPoCancelReasonSubmit.onClick = function() {
-                        if (w.attr("value")) {
-                            if (confirm(localeStrings.PO_CANCEL_CONFIRM)) {
-                                fieldmapper.standardRequest(
-                                    ["open-ils.acq",
-                                        "open-ils.acq.purchase_order.cancel"],
-                                    {
-                                        "params": [
-                                            openils.User.authtoken,
-                                            PO.id(), 
-                                            w.attr("value")
-                                        ],
-                                        "async": true,
-                                        "oncomplete": cancellationUpdater
-                                    }
-                                );
-                            }
-                        }
-                    };
-                    acqPoCancelReasonSubmit._prepared = true;
-                }
-            );
-        }
-        openils.Util.show("acq-po-choose-cancel-reason", "inline");
-    }
-}
-
-function prepareInvoiceFeatures() {
-    /* show the count of related invoices on the "view invoices" button */
-    fieldmapper.standardRequest(
-        ["open-ils.acq", "open-ils.acq.invoice.unified_search.atomic"], {
-            "params": [
-                openils.User.authtoken,
-                {"acqpo":[{"id": PO.id()}]},
-                null,
-                null,
-                {"id_list": true}
-            ],
-            "async": true,
-            "oncomplete": function(r) {
-                dojo.byId("acq-po-view-invoice-count").innerHTML =
-                    openils.Util.readResponse(r).length;
-            }
-        }
-    );
-
-    /* view invoices button */
-    dijit.byId("acq-po-view-invoice-link").onClick = function() {
-        location.href = oilsBasePath + "/acq/search/unified?so=" +
-            base64Encode({"acqpo":[{"id": PO.id()}]}) +
-            "&rt=invoice";
-    };
-
-    /* create invoice button */
-    dijit.byId("acq-po-create-invoice-link").onClick = function() {
-        location.href = oilsBasePath +
-            "/acq/invoice/view?create=1&attach_po=" + PO.id();
-    };
-
-    openils.Util.show("acq-po-invoice-stuff", "table-cell");
-}
-
-function setSummaryAmounts() {
-    dojo.byId("acq-po-view-total-enc").innerHTML = PO.amount_encumbered().toFixed(2);
-    dojo.byId("acq-po-view-total-spent").innerHTML = PO.amount_spent().toFixed(2);
-    dojo.byId("acq-po-view-total-estimated").innerHTML = PO.amount_estimated().toFixed(2);
-}
-
-function refreshPOSummaryAmounts() {
-    fieldmapper.standardRequest(
-        ['open-ils.acq', 
-            'open-ils.acq.purchase_order.retrieve.authoritative'],
-        {   async: true,
-            params: [openils.User.authtoken, poId, {
-                "flesh_price_summary": true
-            }],
-            oncomplete: function(r) {
-                // update the global PO instead of replacing it, since other 
-                // code outside our control may be referencing it.
-                var po = openils.Util.readResponse(r);
-                PO.amount_encumbered(po.amount_encumbered());
-                PO.amount_spent(po.amount_spent());
-                PO.amount_estimated(po.amount_estimated());
-                setSummaryAmounts();
-            }
-        }
-    );
-}
-
-/* renderPo() is the best place to add tests that depend on PO-state
- * (or simple ordered-or-not? checks) to enable/disable UI elements
- * across the whole interface. */
-function renderPo() {
-    var po_state = PO.state();
-    dojo.byId("acq-po-view-id").innerHTML = PO.id();
-    dojo.byId("acq-po-view-name").innerHTML = PO.name();
-    makeProviderLink(
-        dojo.byId("acq-po-view-provider"),
-        PO.provider()
-    );
-
-    setSummaryAmounts();
-    dojo.byId("acq-po-view-total-li").innerHTML = PO.lineitem_count();
-    dojo.byId("acq-po-view-state").innerHTML = po_state; // TODO i18n
-
-    if(PO.order_date()) {
-        openils.Util.show('acq-po-activated-on', 'inline');
-        liTable.enableActionsDropdownOptions("ao"); /* activated */
-        liTable.initBatchUpdater(["item_count", "distribution_formula"]);
-
-        dojo.byId('acq-po-activated-on').innerHTML = 
-            dojo.string.substitute(
-                localeStrings.PO_ACTIVATED_ON, [
-                    openils.Util.timeStamp(PO.order_date(), {formatLength:'short'})
-                ]
-            );
-        /* These are handled another way now */
-//        if (po_state == "on-order" || po_state == "cancelled") {
-//            dojo.removeAttr('receive_lineitems', 'disabled');
-//        } else if(po_state == "received") {
-//            dojo.removeAttr('rollback_receive_lineitems', 'disabled');
-//        }
-
-        /* cancel widgets only make sense for activate (ordered) POs */
-        makeCancelWidget(
-            dojo.byId("acq-po-view-cancel-reason"),
-            dojo.byId("acq-po-cancel-label")
-        );
-
-        /* likewise for invoice features */
-        openils.Util.show("acq-po-invoice-label", "table-cell");
-        prepareInvoiceFeatures();
-    } else {
-        /* These things only make sense for not-ordered-yet POs */
-
-        liTable.initBatchUpdater();
-        liTable.enableActionsDropdownOptions("po");
-
-        openils.Util.show("acq-po-zero-activate-label", "table-cell");
-        openils.Util.show("acq-po-zero-activate", "table-cell");
-
-        openils.Util.show("acq-po-item-table-controls");
-    }
-
-    makePrepayWidget(
-        dojo.byId("acq-po-view-prepay"),
-        openils.Util.isTrue(PO.prepayment_required())
-    );
-    // dojo.byId("acq-po-view-notes").innerHTML = PO.notes().length;
-    poNoteTable.updatePoNotesCount();
-
-    if (po_state == "pending") {
-        checkCouldActivatePo();
-        if (PO.lineitem_count() > 1)
-            openils.Util.show("acq-po-split");
-    } else {
-        if (PO.order_date()) {
-            dojo.byId("acq-po-activate-checking").innerHTML = localeStrings.PO_ALREADY_ACTIVATED;
-            checkCouldBlanketFinalize();
-        } else {
-            dojo.byId("acq-po-activate-checking").innerHTML = localeStrings.NO;
-        }
-    }
-
-    // XXX we probably don't *always* need to do this...
-    poItemTable.reset();
-    PO.po_items().forEach(
-        function(po_item) { poItemTable.addItem(po_item); }
-    );
-    poItemTable.show();
-
-    dojo.attr(
-        "acq-po-view-history", "href",
-        oilsBasePath + "/acq/po/history/" + PO.id()
-    );
-    openils.Util.show("acq-po-view-history", "inline");
-
-    
-    /* if we got here from the search/invoice page with a focused LI,
-     * return to the previous page with the same LI focused */
-    var cgi = new openils.CGI();
-    var source = cgi.param('source');
-    var focus_li = cgi.param('focus_li');
-    if (focus_li && source) {
-        dojo.forEach(
-            ['search', 'invoice'], // perhaps a wee bit too loose
-            function(srcType) {
-                if (source.match(new RegExp(srcType))) {
-                    openils.Util.show('acq-po-return-to-' + srcType);
-                    var newCgi = new openils.CGI({url : source});
-                    newCgi.param('focus_li', focus_li);
-                    dojo.byId('acq-po-return-to-' + srcType + '-button').onclick = function() {
-                        location.href = newCgi.url();
-                    }
-                }
-            }
-        );
-    }
-}
-
-
-function init() {
-    /* set up li table */
-    liTable = new AcqLiTable();
-    liTable.reset();
-    liTable.isPO = poId;
-    liTable.poUpdateCallback = updatePoState;
-
-    /* set up po notes table */
-    poNoteTable = new AcqPoNoteTable();
-
-    /* retrieve data and populate */
-    fieldmapper.standardRequest(
-        ['open-ils.acq', 'open-ils.acq.purchase_order.retrieve'],
-        {   async: true,
-            params: [openils.User.authtoken, poId, {
-                "flesh_provider": true,
-                "flesh_price_summary": true,
-                "flesh_lineitem_count": true,
-                "flesh_notes": true,
-                "flesh_po_items": true
-            }],
-            oncomplete: function(r) {
-                PO = openils.Util.readResponse(r); /* save PO globally */
-
-                /* po item table */
-                poItemTable = new PoItemTable(PO, pcrud);
-
-                liTable.testOrderIdentPerms( PO.ordering_agency(), init2);
-
-                renderPo();
-            }
-        }
-    );
-
-}
-
-function init2() {
-
-    var zeroLi = true;
-    fieldmapper.standardRequest(
-        ['open-ils.acq', 'open-ils.acq.lineitem.search'],
-        {   async: true,
-            params: [
-                openils.User.authtoken, 
-                [{purchase_order:poId}, {"order_by": {"jub": "id ASC"}}], 
-                {flesh_attrs:true, flesh_notes:true, flesh_cancel_reason:true, clear_marc:true}
-            ],
-            onresponse: function(r) {
-                zeroLi = false;
-                liTable.show('list');
-                var li = openils.Util.readResponse(r);
-                liTable.addLineitem(li);
-            },
-
-            oncomplete : function() {
-                if (liFocus) liTable.drawCopies(liFocus);
-                if(zeroLi) openils.Util.show('acq-po-no-lineitems');
-            }
-        }
-    );
-
-    pcrud.search(
-        'acqedim', 
-        {purchase_order : poId}, 
-        {
-            id_list : true,
-            oncomplete : function(r) {
-                var resp = openils.Util.readResponse(r);
-                // TODO: I18n
-                if(resp) {
-                    dojo.byId('acq-po-view-edi-messages').innerHTML = '(' + resp.length + ')';
-                    dojo.byId('acq-po-view-edi-messages').setAttribute('href', oilsBasePath + '/acq/po/edi_messages/' + poId);
-                } else {
-                    dojo.byId('acq-po-view-edi-messages').innerHTML = '0';
-                    dojo.byId('acq-po-view-edi-messages').setAttribute('href', '');
-                }
-            }
-        }
-    );
-}
-
-function checkCouldBlanketFinalize() {
-
-    if (PO.state() == 'received') return;
-
-    var inv_types = [];
-
-    // get the unique set of invoice item type IDs
-    PO.po_items().forEach(function(item) { 
-        if (inv_types.indexOf(item.inv_item_type()) == -1)
-            inv_types.push(item.inv_item_type());
-    });
-
-    if (inv_types.length == 0) return;
-
-    pcrud.search('aiit', 
-        {code : inv_types, blanket : 't'}, {
-        oncomplete : function(r) {
-            r = openils.Util.readResponse(r);
-            if (r.length == 0) return;
-            openils.Util.show(dojo.byId('acq-po-finalize-links'), 'inline');
-        }
-    });
-}
-
-function checkCouldActivatePo() {
-    var d = dojo.byId("acq-po-activate-checking");
-    var a = dojo.byId("acq-po-activate-links");  /* <span> not <a> now, but no diff */
-    d.innerHTML = localeStrings.PO_CHECKING;
-    var warnings = [];
-    var stops = [];
-    var other = [];
-
-    fieldmapper.standardRequest(
-        ["open-ils.acq", "open-ils.acq.purchase_order.activate.dry_run"], {
-            "params": [
-                openils.User.authtoken,
-                PO.id(),
-                null,  // vandelay options
-                {zero_copy_activate : dojo.byId('acq-po-activate-zero-copies').checked}
-            ],
-            "async": true,
-            "onresponse": function(r) {
-                if ((r = openils.Util.readResponse(r, true /* eventOk */))) {
-                    if (typeof(r.textcode) != "undefined") {
-                        switch(r.textcode) {
-                            case "ACQ_FUND_EXCEEDS_STOP_PERCENT":
-                                stops.push(r);
-                                break;
-                            case "ACQ_FUND_EXCEEDS_WARN_PERCENT":
-                                warnings.push(r);
-                                break;
-                            default:
-                                other.push(r);
-                        }
-                    }
-                }
-            },
-            "oncomplete": function() {
-                /* XXX in the future, this might be tweaked to display info
-                 * about more than one stop or warning event from the ML. */
-                if (!(warnings.length || stops.length || other.length)) {
-                    d.innerHTML = localeStrings.PO_COULD_ACTIVATE;
-                    openils.Util.show(a, "inline");
-                    activatePoButton.attr("disabled", false);
-                } else {
-                    if (other.length) {
-                        /* XXX make the textcode part a tooltip one day */
-                        d.innerHTML = localeStrings.NO + ": " +
-                            other[0].desc + " (" + other[0].textcode + ")";
-                        openils.Util.hide(a);
-                        
-                        if (other[0].textcode == 'ACQ_LINEITEM_NO_COPIES') {
-                            // when LIs w/ zero LIDs are present, list them
-                            fieldmapper.standardRequest(
-                                [   'open-ils.acq', 
-                                    'open-ils.acq.purchase_order.no_copy_lineitems.id_list.authoritative.atomic' ],
-                                {   async : true, 
-                                    params : [openils.User.authtoken, poId],
-                                    oncomplete : function(r) {
-                                        var ids = openils.Util.readResponse(r);
-                                        d.innerHTML += ' (' + ids + ')';
-                                    }
-                                }
-                            );
-                        }
-                    } else if (stops.length) {
-                        d.innerHTML =
-                            dojo.string.substitute(
-                                localeStrings.PO_STOP_BLOCKS_ACTIVATION, [
-                                    stops[0].payload.fund.code(),
-                                    stops[0].payload.fund.year()
-                                ]
-                            );
-                        openils.Util.hide(a);
-                    } else {
-                        PO._warning_hack = true;
-                        d.innerHTML =
-                            dojo.string.substitute(
-                                localeStrings.PO_WARNING_NO_BLOCK_ACTIVATION, [
-                                    warnings[0].payload.fund.code(),
-                                    warnings[0].payload.fund.year()
-                                ]
-                            );
-                        openils.Util.show(a, "inline");
-                        activatePoButton.attr("disabled", false);
-                    }
-                }
-            }
-        }
-    );
-}
-
-function finalizePo() {
-
-    if (!confirm(localeStrings.FINALIZE_PO)) return;
-
-    finalizePoButton.attr('disabled', true);
-
-    fieldmapper.standardRequest(
-        ['open-ils.acq', 'open-ils.acq.purchase_order.blanket.finalize'],
-        {   async : true,
-            params : [openils.User.authtoken, PO.id()],
-            oncomplete : function(r) {
-                if (openils.Util.readResponse(r) == 1) 
-                    location.href = location.href;
-            }
-        }
-    );
-}
-
-function activatePo(argument) {
-    activatePoButton.attr("disabled", true);
-    activatePoNoAssetsButton.attr("disabled", true);
-
-    if (openils.Util.isTrue(PO.prepayment_required())) {
-        if (!confirm(localeStrings.PREPAYMENT_REQUIRED_REMINDER)) {
-            activatePoButton.attr("disabled", false);
-            return false;
-        }
-    }
-
-    if (PO._warning_hack) {
-        if (!confirm(localeStrings.PO_FUND_WARNING_CONFIRM)) {
-            activatePoButton.attr("disabled", false);
-            return false;
-        }
-    }
-
-    if (argument == 'noAssets') {
-        // no need for AssetCreator when assets are not desired
-        activatePoStage2(true);
-    } else if (argument == 'noVandelay'){
-        //skip Asset Creator screen & Vandelay check
-        liTable.createAssets(activatePoStage2, true);
-    } else {
-        liTable.showAssetCreator(activatePoStage2);
-    }
-}
-
-function activatePoStage2(noAssets) {
-
-    var want_refresh = false;
-    progressDialog.show(true);
-    fieldmapper.standardRequest(
-        ["open-ils.acq", "open-ils.acq.purchase_order.activate"], {
-            "async": true,
-            "params": [
-                openils.User.authtoken,
-                PO.id(),
-                null,  // vandelay options
-                {
-                    no_assets : noAssets, // no bibs/volumes/copies required
-                    zero_copy_activate : dojo.byId('acq-po-activate-zero-copies').checked
-                }
-            ],
-            "onresponse": function(r) {
-                progressDialog.hide();
-                activatePoButton.attr("disabled", false);
-                want_refresh = Boolean(openils.Util.readResponse(r));
-            },
-            "oncomplete": function() {
-                if (want_refresh)
-                    location.href = location.href;
-            }
-        }
-    );
-}
-
-function splitPo() {
-    progressDialog.show(true);
-    try {
-        var list;
-        fieldmapper.standardRequest(
-            ['open-ils.acq', 'open-ils.acq.purchase_order.split_by_lineitems'],
-            {   async: true,
-                params: [openils.User.authtoken, PO.id()],
-                onresponse : function(r) {
-                    list = openils.Util.readResponse(r);
-                },
-                oncomplete : function() {
-                    progressDialog.hide();
-                    if (list) {
-                        location.href = oilsBasePath + '/acq/po/search/' +
-                            list.join(",");
-                    }
-                }
-            }
-        );
-    } catch(E) {
-        progressDialog.hide();
-        alert(E);
-    }
-}
-
-function updatePoName() {
-    var value = prompt('Enter new purchase order name:', PO.name()); // TODO i18n
-    if(!value || value == PO.name()) return;
-    PO.name(value);
-    pcrud.update(PO, {
-        oncomplete : function(r, cudResults) {
-            var stat = cudResults[0];
-            if(stat)
-                dojo.byId('acq-po-view-name').innerHTML = value;
-        }
-    });
-}
-
-openils.Util.addOnLoad(init);