public async Task <Result <string> > Handle(UnCompletePunchOutCommand request, CancellationToken cancellationToken) { var invitation = await _invitationRepository.GetByIdAsync(request.InvitationId); var currentUserAzureOid = _currentUserProvider.GetCurrentUserOid(); var hasAdminPrivilege = await InvitationHelper.HasIpoAdminPrivilege(_permissionCache, _plantProvider, _currentUserProvider); var participant = invitation.Participants.SingleOrDefault(p => p.SortKey == 0 && p.Organization == Organization.Contractor && (p.AzureOid == currentUserAzureOid || hasAdminPrivilege)); if (participant == null || participant.FunctionalRoleCode != null) { var functionalRole = invitation.Participants .SingleOrDefault(p => p.SortKey == 0 && p.FunctionalRoleCode != null && p.Type == IpoParticipantType.FunctionalRole); invitation.UnCompleteIpo(functionalRole, request.ParticipantRowVersion); } else { invitation.UnCompleteIpo(participant, request.ParticipantRowVersion); } invitation.SetRowVersion(request.InvitationRowVersion); await _unitOfWork.SaveChangesAsync(cancellationToken); return(new SuccessResult <string>(invitation.RowVersion.ConvertToString())); }
public async Task <bool> CurrentUserIsAllowedToDeleteIpoAsync(int invitationId, CancellationToken cancellationToken) { var hasAdminPermission = await InvitationHelper.HasIpoAdminPrivilege(_permissionCache, _plantProvider, _currentUserProvider); if (hasAdminPermission) { return(true); } return(await CurrentUserIsCreatorOfIpoAsync(invitationId, cancellationToken)); }
public async Task <bool> CurrentUserIsAdminOrValidAccepterParticipantAsync(int invitationId, CancellationToken cancellationToken) { var hasAdminPermission = await InvitationHelper.HasIpoAdminPrivilege(_permissionCache, _plantProvider, _currentUserProvider); if (hasAdminPermission) { return(true); } return(await CurrentUserIsValidAccepterParticipantAsync(invitationId, cancellationToken)); }
public async Task <bool> HasPermissionToEditParticipantAsync(int id, int invitationId, CancellationToken cancellationToken) { if (await InvitationHelper.HasIpoAdminPrivilege(_permissionCache, _plantProvider, _currentUserProvider)) { return(true); } var invitation = await(from i in _context.QuerySet <Invitation>() where i.Id == invitationId select i).SingleAsync(cancellationToken); switch (invitation.Status) { case IpoStatus.Planned when await CurrentUserIsValidCompleterParticipantAsync(invitationId, cancellationToken): case IpoStatus.Completed when await CurrentUserIsValidAccepterParticipantAsync(invitationId, cancellationToken): return(true); } var participant = await(from p in _context.QuerySet <Participant>() where EF.Property <int>(p, "InvitationId") == invitationId && p.Id == id select p).SingleAsync(cancellationToken); if (participant.SignedAtUtc != null) { return(false); } if (participant.FunctionalRoleCode == null && participant.AzureOid == _currentUserProvider.GetCurrentUserOid()) { return(true); } var person = await _personApiService.GetPersonInFunctionalRoleAsync( _plantProvider.Plant, _currentUserProvider.GetCurrentUserOid().ToString(), participant.FunctionalRoleCode); return(person != null); }