Beispiel #1
0
        public bool Update(ReturnNoteModels model, ref string msg)
        {
            bool result = true;

            using (NuWebContext cxt = new NuWebContext())
            {
                try
                {
                    var itemUpdate = (from tb in cxt.I_Return_Note
                                      where tb.Id == model.Id
                                      select tb).FirstOrDefault();

                    itemUpdate.ReceiptNoteId = model.ReceiptNoteId;
                    itemUpdate.ReturnNoteNo  = model.ReturnNoteNo;

                    itemUpdate.CreatedBy    = model.CreatedBy;
                    itemUpdate.CreatedDate  = model.CreatedDate;
                    itemUpdate.ModifierBy   = model.ModifierBy;
                    itemUpdate.ModifierDate = model.ModifierDate;
                    itemUpdate.IsActived    = model.IsActived;

                    cxt.SaveChanges();
                }
                catch (Exception ex)
                {
                    _logger.Error(ex);
                    result = false;
                }
                finally
                {
                    if (cxt != null)
                    {
                        cxt.Dispose();
                    }
                }
            }
            return(result);
        }
Beispiel #2
0
        public bool Insert(ReturnNoteModels model, string storeId, ref string msg)
        {
            bool result = true;

            using (NuWebContext cxt = new NuWebContext())
            {
                using (var transaction = cxt.Database.BeginTransaction())
                {
                    try
                    {
                        ResultModels           resultModels = new ResultModels();
                        List <InventoryModels> lstInventory = new List <InventoryModels>();

                        I_Return_Note item         = new I_Return_Note();
                        string        ReturnNoteId = Guid.NewGuid().ToString();
                        item.Id = ReturnNoteId;

                        item.ReceiptNoteId = model.ReceiptNoteId;
                        item.ReturnNoteNo  = CommonHelper.GetGenNo(Commons.ETableZipCode.ReturnNote, storeId);

                        item.CreatedBy    = model.CreatedBy;
                        item.CreatedDate  = model.CreatedDate;
                        item.ModifierBy   = model.ModifierBy;
                        item.ModifierDate = model.ModifierDate;
                        item.IsActived    = model.IsActived;

                        cxt.I_Return_Note.Add(item);


                        //========Change Status Return For RN
                        //List<string> lstId = new List<string>();
                        //lstId.Add(model.ReceiptNoteId);
                        //_RNFactory.ChangeStatus(lstId, (int)Commons.EReceiptNoteStatus.Return);
                        var RNote = cxt.I_ReceiptNote.Where(x => x.Id.Equals(model.ReceiptNoteId)).FirstOrDefault();
                        if (RNote != null)
                        {
                            RNote.Status = (int)Commons.EReceiptNoteStatus.Return;
                        }
                        List <PurchaseOrderDetailModels> PODetailModels = new List <PurchaseOrderDetailModels>();
                        foreach (var RNDetailParent in model.ListPurchaseOrder)
                        {
                            foreach (var RNDetailChild in RNDetailParent.ListItem)
                            {
                                var itemUpdate = (from tb in cxt.I_Purchase_Order_Detail
                                                  where tb.Id == RNDetailChild.Id
                                                  select tb).FirstOrDefault();
                                if (itemUpdate != null)
                                {
                                    itemUpdate.ReturnReceiptNoteQty += RNDetailChild.ReturnQty;
                                }
                            }
                        }

                        List <I_Return_Note_Detail> ListInsertReturnNoteDetail = new List <I_Return_Note_Detail>();
                        foreach (var RNDetailParent in model.ListPurchaseOrder)
                        {
                            foreach (var RNDetailChild in RNDetailParent.ListItem)
                            {
                                //var sumReturnNoteDetail = cxt.I_Return_Note_Detail.Where(x => x.ReceiptNoteDetailId.Equals(RNDetailChild.ReceiptNoteDetailId)).Sum(x => (double?)x.ReturnQty) ?? 0;
                                ListInsertReturnNoteDetail.Add(new I_Return_Note_Detail
                                {
                                    Id                  = Guid.NewGuid().ToString(),
                                    ReturnNoteId        = ReturnNoteId,
                                    ReceiptNoteDetailId = RNDetailChild.ReceiptNoteDetailId,
                                    //ReceivedQty = RNDetailChild.ReceivingQty - sumReturnNoteDetail,
                                    ReceivedQty   = RNDetailChild.ReceivingQty,
                                    ReturnQty     = RNDetailChild.ReturnQty,
                                    ReturnBaseQty = RNDetailChild.ReturnQty * RNDetailChild.BaseQty,
                                    IsActived     = true,
                                });

                                lstInventory.Add(new InventoryModels()
                                {
                                    StoreId      = storeId,
                                    IngredientId = RNDetailChild.IngredientId,
                                    Price        = RNDetailChild.UnitPrice,
                                    Quantity     = RNDetailChild.ReturnQty * RNDetailChild.BaseQty
                                });
                            }
                        }
                        cxt.I_Return_Note_Detail.AddRange(ListInsertReturnNoteDetail);

                        cxt.SaveChanges();
                        transaction.Commit();

                        //update inventory
                        _inventoryFactory.UpdateInventoryForReturnNote(lstInventory, ReturnNoteId, ref resultModels);
                        _logger.Info(string.Format("UpdateInventoryForReturnNote: [{0}] - [{1}]- [{2}]", resultModels.IsOk, ReturnNoteId, resultModels.Message));
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex);
                        transaction.Rollback();
                        result = false;
                    }
                    finally
                    {
                        if (cxt != null)
                        {
                            cxt.Dispose();
                        }
                    }
                }
            }
            return(result);
        }
