+ // drop event
+ function reschedule_appointment( event, ui ) {
+
+ var $this = $(this);
+
+ if (!can_drop($this, ui)) return;
+
+% #get the ticket number and appointment length (from the draggable object)
+ var draggable = ui.draggable;
+ var ticketid = draggable.data('ticketid');
+ var length = draggable.data('length');
+ var bgcolor = draggable.data('bgcolor');
+ var offset = draggable.data('offset');
+
+% #and.. the new date and time, and username (from the droppable object)
+ var starts = $this.data('starts');
+ var username = $this.data('username');
+ var due = parseInt(starts) + parseInt(length);
+ var n_epoch = $this.data('epoch');
+ var n_st_tod_row = $this.data('tod_row');
+
+ var droppable = $this;
+ draggable.effect( "transfer", { to: droppable }, 420 );
+
+% #tell the backend to reschedule it
+ var url = "<% popurl(3) %>misc/xmlhttp-ticket-update.html?" +
+ "id=" + ticketid + ";starts=" + starts + ";due=" + due +
+ ";username=" + username;
+
+ $.getJSON( url, function( data ) {
+ if ( data.error && data.error.length ) {
+% #error? "that shouldn't happen" but should display
+ alert(data.error);
+
+ } else {
+
+ var label = data.sched_label;
+
+ // jump to first cell in appointment
+ var rownum = draggable.parent().prevAll('tr').length;
+ var colnum = draggable.prevAll('td').length;
+ draggable = draggable.parent().parent().children('tr').eq(rownum-offset).children('td').eq(colnum);
+
+ // remove old appointment entirely
+ var epoch = draggable.data('epoch');
+ var st_tod_row = draggable.data('tod_row');
+ var old_username = draggable.data('username');
+ var cells = draggable.data('cells');
+ for ( var c=0; c < cells; c++) {
+ var tod_row = parseInt(st_tod_row) + (c * <%$timestep%>);
+ var td_id = 'td_' + epoch +
+ '_' + String( tod_row ) +
+ '_' + old_username;
+ var $cell = $('#'+td_id);
+ set_schedulable_cell($cell);
+ $cell.draggable('destroy');
+ set_droppable_cell($cell);
+ }
+
+ // set appointment in new position
+ clear_drag_hi(cells);
+ for ( var d=0; d < cells; d++) {
+ var n_tod_row = parseInt(n_st_tod_row) + (d * <%$timestep%>);
+ var n_td_id = 'td_' + n_epoch +
+ '_' + String( n_tod_row ) +
+ '_' + username;
+ var $cell = $('#'+n_td_id);
+ set_appointment_cell($cell,ticketid,bgcolor,label,length,cells,d);
+ set_draggable_cell($cell);
+ set_droppable_cell($cell);
+ }
+ }
+ });
+ }
+
+% } # end of rescheduling functions
+