]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/js/ui/default/acq/picklist/upload.js
Default to current fiscal year in ACQ order upload
[Evergreen.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) { 
43             orderAgencyWidget = w 
44             dojo.connect(orderAgencyWidget, 'onChange', setDefaultFiscalYear);
45         }
46     );
47
48     vlAgent = new VLAgent();
49     vlAgent.init();
50
51     fieldmapper.standardRequest(
52         ['open-ils.acq', 'open-ils.acq.picklist.user.retrieve.atomic'],
53         {   async: true,
54             params: [openils.User.authtoken], 
55             oncomplete : function(r) {
56                 var list = openils.Util.readResponse(r);
57                 acqPlUploadPlSelector.store = 
58                     new dojo.data.ItemFileWriteStore({data:acqpl.toStoreData(list)});
59             }
60         }
61     );
62 }
63
64 function setDefaultFiscalYear(org) {
65     org = org || orderAgencyWidget.attr('value');
66
67     if (org) {
68
69         fieldmapper.standardRequest(
70             ['open-ils.acq', 'open-ils.acq.org_unit.current_fiscal_year'],
71             {   params : [openils.User.authtoken, org],
72                 async : true,
73                 oncomplete : function(r) {
74                     var year = openils.Util.readResponse(r);
75                     acqUploadYearSelector.attr('value', year);
76                 }
77             }
78         );
79     }
80 }
81
82 function acqUploadRecords() {
83     openils.Util.show('acq-pl-upload-progress');
84     var picklist = acqPlUploadPlSelector.attr('value');
85     if(picklist) {
86         // ComboBox value is the display string.  find the actual picklist
87         // and create a new one if necessary
88         acqPlUploadPlSelector.store.fetch({
89             query : {name:picklist}, 
90             onComplete : function(items) {
91                 if(items.length == 0) {
92                     // create a new picklist for these items
93                     usingNewPl = true;
94                     openils.acq.Picklist.create(
95                         {name:picklist, org_unit: orderAgencyWidget.attr('value')},
96                         function(plId) { acqSendUploadForm({picklist:plId}) }
97                     );
98                 } else {
99                     usingNewPl = false;
100                     acqSendUploadForm({picklist:items[0].id[0]});
101                 }
102             }
103         });
104     } else {
105         acqSendUploadForm({picklist:null});
106     }
107 }
108
109 function acqSendUploadForm(args) {
110     dojo.io.iframe.send({
111         url: VANDELAY_URL,
112         method: "post",
113         handleAs: "html",
114         form: dojo.byId('acq-pl-upload-form'),
115         handle: function(data, ioArgs){
116             acqHandlePostUpload(data.documentElement.textContent, args.picklist);
117         }
118     });
119 }
120
121
122 function acqHandlePostUpload(key, plId) {
123
124     var args = {
125         picklist : plId,
126         provider : providerWidget.attr('value'),
127         ordering_agency : orderAgencyWidget.attr('value'),
128         create_po : acqPlUploadCreatePo.attr('value'),
129         activate_po : acqPlUploadActivatePo.attr('value'),
130         vandelay : vlAgent.values(),
131         fiscal_year : acqUploadYearSelector.attr('value')
132     };
133
134     fieldmapper.standardRequest(
135         ['open-ils.acq', 'open-ils.acq.process_upload_records'],
136         {   async: true,
137             params: [openils.User.authtoken, key, args],
138             onresponse : function(r) {
139
140                 vlAgent.handleResponse(
141                     openils.Util.readResponse(r),
142                     function(resp, res) {
143
144                         openils.Util.hide('acq-pl-upload-complete-pl');
145                         openils.Util.hide('acq-pl-upload-complete-po');
146                         openils.Util.hide('acq-pl-upload-complete-q');
147                         openils.Util.hide('acq-pl-upload-progress-bar');
148                         openils.Util.show('acq-pl-upload-complete');
149
150                         function activateLink(link, url, name) {
151                             link = dojo.byId(link);
152                             openils.Util.show(link);
153                             if (name) link.innerHTML = name;
154                             if (typeof xulG == 'undefined') { // browser
155                                 link.setAttribute('href', url); 
156                             } else {
157                                 link.setAttribute('href', 'javascript:;'); // for linky-ness
158                                 link.onclick = function() { openils.XUL.newTabEasy(url, null, null, true) };
159                             }
160                         }
161                             
162                         if(res.picklist_url) {
163                             activateLink('acq-pl-upload-complete-pl', res.picklist_url);
164
165                             // if the user entered a new picklist, refetch the set to pick
166                             // up the ID and redraw the list with the new one selected
167                             if (usingNewPl) {
168                                 var newPl = new openils.PermaCrud().retrieve('acqpl', resp.picklist.id());
169                                 acqPlUploadPlSelector.store.newItem(newPl.toStoreItem());
170                                 acqPlUploadPlSelector.attr('value', newPl.name());
171                             }
172                         } 
173
174                         if(res.po_url) {
175                             activateLink('acq-pl-upload-complete-po', res.po_url);
176                         }
177
178                         if (res.queue_url) {
179                             activateLink('acq-pl-upload-complete-q', res.queue_url);
180                         }
181                     }
182                 );
183             },
184         }
185     );
186 }
187
188 function loadYearSelector() {
189
190     fieldmapper.standardRequest(
191         ['open-ils.acq', 'open-ils.acq.fund.org.years.retrieve'],
192         {   async : true,
193             params : [openils.User.authtoken, {}, {limit_perm : 'VIEW_FUND'}],
194             oncomplete : function(r) {
195
196                 var yearList = openils.Util.readResponse(r);
197                 if(!yearList) return;
198                 yearList = yearList.map(function(year){return {year:year+''};}); // dojo wants strings
199
200                 var yearStore = {identifier:'year', name:'year', items:yearList};
201                 yearStore.items = yearStore.items.sort().reverse();
202                 acqUploadYearSelector.store = new dojo.data.ItemFileReadStore({data:yearStore});
203
204                 // until an ordering agency is selected, default to the 
205                 // fiscal year of the workstation
206                 setDefaultFiscalYear(new openils.User().user.ws_ou());
207             }
208         }
209     );
210 }
211
212
213
214 openils.Util.addOnLoad(init);
215