public static MenuForDayDto GetMenuForDayDto(this IRepositoryAsync <MfdDishPriceRelations> repository,
                                                     MenuForDay mfd)
        {
            List <MfdDishPriceRelations> mfdrels = repository.Queryable().Where(mp => mp.MenuForDayId == mfd.ID).ToList();
            List <Dish> dishes =
                repository.GetRepositoryAsync <Dish>()
                .Queryable().Include("DishType").Include("DishDetail")
                .Where(d => mfdrels.Select(md => md.DishId).Contains(d.DishID)).OrderBy(d => d.DishType.Id)
                .ToList();
            List <DishModelDto> dishmodels = dishes.Select(d => repository.GetDishModelDto(d, mfd.ID)).ToList();

            return(new MenuForDayDto
            {
                Id = mfd.ID,
                TotalPrice = mfd.TotalPrice,
                Dishes = dishmodels,
                OrderCanBeChanged = mfd.OrderCanBeChanged,
                OrderWasBooking = repository.GetRepositoryAsync <WeekOrderMenu>().GetUsersMadeOrder(mfd.ID).Any()
            });
        }
Exemplo n.º 2
0
        // The callback, no inside the method used above.
        // This will run every  hour.
        private static void TimerElapsed(object o, System.Timers.ElapsedEventArgs e)
        {
            Logger.Trace("DateTime: {0}, e.SignalTime.Hour= {1}", DateTime.Now, e.SignalTime /*e.SignalTime.Hour*/);
            if (e.SignalTime.Hour < 9)
            {
                return;
            }
            int daynum = (int)e.SignalTime.DayOfWeek;
            IUnitOfWorkAsync unitofwork      = DependencyResolver.Current.GetService <IUnitOfWorkAsync>();
            WorkingWeek      currWorkingWeek =
                unitofwork.RepositoryAsync <MenuForWeek>().WorkWeekByWeekYear(YearWeekHelp.GetCurrentWeekYearDto());

            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                MenuForDay menuForDay =
                    db.MenuForDays.Include("WorkingDay.DayOfWeek").ToList()
                    .Where(mfd => currWorkingWeek.WorkingDays.Select(wd => wd.Id).Contains(mfd.WorkingDay.Id))
                    .FirstOrDefault(d => d.WorkingDay.DayOfWeek.Id == daynum);
                if (menuForDay != null && (menuForDay.DayMenuCanBeChanged || menuForDay.OrderCanBeChanged))
                {
                    db.DayFactToPlan();
                    Logger.Trace("DayFactToPlan was executed !!!");
                    string _dirpath = HostingEnvironment.MapPath("~/ExcelFiles/");

                    string[] filePaths = Directory.GetFiles(_dirpath, "*.xls");
                    foreach (var filename in filePaths)
                    {
                        if (File.Exists(filename))
                        {
                            File.Delete(filename);
                            Logger.Trace("File {0} was deleted!", filename);
                        }
                    }
                }
            }

            //TimerFired.Set();
        }
        public static int UpdateMfdDishes(this IRepositoryAsync <MfdDishPriceRelations> repository,
                                          MenuForDayDto menuforday)
        {
            MenuForDay menuFd =
                repository.GetRepositoryAsync <MenuForDay>()
                .Query()
                .Include(mfd => mfd.DishPriceMfdRelations.Select(dp => dp.DishPrice))
                .Include(mfd => mfd.DishPriceMfdRelations.Select(dp => dp.Dish))
                .Include(mfd => mfd.DishPriceMfdRelations.Select(dp => dp.Dish.DishType))
                .Include(mfd => mfd.DayOrderMenus.Select(dp => dp.MenuForDay))
                .Include(mfd => mfd.DayOrderMenus.Select(dp => dp.MenuForDay.WorkingDay.DayOfWeek))
                .Include(mfd => mfd.DayOrderMenus.Select(dp => dp.WeekOrderMenu.DayOrderMenus))
                .Include(mfd => mfd.WorkingDay.WorkingWeek.Year)
                .Include(mfd => mfd.DayOrderMenus.Select(dord => dord.WeekOrderMenu.MenuForWeek))
                .Select()
                .FirstOrDefault(mfd => mfd.ID == menuforday.Id);

            if (menuFd != null)
            {
                int changedishid = menuforday.Dishes.Select(d => d.DishId)
                                   .FirstOrDefault(id => !menuFd.DishPriceMfdRelations.Select(dp => dp.DishId).Contains(id));
                if (changedishid == 0)
                {
                    for (int i = 0; i < menuFd.DishPriceMfdRelations.Count; i++)
                    {
                        if (menuFd.DishPriceMfdRelations.ElementAt(i).DishPrice != repository.GetDishPrice(menuforday.Dishes.ElementAt(i).Price))
                        {
                            changedishid = menuFd.DishPriceMfdRelations.ElementAt(i).DishId;
                        }
                    }
                }

                menuFd.DishPriceMfdRelations = repository.MfdByMenuForDayDto(menuforday);
                Dish dish =
                    repository.GetRepositoryAsync <Dish>()
                    .Query()
                    .Include(d => d.DishType)
                    .Include(d => d.CurrentPrice)
                    .Select()
                    .FirstOrDefault(d => d.DishID == changedishid);
                MfdDishPriceRelations rel =
                    menuFd.DishPriceMfdRelations.FirstOrDefault(
                        mfd => dish != null && string.Equals(mfd.Dish.DishType.Category, dish.DishType.Category));

                if (rel != null && dish != null)
                {
                    rel.DishId = changedishid;
                    var firstOrDefault = menuforday.Dishes.FirstOrDefault(d => d.DishId == changedishid);
                    if (firstOrDefault != null)
                    {
                        dish.CurrentPrice = repository.GetDishPrice(firstOrDefault.Price);
                    }
                    rel.DishPrice = dish.CurrentPrice;
                    repository.Context.Entry(rel).State  = EntityState.Modified;
                    repository.Context.Entry(dish).State = EntityState.Modified;

                    menuFd.TotalPrice = menuforday.TotalPrice;

                    repository.Context.Entry(menuFd).State = EntityState.Modified;

                    return(dish.DishType.Id);
                }
            }
            return(0);
        }
        public static void CreateMenuForWeek(ApplicationDbContext context, DishHelp[] dishArray)
        {
            string[]    categories = context.DishTypes.OrderBy(t => t.Id).Select(dt => dt.Category).ToArray();
            Dish[]      darray     = context.Dishes.Where(d => d.Title != null).ToArray();
            DishPrice[] dishPrices = context.DishPrices.ToArray();
            Func <string, IEnumerable <DishHelp>, int> countDish = (str, list) =>
            {
                int coun = list.Count(el => string.Equals(el.DishType.Category, str));
                return(coun);
            };
            Dictionary <string, int> catCount  = categories.ToDictionary(cat => cat, count => countDish(count, dishArray));
            Func <List <Dish> >      getDishes = () =>
            {
                return
                    (catCount.Select(
                         pair =>
                         darray.Where(d => string.Equals(d.DishType.Category, pair.Key))
                         .ElementAt(Rand.Next(pair.Value))).ToList());
            };
            Func <double, DishPrice> getDishPrice = (price) =>
            {
                return(dishPrices.FirstOrDefault(d => Math.Abs(price - d.Price) < 0.001));
            };

            Year year         = context.Years.FirstOrDefault(y => y.YearNumber == DateTime.Now.Year);
            Year correct_year = context.Years.FirstOrDefault(y => y.YearNumber == DateTime.Now.Year - 1);
            int  correct_week = 0;
            List <MenuForWeek>           weekmenus = new List <MenuForWeek>();
            List <MfdDishPriceRelations> mfdDishPriceRelationses = new List <MfdDishPriceRelations>();

            for (int week = 0; week < 5; week++)
            {
                var weekLessZero = YearWeekHelp.CurrentWeek() - week <= 0;
                if (weekLessZero)
                {
                    year         = correct_year;
                    correct_week = YearWeekHelp.YearWeekCount(DateTime.Now.Year - 1);
                }
                List <MenuForDay> mfdays   = new List <MenuForDay>();
                WorkingWeek       workweek =
                    context.WorkingWeeks.Include("Year").ToList().FirstOrDefault(
                        w => year != null && (w.WeekNumber == YearWeekHelp.CurrentWeek() - week + correct_week &&
                                              w.Year.YearNumber == year.YearNumber));

                //bool ordCanCreated = true; //
                for (int i = 1; i <= 7; i++)
                {
                    List <Dish> dishes = getDishes();
                    dishes.OrderBy(d => d.DishType.Id);
                    WorkingDay workday =
                        context.WorkingDays.Include("WorkingWeek").ToList().FirstOrDefault(
                            wd => workweek != null && (wd.WorkingWeek.ID == workweek.ID && wd.DayOfWeek.Id == i));

                    if (workday != null /* && workday.IsWorking*/)
                    {
                        MenuForDay dayMenu = new MenuForDay
                        {
                            //Dishes = dishes,
                            WorkingDay = workday,
                            //TotalPrice = dishes.Select(d => d.Price).Sum(),
                            DayMenuCanBeChanged =
                                week == 0 /*&& ((int) DateTime.Now.DayOfWeek) >= i - 1 && DateTime.Now.Hour < 9*/,
                            OrderCanBeChanged = week == 0 //&& ((int)DateTime.Now.DayOfWeek) >= i - 1 && DateTime.Now.Hour < 9
                        };
                        mfdDishPriceRelationses.AddRange(dishes.Select(d => new MfdDishPriceRelations
                        {
                            Dish       = d,
                            MenuForDay = dayMenu,
                            DishPrice  = d.CurrentPrice
                        }));
                        dayMenu.TotalPrice =
                            mfdDishPriceRelationses.Where(mdr => mdr.MenuForDay == dayMenu)
                            .Sum(mdr => mdr.Dish.CurrentPrice.Price);
                        mfdays.Add(dayMenu);
                    }
                }
                weekmenus.Add(new MenuForWeek
                {
                    MenuForDay             = mfdays,
                    WorkingWeek            = workweek,
                    SummaryPrice           = mfdays.Where(mfd => mfd.WorkingDay.IsWorking).Select(d => d.TotalPrice).Sum(),
                    OrderCanBeCreated      = true,
                    SUCanChangeOrder       = week == 0,
                    WorkingDaysAreSelected = true
                });
            }
            context.MenuForWeeks.AddRange(weekmenus);
            context.MfdDishPriceRelations.AddRange(mfdDishPriceRelationses);
            context.SaveChanges();
        }