1 dojo.require('dijit.layout.ContentPane');
2 dojo.require('openils.User');
3 dojo.require('openils.Util');
4 dojo.require('openils.PermaCrud');
10 function AcqPoNoteTable() {
13 this.notesTbody = dojo.byId("acq-po-notes-tbody");
14 this.notesRow = this.notesTbody.removeChild(dojo.byId("acq-po-notes-row"));
16 dojo.byId("acq-po-notes-back-button").onclick = function() { self.hide(); };
17 dojo.byId("acq-po-view-notes").onclick = function() { self.show(); };
19 /* widgets' event properties are cased likeThis */
20 acqPoCreateNoteSubmit.onClick = function() {
21 if (!acqPoCreateNoteText.attr("value")) return;
24 var note = new acqpon();
26 Boolean(acqPoCreateNoteVendorPublic.attr('checked'))
28 note.value(acqPoCreateNoteText.attr("value"));
29 note.purchase_order(PO.id());
33 self.updatePoNotes(note);
35 /* reset fields for next use */
36 acqPoCreateNoteText.attr("value", "");
37 acqPoCreateNoteVendorPublic.attr("checked", false);
40 this.drawPoNote = function(note) {
44 var row = dojo.clone(this.notesRow);
46 nodeByName("value", row).innerHTML = note.value();
48 if (note.vendor_public() == "t")
49 nodeByName("vendor_public", row).innerHTML =
50 localeStrings.VENDOR_PUBLIC;
52 nodeByName("delete", row).onclick = function() {
54 self.notesTbody.removeChild(row);
58 if (note.edit_time()) {
59 nodeByName("edit_time", row).innerHTML =
60 dojo.date.locale.format(
61 dojo.date.stamp.fromISOString(note.edit_time()),
62 {"formatLength": "short"}
66 self.notesTbody.appendChild(row);
69 this.drawPoNotes = function() {
74 return (a.edit_time() < b.edit_time()) ? 1 : -1;
79 /* remove old renderings of notes */
80 dojo.empty(this.notesTbody);
82 PO.notes().forEach(function(o) { self.drawPoNote(o); });
85 this.updatePoNotesCount = function() {
86 dojo.byId("acq-po-view-notes").innerHTML = PO.notes().length;
89 this.updatePoNotes = function(newNote) {
94 if (o.ischanged() || o.isnew() || o.isdeleted())
102 progressDialog.show();
104 fieldmapper.standardRequest(
105 ["open-ils.acq", "open-ils.acq.po_note.cud.batch"], {
107 "params": [openils.User.authtoken, notes],
108 "onresponse": function(r) {
109 var resp = openils.Util.readResponse(r);
111 progressDialog.update(resp);
113 if (!resp.note.isdeleted()) {
114 resp.note.isnew(false);
115 resp.note.ischanged(false);
116 PO.notes().push(resp.note);
120 "oncomplete": function() {
122 /* remove the old changed notes */
128 o.ischanged() || o.isnew() ||
136 progressDialog.hide();
137 self.updatePoNotesCount();
144 this.hide = function() {
145 openils.Util.hide("acq-po-notes-div");
146 liTable.show("list");
149 this.show = function() {
152 openils.Util.show("acq-po-notes-div");
156 function updatePoState(po_info) {
157 var data = po_info[PO.id()];
159 for (var key in data)
165 function renderPo() {
166 dojo.byId("acq-po-view-id").innerHTML = PO.id();
167 dojo.byId("acq-po-view-name").innerHTML = PO.name();
168 dojo.byId("acq-po-view-total-li").innerHTML = PO.lineitem_count();
169 dojo.byId("acq-po-view-total-enc").innerHTML = PO.amount_encumbered();
170 dojo.byId("acq-po-view-total-spent").innerHTML = PO.amount_spent();
171 dojo.byId("acq-po-view-state").innerHTML = PO.state(); // TODO i18n
172 dojo.byId("acq-po-view-notes").innerHTML = PO.notes().length;
174 if(PO.state() == "pending") {
175 openils.Util.show("acq-po-activate");
176 if (PO.lineitem_count() > 1)
177 openils.Util.show("acq-po-split");
183 /* set up li table */
184 liTable = new AcqLiTable();
187 liTable.poUpdateCallback = updatePoState;
189 /* set up po notes table */
190 poNoteTable = new AcqPoNoteTable();
192 /* retrieve data and populate */
193 fieldmapper.standardRequest(
194 ['open-ils.acq', 'open-ils.acq.purchase_order.retrieve'],
196 params: [openils.User.authtoken, poId, {
197 "flesh_price_summary": true,
198 "flesh_lineitem_count": true,
201 oncomplete: function(r) {
202 PO = openils.Util.readResponse(r); /* save PO globally */
208 fieldmapper.standardRequest(
209 ['open-ils.acq', 'open-ils.acq.lineitem.search'],
211 params: [openils.User.authtoken, {purchase_order:poId}, {flesh_attrs:true, flesh_notes:true}],
212 onresponse: function(r) {
213 liTable.show('list');
214 liTable.addLineitem(openils.Util.readResponse(r));
220 function activatePo() {
221 progressDialog.show(true);
223 fieldmapper.standardRequest(
224 ['open-ils.acq', 'open-ils.acq.purchase_order.activate'],
226 params: [openils.User.authtoken, PO.id()],
227 oncomplete : function() {
228 location.href = location.href;
233 progressDialog.hide();
238 progressDialog.show(true);
241 fieldmapper.standardRequest(
242 ['open-ils.acq', 'open-ils.acq.purchase_order.split_by_lineitems'],
244 params: [openils.User.authtoken, PO.id()],
245 onresponse : function(r) {
246 list = openils.Util.readResponse(r);
248 oncomplete : function() {
249 progressDialog.hide();
251 location.href = oilsBasePath + '/eg/acq/po/search/' +
258 progressDialog.hide();
263 function updatePoName() {
264 var value = prompt('Enter new purchase order name:', PO.name()); // TODO i18n
265 if(!value || value == PO.name()) return;
267 var pcrud = new openils.PermaCrud();
269 oncomplete : function(r, cudResults) {
270 var stat = cudResults[0];
272 dojo.byId('acq-po-view-name').innerHTML = value;
277 openils.Util.addOnLoad(init);