how block out work hours for INDIVIDUAL RESOURCES

8 posts, 0 answers
  1. Robert
    Robert avatar
    12 posts
    Member since:
    May 2008

    Posted 23 Jun 2008 Link to this post

    I'm asking about the "resource view" of the calendar ("groupby").

    Let's say Dr Jones is the 1st column, Dr Smith the 2nd and Dr Leroy the 3rd.  If Dr Jones only works from 3pm to 5pm how do I gray out the "off-times" for HIM ONLY (his column only)?

    I store all the work hours for the people in a seperate table.

    Also, how do I customize the TITLE of the column?  For example change "Dr Jones" to "Dr Jones MD"?
  2. Peter
    Admin
    Peter avatar
    6637 posts

    Posted 24 Jun 2008 Link to this post

    Hello Robert,

    We have replied in the support ticket which you started about this case, but we will post the answer here in case someone else needs this functionality.

    You can handle the AppointmentInsert and AppointmentUpdate events to check for the current resource and if the appointment overlaps a specified time. If both conditions are met, the event is cancelled. You can use Custom Attributes to hold the information on which date and time that person is unavailable. Please, consider the following example:

    Protected Sub RadScheduler1_AppointmentInsert(ByVal sender As ObjectByVal e As Telerik.Web.UI.SchedulerCancelEventArgs)  
        If e.Appointment.Resources.GetResourceByType("Person").Text = "Dr Jones" Then 
            Dim dt1 As DateTime = DateTime.Parse("2008/06/23 10:00")  
            Dim dt2 As DateTime = DateTime.Parse("2008/06/23 16:00")  
            If DoDateRangesOverlap(e.Appointment.Start, e.Appointment.[End], dt1, dt2) Then 
                Response.Write("That person is unavailable on June 23, 2008 from 10 am to 4 pm.")  
                e.Cancel = True 
            End If 
        End If 
    End Sub 
     
    Protected Sub RadScheduler1_AppointmentUpdate(ByVal sender As ObjectByVal e As Telerik.Web.UI.AppointmentUpdateEventArgs)  
        If e.ModifiedAppointment.Resources.GetResourceByType("Person").Text = "Dr Jones" Then 
            Dim dt1 As DateTime = DateTime.Parse("2008/06/23 10:00")  
            Dim dt2 As DateTime = DateTime.Parse("2008/06/23 16:00")  
            If DoDateRangesOverlap(e.ModifiedAppointment.Start, e.ModifiedAppointment.[End], dt1, dt2) Then 
                Response.Write("That person is unavailable on June 23, 2008 from 10 am to 4 pm.")  
                e.Cancel = True 
            End If 
        End If 
    End Sub 
    Private Function DoDateRangesOverlap(ByVal startDateRange1 As DateTime, ByVal endDateRange1 As DateTime, ByVal startDateRange2 As DateTime, ByVal endDateRange2 As DateTime) As Boolean 
        If ((startDateRange1 < endDateRange2) AndAlso (startDateRange1 >= startDateRange2)) OrElse ((endDateRange1 <= endDateRange2) AndAlso (endDateRange1 > startDateRange2)) Then 
            Return True 
        Else 
            Return False 
        End If 
    End Function 
     

    The strings: "2008/06/23 10:00" and "2008/06/23 16:00" can be fetched from custom attributes fields. 

    In case you need to gray out certain time frame for a specific resource, you can use the following:
    handle the TimeSlotCreate event and find the resource for each TimeSlot by index. Here is a code sample:
    Protected Sub RadScheduler1_TimeSlotCreated(ByVal sender As ObjectByVal e As Telerik.Web.UI.TimeSlotCreatedEventArgs)  
        Dim indexParts As String() = e.TimeSlot.Index.Split(":"C)  
        Dim resourceIndex As Integer = Integer.Parse(indexParts(0))  
        Dim resources As New List(Of Resource)(RadScheduler1.Resources.GetResourcesByType("Room"))  
        Dim res As Resource = resources(resourceIndex)  
     
        Dim dt1 As DateTime = DateTime.Parse("2008/06/23 10:00")  
        Dim dt2 As DateTime = DateTime.Parse("2008/06/23 16:00")  
        If res.Text = "Dr Jones" Then 
            If DoDateRangesOverlap(e.TimeSlot.Start, e.TimeSlot.[End], dt1, dt2) Then 
                e.TimeSlot.CssClass = "UnavailableCssStyle" 
            End If 
        End If 
    End Sub 
    Private Function DoDateRangesOverlap(ByVal startDateRange1 As DateTime, ByVal endDateRange1 As DateTime, ByVal startDateRange2 As DateTime, ByVal endDateRange2 As DateTime) As Boolean 
        If ((startDateRange1 < endDateRange2) AndAlso (startDateRange1 >= startDateRange2)) OrElse ((endDateRange1 <= endDateRange2) AndAlso (endDateRange1 > startDateRange2)) Then 
            Return True 
        Else 
            Return False 
        End If 
    End Function 
     
     

    <head runat="server">  
        <title>Untitled Page</title> 
        <style type="text/css">  
            .UnavailableCssStyle  
            {  
                background: gray !important;  
            }  
        </style> 
    </head> 



    Cheers,
    Peter
    the Telerik team

    Instantly find answers to your questions at the new Telerik Support Center
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Philip
    Philip avatar
    69 posts
    Member since:
    Mar 2016

    Posted 27 Mar in reply to Peter Link to this post

    Can this code be converted to c# for me this is exaclty what I need to be able to do as well thakns
  5. Nencho
    Admin
    Nencho avatar
    1457 posts

    Posted 30 Mar Link to this post

    Hello Philip,

    I would advise you to use the Telerik Code Converted:

    http://converter.telerik.com/

    Regards,
    Nencho
    Telerik
    Do you need help with upgrading your ASP.NET AJAX, WPF or WinForms projects? Check the Telerik API Analyzer and share your thoughts.
  6. Philip
    Philip avatar
    69 posts
    Member since:
    Mar 2016

    Posted 31 Mar in reply to Nencho Link to this post

    I did so but for some reason its applying the style to every resource not just the one resource.
  7. Nencho
    Admin
    Nencho avatar
    1457 posts

    Posted 05 Apr Link to this post

    Hello Philip,

    Probably this behavior is related with the Start and End date ranges fir the appointments in question in your custom implementation, because, as I can see the application of the custom CssClass  for the coloring responsibleis base on the Dates' ranges.

    if (DoDateRangesOverlap(e.TimeSlot.Start, e.TimeSlot.End, dt1, dt2))
                {
                    e.TimeSlot.CssClass = "UnavailableCssStyle";
                }

    I would suggest you to place a breakpoint in the TimeSlotCreated method and pin down the reason for the experienced behavior.

    Regards,
    Nencho
    Telerik
    Do you need help with upgrading your ASP.NET AJAX, WPF or WinForms projects? Check the Telerik API Analyzer and share your thoughts.
  8. Philip
    Philip avatar
    69 posts
    Member since:
    Mar 2016

    Posted 11 Apr Link to this post

    To anyone else strugling with this secneraio this is how I done it. Probally a neater way but by far the best and easiest way i have managed it.

     

    01..Disabled {
    02.          background: silver !important;
    03.          cursor: not-allowed;
    04.      }
    05. 
    06.      .UnavailableCssStyle {
    07.          background-color: orange !important;
    08.          cursor: not-allowed;
    09.      }
    10. 
    11.      .HolidayCssStyle {
    12.          background-color: white !important;
    13.          color: black;
    14.          cursor: not-allowed;
    15.      }
    16. 
    17.      .SickDayStyle {
    18.          background-color: rebeccapurple !important;
    19.          cursor: not-allowed;
    20.      }
    21. 
    22.      .DayOfCssStyle {
    23.          background-color: white !important;
    24.          color: black;
    25.          cursor: not-allowed;
    26.      }

    01.protected void apertureAppointments_TimeSlotCreated(object sender, TimeSlotCreatedEventArgs e)
    02.      {
    03.          int i = 0;
    04.          bool isFound = false;
    05.          List<tblApertureNetShiftPattern> _list = new List<tblApertureNetShiftPattern>();
    06.          _list = _dal.getHolidays();
    07.          List<Resource> resources = new List<Resource>(apertureAppointments.Resources.GetResourcesByType("Managers"));
    08.          Resource res = resources[5];
    09. 
    10.          foreach (tblApertureNetShiftPattern sp in _list)
    11.          {
    12.              if (_list.Count > 1)
    13.                  i++;
    14.              else
    15.                  i = 0;
    16. 
    17.              DateTime? dt1 = _list[i].startdate;
    18.              DateTime? dt2 = _list[i].endDate;
    19.              if (res.Text == "Adam Adair" && e.TimeSlot.Start == dt1 && e.TimeSlot.Resource.Text == "Adam Adair")
    20.              {
    21.                  isFound = true;
    22.                  if (DoDateRangesOverlap(e.TimeSlot.Start, e.TimeSlot.End, dt1, dt2) && isFound == true)
    23.                  {
    24.                      Label temperatureLabel = new Label();
    25. 
    26.                      if (sp.appointmentType == Constants.shiftDayoff)
    27.                      {
    28.                          e.TimeSlot.CssClass = "DayOfCssStyle";
    29. 
    30.                          temperatureLabel.CssClass = "DayOfCssStyle";
    31.                      }
    32.                      else if (sp.appointmentType == Constants.shiftHoliday)
    33.                      {
    34.                          e.TimeSlot.CssClass = "HolidayCssStyle";
    35.                          temperatureLabel.CssClass = "HolidayCssStyle";
    36.                      }
    37.                      else if (sp.appointmentType == Constants.shiftStat)
    38.                      {
    39.                          e.TimeSlot.CssClass = "statCssStyle";
    40.                          temperatureLabel.CssClass = "statCssStyle";
    41.                      }
    42.                      else if (sp.appointmentType == Constants.shiftsickDay)
    43.                      {
    44.                          e.TimeSlot.CssClass = "SickDayStyle";
    45.                          temperatureLabel.CssClass = "SickDayStyle";
    46.                      }
    47.                      temperatureLabel.Text = sp.Description;
    48. 
    49.                      Image imageControl = new Image();
    50. 
    51.                      imageControl.ImageUrl = @"~\images\aperturenet\Calendar\resources\holidays.png";
    52. 
    53.                      temperatureLabel.BackColor = System.Drawing.Color.Orange;
    54. 
    55.                      dt1 = null;
    56.                      dt2 = null;
    57.                      isFound = false;
    58.                      e.TimeSlot.Control.Controls.AddAt(1, temperatureLabel);
    59.                      e.TimeSlot.Control.Controls.AddAt(2, imageControl);
    60.                  }
    61.              }
    62.          }
    63.      }

    The key part I have been racking my brians over the last week or so is this little gem

     

    & e.TimeSlot.Resource.Text == "Adam Adair"

    Unless you have that in your if statement it would do it for all resources !.

  9. Nencho
    Admin
    Nencho avatar
    1457 posts

    Posted 14 Apr Link to this post

    Hello Philip,

    Thank you for sharing your implementation with the community!

    Regards,
    Nencho
    Telerik
    Do you need help with upgrading your ASP.NET AJAX, WPF or WinForms projects? Check the Telerik API Analyzer and share your thoughts.
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017