1361685897f37ebb576d8c7a518a0ccdf9803950
[transitory.git] / Open-ILS / web / js / ui / default / acq / picklist / upload.js
1 dojo.require('dojo.data.ItemFileReadStore');
2 dojo.require('dojo.data.ItemFileWriteStore');
3 dojo.require('dijit.ProgressBar');
4 dojo.require('dijit.form.CheckBox');
5 dojo.require('dijit.form.TextBox');
6 dojo.require('dijit.form.FilteringSelect');
7 dojo.require('dijit.form.ComboBox');
8 dojo.require('dijit.form.Button');
9 dojo.require("dojo.io.iframe");
10 dojo.require('openils.User');
11 dojo.require('openils.widget.AutoFieldWidget');
12 dojo.require('openils.acq.Picklist');
13 dojo.require('openils.XUL');
14 dojo.require('openils.PermaCrud');
15
16 var VANDELAY_URL = '/vandelay-upload';
17 var providerWidget;
18 var orderAgencyWidget;
19 var vlAgent;
20 var usingNewPl = false;
21
22 function init() {
23     dojo.byId('acq-pl-upload-ses').value = openils.User.authtoken;
24
25     loadYearSelector();
26
27     new openils.widget.AutoFieldWidget({
28         fmClass : 'acqpo',
29         fmField : 'provider',
30         orgLimitPerms : ['CREATE_PICKLIST', 'CREATE_PURCHASE_ORDER'],
31         parentNode : dojo.byId('acq-pl-upload-provider'),
32     }).build(
33         function(w) { providerWidget = w }
34     );
35
36     new openils.widget.AutoFieldWidget({
37         fmClass : 'acqpo',
38         fmField : 'ordering_agency',
39         orgLimitPerms : ['CREATE_PICKLIST', 'CREATE_PURCHASE_ORDER'],
40         parentNode : dojo.byId('acq-pl-upload-agency'),
41     }).build(
42         function(w) { orderAgencyWidget = w }
43     );
44
45     vlAgent = new VLAgent();
46     vlAgent.init();
47
48     fieldmapper.standardRequest(
49         ['open-ils.acq', 'open-ils.acq.picklist.user.retrieve.atomic'],
50         {   async: true,
51             params: [openils.User.authtoken], 
52             oncomplete : function(r) {
53                 var list = openils.Util.readResponse(r);
54                 acqPlUploadPlSelector.store = 
55                     new dojo.data.ItemFileWriteStore({data:acqpl.toStoreData(list)});
56             }
57         }
58     );
59 }
60
61 function acqUploadRecords() {
62     openils.Util.show('acq-pl-upload-progress');
63     var picklist = acqPlUploadPlSelector.attr('value');
64     if(picklist) {
65         // ComboBox value is the display string.  find the actual picklist
66         // and create a new one if necessary
67         acqPlUploadPlSelector.store.fetch({
68             query : {name:picklist}, 
69             onComplete : function(items) {
70                 if(items.length == 0) {
71                     // create a new picklist for these items
72                     usingNewPl = true;
73                     openils.acq.Picklist.create(
74                         {name:picklist, org_unit: orderAgencyWidget.attr('value')},
75                         function(plId) { acqSendUploadForm({picklist:plId}) }
76                     );
77                 } else {
78                     usingNewPl = false;
79                     acqSendUploadForm({picklist:items[0].id[0]});
80                 }
81             }
82         });
83     } else {
84         acqSendUploadForm({picklist:null});
85     }
86 }
87
88 function acqSendUploadForm(args) {
89     dojo.io.iframe.send({
90         url: VANDELAY_URL,
91         method: "post",
92         handleAs: "html",
93         form: dojo.byId('acq-pl-upload-form'),
94         handle: function(data, ioArgs){
95             acqHandlePostUpload(data.documentElement.textContent, args.picklist);
96         }
97     });
98 }
99
100
101 function acqHandlePostUpload(key, plId) {
102
103     var args = {
104         picklist : plId,
105         provider : providerWidget.attr('value'),
106         ordering_agency : orderAgencyWidget.attr('value'),
107         create_po : acqPlUploadCreatePo.attr('value'),
108         activate_po : acqPlUploadActivatePo.attr('value'),
109         vandelay : vlAgent.values(),
110         fiscal_year : acqUploadYearSelector.attr('value')
111     };
112
113     fieldmapper.standardRequest(
114         ['open-ils.acq', 'open-ils.acq.process_upload_records'],
115         {   async: true,
116             params: [openils.User.authtoken, key, args],
117             onresponse : function(r) {
118
119                 vlAgent.handleResponse(
120                     openils.Util.readResponse(r),
121                     function(resp, res) {
122
123                         openils.Util.hide('acq-pl-upload-complete-pl');
124                         openils.Util.hide('acq-pl-upload-complete-po');
125                         openils.Util.hide('acq-pl-upload-complete-q');
126                         openils.Util.hide('acq-pl-upload-progress-bar');
127                         openils.Util.show('acq-pl-upload-complete');
128
129                         function activateLink(link, url, name) {
130                             link = dojo.byId(link);
131                             openils.Util.show(link);
132                             if (name) link.innerHTML = name;
133                             if (typeof xulG == 'undefined') { // browser
134                                 link.setAttribute('href', url); 
135                             } else {
136                                 link.setAttribute('href', 'javascript:;'); // for linky-ness
137                                 link.onclick = function() { openils.XUL.newTabEasy(url, null, null, true) };
138                             }
139                         }
140                             
141                         if(res.picklist_url) {
142                             activateLink('acq-pl-upload-complete-pl', res.picklist_url);
143
144                             // if the user entered a new picklist, refetch the set to pick
145                             // up the ID and redraw the list with the new one selected
146                             if (usingNewPl) {
147                                 var newPl = new openils.PermaCrud().retrieve('acqpl', resp.picklist.id());
148                                 acqPlUploadPlSelector.store.newItem(newPl.toStoreItem());
149                                 acqPlUploadPlSelector.attr('value', newPl.name());
150                             }
151                         } 
152
153                         if(res.po_url) {
154                             activateLink('acq-pl-upload-complete-po', res.po_url);
155                         }
156
157                         if (res.queue_url) {
158                             activateLink('acq-pl-upload-complete-q', res.queue_url);
159                         }
160                     }
161                 );
162             },
163         }
164     );
165 }
166
167 function loadYearSelector() {
168
169     fieldmapper.standardRequest(
170         ['open-ils.acq', 'open-ils.acq.fund.org.years.retrieve'],
171         {   async : true,
172             params : [openils.User.authtoken, {}, {limit_perm : 'VIEW_FUND'}],
173             oncomplete : function(r) {
174
175                 var yearList = openils.Util.readResponse(r);
176                 if(!yearList) return;
177                 yearList = yearList.map(function(year){return {year:year+''};}); // dojo wants strings
178
179                 var yearStore = {identifier:'year', name:'year', items:yearList};
180                 yearStore.items = yearStore.items.sort().reverse();
181                 acqUploadYearSelector.store = new dojo.data.ItemFileReadStore({data:yearStore});
182
183                 // default to this year
184                 // TODO: current fiscal year
185                 acqUploadYearSelector.setValue(new Date().getFullYear().toString());
186             }
187         }
188     );
189 }
190
191
192
193 openils.Util.addOnLoad(init);
194