recurrence function

9 posts, 0 answers
  1. wehbi
    wehbi avatar
    6 posts
    Member since:
    Jun 2010

    Posted 19 Dec 2013 Link to this post

    i am developing alarm system application using telerik 2012 q3  and i need your help in 2 questions :

    1- how to convert database appointments  rows to appointments object without using rad scheduler
    2- how can i select rows from appointment table before 1 hours from starting time(recurring appointments)

  2. Ivan Todorov
    Admin
    Ivan Todorov avatar
    688 posts

    Posted 20 Dec 2013 Link to this post

    Hi Wehbi,

    Thank you for writing.

    To get the appointments without using RadScheduler you should first setup a SchedulerBindingDataSource which is the component used when binding RadScheduler. You can find out how to achieve this in the following help article: Data Binding Walkthrough.

    Then you can simply call the GetItems method of the EventProvider to get the appointments:
    List<IEvent> appointments = new List<IEvent>(schedulerBindingDataSource1.EventProvider.GetItems(null));

    As to your second question, recurrences are stored as string rules in the database and each occurrence is auto generated according to that rule. Therefore, you cannot do a query directly over your SQL table but you should first load the appointments as shown above and then check each of them along with their occurrences. This is demonstrated below:
    private List<IEvent> GetAppointmentsAfterDate(DateTime targetDate, List<IEvent> sourceList)
    {
        List<IEvent> result = new List<IEvent>();
     
        foreach (IEvent appointment in sourceList)
        {
            if(appointment.Start >= targetDate)
            {
                result.Add(appointment);
            }
            else if (appointment.RecurrenceRule != null)
            {
                OccurrenceEnumerator enumerator = new OccurrenceEnumerator(appointment, CultureInfo.CurrentCulture.DateTimeFormat,
                    targetDate, targetDate.AddYears(1));
                if (enumerator.MoveNext() && enumerator.Current != null)
                {
                    result.Add(appointment);
                }
            }
        }
     
        return result;
    }

    I hope you find this useful. Let me know if you need anything else.

    Regards,
    Ivan Todorov
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WINFORMS.
    Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
    Sign up for Free application insights >>
  3. UI for WinForms is Visual Studio 2017 Ready
  4. wehbi
    wehbi avatar
    6 posts
    Member since:
    Jun 2010

    Posted 20 Dec 2013 Link to this post

    Thank you Ivan,

    My first question is solved , but for the second question , the function  GetAppointmentsAfterDate return appointments between 2 date time and doesn't search in exceptions ,
     what i need is the appointments or exceptions  that start  after a specific time not  the appointments 
    that start and finished during an interval of time  (i want to send alarm notification to user before 1 hours from the starting time)

  5. Ivan Todorov
    Admin
    Ivan Todorov avatar
    688 posts

    Posted 21 Dec 2013 Link to this post

    Hi Wehbi,

    Note that the OccurrenceEnumerator might be infinite for some recurrence rules (e.g. FREQ=DAILY). Therefore, it is recommended to limit it within some acceptable range. As to the exceptions, you need to also iterate through the Exceptions collection to check them. I have modified the previous method to return a list of appointments (including occurrences and exceptions) which start within one hour from a given date. Feel free to modify it as needed to match your requirements:
    private List<IEvent> GetAppointmentsInOneHour(DateTime targetDate, List<IEvent> sourceList)
    {
        List<IEvent> result = new List<IEvent>();
     
        foreach (IEvent appointment in sourceList)
        {
            if (appointment.Start >= targetDate && appointment.Start <= targetDate.AddHours(1))
            {
                result.Add(appointment);
            }
            else if (appointment.RecurrenceRule != null)
            {
                OccurrenceEnumerator enumerator = new OccurrenceEnumerator(appointment, CultureInfo.CurrentCulture.DateTimeFormat,
                    targetDate, targetDate.AddYears(1));
     
                while (enumerator.MoveNext() && enumerator.Current != null)
                {
                    if (enumerator.Current.Start >= targetDate && enumerator.Current.Start <= targetDate.AddHours(1))
                    {
                        result.Add(enumerator.Current);
                    }
                    else
                    {
                        break;
                    }
                }
     
                foreach (IEvent exception in appointment.Exceptions)
                {
                    if (exception.Start >= targetDate && exception.Start <= targetDate.AddHours(1))
                    {
                        result.Add(appointment);
                    }
                }
            }
        }
     
        return result;
    }

    Let me know if you still have any questions.

    Regards,
    Ivan Todorov
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WINFORMS.
    Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
    Sign up for Free application insights >>
  6. wehbi
    wehbi avatar
    6 posts
    Member since:
    Jun 2010

    Posted 10 Jan 2014 Link to this post

    Thank You Ivan ,

    I have another question ,

    If i add a new appointment to scheduler , the Record will be saved in db with visible=1 and if i delete the appointment from  the scheduler the record will be deleted from db .

    but if i add a recurrence appointment  and then delete one occurrence, the recurrence record will be saved  with visible=1 and the exception will be saved with visible=0 , but in the scheduler the occurrence  is still being displayed . 
    How can i remove from my scheduler the occurrence with visible=0 ? 
  7. George
    Admin
    George avatar
    500 posts

    Posted 14 Jan 2014 Link to this post

    Hi Wehbi,

    Thank you for replying.

    It seems that your question is not related to the initial subject of the thread. I would like to kindly ask you not to mix different questions in one thread as this makes the questions harder to find. Moreover, your question was answered in the support thread you have opened regarding this matter. I am posting the answer here, so the community can benefit from it:

    "Each appointment has a property called DataItem which holds the databound item. If you cast your DataItem you will be able to get its Visible property and show/hide the appointment. For example:
    For Each app As Appointment In Me.scheduler.Appointments
        If TryCast(app.DataItem, YourDataItem).Visible = 0 Then
            app.Visible = False
        End If
    Next

    You can also read the article regarding data binding RadScheduler here.
    "

    I hope this helps.

    Regards,
    George
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WINFORMS.
    Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
    Sign up for Free application insights >>
  8. wehbi
    wehbi avatar
    6 posts
    Member since:
    Jun 2010

    Posted 14 Jan 2014 Link to this post

    Thank you George ,

    i just changed the visible column type from "int" to "bit" in sql and everything is working normally
  9. wehbi
    wehbi avatar
    6 posts
    Member since:
    Jun 2010

    Posted 15 Jan 2014 Link to this post

    please can i have example how to add manually List of IEvents to RadReminder 
  10. George
    Admin
    George avatar
    500 posts

    Posted 15 Jan 2014 Link to this post

    Hi Wehbi,

    Thank you for replying.

    As I mentioned in my last post, please ask different questions in different support threads so that they can be addressed accordingly, and found easier on the forums. I will post this answer here so the community can benefit from it. 

    You can add a new appointment to the reminder using the AddRemindObject method:
    RadSchedulerReminder reminder = new RadSchedulerReminder();
    reminder.AddRemindObject(new Appointment(DateTime.Now.AddMinutes(-5), DateTime.Now.AddMinutes(5)));
    reminder.StartReminder();

    I hope this helps.

    Regards,
    George
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WINFORMS.
    Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
    Sign up for Free application insights >>
Back to Top
UI for WinForms is Visual Studio 2017 Ready