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); }
//For Old public UsageManagementModel CalUsageManagementByIngredient(UsageManagementRequest request, string ingredientId) { 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); UsageManagementModel usageManagementModel = new 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, ingredientId); var lstrecipeModifier = GetRecipeModifier(request.StoreId, ingredientId); lstRecipeItems.AddRange(lstrecipeModifier); List <ItemSaleForIngredientModel> _lstDetailTmp = new List <ItemSaleForIngredientModel>(); if (lstRecipeItems != null && lstRecipeItems.Count > 0) { lstRecipeItems = lstRecipeItems.Where(ww => lstItemIdSale.Contains(ww.ItemId)).ToList(); var lstItemIdInrecipe = lstRecipeItems.Select(ss => ss.ItemId).Distinct().ToList(); //Group item sale var lstItemSaleHaveRecipe = lstSale.Where(ww => lstItemIdInrecipe.Contains(ww.ItemId)).ToList(); if (lstItemSaleHaveRecipe != null && lstItemSaleHaveRecipe.Count > 0) { UsageManagementDetailModel detail = null; int indexChildPage = 1; foreach (var busDay in _lstBusDayAllStore) { var lstDish = lstItemSaleHaveRecipe.Where(ww => 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) { var recipe = lstRecipeItems.Where(ww => ww.ItemId == dish.Key).FirstOrDefault(); if (recipe != null) { detail = new UsageManagementDetailModel(); detail.BusinessDay = busDay.DateDisplay; detail.Index = indexChildPage; detail.ItemName = dish.Select(ss => ss.ItemName).FirstOrDefault(); detail.Qty = dish.Sum(ss => ss.Quantity); detail.Usage = detail.Qty * recipe.BaseUsage; usageManagementModel.ListDetail.Add(detail); indexChildPage++; } } } } } } } return(usageManagementModel); }
public async void CalUsageManagementForInventory(string companyId, List <StockUsageModel> lstSale, string businessDayId, string storeId, DateTime dFrom, DateTime dTo) { var result = new List <UsageManagementModel>(); if (lstSale != null && lstSale.Count > 0) { var lstItemIdSale = lstSale.Select(ss => ss.ItemId).Distinct().ToList(); var lstRecipeItems = GetRecipeItem(storeId); var lstrecipeModifier = GetRecipeModifier(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; } } var lstUsageGroupIngredient = lstRecipeItems.GroupBy(gg => gg.IngredientId); UsageManagementModel usageManagementModel = null; BusinessDayDisplayModels busDay = new BusinessDayDisplayModels(); busDay.StoreId = storeId; busDay.DateDisplay = dFrom.ToString("dd/MM/yyyy HH:mm") + " - " + dTo.ToString("dd/MM/yyyy HH:mm"); busDay.DateFrom = dFrom; busDay.DateTo = dTo; foreach (var item in lstUsageGroupIngredient) { usageManagementModel = new UsageManagementModel(); 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); usageManagementModel.ListDetail = CalUsageManagementByIngredientForInventory(lstSale, lstRecipeItems, busDay, usageManagementModel.Id); result.Add(usageManagementModel); } } } result = result.Where(ww => ww.Usage > 0).ToList(); _usageManagementFactory.SaveUsageManagement(companyId, storeId, businessDayId, dFrom, dTo, result); //return result; }
//For Old not use public List <UsageManagementModel> CalUsageManagementwithoutDetail(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); //List Sale var lstSale = GetDataSale(request); if (lstSale != null && lstSale.Count > 0) { 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; } } var lstUsageGroupIngredient = lstRecipeItems.GroupBy(gg => gg.IngredientId); UsageManagementModel usageManagementModel = null; int indexPage = 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); result.Add(usageManagementModel); indexPage++; } } } result = result.Where(ww => ww.Usage > 0).ToList(); return(result); }
public ActionResult LoadDetail2(List <UsageManagementDetailModel> items) { var result = new UsageManagementModel(); try { result.ListDetail = items; } catch (Exception ex) { _logger.Error(ex); return(new HttpStatusCodeResult(400, ex.Message)); } return(PartialView("_ListDataDetail", result)); }
public ActionResult LoadDetail(string usageManagementDetailId) { var result = new UsageManagementModel(); try { List <string> lstUsageManagementDetailId = usageManagementDetailId.Split('|').ToList(); result = _usageManagementFactory.GetUsageManagementItemDetail(lstUsageManagementDetailId); } catch (Exception ex) { _logger.Error(ex); return(new HttpStatusCodeResult(400, ex.Message)); } return(PartialView("_ListDataDetail", result)); }
public UsageManagementModel GetUsageManagementItemDetail(List <string> lstUsageManagementDetailId) { UsageManagementModel usageManagementModel = new UsageManagementModel(); using (var cxt = new NuWebContext()) { var query = cxt.I_UsageManagementItemDetail.Where(ww => lstUsageManagementDetailId.Contains(ww.UsageManagementDetailId)).ToList(); UsageManagementDetailModel detail = null; int index = 1; foreach (var item in query) { detail = new UsageManagementDetailModel(); detail.BusinessDay = item.BusinessDay; detail.Index = index; detail.ItemName = item.ItemName; detail.Qty = item.Qty; detail.Usage = item.Usage; usageManagementModel.ListDetail.Add(detail); index++; } } return(usageManagementModel); }
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); }