예제 #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
        //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);
        }
예제 #3
0
        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;
        }
예제 #4
0
        //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);
        }
예제 #5
0
        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));
        }
예제 #6
0
        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));
        }
예제 #7
0
        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);
        }
예제 #8
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);
        }