public MenuOrder(Menu menu, DateTime date, IEnumerable <EmployeeMenu> employeeMenues) { Date = date.Date; Id = GenerateId(menu.Id, date); MenuId = menu.Id; DetailByUserName = new Dictionary <string, MenuOrderDetailItem>(); PlacesByKey = menu.Places.ToDictionary(x => x.Key, x => x.Text); OptionsByKey = menu.Options.ToDictionary(x => x.Key, x => x.Text); var dayWeek = menu.GetWeekDay(Date); DayIdx = dayWeek.DayIdx; WeekIdx = dayWeek.WeekIdx; FoodsByOption = OptionsByKey .Select(x => menu.Foods.GetItemSecurely(new WeekDayOptionKey() { WeekIdx = WeekIdx, DayIdx = DayIdx, OptionKey = x.Key })) .Where(x => !string.IsNullOrWhiteSpace(x.Food)) .ToDictionary(x => x.OptionKey, x => x.Food); employeeMenues = employeeMenues ?? Enumerable.Empty <EmployeeMenu>(); foreach (var employeeMenu in employeeMenues) { DetailByUserName[employeeMenu.UserName] = CreateDetailItem(employeeMenu); } QuantityByOptionByPlace = DetailByUserName.Values .Where(x => IsNotEmpty(x.PlaceKey) && IsNotEmpty(x.OptionKey)) .GroupBy(x => x.PlaceKey) .ToDictionary( x => x.Key, x => x.GroupBy(y => y.OptionKey).ToDictionary(y => y.Key, y => y.Count())); }
private bool IsValidOption(string optionKey) { return(OptionsByKey.ContainsKey(optionKey) && FoodsByOption.ContainsKey(optionKey) && !string.IsNullOrWhiteSpace(FoodsByOption[optionKey])); }