public ActionResult Details(LeaveTypeFormViewModel model, OptionsViewModel moreInfo, LeaveRangeVM grid1, bool clear) { List <Error> errors = new List <Error>(); if (ModelState.IsValid) { if (ServerValidationEnabled) { errors = _hrUnitOfWork.SiteRepository.CheckForm(new CheckParm { CompanyId = CompanyId, ObjectName = "LeaveType", TableName = "LeaveTypes", ParentColumn = "CompanyId", Columns = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))), Culture = Language }); if (errors.Count() > 0) { foreach (var e in errors) { foreach (var errorMsg in e.errors) { ModelState.AddModelError(errorMsg.field, errorMsg.message); } } return(Json(Models.Utils.ParseFormErrors(ModelState))); } } PeriodName calendar = new PeriodName { Id = model.CalendarId }; if (model.HasAccrualPlan) { if (model.CalendarId == 0) { string error; calendar = AddPeriodName(model.Name, model.FrequencyId.Value, model.IsLocal, out error); if (!string.IsNullOrEmpty(error)) { ModelState.AddModelError("FrequencyId", error); return(Json(Models.Utils.ParseFormErrors(ModelState))); } } } LeaveType record; //insert if (model.Id == 0) { record = new LeaveType(); MapLeaveType(record, model, moreInfo); record.CreatedUser = UserName; record.CreatedTime = DateTime.Now; record.CompanyId = model.IsLocal ? CompanyId : (int?)null; if (record.StartDate > record.EndDate) { ModelState.AddModelError("EndDate", MsgUtils.Instance.Trls("EndDateGthanStartDate")); return(Json(Models.Utils.ParseFormErrors(ModelState))); } if (record.HasAccrualPlan) { record.CalendarId = calendar.Id; } _hrUnitOfWork.LeaveRepository.Add(record); } //update else { record = _hrUnitOfWork.Repository <LeaveType>().FirstOrDefault(a => a.Id == model.Id); MapLeaveType(record, model, moreInfo); record.ModifiedTime = DateTime.Now; record.ModifiedUser = UserName; record.CompanyId = model.IsLocal ? CompanyId : (int?)null; if (record.StartDate > record.EndDate) { ModelState.AddModelError("EndDate", MsgUtils.Instance.Trls("MustGreaterthanStart")); return(Json(Models.Utils.ParseFormErrors(ModelState))); } if (record.HasAccrualPlan) { record.CalendarId = calendar.Id; } _hrUnitOfWork.LeaveRepository.Attach(record); _hrUnitOfWork.LeaveRepository.Entry(record).State = EntityState.Modified; } // Save grid2 errors = SaveGrid2(grid1, ModelState.Where(a => a.Key.Contains("grid1")), record); if (errors.Count > 0) { return(Json(errors.First().errors.First().message)); } errors = SaveChanges(Language); if (clear) { model = new LeaveTypeFormViewModel(); } else { model.Id = record.Id; } if (errors.Count > 0) { return(Json(errors.First().errors.First().message)); } return(Json("OK," + ((new JavaScriptSerializer()).Serialize(model)))); } return(Json(Models.Utils.ParseFormErrors(ModelState))); }
private List <Error> SaveGrid2(LeaveRangeVM grid1, IEnumerable <KeyValuePair <string, ModelState> > state, LeaveType leavetype) { List <Error> errors = new List <Error>(); // Deleted if (grid1.deleted != null) { foreach (ExcelGridLeaveRangesViewModel model in grid1.deleted) { var leaverange = new LeaveRange { Id = model.Id }; _hrUnitOfWork.LeaveRepository.Remove(leaverange); } } // Exclude delete models from sever side validations if (ServerValidationEnabled) { var modified = Models.Utils.GetModifiedRows(state.Where(a => !a.Key.Contains("deleted"))); if (modified.Count > 0) { errors = _hrUnitOfWork.CompanyRepository.Check(new CheckParm { CompanyId = CompanyId, ObjectName = "LeaveRanges", Columns = Models.Utils.GetModifiedRows(state.Where(a => !a.Key.Contains("deleted"))), Culture = Language }); if (errors.Count() > 0) { return(errors); } } } // updated records if (grid1.updated != null) { foreach (ExcelGridLeaveRangesViewModel model in grid1.updated) { var leaverange = new LeaveRange(); AutoMapper(new Models.AutoMapperParm { Destination = leaverange, Source = model, Transtype = TransType.Update }); leaverange.ModifiedTime = DateTime.Now; leaverange.ModifiedUser = UserName; _hrUnitOfWork.LeaveRepository.Attach(leaverange); _hrUnitOfWork.LeaveRepository.Entry(leaverange).State = EntityState.Modified; } } // inserted records if (grid1.inserted != null) { foreach (ExcelGridLeaveRangesViewModel model in grid1.inserted) { var leaverange = new LeaveRange(); AutoMapper(new Models.AutoMapperParm { Destination = leaverange, Source = model, Transtype = TransType.Insert }); leaverange.LeaveType = leavetype; leaverange.CreatedTime = DateTime.Now; leaverange.CreatedUser = UserName; _hrUnitOfWork.LeaveRepository.Add(leaverange); } } return(errors); }