Ejemplo n.º 1
0
        public ActionResult Create()
        {
            ReceiptNoteSelfMadeModels model = new ReceiptNoteSelfMadeModels();

            model.StoreId = CurrentUser.StoreId;
            return(View(model));
        }
Ejemplo n.º 2
0
        public ActionResult AddReceiptNoteSelfMade(ReceiptNoteSelfMadeModels data)
        {
            ReceiptNoteSelfMadeModels model = new ReceiptNoteSelfMadeModels();
            int OffSet = 0;

            model.ListItem = new List <ReceiptNoteSelfMadeDetailModels>();
            List <string> lstWOIds = new List <string>();

            if (data.ListItem != null && data.ListItem.Count > 0)
            {
                model.ListItem = data.ListItem;
                //OffSet = data.ListItem.Count;
                OffSet   = OffSet++;
                lstWOIds = model.ListItem.Where(ww => !string.IsNullOrEmpty(ww.WOId)).Select(x => x.WOId).ToList();
            }
            if (lstWOIds == null)
            {
                lstWOIds = new List <string>();
            }
            foreach (var item in data.ListWorkOrder)
            {
                if (!lstWOIds.Contains(item.Id))
                {
                    var ListItemDetail = _factory.GetData(item.Id);
                    //if (IngredientIds.Count > 0)
                    //{
                    //    ListItemDetail = ListItemDetail.Where(x => !IngredientIds.Contains(x.IngredientId) && x.WOId == item.Id).ToList();
                    //}
                    //item.ListItemForRN= ListItemDetail;
                    foreach (var ItemDetail in ListItemDetail)
                    {
                        model.ListItem.Add(new ReceiptNoteSelfMadeDetailModels
                        {
                            WOId     = item.Id,
                            WONumber = item.WONumber,

                            Id             = ItemDetail.Id,
                            IngredientId   = ItemDetail.IngredientId,
                            IngredientName = ItemDetail.IngredientName,
                            IngredientCode = ItemDetail.IngredientCode,
                            Qty            = ItemDetail.Qty,
                            RemainingQty   = ItemDetail.RemainingQty,

                            //IsActived = ItemDetail.IsActived,
                            //BaseReceivingQty = ItemDetail.BaseReceivingQty,
                            IsSelfMode  = ItemDetail.IsSelfMode,
                            IsStockAble = ItemDetail.IsStockAble,

                            ReceivingQty = ItemDetail.ReceivingQty,
                            BaseQty      = ItemDetail.BaseQty,

                            BaseUOM = ItemDetail.BaseUOM,
                            Status  = (byte)Commons.EStatus.Actived,
                            OffSet  = OffSet++
                        });
                    }
                }
            }
            return(PartialView("_ListItem", model));
        }
Ejemplo n.º 3
0
        public ActionResult LoadIngredient()
        {
            var lstComId = GetListCompany().Select(ss => ss.Value).ToList();
            ReceiptNoteSelfMadeModels model = new ReceiptNoteSelfMadeModels();
            var listIng = _ingredientFactory.GetIngredientSelfMade(lstComId);

            foreach (var item in listIng)
            {
                var itemDetail = new ReceiptNoteSelfMadeDetailModels
                {
                    BaseUOM        = item.ReceivingUOMName,
                    IngredientId   = item.Id,
                    IngredientName = item.Name,
                    IngredientCode = item.Code,

                    //BaseReceivingQty = item.ReceivingQty,
                    BaseQty     = item.ReceivingQty,
                    IsSelfMode  = item.IsSelfMode,
                    IsStockAble = item.IsStockable,
                };
                model.ListItemForSelect.Add(itemDetail);
            }
            model.ListItemForSelect = model.ListItemForSelect.OrderByDescending(x => x.IsActived ? 1 : 0).ThenBy(x => x.IngredientName).ToList();
            return(PartialView("_TableChooseIngredient", model));
        }
Ejemplo n.º 4
0
        public ActionResult LoadWorkOrder(/*string StoreId, string WONo, */ ReceiptNoteSelfMadeModels data)
        {
            ReceiptNoteSelfMadeModels model = new ReceiptNoteSelfMadeModels();

            model.ListWorkOrder = _factory.LoadWOForRN(data.StoreId, null, data.WONo);
            model.ListItem      = data.ListItem;
            return(PartialView("_ListWO", model));
        }
Ejemplo n.º 5
0
        public ActionResult LoadDetail(string ReceiptNoteSelfMadeId)
        {
            var model = new ReceiptNoteSelfMadeModels();

            try
            {
                model           = _factory.GetReceiptNoteSelfMadeById(ReceiptNoteSelfMadeId);
                model.StoreName = lstStore.Where(x => x.Value.Equals(model.StoreId)).FirstOrDefault().Text;
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                return(new HttpStatusCodeResult(400, ex.Message));
            }
            return(PartialView("_PopUpDetail", model));
        }
