public async Task <Guid> CreateDonation(DonationCreateDto donationDto, bool completed = false)
        {
            var donation = this.Mapper.Map <Donation>(donationDto);

            donation.Id        = Guid.NewGuid();
            donation.Date      = DateTime.Now.ToBrazilianTimeZone();
            donation.Completed = completed;
            donation.Canceled  = false;

            await this.DonationRepository.AddAsync(donation);

            if (donationDto.DonationItem != null && donationDto.DonationItem.Count() > 0)
            {
                foreach (var donateItem in donationDto.DonationItem)
                {
                    var item = await this.ItemRepository.GetByIdAsync(donateItem.ItemId);

                    if (item != null)
                    {
                        await this.DonationItemRepository.AddAsync(new DonationItem()
                        {
                            DonationId = donation.Id, ItemId = item.Id, Name = item.Name, Price = item.Price, Quantity = donateItem.ItemQuantity
                        });
                    }
                }
            }

            await this.DonationRepository.SaveAsync();

            return(donation.Id);
        }
        public async Task <ActionResult> CreateDonationOnline([FromBody] DonationCreateDto donationCreateDto)
        {
            if (donationCreateDto == null)
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"O parâmetro, DonationCreate, não pode ser nulo.");
                return(BadRequest(error));
            }

            // Check if charity exists
            var charity = await CharitableEntityApplication.GetCharity((c) => c.Id.Equals(donationCreateDto.CharitableEntityId), true);

            if (charity == null)
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"A entidade beneficente, {donationCreateDto.CharitableEntityId}, não foi encontrada.");
                return(NotFound(error));
            }

            // Check if user exists
            var user = await UserApplication.GetUser((u) => u.Id.Equals(donationCreateDto.UserId));

            if (user == null)
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"O usuário, {donationCreateDto.UserId}, não foi encontrado.");
                return(NotFound(error));
            }

            if (donationCreateDto?.DonationItem.Count() > 0)
            {
                var lstItems = await ItemApplication.GetCharityItemIn(charity.Information.Id, donationCreateDto.DonationItem.Select(e => e.ItemId).ToList());

                if (lstItems.Count() != donationCreateDto.DonationItem.Count())
                {
                    ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"Existem itens inválidos.");
                    return(BadRequest(error));
                }
            }

            var donationId = await DonationApplication.CreateDonation(donationCreateDto, true);

            try
            {
                // Sent an email
                var donor = await UserApplication.GetUserOwnerDto(donationCreateDto.UserId);

                string message = string.Format(" <h1>Olá, {0}</h1><h2>Doação online realizada com sucesso no valor total de {1} reais para a entidade {2} ({3}).</h2>", donor.Name, donationCreateDto.Total.ToString("C"), charity.Name, charity.Cnpj);

                await this.EmailSender.SendEmailAsync(user.Login, $"Doa Sonhos - Doação Online", message);
            }
            catch (Exception)
            {
            }

            return(CreatedAtRoute("GetDonationById", new { id = donationId }, null));
        }
Exemplo n.º 3
0
        public IActionResult Post([FromBody] DonationCreateDto donation)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var donationEntity = _mapper.Map <Donation>(donation);

            _donationRepository.Create(donationEntity);
            if (!_donationRepository.Save())
            {
                return(StatusCode(500, "An error occured while processing your request"));
            }

            var donationCreated = _mapper.Map <DonationDto>(donationEntity);

            return(CreatedAtAction("Post", new { id = donationEntity.ID }, donationCreated));
        }
        public async Task <ActionResult> CreateDonationPresencial([FromBody] DonationCreateDto donationCreateDto)
        {
            if (donationCreateDto == null)
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"O parâmetro, DonationCreate, não pode ser nulo.");
                return(BadRequest(error));
            }

            // Check if the charity exists
            var charity = await CharitableEntityApplication.GetCharity((c) => c.Id.Equals(donationCreateDto.CharitableEntityId), true);

            if (charity == null)
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"A entidade beneficente, {donationCreateDto.CharitableEntityId}, não foi encontrada.");
                return(NotFound(error));
            }

            // Check if user exists
            var user = await UserApplication.GetUser((u) => u.Id.Equals(donationCreateDto.UserId));

            if (user == null)
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"O usuário, {donationCreateDto.UserId}, não foi encontrado.");
                return(NotFound(error));
            }

            if (donationCreateDto.Total != 0)
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"O valor total não pode ser diferente de zero para doações presenciais.");
                return(BadRequest(error));
            }

            if (donationCreateDto?.DonationItem.Count() > 0)
            {
                var lstItems = await ItemApplication.GetCharityItemIn(charity.Information.Id, donationCreateDto.DonationItem.Select(e => e.ItemId).ToList());

                if (lstItems.Count() != donationCreateDto.DonationItem.Count())
                {
                    ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"Existem itens inválidos.");
                    return(BadRequest(error));
                }
            }
            else
            {
                ErrorMessage error = new ErrorMessage((int)HttpStatusCode.BadRequest, $"É necessário pelo menos um item válido para doações presenciais.");
                return(BadRequest(error));
            }

            var donationId = await DonationApplication.CreateDonation(donationCreateDto, false);

            try
            {
                // Sent an email
                var donor = await UserApplication.GetUserOwnerDto(donationCreateDto.UserId);

                string message = string.Format(" <h2>Olá, {0}</h2><h3>Parabéns! Você realizou uma doação presencial para a entidade {1} ({2}).</h3>", donor.Name, charity.Name, charity.Cnpj);

                await this.EmailSender.SendEmailAsync(user.Login, $"Doa Sonhos - Doação Presencial", message);
            }
            catch (Exception ex) {
                Console.WriteLine(ex);
            }

            return(CreatedAtRoute("GetDonationById", new { id = donationId }, null));
        }