--- /dev/null
+function ClaimDialogManager(
+ dialog, finalDialog, eligibleLidByLi, claimCallback
+) {
+ var self = this;
+
+ this.anyLids = false;
+ this.anyEligible = false;
+ this.showingLidNodes = {};
+
+ this.dialog = dialog;
+ this.finalDialog = finalDialog;
+ this.eligibleLidByLi = eligibleLidByLi;
+ this.claimCallback = claimCallback;
+
+ this.showingList = dojo.byId("acq-lit-li-claim-dia-lid-list");
+ this.eligibleList = dojo.byId("acq-lit-li-claim-dia-lid-list-init");
+
+ this.showingLidTemplate = this.showingList.removeChild(
+ nodeByName("lid", this.showingList)
+ );
+ this.showingClaimTemplate =
+ nodeByName("claims", this.showingLidTemplate).removeChild(
+ nodeByName("claim", this.showingLidTemplate)
+ );
+ this.eligibleTemplate = this.eligibleList.removeChild(
+ nodeByName("lid_to_claim", this.eligibleList)
+ );
+
+ dojo.byId("acq-lit-li-claim-dia-claim").onclick = function() {
+ var lid_ids = self.getSelectedEligible();
+ if (lid_ids.length) {
+ dojo.byId("acq-eligible-claim-submit").onclick = function() {
+ self.finalDialog.hide();
+ self.claim(lid_ids);
+ };
+ self.dialog.hide();
+ self.finalDialog.show();
+ }
+ else {
+ alert(localeStrings.NO_LID_TO_CLAIM);
+ }
+ };
+
+ new openils.widget.AutoFieldWidget({
+ "fmClass": "acqclt",
+ "selfReference": true,
+ "dijitArgs": {"required": true},
+ "parentNode": dojo.byId("acq-eligible-claim-type")
+ }).build(function(w) { self.claimType = w; });
+
+ this.reset = function(li) {
+ this.anyLids = false;
+ this.anyEligible = false;
+ this.showingLidNodes = {};
+
+ openils.Util.hide("acq-lit-li-claim-dia-initiate");
+ openils.Util.hide("acq-lit-li-claim-dia-show");
+
+ dojo.empty(this.showingList);
+ dojo.empty(this.eligibleList);
+ };
+
+ this.show = function(li, preselected) {
+ this.reset();
+ this.prepare(li, preselected);
+ this.dialog.show();
+ };
+
+ this.hide = function() { this.dialog.hide(); };
+
+ this.prepare = function(li, preselected) {
+ this.workingLi = li;
+
+ dojo.byId("acq-lit-li-claim-dia-li-title").innerHTML =
+ li.attributes().filter(
+ function(o) { return Boolean(o.attr_name() == "title"); }
+ )[0].attr_value();
+ dojo.byId("acq-lit-li-claim-dia-li-id").innerHTML = li.id();
+
+ li.lineitem_details().forEach(
+ function(lid) {
+ lid.claims().forEach(
+ function(claim) { self.addClaim(lid, claim); }
+ );
+ if (self.eligibleLidByLi[li.id()].indexOf(lid.id()) != -1) {
+ self.addEligible(lid, preselected == lid.id());
+ }
+ }
+ );
+ };
+
+ this._reprReceived = function(lid) {
+ if (lid.cancel_reason())
+ return localeStrings.CANCELED + ": " + lid.cancel_reason().label();
+ else if (lid.recv_time())
+ return localeStrings.RECVD + " " + lid.recv_time();
+ else
+ return localeStrings.NOT_RECVD;
+ };
+
+ this.addClaim = function(lid, claim) {
+ if (!this.anyLids)
+ openils.Util.show("acq-lit-li-claim-dia-show");
+ this.anyLids = true;
+
+ var lidNode = this.showingLidNodes[lid.id()];
+ if (!lidNode) {
+ lidNode = dojo.clone(this.showingLidTemplate);
+ nodeByName("barcode", lidNode).innerHTML = lid.barcode();
+ nodeByName("recvd", lidNode).innerHTML = this._reprReceived(lid);
+
+ this.showingLidNodes[lid.id()] = lidNode;
+ dojo.place(lidNode, this.showingList, "last");
+ }
+
+ var claimNode = dojo.clone(this.showingClaimTemplate);
+ nodeByName("type", claimNode).innerHTML = claim.type().code();
+ nodeByName("voucher", claimNode).onclick = function() {
+ var win;
+ fieldmapper.standardRequest(
+ ["open-ils.acq",
+ "open-ils.acq.claim.voucher.by_lineitem_detail"], {
+ "params": [openils.User.authtoken, lid.id()],
+ "async": true,
+ "onresponse": function(r) {
+ if (r = openils.Util.readResponse(r)) {
+ if (!win)
+ win = openClaimVoucherWindow();
+ }
+ dojo.byId("main", win.document).innerHTML +=
+ (r.template_output().data() + "<hr />");
+ },
+ "oncomplete": function() {
+ var print_button = dojo.byId("print", win.document);
+ print_button.innerHTML = localeStrings.PRINT;
+ print_button.disabled = false;
+ }
+ }
+ );
+ };
+
+ dojo.place(
+ claimNode, nodeByName("claims", lidNode), "last"
+ );
+ };
+
+ this.addEligible = function(lid, preselect) {
+ if (!this.anyEligible)
+ openils.Util.show("acq-lit-li-claim-dia-initiate");
+ this.anyEligible = true;
+
+ var eligibleNode = dojo.clone(this.eligibleTemplate);
+ var checkbox = nodeByName("claimable_lid", eligibleNode);
+
+ checkbox.value = lid.id();
+ dojo.attr(checkbox, "id", "claim-lid-" + lid.id());
+ dojo.attr(checkbox, "for", "claim-lid-" + lid.id());
+ if (preselect)
+ dojo.attr(checkbox, "checked", true);
+
+ nodeByName("barcode", eligibleNode).innerHTML = lid.barcode();
+ nodeByName("recvd", eligibleNode).innerHTML = this._reprReceived(lid);
+
+ dojo.place(eligibleNode, this.eligibleList, "last");
+ };
+
+ this.getSelectedEligible = function() {
+ return dojo.query("input[name='claimable_lid']", this.eligibleList).
+ filter(function(o) { return o.checked; }).
+ map(function(o) { return o.value; });
+ };
+
+ this.claim = function(lid_ids) {
+ progressDialog.show(true);
+ var win = null;
+
+ fieldmapper.standardRequest(
+ ["open-ils.acq", "open-ils.acq.claim.lineitem_detail"], {
+ "params": [
+ openils.User.authtoken, lid_ids, null,
+ this.claimType.attr("value"),
+ dijit.byId("acq-eligible-claim-note").attr("value")
+ ],
+ "async": true,
+ "onresponse": function(r) {
+ if (r = openils.Util.readResponse(r)) {
+ if (!win)
+ win = openClaimVoucherWindow();
+ dojo.byId("main", win.document).innerHTML +=
+ (r.template_output().data() + "<hr />");
+ }
+ else {
+ progressDialog.hide();
+ }
+ },
+ "oncomplete": function() {
+ progressDialog.hide();
+ dojo.byId("print", win.document).innerHTML =
+ localeStrings.PRINT;
+ dojo.byId("print", win.document).disabled = false;
+ self.claimCallback(self.workingLi);
+ }
+ }
+ );
+ };
+}