Ejemplo n.º 6
0
        public ActionResult AddIngredient(ReceiptNoteSelfMadeModels data)
        {
            ReceiptNoteSelfMadeModels model = new ReceiptNoteSelfMadeModels();

            model.ListItem = new List <ReceiptNoteSelfMadeDetailModels>();
            int OffSet = 0;

            foreach (var item in data.ListItem)
            {
                var itemDetail = new ReceiptNoteSelfMadeDetailModels
                {
                    Id = item.Id,

                    WOId     = item.WOId,
                    WONumber = item.WONumber,

                    IngredientId   = item.IngredientId,
                    IngredientName = item.IngredientName,
                    IngredientCode = item.IngredientCode,

                    IsActived        = item.IsActived,
                    BaseReceivingQty = item.BaseReceivingQty,
                    IsSelfMode       = item.IsSelfMode,
                    IsStockAble      = item.IsStockAble,

                    ReceivingQty = item.ReceivingQty,
                    BaseQty      = item.ReceivingQty,

                    BaseUOM      = item.BaseUOM,
                    Status       = (byte)Commons.EStatus.Actived,
                    Qty          = item.Qty,
                    RemainingQty = item.RemainingQty,
                    OffSet       = OffSet++
                };
                model.ListItem.Add(itemDetail);
            }
            return(PartialView("_ListItem", model));
        }
Ejemplo n.º 7
0
        public ActionResult Create(ReceiptNoteSelfMadeModels model)
        {
            try
            {
                model.ListItemForSelect = null;
                RecipeIngredientUsageModels _objIngredientDependent = null;
                model.CreatedBy   = CurrentUser.UserName;
                model.UpdatedBy   = CurrentUser.UserName;
                model.ReceiptBy   = CurrentUser.UserName;
                model.CreatedDate = DateTime.Now;
                model.UpdatedDate = DateTime.Now;
                model.ReceiptDate = DateTime.Now;
                string msg = "";
                model.ListItem = model.ListItem.Where(x => x.Status != (int)Commons.EStatus.Deleted && x.Status != null).ToList();

                //Check stock before save
                //var lstIngredientSeftMadeIds = model.ListItem.Where(ww => ww.IsSelfMode && ww.IsStockAble).Select(ss => ss.IngredientId).ToList();
                var lstIngredientSeftMade = model.ListItem.Where(ww => ww.IsSelfMode && ww.IsStockAble).ToList();
                if (lstIngredientSeftMade != null && lstIngredientSeftMade.Any())
                {
                    double currentQty = 0;
                    string mess       = string.Empty;
                    //List<string> lstIngredientName = new List<string>();
                    List <ErrorEnoughModels> lstIngredientName = new List <ErrorEnoughModels>();
                    _objIngredientDependent = _recipeFactory.GetRecipesByIngredientSeftMade(lstIngredientSeftMade);

                    bool resultCheck = _inventoryFactory.CheckStockBeforeRNSeftMade(model.StoreId, _objIngredientDependent.ListChilds
                                                                                    , ref currentQty, ref lstIngredientName);
                    if (!resultCheck)
                    {
                        if (lstIngredientName != null && lstIngredientName.Any())
                        {
                            foreach (var item in lstIngredientName)
                            {
                                if (item.ListIngredientNameNotEnough != null && item.ListIngredientNameNotEnough.Count > 1)
                                {
                                    mess = string.Format("Stock of [{0}] are not enough", string.Join(", ", item.ListIngredientNameNotEnough.ToArray()));
                                }
                                else
                                {
                                    mess = string.Format("Stock of [{0}] is not enough", string.Join(", ", item.ListIngredientNameNotEnough.ToArray()));
                                }

                                ModelState.AddModelError("error_msg" + item.MixIngredientId, mess);
                            }
                        }
                        //    if (lstIngredientName != null && lstIngredientName.Count > 1)
                        //{
                        //    mess = string.Format("Stock of [{0}] are not enough", string.Join(", ",lstIngredientName.ToArray()));
                        //}
                        //else
                        //    mess = string.Format("Stock of [{0}] is not enough", string.Join(", ", lstIngredientName.ToArray()));
                    }
                }
                if (!ModelState.IsValid)
                {
                    return(View(model));
                }
                //check item for WO
                var lstWoId = model.ListItem.Where(ww => !string.IsNullOrEmpty(ww.WOId)).Select(ss => ss.WOId).ToList();
                if (lstWoId != null && lstWoId.Any() && model.ListWorkOrder != null && model.ListWorkOrder.Any())
                {
                    lstWoId             = lstWoId.Distinct().ToList();
                    model.ListWorkOrder = model.ListWorkOrder.Where(ww => lstWoId.Contains(ww.Id)).ToList();
                }
                bool result = _factory.Insert(model, _objIngredientDependent, ref msg);
                if (result)
                {
                    return(RedirectToAction("Index"));
                }
                else
                {
                    ModelState.AddModelError("StoreId", msg);
                    return(View("Create"));
                }
            }
            catch (Exception ex)
            {
                _logger.Error("ReceiptNoteSelfMade_Create: " + ex);
                return(new HttpStatusCodeResult(400, ex.Message));
            }
        }
