// GET: ExcelReport
        public FileResult downloadExcel_DailyMeal(ParmGetDailyMealInfo parm)
        {
            ExcelPackage excel = null;
            MemoryStream fs    = null;
            var          db0   = getDB0();

            try
            {
                fs    = new MemoryStream();
                excel = new ExcelPackage(fs);
                excel.Workbook.Worksheets.Add("DailyMealData");
                ExcelWorksheet sheet = excel.Workbook.Worksheets["DailyMealData"];

                sheet.View.TabSelected = true;
                #region 取得用餐排程
                R01_DailyMeal data    = new R01_DailyMeal();
                Matters       matters = new Matters();

                //取得正在用餐日期內的客戶生產編號
                var all_born_id = db0.RecordDetail.Where(x => x.product_type == (int)ProdyctType.PostnatalMeal & x.real_meal_start <= parm.meal_day & x.real_meal_end >= parm.meal_day & x.is_release == false)
                                  .OrderBy(x => x.meal_id)
                                  .Select(x => new { x.born_id, x.meal_id, x.real_meal_start, x.real_meal_end }).ToList();

                MealDay         pause_meal  = new MealDay();
                MealDay         start_meal  = new MealDay();
                MealDay         end_meal    = new MealDay();
                MealDaybyTryout tryout_meal = new MealDaybyTryout();
                #region 塞空資料
                pause_meal.breakfast = new List <string>();
                pause_meal.lunch     = new List <string>();
                pause_meal.dinner    = new List <string>();
                start_meal.breakfast = new List <string>();
                start_meal.lunch     = new List <string>();
                start_meal.dinner    = new List <string>();
                end_meal.breakfast   = new List <string>();
                end_meal.lunch       = new List <string>();
                end_meal.dinner      = new List <string>();
                #endregion
                foreach (var born_id in all_born_id)
                {
                    #region 停餐
                    var pause_DailyMeal = db0.DailyMeal.Where(x => x.born_id == born_id.born_id &
                                                              x.product_type == (int)ProdyctType.PostnatalMeal &
                                                              x.meal_day == parm.meal_day).FirstOrDefault();
                    if (pause_DailyMeal == null)
                    {
                        pause_meal.breakfast.Add(born_id.meal_id);
                        pause_meal.lunch.Add(born_id.meal_id);
                        pause_meal.dinner.Add(born_id.meal_id);
                    }
                    else
                    {
                        if (pause_DailyMeal.breakfast_state <= 0)
                        {
                            pause_meal.breakfast.Add(born_id.meal_id);
                        }
                        if (pause_DailyMeal.lunch_state <= 0)
                        {
                            pause_meal.lunch.Add(born_id.meal_id);
                        }
                        if (pause_DailyMeal.dinner_state <= 0)
                        {
                            pause_meal.dinner.Add(born_id.meal_id);
                        }
                    }
                    #endregion

                    #region 開始
                    var start_DailyMeal = db0.DailyMeal.Where(x => x.born_id == born_id.born_id &
                                                              x.product_type == (int)ProdyctType.PostnatalMeal &
                                                              (x.breakfast_state > 0 || x.lunch_state > 0 || x.dinner_state > 0))
                                          .OrderBy(x => x.meal_day).FirstOrDefault();
                    if (start_DailyMeal.meal_day == parm.meal_day)//開始用餐日期為當日
                    {
                        if (start_DailyMeal.breakfast_state > 0)
                        {
                            start_meal.breakfast.Add(born_id.meal_id);
                        }
                        else if (start_DailyMeal.lunch_state > 0)
                        {
                            start_meal.lunch.Add(born_id.meal_id);
                        }
                        else if (start_DailyMeal.dinner_state > 0)
                        {
                            start_meal.dinner.Add(born_id.meal_id);
                        }
                    }
                    #endregion

                    #region 結束
                    var end_DailyMeal = db0.DailyMeal.Where(x => x.born_id == born_id.born_id &
                                                            x.product_type == (int)ProdyctType.PostnatalMeal &
                                                            (x.breakfast_state > 0 || x.lunch_state > 0 || x.dinner_state > 0))
                                        .OrderByDescending(x => x.meal_day).FirstOrDefault();
                    if (end_DailyMeal.meal_day == parm.meal_day)//結束用餐日期為當日
                    {
                        if (end_DailyMeal.dinner_state > 0)
                        {
                            end_meal.dinner.Add(born_id.meal_id);
                        }
                        else if (end_DailyMeal.lunch_state > 0)
                        {
                            end_meal.lunch.Add(born_id.meal_id);
                        }
                        else if (end_DailyMeal.breakfast_state > 0)
                        {
                            end_meal.breakfast.Add(born_id.meal_id);
                        }
                    }
                    #endregion
                }
                #region 試吃
                var tryout_DailyMeal = db0.DailyMeal.Where(x => x.product_type == (int)ProdyctType.Tryout &
                                                           x.meal_day == parm.meal_day);
                tryout_meal.breakfast = tryout_DailyMeal.Where(x => x.breakfast_state > 0).Count();
                tryout_meal.lunch     = tryout_DailyMeal.Where(x => x.lunch_state > 0).Count();
                tryout_meal.dinner    = tryout_DailyMeal.Where(x => x.dinner_state > 0).Count();
                #endregion
                matters.pause_meal  = pause_meal;
                matters.start_meal  = start_meal;
                matters.end_meal    = end_meal;
                matters.tryout_meal = tryout_meal;


                //取得今天用餐排程
                var getDailyMeal = db0.DailyMeal.Where(x => x.meal_day == parm.meal_day && x.product_type == (int)ProdyctType.PostnatalMeal).OrderBy(x => x.meal_id).ToList();

                List <Require> special_diet = new List <Require>();
                MealDiet       breakfast    = new MealDiet();
                MealDiet       lunch        = new MealDiet();
                MealDiet       dinner       = new MealDiet();
                breakfast.dishs = new List <Dish>();
                lunch.dishs     = new List <Dish>();
                dinner.dishs    = new List <Dish>();

                #region 取得三餐菜單
                //取得當日菜單
                var getDailyMenu = db0.DailyMenu.Where(x => x.day == parm.meal_day).ToList();
                foreach (var DailyMenu_item in getDailyMenu)
                {
                    #region 取得對應組合菜單
                    List <Dish> dishs         = new List <Dish>();
                    var         constitute_id = db0.DailyMenuOfConstitute.Where(x => x.dail_menu_id == DailyMenu_item.dail_menu_id)
                                                .OrderByDescending(x => x.ConstituteFood.All_Category_L2.sort).Select(x => new { x.constitute_id, x.ConstituteFood.constitute_name }).ToList();
                    foreach (var id in constitute_id)
                    {
                        List <Require> Empty_RequireData = new List <Require>();
                        var            dish = new Dish()
                        {
                            constitute_id = id.constitute_id,
                            dish_name     = id.constitute_name,
                            meal_diet     = Empty_RequireData//暫時塞空資料
                        };
                        dishs.Add(dish);
                    }
                    #endregion
                    if (DailyMenu_item.meal_type == (int)MealType.Breakfast)
                    {
                        breakfast.dishs      = dishs;
                        breakfast.isHaveData = true;
                        breakfast.count      = getDailyMeal.Where(x => x.breakfast_state > 0).Count();
                    }
                    if (DailyMenu_item.meal_type == (int)MealType.Lunch)
                    {
                        lunch.dishs      = dishs;
                        lunch.isHaveData = true;
                        lunch.count      = getDailyMeal.Where(x => x.lunch_state > 0).Count();
                    }
                    if (DailyMenu_item.meal_type == (int)MealType.Dinner)
                    {
                        dinner.dishs      = dishs;
                        dinner.isHaveData = true;
                        dinner.count      = getDailyMeal.Where(x => x.dinner_state > 0).Count();
                    }
                }
                #endregion

                foreach (var DailyMeal_Item in getDailyMeal)
                {
                    if (DailyMeal_Item.breakfast_state > 0 || DailyMeal_Item.lunch_state > 0 || DailyMeal_Item.dinner_state > 0)
                    {//只要三餐有一餐有,就列特殊飲食
                        //取得該客戶需求元素id
                        var dietary_need_id = db0.CustomerOfDietaryNeed.Where(x => x.CustomerNeed.born_id == DailyMeal_Item.born_id).Select(x => x.dietary_need_id);

                        #region 無對應特殊飲食習慣
                        //未對應
                        var no_correspond = db0.DietaryNeed.Where(x => dietary_need_id.Contains(x.dietary_need_id) & !x.is_correspond).ToList();
                        foreach (var dn_item in no_correspond)
                        {
                            //檢查此特殊飲食是否出現過
                            bool check_r = special_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id);
                            if (check_r)
                            {
                                var s = special_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault();
                                s.count = s.count + 1;
                                s.meal_id.Add(DailyMeal_Item.meal_id);
                            }
                            else
                            {
                                List <string> meal_id = new List <string>();
                                meal_id.Add(DailyMeal_Item.meal_id);
                                var s = new Require()
                                {
                                    dietary_need_id = dn_item.dietary_need_id,
                                    require_name    = dn_item.short_name,
                                    count           = 1,
                                    meal_id         = meal_id
                                };
                                special_diet.Add(s);
                            }
                        }
                        #endregion

                        #region   應特殊飲食習慣
                        //有對應
                        var correspond = db0.DietaryNeed.Where(x => dietary_need_id.Contains(x.dietary_need_id) & x.is_correspond).ToList();
                        foreach (var dn_item in correspond)
                        {
                            #region 早餐
                            if (DailyMeal_Item.breakfast_state > 0 && dn_item.is_breakfast && breakfast.isHaveData)
                            {
                                foreach (var b in breakfast.dishs)
                                {
                                    //取得菜單元素對應元素
                                    var b_element_id = db0.ConstituteOfElement.Where(x => x.constitute_id == b.constitute_id).Select(x => x.element_id).ToList();
                                    //如果和需求元素對應元素d有重疊
                                    bool check_element_id = db0.DietaryNeedOfElement.Any(x => b_element_id.Contains(x.element_id) && x.dietary_need_id == dn_item.dietary_need_id);
                                    #region  重疊就加入
                                    if (check_element_id)
                                    {
                                        //檢查此飲食是否在此餐出現過
                                        bool check_b = b.meal_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id);
                                        if (check_b)
                                        {
                                            var s = b.meal_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault();
                                            s.count = s.count + 1;
                                            s.meal_id.Add(DailyMeal_Item.meal_id);
                                        }
                                        else
                                        {
                                            List <string> meal_id = new List <string>();
                                            meal_id.Add(DailyMeal_Item.meal_id);
                                            var s = new Require()
                                            {
                                                dietary_need_id = dn_item.dietary_need_id,
                                                require_name    = dn_item.short_name,
                                                count           = 1,
                                                meal_id         = meal_id
                                            };
                                            b.meal_diet.Add(s);
                                        }
                                    }
                                    #endregion
                                }
                            }
                            #endregion
                            #region 午餐
                            if (DailyMeal_Item.lunch_state > 0 && dn_item.is_lunch && lunch.isHaveData)
                            {
                                foreach (var l in lunch.dishs)
                                {
                                    //取得菜單元素對應元素
                                    var l_element_id = db0.ConstituteOfElement.Where(x => x.constitute_id == l.constitute_id).Select(x => x.element_id).ToList();
                                    //如果和需求元素對應元素d有重疊
                                    bool check_element_id = db0.DietaryNeedOfElement.Any(x => l_element_id.Contains(x.element_id) && x.dietary_need_id == dn_item.dietary_need_id);
                                    #region  重疊就加入
                                    if (check_element_id)
                                    {
                                        //檢查此飲食是否在此餐出現過
                                        bool check_l = l.meal_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id);
                                        if (check_l)
                                        {
                                            var s = l.meal_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault();
                                            s.count = s.count + 1;
                                            s.meal_id.Add(DailyMeal_Item.meal_id);
                                        }
                                        else
                                        {
                                            List <string> meal_id = new List <string>();
                                            meal_id.Add(DailyMeal_Item.meal_id);
                                            var s = new Require()
                                            {
                                                dietary_need_id = dn_item.dietary_need_id,
                                                require_name    = dn_item.short_name,
                                                count           = 1,
                                                meal_id         = meal_id
                                            };
                                            l.meal_diet.Add(s);
                                        }
                                    }
                                    #endregion
                                }
                            }
                            #endregion
                            #region 晚餐
                            if (DailyMeal_Item.dinner_state > 0 && dn_item.is_dinner && dinner.isHaveData)
                            {
                                foreach (var d in dinner.dishs)
                                {
                                    //取得菜單元素對應元素
                                    var d_element_id = db0.ConstituteOfElement.Where(x => x.constitute_id == d.constitute_id).Select(x => x.element_id).ToList();
                                    //如果和需求元素對應元素d有重疊
                                    bool check_element_id = db0.DietaryNeedOfElement.Any(x => d_element_id.Contains(x.element_id) && x.dietary_need_id == dn_item.dietary_need_id);
                                    #region  重疊就加入
                                    if (check_element_id)
                                    {
                                        //檢查此飲食是否在此餐出現過
                                        bool check_d = d.meal_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id);
                                        if (check_d)
                                        {
                                            var s = d.meal_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault();
                                            s.count = s.count + 1;
                                            s.meal_id.Add(DailyMeal_Item.meal_id);
                                        }
                                        else
                                        {
                                            List <string> meal_id = new List <string>();
                                            meal_id.Add(DailyMeal_Item.meal_id);
                                            var s = new Require()
                                            {
                                                dietary_need_id = dn_item.dietary_need_id,
                                                require_name    = dn_item.short_name,
                                                count           = 1,
                                                meal_id         = meal_id
                                            };
                                            d.meal_diet.Add(s);
                                        }
                                    }
                                    #endregion
                                }
                            }
                            #endregion
                        }
                        #endregion
                    }
                }

                data.matters      = matters;
                data.special_diet = special_diet;
                data.breakfast    = breakfast;
                data.lunch        = lunch;
                data.dinner       = dinner;

                #endregion


                #region Excel Handle

                int detail_row = 8;

                #region 標題
                sheet.Cells[1, 1].Value       = "R01每日菜單報表-" + parm.meal_day.ToString("yyyy-MM-dd");
                sheet.Cells[1, 1, 1, 6].Merge = true;
                #region 當日事項
                sheet.Cells[2, 1].Value       = "[當日事項]";
                sheet.Cells[2, 1, 2, 6].Merge = true;
                setFontColor_green(sheet, 2, 1);
                setGreenTitle(sheet, 2, 1, 6);
                #endregion
                #region 特殊飲食
                sheet.Cells[detail_row, 1].Value = "[特殊飲食]";
                sheet.Cells[detail_row, 1, detail_row, 6].Merge = true;
                setFontColor_red(sheet, detail_row, 1);
                setRedTitle(sheet, detail_row, 1, 6);
                #endregion
                #endregion

                #region 內容
                #region 當日事項
                #region 停餐
                #region 早
                string p_breakfast = "停早(" + data.matters.pause_meal.breakfast.Count() + "):";
                foreach (var i in data.matters.pause_meal.breakfast)
                {
                    p_breakfast += i + "、";
                }
                sheet.Cells[3, 1].Value       = p_breakfast;
                sheet.Cells[3, 1, 3, 2].Merge = true;
                #endregion
                #region 午
                string p_lunch = "停午(" + data.matters.pause_meal.lunch.Count() + "):";
                foreach (var i in data.matters.pause_meal.lunch)
                {
                    p_lunch += i + "、";
                }
                sheet.Cells[3, 3].Value       = p_lunch;
                sheet.Cells[3, 3, 3, 4].Merge = true;
                #endregion
                #region 晚
                string p_dinner = "停晚(" + data.matters.pause_meal.dinner.Count() + "):";
                foreach (var i in data.matters.pause_meal.dinner)
                {
                    p_dinner += i + "、";
                }
                sheet.Cells[3, 5].Value       = p_dinner;
                sheet.Cells[3, 5, 3, 6].Merge = true;
                #endregion
                #endregion

                #region 開始用餐
                #region 早
                string s_breakfast = "早開始(" + data.matters.start_meal.breakfast.Count() + "):";
                foreach (var i in data.matters.start_meal.breakfast)
                {
                    s_breakfast += i + "、";
                }
                sheet.Cells[4, 1].Value       = s_breakfast;
                sheet.Cells[4, 1, 4, 2].Merge = true;
                #endregion
                #region 午
                string s_lunch = "午開始(" + data.matters.start_meal.lunch.Count() + "):";
                foreach (var i in data.matters.start_meal.lunch)
                {
                    s_lunch += i + "、";
                }
                sheet.Cells[4, 3].Value       = s_lunch;
                sheet.Cells[4, 3, 4, 4].Merge = true;
                #endregion
                #region 晚
                string s_dinner = "晚開始(" + data.matters.start_meal.dinner.Count() + "):";
                foreach (var i in data.matters.start_meal.dinner)
                {
                    s_dinner += i + "、";
                }
                sheet.Cells[4, 5].Value       = s_dinner;
                sheet.Cells[4, 5, 4, 6].Merge = true;
                #endregion
                #endregion

                #region 結束用餐
                #region 早
                string e_breakfast = "早結束(" + data.matters.end_meal.breakfast.Count() + "):";
                foreach (var i in data.matters.end_meal.breakfast)
                {
                    e_breakfast += i + "、";
                }
                sheet.Cells[5, 1].Value       = e_breakfast;
                sheet.Cells[5, 1, 5, 2].Merge = true;
                #endregion
                #region 午
                string e_lunch = "午結束(" + data.matters.end_meal.lunch.Count() + "):";
                foreach (var i in data.matters.end_meal.lunch)
                {
                    e_lunch += i + "、";
                }
                sheet.Cells[5, 3].Value       = e_lunch;
                sheet.Cells[5, 3, 5, 4].Merge = true;
                #endregion
                #region 晚
                string e_dinner = "晚結束(" + data.matters.end_meal.dinner.Count() + "):";
                foreach (var i in data.matters.end_meal.dinner)
                {
                    e_dinner += i + "、";
                }
                sheet.Cells[5, 5].Value       = e_dinner;
                sheet.Cells[5, 5, 5, 6].Merge = true;
                #endregion
                #endregion


                #region 試吃
                #region 早
                string t_breakfast = "早試吃(" + data.matters.tryout_meal.breakfast + ")";
                sheet.Cells[6, 1].Value       = t_breakfast;
                sheet.Cells[6, 1, 6, 2].Merge = true;
                #endregion
                #region 午
                string t_lunch = "午試吃(" + data.matters.tryout_meal.lunch + ")";
                sheet.Cells[6, 3].Value       = t_lunch;
                sheet.Cells[6, 3, 6, 4].Merge = true;
                #endregion
                #region 晚
                string t_dinner = "晚試吃(" + data.matters.tryout_meal.dinner + ")";
                sheet.Cells[6, 5].Value       = t_dinner;
                sheet.Cells[6, 5, 6, 6].Merge = true;
                #endregion
                #endregion
                #endregion

                #region 特殊飲食
                detail_row += 1;
                foreach (var i in data.special_diet)
                {
                    sheet.Cells[detail_row, 1].Value = i.require_name + "(" + i.count + "):";
                    string tmp = "";
                    foreach (var id in i.meal_id)
                    {
                        tmp += id + "、";
                    }

                    sheet.Cells[detail_row, 2].Value = tmp;
                    sheet.Cells[detail_row, 2, detail_row, 6].Merge = true;
                    detail_row++;
                }
                #endregion

                #region 早餐
                detail_row += 1;
                #region 標題
                sheet.Cells[detail_row, 1].Value = "[早餐(" + data.breakfast.count + ")]";
                sheet.Cells[detail_row, 1, detail_row, 6].Merge = true;
                setFontColor_orange(sheet, detail_row, 1);
                setYellowTitle(sheet, detail_row, 1, 6);
                #endregion

                detail_row += 1;
                foreach (var i in data.breakfast.dishs)
                {
                    int start = detail_row;
                    sheet.Cells[detail_row, 1].Value = i.dish_name;
                    foreach (var j in i.meal_diet)
                    {
                        sheet.Cells[detail_row, 2].Value = j.require_name + "(" + j.count + "):";
                        string tmp = "";
                        foreach (var id in j.meal_id)
                        {
                            tmp += id + "、";
                        }

                        sheet.Cells[detail_row, 3].Value = tmp;
                        sheet.Cells[detail_row, 3, detail_row, 6].Merge = true;
                        detail_row++;
                    }
                    if (i.meal_diet.Count() == 0)
                    {
                        sheet.Cells[detail_row, 2, detail_row, 6].Merge = true;
                        detail_row++;
                    }
                    else
                    {
                        sheet.Cells[start, 1, detail_row - 1, 1].Merge = true;
                        sheet.Cells[start, 1].Style.VerticalAlignment  = ExcelVerticalAlignment.Center;
                    }
                }
                if (data.breakfast.dishs.Count() == 0)
                {
                    sheet.Cells[detail_row, 1].Value = "目前暫無排餐!";
                    sheet.Cells[detail_row, 1, detail_row, 6].Merge      = true;
                    sheet.Cells[detail_row, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    detail_row++;
                }

                #endregion
                #region 午餐
                detail_row += 1;
                #region 標題
                sheet.Cells[detail_row, 1].Value = "[午餐(" + data.lunch.count + ")]";
                sheet.Cells[detail_row, 1, detail_row, 6].Merge = true;
                setFontColor_orange(sheet, detail_row, 1);
                setYellowTitle(sheet, detail_row, 1, 6);
                #endregion

                detail_row += 1;
                foreach (var i in data.lunch.dishs)
                {
                    int start = detail_row;
                    sheet.Cells[detail_row, 1].Value = i.dish_name;
                    foreach (var j in i.meal_diet)
                    {
                        sheet.Cells[detail_row, 2].Value = j.require_name + "(" + j.count + "):";
                        string tmp = "";
                        foreach (var id in j.meal_id)
                        {
                            tmp += id + "、";
                        }

                        sheet.Cells[detail_row, 3].Value = tmp;
                        sheet.Cells[detail_row, 3, detail_row, 6].Merge = true;
                        detail_row++;
                    }

                    if (i.meal_diet.Count() == 0)
                    {
                        sheet.Cells[detail_row, 2, detail_row, 6].Merge = true;
                        detail_row++;
                    }
                    else
                    {
                        sheet.Cells[start, 1, detail_row - 1, 1].Merge = true;
                        sheet.Cells[start, 1].Style.VerticalAlignment  = ExcelVerticalAlignment.Center;
                    }
                }
                if (data.lunch.dishs.Count() == 0)
                {
                    sheet.Cells[detail_row, 1].Value = "目前暫無排餐!";
                    sheet.Cells[detail_row, 1, detail_row, 6].Merge      = true;
                    sheet.Cells[detail_row, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    detail_row++;
                }

                #endregion
                #region 晚餐
                detail_row += 1;
                #region 標題
                sheet.Cells[detail_row, 1].Value = "[晚餐(" + data.dinner.count + ")]";
                sheet.Cells[detail_row, 1, detail_row, 6].Merge = true;
                setFontColor_orange(sheet, detail_row, 1);
                setYellowTitle(sheet, detail_row, 1, 6);
                #endregion

                detail_row += 1;
                foreach (var i in data.dinner.dishs)
                {
                    int start = detail_row;
                    sheet.Cells[detail_row, 1].Value = i.dish_name;
                    foreach (var j in i.meal_diet)
                    {
                        sheet.Cells[detail_row, 2].Value = j.require_name + "(" + j.count + "):";
                        string tmp = "";
                        foreach (var id in j.meal_id)
                        {
                            tmp += id + "、";
                        }

                        sheet.Cells[detail_row, 3].Value = tmp;
                        sheet.Cells[detail_row, 3, detail_row, 6].Merge = true;
                        detail_row++;
                    }

                    if (i.meal_diet.Count() == 0)
                    {
                        sheet.Cells[detail_row, 2, detail_row, 6].Merge = true;
                        detail_row++;
                    }
                    else
                    {
                        sheet.Cells[start, 1, detail_row - 1, 1].Merge = true;
                        sheet.Cells[start, 1].Style.VerticalAlignment  = ExcelVerticalAlignment.Center;
                    }
                }
                if (data.dinner.dishs.Count() == 0)
                {
                    sheet.Cells[detail_row, 1].Value = "目前暫無排餐!";
                    sheet.Cells[detail_row, 1, detail_row, 6].Merge      = true;
                    sheet.Cells[detail_row, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    detail_row++;
                }

                #endregion
                #endregion

                #region excel排版
                int startColumn = sheet.Dimension.Start.Column;
                int endColumn   = sheet.Dimension.End.Column;
                for (int j = startColumn; j <= endColumn; j++)
                {
                    //sheet.Column(j).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//靠左對齊
                    //sheet.Column(j).Width = 30;//固定寬度寫法
                    sheet.Column(j).AutoFit();//依內容fit寬度
                }//End for
                #endregion
                //sheet.Cells.Calculate(); //要對所以Cell做公計計算 否則樣版中的公式值是不會變的

                #endregion

                string filename = "R01每日菜單報表" + "[" + DateTime.Now.ToString("yyyyMMddHHmm") + "].xlsx";
                excel.Save();
                fs.Position = 0;
                return(File(fs, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename));
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
                return(null);
            }
            finally
            {
                db0.Dispose();
            }
        }
Example #2
0
        public async Task <int> Create(DietViewModel model)
        {
            var meals = await appDbContext.Meals.AsNoTracking().Select(m2 => new
            {
                breakfast          = appDbContext.Meals.AsNoTracking().Where(m => m.Type == Meal.MealType.BREAKFAST).OrderBy(o => Guid.NewGuid()).First(),
                lunch              = appDbContext.Meals.AsNoTracking().Where(m => m.Type == Meal.MealType.LUNCH).OrderBy(o => Guid.NewGuid()).First(),
                dinner             = appDbContext.Meals.AsNoTracking().Where(m => m.Type == Meal.MealType.DINNER).OrderBy(o => Guid.NewGuid()).First(),
                snack              = appDbContext.Meals.AsNoTracking().Where(m => m.Type == Meal.MealType.SNACK).OrderBy(o => Guid.NewGuid()).First(),
                supper             = appDbContext.Meals.AsNoTracking().Where(m => m.Type == Meal.MealType.SUPPER).OrderBy(o => Guid.NewGuid()).First(),
                ifAlreadyExistDiet = appDbContext.Diets.AsNoTracking().Any(d => d.UserId.Equals(httpContextAccessor.HttpContext.User.FindFirst(Constants.Strings.JwtClaimIdentifiers.Id).Value))
            }).FirstOrDefaultAsync();

            var newDiet = new Diet
            {
                Name        = model.Name,
                Calories    = model.Calories,
                Meals       = model.MealsAmount,
                Created     = DateTime.UtcNow,
                DietCurrent = true,
                UserId      = httpContextAccessor.HttpContext.User.FindFirst(Constants.Strings.JwtClaimIdentifiers.Id).Value
            };

            // Get current diet and set prop DietCurrent to false;
            if (meals.ifAlreadyExistDiet)
            {
                var currentDiet = await appDbContext.Diets
                                  .Where(d => d.UserId.Equals(httpContextAccessor.HttpContext.User.FindFirst(Constants.Strings.JwtClaimIdentifiers.Id).Value))
                                  .OrderByDescending(d => d.Created).FirstOrDefaultAsync();

                currentDiet.DietCurrent = false;
            }

            appDbContext.Diets.Add(newDiet);
            await appDbContext.SaveChangesAsync();

            // Create meals to diet
            var mealDiet = new MealDiet
            {
                DietId = newDiet.Id,
                MealId = meals.breakfast.Id
            };
            var mealDiet2 = new MealDiet
            {
                DietId = newDiet.Id,
                MealId = meals.lunch.Id
            };
            var mealDiet3 = new MealDiet
            {
                DietId = newDiet.Id,
                MealId = meals.dinner.Id
            };
            var mealDiet4 = new MealDiet
            {
                DietId = newDiet.Id,
                MealId = meals.snack.Id
            };
            var mealDiet5 = new MealDiet
            {
                DietId = newDiet.Id,
                MealId = meals.supper.Id
            };

            if (model.MealsAmount == 5)
            {
                appDbContext.MealDiets.AddRange(mealDiet, mealDiet2, mealDiet3, mealDiet4, mealDiet5);
            }
            else if (model.MealsAmount == 4)
            {
                appDbContext.MealDiets.AddRange(mealDiet, mealDiet2, mealDiet3, mealDiet5);
            }
            else
            {
                appDbContext.MealDiets.AddRange(mealDiet, mealDiet3, mealDiet5);
            }

            await appDbContext.SaveChangesAsync();

            return(newDiet.Id);
        }