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); }
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); }