public async Task <ActionResult> ApproveCharity(Guid id, [FromBody] CharityApproveDto charityApproveDto) { // Check if the donor already exists var charity = await CharitableEntityApplication.GetCharity((c) => c.Id.Equals(id)); if (charity == null) { ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"A entidade beneficente, {id}, não foi encontrada."); return(NotFound(error)); } var approvals = await CharitableEntityApplication.GetCharityApprovals(a => a.CharitableEntityId.Equals(id)); object statusObj; Enum.TryParse(typeof(ApproverStatus), charityApproveDto.Status, out statusObj); if (statusObj == null) { ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"O status '${charityApproveDto.Status}' não é válido."); return(NotFound(error)); } ApproverStatus status = (ApproverStatus)statusObj; if (approvals != null && approvals.OrderByDescending(a => a.Date).First().Status == (int)status) { ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"A entidade já se encontra nesse status '${charityApproveDto.Status}'."); return(NotFound(error)); } await CharitableEntityApplication.UpdateCharityPending(id, charityApproveDto); return(Ok()); }
public async Task UpdateCharityPending(Guid id, CharityApproveDto charityApproveDto) { var charityModel = Repository.GetWhereAsQueryable(c => c.Id.Equals(id)).First(); var status = (ApproverStatus)Enum.Parse(typeof(ApproverStatus), charityApproveDto.Status); var approval = new Approval() { Id = Guid.NewGuid(), CharitableEntityId = charityModel.Id, Date = DateTime.UtcNow.ToBrazilianTimeZone(), Message = charityApproveDto.Message, Detail = charityApproveDto.Detail, Status = (int)status }; await ApprovalRepository.AddAsync(approval); charityModel.ApproverData = DateTime.UtcNow.ToBrazilianTimeZone(); charityModel.Approver = charityApproveDto.ApproverName; charityModel.Status = status; switch (status) { case ApproverStatus.PENDING_DATA: case ApproverStatus.APPROVED: case ApproverStatus.REPROVED: var lstUsers = await this.UserRepository.GetWhereAsync(u => u.Id == charityModel.UserId); var user = lstUsers.FirstOrDefault(); string title = string.Empty; if (status == ApproverStatus.APPROVED) { charityModel.IsActive = true; title = "Doa Sonhos - Cadastro Aprovado"; if (user != null) { user.IsActive = true; this.UserRepository.Udate(user); } } else if (status == ApproverStatus.REPROVED) { charityModel.IsActive = false; title = "Doa Sonhos - Cadastro Reprovado"; if (user != null) { user.IsActive = false; this.UserRepository.Udate(user); } } else if (status == ApproverStatus.PENDING_DATA) { charityModel.IsActive = false; title = "Doa Sonhos - Correção Solicitada"; if (user != null) { user.IsActive = true; this.UserRepository.Udate(user); } } await this.SendEmail(user.Login, charityModel.Name, title, string.Format("Message: {0}\r\nDetalhes: {1}", approval.Message, string.IsNullOrWhiteSpace(approval.Detail)?"-":approval.Detail)); break; default: charityModel.IsActive = false; break; } this.Repository.Udate(charityModel); await this.Repository.SaveAsync(); }