private static void AddMissedDays(int daysPerWeek, List <CustCalDay> custCals, CustCalDay firstCCD) { const int DaysInWeek = 7; if (firstCCD == null) { return; } for (int i = 0; i < DaysInWeek - daysPerWeek; i++) { CustCalDay ccd = new CustCalDay { DeliveryDate = firstCCD.DeliveryDate, OrderNumber = firstCCD.OrderNumber, PlanName = firstCCD.PlanName, DayNumber = daysPerWeek + i + 1, ProfileName = firstCCD.ProfileName, UserName = firstCCD.UserName, LastName = firstCCD.LastName, FirstName = firstCCD.FirstName }; custCals.Add(ccd); } }
private static CustCalDay LeftTrim(CustCalDay ccd) { ccd.Beverage = LeftTrim(ccd.Beverage); ccd.Breakfast = LeftTrim(ccd.Breakfast); ccd.Dessert = LeftTrim(ccd.Dessert); ccd.Dinner = LeftTrim(ccd.Dinner); ccd.Lunch = LeftTrim(ccd.Lunch); ccd.Snack = LeftTrim(ccd.Snack); ccd.Other = LeftTrim(ccd.Other); return(ccd); }
private static CustCalDay AgregateByDay(CustCalDay ccd, MealItemReportItem reportItem, bool init) { switch ((Enums.MealTypes)reportItem.MealTypeId) { case Enums.MealTypes.BreakfastEntree: ccd.Breakfast += AddAsEntree(reportItem); break; case Enums.MealTypes.BreakfastSide: ccd.Breakfast += AddAsSide(reportItem); break; case Enums.MealTypes.Snack: ccd.Snack += AddAsEntree(reportItem); break; case Enums.MealTypes.Dessert: ccd.Dessert += AddAsEntree(reportItem); break; case Enums.MealTypes.DinnerEntree: ccd.Dinner += AddAsEntree(reportItem); break; case Enums.MealTypes.DinnerSide: ccd.Dinner += AddAsSide(reportItem); break; case Enums.MealTypes.LunchEntree: ccd.Lunch += AddAsEntree(reportItem); break; case Enums.MealTypes.LunchSide: ccd.Lunch += AddAsSide(reportItem); break; case Enums.MealTypes.OtherEntree: case Enums.MealTypes.ChildEntree: case Enums.MealTypes.Beverage: case Enums.MealTypes.Salad: case Enums.MealTypes.Soup: case Enums.MealTypes.Supplement: case Enums.MealTypes.Goods: case Enums.MealTypes.Miscellaneous: ccd.Other += AddAsEntree(reportItem); break; case Enums.MealTypes.OtherSide: case Enums.MealTypes.ChildSide: ccd.Other += AddAsSide(reportItem); break; } return(ccd); }
public static List <CustCalDay> GetCustomerCalendars(DateTime startDate, DateTime endDate) { try { List <CustCalDay> CustCals = new List <CustCalDay>(); List <MealItemReportItem> menuItems = ReportSprocs.GetMenuItemsByDateRange(startDate, endDate, false).Where(a => a.ParentTypeId != 1) .OrderBy(a => a.DeliveryDate).ThenBy(a => a.CartItemId).ThenBy(a => a.DayNum).ThenBy(a => a.MealTypeId).ToList(); menuItems.ForEach(delegate(MealItemReportItem result) { CustCalDay ccd = CustCals.SingleOrDefault(a => a.UserProfileId == result.UserProfileId && a.DeliveryDate == result.DeliveryDate && a.OrderNumber == result.OrderNumber && a.PlanName == result.PlanName && a.DayNumber == result.DayNum); if (ccd == null) { hccUserProfile prof = hccUserProfile.GetById(result.UserProfileId); if (prof != null) { ccd = new CustCalDay { DeliveryDate = result.DeliveryDate, CartItemId = result.CartItemId, OrderNumber = result.OrderNumber, PlanName = result.PlanName, DayNumber = result.DayNum, ProfileName = prof.ProfileName, UserName = prof.FullName, LastName = prof.LastName, FirstName = prof.FirstName, UserProfileId = result.UserProfileId }; ccd = AgregateByDay(ccd, result, true); CustCals.Add(ccd); } } else { ccd = AgregateByDay(ccd, result, false); } }); // trim the crap from the begins foreach (CustCalDay day in CustCals) { LeftTrim(day); } // add missed days to show in the report (for example: for 3 day plan add 4-7 days with empty lists) var groupsByUser = CustCals.GroupBy(i => new { i.UserName, i.DeliveryDate, i.OrderNumber, i.PlanName }).Select(r => new { UserName = r.Key, DaysPerWeek = r.GroupBy(g => g.DayNumber).Count(), FirstItemInGroup = r.FirstOrDefault() }).ToList(); foreach (var group in groupsByUser) { if (group.DaysPerWeek == 7 || group.FirstItemInGroup == null) { continue; } AddMissedDays(group.DaysPerWeek, CustCals, group.FirstItemInGroup); } return(CustCals); } catch (Exception) { throw; } }