Пример #1
0
        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();
        }