1 var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};
2 var FETCH_CLOSED_DATES = 'open-ils.actor:open-ils.actor.org_unit.closed.retrieve.all';
3 var FETCH_CLOSED_DATE = 'open-ils.actor:open-ils.actor.org_unit.closed.retrieve';
4 var CREATE_CLOSED_DATE = 'open-ils.actor:open-ils.actor.org_unit.closed.create';
5 var DELETE_CLOSED_DATE = 'open-ils.actor:open-ils.actor.org_unit.closed.delete';
9 var cdAllMultiDayTemplate;
21 'actor.org_unit.closed_date.delete',
22 'actor.org_unit.closed_date.create',
25 function cdEditorInit() {
27 /* set the various template rows */
28 cdTbody = $('cd_tbody');
29 cdRowTemplate = cdTbody.removeChild($('cd_row'));
30 cdAllDayTemplate = cdTbody.removeChild($('cd_allday_row'));
31 cdAllMultiDayTemplate = cdTbody.removeChild($('cd_allmultiday_row'));
36 $('cd_user').appendChild(text(USER.usrname()));
40 fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
48 function cdCurrentOrg() {
49 var selector = $('cd_orgs');
50 return getSelectorVal(selector);
53 function cdBuildOrgs() {
54 var org = findOrgUnit(PERMS['actor.org_unit.closed_date.create']);
55 if( !org || org == -1 ) org = findOrgUnit(USER.ws_ou());
56 var type = findOrgType(org.ou_type()) ;
58 var selector = $('cd_orgs');
59 buildOrgSel(selector, org, type.depth());
60 if(!type.can_have_users()) selector.options[0].disabled = true;
63 selector.onchange = function() { cdDrawRange(); };
67 if( cdBaseOrg.children() && cdBaseOrg.children().length > 0 )
68 unHideMe($('cd_apply_all_div'));
70 var gotoOrg = USER.ws_ou();
71 if( ! setSelector( selector, gotoOrg ) ) {
72 gotoOrg = USER.home_ou();
73 setSelector( selector, gotoOrg );
76 var neworg = findOrgUnit(PERMS['actor.org_unit.closed_date.create']);
77 if(!neworg || neworg == -1 || !orgIsMine(neworg, findOrgUnit(cdCurrentOrg()))) {
78 $('cd_new_allday').disabled = true;
79 $('cd_new_multiday').disabled = true;
80 $('cd_new').disabled = true;
86 function cdInitCals() {
89 inputField : "cd_edit_allday_start_date",
90 ifFormat : "%Y-%m-%d",
91 button : "cd_edit_allday_start_date_img",
97 inputField : "cd_edit_allmultiday_start_date",
98 ifFormat : "%Y-%m-%d",
99 button : "cd_edit_allmultiday_start_date_img",
105 inputField : "cd_edit_allmultiday_end_date",
106 ifFormat : "%Y-%m-%d",
107 button : "cd_edit_allmultiday_end_date_img",
113 inputField : "cd_edit_end_date",
114 ifFormat : "%Y-%m-%d",
115 button : "cd_edit_end_date_img",
121 inputField : "cd_edit_start_date",
122 ifFormat : "%Y-%m-%d",
123 button : "cd_edit_start_date_img",
131 function cdDrawRange( start, end, alertSuccess ) {
132 start = (start) ? start : new Date().getYear() + 1899 + '-01-01'; /* include last year's closed info for comparison */
133 end = (end) ? end : '3001-01-01';
135 if(alertSuccess) alertId('cd_update_success');
137 selectedStart = start;
140 var req = new Request(
141 FETCH_CLOSED_DATES, SESSION,
143 orgid : cdCurrentOrg(),
150 req.callback( cdBuild );
154 /* adds one row in the display table per date */
155 function cdBuild(r) {
156 var dates = r.getResultObject();
157 removeChildren(cdTbody);
158 for( var d = 0; d < dates.length; d++ ) {
160 var row = cdBuildRow( date );
161 cdTbody.appendChild(row);
165 function cdDateToHours(date) {
166 var date_obj = new Date(Date.parse(date));
167 var hrs = date_obj.getHours();
168 var mins = date_obj.getMinutes();
170 if (hrs < 10) hrs = '0' + hrs;
171 if (mins < 10) mins = '0' + mins;
172 return hrs + ':' + mins;
175 function cdDateToDate(date) {
176 var date_obj = new Date(Date.parse(date));
177 return date_obj.toLocaleDateString();
181 /* fleshes a single date */
182 function cdBuildRow( date ) {
184 cdDateCache[date.id()] = date;
186 var sh = cdDateToHours(date.close_start());
187 var sd = cdDateToDate(date.close_start());
188 var eh = cdDateToHours(date.close_end());
189 var ed = cdDateToDate(date.close_end());
194 if( sh == '00:00' && eh == '23:59' ) {
197 row = cdAllDayTemplate.cloneNode(true);
198 $n(row, 'start_date').appendChild(text(sd));
201 row = cdAllMultiDayTemplate.cloneNode(true);
202 $n(row, 'start_date').appendChild(text(sd));
203 $n(row, 'end_date').appendChild(text(ed));
208 row = cdRowTemplate.cloneNode(true);
209 cdEditFleshRow(row, date);
212 $n(row,'delete').onclick = function() { cdDelete(row, date); };
213 $n(row, 'note').appendChild(text(date.reason()));
215 /* if we don't have delete perms for this location, disable the button */
216 var delorg = findOrgUnit(PERMS['actor.org_unit.closed_date.delete']);
217 if(!orgIsMine(delorg, findOrgUnit(cdCurrentOrg()))) $n(row,'delete').disabled = true;
222 function cdEditFleshRow(row, date) {
223 $n(row, 'start_time').appendChild(text(cdDateToHours(date.close_start())));
224 $n(row, 'start_date').appendChild(text(cdDateToDate(date.close_start())));
225 $n(row, 'end_time').appendChild(text(cdDateToHours(date.close_end())));
226 $n(row, 'end_date').appendChild(text(cdDateToDate(date.close_end())));
230 function cdShowEditRow(id) {
233 unHideMe($('cd_edit_submit'));
234 unHideMe($('cd_edit_note_row'));
237 function cdCancelEdit() {
238 hideMe($('cd_edit_row'));
239 hideMe($('cd_edit_allday_row'));
240 hideMe($('cd_edit_allmultiday_row'));
241 hideMe($('cd_edit_submit'));
242 hideMe($('cd_edit_note_row'));
248 function cdDelete(row, date) {
249 if(!confirmId('cd_confirm_delete')) return;
250 var req = new Request(DELETE_CLOSED_DATE, SESSION, date.id() );
253 var res = r.getResultObject();
254 if( checkILSEvent(res) ) alertILSEvent(res);
255 cdDrawRange(selectedStart, selectedEnd, true);
262 function cdVerifyDate(d) {
263 return d && d.match(/\d{4}-\d{2}-\d{2}/);
266 function cdVerifyTime(t) {
267 return t && t.match(/\d{2}:\d{2}:\d{2}/);
270 function cdDateStrToDate( str ) {
272 var date = new Date();
273 var data = str.split(/ /);
278 if(!cdVerifyDate(year)) return alertId('cd_invalid_date');
279 if(!cdVerifyTime(time)) return alertId('cd_invalid_time');
281 var yeardata = year.split(/-/);
282 var timedata = time.split(/:/);
284 /* seed the date with day = 1, which is a valid day for any month.
285 this prevents automatic date correction by the date code for days that
286 fall outside of the current or target month */
289 date.setFullYear(new Number(yeardata[0]));
290 date.setMonth(new Number(yeardata[1]) - 1);
291 date.setDate(new Number(yeardata[2]));
293 date.setHours(new Number(timedata[0]));
294 date.setMinutes(new Number(timedata[1]));
295 date.setSeconds(new Number(timedata[2]));
305 if( ! $('cd_edit_allday_row').className.match(/hide_me/) ) {
307 var date = $('cd_edit_allday_start_date').value;
309 start = cdDateStrToDate(date + ' 00:00:00');
310 end = cdDateStrToDate(date + ' 23:59:59');
312 } else if( ! $('cd_edit_allmultiday_row').className.match(/hide_me/) ) {
314 var sdate = $('cd_edit_allmultiday_start_date').value;
315 var edate = $('cd_edit_allmultiday_end_date').value;
316 start = cdDateStrToDate(sdate + ' 00:00:00');
317 end = cdDateStrToDate(edate + ' 23:59:59');
321 var sdate = $('cd_edit_start_date').value;
322 var edate = $('cd_edit_end_date').value;
326 if($('cd_edit_start_time_allday').checked) {
329 stime = $('cd_edit_start_time').value;
334 if($('cd_edit_end_time_allday').checked) {
337 etime = $('cd_edit_end_time').value;
341 start = cdDateStrToDate(sdate + ' ' + stime);
342 end = cdDateStrToDate(edate + ' ' + etime);
345 if (end.getTime() < start.getTime()) {
346 alertId('cd_invalid_date_span');
350 cdCreate(start, end, $('cd_edit_note').value);
353 function cdCreate(start, end, note) {
355 if( $('cd_apply_all').checked ) {
356 var list = cdGetOrgList();
357 for( var o = 0; o < list.length; o++ ) {
358 var id = list[o].id();
359 cdCreateOne( id, start, end, note, (id == cdCurrentOrg()) );
364 cdCreateOne( cdCurrentOrg(), start, end, note, true );
368 function cdGetOrgList(org) {
369 if(!org) org = cdBaseOrg;
372 var type = findOrgType(org.ou_type()) ;
373 if( type.can_have_users() ) list.push(org);
375 if( org.children() ) {
376 for( var i = 0; i < org.children().length; i++ ) {
377 var child = org.children()[i];
379 var l = cdGetOrgList(child);
380 for( var j = 0; j < l.length; j++ )
390 function cdCreateOne( org, start, end, note, refresh ) {
391 var date = new aoucd();
393 date.close_start(start.toISOString());
394 date.close_end(end.toISOString());
398 var req = new Request(CREATE_CLOSED_DATE, SESSION, date);
401 var res = r.getResultObject();
402 if( checkILSEvent(res) ) alertILSEvent(res);
403 if(refresh) cdDrawRange(selectedStart, selectedEnd, true);