//[ValidateAntiForgeryToken]
        public JsonResult CreateEdit(SchemeViewModel scheme)
        {
            scheme.CreatedBy = Convert.ToInt32(Session["UserLoginId"]);
            scheme.UpdatedBy = Convert.ToInt32(Session["UserLoginId"]);
            Mst_SchemeMaster tblSchemeMaster = new Mst_SchemeMaster();

            try
            {
                if (scheme.EditID <= 0)
                {
                    scheme.SchemeId = dd._context.Mst_SchemeMaster.Any() ? dd._context.Mst_SchemeMaster.Max(m => m.SchemeId) + 1 : 1;
                    var data = dd._context.Mst_SchemeMaster.Where(u => u.SchemeName == scheme.SchemeName && u.Status == 1).Select(x => x.SchemeName).FirstOrDefault();
                    if (data != null)
                    {
                        ModelState.AddModelError("SchemeName", "Scheme Name Already Exists");
                        return(Json(scheme));
                    }
                    tblSchemeMaster.SchemeId        = scheme.SchemeId;
                    tblSchemeMaster.RecordCreated   = DateTime.Now;
                    tblSchemeMaster.RecordCreatedBy = scheme.CreatedBy;
                    dd._context.Mst_SchemeMaster.Add(tblSchemeMaster);
                }
                else
                {
                    tblSchemeMaster = dd._context.Mst_SchemeMaster.Where(x => x.SchemeId == scheme.SchemeId).FirstOrDefault();
                }
                tblSchemeMaster.Product           = scheme.Product;
                tblSchemeMaster.SchemeName        = scheme.SchemeName;
                tblSchemeMaster.SchemeType        = scheme.SchemeType;
                tblSchemeMaster.Frequency         = scheme.Frequency;
                tblSchemeMaster.MinTenure         = scheme.MinTenure;
                tblSchemeMaster.MaxTenure         = scheme.MaxTenure;
                tblSchemeMaster.MinLoanAmount     = scheme.MinLoanAmount;
                tblSchemeMaster.MaxLoanAmount     = scheme.MaxLoanAmount;
                tblSchemeMaster.MinLTVPerc        = scheme.MinLTVPerc;
                tblSchemeMaster.MaxLTVPerc        = scheme.MaxLTVPerc;
                tblSchemeMaster.MinRoiPerc        = scheme.MinROIPerc;
                tblSchemeMaster.MaxRoiPerc        = scheme.MaxROIPerc;
                tblSchemeMaster.GracePeriod       = scheme.GracePeriod;
                tblSchemeMaster.EffectiveRoiPerc  = scheme.EffectiveROIPerc;
                tblSchemeMaster.LockInPeriod      = scheme.LockInPeriod;
                tblSchemeMaster.ProcessingFeeType = scheme.ProcessingFeeType;
                tblSchemeMaster.ProcessingCharges = scheme.ProcessingCharges;
                tblSchemeMaster.Status            = scheme.Status;
                tblSchemeMaster.RecordUpdated     = DateTime.Now;
                tblSchemeMaster.RecordUpdatedBy   = scheme.UpdatedBy;
                dd._context.SaveChanges();

                int schemeid = dd._context.Mst_SchemeMaster.Max(x => x.SchemeId);
                if (scheme.Purity == null)
                {
                    scheme.Purity = (List <int>)Session["PurityData"];
                }

                var getrecord = dd._context.Mst_SchemePurity.Where(x => x.SchemeId == scheme.SchemeId).ToList();
                if (getrecord != null)
                {
                    foreach (var item1 in getrecord)
                    {
                        dd._context.Mst_SchemePurity.Remove(item1);
                        dd._context.SaveChanges();
                    }
                }
                foreach (var item in scheme.Purity)
                {
                    Mst_SchemePurity tblSchemePurity = new Mst_SchemePurity();
                    tblSchemePurity.SchemeId = schemeid;
                    tblSchemePurity.PurityId = item;
                    dd._context.Mst_SchemePurity.Add(tblSchemePurity);
                }
                dd._context.SaveChanges();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return(Json(scheme));
        }
        public void SaveUpdateRecord(SchemeViewModel scheme)
        {
            TSchemeMaster_BasicDetails tblSchemeMaster = new TSchemeMaster_BasicDetails();

            try
            {
                if (scheme.EditID <= 0)
                {
                    tblSchemeMaster.Product       = scheme.Product;
                    tblSchemeMaster.SchemeName    = scheme.SchemeName;
                    tblSchemeMaster.SchemeType    = scheme.SchemeType;
                    tblSchemeMaster.CalMethod     = scheme.Frequency;
                    tblSchemeMaster.Tenure        = scheme.MinTenure;
                    tblSchemeMaster.MaxTenure     = scheme.MaxTenure;
                    tblSchemeMaster.MinLoanAmt    = scheme.MinLoanAmount;
                    tblSchemeMaster.MaxLoanAmt    = scheme.MaxLoanAmount;
                    tblSchemeMaster.Ltv           = scheme.MinLTVPerc;
                    tblSchemeMaster.MaxLtv        = scheme.MaxLTVPerc;
                    tblSchemeMaster.ROI           = scheme.MinROIPerc;
                    tblSchemeMaster.MaxRoi        = scheme.MaxROIPerc;
                    tblSchemeMaster.GracePeriod   = scheme.GracePeriod;
                    tblSchemeMaster.LockInPeriod  = scheme.LockInPeriod;
                    tblSchemeMaster.ProChargeType = scheme.ProcessingFeeType;
                    tblSchemeMaster.ProCharge     = scheme.ProcessingCharges;
                    tblSchemeMaster.AmtLmtTo      = scheme.MaxProcessingCharge;
                    tblSchemeMaster.isActive      = scheme.Status;
                    tblSchemeMaster.UpdatedDate   = DateTime.Now;
                    tblSchemeMaster.UpdatedBy     = scheme.UpdatedBy;
                    tblSchemeMaster.BranchId      = Convert.ToInt32(HttpContext.Current.Session["BranchId"]);
                    tblSchemeMaster.CMPId         = Convert.ToInt32(HttpContext.Current.Session["CompanyId"]);
                    tblSchemeMaster.FYId          = Convert.ToInt32(HttpContext.Current.Session["FinancialYearId"]);
                    tblSchemeMaster.CreatedDate   = DateTime.Now;
                    tblSchemeMaster.CreatedBy     = scheme.CreatedBy;
                    _context.TSchemeMaster_BasicDetails.Add(tblSchemeMaster);
                    _context.SaveChanges();

                    //**********************************************************************************************
                    int SchemeId = _context.TSchemeMaster_BasicDetails.Max(x => x.SID);

                    foreach (var p in scheme.SchemeEffectiveROIList)
                    {
                        var effectiverow = new TSchemeMaster_EffectiveROI
                        {
                            SID = SchemeId,
                            NoofDefaultMonths = p.NoofDefaultMonths,
                            EffROI            = (decimal)p.EffectiveROIPerc,
                        };
                        _context.TSchemeMaster_EffectiveROI.Add(effectiverow);
                        _context.SaveChanges();
                    }
                    //**********************************************************************************************

                    if (scheme.Purity == null)
                    {
                        scheme.Purity = Purity;
                    }

                    var getrecord = _context.Mst_SchemePurity.Where(x => x.SchemeId == scheme.SchemeId).ToList();
                    if (getrecord != null)
                    {
                        foreach (var item1 in getrecord)
                        {
                            _context.Mst_SchemePurity.Remove(item1);
                            _context.SaveChanges();
                        }
                    }
                    foreach (var item in scheme.Purity)
                    {
                        Mst_SchemePurity tblSchemePurity = new Mst_SchemePurity();
                        tblSchemePurity.SchemeId = SchemeId;
                        tblSchemePurity.PurityId = item;
                        _context.Mst_SchemePurity.Add(tblSchemePurity);
                    }
                    _context.SaveChanges();
                }
                else
                {
                    tblSchemeMaster               = _context.TSchemeMaster_BasicDetails.Where(x => x.SID == scheme.SchemeId).FirstOrDefault();
                    tblSchemeMaster.Product       = scheme.Product;
                    tblSchemeMaster.SchemeName    = scheme.SchemeName;
                    tblSchemeMaster.SchemeType    = scheme.SchemeType;
                    tblSchemeMaster.CalMethod     = scheme.Frequency;
                    tblSchemeMaster.Tenure        = scheme.MinTenure;
                    tblSchemeMaster.MaxTenure     = scheme.MaxTenure;
                    tblSchemeMaster.MinLoanAmt    = scheme.MinLoanAmount;
                    tblSchemeMaster.MaxLoanAmt    = scheme.MaxLoanAmount;
                    tblSchemeMaster.Ltv           = scheme.MinLTVPerc;
                    tblSchemeMaster.MaxLtv        = scheme.MaxLTVPerc;
                    tblSchemeMaster.ROI           = scheme.MinROIPerc;
                    tblSchemeMaster.MaxRoi        = scheme.MaxROIPerc;
                    tblSchemeMaster.GracePeriod   = scheme.GracePeriod;
                    tblSchemeMaster.LockInPeriod  = scheme.LockInPeriod;
                    tblSchemeMaster.ProChargeType = scheme.ProcessingFeeType;
                    tblSchemeMaster.ProCharge     = scheme.ProcessingCharges;
                    tblSchemeMaster.AmtLmtTo      = scheme.MaxProcessingCharge;
                    tblSchemeMaster.isActive      = scheme.Status;
                    tblSchemeMaster.UpdatedDate   = DateTime.Now;
                    tblSchemeMaster.UpdatedBy     = scheme.UpdatedBy;
                    tblSchemeMaster.BranchId      = Convert.ToInt32(HttpContext.Current.Session["BranchId"]);
                    tblSchemeMaster.CMPId         = Convert.ToInt32(HttpContext.Current.Session["CompanyId"]);
                    tblSchemeMaster.FYId          = Convert.ToInt32(HttpContext.Current.Session["FinancialYearId"]);
                    _context.SaveChanges();

                    #region Effective ROI
                    List <TSchemeMaster_EffectiveROI> NewEffectiveROIList = new List <TSchemeMaster_EffectiveROI>();
                    foreach (var p in scheme.SchemeEffectiveROIList)
                    {
                        var Findobject = _context.TSchemeMaster_EffectiveROI.Where(x => x.ROIID == p.ID && x.SID == scheme.SchemeId).FirstOrDefault();
                        if (Findobject == null)
                        {
                            var ratetrnnew = new TSchemeMaster_EffectiveROI
                            {
                                SID = scheme.SchemeId,
                                NoofDefaultMonths = p.NoofDefaultMonths,
                                EffROI            = (decimal)p.EffectiveROIPerc,
                            };
                            _context.TSchemeMaster_EffectiveROI.Add(ratetrnnew);
                        }
                        else
                        {
                            Findobject.NoofDefaultMonths = p.NoofDefaultMonths;
                            Findobject.EffROI            = (decimal)p.EffectiveROIPerc;
                        }
                        NewEffectiveROIList.Add(Findobject);
                    }
                    #endregion

                    #region Effective ROI details remove
                    //take the loop of table and check from list if found in list then not remove else remove from table itself
                    var trnobjlist = _context.TSchemeMaster_EffectiveROI.Where(x => x.SID == scheme.SchemeId).ToList();
                    if (trnobjlist != null)
                    {
                        foreach (TSchemeMaster_EffectiveROI item in trnobjlist)
                        {
                            if (NewEffectiveROIList.Contains(item))
                            {
                                continue;
                            }
                            else
                            {
                                _context.TSchemeMaster_EffectiveROI.Remove(item);
                            }
                        }
                        _context.SaveChanges();
                    }
                    #endregion Effective ROI details remove

                    //*************************************************************************************************************
                    if (scheme.Purity == null)
                    {
                        scheme.Purity = Purity;
                    }
                    //var getrecord = _context.Mst_SchemePurity.Where(x => x.SchemeId == scheme.SchemeId).ToList();
                    //if (getrecord != null)
                    //{
                    //    foreach (var item1 in getrecord)
                    //    {
                    //        _context.Mst_SchemePurity.Remove(item1);
                    //        _context.SaveChanges();
                    //    }
                    //}
                    //foreach (var item in scheme.Purity)
                    //{
                    //    Mst_SchemePurity tblSchemePurity = new Mst_SchemePurity();
                    //    tblSchemePurity.SchemeId = scheme.SchemeId;
                    //    tblSchemePurity.PurityId = item;
                    //    _context.Mst_SchemePurity.Add(tblSchemePurity);
                    //}

                    List <Mst_SchemePurity> NewSchemePurityList = new List <Mst_SchemePurity>();
                    foreach (var p in scheme.Purity)
                    {
                        var Findobject = _context.Mst_SchemePurity.Where(x => x.SchemeId == scheme.SchemeId && x.PurityId == p).FirstOrDefault();
                        if (Findobject == null)
                        {
                            var schemepurity = new Mst_SchemePurity
                            {
                                PurityId = p,
                                SchemeId = scheme.SchemeId,
                            };
                            _context.Mst_SchemePurity.Add(schemepurity);
                        }
                        else
                        {
                            Findobject.SchemeId = scheme.SchemeId;
                            Findobject.PurityId = p;
                        }
                        NewSchemePurityList.Add(Findobject);
                    }

                    #region Effective ROI details remove
                    //take the loop of table and check from list if found in list then not remove else remove from table itself
                    var purityobjlist = _context.Mst_SchemePurity.Where(x => x.SchemeId == scheme.SchemeId).ToList();
                    if (purityobjlist != null)
                    {
                        foreach (Mst_SchemePurity item in purityobjlist)
                        {
                            if (NewSchemePurityList.Contains(item))
                            {
                                continue;
                            }
                            else
                            {
                                _context.Mst_SchemePurity.Remove(item);
                            }
                        }
                        _context.SaveChanges();
                    }
                    #endregion Effective ROI details remove

                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }