internal static List <AppointmentSlotGroupInfo> InitizlieAppointmentSlotGroup(List <AppointmentSlotInformation> sortedAppointmentInfo) { var result = new List <AppointmentSlotGroupInfo>(); int counter = 0; var currentGroup = new AppointmentSlotGroupInfo(); foreach (var item in sortedAppointmentInfo) { if (item.IsFirst) { counter++; currentGroup.AppointmentSlots.Add(item.AppointmentSlot); } else { counter--; } if (currentGroup.Columns < counter) { currentGroup.Columns = counter; } if (counter == 0) { result.Add(currentGroup); currentGroup = new AppointmentSlotGroupInfo(); } } return(result); }
internal static List <List <AppointmentSlotInfo> > SplitToColumns(AppointmentSlotGroupInfo groupInfo) { var result = new List <List <AppointmentSlotInfo> >(groupInfo.Columns); var tempList = groupInfo.AppointmentSlots.ToList(); for (int i = 0; i < groupInfo.Columns; i++) { var column = new List <AppointmentSlotInfo>(); column.Add(new AppointmentSlotInfo { AppointmentSlot = tempList[0], CoumnsSpan = 1 }); var currentEnd = tempList[0].TimeSlot.End; tempList.RemoveAt(0); for (int j = 0; j < tempList.Count; j++) { if (tempList[j].TimeSlot.Start >= currentEnd) { column.Add(new AppointmentSlotInfo { AppointmentSlot = tempList[j], CoumnsSpan = 1 }); currentEnd = tempList[j].TimeSlot.End; tempList.RemoveAt(j--); } } result.Add(column); } for (int i = 0; i < groupInfo.Columns; i++) { foreach (var info in result[i]) { for (int j = i + 1; j < groupInfo.Columns; j++) { if (!result[j].Any(asi => asi.AppointmentSlot.TimeSlot.IntersectsWith(info.AppointmentSlot.TimeSlot))) { info.CoumnsSpan++; } else { break; } } } } return(result); }