Пример #1
0
        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)));
        }
Пример #2
0
        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 }
            });
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        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 }
            });
        }
Пример #5
0
        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);
        }
Пример #6
0
        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));
        }
Пример #8
0
 public UpdateStaffResponse UpdateStaff(UpdateStaffRequest request)
 {
     return(ApiRequestHelper.Post <UpdateStaffRequest, UpdateStaffResponse>(request));
 }