public async Task <IActionResult> Edit(int id) { var Result = new EditRecordModel(); var Response = await recordRepo.GetRecordById(id); if (Response.WasSuccessful) { Result = new EditRecordModel(Response.Result); } return(View(Result)); }
public IActionResult GetCompleteInfo(EntityFormModel args) { string nonePermissionFields = null, form = null, records = null; if (args.EntityId.Equals(Guid.Empty) && args.EntityName.IsEmpty()) { return(NotFound()); } var entity = args.EntityId.Equals(Guid.Empty) ? _entityFinder.FindByName(args.EntityName) : _entityFinder.FindById(args.EntityId); if (entity == null) { return(NotFound()); } args.EntityId = entity.EntityId; args.EntityName = entity.Name; EditRecordModel m = new EditRecordModel { EntityMetaData = entity, EntityId = args.EntityId, RelationShipName = args.RelationShipName, ReferencedRecordId = args.ReferencedRecordId }; if (args.RecordId.HasValue && !args.RecordId.Value.Equals(Guid.Empty)) { var record = _dataFinder.RetrieveById(entity.Name, args.RecordId.Value); if (record == null || record.Count == 0) { return(NotFound()); } var fileAttributes = _attributeFinder.FindByEntityId(entity.EntityId).Where(n => n.DataFormat.IsCaseInsensitiveEqual("fileupload")); foreach (var item in fileAttributes) { if (record.GetStringValue(item.Name).IsNotEmpty()) { record[item.Name] = string.Empty; } else { record.Remove(item.Name); } } m.Entity = record; m.RecordId = args.RecordId; m.FormState = FormState.Update; if (m.Entity.GetIntValue("statecode", -1) == 0) { m.FormState = FormState.Disabled; //model.ReadOnly = true; } } else if (args.CopyId.HasValue && !args.CopyId.Value.Equals(Guid.Empty)) { var record = _dataFinder.RetrieveById(entity.Name, args.CopyId.Value); if (record == null || record.Count == 0) { return(NotFound()); } var fileAttributes = _attributeFinder.FindByEntityId(entity.EntityId).Where(n => n.DataFormat.IsCaseInsensitiveEqual("fileupload")); foreach (var item in fileAttributes) { record.Remove(item.Name); } record.RemoveKeys(AttributeDefaults.SystemAttributes); m.Entity = record; //m.RecordId = model.RecordId; m.FormState = FormState.Create; } else { //ViewData["record"] = "{}"; m.FormState = FormState.Create; } m.ReadOnly = args.ReadOnly; var isCreate = !args.RecordId.HasValue || args.RecordId.Value.Equals(Guid.Empty); SystemForm formEntity = null; //workflow if (!isCreate && m.EntityMetaData.WorkFlowEnabled && m.Entity.GetGuidValue("workflowid").Equals(Guid.Empty)) { var processState = m.Entity.GetIntValue("processstate", -1); if (processState == (int)WorkFlowProcessState.Processing)// || processState == (int)WorkFlowProcessState.Passed) { m.ReadOnly = true; m.FormState = FormState.ReadOnly; var instances = _workFlowInstanceService.Query(n => n.Take(1).Where(f => f.EntityId == m.EntityId.Value && f.ObjectId == m.RecordId.Value).Sort(s => s.SortDescending(f => f.CreatedOn))); WorkFlowInstance instance = null; if (instances.NotEmpty()) { instance = instances.First(); } if (instance != null) { var processInfo = _workFlowProcessFinder.GetCurrentStep(instance.WorkFlowInstanceId, CurrentUser.SystemUserId); if (processInfo != null) { if (!processInfo.FormId.Equals(Guid.Empty)) { formEntity = _systemFormFinder.FindById(processInfo.FormId); } } } } m.WorkFlowProcessState = processState; } if (formEntity == null) { if (args.FormId.HasValue && !args.FormId.Value.Equals(Guid.Empty)) { formEntity = _systemFormFinder.FindById(args.FormId.Value); if (formEntity.StateCode != RecordState.Enabled) { formEntity = null; } } else { //获取实体默认表单 formEntity = _systemFormFinder.FindEntityDefaultForm(args.EntityId); } } if (formEntity == null) { return(JError(T["notfound_defaultform"])); } m.FormInfo = formEntity; m.FormId = formEntity.SystemFormId; FormBuilder formBuilder = new FormBuilder(formEntity.FormConfig); _formService.Init(formEntity); //表单可用状态 if (!isCreate && m.FormState != FormState.Disabled && formBuilder.Form.FormRules.NotEmpty()) { if (_systemFormStatusSetter.IsDisabled(formBuilder.Form.FormRules, m.Entity)) { m.FormState = FormState.Disabled; } } //获取所有字段信息 m.AttributeList = _formService.AttributeMetaDatas; //获取字段权限 if (!CurrentUser.IsSuperAdmin && m.AttributeList.Count(n => n.AuthorizationEnabled) > 0) { var securityFields = m.AttributeList.Where(n => n.AuthorizationEnabled).Select(f => f.AttributeId)?.ToList(); if (securityFields.NotEmpty()) { //无权限的字段 var noneRead = _systemUserPermissionService.GetNoneReadFields(CurrentUser.SystemUserId, securityFields); var noneEdit = _systemUserPermissionService.GetNoneEditFields(CurrentUser.SystemUserId, securityFields); //移除无读取权限的字段内容 if (m.Entity.NotEmpty()) { foreach (var item in noneRead) { m.Entity.Remove(m.AttributeList.Find(n => n.AttributeId == item).Name); } } var obj = new { noneread = noneRead, noneedit = noneEdit }; nonePermissionFields = obj.SerializeToJson(); } } else { nonePermissionFields = "[]"; } var _form = formBuilder.Form; m.Form = _form; form = _formService.Form.SerializeToJson(false); //buttons var buttons = _ribbonbuttonFinder.Find(m.EntityId.Value, RibbonButtonArea.Form); if (formEntity.IsCustomButton && formEntity.CustomButtons.IsNotEmpty()) { List <Guid> buttonid = new List <Guid>(); buttonid = buttonid.DeserializeFromJson(formEntity.CustomButtons); buttons.RemoveAll(x => !buttonid.Contains(x.RibbonButtonId)); } if (buttons.NotEmpty()) { buttons = buttons.OrderBy(x => x.DisplayOrder).ToList(); m.RibbonButtons = buttons; _ribbonButtonStatusSetter.Set(m.RibbonButtons, m.FormState, m.Entity); } if (isCreate) { var rep = _roleObjectAccessEntityPermissionService.FindUserPermission(m.EntityMetaData.Name, CurrentUser.LoginName, AccessRightValue.Create); m.HasBasePermission = rep != null && rep.AccessRightsMask != EntityPermissionDepth.None; } else { var rep = _roleObjectAccessEntityPermissionService.FindUserPermission(m.EntityMetaData.Name, CurrentUser.LoginName, AccessRightValue.Update); m.HasBasePermission = rep != null && rep.AccessRightsMask != EntityPermissionDepth.None; } m.SnRule = _serialNumberRuleFinder.FindByEntityId(args.EntityId); if (m.SnRule != null && m.Entity.NotEmpty() && args.CopyId.HasValue) { m.Entity.SetAttributeValue(m.SnRule.AttributeName, null); } records = m.Entity.SerializeToJson(); m.StageId = args.StageId; m.BusinessFlowId = args.BusinessFlowId; m.BusinessFlowInstanceId = args.BusinessFlowInstanceId; return(JOk(new { EditRecord = m, NonePermissionFields = nonePermissionFields, Form = form, Record = records })); }
public async Task InsertOrUpdateRecordAsync(EditRecordModel model) { using (var dbContext = new AppDbContext(builder.Options)) { dbContext.ChangeTracker.AutoDetectChangesEnabled = false; bool isNewRecordNeedCalc = TypeEnum.LimitedLeaves.Contains(model.OffType) && model.StatusOfApproval == StatusOfApprovalEnum.APPROVED(); if (string.IsNullOrWhiteSpace(model.RecordId)) { DateTime?offApplyDate = null; if (!string.IsNullOrWhiteSpace(model.OffType)) { offApplyDate = DateTime.Today; } if (isNewRecordNeedCalc) { var user = await dbContext.UserInfo.FirstOrDefaultAsync(s => s.Id == model.UserId); user = TypeEnum.CalcLeaves(user, model.OffTimeStart, model.OffTimeEnd, model.OffType); if (user == null) { return; } dbContext.Entry(user).State = EntityState.Modified; } var r = new CheckRecord { UserId = model.UserId, CheckedDate = model.CheckedDate, CheckInTime = model.CheckInTime, CheckOutTime = model.CheckOutTime, GeoLocation1 = model.GeoLocation1, GeoLocation2 = model.GeoLocation2, OvertimeEndTime = model.OvertimeEndTime, OffType = model.OffType, OffTimeStart = model.OffTimeStart, OffTimeEnd = model.OffTimeEnd, OffReason = model.OffReason, StatusOfApproval = model.StatusOfApproval, OffApplyDate = offApplyDate }; await dbContext.CheckRecord.AddAsync(r); } else { var record = await dbContext.CheckRecord.FirstOrDefaultAsync(s => s.Id == model.RecordId); if (record != null) { bool isOldRecordNeedCalc = TypeEnum.LimitedLeaves.Contains(record.OffType) && record.StatusOfApproval == StatusOfApprovalEnum.APPROVED(); if (isOldRecordNeedCalc || isNewRecordNeedCalc) { // new data is special, and approved - var user = await dbContext.UserInfo.FirstOrDefaultAsync(s => s.Id == record.UserId); if (user == null) { return; } if (isNewRecordNeedCalc) { var newCalc = TypeEnum.CalcLeaves(user, model.OffTimeStart, model.OffTimeEnd, model.OffType); if (newCalc != null) { user = newCalc; dbContext.Entry(user).State = EntityState.Modified; } else { return; } } // old data is special and approved + if (isOldRecordNeedCalc) { user = TypeEnum.CalcLeaves(user, record.OffTimeStart, record.OffTimeEnd, record.OffType, inverseOp: true); dbContext.Entry(user).State = EntityState.Modified; } } if (string.IsNullOrWhiteSpace(record.OffType) && !string.IsNullOrWhiteSpace(model.OffType)) { record.OffApplyDate = DateTime.Today; } record.CheckInTime = model.CheckInTime; record.CheckOutTime = model.CheckOutTime; record.GeoLocation1 = model.GeoLocation1; record.GeoLocation2 = model.GeoLocation2; record.OvertimeEndTime = model.OvertimeEndTime; record.OffType = model.OffType; record.OffTimeStart = model.OffTimeStart; record.OffTimeEnd = model.OffTimeEnd; record.OffReason = model.OffReason; record.StatusOfApproval = model.StatusOfApproval; dbContext.Entry(record).State = EntityState.Modified; } } await dbContext.SaveChangesAsync(); } }