summaryrefslogtreecommitdiff
path: root/rt/share/html/Search/Schedule.html
diff options
context:
space:
mode:
Diffstat (limited to 'rt/share/html/Search/Schedule.html')
-rw-r--r--rt/share/html/Search/Schedule.html174
1 files changed, 163 insertions, 11 deletions
diff --git a/rt/share/html/Search/Schedule.html b/rt/share/html/Search/Schedule.html
index 34ba142..be5a140 100644
--- a/rt/share/html/Search/Schedule.html
+++ b/rt/share/html/Search/Schedule.html
@@ -1,14 +1,9 @@
-<& /Elements/Header, Title => 'Schedule' &>
-
-%#init_overlib.html
-%foreach my $file (@files) {
-<SCRIPT TYPE="text/javascript" SRC="<%$fsurl%>elements/<%$file%>.js"></SCRIPT>
-%}
-
-<SCRIPT TYPE="text/javascript" SRC="<%$fsurl%>elements/jquery.js"></SCRIPT>
+<& /Elements/Header, Title => 'Schedule', JavaScript => 0 &>
<SCRIPT TYPE="text/javascript">
+% if ( $cells ) {
+
function boxon(what) {
var $this = $(what);
for ( var c=0; c < <%$cells%>; c++) {
@@ -48,6 +43,159 @@
}
}
+
+% }
+
+ var drag_cells = 0;
+ var drag_hi;
+ function boxon_drop(event, ui) {
+ //var $this = $(what);
+ var $this = $(this);
+
+ drag_cells = ui.draggable.data('cells');
+
+ if ( drag_hi ) {
+ boxoff_do(drag_hi);
+ }
+ drag_hi = $this;
+
+ for ( var c=0; c < drag_cells; c++) {
+
+ /* well, its not exactly what i want, would prefer if it could properly
+ mouse in-out, but this sorta helps for now?
+ revisit when everthing else is working */
+/* $this.effect("highlight", {}, 1500); */
+
+ $this.css('background-color', '#ffffdd');
+ if ( c == 0 ) {
+ $this.css('border-top', '1px double black');
+ $this.css('border-left', '1px double black');
+ $this.css('border-right', '1px solid black');
+ } else if ( c == (drag_cells-1) ) {
+ $this.css('border-left', '1px double black');
+ $this.css('border-right', '1px solid black');
+ $this.css('border-bottom', '1px solid black');
+ } else {
+ $this.css('border-left', '1px double black');
+ $this.css('border-right', '1px solid black');
+ }
+
+ var rownum = $this.parent().prevAll('tr').length;
+ var colnum = $this.prevAll('td').length;
+ $this = $this.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+ }
+
+
+ }
+
+ function boxoff_do(what) {
+
+ var $this = what;
+
+ for ( var c=0; c < drag_cells; c++) {
+
+ //$this.css('background-color', '');
+ //$this.css('border', ''); //IE8 woes, removes cell borders
+ $this.removeAttr('style'); //slightly "flashy" on cell changes under IE8
+ //but at least it doesn't remove cell borders
+
+ var rownum = $this.parent().prevAll('tr').length;
+ var colnum = $this.prevAll('td').length;
+ $this = $this.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+ }
+ }
+
+ function reschedule_appointment( event, ui ) {
+
+% #get the ticket number and appointment length (from the draggable object)
+ var ticketid = ui.draggable.data('ticketid');
+ var length = ui.draggable.data('length');
+ var bgcolor = ui.draggable.data('bgcolor');
+
+% #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 draggable = ui.draggable;
+ var droppable = $(this);
+ draggable.effect( "transfer", { to: droppable }, 1000 );
+
+% #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);
+% #XX and should revert the dragable...
+ } else {
+
+ //draggable.effect( "transfer", { to: droppable }, 1000 );
+
+ var label = data.sched_label;
+
+% #remove the old appointment entirely
+ var epoch = ui.draggable.data('epoch');
+ var st_tod_row = ui.draggable.data('tod_row');
+ var old_username = ui.draggable.data('username');
+ var cells = ui.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;
+ $('#'+td_id).css('background-color', '#FFFFFF');
+ $('#'+td_id).text('');
+% #(and make those boxes droppable)
+ $('#'+td_id).droppable({
+ over: boxon_drop,
+ drop: reschedule_appointment,
+ tolerance: 'pointer'
+ });
+ }
+
+% #maybe use that animation which shows the box from point A to B
+
+ if ( drag_hi ) {
+ boxoff_do(drag_hi);
+ }
+ 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;
+ $('#'+n_td_id).css('background-color', bgcolor);
+% #remove their droppable
+ $('#'+n_td_id).droppable('destroy');
+ if ( d == 0 ) {
+ $('#'+n_td_id).text(label);
+% #(and make the top draggable, so we could do it all over again)
+ $('#'+n_td_id).draggable({
+ containment: '.titlebox-content',
+%# revert: 'invalid',
+ revert: true,
+ revertDuration: 0,
+ });
+ $('#'+n_td_id).data('ticketid', ticketid );
+ $('#'+n_td_id).data('length', length );
+ $('#'+n_td_id).data('cells', cells );
+ $('#'+n_td_id).data('bgcolor', bgcolor );
+ }
+ }
+
+ }
+
+ });
+
+ }
+
</SCRIPT>
<& /Search/Calendar.html,
@@ -86,9 +234,13 @@ if ( ref($ARGS{username}) ) {
} elsif ( $ARGS{username} ) {
@usernames = ( $ARGS{username} );
} else {
- #XXX shouldn't even get offered the link in the first place rather than perl
- # barf, but this is better than erroring out later or empty @username
- die "Can't schedule an appointment - no employees are configured as installers";
+ #look them up ourslves... again, more FS abstraction-leaking, but
+ # we want to link to the schedule view, and better than doing this every
+ # menu render
+ use FS::Record qw( qsearch );
+ use FS::sched_item;
+ my @sched_item = qsearch('sched_item', { 'disabled' => '', });
+ @usernames = map $_->access_user->username, @sched_item;
}
( my $LengthMin = $ARGS{LengthMin} ) =~ /^\d+$/ or die 'non-numeric LengthMin';