]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/dojo/openils/acq/Provider.js
Merging acq-experiment to trunk, since rel_1_4 has been branched.
[working/Evergreen.git] / Open-ILS / web / js / dojo / openils / acq / Provider.js
1 /* ---------------------------------------------------------------------------
2  * Copyright (C) 2008  Georgia Public Library Service
3  * Bill Erickson <erickson@esilibrary.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  * ---------------------------------------------------------------------------
15  */
16
17 if(!dojo._hasResource['openils.acq.Provider']) {
18 dojo._hasResource['openils.acq.Provider'] = true;
19 dojo.provide('openils.acq.Provider');
20 dojo.require('fieldmapper.Fieldmapper');
21 dojo.require('fieldmapper.dojoData');
22
23 /** Declare the Provider class with dojo */
24 dojo.declare('openils.acq.Provider', null, {
25     /* add instance methods here if necessary */
26 });
27
28 openils.acq.Provider.cache = {};
29
30 /* define some static provider methods ------- */
31
32 openils.acq.Provider.createStore = function(onComplete, limitPerm) {
33     /** Fetches the list of funding_sources and builds a grid from them */
34
35     function mkStore(r) {
36         var msg;
37         var items = [];
38         while(msg = r.recv()) {
39             var provider = msg.content();
40             openils.acq.Provider.cache[provider.id()] = provider;
41             items.push(provider);
42         }
43         onComplete(acqpro.toStoreData(items));
44     }
45
46     fieldmapper.standardRequest(
47         ['open-ils.acq', 'open-ils.acq.provider.org.retrieve'],
48         {   async: true,
49             params: [openils.User.authtoken],
50             oncomplete: mkStore
51         }
52     );
53 };
54
55
56 /**
57  * Synchronous provider retrievel method 
58  */
59 openils.acq.Provider.retrieve = function(id) {
60     if(openils.acq.Provider.cache[id])
61         return openils.acq.Provider.cache[id];
62
63     openils.acq.Provider.cache[id] = 
64         fieldmapper.standardRequest(
65             ['open-ils.acq', 'open-ils.acq.provider.retrieve'],
66             [openils.User.authtoken, id]
67         );
68     return openils.acq.Provider.cache[id];
69 };
70
71 openils.acq.Provider.create = function(fields, oncomplete) {
72     var provider = new acqpro()
73     for(var field in fields) 
74         provider[field](fields[field]);
75
76     fieldmapper.standardRequest(
77         ['open-ils.acq', 'open-ils.acq.provider.create'],
78         {   async: true,
79             params: [openils.User.authtoken, provider],
80             oncomplete: function(r) {
81                 var msg = r.recv();
82                 var id = msg.content();
83                 if(oncomplete)
84                     oncomplete(id);
85             }
86         }
87     );
88 };
89
90
91 openils.acq.Provider.retrieveLineitemProviderAttrDefs = function(providerId, oncomplete) {
92     fieldmapper.standardRequest(
93         ['open-ils.acq', 'open-ils.acq.lineitem_provider_attr_definition.provider.retrieve.atomic'],
94         {   async: true,
95             params: [openils.User.authtoken, providerId],
96             oncomplete: function(r) {oncomplete(r.recv().content());}
97         }
98     );
99 }
100
101 openils.acq.Provider.createLineitemProviderAttrDef = function(fields, oncomplete) {
102     var attr = new acqlipad();
103     for(var field in fields) 
104         attr[field](fields[field]);
105
106     fieldmapper.standardRequest(
107         ['open-ils.acq', 'open-ils.acq.lineitem_provider_attr_definition.create'],
108         {   async: true,
109             params: [openils.User.authtoken, attr],
110             oncomplete: function(r) {oncomplete(r.recv().content());}
111         }
112     );
113 }
114
115
116 openils.acq.Provider.lineitemProviderAttrDefDeleteList = function(list, oncomplete) {
117     openils.acq.Provider._lineitemProviderAttrDefDeleteList(list, 0, oncomplete);
118 }
119
120 openils.acq.Provider._lineitemProviderAttrDefDeleteList = function(list, idx, oncomplete) {
121     if(idx >= list.length)
122         return oncomplete();
123     fieldmapper.standardRequest(
124         ['open-ils.acq', 'open-ils.acq.lineitem_provider_attr_definition.delete'],
125         {   async: true,
126             params: [openils.User.authtoken, list[idx]],
127             oncomplete: function(r) {
128                 msg = r.recv()
129                 stat = msg.content();
130                 /* XXX CHECH FOR EVENT */
131                 openils.acq.Provider._lineitemProviderAttrDefDeleteList(list, ++idx, oncomplete);
132             }
133         }
134     );
135 }
136
137 openils.acq.Provider.storeCache = [];
138
139 openils.acq.Provider.buildPermProviderSelector = function(perm, selector) {
140     dojo.require('dojo.data.ItemFileReadStore');
141
142     function hookupStore(store) {
143         selector.store = store;
144         selector.startup();
145     }
146
147     function buildPicker(r) {
148         var msg;
149         var providerList = [];
150         while (msg = r.recv()) {
151             var provider = msg.content();
152             providerList.push(provider);
153         }
154
155         var store = new dojo.data.ItemFileReadStore({data:acqpro.toStoreData(providerList)});
156
157         hookupStore(store);
158         openils.acq.Provider.storeCache[perm] = store;
159     }
160
161     if (openils.acq.Provider.storeCache[perm]) {
162         hookupStore(openils.acq.Provider.storeCache[perm]);
163     } else {
164         fieldmapper.standardRequest(
165             ['open-ils.acq', 'open-ils.acq.provider.org.retrieve'],
166             {   params: [openils.User.authtoken, null,
167                          {flesh_summary:1, limit_perm:perm}],
168                 oncomplete: buildPicker,
169                 async: true
170             }
171         )
172     }
173 }
174 }