예제 #1
0
        public List <UsageManagementModel> GetUsageManagement(UsageManagementRequest request)
        {
            var result = new List <UsageManagementModel>();

            request.DateFrom = new DateTime(request.DateFrom.Year, request.DateFrom.Month, request.DateFrom.Day, 0, 0, 0);
            request.DateTo   = new DateTime(request.DateTo.Year, request.DateTo.Month, request.DateTo.Day, 23, 59, 59);
            BaseFactory _baseFactory = new BaseFactory();

            using (var cxt = new NuWebContext())
            {
                //get business day

                var _lstBusDayAllStore = _baseFactory.GetBusinessDays(request.DateFrom, request.DateTo, request.StoreId, request.Mode);
                if (_lstBusDayAllStore != null && _lstBusDayAllStore.Any())
                {
                    var dFrom = _lstBusDayAllStore.Min(ss => ss.DateFrom);
                    var dTo   = _lstBusDayAllStore.Max(ss => ss.DateTo);
                    int index = 1;
                    var query = (from u in cxt.I_UsageManagement
                                 join d in cxt.I_UsageManagementDetail on u.Id equals d.UsageManagementId
                                 join i in cxt.I_Ingredient on d.IngredientId equals i.Id
                                 where u.DateFrom >= dFrom && u.DateTo <= dTo
                                 select new { d, i });
                    if (query != null && query.Any())
                    {
                        var lstTmp = new List <UsageManagementModel>();
                        UsageManagementModel obj = null;
                        foreach (var item in query)
                        {
                            obj = new UsageManagementModel();
                            //obj.Index = index;
                            obj.Id      = item.d.Id;
                            obj.Code    = item.i.Code;
                            obj.Name    = item.i.Name;
                            obj.UOMName = item.i.BaseUOMName;
                            obj.Usage   = item.d.Usage;

                            lstTmp.Add(obj);
                            //index++;
                        }
                        var lstGroupIngrdient = lstTmp.GroupBy(gg => gg.Code);
                        foreach (var item in lstGroupIngrdient)
                        {
                            obj       = new UsageManagementModel();
                            obj.Index = index;
                            obj.ListUsageManagementDetailId = string.Join("|", item.Select(ss => ss.Id));
                            obj.Code    = item.Key;
                            obj.Name    = item.Select(ss => ss.Name).FirstOrDefault();
                            obj.UOMName = item.Select(ss => ss.UOMName).FirstOrDefault();
                            obj.Usage   = item.Sum(ss => ss.Usage);

                            result.Add(obj);
                            index++;
                        }
                        //result = result.OrderBy(oo => oo.Index).ToList();
                    }
                }
            }
            return(result);
        }