Beispiel #3
0
        public ActionResult CreateReturnNote(ReceiptNoteModels model)
        {
            try
            {
                List <PurchaseOrderModels> _ListPurchaseOrder = new List <PurchaseOrderModels>();
                //_ListPurchaseOrder.InsertRange(0, model.ListPurchaseOrder);
                foreach (var item in model.ListPurchaseOrder)
                {
                    var obj = new PurchaseOrderModels();
                    obj.Additional       = item.Additional;
                    obj.AdditionalReason = item.AdditionalReason;
                    obj.ColorAlert       = item.ColorAlert;
                    obj.CreatedBy        = item.CreatedBy;
                    obj.CreatedDate      = item.CreatedDate;
                    obj.Delete           = item.Delete;
                    obj.DeliveryDate     = item.DeliveryDate;
                    obj.Id            = item.Id;
                    obj.IsActived     = item.IsActived;
                    obj.ListItem      = item.ListItem;
                    obj.ListReceiptPO = item.ListReceiptPO;
                    obj.ListStores    = item.ListStores;
                    obj.ListSupplier  = item.ListSupplier;
                    obj.ListTaxType   = item.ListTaxType;
                    obj.ModifierBy    = item.ModifierBy;
                    obj.ModifierDate  = item.ModifierDate;
                    obj.Note          = item.Note;
                    obj.PODate        = item.PODate;
                    obj.PONumber      = item.PONumber;
                    obj.POStatus      = item.POStatus;
                    obj.Store         = item.Store;
                    obj.StoreID       = item.StoreID;
                    obj.StoreName     = item.StoreName;
                    obj.SubTotal      = item.SubTotal;
                    obj.Supplier      = item.Supplier;
                    obj.SupplierId    = item.SupplierId;
                    obj.SupplierName  = item.SupplierName;
                    obj.Symbol        = item.Symbol;
                    obj.TaxAmount     = item.TaxAmount;
                    obj.TaxType       = item.TaxType;
                    obj.TaxValue      = item.TaxValue;
                    obj.Total         = item.Total;

                    _ListPurchaseOrder.Add(obj);
                }

                model.CreatedBy   = CurrentUser.UserName;
                model.UpdatedBy   = CurrentUser.UserName;
                model.ReceiptBy   = CurrentUser.UserName;
                model.CreatedDate = DateTime.Now;
                model.UpdatedDate = DateTime.Now;
                model.ReceiptDate = DateTime.Now;

                model.ListPurchaseOrder.ForEach(x =>
                {
                    x.ListItem = x.ListItem.Where(z => z.ReturnQty > 0).ToList();
                });
                //==========
                ReturnNoteModels RTmodel = new ReturnNoteModels()
                {
                    ReceiptNoteId = model.Id,
                    CreatedBy     = CurrentUser.UserName,
                    CreatedDate   = DateTime.Now,
                    ModifierBy    = CurrentUser.UserName,
                    ModifierDate  = DateTime.Now,
                    IsActived     = true
                };
                RTmodel.ListPurchaseOrder = model.ListPurchaseOrder.Where(x => x.ListItem.Count > 0).ToList();
                bool   result          = false;
                string msg             = "";
                double qtyCurrentStock = 0;
                bool   isCheck         = true;
                string ingredientName  = string.Empty;

                if (RTmodel.ListPurchaseOrder.Count > 0)
                {
                    foreach (var poDetail in RTmodel.ListPurchaseOrder)
                    {
                        foreach (var item in poDetail.ListItem)
                        {
                            if (item.ReturnQty < 0)
                            {
                                ModelState.AddModelError("error_msg" + item.Id, CurrentUser.GetLanguageTextFromKey("Please, can not input negative number"));
                                break;
                            }
                            if (item.ReturnQty > item.ReceivingQty)
                            {
                                ModelState.AddModelError("error_msg" + item.Id, CurrentUser.GetLanguageTextFromKey("Can not return more than receiving quantity"));
                                break;
                            }
                            ingredientName  = string.Empty;
                            qtyCurrentStock = 0;

                            isCheck = _InventoryFactory.CheckStockForReturn(model.StoreId, item.IngredientId
                                                                            , item.ReturnQty, item.BaseQty, ref qtyCurrentStock, ref ingredientName);

                            if (!isCheck)
                            {
                                ModelState.AddModelError("error_msg" + item.Id, string.Format("[{0}] " + CurrentUser.GetLanguageTextFromKey("is not enough stock to return!"), ingredientName));
                                break;
                            }
                        }
                    }
                    if (!ModelState.IsValid)
                    {
                        model.ListPurchaseOrder = _ListPurchaseOrder;
                        //return PartialView("_CreateReturnNote", model);
                        return(View("_CreateReturnNote", model));
                    }
                    result = _RTFactory.Insert(RTmodel, model.StoreId, ref msg);
                }

                else
                {
                    result = true;
                }
                //===
                if (result)
                {
                    return(RedirectToAction("Index"));
                }
                else
                {
                    ModelState.AddModelError("StoreId", msg);
                    return(View("_CreateReturnNote", model));
                }
            }
            catch (Exception ex)
            {
                NSLog.Logger.Error("ReturnNote_Create: ", ex);
                return(new HttpStatusCodeResult(400, ex.Message));
            }
        }