1 var FETCH_CLOSED_DATES = 'open-ils.actor:open-ils.actor.org_unit.closed.retrieve.all';
2 var FETCH_CLOSED_DATE = 'open-ils.actor:open-ils.actor.org_unit.closed.retrieve';
3 var CREATE_CLOSED_DATE = 'open-ils.actor:open-ils.actor.org_unit.closed.create';
4 var DELETE_CLOSED_DATE = 'open-ils.actor:open-ils.actor.org_unit.closed.delete';
8 var cdAllMultiDayTemplate;
20 'actor.org_unit.closed_date.delete',
21 'actor.org_unit.closed_date.create',
24 function cdEditorInit() {
26 /* set the various template rows */
27 cdTbody = $('cd_tbody');
28 cdRowTemplate = cdTbody.removeChild($('cd_row'));
29 cdAllDayTemplate = cdTbody.removeChild($('cd_allday_row'));
30 cdAllMultiDayTemplate = cdTbody.removeChild($('cd_allmultiday_row'));
35 $('cd_user').appendChild(text(USER.usrname()));
39 fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
47 function cdCurrentOrg() {
48 var selector = $('cd_orgs');
49 return getSelectorVal(selector);
52 function cdBuildOrgs() {
53 var org = findOrgUnit(PERMS['actor.org_unit.closed_date.create']);
54 if( !org || org == -1 ) org = findOrgUnit(USER.ws_ou());
55 var type = findOrgType(org.ou_type()) ;
57 var selector = $('cd_orgs');
58 buildOrgSel(selector, org, type.depth());
59 if(!type.can_have_users()) selector.options[0].disabled = true;
62 selector.onchange = function() { cdDrawRange(); };
66 if( cdBaseOrg.children() && cdBaseOrg.children().length > 0 )
67 unHideMe($('cd_apply_all_div'));
69 var gotoOrg = USER.ws_ou();
70 if( ! setSelector( selector, gotoOrg ) ) {
71 gotoOrg = USER.home_ou();
72 setSelector( selector, gotoOrg );
75 var neworg = findOrgUnit(PERMS['actor.org_unit.closed_date.create']);
76 if(!neworg || neworg == -1 || !orgIsMine(neworg, findOrgUnit(cdCurrentOrg()))) {
77 $('cd_new_allday').disabled = true;
78 $('cd_new_multiday').disabled = true;
79 $('cd_new').disabled = true;
85 function cdInitCals() {
88 inputField : "cd_edit_allday_start_date",
89 ifFormat : "%Y-%m-%d",
90 button : "cd_edit_allday_start_date_img",
96 inputField : "cd_edit_allmultiday_start_date",
97 ifFormat : "%Y-%m-%d",
98 button : "cd_edit_allmultiday_start_date_img",
104 inputField : "cd_edit_allmultiday_end_date",
105 ifFormat : "%Y-%m-%d",
106 button : "cd_edit_allmultiday_end_date_img",
112 inputField : "cd_edit_end_date",
113 ifFormat : "%Y-%m-%d",
114 button : "cd_edit_end_date_img",
120 inputField : "cd_edit_start_date",
121 ifFormat : "%Y-%m-%d",
122 button : "cd_edit_start_date_img",
130 function cdDrawRange( start, end ) {
131 start = (start) ? start : new Date().getYear() + 1900 + '-01-01';
132 end = (end) ? end : '3001-01-01';
134 selectedStart = start;
137 var req = new Request(
138 FETCH_CLOSED_DATES, SESSION,
140 orgid : cdCurrentOrg(),
147 req.callback( cdBuild );
151 /* adds one row in the display table per date */
152 function cdBuild(r) {
153 var dates = r.getResultObject();
154 removeChildren(cdTbody);
155 for( var d = 0; d < dates.length; d++ ) {
157 var row = cdBuildRow( date );
158 cdTbody.appendChild(row);
162 function cdDateToHours(date) {
163 var d = new Date.W3CDTF();
164 d.setW3CDTF(date.replace(/\.\d+/,'') + ":00");
166 var h = d.getHours() +'';
167 var m = d.getMinutes() +'';
168 var s = d.getSeconds() +'';
170 if(h.length == 1) h = '0'+h;
171 if(m.length == 1) m = '0'+m;
172 if(s.length == 1) s = '0'+s;
174 return h + ':' + m + ':' + s;
177 function cdDateToDate(date) {
178 var d = new Date.W3CDTF();
179 d.setW3CDTF(date.replace(/\.\d+/,'') + ":00");
181 var y = d.getFullYear()+'';
182 var m = (d.getMonth() + 1)+'';
183 var d = d.getDate()+'';
185 if(m.length == 1) m = '0'+m;
186 if(d.length == 1) d = '0'+d;
188 return y + '-' + m + '-' + d;
192 /* fleshes a single date */
193 function cdBuildRow( date ) {
195 cdDateCache[date.id()] = date;
197 var sh = cdDateToHours(date.close_start());
198 var sd = cdDateToDate(date.close_start());
199 var eh = cdDateToHours(date.close_end());
200 var ed = cdDateToDate(date.close_end());
205 if( sh == '00:00:00' && eh == '23:59:59' ) {
208 row = cdAllDayTemplate.cloneNode(true);
209 $n(row, 'start_date').appendChild(text(sd));
212 row = cdAllMultiDayTemplate.cloneNode(true);
213 $n(row, 'start_date').appendChild(text(sd));
214 $n(row, 'end_date').appendChild(text(ed));
219 row = cdRowTemplate.cloneNode(true);
220 cdEditFleshRow(row, date);
223 $n(row,'delete').onclick = function() { cdDelete(row, date); };
224 $n(row, 'note').appendChild(text(date.reason()));
226 /* if we don't have delete perms for this location, disable the button */
227 var delorg = findOrgUnit(PERMS['actor.org_unit.closed_date.delete']);
228 if(!orgIsMine(delorg, findOrgUnit(cdCurrentOrg()))) $n(row,'delete').disabled = true;
233 function cdEditFleshRow(row, date) {
234 $n(row, 'start_time').appendChild(text(cdDateToHours(date.close_start())));
235 $n(row, 'start_date').appendChild(text(cdDateToDate(date.close_start())));
236 $n(row, 'end_time').appendChild(text(cdDateToHours(date.close_end())));
237 $n(row, 'end_date').appendChild(text(cdDateToDate(date.close_end())));
241 function cdShowEditRow(id) {
244 unHideMe($('cd_edit_submit'));
245 unHideMe($('cd_edit_note_row'));
248 function cdCancelEdit() {
249 hideMe($('cd_edit_row'));
250 hideMe($('cd_edit_allday_row'));
251 hideMe($('cd_edit_allmultiday_row'));
252 hideMe($('cd_edit_submit'));
253 hideMe($('cd_edit_note_row'));
259 function cdDelete(row, date) {
260 if(!confirmId('cd_confirm_delete')) return;
261 var req = new Request(DELETE_CLOSED_DATE, SESSION, date.id() );
264 var res = r.getResultObject();
265 if( checkILSEvent(res) ) alertILSEvent(res);
266 cdDrawRange(selectedStart, selectedEnd);
275 function cdVerifyDate(d) {
276 return d && d.match(/\d{4}-\d{2}-\d{2}/);
279 function cdVerifyTime(t) {
280 return t && t.match(/\d{2}:\d{2}:\d{2}/);
283 function cdDateStrToDate( str ) {
285 var date = new Date.W3CDTF();
286 var data = str.split(/ /);
291 if(!cdVerifyDate(year)) return alertId('cd_invalid_date');
292 if(!cdVerifyTime(time)) return alertId('cd_invalid_time');
294 var yeardata = year.split(/-/);
295 var timedata = time.split(/:/);
297 date.setFullYear(yeardata[0]);
298 date.setMonth(yeardata[1] - 1);
299 date.setDate(yeardata[2]);
301 date.setHours(timedata[0]);
302 date.setMinutes(timedata[1]);
303 date.setSeconds(timedata[2]);
313 if( ! $('cd_edit_allday_row').className.match(/hide_me/) ) {
315 var date = $('cd_edit_allday_start_date').value;
316 start = cdDateStrToDate(date + ' 00:00:00');
317 end = cdDateStrToDate(date + ' 23:59:59');
319 } else if( ! $('cd_edit_allmultiday_row').className.match(/hide_me/) ) {
321 var sdate = $('cd_edit_allmultiday_start_date').value;
322 var edate = $('cd_edit_allmultiday_end_date').value;
323 start = cdDateStrToDate(sdate + ' 00:00:00');
324 end = cdDateStrToDate(edate + ' 23:59:59');
328 var sdate = $('cd_edit_start_date').value;
329 var edate = $('cd_edit_end_date').value;
333 if($('cd_edit_start_time_allday').checked) {
336 stime = $('cd_edit_start_time').value;
341 if($('cd_edit_end_time_allday').checked) {
344 etime = $('cd_edit_end_time').value;
348 start = cdDateStrToDate(sdate + ' ' + stime);
349 end = cdDateStrToDate(edate + ' ' + etime);
352 cdCreate(start, end, $('cd_edit_note').value);
355 function cdCreate(start, end, note) {
357 if( $('cd_apply_all').checked ) {
358 var list = cdGetOrgList();
359 for( var o = 0; o < list.length; o++ ) {
360 var id = list[o].id();
361 cdCreateOne( id, start, end, note, (id == cdCurrentOrg()) );
366 cdCreateOne( cdCurrentOrg(), start, end, note, true );
370 function cdGetOrgList(org) {
371 if(!org) org = cdBaseOrg;
374 var type = findOrgType(org.ou_type()) ;
375 if( type.can_have_users() ) list.push(org);
377 if( org.children() ) {
378 for( var i = 0; i < org.children().length; i++ ) {
379 var child = org.children()[i];
381 var l = cdGetOrgList(child);
382 for( var j = 0; j < l.length; j++ )
392 function cdCreateOne( org, start, end, note, refresh ) {
393 var date = new aoucd();
395 date.close_start(start.getW3CDTF());
396 date.close_end(end.getW3CDTF());
400 var req = new Request(CREATE_CLOSED_DATE, SESSION, date);
403 var res = r.getResultObject();
404 if( checkILSEvent(res) ) alertILSEvent(res);
405 if(refresh) cdDrawRange(selectedStart, selectedEnd);