public UpdateStaffResponse UpdateStaff(UpdateStaffRequest request) { Platform.CheckForNullReference(request, "request"); Platform.CheckMemberIsSet(request.StaffDetail, "StaffDetail"); var staff = PersistenceContext.Load <Staff>(request.StaffDetail.StaffRef); // ensure user has access to edit this staff CheckWriteAccess(staff); // if trying to associate with a new user account, check the account is free if (!string.IsNullOrEmpty(request.StaffDetail.UserName) && request.StaffDetail.UserName != staff.UserName) { ValidateUserNameFree(request.StaffDetail.UserName); } var assembler = new StaffAssembler(); assembler.UpdateStaff(request.StaffDetail, staff, request.UpdateElectiveGroups && (Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.Data.StaffGroup) || staff.UserName == this.CurrentUser), request.UpdateNonElectiveGroups && Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.Data.StaffGroup), PersistenceContext); return(new UpdateStaffResponse(assembler.CreateStaffSummary(staff, PersistenceContext))); }
public async Task <ActionResult> Edit(Guid key, PersonName name = null, string email = null, string location = null, string npi = null) { var updateStaffRequest = new UpdateStaffRequest { StaffKey = key, }; if (name != null) { updateStaffRequest.UpdateType = UpdateStaffRequest.StaffUpdateType.Name; updateStaffRequest.Value = name; } else if (email != null) { updateStaffRequest.UpdateType = UpdateStaffRequest.StaffUpdateType.Email; updateStaffRequest.Value = email; } else if (location != null) { updateStaffRequest.UpdateType = UpdateStaffRequest.StaffUpdateType.Location; updateStaffRequest.Value = location; } else if (npi != null) { updateStaffRequest.UpdateType = UpdateStaffRequest.StaffUpdateType.NPI; updateStaffRequest.Value = npi; } var requestDispatcher = CreateAsyncRequestDispatcher(); requestDispatcher.Add(updateStaffRequest); var response = await requestDispatcher.GetAsync <DtoResponse <StaffDto> > (); if (response.DataTransferObject == null) { throw new HttpException(500, "Staff cannot be saved."); } if (response.DataTransferObject.DataErrorInfoCollection.Any()) { return(new JsonResult { Data = new { error = true, errors = response.DataTransferObject.DataErrorInfoCollection } }); } return(new JsonResult { Data = new { sucess = true } }); }
/// <summary> /// Handles the specified request. /// </summary> /// <param name="request">The request.</param> /// <param name="response">The response.</param> protected override void Handle(UpdateStaffRequest request, DtoResponse <StaffDto> response) { var staff = _staffRepository.GetByKey(request.StaffKey); DataErrorInfo dataErrorInfo = null; switch (request.UpdateType) { case UpdateStaffRequest.StaffUpdateType.Name: staff.ReviseName((PersonName)request.Value); break; case UpdateStaffRequest.StaffUpdateType.Email: Email newEmail = null; try { if (!string.IsNullOrWhiteSpace((string)request.Value)) { newEmail = new Email((string)request.Value); } } catch (ArgumentException ae) { if (!ae.Message.Contains("email address", StringComparison.OrdinalIgnoreCase)) { throw; } dataErrorInfo = new DataErrorInfo(ae.Message, ErrorLevel.Error, PropertyUtil.ExtractPropertyName <StaffDto, string> (s => s.Email)); } staff.ReviseEmail(string.IsNullOrWhiteSpace((string)request.Value) ? null : newEmail); break; case UpdateStaffRequest.StaffUpdateType.Location: staff.ReviseLocation((string)request.Value); break; case UpdateStaffRequest.StaffUpdateType.NPI: staff.ReviseNpi((string)request.Value); break; } response.DataTransferObject = Mapper.Map <Staff, StaffDto> (staff); if (dataErrorInfo != null) { response.DataTransferObject.AddDataErrorInfo(dataErrorInfo); } }
public async Task <ActionResult> Edit(Guid key, PersonName name = null, string email = null, string location = null, string npi = null) { var updateStaffRequest = new UpdateStaffRequest { StaffKey = key, }; if (name != null) { updateStaffRequest.UpdateType = UpdateStaffRequest.StaffUpdateType.Name; updateStaffRequest.Value = name; } else if (email != null) { updateStaffRequest.UpdateType = UpdateStaffRequest.StaffUpdateType.Email; updateStaffRequest.Value = email; } else if (location != null) { updateStaffRequest.UpdateType = UpdateStaffRequest.StaffUpdateType.Location; updateStaffRequest.Value = location; } else if (npi != null) { updateStaffRequest.UpdateType = UpdateStaffRequest.StaffUpdateType.NPI; updateStaffRequest.Value = npi; } var requestDispatcher = CreateAsyncRequestDispatcher(); requestDispatcher.Add(updateStaffRequest); var response = await requestDispatcher.GetAsync <DtoResponse <StaffDto> >(); return(new JsonResult { Data = new { sucess = true } }); }
protected override void Handle(UpdateStaffRequest request, DtoResponse <StaffDto> response) { var staff = _staffRepository.GetByKey(request.StaffKey); switch (request.UpdateType) { case UpdateStaffRequest.StaffUpdateType.Name: staff.ReviseName((PersonName)request.Value); break; case UpdateStaffRequest.StaffUpdateType.Email: staff.ReviseEmail(string.IsNullOrWhiteSpace((string)request.Value) ? null : new Email((string)request.Value)); break; case UpdateStaffRequest.StaffUpdateType.Location: staff.ReviseLocation((string)request.Value); break; case UpdateStaffRequest.StaffUpdateType.NPI: staff.ReviseNpi((string)request.Value); break; } response.DataTransferObject = Mapper.Map <Staff, StaffDto>(staff); }
public async Task <ActionResult <BaseResponse <StaffViewModel> > > PutDepartmentStaff([FromRoute] Guid id, [FromBody] UpdateStaffRequest request) { try { var raw = Request.Headers.FirstOrDefault(x => x.Key.Equals("Authorization")).Value; var requester = IdentityManager.GetUsernameFromToken(raw); var roles = IdentityManager.GetRolesFromToken(raw); var staff = _staffService.UpdateStaff(id, request, requester, roles); if (staff == null) { return(NotFound()); } return(Ok(new BaseResponse <StaffViewModel>() { Data = staff })); } catch (Exception ex) { if (ex.Message.StartsWith("ERR")) { return(BadRequest(new ErrorResponse(ex.Message))); } else { throw; } } }
public StaffViewModel UpdateStaff(Guid id, UpdateStaffRequest request, string updatedBy, IEnumerable <string> roles = null) { if (roles.Count() == 0 || roles == null) { return(null); } if (!request.Password.IsEmpty() && request.PasswordConfirmation.IsEmpty()) { throw new Exception(Constants.ERR_EMPTY_PWD_CONFIR); } else if (!request.Password.IsEmpty() && !request.Password.Equals(request.PasswordConfirmation)) { throw new Exception(Constants.ERR_PWD_NOTMATCH); } if (request.Email.IsEmpty()) { throw new Exception(Constants.ERR_EMPTY_EMAIL); } if (request.FullName.IsEmpty()) { throw new Exception(Constants.ERR_EMPTY_FNAME); } if (request.IsDeleted == null) { throw new Exception(Constants.ERR_EMPTY_DELFLAG); } if (request.PhoneNumber.Length > Constants.CONSTRAINT_PHONENUM_MAXLEN) { throw new Exception(Constants.ERR_PHONENUM_MAXLEN); } var repo = _unitOfWork.Repository <Account>(); var updatingStaff = _mapper.Map <Account>(request); var staff = new Account(); try { staff = repo.Get(x => x.Id.Equals(id)) .Include(x => x.Role) .Include(x => x.DepartmentStaff).FirstOrDefault(); //not found if (staff == null) { return(null); } //cant not modify mod or admin if youre not admin else if ((staff.Role.RoleName.Equals(Constants.ROLE_MOD_NAME) || staff.Role.RoleName.Equals(Constants.ROLE_ADMIN_NAME)) && !roles.Contains(Constants.ROLE_ADMIN_NAME)) { return(null); } //proceed to update var type = typeof(Account); var props = type.GetProperties().Where(x => x.CanWrite && x.CanRead); props.ForAll(x => { if (x.GetValue(updatingStaff) != null && !new[] { nameof(Account.UpdatedAt), nameof(Account.DepartmentStaff), nameof(Account.RoleId), nameof(Account.Id), nameof(Account.CreatedAt) }.Contains(x.Name)) { x.SetValue(staff, x.GetValue(updatingStaff)); } }); if (!updatingStaff.RoleId.Equals(0)) { staff.RoleId = updatingStaff.RoleId; } //_unitOfWork.Repository<DepartmentStaff>().Rem request.Departments.ForAll(department => { staff.DepartmentStaff = new List <DepartmentStaff>(); staff.DepartmentStaff.Add(new DepartmentStaff() { AccountId = staff.Id, DepartmentId = department, UpdatedBy = updatedBy, CreatedBy = updatedBy }); }); if (!request.Password.IsEmpty()) { staff.PasswordHash = IdentityManager.HashPassword(request.Password); } staff.UpdatedBy = updatedBy; staff.UpdatedAt = DateTime.Now; repo.Update(staff); repo.Commit(); } catch (DbUpdateException due) { var se = due.GetBaseException() as SqlException; if (se != null) { if (se.Errors.Count > 0) { switch (se.Errors[0].Number) { case 547: // Foreign Key violation throw new Exception(Constants.ERR_ROLE_FK); case 2627: throw new Exception(Constants.ERR_UNAME_NOTAVAILABLE); default: throw; } } } } return(_mapper.Map <StaffViewModel>(staff)); }
public UpdateStaffResponse UpdateStaff(UpdateStaffRequest request) { return(ApiRequestHelper.Post <UpdateStaffRequest, UpdateStaffResponse>(request)); }