public List <BEReportPodructCategoryByProgramationView> GetProductByCategoryByProgramation(int productCategoryId, int year, int month, int headquartersId, int dietId, int week)
        {
            _database = new MySQLDatabase(connectionString);

            List <BEReportPodructCategoryByProgramationView> listProgramation = new DA_Programation(_database).GetProductByCategoryByProgramation(productCategoryId, year, month, headquartersId, dietId, week);



            return(listProgramation);
        }
        public List <BEReportCategoryByProgramationView> GetCategoryByProgramation(int year, int month, int headquartersId, int dietId)
        {
            _database = new MySQLDatabase(connectionString);

            List <BEReportCategoryByProgramationView> listProgramation = new DA_Programation(_database).GetCategoryByProgramation(year, month, headquartersId, dietId);



            return(listProgramation);
        }
        public BE_Programation CreateProgramation(BE_Programation bE_Programation)
        {
            _database = new MySQLDatabase(connectionString);
            var newProgramation = new DA_Programation(_database).CreateProgramation(bE_Programation);

            if (newProgramation.detail != null)
            {
                foreach (var detail in newProgramation.detail)
                {
                    detail.programationId = newProgramation.programationId;
                    CreateProgramationDetail(detail);
                }
            }
            return(newProgramation);
        }
        public BE_Programation UpdateProgramation(BE_Programation bE_Programation)
        {
            _database = new MySQLDatabase(connectionString);

            var updatedProgramation = new DA_Programation(_database).UpdateProgramation(bE_Programation);

            if (updatedProgramation.detail != null)
            {
                DeleteProgramationDetailByProgramationId(updatedProgramation.programationId);
                foreach (var detail in updatedProgramation.detail)
                {
                    detail.programationId = updatedProgramation.programationId;
                    CreateProgramationDetail(detail);
                }
            }
            return(updatedProgramation);
        }
        public List <RequestResumenByWeekOfMonth> GetRequestResumen(int year, int month, int headquartersId, int dietId)
        {
            _database = new MySQLDatabase(connectionString);

            var listProgramationDetail = new DA_Programation(_database).GetProgramationDetailResumen(year, month, headquartersId, dietId);


            List <RequestResumenByWeekOfMonth> ListRequestResumenByWeek = new List <RequestResumenByWeekOfMonth>();
            List <RequestResumen>       ListRequestResumen       = new List <RequestResumen>();
            List <RequestByWeekOfMonth> ListRequestByWeekOfMonth = new List <RequestByWeekOfMonth>();

            util _util = new util();

            foreach (var item in listProgramationDetail)
            {
                var validate = ListRequestByWeekOfMonth.Find(x => x.WeekOfMonth.WeekOfMonth == item.weekOfMonth);
                if (validate == null)
                {
                    RequestByWeekOfMonth rwm = new RequestByWeekOfMonth();
                    rwm.WeekOfMonth = _util.GetWeekOfMonth(item.date);
                    rwm.listRequest.Add(item);
                    ListRequestByWeekOfMonth.Add(rwm);
                }
                else
                {
                    ListRequestByWeekOfMonth.Find(x => x.WeekOfMonth.WeekOfMonth == item.weekOfMonth).listRequest.Add(item);
                }
            }

            List <RequestResumen> lrr = null;

            foreach (var listByWeek in ListRequestByWeekOfMonth)
            {
                lrr = new List <RequestResumen>();

                RequestResumen rr          = null;
                decimal        totalToWeek = 0;


                foreach (var item in listByWeek.listRequest)
                {
                    rr = new RequestResumen();
                    var validProductCategoryId = lrr.Find(x => x.productCategoryId == item.productCategoryId);
                    if (validProductCategoryId == null)
                    {
                        rr.headquartersName    = item.headquartersName;
                        rr.dietName            = item.dietName;
                        rr.productCategoryId   = item.productCategoryId;
                        rr.productCategoryName = item.productCategoryName;
                        rr.amount     = item.productCost;
                        rr.dateFormat = item.dateFormat;
                        totalToWeek  += item.productCost;
                        lrr.Add(rr);
                    }
                    else
                    {
                        lrr.Find(x => x.productCategoryId == item.productCategoryId).amount += item.productCost;
                        totalToWeek += item.productCost;
                    }
                }


                foreach (var p in lrr)
                {
                    p.percentage = (totalToWeek == 0) ? 0 : Math.Round((p.amount / totalToWeek) * 100, 2);
                }


                RequestResumenByWeekOfMonth rrwm = new RequestResumenByWeekOfMonth();
                rrwm.WeekOfMonth = listByWeek.WeekOfMonth;
                rrwm.listRequest = lrr;
                ListRequestResumenByWeek.Add(rrwm);
            }

            List <RequestResumenByWeekOfMonth> orderList = ListRequestResumenByWeek.OrderBy(x => x.WeekOfMonth.WeekOfMonth).ToList();

            return(orderList);
        }
        public List <ProgramationResumenByWeekOfMonth> GetProgramationResumen(int year, int month, int headquartersId, int dietId)
        {
            _database = new MySQLDatabase(connectionString);

            var listProgramation = new DA_Programation(_database).GetProgramationResumen(year, month, headquartersId, dietId);


            List <ProgramationByWeekOfMonth>        ListProgramationByWeek        = new List <ProgramationByWeekOfMonth>();
            List <ProgramationResumenByWeekOfMonth> ListProgramationResumenByWeek = new List <ProgramationResumenByWeekOfMonth>();

            util _util = new util();

            foreach (var item in listProgramation)
            {
                var validate = ListProgramationByWeek.Find(x => x.WeekOfMonth.WeekOfMonth == item.weekOfMonth);
                if (validate == null)
                {
                    ProgramationByWeekOfMonth pwm = new ProgramationByWeekOfMonth();
                    pwm.WeekOfMonth = _util.GetWeekOfMonth(item.date);
                    pwm.listProgramation.Add(item);
                    ListProgramationByWeek.Add(pwm);
                }
                else
                {
                    ListProgramationByWeek.Find(x => x.WeekOfMonth.WeekOfMonth == item.weekOfMonth).listProgramation.Add(item);
                }
            }

            List <ProgramationResumen> lpr = null;

            foreach (var listByWeek in ListProgramationByWeek)
            {
                lpr = new List <ProgramationResumen>();

                ProgramationResumen pr = null;

                foreach (var item in listByWeek.listProgramation)
                {
                    pr = new ProgramationResumen();
                    var validFeedingTimeId = lpr.Find(x => x.feedingTimeId == item.feedingTimeId);
                    if (validFeedingTimeId == null)
                    {
                        pr.feedingTimeId        = item.feedingTimeId;
                        pr.feedingTimeName      = item.feedingTimeName;
                        pr.monday.date          = listByWeek.WeekOfMonth.MondayDate;
                        pr.monday.dateFormat    = listByWeek.WeekOfMonth.MondayDateFormat;
                        pr.tuesday.date         = listByWeek.WeekOfMonth.TuesdayDate;
                        pr.tuesday.dateFormat   = listByWeek.WeekOfMonth.TuesdayDateFormat;
                        pr.wednesday.date       = listByWeek.WeekOfMonth.WednesdayDate;
                        pr.wednesday.dateFormat = listByWeek.WeekOfMonth.WednesdayDateFormat;
                        pr.thursday.date        = listByWeek.WeekOfMonth.ThursdayDate;
                        pr.thursday.dateFormat  = listByWeek.WeekOfMonth.ThursdayDateFormat;
                        pr.friday.date          = listByWeek.WeekOfMonth.FridayDate;
                        pr.friday.dateFormat    = listByWeek.WeekOfMonth.FridayDateFormat;
                        pr.saturday.date        = listByWeek.WeekOfMonth.SaturdayDate;
                        pr.saturday.dateFormat  = listByWeek.WeekOfMonth.SaturdayDateFormat;
                        pr.sunday.date          = listByWeek.WeekOfMonth.SundayDate;
                        pr.sunday.dateFormat    = listByWeek.WeekOfMonth.SundayDateFormat;
                        switch (item.dayOfWeek)
                        {
                        case DayOfWeek.Monday: pr.monday.programation.Add(item); break;

                        case DayOfWeek.Tuesday: pr.tuesday.programation.Add(item); break;

                        case DayOfWeek.Wednesday: pr.wednesday.programation.Add(item); break;

                        case DayOfWeek.Thursday: pr.thursday.programation.Add(item); break;

                        case DayOfWeek.Friday: pr.friday.programation.Add(item); break;

                        case DayOfWeek.Saturday: pr.saturday.programation.Add(item); break;

                        case DayOfWeek.Sunday: pr.sunday.programation.Add(item); break;
                        }

                        lpr.Add(pr);
                    }
                    else
                    {
                        switch (item.dayOfWeek)
                        {
                        case DayOfWeek.Monday: lpr.Find(x => x.feedingTimeId == item.feedingTimeId).monday.programation.Add(item); break;

                        case DayOfWeek.Tuesday: lpr.Find(x => x.feedingTimeId == item.feedingTimeId).tuesday.programation.Add(item); break;

                        case DayOfWeek.Wednesday: lpr.Find(x => x.feedingTimeId == item.feedingTimeId).wednesday.programation.Add(item); break;

                        case DayOfWeek.Thursday: lpr.Find(x => x.feedingTimeId == item.feedingTimeId).thursday.programation.Add(item); break;

                        case DayOfWeek.Friday: lpr.Find(x => x.feedingTimeId == item.feedingTimeId).friday.programation.Add(item); break;

                        case DayOfWeek.Saturday: lpr.Find(x => x.feedingTimeId == item.feedingTimeId).saturday.programation.Add(item); break;

                        case DayOfWeek.Sunday: lpr.Find(x => x.feedingTimeId == item.feedingTimeId).sunday.programation.Add(item); break;
                        }
                    }
                }

                ProgramationResumenByWeekOfMonth prwm = new ProgramationResumenByWeekOfMonth();
                prwm.WeekOfMonth      = listByWeek.WeekOfMonth;
                prwm.listProgramation = lpr;
                ListProgramationResumenByWeek.Add(prwm);
            }

            List <ProgramationResumenByWeekOfMonth> orderList = ListProgramationResumenByWeek.OrderBy(x => x.WeekOfMonth.WeekOfMonth).ToList();

            return(orderList);
        }