]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/acq/po/li_search.js
Merging acq-experiment to trunk, since rel_1_4 has been branched.
[working/Evergreen.git] / Open-ILS / web / js / ui / default / acq / po / li_search.js
1 dojo.require('fieldmapper.Fieldmapper');
2 dojo.require('dijit.ProgressBar');
3 dojo.require('dijit.form.Form');
4 dojo.require('dijit.form.TextBox');
5 dojo.require('dijit.form.CheckBox');
6 dojo.require('dijit.form.FilteringSelect');
7 dojo.require('dijit.form.Button');
8 dojo.require("dijit.Dialog");
9 dojo.require('openils.Event');
10 dojo.require('openils.Util');
11 dojo.require('openils.acq.Lineitem');
12 dojo.require('openils.acq.Provider');
13 dojo.require('openils.acq.PO');
14 dojo.require('openils.widget.OrgUnitFilteringSelect');
15
16 var recvCount = 0;
17 var createAssetsSelected = false;
18 var createDebitsSelected = false;
19
20 var lineitems = [];
21
22 function drawForm() {
23     buildProviderSelect(providerSelector);
24 }
25
26 function buildProviderSelect(sel, oncomplete) {
27     openils.acq.Provider.createStore(
28         function(store) {
29             sel.store = new dojo.data.ItemFileReadStore({data:store});
30             if(oncomplete)
31                 oncomplete();
32         },
33         'MANAGE_PROVIDER'
34     );
35 }
36
37 var liReceived;
38 function doSearch(values) {
39     var search = {};
40     for(var v in values) {
41         var val = values[v];
42         if(val != null && val != '')
43             search[v] = val;
44     }
45
46     if(values.state == 'approved')
47         dojo.style('oils-acq-li-search-po-create', 'visibility', 'visible');
48     else
49         dojo.style('oils-acq-li-search-po-create', 'visibility', 'hidden');
50
51     //search = [search, {limit:searchLimit, offset:searchOffset}];
52     search = [search, {}];
53     options = {clear_marc:1, flesh_attrs:1};
54
55     liReceived = 0;
56     lineitems = [];
57     dojo.style('searchProgress', 'visibility', 'visible');
58     fieldmapper.standardRequest(
59         ['open-ils.acq', 'open-ils.acq.lineitem.search'],
60         {   async: true,
61             params: [openils.User.authtoken, search, options],
62             onresponse: handleResult,
63             oncomplete: viewList
64         }
65     );
66 }
67
68 function handleResult(r) {
69     var result = r.recv().content();
70     searchProgress.update({maximum: searchLimit, progress: ++liReceived});
71     lineitems.push(result);
72 }
73
74 function viewList() {
75     dojo.style('searchProgress', 'visibility', 'hidden');
76     dojo.style('oils-acq-li-search-result-grid', 'visibility', 'visible');
77     var store = new dojo.data.ItemFileWriteStore(
78         {data:jub.toStoreData(lineitems, null, 
79             {virtualFields:['estimated_price', 'actual_price']})});
80     var model = new dojox.grid.data.DojoData(
81         null, store, {rowsPerPage: 20, clientSort: true, query:{id:'*'}});
82     JUBGrid.populate(liGrid, model, lineitems);
83 }
84
85 function createPOFromLineitems(fields) {
86     var po = new acqpo();
87     po.provider(newPOProviderSelector.getValue());
88     createAssetsSelected = fields.create_assets;
89     createDebitsSelected = fields.create_debits;
90
91     if(fields.which == 'selected') {
92         // find the selected lineitems
93         var selected = liGrid.selection.getSelected();
94         var selList = [];
95         for(var idx = 0; idx < selected.length; idx++) {
96             var rowIdx = selected[idx];
97             var id = liGrid.model.getRow(rowIdx).id;
98             for(var i = 0; i < lineitems.length; i++) {
99                 var li = lineitems[i];
100                 if(li.id() == id && !li.purchase_order() && li.state() == 'approved')
101                     selList.push(lineitems[i]);
102             }
103         }
104     } else {
105         selList = lineitems;
106     }
107
108     if(selList.length == 0) return;
109
110     openils.acq.PO.create(po, 
111         function(poId) {
112             if(e = openils.Event.parse(poId)) 
113                 return alert(e);
114             updateLiList(poId, selList);
115         }
116     );
117 }
118
119 function updateLiList(poId, selList) {
120     _updateLiList(poId, selList, 0);
121 }
122
123 function checkCreateDebits(poId) {
124     if(!createDebitsSelected)
125         return viewPO(poId);
126     fieldmapper.standardRequest(
127         ['open-ils.acq', 'open-ils.acq.purchase_order.debits.create'],
128         {   async: true,
129             params: [openils.User.authtoken, poId, {encumbrance:1}],
130             oncomplete : function(r) {
131                 var total = r.recv().content();
132                 if(e = openils.Event.parse(total))
133                     return alert(e);
134                 viewPO(poId);
135             }
136         }
137     );
138 }
139
140 function viewPO(poId) {
141     location.href = 'view/' + poId;
142 }
143
144 function _updateLiList(poId, selList, idx) {
145     if(idx >= selList.length) {
146         if(createAssetsSelected)
147             return createAssets(poId);
148         else
149             return checkCreateDebits(poId);
150     }
151     var li = selList[idx];
152     li.purchase_order(poId);
153     li.state('in-process');
154     new openils.acq.Lineitem({lineitem:li}).update(
155         function(stat) {
156             _updateLiList(poId, selList, ++idx);
157         }
158     );
159 }
160
161 function createAssets(poId) {
162     searchProgress.update({progress: 0});
163     dojo.style('searchProgress', 'visibility', 'visible');
164
165     function onresponse(r) {
166         var stat = r.recv().content();
167         if(e = openils.Event.parse(stat))
168             return alert(e);
169         searchProgress.update({maximum: stat.total, progress: stat.progress});
170     }
171
172     function oncomplete(r) {
173         dojo.style('searchProgress', 'visibility', 'hidden');
174         checkCreateDebits(poId);
175     }
176
177     fieldmapper.standardRequest(
178         ['open-ils.acq','open-ils.acq.purchase_order.assets.create'],
179         {   async: true,
180             params: [openils.User.authtoken, poId],
181             onresponse : onresponse,
182             oncomplete : oncomplete
183         }
184     );
185 }
186     
187
188 openils.Util.addOnLoad(drawForm);
189