Thanks for your response.
The solution which you had suggested, I am already doing it although I missed to show that in the code I provided here. So I am providing you the complete method which I use to call for adding the slots:
private void AddSlots(List<
Holiday
> holidays)
{
specialSlots = specialSlots ?? new ObservableCollection<
Slot
>();
specialSlots.Clear();
if (holidays != null)
{
foreach (Holiday h in holidays)
{
DateTime hDay = h.HolidayDate.GetValueOrDefault();
HolidayOccurence holiDayOcc = new HolidayOccurence();
holiDayOcc.Start = hDay;// new DateTime(2011, 6, 16);
holiDayOcc.End = hDay.AddDays(1);
holiDayOcc.RecurrencePattern = new RecurrencePattern() { DayOfMonth = hDay.Day, Frequency = RecurrenceFrequency.Yearly, Interval = 1, MonthOfYear = hDay.Month };
if (resources != null)
holiDayOcc.Resources.AddRange(resources);
specialSlots.Add(holiDayOcc);
holiDayOcc = null;
}
}
SundayOccurence sundayOcc = new SundayOccurence();
sundayOcc.Start = new DateTime(2011, 1, 1);
sundayOcc.End = new DateTime(2011, 1, 1, 23, 59, 59);
sundayOcc.RecurrencePattern = new RecurrencePattern(null, RecurrenceDays.Sunday, RecurrenceFrequency.Weekly, 1, null, null);
if (resources != null)
sundayOcc.Resources.AddRange(resources);
specialSlots.Add(sundayOcc);
sundayOcc.Dispose();
SaturdayOccurence saturdayOcc = new SaturdayOccurence();
saturdayOcc.Start = new DateTime(2011, 1, 1);
saturdayOcc.End = new DateTime(2011, 1, 1, 23, 59, 59);
saturdayOcc.RecurrencePattern = new RecurrencePattern(null, RecurrenceDays.Saturday, RecurrenceFrequency.Weekly, 1, null, null);
if (resources != null)
saturdayOcc.Resources.AddRange(resources);
specialSlots.Add(saturdayOcc);
saturdayOcc.Dispose();
if (customBookingList != null)
{
var resourcesWithEffort = resources.Where(r => customBookingList.Select(b => b.TrainerID).Contains(r.TrainerID));
foreach (Trainer trainer in resourcesWithEffort)
{
for (DateTime dtT = startDate; dtT <= endDate; dtT = dtT.AddDays(1))
{
//
var tempBookings = customBookingList.Where(b => b.StartDate == dtT && b.TrainerID == trainer.TrainerID && b.IsTimeBooking.HasValue?b.IsTimeBooking.Value:false);
//
var rangeBookings = customBookingList.Where(b => dtT >= b.StartDate && dtT <
b.StartDate.Value.AddDays
(b.Duration.HasValue ? b.Duration.Value : 1) && b.TrainerID == trainer.TrainerID && !(b.IsTimeBooking.HasValue ? b.IsTimeBooking.Value : false)).Select(b => b.Effort / (b.Duration.HasValue ? b.Duration.Value : 1));
if (tempBookings.Count() > 0 && rangeBookings.Count() > 0)
{
float flEffort = tempBookings.Sum(b => (float)(b.Effort.Value)) + (float)(rangeBookings.Sum());
//double flDuration = tempBookings.Sum(b => ((Booking)b).Duration) + rangeBookings.Sum(b => ((Booking)b).Duration);
WorkingHourOccurence workingDayOcc = new WorkingHourOccurence();
workingDayOcc.Effort = (float)Math.Round(flEffort * 100, 2);
workingDayOcc.EffortHours = Math.Round(flEffort * 8, 2).ToString();
workingDayOcc.Start = dtT;
workingDayOcc.End = workingDayOcc.Start.AddDays(1);
workingDayOcc.RecurrencePattern = new RecurrencePattern(dtT.Day, GetRecurrenceDayOfWeekDay(dtT.DayOfWeek), RecurrenceFrequency.Daily, 1, dtT.Month, null);
if (resources != null)
workingDayOcc.Resources.Add(trainer);
specialSlots.Add(workingDayOcc);
workingDayOcc.Dispose();
}
else if (tempBookings.Count() > 0 && rangeBookings.Count() <
1
)
{
float
flEffort
=
tempBookings
.Sum(b => (float)(b.Effort));
//double flDuration = tempBookings.Sum(b => ((Booking)b).Duration);
WorkingHourOccurence workingDayOcc = new WorkingHourOccurence();
workingDayOcc.Effort = (float)Math.Round(flEffort * 100, 2); //(float)Math.Round((flEffort / flDuration) * 100, 2);
workingDayOcc.EffortHours = Math.Round(flEffort * 8, 2).ToString();
workingDayOcc.Start = dtT;
workingDayOcc.End = workingDayOcc.Start.AddDays(1);
workingDayOcc.RecurrencePattern = new RecurrencePattern(dtT.Day, GetRecurrenceDayOfWeekDay(dtT.DayOfWeek), RecurrenceFrequency.Daily, 1, dtT.Month, null);
if (resources != null)
workingDayOcc.Resources.Add(trainer);
specialSlots.Add(workingDayOcc);
workingDayOcc.Dispose();
}
else if (tempBookings.Count() <
1
&& rangeBookings.Count() > 0)
{
float flEffort = (float)(rangeBookings.Sum());// rangeBookings.Sum(b => ((Booking)b).Effort);
//double flDuration = rangeBookings.Sum(b => ((Booking)b).Duration);
WorkingHourOccurence workingDayOcc = new WorkingHourOccurence();
workingDayOcc.Effort = (float)Math.Round(flEffort * 100, 2); //(float)Math.Round((flEffort / flDuration) * 100, 2);
workingDayOcc.EffortHours = Math.Round(flEffort * 8, 2).ToString();
workingDayOcc.Start = dtT;
workingDayOcc.End = workingDayOcc.Start.AddDays(1);
workingDayOcc.RecurrencePattern = new RecurrencePattern(dtT.Day, GetRecurrenceDayOfWeekDay(dtT.DayOfWeek), RecurrenceFrequency.Daily, 1, dtT.Month, null);
if (resources != null)
workingDayOcc.Resources.Add(trainer);
specialSlots.Add(workingDayOcc);
workingDayOcc.Dispose();
}
}
// Dispose();
}
}
IsTaskRunning = false;
}
As you can see from the abosve code snippet, that I am clearing the Special Slot Collection. I am trying to understand here that this is what you mean to say or anything else.