//################################# DELETE ALL DATA  ########################################################
        public ActionResult DeleteAllReceiveData(int id)
        {
            INV_FinishLeatherReceive receive = repository.FinishLeatherReceiveRepository.GetByID(id);

            if (receive != null)
            {
                var data = (from t in repository.FinishLeatherReceiveItemRepository.Get() where t.FNReceiveID == receive.FNReceiveID select t);
                foreach (var item in data)
                {
                    INV_FinishLeatherReceiveItem receiveItem = (from temp in data where temp.FNReceiveItemID == item.FNReceiveItemID select temp).FirstOrDefault();
                    var color = repository.FinishLeatherReceiveColorRepository.Get(ob => ob.FNReceiveItemID == receiveItem.FNReceiveItemID);
                    foreach (var item3 in color)
                    {
                        INV_FinishLeatherReceiveColor gr = (from t in color where t.FNReceiveColorID == item3.FNReceiveColorID select t).FirstOrDefault();
                        repository.FinishLeatherReceiveColorRepository.Delete(gr);
                    }
                    repository.FinishLeatherReceiveItemRepository.Delete(receiveItem);
                }
                repository.FinishLeatherReceiveRepository.Delete(receive);

                try
                {
                    repository.Save();
                    _vmMsg.Type = Enums.MessageType.Success;
                    _vmMsg.Msg  = "Data Deleted Successfully.";
                }
                catch (DbEntityValidationException e)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        sb.AppendLine(string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                                    eve.Entry.Entity.GetType().Name,
                                                    eve.Entry.State));
                        foreach (var ve in eve.ValidationErrors)
                        {
                            sb.AppendLine(string.Format("- Property: \"{0}\", Error: \"{1}\"",
                                                        ve.PropertyName,
                                                        ve.ErrorMessage));
                        }
                    }
                    throw new DbEntityValidationException(sb.ToString(), e);
                }
            }
            else
            {
                _vmMsg.Type = Enums.MessageType.Error;
                _vmMsg.Msg  = "Please Delete Item Info First.";
            }

            return(Json(_vmMsg, JsonRequestBehavior.AllowGet));
        }
        // ########################################### END OF SAVE,UPDATE,DELETE,CONFIRM #######################################################################


        //************************************************************ For Saving use Entity & Model Data Mapping **********************************
        public INV_FinishLeatherReceive SetToModelObject(InvFinishLeatherReceive model, int userid)
        {
            INV_FinishLeatherReceive Entity = new INV_FinishLeatherReceive();

            Entity.FNReceiveID     = model.FNReceiveID;
            Entity.FNReceiveNo     = model.FNReceiveNo;
            Entity.FNReceiveDate   = DalCommon.SetDate(model.FNReceiveDate);
            Entity.ReceiveCategory = "STTF";
            Entity.ReceiveFor      = model.ReceiveFor == null ? "" : model.ReceiveFor;
            Entity.IssueFrom       = model.IssueFrom == null ? 0 : model.IssueFrom;
            Entity.ReceiveAt       = model.ReceiveAt == null ? 0 : model.ReceiveAt;
            Entity.ReceiveNote     = model.ReceiveNote == null ? "" : model.ReceiveNote;
            Entity.CheckNote       = model.CheckNote == null ? "" : model.CheckNote;
            Entity.RecordStatus    = "NCF";
            Entity.SetOn           = DateTime.Now;
            //Entity.SetBy = userid;
            Entity.IPAddress = GetIPAddress.LocalIPAddress();

            return(Entity);
        }
        public ValidationMsg Update(InvFinishLeatherReceive model, int userid)
        {
            _vmMsg = new ValidationMsg();
            try
            {
                #region Update

                using (var tx = new TransactionScope())
                {
                    using (_context)
                    {
                        var _LeatherType = Convert.ToByte(_context.Sys_LeatherType.Where(m => m.LeatherTypeName == "Finish").FirstOrDefault().LeatherTypeID);


                        #region Crust Leather Transfer

                        INV_FinishLeatherReceive IssueEntity = SetToModelObject(model, userid);
                        var OriginalEntity = _context.INV_FinishLeatherReceive.First(m => m.FNReceiveID == model.FNReceiveID);

                        OriginalEntity.FNReceiveID     = IssueEntity.FNReceiveID;
                        OriginalEntity.FNReceiveNo     = IssueEntity.FNReceiveNo;
                        OriginalEntity.FNReceiveDate   = IssueEntity.FNReceiveDate;
                        OriginalEntity.ReceiveCategory = IssueEntity.ReceiveCategory;
                        OriginalEntity.IssueFrom       = IssueEntity.IssueFrom;
                        OriginalEntity.ReceiveAt       = IssueEntity.ReceiveAt;
                        OriginalEntity.RecordStatus    = IssueEntity.RecordStatus;
                        OriginalEntity.ReceiveNote     = IssueEntity.ReceiveNote;
                        OriginalEntity.CheckNote       = IssueEntity.CheckNote;
                        OriginalEntity.ModifiedBy      = userid;
                        OriginalEntity.ModifiedOn      = DateTime.Now;

                        _context.SaveChanges();
                        #endregion

                        #region Save NEW Data & Update Existing Crust Leather Transfer Data

                        if (model.InvFinishLeatherReceiveItemList != null)
                        {
                            foreach (InvFinishLeatherReceiveItem objFinishedLeatherIssueItem in model.InvFinishLeatherReceiveItemList)
                            {
                                objFinishedLeatherIssueItem.FNReceiveID = model.FNReceiveID;



                                INV_FinishLeatherReceiveItem CurrentIssueItemEntity = SetToIssueItemModelObject(objFinishedLeatherIssueItem, userid);
                                var OriginalIssueItemEntity = _context.INV_FinishLeatherReceiveItem.First(m => m.FNReceiveID == model.FNReceiveID);


                                OriginalIssueItemEntity.FNReceiveID     = CurrentIssueItemEntity.FNReceiveID;
                                OriginalIssueItemEntity.FNReceiveItemID = CurrentIssueItemEntity.FNReceiveItemID;
                                //OriginalIssueItemEntity.FinishLeatherIssueID = CurrentIssueItemEntity.FinishLeatherIssueID;
                                //OriginalIssueItemEntity.FinishLeatherIssueItemID = CurrentIssueItemEntity.FinishLeatherIssueItemID;
                                OriginalIssueItemEntity.BuyerID         = CurrentIssueItemEntity.BuyerID;
                                OriginalIssueItemEntity.BuyerOrderID    = CurrentIssueItemEntity.BuyerOrderID;
                                OriginalIssueItemEntity.ItemTypeID      = CurrentIssueItemEntity.ItemTypeID;
                                OriginalIssueItemEntity.LeatherStatusID = CurrentIssueItemEntity.LeatherStatusID;
                                OriginalIssueItemEntity.LeatherTypeID   = _LeatherType;
                                //OriginalIssueItemEntity.ColorID = CurrentIssueItemEntity.ColorID;
                                //OriginalIssueItemEntity.GradeRange = CurrentIssueItemEntity.GradeRange;
                                //OriginalIssueItemEntity.ArticleChallanID = CurrentIssueItemEntity.ArticleChallanID;
                                //OriginalIssueItemEntity.ArticleColorNo = CurrentIssueItemEntity.ArticleColorNo;
                                OriginalIssueItemEntity.ArticleID = CurrentIssueItemEntity.ArticleID;
                                OriginalIssueItemEntity.ArticleNo = CurrentIssueItemEntity.ArticleNo;
                                //OriginalIssueItemEntity.ArticleChallanNo = CurrentIssueItemEntity.ArticleChallanNo;
                                OriginalIssueItemEntity.FinishQCLabel = CurrentIssueItemEntity.FinishQCLabel;
                                OriginalIssueItemEntity.ModifiedBy    = userid;
                                OriginalIssueItemEntity.ModifiedOn    = DateTime.Now;
                                OriginalIssueItemEntity.IPAddress     = GetIPAddress.LocalIPAddress();



                                #region Save CrustQC Records

                                if (model.InvFinishLeatherReceiveColorList != null)
                                {
                                    foreach (InvFinishLeatherReceiveColor objCLTransferToItem in model.InvFinishLeatherReceiveColorList)
                                    {
                                        objCLTransferToItem.FNReceiveID     = model.FNReceiveID;
                                        objCLTransferToItem.FNReceiveItemID = objFinishedLeatherIssueItem.FNReceiveItemID;
                                        // objCLTransferToItem.CLTransferFromID = objCLTransferItem.CLTransferFromID;

                                        //if (objCLTransferToItem.CLTransferToID == 0)
                                        //{
                                        //    objCLTransferToItem.CLTransferFromID = objCLTransferItem.CLTransferFromID;
                                        //    objCLTransferToItem.CLTransferID = model.CLTransferID;
                                        //    objCLTransferToItem.CLTransferNo = model.CLTransferNo;
                                        //    //objCLTransferToItem.ScheduleProductionNo = objCLTransferItem.ScheduleProductionNo;

                                        //    INV_CLTransferTo tblQCSelection = SetToCLTransferToModelObject(objCLTransferToItem, userid);
                                        //    _context.INV_CLTransferTo.Add(tblQCSelection);
                                        //}
                                        //else
                                        //{
                                        INV_FinishLeatherReceiveColor CurrIssueGradeEntity = SetToReceiveColorModelObject(objCLTransferToItem, userid);
                                        var OrgrEntity = _context.INV_FinishLeatherReceiveColor.First(m => m.FNReceiveColorID == objCLTransferToItem.FNReceiveColorID);


                                        //OrgrEntity.FNReceiveColorID = CurrIssueGradeEntity.FNReceiveColorID;
                                        //OrgrEntity.FNReceiveItemID = CurrIssueGradeEntity.FNReceiveItemID;
                                        //OrgrEntity.FNReceiveID = CurrIssueGradeEntity.FNReceiveID;
                                        //OrgrEntity.FinishLeatherIssueID = CurrIssueGradeEntity.FinishLeatherIssueID;
                                        //OrgrEntity.FinishLeatherIssueItemID = CurrIssueGradeEntity.FinishLeatherIssueItemID;
                                        //OrgrEntity.FinishLeatherIssueColorID = CurrIssueGradeEntity.FinishLeatherIssueColorID;


                                        OrgrEntity.ColorID         = CurrIssueGradeEntity.ColorID;
                                        OrgrEntity.GradeID         = CurrIssueGradeEntity.GradeID;
                                        OrgrEntity.FinishQCLabel   = CurrIssueGradeEntity.FinishQCLabel;
                                        OrgrEntity.IssuePcs        = CurrIssueGradeEntity.IssuePcs;
                                        OrgrEntity.IssueSide       = CurrIssueGradeEntity.IssueSide;
                                        OrgrEntity.IssueArea       = CurrIssueGradeEntity.IssueArea;
                                        OrgrEntity.SideArea        = CurrIssueGradeEntity.SideArea;
                                        OrgrEntity.ReceivePcs      = CurrIssueGradeEntity.ReceivePcs;
                                        OrgrEntity.ReceiveSide     = CurrIssueGradeEntity.ReceiveSide;
                                        OrgrEntity.ReceiveArea     = CurrIssueGradeEntity.ReceiveArea;
                                        OrgrEntity.ReceiveSideArea = CurrIssueGradeEntity.ReceiveSideArea;
                                        //OrgrEntity.ArticleColorNo = CurrIssueGradeEntity.ArticleColorNo;
                                        OrgrEntity.AreaUnit = CurrIssueGradeEntity.AreaUnit;

                                        OrgrEntity.ModifiedBy = userid;
                                        OrgrEntity.ModifiedOn = DateTime.Now;
                                        OrgrEntity.IPAddress  = GetIPAddress.LocalIPAddress();
                                        OrgrEntity.SetOn      = DateTime.Now;
                                        OrgrEntity.SetBy      = userid;
                                        // }
                                    }
                                }

                                #endregion
                            }
                        }

                        #endregion



                        _context.SaveChanges();
                        tx.Complete();
                        FNReceiveID = model.FNReceiveID;
                        FNReceiveNo = model.FNReceiveNo;
                        _vmMsg.Type = Enums.MessageType.Update;
                        _vmMsg.Msg  = "Updated Successfully.";
                    }
                }

                #endregion
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                      eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                          ve.PropertyName, ve.ErrorMessage);
                    }
                }
                _vmMsg.Type = Enums.MessageType.Error;
                _vmMsg.Msg  = "Failed to Update.";
            }
            return(_vmMsg);
        }
        public ValidationMsg Save(InvFinishLeatherReceive model, int userid, string pageUrl)
        {
            _vmMsg = new ValidationMsg();
            try
            {
                using (var tx = new TransactionScope())
                {
                    using (_context)
                    {
                        model.FNReceiveNo = DalCommon.GetPreDefineNextCodeByUrl(pageUrl);//DalCommon.GetPreDefineValue("1", "00045");
                        if (model.FNReceiveNo != null)
                        {
                            #region Save Finish Leather Receive Data

                            INV_FinishLeatherReceive tblFinishLeatherReceive = SetToModelObject(model, userid);
                            _context.INV_FinishLeatherReceive.Add(tblFinishLeatherReceive);
                            _context.SaveChanges();
                            #endregion

                            #region Save Finish Leather Receive Item Data
                            if (model.InvFinishLeatherReceiveItemList != null)
                            {
                                foreach (InvFinishLeatherReceiveItem objFinishLeatherReceiveItem in model.InvFinishLeatherReceiveItemList)
                                {
                                    objFinishLeatherReceiveItem.FNReceiveID = tblFinishLeatherReceive.FNReceiveID;
                                    INV_FinishLeatherReceiveItem tblFinishLeatherReceiveItem = SetToIssueItemModelObject(objFinishLeatherReceiveItem, userid);
                                    _context.INV_FinishLeatherReceiveItem.Add(tblFinishLeatherReceiveItem);
                                    _context.SaveChanges();

                                    #region Save Finish Leather Receive Color Data

                                    if (model.InvFinishLeatherReceiveColorList != null)
                                    {
                                        if (objFinishLeatherReceiveItem.FNReceiveItemID != null)
                                        {
                                            foreach (InvFinishLeatherReceiveColor objFinishLeatherReceiveColor in model.InvFinishLeatherReceiveColorList)
                                            {
                                                objFinishLeatherReceiveColor.FNReceiveID     = tblFinishLeatherReceiveItem.FNReceiveID;
                                                objFinishLeatherReceiveColor.FNReceiveItemID = tblFinishLeatherReceiveItem.FNReceiveItemID;


                                                INV_FinishLeatherReceiveColor tblFinishLeatherReceiveColor = SetToReceiveColorModelObject(objFinishLeatherReceiveColor, userid);
                                                _context.INV_FinishLeatherReceiveColor.Add(tblFinishLeatherReceiveColor);
                                                _context.SaveChanges();
                                            }
                                        }
                                    }
                                    #endregion
                                }
                            }
                            #endregion

                            _context.SaveChanges();

                            tx.Complete();
                            //FNReceiveID = tblFinishLeatherReceive.FNReceiveID;
                            //FNReceiveNo = tblFinishLeatherReceive.FNReceiveNo;

                            _vmMsg.Type = Enums.MessageType.Success;
                            _vmMsg.Msg  = "Saved Successfully.";
                        }
                        else
                        {
                            _vmMsg.Type = Enums.MessageType.Error;
                            _vmMsg.Msg  = "Crust Leather No Predefine Value not Found.";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.InnerException.InnerException.Message.Contains("UNIQUE KEY"))
                {
                    _vmMsg.Type = Enums.MessageType.Error;
                    _vmMsg.Msg  = "Crust Leather No Data Already Exit.";
                }
                _vmMsg.Type = Enums.MessageType.Error;
                _vmMsg.Msg  = "Failed to save.";
            }
            return(_vmMsg);
        }