--- /dev/null
+dojo.require("dijit.form.Button");
+dojo.require("dijit.form.TextBox");
+dojo.require("openils.acq.Lineitem");
+dojo.require("openils.widget.OrgUnitFilteringSelect");
+dojo.require("openils.widget.ProgressDialog");
+dojo.require("openils.widget.AutoFieldWidget");
+
+var eligibleLiTable;
+
+function nodeByName(n, c) { return dojo.query("[name='" + n + "']", c)[0]; }
+
+function EligibleLiTable(filter) {
+ var self = this;
+
+ this.filter = filter;
+ this.liCache = {};
+ this.numClaimableLids = {};
+
+ this.claimNote = dijit.byId("acq-eligible-claim-note");
+ this.table = dojo.byId("acq-eligible-li-table");
+ this.tBody = dojo.query("tbody", this.table)[0];
+ this.tHead = dojo.query("thead", this.table)[0];
+ [this.rowTemplate, this.emptyTemplate] =
+ dojo.query("tr", this.tBody).map(
+ function(o) { return self.tBody.removeChild(o); }
+ );
+
+ nodeByName("selector_all", this.tHead).onclick = function() {
+ var value = this.checked;
+ dojo.query("[name='selector']", self.tBody).forEach(
+ function(o) { o.checked = value; }
+ );
+ };
+
+ new openils.widget.AutoFieldWidget({
+ "fmClass": "acqclt",
+ "selfReference": true,
+ "dijitArgs": {"required": true},
+ "parentNode": dojo.byId("acq-eligible-claim-type")
+ }).build(function(w) { self.claimType = w; });
+
+ new openils.User().buildPermOrgSelector(
+ "VIEW_PURCHASE_ORDER", orderingAgency, null,
+ function() {
+ orderingAgency.attr("value", self.filter.ordering_agency);
+ dojo.connect(
+ orderingAgency, "onChange",
+ function() {
+ self.filter.ordering_agency = this.attr("value");
+ self.load();
+ }
+ );
+ self.load();
+ }
+ );
+
+ dojo.byId("acq-eligible-claim-submit").onclick = function() {
+ finalClaimDialog.hide();
+ self.claim(self.getSelected());
+ };
+
+ dojo.query("button[name='claim_submit']").forEach(
+ function(button) {
+ button.onclick = function() {
+ if (self.getSelected().length)
+ finalClaimDialog.show();
+ else
+ alert(localeStrings.NO_LI_TO_CLAIM);
+ };
+ }
+ );
+
+ this.showEmpty = function() {
+ dojo.place(dojo.clone(this.emptyTemplate), this.tBody, "only");
+ openils.Util.hide("acq-eligible-claim-controls");
+ };
+
+ this.load = function() {
+ progressDialog.show(true);
+
+ var count = 0;
+ this.reset();
+ fieldmapper.standardRequest(
+ ["open-ils.acq", "open-ils.acq.claim.eligible.lineitem_detail"], {
+ "params": [openils.User.authtoken, this.filter],
+ "async": true,
+ "onresponse": function(r) {
+ if (r = openils.Util.readResponse(r)) {
+ if (!count++)
+ openils.Util.show("acq-eligible-claim-controls");
+ self.addIfMissing(r.lineitem());
+ } else {
+ progressDialog.hide();
+ }
+ },
+ "oncomplete": function() {
+ if (count < 1) self.showEmpty();
+ progressDialog.hide();
+ }
+ }
+ );
+ };
+
+ this.reset = function() {
+ this.liCache = {};
+ this.numClaimableLids = {};
+ dojo.empty(this.tBody);
+ };
+
+ this._updateLidLink = function(liId) {
+ this.numClaimableLids[liId] = (this.numClaimableLids[liId] || 0) + 1;
+ if (this.numClaimableLids[liId] == 2) {
+ nodeByName("lid_link", "eligible-li-" + liId).onclick =
+ function() {
+ location.href = oilsBasePath + "/acq/po/view/" +
+ self.liCache[liId].purchase_order().id() + "," +
+ liId;
+ };
+ openils.Util.show(
+ nodeByName("lid_link_holder", "eligible-li-" + liId)
+ );
+ }
+ };
+
+ /* Despite being called with an argument that's a lineitem ID, this method
+ * is actually called once per lineitem _detail_. */
+ this.addIfMissing = function(liId) {
+ this._updateLidLink(liId);
+ if (this.liCache[liId]) return;
+
+ var row = dojo.clone(this.rowTemplate);
+
+ var checkbox = nodeByName("selector", row);
+ var desc = nodeByName("description", row);
+
+ openils.acq.Lineitem.fetchAndRender(
+ liId, null, function(li, contents) {
+ self.liCache[liId] = li;
+
+ desc.innerHTML = contents;
+ dojo.attr(row, "id", "eligible-li-" + liId);
+ dojo.attr(checkbox, "value", liId);
+ dojo.place(row, self.tBody, "last");
+ }
+ );
+ };
+
+ /* Despite being called with an argument that's a lineitem ID, this method
+ * is actually called once per lineitem _detail_. */
+ this.removeIfPresent = function(liId) {
+ if (this.liCache[liId]) {
+ delete this.liCache[liId];
+ delete this.numClaimableLids[liId];
+ this.tBody.removeChild(dojo.byId("eligible-li-" + liId));
+ }
+ };
+
+ this.getSelected = function() {
+ return dojo.query("[name='selector']", this.tBody).
+ filter(function(o) { return o.checked; }).
+ map(function(o) { return o.value; });
+ };
+
+ this.resetVoucher = function() { this.voucherWin = null; };
+
+ this.addToVoucher = function(contents) {
+ if (!this.voucherWin)
+ this.voucherWin = openClaimVoucherWindow();
+ dojo.byId("main", this.voucherWin.document).innerHTML +=
+ (contents + "<hr />");
+ };
+
+ this.finishVoucher = function() {
+ var print_btn = dojo.byId("print", this.voucherWin.document);
+ print_btn.disabled = false;
+ print_btn.innerHTML = localeStrings.PRINT;
+ };
+
+ this.claim = function(lineitems) {
+ progressDialog.show(true);
+ self.resetVoucher();
+
+ fieldmapper.standardRequest(
+ ["open-ils.acq", "open-ils.acq.claim.lineitem"], {
+ "params": [
+ openils.User.authtoken, lineitems, null,
+ this.claimType.attr("value"), this.claimNote.attr("value")
+ ],
+ "async": true,
+ "onresponse": function(r) {
+ if (r = openils.Util.readResponse(r))
+ self.addToVoucher(r.template_output().data());
+ else
+ progressDialog.hide();
+ },
+ "oncomplete": function() {
+ lineitems.forEach(
+ function(liId) { self.removeIfPresent(liId); }
+ );
+ if (!nodeByName("selector", self.tBody)) // emptiness test
+ self.showEmpty();
+
+ self.finishVoucher();
+ progressDialog.hide();
+ }
+ }
+ );
+ };
+}
+
+function init() {
+ var finished_filter = {};
+ if (filter && filter.indexOf(":") != -1) {
+ filter.split(",").forEach(
+ function(chunk) {
+ var kvlist = chunk.split(":");
+ finished_filter[kvlist[0]] = kvlist[1];
+ }
+ );
+ }
+ filter = finished_filter;
+
+ if (!filter.ordering_agency)
+ filter.ordering_agency = openils.User.user.ws_ou();
+
+ eligibleLiTable = new EligibleLiTable(filter);
+}
+
+openils.Util.addOnLoad(init);