]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/non_cat_types.js
Correct "temaplate" typo
[Evergreen.git] / Open-ILS / xul / staff_client / server / admin / non_cat_types.js
1 var FETCH_NON_CAT_TYPES = "open-ils.circ:open-ils.circ.non_cat_types.retrieve.all";
2 var CREATE_NON_CAT_TYPE = "open-ils.circ:open-ils.circ.non_cat_type.create";
3 var UPDATE_NON_CAT_TYPE = "open-ils.circ:open-ils.circ.non_cat_type.update";
4 var DELETE_NON_CAT_TYPE = 'open-ils.circ:open-ils.circ.non_cataloged_type.delete';
5 var myPerms = [ 
6         'CREATE_NON_CAT_TYPE', 
7         'UPDATE_NON_CAT_TYPE',
8         'DELETE_NON_CAT_TYPE' ];
9
10 function ncEditorInit() {
11         fetchUser();
12         $('nc_user').appendChild(text(USER.usrname()));
13         setTimeout( function() { 
14                 fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
15                 ncBuildNew();
16                 ncFetchTypes(); }, 20 );
17 }
18
19
20 function ncBuildNew() {
21
22         var name = $('nc_new_name');
23         name.focus();
24
25         var org = findOrgUnit(PERMS['CREATE_NON_CAT_TYPE']);
26         var mydepth = findOrgDepth(org);
27         if( mydepth == -1 ) return;
28
29         var selector = $('nc_new_owner');
30         buildOrgSel(selector, org, mydepth );
31         if(org.children() && org.children()[0]) 
32                 selector.disabled = false;
33
34         $('nc_new_submit').disabled = false;
35         $('nc_new_submit').onclick = ncCreateNew;
36 }
37
38
39 function ncFetchTypes() {
40         var req = new Request( FETCH_NON_CAT_TYPES, USER.home_ou() );   
41         req.callback(ncDisplayTypes);
42         setTimeout(function(){req.send();}, 500);
43 }
44
45 function ncCreateNew() {
46         var name = $('nc_new_name').value;
47         if(!name) return;
48         var org = getSelectorVal($('nc_new_owner'));
49         var time = $('nc_new_interval_count').value;
50         var type = getSelectorVal($('nc_new_interval_type'));
51         var inh = $('nc_new_inhouse').checked ? 1 : null;
52
53         var req = new Request(CREATE_NON_CAT_TYPE, SESSION, name, org, time + ' ' + type, inh );
54         req.request.alertEvent = false;
55         req.send(true);
56         var res = req.result();
57
58         if(checkILSEvent(res)) {
59                 if( res.textcode == 'NON_CAT_TYPE_EXISTS' )
60                         return alertId('nc_type_exists');
61                 alert(js2JSON(res));
62         }
63
64         alertId('nc_update_success');
65         ncFetchTypes();
66 }
67
68
69 var rowTemplate;
70 function ncDisplayTypes(r) {
71
72         var types = r.getResultObject();
73         var tbody = $('nc_tbody');
74         if(!rowTemplate) 
75                 rowTemplate = tbody.removeChild($('nc_row_template'));
76
77         removeChildren(tbody);
78         types = types.sort( 
79                 function(a,b) {
80                         try {
81                                 if( a.name()+''.toLowerCase() > b.name()+''.toLowerCase() ) return 1;   
82                                 if( a.name()+''.toLowerCase() < b.name()+''.toLowerCase() ) return -1;  
83                         } catch(e) {}
84                         return 0;
85                 });
86
87         for( var idx = 0; idx != types.length; idx++ ) {
88
89                 var type = types[idx];
90                 var org = findOrgUnit( type.owning_lib() );
91                 var row = rowTemplate.cloneNode(true);
92
93
94                 row.id = 'nc_row_' + type.id();
95                 $n(row, 'nc_name').appendChild(text(type.name()));
96                 $n(row, 'nc_owner').appendChild(text(org.name()));
97                 $n(row, 'nc_inhouse').checked = isTrue(type.in_house());
98
99                 var idata = _splitInterval(type.circ_duration());
100                 $n(row, 'nc_interval_count').value = idata[0];
101                 setSelector( $n(row, 'nc_interval_type'), idata[1]);
102
103                 ncSetRowCallbacks( type, org, tbody, row );
104                 tbody.appendChild(row);
105         }
106 }
107
108 /* this is a kind of brittle, but works with the data we create */
109 function _splitInterval( interval ) {
110         interval = interval.split(/ /);
111         var time = interval[0];
112         var type = interval[1];
113          
114         if( time.match(/:/) ) {
115                 var d = time.split(/:/);
116                 if(d[0] == '00') return [ d[1], 'minutes' ];
117                 if(d[0] != '00' && d[1] != '00')
118                         return [ parseInt(d[1]) + (d[0]*60), 'minutes' ];
119                 return [ d[0], 'hours' ]
120         }
121
122         if( type.match(/mi/i) ) return [ time, 'minutes' ];
123         if( type.match(/h/i) ) return [ time, 'hours' ];
124         if( type.match(/d/i) ) return [ time, 'days' ];
125         if( type.match(/w/i) ) return [ time, 'weeks' ];
126         if( type.match(/mo/i) ) return [ time, 'months' ];
127 }
128
129 function ncSetRowCallbacks( type, owner, tbody, row ) {
130
131         checkDisabled( $n(row, 'nc_edit'), owner, 'UPDATE_NON_CAT_TYPE');
132
133         checkDisabled( $n(row, 'nc_delete'), owner, 'DELETE_NON_CAT_TYPE' );
134
135         $n(row, 'nc_edit').onclick = 
136                 function() { ncEditType( tbody, row, type ); };
137
138         $n(row, 'nc_delete').onclick = 
139                 function() { ncDeleteType( tbody, row, type ); };
140 }
141
142 function ncEditType( tbody, row, type ) {
143         cleanTbody(row.parentNode, 'edit');
144         var row = $('nc_edit_row_template').cloneNode(true);
145
146         var name = $n(row, 'nc_edit_name');
147         name.value = type.name();
148
149         var idata = _splitInterval(type.circ_duration());
150         $n(row, 'nc_edit_interval_count').value = idata[0];
151         setSelector( $n(row, 'nc_edit_interval_type'), idata[1]);
152
153         $n(row, 'nc_edit_inhouse').checked = isTrue(type.in_house());
154         $n(row, 'nc_edit_owner').appendChild(text( findOrgUnit(type.owning_lib()).name() ));
155
156         $n(row, 'nc_edit_submit').onclick = function() { 
157                 var name = $n(row, 'nc_edit_name').value;
158                 var time = $n(row, 'nc_edit_interval_count').value;
159                 var tp = getSelectorVal($n(row, 'nc_edit_interval_type'));
160                 var inh = $n(row, 'nc_edit_inhouse').checked ? 't' : 'f';
161                 ncEditSubmit( type, name, time + ' ' + tp, inh );
162         };
163
164         $n(row, 'nc_edit_cancel').onclick = 
165                 function(){cleanTbody(row.parentNode, 'edit'); }
166
167         var r = $('nc_row_' + type.id());
168         if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
169         else{ tbody.appendChild(row); }
170
171         name.focus();
172         name.select();
173 }
174
175 function ncEditSubmit( type, name, interval, inhouse ) {
176         if(!name) return;
177         type.name(name);
178         type.circ_duration(interval);
179         type.in_house(inhouse);
180         var req = new Request( UPDATE_NON_CAT_TYPE, SESSION, type );
181         req.send(true);
182         var res = req.result();
183         if(checkILSEvent(res)) throw res;
184         alertId('nc_update_success');
185         ncFetchTypes();
186 }
187
188 function ncDeleteType( tbody, row, type ) {
189         if( ! confirm($('nc_delete_confirm').innerHTML) ) return;
190         var req = new Request(DELETE_NON_CAT_TYPE, SESSION, type.id());
191         req.callback( 
192                 function(r) {
193                         var res = r.getResultObject();
194                         if(checkILSEvent(res)) alertILSEvent(res);
195                         alertId('nc_update_success');
196                         ncFetchTypes();
197                 }
198         );
199         req.send();
200 }
201
202
203
204