]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/non_cat_types.js
added duration editing
[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         setEnterFunc(name, ncCreateNew );
25
26         var org = findOrgUnit(PERMS['CREATE_NON_CAT_TYPE']);
27         var mydepth = findOrgDepth(org);
28         if( mydepth == -1 ) return;
29
30         var selector = $('nc_new_owner');
31         buildOrgSel(selector, org, mydepth );
32         if(org.children() && org.children()[0]) 
33                 selector.disabled = false;
34
35         $('nc_new_submit').disabled = false;
36         $('nc_new_submit').onclick = ncCreateNew;
37 }
38
39
40 function ncFetchTypes() {
41         var req = new Request( FETCH_NON_CAT_TYPES, USER.home_ou() );   
42         req.callback(ncDisplayTypes);
43         req.send();
44 }
45
46 function ncCreateNew() {
47         var name = $('nc_new_name').value;
48         if(!name) return;
49         var org = getSelectorVal($('nc_new_owner'));
50         var time = $('nc_new_interval_count').value;
51         var type = getSelectorVal($('nc_new_interval_type'));
52         var req = new Request(CREATE_NON_CAT_TYPE, SESSION, name, org, time + ' ' + type );
53         req.send(true);
54         var res = req.result();
55         if(checkILSEvent(res)) throw res;
56         ncFetchTypes();
57 }
58
59
60 var rowTemplate;
61 function ncDisplayTypes(r) {
62
63         var types = r.getResultObject();
64         var tbody = $('nc_tbody');
65         if(!rowTemplate) 
66                 rowTemplate = tbody.removeChild($('nc_row_template'));
67
68         removeChildren(tbody);
69         types = types.sort( 
70                 function(a,b) {
71                         if( a.name().toLowerCase() > b.name().toLowerCase() ) return 1; 
72                         if( a.name().toLowerCase() < b.name().toLowerCase() ) return -1;        
73                         return 0;
74                 });
75
76         for( var idx = 0; idx != types.length; idx++ ) {
77
78                 var type = types[idx];
79                 var org = findOrgUnit( type.owning_lib() );
80                 var row = rowTemplate.cloneNode(true);
81
82                 row.id = 'nc_row_' + type.id();
83                 $n(row, 'nc_name').appendChild(text(type.name()));
84                 $n(row, 'nc_owner').appendChild(text(org.name()));
85
86                 var idata = _splitInterval(type.circ_duration());
87                 $n(row, 'nc_interval_count').value = idata[0];
88                 setSelector( $n(row, 'nc_interval_type'), idata[1]);
89
90                 ncSetRowCallbacks( type, org, tbody, row );
91                 tbody.appendChild(row);
92         }
93 }
94
95 /* this is a kind of brittle, but works with the data we create */
96 function _splitInterval( interval ) {
97         interval = interval.split(/ /);
98         var time = interval[0];
99         var type = interval[1];
100         if( time.match(/:/) ) return [ time.replace(/(\d{2}):\d{2}:\d{2}/,'$1'), 'hours' ];
101         if( type.match(/h/) ) return [ time, 'hours' ];
102         if( type.match(/d/) ) return [ time, 'days' ];
103         if( type.match(/w/) ) return [ time, 'weeks' ];
104         if( type.match(/m/) ) return [ time, 'months' ];
105 }
106
107 function ncSetRowCallbacks( type, owner, tbody, row ) {
108
109         checkDisabled( $n(row, 'nc_edit'), owner, 'UPDATE_NON_CAT_TYPE');
110
111         /*
112         mydepth = findOrgDepth( PERMS['DELETE_NON_CAT_TYPE'] );
113         if( mydepth != -1 && mydepth <= tdepth ) $n(row, 'nc_delete').disabled = false;
114         */
115         checkDisabled( $n(row, 'nc_delete'), owner, 'DELETE_NON_CAT_TYPE' );
116
117         $n(row, 'nc_edit').onclick = 
118                 function() { ncEditType( tbody, row, type ); };
119
120         $n(row, 'nc_delete').onclick = 
121                 function() { ncDeleteType( tbody, row, type ); };
122 }
123
124 function ncEditType( tbody, row, type ) {
125         cleanTbody(row.parentNode, 'edit');
126         var row = $('nc_edit_row_temaplate').cloneNode(true);
127
128         var name = $n(row, 'nc_edit_name');
129         name.value = type.name();
130
131         var idata = _splitInterval(type.circ_duration());
132         $n(row, 'nc_edit_interval_count').value = idata[0];
133         setSelector( $n(row, 'nc_edit_interval_type'), idata[1]);
134
135         $n(row, 'nc_edit_submit').onclick = function() { 
136                 var name = $n(row, 'nc_edit_name').value;
137                 var time = $n(row, 'nc_edit_interval_count').value;
138                 var tp = getSelectorVal($n(row, 'nc_edit_interval_type'));
139                 ncEditSubmit( type, name, time + ' ' + tp );
140         };
141
142         $n(row, 'nc_edit_cancel').onclick = 
143                 function(){cleanTbody(row.parentNode, 'edit'); }
144
145         var r = $('nc_row_' + type.id());
146         if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
147         else{ tbody.appendChild(row); }
148
149         name.focus();
150         name.select();
151 }
152
153 function ncEditSubmit( type, name, interval ) {
154         if(!name) return;
155         type.name(name);
156         type.circ_duration(interval);
157         var req = new Request( UPDATE_NON_CAT_TYPE, SESSION, type );
158         req.send(true);
159         var res = req.result();
160         if(checkILSEvent(res)) throw res;
161         ncFetchTypes();
162 }
163
164 function ncDeleteType( tbody, row, type ) {
165         if( ! confirm($('nc_delete_confirm').innerHTML) ) return;
166         var req = new Request(DELETE_NON_CAT_TYPE, SESSION, type.id());
167         req.callback( 
168                 function(r) {
169                         var res = r.getResultObject();
170                         if(checkILSEvent(res)) alertILSEvent(res);
171                         ncFetchTypes();
172                 }
173         );
174         req.send();
175 }
176
177
178
179