Ejemplo n.º 8
0
        public bool Insert(ReceiptNoteSelfMadeModels model, RecipeIngredientUsageModels _objIngredientDependent, ref string msg)
        {
            NSLog.Logger.Info("InsertSelfMade", _objIngredientDependent);
            using (var cxt = new NuWebContext())
            {
                using (var transaction = cxt.Database.BeginTransaction())
                {
                    try
                    {
                        ResultModels           resultModels = new ResultModels();
                        List <InventoryModels> lstInventory = new List <InventoryModels>();

                        var    item = new I_ReceiptNoteForSeftMade();
                        string ReceiptNoteForSeftMadeId = Guid.NewGuid().ToString();

                        item.Id          = ReceiptNoteForSeftMadeId;
                        item.ReceiptNo   = CommonHelper.GetGenNo(Commons.ETableZipCode.ReceiptNoteSelfMade, model.StoreId);
                        item.Status      = (int)Commons.EReceiptNoteStatus.Closed;
                        item.CreatedBy   = model.CreatedBy;
                        item.CreatedDate = model.CreatedDate;
                        item.UpdatedBy   = model.UpdatedBy;
                        item.UpdatedDate = model.UpdatedDate;
                        item.StoreId     = model.StoreId;
                        item.ReceiptBy   = model.ReceiptBy;
                        item.ReceiptDate = model.ReceiptDate;
                        cxt.I_ReceiptNoteForSeftMade.Add(item);

                        //======== Insert Receipt Work Order
                        List <string> ListWOId = new List <string>();
                        List <I_ReceiptSelfMade_Work_Order> RWOModels = new List <I_ReceiptSelfMade_Work_Order>();
                        foreach (var RNDetailParent in model.ListWorkOrder)
                        {
                            RWOModels.Add(new I_ReceiptSelfMade_Work_Order
                            {
                                Id           = Guid.NewGuid().ToString(),
                                WorkOrderId  = RNDetailParent.Id,
                                RNSelfMadeId = ReceiptNoteForSeftMadeId,
                                CreatedBy    = model.CreatedBy,
                                CreatedDate  = model.CreatedDate,
                                ModifierBy   = model.UpdatedBy,
                                ModifierDate = model.UpdatedDate,
                                IsActived    = true
                            });
                            ListWOId.Add(RNDetailParent.Id);
                            //Update WO detail
                            var childs = model.ListItem.Where(ww => ww.WOId == RNDetailParent.Id).ToList();
                            foreach (var RNDetailChild in childs)
                            {
                                var itemUpdate = (from tb in cxt.I_Work_Order_Detail
                                                  where tb.Id == RNDetailChild.Id
                                                  select tb).FirstOrDefault();
                                if (itemUpdate != null)
                                {
                                    itemUpdate.ReceiptNoteQty += RNDetailChild.ReceivingQty;
                                    //RNDetailChild.ReturnReceiptNoteQty = itemUpdate.ReturnReceiptNoteQty.HasValue ? itemUpdate.ReturnReceiptNoteQty.Value : 0;
                                    //RNDetailChild.ReceiptNoteQty = itemUpdate.ReceiptNoteQty.HasValue ? itemUpdate.ReceiptNoteQty.Value : 0;
                                }
                            }
                        }
                        if (RWOModels != null && RWOModels.Any())
                        {
                            cxt.I_ReceiptSelfMade_Work_Order.AddRange(RWOModels);
                        }

                        //========= Change Status WO
                        var lstObj = cxt.I_Work_Order.Where(ww => ListWOId.Contains(ww.Id)).ToList();
                        if (lstObj != null && lstObj.Count > 0)
                        {
                            //check if approve before set in progress
                            foreach (var purchase in lstObj)
                            {
                                if (purchase.Status == (int)Commons.EPOStatus.Approved)
                                {
                                    purchase.Status = (int)Commons.EPOStatus.InProgress;
                                }
                            }
                        }
                        List <I_ReceiptNoteForSeftMadeDetail> ListInsertRND = new List <I_ReceiptNoteForSeftMadeDetail>();
                        I_ReceiptNoteForSeftMadeDetail        detail        = null;

                        List <I_ReceiptNoteForSeftMadeDependentDetail> ListDetailDependent = new List <I_ReceiptNoteForSeftMadeDependentDetail>();
                        I_ReceiptNoteForSeftMadeDependentDetail        detailDepen         = null;

                        foreach (var RNSelfMadeDetail in model.ListItem)
                        {
                            detail                  = new I_ReceiptNoteForSeftMadeDetail();
                            detail.Id               = Guid.NewGuid().ToString();
                            detail.ReceiptNoteId    = ReceiptNoteForSeftMadeId;
                            detail.ReceivingQty     = RNSelfMadeDetail.ReceivingQty;
                            detail.IsActived        = true;
                            detail.Status           = (int)Commons.EStatus.Actived;
                            detail.IngredientId     = RNSelfMadeDetail.IngredientId;
                            detail.BaseReceivingQty = (RNSelfMadeDetail.ReceivingQty * RNSelfMadeDetail.BaseQty);

                            detail.WOId = RNSelfMadeDetail.WOId;

                            ListInsertRND.Add(detail);
                            if (_objIngredientDependent.ListChilds == null)
                            {
                                _objIngredientDependent.ListChilds = new List <RecipeIngredientUsageModels>();
                            }
                            var lstChild = _objIngredientDependent.ListChilds.Where(ww => ww.MixtureIngredientId == RNSelfMadeDetail.IngredientId).ToList();
                            foreach (var subitem in lstChild)
                            {
                                detailDepen                    = new I_ReceiptNoteForSeftMadeDependentDetail();
                                detailDepen.Id                 = Guid.NewGuid().ToString();
                                detailDepen.IngredientId       = subitem.Id;
                                detailDepen.RNSelfMadeDetailId = detail.Id;
                                detailDepen.StockOutQty        = subitem.TotalUsage;
                                detailDepen.IsActived          = true;

                                ListDetailDependent.Add(detailDepen);

                                _objIngredientDependent.ListChilds.Remove(subitem);
                            }

                            //detail dependent

                            //ListInsertRND.Add(new I_ReceiptNoteForSeftMadeDetail
                            //{
                            //    Id = Guid.NewGuid().ToString(),
                            //    ReceiptNoteId = ReceiptNoteForSeftMadeId,
                            //    ReceivingQty = RNSelfMadeDetail.ReceivingQty,
                            //    IsActived = true,
                            //    Status = (int)Commons.EStatus.Actived,
                            //    IngredientId = RNSelfMadeDetail.IngredientId,
                            //    BaseReceivingQty = (RNSelfMadeDetail.ReceivingQty * RNSelfMadeDetail.BaseQty)
                            //});

                            if (RNSelfMadeDetail.IsSelfMode && RNSelfMadeDetail.IsStockAble)
                            {
                                lstInventory.Add(new InventoryModels()
                                {
                                    StoreId      = model.StoreId,
                                    IngredientId = RNSelfMadeDetail.IngredientId,
                                    Price        = 0,
                                    Quantity     = (RNSelfMadeDetail.ReceivingQty * RNSelfMadeDetail.BaseQty)
                                });
                            }
                        }
                        cxt.I_ReceiptNoteForSeftMadeDetail.AddRange(ListInsertRND);
                        cxt.I_ReceiptNoteForSeftMadeDependentDetail.AddRange(ListDetailDependent);
                        //=============
                        cxt.SaveChanges();
                        transaction.Commit();
                        //Auto change statu for list PO
                        if (model.ListWorkOrder != null && model.ListWorkOrder.Any())
                        {
                            _inventoryFactory.CloseWOAuto(ListWOId);
                        }
                        NSLog.Logger.Info("Save RNForSeftMade", model);
                        if (lstInventory.Count > 0)
                        {
                            //Update List Ingredient have Properties Self-made = True and StockAble = true
                            _inventoryFactory.UpdateInventoryForSeftMadeReceiptNoteWhenStockAbleOn(lstInventory, _objIngredientDependent, ReceiptNoteForSeftMadeId, ref resultModels);
                            NSLog.Logger.Info(string.Format("UpdateInventoryForSeftMadeReceiptNoteWhenStockAbleOn:  [{0}] - [{1}]- [{2}]", resultModels.IsOk, ReceiptNoteForSeftMadeId, resultModels.Message));
                        }
                        return(true);
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex);
                        transaction.Rollback();
                        return(false);
                    }
                    finally
                    {
                        if (cxt != null)
                        {
                            cxt.Dispose();
                        }
                    }
                }
            }
        }