示例#1
0
        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()));
        }
示例#2
0
        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));
        }
示例#3
0
        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));
        }
示例#4
0
        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);
        }