public ResultModels InsertHourlyItemizedSalesReport(List <HourlyItemizedSalesReportModels> lstInfo)
        {
            //_logger.Info("==========================================================");
            //_logger.Info("Start insert HourlyItemizedSales data.......................");
            NSLog.Logger.Info("Start insert Hourly Itemized Sales data.......................", lstInfo);

            var result = new ResultModels();

            if (lstInfo != null && lstInfo.Any())
            {
                HourlyItemizedSalesReportFactory hourlyItemizedSalesReportFactory = new HourlyItemizedSalesReportFactory();
                result.IsOk = hourlyItemizedSalesReportFactory.Insert(lstInfo);
            }
            return(result);
        }
Пример #2
0
        public ActionResult Report(RPHourlyItemizedSalesModels model)
        {
            try
            {
                if (model.FromDate > model.ToDate)
                {
                    ModelState.AddModelError("FromDate", CurrentUser.GetLanguageTextFromKey("From Date must be less than To Date."));
                }
                else if (model.FromDate == model.ToDate)
                {
                    if ((model.FromTime == model.ToTime && model.FromTime.Hours != 0) || (model.FromTime > model.ToTime))
                    {
                        ModelState.AddModelError("FromDate", CurrentUser.GetLanguageTextFromKey("From Date must be less than To Date."));
                    }
                }

                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 (!ModelState.IsValid)
                {
                    Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    return(View("Index", model));
                }

                var _lstCateChecked = new List <RFilterCategoryModel>();
                var _lstSetChecked  = new List <RFilterCategoryModel>();

                // Get list categories selected
                // List categories V1, updated 03212018, get all parent & child category selected
                if (model.ListStoreCate != null)
                {
                    foreach (var item in model.ListStoreCate)
                    {
                        model.ListCategories.AddRange(item.ListCategoriesSel);
                    }
                }

                if (model.ListCategories != null && model.ListCategories.Any())
                {
                    _categoriesFactory.GetCategoryCheck_V1(ref _lstCateChecked, model.ListCategories);
                }
                else // Select all categories
                {
                    var listCategories = GetListCategories(model.Type == 1 ? model.ListCompanys : model.ListStores, model.Type);
                    _categoriesFactory.GetCategoryCheck_V1(ref _lstCateChecked, listCategories, true);
                }

                // List SetMenu selected
                if (model.ListStoreSetMenu != null)
                {
                    foreach (var item in model.ListStoreSetMenu)
                    {
                        model.ListSetMenu.AddRange(item.ListSetMenuSel);
                    }
                }
                if (model.ListSetMenu != null && model.ListSetMenu.Any())
                {
                    _lstSetChecked = model.ListSetMenu.Where(ww => ww.Checked).ToList();
                    var lstSetChild = model.ListSetMenu.Where(ww => ww.ListChilds != null && ww.ListChilds.Any()).ToList();
                    foreach (var item in lstSetChild)
                    {
                        _lstSetChecked.AddRange(item.ListChilds.Where(ww => ww.Checked));
                    }
                }
                else // Select all setmenu
                {
                    _lstSetChecked = GetListSetMenus(model.Type == 1 ? model.ListCompanys : model.ListStores, model.Type);
                    var lstSetChild = _lstSetChecked.Where(ww => ww.ListChilds != null && ww.ListChilds.Any()).ToList();
                    foreach (var item in lstSetChild)
                    {
                        _lstSetChecked.AddRange(item.ListChilds);
                    }
                }

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

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

                // Get list stores selected from categories, setmenu 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;
                ////}
                ////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();
                }

                HourlyItemizedSalesReportFactory factory = new HourlyItemizedSalesReportFactory();
                XLWorkbook wb = new XLWorkbook();

                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);

                DateTime _dFromFilter = model.FromDate;       // From date filter
                DateTime _dToFilter   = model.ToDate;         // To date filter
                int      _hFromFilter = model.FromTime.Hours; // From hour filter
                int      _hToFilter   = model.ToTime.Hours;   // To hour filter
                if (_hToFilter == 0)                          // ToTime == 00 <=> ToTime == 24
                {
                    _hToFilter = 24;
                }

                //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.CreateReportHeaderNewFilterTime(ws, 8, _dFromFilter, _dToFilter, _hFromFilter, _hToFilter, _AttributeForLanguage.CurrentUser.GetLanguageTextFromKey("Hourly Itemized Sales Report").ToUpper());
                }
                else
                {
                    model.FromDate = _lstBusDayAllStore.Min(aa => aa.DateFrom);
                    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_NewFilter(listTemp, _dFromFilter, _dToFilter,
                                                  _lstCateChecked, _lstSetChecked, listDiscountMisc, lstStores, model.Mode, _lstBusDayAllStore, _hFromFilter, _hToFilter);
                    #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
                    //PosSaleFactory posSaleFactory = new PosSaleFactory();
                    //var listDiscountMisc = posSaleFactory.GetReceiptDiscountAndMiscByDateTime(model.FromDate, model.ToDate, model.ListStores, model.Mode);

                    // Export data
                    //wb = factory.Export_NewDB(listTemp, _dFromFilter, _dToFilter,
                    //_lstCateChecked, _lstSetChecked, listDiscountMisc, lstStores, model.Mode, _lstBusDayAllStore, _hFromFilter, _hToFilter);
                    #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));
            }
        }