예제 #2
0
        public ActionResult Report_Current(RPHourlyItemizedSalesModels model)
        {
            try
            {
                var _lstCateChecked = new List <RFilterCategoryModel>();
                var _lstSetChecked  = new List <RFilterCategoryModel>();

                if (model.ToTime == new TimeSpan(0, 0, 0))
                {
                    model.ToTime = new TimeSpan(23, 59, 59);
                }

                DateTime dFrom = new DateTime(model.FromDate.Year, model.FromDate.Month, model.FromDate.Day, model.FromTime.Hours, model.FromTime.Minutes, 0)
                , dTo          = new DateTime(model.ToDate.Year, model.ToDate.Month, model.ToDate.Day, model.ToTime.Hours, model.ToTime.Minutes, 59);

                if (model.FromDate > model.ToDate)
                {
                    ModelState.AddModelError("FromDate", CurrentUser.GetLanguageTextFromKey("From Date must be less than To Date."));
                }
                if (dFrom > dTo)
                {
                    ModelState.AddModelError("FromTime", CurrentUser.GetLanguageTextFromKey("From Time must be less than To Time."));
                }
                else if (model.Type == Commons.TypeCompanySelected) //Company
                {
                    if (model.ListCompanys == null)
                    {
                        ModelState.AddModelError("ListCompanys", CurrentUser.GetLanguageTextFromKey("Please choose company."));
                    }
                }
                else //Store
                {
                    if (model.ListStores == null)
                    {
                        ModelState.AddModelError("ListStores", CurrentUser.GetLanguageTextFromKey("Please choose store."));
                    }
                }

                //ListCategories
                if (model.ListStoreCate != null)
                {
                    foreach (var item in model.ListStoreCate)
                    {
                        model.ListCategories.AddRange(item.ListCategoriesSel);
                    }
                }

                // Get list categories selected
                #region List categories old
                //var lstChildCheck = new List<RFilterCategoryModel>();
                //if (model.ListCategories != null && model.ListCategories.Count > 0)
                //{
                //    _lstCateChecked = model.ListCategories.Where(ww => ww.Checked).ToList();
                //    var lstCateChild = model.ListCategories.Where(ww => ww.ListChilds != null && ww.ListChilds.Count > 0).ToList();
                //    foreach (var item in lstCateChild)
                //    {
                //        //_lstCateChecked.AddRange(item.ListChilds.Where(ww => ww.Checked));
                //        _categoriesFactory.GetCategoryCheck(ref lstChildCheck, item.ListChilds);
                //    }
                //    _lstCateChecked.AddRange(lstChildCheck);
                //}
                //else
                //{
                //    _lstCateChecked = GetListCategories(model.Type == 1 ? model.ListCompanys : model.ListStores, model.Type);
                //    _lstCateChecked.ForEach(x =>
                //    {
                //        x.Checked = true;
                //        if (x.ListChilds != null && x.ListChilds.Count > 0)
                //        {
                //            x.ListChilds.ForEach(z =>
                //            {
                //                z.Checked = true;
                //            });
                //        };
                //    });
                //    //====
                //    var lstCateChild = _lstCateChecked.Where(ww => ww.ListChilds != null && ww.ListChilds.Count > 0).ToList();
                //    foreach (var item in lstCateChild)
                //    {
                //        //_lstCateChecked.AddRange(item.ListChilds.Where(ww => ww.Checked));
                //        _categoriesFactory.GetCategoryCheck(ref lstChildCheck, item.ListChilds);
                //    }
                //    _lstCateChecked.AddRange(lstChildCheck);
                //}
                #endregion End list categories old

                #region List categories V1, updated 03212018, get all parent & child category selected
                if (model.ListCategories != null && model.ListCategories.Any())
                {
                    _categoriesFactory.GetCategoryCheck_V1(ref _lstCateChecked, model.ListCategories);
                }
                else
                {
                    var listCategories = GetListCategories(model.Type == 1 ? model.ListCompanys : model.ListStores, model.Type);
                    _categoriesFactory.GetCategoryCheck_V1(ref _lstCateChecked, listCategories, true);
                }
                #endregion End list categories V1

                /*ListSetMenu*/
                if (model.ListStoreSetMenu != null)
                {
                    foreach (var item in model.ListStoreSetMenu)
                    {
                        model.ListSetMenu.AddRange(item.ListSetMenuSel);
                    }
                }
                if (model.ListSetMenu != null && model.ListSetMenu.Count > 0)
                {
                    _lstSetChecked = model.ListSetMenu.Where(ww => ww.Checked).ToList();
                    var lstSetChild = model.ListSetMenu.Where(ww => ww.ListChilds != null && ww.ListChilds.Count > 0).ToList();
                    foreach (var item in lstSetChild)
                    {
                        _lstSetChecked.AddRange(item.ListChilds.Where(ww => ww.Checked));
                    }
                }
                else
                {
                    _lstSetChecked = GetListSetMenus(model.Type == 1 ? model.ListCompanys : model.ListStores, model.Type);
                    _lstSetChecked.ForEach(x =>
                    {
                        x.Checked = true;
                        if (x.ListChilds != null && x.ListChilds.Count > 0)
                        {
                            x.ListChilds.ForEach(z =>
                            {
                                z.Checked = true;
                            });
                        }
                        ;
                    });
                    //=======
                    var lstSetChild = _lstSetChecked.Where(ww => ww.ListChilds != null && ww.ListChilds.Count > 0).ToList();
                    foreach (var item in lstSetChild)
                    {
                        _lstSetChecked.AddRange(item.ListChilds.Where(ww => ww.Checked));
                    }
                }

                if (_lstCateChecked == null)
                {
                    _lstCateChecked = new List <RFilterCategoryModel>();
                }
                if (_lstSetChecked == null)
                {
                    _lstSetChecked = new List <RFilterCategoryModel>();
                }

                if (!ModelState.IsValid)
                {
                    Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    return(View("Index", model));
                }

                var _lstCateCheckedId = _lstCateChecked.Select(ss => ss.Id).ToList();
                var _lstSetCheckedId  = _lstSetChecked.Select(ss => ss.Id).ToList();
                // Get list stores selected
                var _lstStoreCate = _lstCateChecked.Select(ss => ss.StoreId).Distinct().ToList();
                var _lstStoreSet  = _lstSetChecked.Select(ss => ss.StoreId).Distinct().ToList();

                // Get ListStores, all stores selected from list cate, list set
                var lstStoresCateSet = _lstStoreCate.Concat(_lstStoreSet).Distinct().ToList();

                //Get Selected Store
                List <StoreModels> lstStores = new List <StoreModels>();
                //if (model.Type == Commons.TypeCompanySelected) //Company
                //{
                //    lstStores = model.GetSelectedStoreCompany();
                //    lstStores = lstStores.Where(w => lstStoresCateSet.Contains(w.Id)).ToList();
                //    model.ListStores = lstStoresCateSet;
                //    //model.ListStores = lstStores.Select(ss => ss.Id).ToList();
                //}
                //else //Store
                //{
                //    List<SelectListItem> vbStore = ViewBag.Stores;
                //    lstStores = model.GetSelectedStore(vbStore);
                //    lstStores = lstStores.Where(w => lstStoresCateSet.Contains(w.Id)).ToList();
                //    model.ListStores = lstStoresCateSet;
                //}
                ///////======= Updated 072018
                if (model.Type == Commons.TypeCompanySelected) //Company
                {
                    lstStores        = listStoresInfoSession.Where(ww => model.ListCompanys.Contains(ww.CompanyId)).ToList();
                    model.ListStores = lstStores.Select(ss => ss.Id).ToList();
                }
                else //Store
                {
                    lstStores = listStoresInfoSession.Where(ww => model.ListStores.Contains(ww.Id)).ToList();
                }

                //End Get Selected Store

                HourlyItemizedSalesReportFactory factory = new HourlyItemizedSalesReportFactory();

                DateTime fromDate = model.FromDate;
                DateTime toDate   = model.ToDate;
                TimeSpan fromTime = model.FromTime;
                TimeSpan toTime   = model.ToTime;

                //model.FromDate = DateTimeHelper.SetFromDate(model.FromDate, fromTime);
                //model.ToDate = DateTimeHelper.SetToDate(model.ToDate, toTime);
                if (model.FromTime.Hours == 0 && model.FromTime.Minutes == 0 && model.ToTime.Hours == 0 && model.ToTime.Minutes == 0)
                {
                    model.FromDate = new DateTime(model.FromDate.Year, model.FromDate.Month, model.FromDate.Day, 0, 0, 0);
                    model.ToDate   = new DateTime(model.ToDate.Year, model.ToDate.Month, model.ToDate.Day, 23, 59, 59);
                }
                else
                {
                    model.FromDate = new DateTime(model.FromDate.Year, model.FromDate.Month, model.FromDate.Day, model.FromTime.Hours, model.FromTime.Minutes, 0);
                    model.ToDate   = new DateTime(model.ToDate.Year, model.ToDate.Month, model.ToDate.Day, model.ToTime.Hours, model.ToTime.Minutes, 59);
                }

                DateTime _dToFilter = model.ToDate;


                XLWorkbook wb = new XLWorkbook();
                //Get business day
                var _lstBusDayAllStore = _baseFactory.GetBusinessDays(model.FromDate, model.ToDate, model.ListStores, model.Mode);
                if (_lstBusDayAllStore == null || !_lstBusDayAllStore.Any())
                {
                    IXLWorksheet ws = wb.Worksheets.Add("Hourly_Itemized_Sales_Report");
                    // Set header report
                    ReportFactory reportFactory = new ReportFactory();
                    reportFactory.CreateReportHeaderNew(ws, 8, model.FromDate, _dToFilter, _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Hourly Itemized Sales Report").ToUpper());
                    // Format header report
                    ws.Range(1, 1, 4, 8).Style.Border.InsideBorder  = XLBorderStyleValues.Thin;
                    ws.Range(1, 1, 4, 8).Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
                }
                else
                {
                    model.ToDate = _lstBusDayAllStore.Max(aa => aa.DateTo);

                    #region Report with old DB
                    // Get list items by category, datetime, storeId
                    var listTemp = factory.GetDataHour(model, _lstStoreCate, _lstStoreSet, _lstCateCheckedId, _lstSetCheckedId);

                    // Get list MISC
                    DiscountAndMiscReportFactory miscFactory = new DiscountAndMiscReportFactory();
                    var listDiscountMisc = miscFactory.GetReceiptDiscountAndMiscByDateTime(model.FromDate, model.ToDate, model.ListStores, model.Mode);

                    // Export data
                    wb = factory.Export(listTemp, model.FromDate, _dToFilter,
                                        _lstCateChecked, _lstSetChecked, listDiscountMisc, lstStores, model.Mode, _lstBusDayAllStore, model);
                    #endregion End report with old DB

                    #region Report with new DB
                    // Get list items by category, datetime, storeId
                    //var listTemp = factory.GetDataHour_NewDB(model, _lstStoreCate, _lstStoreSet, _lstCateCheckedId, _lstSetCheckedId);

                    // Get list MISC
                    //DiscountAndMiscReportFactory miscFactory = new DiscountAndMiscReportFactory();
                    //var listDiscountMisc = miscFactory.GetReceiptDiscountAndMiscByDateTime(model.FromDate, model.ToDate, model.ListStores, model.Mode);

                    // Export data
                    //wb = factory.Export_NewDB(listTemp, model.FromDate, _dToFilter,
                    //   _lstCateChecked, _lstSetChecked, listDiscountMisc, lstStores, model.Mode, _lstBusDayAllStore);
                    #endregion End report with new DB
                }
                string sheetName = string.Format("Report_Hourly_Itemized_Sales_{0}", DateTime.Now.ToString("MMddyyyy")).Replace(" ", "_");
                Response.Clear();
                Response.ClearContent();
                Response.ClearHeaders();
                //HttpContext.Response.Clear();
                Response.Charset         = UTF8Encoding.UTF8.WebName;
                Response.ContentEncoding = UTF8Encoding.UTF8;
                if (model.FormatExport.Equals(Commons.Html))
                {
                    Response.AddHeader("content-disposition", string.Format(@"attachment;filename={0}.html", sheetName));
                }
                else
                {
                    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                    Response.AddHeader("content-disposition", string.Format(@"attachment;filename={0}.xlsx", sheetName));
                }
                using (var memoryStream = new System.IO.MemoryStream())
                {
                    wb.SaveAs(memoryStream);
                    if (model.FormatExport.Equals(Commons.Html))
                    {
                        Workbook workbook = new Workbook();
                        workbook.LoadFromStream(memoryStream);
                        //convert Excel to HTML
                        Worksheet sheet = workbook.Worksheets[0];
                        using (var ms = new MemoryStream())
                        {
                            sheet.SaveToHtml(ms);
                            ms.WriteTo(HttpContext.Response.OutputStream);
                            ms.Close();
                        }
                    }
                    else
                    {
                        memoryStream.WriteTo(HttpContext.Response.OutputStream);
                    }
                    memoryStream.Close();
                }
                HttpContext.Response.End();
                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                _logger.Error("Hourly Itemized Sales Report Error: " + ex);
                return(new HttpStatusCodeResult(400, ex.Message));
            }
        }
예제 #3
0
        public List <UsageManagementModel> CalUsageManagement(UsageManagementRequest request)
        {
            var result = new List <UsageManagementModel>();

            //List Sale
            var lstSale = GetDataSale(request);

            if (lstSale != null && lstSale.Count > 0)
            {
                //get all business day
                var _lstBusDayAllStore = _baseFactory.GetBusinessDays(request.DateFrom, request.DateTo, request.StoreId, request.Mode);
                var lstItemIdSale      = lstSale.Select(ss => ss.ItemId).Distinct().ToList();

                var lstRecipeItems    = GetRecipeItem(request.StoreId);
                var lstrecipeModifier = GetRecipeModifier(request.StoreId);
                lstRecipeItems.AddRange(lstrecipeModifier);

                List <ItemSaleForIngredientModel> _lstDetailTmp = new List <ItemSaleForIngredientModel>();

                if (lstRecipeItems != null && lstRecipeItems.Count > 0)
                {
                    lstRecipeItems = lstRecipeItems.Where(ww => lstItemIdSale.Contains(ww.ItemId)).ToList();

                    foreach (var item in lstRecipeItems)
                    {
                        var lstSaleItem = lstSale.Where(ww => ww.ItemId == item.ItemId).ToList();
                        foreach (var subItem in lstSaleItem)
                        {
                            item.Usage += item.BaseUsage * subItem.Quantity;

                            _lstDetailTmp.Add(new ItemSaleForIngredientModel()
                            {
                                IngredientId = item.IngredientId,
                                ItemId       = subItem.ItemId,
                                ItemName     = subItem.ItemName,
                                BaseUsage    = item.BaseUsage,
                                CreatedDate  = subItem.CreatedDate,
                                Qty          = subItem.Quantity
                            });
                        }
                    }
                    var lstUsageGroupIngredient = lstRecipeItems.GroupBy(gg => gg.IngredientId);

                    UsageManagementModel       usageManagementModel = null;
                    UsageManagementDetailModel detail = null;
                    int indexPage = 1, indexChildPage = 1;
                    foreach (var item in lstUsageGroupIngredient)
                    {
                        usageManagementModel         = new UsageManagementModel();
                        usageManagementModel.Index   = indexPage;
                        usageManagementModel.Id      = item.Key;
                        usageManagementModel.Code    = item.Select(ss => ss.IngredientCode).FirstOrDefault();
                        usageManagementModel.Name    = item.Select(ss => ss.IngredientName).FirstOrDefault();
                        usageManagementModel.UOMName = item.Select(ss => ss.UOMName).FirstOrDefault();
                        usageManagementModel.Usage   = item.Sum(ss => ss.Usage);

                        indexChildPage = 1;
                        foreach (var busDay in _lstBusDayAllStore)
                        {
                            var lstDish = _lstDetailTmp.Where(ww => ww.IngredientId == usageManagementModel.Id &&
                                                              ww.CreatedDate >= busDay.DateFrom && ww.CreatedDate <= busDay.DateTo).ToList();
                            if (lstDish != null && lstDish.Count > 0)
                            {
                                var lstDishGroup = lstDish.GroupBy(gg => gg.ItemId);
                                foreach (var dish in lstDishGroup)
                                {
                                    detail             = new UsageManagementDetailModel();
                                    detail.BusinessDay = busDay.DateDisplay;
                                    detail.Index       = indexChildPage;
                                    detail.ItemName    = dish.Select(ss => ss.ItemName).FirstOrDefault();
                                    detail.Qty         = dish.Sum(ss => ss.Qty);
                                    detail.Usage       = detail.Qty * dish.Select(ss => ss.BaseUsage).FirstOrDefault();

                                    usageManagementModel.ListDetail.Add(detail);
                                    indexChildPage++;
                                }
                            }
                        }

                        result.Add(usageManagementModel);
                        indexPage++;
                    }
                }
            }



            return(result);
        }
        public ActionResult Report(ItemizedSalesAnalysisReportModel model)
        {
            try
            {
                var _lstCateChecked = new List <RFilterCategoryModel>();
                var _lstSetChecked  = new List <RFilterCategoryModel>();

                model.FilterType = (int)Commons.EFilterType.OnDay;
                if (model.EndTime.Hours == 0 && model.EndTime.Minutes == 0)
                {
                    model.EndTime = new TimeSpan(23, 59, 59);
                    if (model.StartTime.Hours == 0 && model.StartTime.Minutes == 0)
                    {
                        model.FilterType = (int)Commons.EFilterType.None;
                    }
                }
                else if (model.StartTime > model.EndTime)
                {
                    model.FilterType = (int)Commons.EFilterType.Days;
                }

                DateTime dFrom = new DateTime(model.FromDate.Year, model.FromDate.Month, model.FromDate.Day, model.StartTime.Hours, model.StartTime.Minutes, 0)
                , dTo          = new DateTime(model.ToDate.Year, model.ToDate.Month, model.ToDate.Day, model.EndTime.Hours, model.EndTime.Minutes, 0);
                if (dFrom >= dTo)
                {
                    ModelState.AddModelError("FromDate", CurrentUser.GetLanguageTextFromKey("From Date must be less than To Date."));
                }
                else
                {
                    dTo = dTo.AddSeconds(59);
                }

                if (model.Type == Commons.TypeCompanySelected) //Company
                {
                    if (model.ListCompanys == null)
                    {
                        ModelState.AddModelError("ListCompanys", CurrentUser.GetLanguageTextFromKey("Please choose company."));
                    }
                }
                else //Store
                {
                    if (model.ListStores == null)
                    {
                        ModelState.AddModelError("ListStores", CurrentUser.GetLanguageTextFromKey("Please choose store."));
                    }
                }

                if (model.ListStoreCate != null)
                {
                    model.ListCategories.AddRange(model.ListStoreCate.SelectMany(ss => ss.ListCategoriesSel).ToList());
                }

                //// Get list categories
                #region List categories V1, updated 03212018, get all parent & child categories selected
                if (model.ListCategories != null && model.ListCategories.Any())
                {
                    _categoriesFactory.GetCategoryCheck_V1(ref _lstCateChecked, model.ListCategories);
                }
                else
                {
                    var listCategories = GetListCategories(model.Type == 1 ? model.ListCompanys : model.ListStores, model.Type);
                    _categoriesFactory.GetCategoryCheck_V1(ref _lstCateChecked, listCategories, true);
                }
                #endregion End list categories V1, updated 03212018, get all parent & child categories selected


                if (model.ListStoreSetMenu != null)
                {
                    model.ListSetMenu.AddRange(model.ListStoreSetMenu.SelectMany(ss => ss.ListSetMenuSel).ToList());
                }

                if (model.ListSetMenu != null && model.ListSetMenu.Any())
                {
                    _lstSetChecked = model.ListSetMenu.Where(ww => ww.Checked).ToList();

                    _lstSetChecked.AddRange(model.ListSetMenu.Where(ww => ww.ListChilds != null && ww.ListChilds.Any())
                                            .SelectMany(ss => ss.ListChilds.Where(w => w.Checked).ToList()).ToList());
                }
                else
                {
                    // Select all SetMenu
                    _lstSetChecked = GetListSetMenus(model.Type == 1 ? model.ListCompanys : model.ListStores, model.Type);

                    _lstSetChecked.AddRange(_lstSetChecked.Where(ww => ww.ListChilds != null && ww.ListChilds.Any())
                                            .SelectMany(ss => ss.ListChilds).ToList());
                }

                if (_lstCateChecked == null)
                {
                    _lstCateChecked = new List <RFilterCategoryModel>();
                }

                if (_lstSetChecked == null)
                {
                    _lstSetChecked = new List <RFilterCategoryModel>();
                }

                if (!ModelState.IsValid)
                {
                    Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    return(View("Index", model));
                }

                var _lstCateCheckedId = _lstCateChecked.Select(ss => ss.Id).ToList();
                var _lstSetCheckedId  = _lstSetChecked.Select(ss => ss.Id).ToList();

                // Get list store selected
                var _lstStoreCate     = _lstCateChecked.Select(ss => ss.StoreId).Distinct().ToList();
                var _lstStoreSet      = _lstSetChecked.Select(ss => ss.StoreId).Distinct().ToList();
                var _lstStoresCateSet = _lstStoreCate.Concat(_lstStoreSet).Distinct().ToList();

                //Get Selected Store
                List <StoreModels> lstStores = new List <StoreModels>();
                //if (model.Type == Commons.TypeCompanySelected) //Company
                //{
                //    lstStores = model.GetSelectedStoreCompany();
                //    lstStores = lstStores.Where(ww => _lstStoresCateSet.Contains(ww.Id)).ToList();
                //    model.ListStores = _lstStoresCateSet;
                //}
                //else //Store
                //{
                //    List<SelectListItem> vbStore = ViewBag.Stores;
                //    lstStores = model.GetSelectedStore(vbStore);
                //    lstStores = lstStores.Where(ww => _lstStoresCateSet.Contains(ww.Id)).ToList();
                //    model.ListStores = _lstStoresCateSet;
                //}
                ///////======= Updated 072018
                if (model.Type == Commons.TypeCompanySelected) //Company
                {
                    lstStores        = listStoresInfoSession.Where(ww => model.ListCompanys.Contains(ww.CompanyId)).ToList();
                    model.ListStores = lstStores.Select(ss => ss.Id).ToList();
                }
                else //Store
                {
                    lstStores = listStoresInfoSession.Where(ww => model.ListStores.Contains(ww.Id)).ToList();
                }

                model.FromDate = new DateTime(model.FromDate.Year, model.FromDate.Month, model.FromDate.Day, 0, 0, 0);
                model.ToDate   = new DateTime(model.ToDate.Year, model.ToDate.Month, model.ToDate.Day, 23, 59, 59);

                model.FromDateFilter = dFrom;
                model.ToDateFilter   = dTo;

                BaseFactory _baseFactory = new BaseFactory();
                ItemizedSalesAnalysisReportDetailFactory factory = new ItemizedSalesAnalysisReportDetailFactory();

                var _lstBusDayAllStore = _baseFactory.GetBusinessDays(model.FromDate, model.ToDate, model.ListStores, model.Mode);
                if (_lstBusDayAllStore != null && _lstBusDayAllStore.Any())
                {
                    model.ToDate   = _lstBusDayAllStore.Max(aa => aa.DateTo);
                    model.FromDate = _lstBusDayAllStore.Min(aa => aa.DateFrom);
                    var lstBusinessId = _lstBusDayAllStore.Select(ss => ss.Id).ToList();

                    // Get data
                    //#region DATA OF REPORT
                    //var lstItemizeds = factory.GetData(model.FromDate, model.ToDate, model.ListStores, _lstStoreCate, _lstStoreSet, _lstCateCheckedId, _lstSetCheckedId, model.Mode);
                    //if (lstItemizeds != null && lstItemizeds.Any())
                    //{
                    //    switch (model.FilterType)
                    //    {
                    //        case (int)Commons.EFilterType.OnDay:
                    //            lstItemizeds = lstItemizeds.Where(w => w.CreatedDate.TimeOfDay >= model.FromDateFilter.TimeOfDay && w.CreatedDate.TimeOfDay <= model.ToDateFilter.TimeOfDay).ToList();
                    //            break;
                    //        case (int)Commons.EFilterType.Days:
                    //            lstItemizeds = lstItemizeds.Where(w => w.CreatedDate.TimeOfDay >= model.FromDateFilter.TimeOfDay || w.CreatedDate.TimeOfDay <= model.ToDateFilter.TimeOfDay).ToList();
                    //            break;

                    //    }
                    //}

                    //if(lstItemizeds == null)
                    //{
                    //    lstItemizeds = new List<ItemizedSalesAnalysisReportDetailModels>();
                    //}

                    //DiscountAndMiscReportFactory miscFactory = new DiscountAndMiscReportFactory();
                    //var listMiscDiscount = miscFactory.GetReceiptDiscountAndMisc(model.FromDate, model.ToDate, model.ListStores, model.Mode, model.FromDateFilter, model.ToDateFilter, model.FilterType);
                    //if (listMiscDiscount == null)
                    //{
                    //    listMiscDiscount = new List<DiscountAndMiscReportModels>();
                    //}
                    //listMiscDiscount.ForEach(ss => ss.DiscountValue = 0);
                    //#endregion

                    //DiscountDetailsReportFactory discountDetailFactory = new DiscountDetailsReportFactory();
                    //var lstDiscount = discountDetailFactory.GetDiscountTotal(model.ListStores, model.FromDate, model.ToDate, model.Mode, model.FromDateFilter, model.ToDateFilter, model.FilterType);

                    //if (lstDiscount != null && lstDiscount.Any())
                    //{
                    //    listMiscDiscount.AddRange(lstDiscount);
                    //}

                    //Export excel
                    //XLWorkbook wb = factory.ExportExcel(lstItemizeds, model, lstStores, listMiscDiscount);
                    XLWorkbook wb = factory.ExportExcel_New(model, lstStores, _lstStoreCate, _lstStoreSet, _lstCateCheckedId, _lstSetCheckedId);

                    ViewBag.wb = wb;
                    string sheetName = string.Format("Report_Itemized_Sales_Detail_{0}", DateTime.Now.ToString("MMddyyyy")).Replace(" ", "_");
                    Response.Clear();
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Response.Charset         = System.Text.UTF8Encoding.UTF8.WebName;
                    Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
                    if (model.FormatExport.Equals(Commons.Html))
                    {
                        Response.AddHeader("content-disposition", String.Format(@"attachment;filename={0}.html", sheetName));
                    }
                    else
                    {
                        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                        Response.AddHeader("content-disposition", String.Format(@"attachment;filename={0}.xlsx", sheetName));
                    }
                    using (var memoryStream = new MemoryStream())
                    {
                        wb.SaveAs(memoryStream);
                        if (model.FormatExport.Equals(Commons.Html))
                        {
                            Workbook workbook = new Workbook();
                            workbook.LoadFromStream(memoryStream);
                            //convert Excel to HTML
                            Worksheet sheet = workbook.Worksheets[0];
                            using (var ms = new MemoryStream())
                            {
                                sheet.SaveToHtml(ms);
                                ms.WriteTo(HttpContext.Response.OutputStream);
                                ms.Close();
                            }
                        }
                        else
                        {
                            memoryStream.WriteTo(HttpContext.Response.OutputStream);
                        }
                        memoryStream.Close();
                    }
                    HttpContext.Response.End();
                    return(View("Index", model));
                }
                else
                {
                    //Export excel
                    XLWorkbook wb = factory.ExportExcelEmpty(model);
                    //var ws = wb.Worksheets.Add("Itemized_Sales_Detail_Report");
                    ViewBag.wb = wb;
                    string sheetName = string.Format("Report_Itemized_Sales_Detail_{0}", DateTime.Now.ToString("MMddyyyy")).Replace(" ", "_");
                    Response.Clear();
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Response.Charset         = System.Text.UTF8Encoding.UTF8.WebName;
                    Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
                    if (model.FormatExport.Equals(Commons.Html))
                    {
                        Response.AddHeader("content-disposition", String.Format(@"attachment;filename={0}.html", sheetName));
                    }
                    else
                    {
                        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                        Response.AddHeader("content-disposition", String.Format(@"attachment;filename={0}.xlsx", sheetName));
                    }
                    using (var memoryStream = new MemoryStream())
                    {
                        wb.SaveAs(memoryStream);
                        if (model.FormatExport.Equals(Commons.Html))
                        {
                            Workbook workbook = new Workbook();
                            workbook.LoadFromStream(memoryStream);
                            //convert Excel to HTML
                            Worksheet sheet = workbook.Worksheets[0];
                            using (var ms = new MemoryStream())
                            {
                                sheet.SaveToHtml(ms);
                                ms.WriteTo(HttpContext.Response.OutputStream);
                                ms.Close();
                            }
                        }
                        else
                        {
                            memoryStream.WriteTo(HttpContext.Response.OutputStream);
                        }
                        memoryStream.Close();
                    }
                    HttpContext.Response.End();
                    return(View("Index", model));
                }
            }
            catch (Exception ex)
            {
                _logger.Error("Itemized Sales Analysis Detail Report Error: " + ex);
                return(new HttpStatusCodeResult(400, ex.Message));
            }
        }
예제 #5
0
        public XLWorkbook Report(BaseReportModel model, List <StoreModels> lstStore)
        {
            XLWorkbook   wb = new XLWorkbook();
            IXLWorksheet ws = wb.Worksheets.Add("Monthly_Transactions_Report");

            CreateReportHeaderNew(ws, 15, model.FromDate, model.ToDate, _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Monthly Transactions Report").ToUpper());
            ws.Range(1, 1, 4, 15).Style.Border.InsideBorder       = XLBorderStyleValues.Thin;
            ws.Range(1, 1, 4, 15).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            ws.Range(1, 1, 4, 15).Style.Border.InsideBorderColor  = XLColor.FromHtml("#000000");
            ws.Range(1, 1, 4, 15).Style.Border.OutsideBorderColor = XLColor.FromHtml("#000000");

            var    _lstBusDayAllStore = _baseFactory.GetBusinessDays(model.FromDate, model.ToDate, model.ListStores, model.Mode);
            int    row = 5;
            string storeName = string.Empty, storeId = string.Empty;

            for (int i = 0; i < lstStore.Count; i++)
            {
                //Get StoreName
                StoreModels store = lstStore[i];
                storeName = store.Name;
                storeId   = store.Id;
                //header report
                FormatStoreHeader(storeName, ref ws, ref row);
                row++;
                int startRow          = row;
                var businessInStoreId = _lstBusDayAllStore.Where(ww => ww.StoreId == storeId).Select(ss => ss.Id).ToList();
                List <DailyTransactionsReportModels> ingredients = null;
                if (businessInStoreId != null && businessInStoreId.Any())
                {
                    ingredients = GetListIngredientUsage(model, storeId, businessInStoreId);
                }

                var listDataSumary = new List <DailyTransactionsReportModels>();

                if (ingredients != null && ingredients.Count > 0)
                {
                    //Get all business day in store
                    var businessInStore = _lstBusDayAllStore.Where(ww => ww.StoreId == storeId).ToList();
                    // Group by year, month of business day
                    //var businessMonthInStore = businessInStore.GroupBy(r => new { r.DateFrom.Year, r.DateFrom.Month })
                    //    .Select(x => new {
                    //        year = x.Key.Year,
                    //        month = x.Key.Month,
                    //        startDateFrom = x.Select(r => r.DateFrom).FirstOrDefault(),
                    //        endDateFrom = x.Select(r => r.DateFrom).LastOrDefault(),
                    //        endDateTo = x.Select(r => r.DateTo).LastOrDefault(),
                    //    }).OrderBy(x => x.year).ThenBy(x => x.month).ToList();

                    var businessMonthInStore = businessInStore.GroupBy(r => new { Year = r.DateFrom.Year, Month = r.DateFrom.Month })
                                               .OrderBy(x => x.Key.Year).ThenBy(x => x.Key.Month).ToList();

                    BusinessDayDisplayModels             minBD = null;
                    BusinessDayDisplayModels             maxBD = null;
                    List <DailyTransactionsReportModels> lstDataInMonthOpenBal = null;
                    List <string> lstBusinessIds = new List <string>();
                    for (int d = 0; d < businessMonthInStore.Count; d++)
                    {
                        minBD = businessMonthInStore[d].OrderBy(oo => oo.DateFrom).FirstOrDefault();
                        maxBD = businessMonthInStore[d].OrderBy(oo => oo.DateFrom).LastOrDefault();

                        var listOpenBals = ingredients.Where(ww => ww.BusinessId == minBD.Id && ww.StoreId == storeId).ToList();

                        lstBusinessIds        = businessMonthInStore[d].Select(ss => ss.Id).ToList();
                        lstDataInMonthOpenBal = ingredients.Where(m => lstBusinessIds.Contains(m.BusinessId) && m.StoreId == storeId).ToList();

                        List <DailyTransactionsReportModels> lstDataInMonth = ingredients.Where(m =>
                                                                                                lstBusinessIds.Contains(m.BusinessId) && m.StoreId == storeId)
                                                                              .GroupBy(m => new { m.IngredientCode, m.IngredientName, m.BaseUOMName, m.TypeName })
                                                                              .Select(mm => new DailyTransactionsReportModels()
                        {
                            IngredientCode = mm.Key.IngredientCode,
                            IngredientName = mm.Key.IngredientName,
                            BaseUOMName    = mm.Key.BaseUOMName,
                            TypeName       = mm.Key.TypeName,
                            OpenBal        = listOpenBals.Where(ww => ww.IngredientCode == mm.Key.IngredientCode && ww.TypeName == mm.Key.TypeName)
                                             .Select(m => m.OpenBal).FirstOrDefault(),
                            Received       = mm.Sum(m => m.Received),
                            TransferIn     = mm.Sum(m => m.TransferIn),
                            TransferOut    = mm.Sum(m => m.TransferOut),
                            Return         = mm.Sum(m => m.Return),
                            Damage         = mm.Sum(m => m.Damage),
                            Wast           = mm.Sum(m => m.Wast),
                            Others         = mm.Sum(m => m.Others),
                            UseForSelfMade = mm.Sum(m => m.UseForSelfMade),
                            Sales          = mm.Sum(m => m.Sales)
                        }).OrderBy(mm => mm.TypeName).ThenBy(mm => mm.IngredientName).ToList();

                        listDataSumary.AddRange(lstDataInMonth);
                        // Business day
                        if (lstDataInMonth != null && lstDataInMonth.Any())
                        {
                            // Name of month
                            ws.Range(row, 1, row, 15).Merge().SetValue(_AttributeForLanguage.CurrentUser.GetLanguageTextFromKey(CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(businessMonthInStore[d].Key.Month)));
                            ws.Range(row, 1, row, 15).Style.Alignment.Horizontal   = XLAlignmentHorizontalValues.Center;
                            ws.Range(row, 1, row++, 15).Style.Fill.BackgroundColor = XLColor.FromHtml("#ffcc99");

                            // Infomation of business day in month
                            //var startDateFrom = businessMonthInStore[d].startDateFrom.ToString("MM/dd/yyyy");
                            //var endDateFrom = businessMonthInStore[d].endDateTo.ToString("MM/dd/yyyy");

                            if (minBD.DateFrom.Date == maxBD.DateTo.Date)
                            {
                                ws.Range(row, 1, row, 15).Merge().SetValue(_AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Date") + ": " + minBD.DateFrom.ToString("MM/dd/yyyy"));
                            }
                            else
                            {
                                ws.Range(row, 1, row, 15).Merge().SetValue(_AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Date")
                                                                           + ": " + _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("From") + " " + minBD.DateFrom.ToString("MM/dd/yyyy") + " "
                                                                           + _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("To") + " " + maxBD.DateTo.ToString("MM/dd/yyyy"));
                            }
                            ws.Range(row, 1, row, 15).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                            ws.Range(row - 1, 1, row++, 15).Style.Font.Bold      = true;
                            decimal closeBal = 0;
                            int     rowTbl   = row;
                            for (int j = 0; j < lstDataInMonth.Count; j++)
                            {
                                closeBal = (decimal)lstDataInMonth[j].OpenBal + (decimal)lstDataInMonth[j].Received + (decimal)lstDataInMonth[j].TransferIn - (decimal)lstDataInMonth[j].Return - (decimal)lstDataInMonth[j].TransferOut - (decimal)lstDataInMonth[j].Damage - (decimal)lstDataInMonth[j].Wast - (decimal)lstDataInMonth[j].Others - lstDataInMonth[j].UseForSelfMade - (decimal)lstDataInMonth[j].Sales;

                                ws.Cell("A" + row).Value = "'" + lstDataInMonth[j].IngredientCode;
                                ws.Cell("B" + row).Value = lstDataInMonth[j].IngredientName;
                                ws.Cell("C" + row).Value = lstDataInMonth[j].BaseUOMName;
                                ws.Cell("D" + row).Value = lstDataInMonth[j].TypeName;

                                ws.Cell("E" + row).Value = lstDataInMonth[j].OpenBal;
                                ws.Cell("F" + row).Value = lstDataInMonth[j].Received;
                                ws.Cell("G" + row).Value = lstDataInMonth[j].TransferIn;
                                ws.Cell("H" + row).Value = lstDataInMonth[j].Return;
                                ws.Cell("I" + row).Value = lstDataInMonth[j].TransferOut;
                                ws.Cell("J" + row).Value = lstDataInMonth[j].Damage;
                                ws.Cell("K" + row).Value = lstDataInMonth[j].Wast;
                                ws.Cell("L" + row).Value = lstDataInMonth[j].Others;
                                ws.Cell("M" + row).Value = lstDataInMonth[j].UseForSelfMade;

                                ws.Cell("N" + row).Value   = lstDataInMonth[j].Sales;
                                ws.Cell("O" + row++).Value = closeBal;
                            }
                            ws.Range(rowTbl, 5, row - 1, 15).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                            ws.Range(rowTbl, 5, row - 1, 15).Style.NumberFormat.Format  = "#,##0.000";
                        }
                    }
                }
                ws.Range(startRow, 1, row - 1, 15).Style.Border.InsideBorder       = XLBorderStyleValues.Thin;
                ws.Range(startRow, 1, row - 1, 15).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
                ws.Range(startRow, 1, row - 1, 15).Style.Border.InsideBorderColor  = XLColor.FromHtml("#000000");
                ws.Range(startRow, 1, row - 1, 15).Style.Border.OutsideBorderColor = XLColor.FromHtml("#000000");
                row += 2;
                // Summary
                int rowSum = row;
                ws.Range(row, 1, row, 11).Merge().SetValue(_AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Summary").ToUpper());
                ws.Range(row, 1, row++, 11).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                ws.Cell("A" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Ingredient Code");
                ws.Cell("B" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Ingredient Name");
                ws.Cell("C" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Base UOM");
                ws.Cell("D" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Type");
                ws.Cell("E" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Open Balance");
                ws.Cell("F" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Purchase");
                ws.Cell("G" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Transfer");
                ws.Cell("H" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Data Entry");
                ws.Cell("I" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Used for Self Made Ingredient");
                ws.Cell("I" + row).Style.Alignment.WrapText = true;
                ws.Cell("J" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Sale");
                ws.Cell("K" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Close Balance");
                ws.Range(row - 1, 1, row, 11).Style.Fill.BackgroundColor = XLColor.FromHtml("#d9d9d9");
                ws.Range(row, 1, row, 11).Style.Alignment.Horizontal     = XLAlignmentHorizontalValues.Center;
                ws.Range(row, 1, row, 11).Style.Alignment.Vertical       = XLAlignmentVerticalValues.Center;
                ws.Range(row - 1, 1, row++, 11).Style.Font.Bold          = true;

                var listSumary = listDataSumary.GroupBy(o => new { o.IngredientCode, o.IngredientName, o.BaseUOMName, o.TypeName })
                                 .Select(o => new DailyTransactionsReportModels()
                {
                    IngredientCode = o.Key.IngredientCode,
                    IngredientName = o.Key.IngredientName,
                    BaseUOMName    = o.Key.BaseUOMName,
                    TypeName       = o.Key.TypeName
                }).OrderBy(o => o.TypeName).ThenBy(o => o.IngredientName).ToList();

                decimal openBalance    = 0;
                decimal purchase       = 0;
                decimal transfer       = 0;
                decimal dataEntry      = 0;
                decimal sale           = 0;
                decimal usaForSelfMade = 0;
                int     rowTblSum      = row;
                foreach (var data in listSumary)
                {
                    var listChild = listDataSumary.Where(o => o.IngredientCode == data.IngredientCode &&
                                                         o.IngredientName == data.IngredientName && o.BaseUOMName == data.BaseUOMName).OrderBy(o => o.StartedOn).ToList();

                    openBalance    = listChild.Select(o => (decimal)o.OpenBal).FirstOrDefault();
                    purchase       = listChild.Sum(o => (decimal)o.Received - (decimal)o.Return);
                    transfer       = listChild.Sum(o => (decimal)o.TransferIn - (decimal)o.TransferOut);
                    dataEntry      = listChild.Sum(o => (decimal)o.Damage + (decimal)o.Wast + (decimal)o.Others);
                    sale           = listChild.Sum(o => (decimal)o.Sales);
                    usaForSelfMade = listChild.Sum(o => (decimal)o.UseForSelfMade);

                    ws.Cell("A" + row).Value = "'" + data.IngredientCode;
                    ws.Cell("B" + row).Value = data.IngredientName;
                    ws.Cell("C" + row).Value = data.BaseUOMName;
                    ws.Cell("D" + row).Value = data.TypeName;

                    ws.Cell("E" + row).Value = openBalance;
                    ws.Cell("F" + row).Value = purchase;
                    ws.Cell("G" + row).Value = transfer;
                    ws.Cell("H" + row).Value = dataEntry;
                    ws.Cell("I" + row).Value = usaForSelfMade;

                    ws.Cell("J" + row).Value   = sale;
                    ws.Cell("K" + row++).Value = (openBalance + purchase + transfer - dataEntry - sale - usaForSelfMade);
                }
                ws.Range(rowSum, 1, row - 1, 11).Style.Border.InsideBorder       = XLBorderStyleValues.Thin;
                ws.Range(rowSum, 1, row - 1, 11).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
                ws.Range(rowSum, 1, row - 1, 11).Style.Border.InsideBorderColor  = XLColor.FromHtml("#000000");
                ws.Range(rowSum, 1, row - 1, 11).Style.Border.OutsideBorderColor = XLColor.FromHtml("#000000");
                ws.Range(rowTblSum, 5, row - 1, 11).Style.Alignment.Horizontal   = XLAlignmentHorizontalValues.Right;
                ws.Range(rowTblSum, 5, row - 1, 11).Style.NumberFormat.Format    = "#,##0.000";
                row++;

                List <int> lstWidCol = new List <int>()
                {
                    20, 20, 20, 20, 18, 18, 18, 18, 30, 18, 18, 18, 30, 18, 20
                };
                for (int y = 0; y < lstWidCol.Count; y++)
                {
                    ws.Column(y + 1).Width = lstWidCol[y];
                }
            }
            return(wb);
        }
        public XLWorkbook Report(BaseReportModel model, List <StoreModels> lstStore)
        {
            XLWorkbook   wb = new XLWorkbook();
            IXLWorksheet ws = wb.Worksheets.Add("Daily_Transactions_Report");

            CreateReportHeaderNew(ws, 17, model.FromDate, model.ToDate, _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Daily Transactions Report").ToUpper());
            ws.Range(1, 1, 4, 17).Style.Border.InsideBorder       = XLBorderStyleValues.Thin;
            ws.Range(1, 1, 4, 17).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
            ws.Range(1, 1, 4, 17).Style.Border.InsideBorderColor  = XLColor.FromHtml("#000000");
            ws.Range(1, 1, 4, 17).Style.Border.OutsideBorderColor = XLColor.FromHtml("#000000");

            var    _lstBusDayAllStore = _baseFactory.GetBusinessDays(model.FromDate, model.ToDate, model.ListStores, model.Mode);
            int    row = 5;
            string storeName = string.Empty, storeId = string.Empty;

            for (int i = 0; i < lstStore.Count; i++)
            {
                //Get StoreName
                StoreModels store = lstStore[i];
                storeName = store.Name;
                storeId   = store.Id;
                //header report
                FormatStoreHeader(storeName, ref ws, ref row);
                row++;
                int startRow          = row;
                var businessInStoreId = _lstBusDayAllStore.Where(ww => ww.StoreId == storeId).Select(ss => ss.Id).ToList();
                List <DailyTransactionsReportModels> ingredients = null;
                if (businessInStoreId != null && businessInStoreId.Any())
                {
                    ingredients = GetListIngredientUsage(model, storeId, businessInStoreId);
                }

                var listDataSumary = new List <DailyTransactionsReportModels>();

                if (ingredients != null && ingredients.Count > 0)
                {
                    //Get all business day in store
                    var businessInStore = _lstBusDayAllStore.Where(ww => ww.StoreId == storeId).ToList();
                    List <DailyTransactionsReportModels> lstDataInDate = null;
                    for (int d = 0; d < businessInStore.Count; d++)
                    {
                        //List<DailyTransactionsReportModels> lstDataInDate =
                        //    ingredients.Where(m =>
                        //    m.StartedOn >= businessInStore[d].DateFrom
                        //    && m.ClosedOn <= businessInStore[d].DateTo

                        //    && m.StoreId == storeId)
                        //    .OrderBy(m => m.TypeName).ThenBy(m => m.IngredientName).ToList();

                        lstDataInDate =
                            ingredients.Where(m =>
                                              m.BusinessId == businessInStore[d].Id

                                              && m.StoreId == storeId)
                            .OrderBy(m => m.TypeName).ThenBy(m => m.IngredientName).ToList();

                        listDataSumary.AddRange(lstDataInDate);
                        // Business day
                        if (lstDataInDate.Count > 0)
                        {
                            ws.Range(row, 1, row, 17).Merge().SetValue(_AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Business day") + ": " + _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Open") + " " + businessInStore[d].DateFrom.ToString("MM/dd/yyyy - HH:mm") + " " + _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Close") + " " + businessInStore[d].DateTo.ToString("MM/dd/yyyy - HH:mm"));
                            ws.Range(row, 1, row, 17).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                            ws.Range(row, 1, row++, 17).Style.Font.Bold          = true;
                            int rowTbl = row;
                            for (int j = 0; j < lstDataInDate.Count; j++)
                            {
                                ws.Cell("A" + row).Value = "'" + lstDataInDate[j].IngredientCode;
                                ws.Cell("B" + row).Value = lstDataInDate[j].IngredientName;
                                ws.Cell("C" + row).Value = lstDataInDate[j].BaseUOMName;
                                ws.Cell("D" + row).Value = lstDataInDate[j].TypeName;

                                ws.Cell("E" + row).Value = lstDataInDate[j].OpenBal;
                                ws.Cell("F" + row).Value = lstDataInDate[j].Received;
                                ws.Cell("G" + row).Value = lstDataInDate[j].TransferIn;
                                ws.Cell("H" + row).Value = lstDataInDate[j].Return;
                                ws.Cell("I" + row).Value = lstDataInDate[j].TransferOut;
                                ws.Cell("J" + row).Value = lstDataInDate[j].Damage;
                                ws.Cell("K" + row).Value = lstDataInDate[j].Wast;
                                ws.Cell("L" + row).Value = lstDataInDate[j].Others;
                                ws.Cell("M" + row).Value = lstDataInDate[j].UseForSelfMade;

                                ws.Cell("N" + row).Value   = lstDataInDate[j].Sales;
                                ws.Cell("O" + row).Value   = lstDataInDate[j].AutoCloseBal;//auto
                                ws.Cell("P" + row).Value   = lstDataInDate[j].CloseBal;
                                ws.Cell("Q" + row++).Value = lstDataInDate[j].AdjustValue;
                            }
                            ws.Range(rowTbl, 5, row - 1, 17).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
                            ws.Range(rowTbl, 5, row - 1, 17).Style.NumberFormat.Format  = "#,##0.000";
                        }
                    }
                }
                ws.Range(startRow, 1, row - 1, 17).Style.Border.InsideBorder       = XLBorderStyleValues.Thin;
                ws.Range(startRow, 1, row - 1, 17).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
                ws.Range(startRow, 1, row - 1, 17).Style.Border.InsideBorderColor  = XLColor.FromHtml("#000000");
                ws.Range(startRow, 1, row - 1, 17).Style.Border.OutsideBorderColor = XLColor.FromHtml("#000000");
                row += 2;
                // Summary
                int rowSum = row;
                ws.Range(row, 1, row, 11).Merge().SetValue(_AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Summary").ToUpper());
                ws.Range(row, 1, row++, 11).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                ws.Cell("A" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Ingredient Code");
                ws.Cell("B" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Ingredient Name");
                ws.Cell("C" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Base UOM");
                ws.Cell("D" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Type");
                ws.Cell("E" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Open Balance");
                ws.Cell("F" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Purchase");
                ws.Cell("G" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Transfer");
                ws.Cell("H" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Data Entry");
                ws.Cell("I" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Used for Self Made Ingredient");
                ws.Cell("I" + row).Style.Alignment.WrapText = true;
                ws.Cell("J" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Sale");
                ws.Cell("K" + row).Value = _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Close Balance");
                ws.Range(row - 1, 1, row, 11).Style.Fill.BackgroundColor = XLColor.FromHtml("#d9d9d9");
                ws.Range(row, 1, row, 11).Style.Alignment.Horizontal     = XLAlignmentHorizontalValues.Center;
                ws.Range(row, 1, row, 11).Style.Alignment.Vertical       = XLAlignmentVerticalValues.Center;
                ws.Range(row - 1, 1, row++, 11).Style.Font.Bold          = true;

                var listSumary = listDataSumary.GroupBy(o => new { o.IngredientCode, o.IngredientName, o.BaseUOMName, o.TypeName })
                                 .Select(o => new DailyTransactionsReportModels()
                {
                    IngredientCode = o.Key.IngredientCode,
                    IngredientName = o.Key.IngredientName,
                    BaseUOMName    = o.Key.BaseUOMName,
                    TypeName       = o.Key.TypeName
                }).OrderBy(o => o.TypeName).ThenBy(o => o.IngredientName).ToList();

                decimal openBalance    = 0;
                decimal purchase       = 0;
                decimal transfer       = 0;
                decimal dataEntry      = 0;
                decimal sale           = 0;
                decimal usaForSelfMade = 0;
                int     rowTblSum      = row;
                foreach (var data in listSumary)
                {
                    var listChild = listDataSumary.Where(o => o.IngredientCode == data.IngredientCode &&
                                                         o.IngredientName == data.IngredientName && o.BaseUOMName == data.BaseUOMName).OrderBy(o => o.StartedOn).ToList();

                    openBalance    = listChild.Select(o => (decimal)o.OpenBal).FirstOrDefault();
                    purchase       = listChild.Sum(o => (decimal)o.Received - (decimal)o.Return);
                    transfer       = listChild.Sum(o => (decimal)o.TransferIn - (decimal)o.TransferOut);
                    dataEntry      = listChild.Sum(o => (decimal)o.Damage + (decimal)o.Wast + (decimal)o.Others);
                    sale           = listChild.Sum(o => (decimal)o.Sales);
                    usaForSelfMade = listChild.Sum(o => (decimal)o.UseForSelfMade);

                    ws.Cell("A" + row).Value = "'" + data.IngredientCode;
                    ws.Cell("B" + row).Value = data.IngredientName;
                    ws.Cell("C" + row).Value = data.BaseUOMName;
                    ws.Cell("D" + row).Value = data.TypeName;

                    ws.Cell("E" + row).Value = openBalance;
                    ws.Cell("F" + row).Value = purchase;
                    ws.Cell("G" + row).Value = transfer;
                    ws.Cell("H" + row).Value = dataEntry;
                    ws.Cell("I" + row).Value = usaForSelfMade;

                    ws.Cell("J" + row).Value   = sale;
                    ws.Cell("K" + row++).Value = (openBalance + purchase + transfer - dataEntry - sale - usaForSelfMade);
                }
                ws.Range(rowSum, 1, row - 1, 11).Style.Border.InsideBorder       = XLBorderStyleValues.Thin;
                ws.Range(rowSum, 1, row - 1, 11).Style.Border.OutsideBorder      = XLBorderStyleValues.Thin;
                ws.Range(rowSum, 1, row - 1, 11).Style.Border.InsideBorderColor  = XLColor.FromHtml("#000000");
                ws.Range(rowSum, 1, row - 1, 11).Style.Border.OutsideBorderColor = XLColor.FromHtml("#000000");
                ws.Range(rowTblSum, 5, row - 1, 11).Style.Alignment.Horizontal   = XLAlignmentHorizontalValues.Right;
                ws.Range(rowTblSum, 5, row - 1, 11).Style.NumberFormat.Format    = "#,##0.000";
                row++;

                List <int> lstWidCol = new List <int>()
                {
                    20, 20, 20, 20, 18, 18, 18, 18, 30, 18, 18, 18, 30, 18, 20, 25
                };
                for (int y = 0; y < lstWidCol.Count; y++)
                {
                    ws.Column(y + 1).Width = lstWidCol[y];
                }
            }
            return(wb);
        }