Revert "RT#34237: installer scheduling [removed edit links, v3 only]"
[freeside.git] / rt / share / html / Search / Schedule.html
index c729ff0..0dbe8c3 100644 (file)
 
 % }
 
+% # it would be better if we had draggable-specific droppables, but this will prevent overlap for now...
+  function can_drop ($where, cells) {
+    for (var c=0; c < cells; c++) {
+      if (!$where.is('.ui-droppable')) {
+        return false;
+      }
+      var rownum = $where.parent().prevAll('tr').length;
+      var colnum = $where.prevAll('td').length;
+      $where = $where.parent().parent().children('tr').eq(rownum+1).children('td').eq(colnum);
+    }
+    return true;
+  }
+
   var drag_cells = 0;
   var drag_hi;
+
+  // on drag stop (regardless of if it was dropped)
+  function clear_drag_hi () {
+    if ( drag_hi ) {
+      boxoff_do(drag_hi);
+      drag_hi = undefined;
+    }
+  }
+
+  // on drag over
   function boxon_drop(event, ui) {
     //var $this = $(what);
     var $this = $(this);
 
     drag_cells = ui.draggable.data('cells');
 
-    if ( drag_hi ) {
-      boxoff_do(drag_hi);
-    }
+    clear_drag_hi();
+
+    if (!can_drop($this, drag_cells)) return;
+
     drag_hi = $this;
 
     for ( var c=0; c < drag_cells; c++) {
 
   }
 
+  // clears highlighted box, used by clear_hi_drag (drag stop event)
   function boxoff_do(what) {
 
     var $this = what;
     }
   }
 
+  // drop event
   function reschedule_appointment( event, ui ) {
 
+    var $this = $(this);
+
+    if (!can_drop($this, ui.draggable.data('cells'))) return;
+
 %   #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 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 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 );
+    var droppable = $this;
+    draggable.effect( "transfer", { to: droppable }, 420 );
 
 %   #tell the backend to reschedule it
     var url = "<% popurl(3) %>misc/xmlhttp-ticket-update.html?" +
 
 %       #maybe use that animation which shows the box from point A to B
 
-        if ( drag_hi ) {
-          boxoff_do(drag_hi);
-        }
+        clear_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 +
 %         #remove their droppable
           $('#'+n_td_id).droppable('destroy');
           if ( d == 0 ) {
-            $('#'+n_td_id).text(label);
+            var title = 
+              label +
+              ' <A HREF="<%$RT::WebPath%>/Ticket/Display.html?id=' + ticketid + '" target="_blank">view</A> ' +
+              <% include('/elements/popup_link.html',
+                   action=>$RT::WebPath.'/Ticket/ModifyCustomFieldsPopup.html?id=__MAGIC_TICKET_ID__',
+                   label =>'edit',
+                   actionlabel => 'Edit appointment',
+                   height      => 436, # better: A + B * (num_custom_fields)
+                 ) |n,js_string
+              %>;
+            title = title.replace( /__MAGIC_TICKET_ID__/, ticketid );
+            $('#'+n_td_id).html( title );
 %           #(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,
+              stop: clear_drag_hi,
             });
             $('#'+n_td_id).data('ticketid', ticketid );
             $('#'+n_td_id).data('length',   length );
      @_,
      Query       => "( Status = 'new' OR Status = 'open' OR Status = 'stalled')
                      AND ( Type = 'reminder' OR 'Type' = 'ticket' )
-                     AND Queue.id = $queueid ",
+                     AND Queue = $queueid ",
      slots       => scalar(@usernames),
      Embed       => 'Schedule.html',
      DimPast     => 1,
                       #oops, more freeside abstraction-leaking
                       custnum   => $ARGS{custnum},
                       pkgnum    => $ARGS{pkgnum},
+                      RedirectToBasics => $ARGS{RedirectToBasics},
                     ],
 &>