]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/js/ui/default/acq/picklist/upload.js
Acq+Vandelay : consistent post-upload link names
[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     new openils.widget.AutoFieldWidget({
26         fmClass : 'acqpo',
27         fmField : 'provider',
28         orgLimitPerms : ['CREATE_PICKLIST', 'CREATE_PURCHASE_ORDER'],
29         parentNode : dojo.byId('acq-pl-upload-provider'),
30     }).build(
31         function(w) { providerWidget = w }
32     );
33
34     new openils.widget.AutoFieldWidget({
35         fmClass : 'acqpo',
36         fmField : 'ordering_agency',
37         orgLimitPerms : ['CREATE_PICKLIST', 'CREATE_PURCHASE_ORDER'],
38         parentNode : dojo.byId('acq-pl-upload-agency'),
39     }).build(
40         function(w) { orderAgencyWidget = w }
41     );
42
43     vlAgent = new VLAgent();
44     vlAgent.init();
45
46     fieldmapper.standardRequest(
47         ['open-ils.acq', 'open-ils.acq.picklist.user.retrieve.atomic'],
48         {   async: true,
49             params: [openils.User.authtoken], 
50             oncomplete : function(r) {
51                 var list = openils.Util.readResponse(r);
52                 acqPlUploadPlSelector.store = 
53                     new dojo.data.ItemFileWriteStore({data:acqpl.toStoreData(list)});
54             }
55         }
56     );
57 }
58
59 function acqUploadRecords() {
60     openils.Util.show('acq-pl-upload-progress');
61     var picklist = acqPlUploadPlSelector.attr('value');
62     if(picklist) {
63         // ComboBox value is the display string.  find the actual picklist
64         // and create a new one if necessary
65         acqPlUploadPlSelector.store.fetch({
66             query : {name:picklist}, 
67             onComplete : function(items) {
68                 if(items.length == 0) {
69                     // create a new picklist for these items
70                     usingNewPl = true;
71                     openils.acq.Picklist.create(
72                         {name:picklist, org_unit: orderAgencyWidget.attr('value')},
73                         function(plId) { acqSendUploadForm({picklist:plId}) }
74                     );
75                 } else {
76                     usingNewPl = false;
77                     acqSendUploadForm({picklist:items[0].id[0]});
78                 }
79             }
80         });
81     } else {
82         acqSendUploadForm({picklist:null});
83     }
84 }
85
86 function acqSendUploadForm(args) {
87     dojo.io.iframe.send({
88         url: VANDELAY_URL,
89         method: "post",
90         handleAs: "html",
91         form: dojo.byId('acq-pl-upload-form'),
92         handle: function(data, ioArgs){
93             acqHandlePostUpload(data.documentElement.textContent, args.picklist);
94         }
95     });
96 }
97
98
99 function acqHandlePostUpload(key, plId) {
100
101     var args = {
102         picklist : plId,
103         provider : providerWidget.attr('value'),
104         ordering_agency : orderAgencyWidget.attr('value'),
105         create_po : acqPlUploadCreatePo.attr('value'),
106         activate_po : acqPlUploadActivatePo.attr('value'),
107         vandelay : vlAgent.values()
108     };
109
110     fieldmapper.standardRequest(
111         ['open-ils.acq', 'open-ils.acq.process_upload_records'],
112         {   async: true,
113             params: [openils.User.authtoken, key, args],
114             onresponse : function(r) {
115
116                 vlAgent.handleResponse(
117                     openils.Util.readResponse(r),
118                     function(resp, res) {
119
120                         openils.Util.hide('acq-pl-upload-complete-pl');
121                         openils.Util.hide('acq-pl-upload-complete-po');
122                         openils.Util.hide('acq-pl-upload-complete-q');
123                         openils.Util.hide('acq-pl-upload-progress-bar');
124                         openils.Util.show('acq-pl-upload-complete');
125
126                         function activateLink(link, url, name) {
127                             link = dojo.byId(link);
128                             openils.Util.show(link);
129                             if (name) link.innerHTML = name;
130                             if (typeof xulG == 'undefined') { // browser
131                                 link.setAttribute('href', url); 
132                             } else {
133                                 link.setAttribute('href', 'javascript:;'); // for linky-ness
134                                 link.onclick = function() { openils.XUL.newTabEasy(url, null, null, true) };
135                             }
136                         }
137                             
138                         if(res.picklist_url) {
139                             activateLink('acq-pl-upload-complete-pl', res.picklist_url);
140
141                             // if the user entered a new picklist, refetch the set to pick
142                             // up the ID and redraw the list with the new one selected
143                             if (usingNewPl) {
144                                 var newPl = new openils.PermaCrud().retrieve('acqpl', resp.picklist.id());
145                                 acqPlUploadPlSelector.store.newItem(newPl.toStoreItem());
146                                 acqPlUploadPlSelector.attr('value', newPl.name());
147                             }
148                         } 
149
150                         if(res.po_url) {
151                             activateLink('acq-pl-upload-complete-po', res.po_url);
152                         }
153
154                         if (res.queue_url) {
155                             activateLink('acq-pl-upload-complete-q', res.queue_url);
156                         }
157                     }
158                 );
159             },
160         }
161     );
162 }
163
164
165 openils.Util.addOnLoad(init);
166