public static string GetAppropriateTextStyle(this AccommodationRequest.InviteState state)
        {
            string result;

            switch (state)
            {
            case AccommodationRequest.InviteState.Unanswered:
                result = "text-warning";
                break;

            case AccommodationRequest.InviteState.Accepted:
                result = "text-success";
                break;

            case AccommodationRequest.InviteState.Declined:
                result = "text-danger";
                break;

            case AccommodationRequest.InviteState.Canceled:
                result = "text-danger";
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(result);
        }
Пример #2
0
        public async Task <AccommodationInvite> CancelOrDeclineAccommodationInvite(int inviteId,
                                                                                   AccommodationRequest.InviteState newState)
        {
            var acceptedStates = new[]
            {
                AccommodationRequest.InviteState.Declined, AccommodationRequest.InviteState.Canceled,
            };

            if (!acceptedStates.Contains(newState))
            {
                return(null);
            }

            //todo: make null result descriptive
            var inviteRequest = await UnitOfWork.GetDbSet <AccommodationInvite>()
                                .Where(invite => invite.Id == inviteId)
                                .Include(invite => invite.Project)
                                .FirstOrDefaultAsync().ConfigureAwait(false);

            if (inviteRequest == null)
            {
                throw new Exception("Invite request not found.");
            }

            inviteRequest.IsAccepted         = newState;
            inviteRequest.ResolveDescription = newState == AccommodationRequest.InviteState.Canceled
                ? ResolveDescription.Canceled
                : ResolveDescription.Declined;
            await UnitOfWork.SaveChangesAsync().ConfigureAwait(false);

            var receivers = await UnitOfWork
                            .GetDbSet <Claim>()
                            .Where(claim =>
                                   claim.ClaimId == inviteRequest.FromClaimId ||
                                   claim.ClaimId == inviteRequest.ToClaimId)
                            .Include(c => c.Player)
                            .ToArrayAsync()
                            .ConfigureAwait(false);

            await EmailService
            .Email(await CreateInviteEmail <DeclineInviteEmail>(receivers,
                                                                inviteRequest.Project).ConfigureAwait(false))
            .ConfigureAwait(false);

            return(inviteRequest);
        }