Exemplo n.º 1
0
        public IVenda Criar(ICliente cliente)
        {
            var novaVenda = new Venda(cliente);

            _vendaRepository.Add(novaVenda);
            return(novaVenda);
        }
Exemplo n.º 2
0
        public async Task <IActionResult> CreateVenda([FromBody] VendaResource vendaResource)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var venda = mapper.Map <VendaResource, ProdutoCliente>(vendaResource);

            venda.DataCompra = DateTime.Now;

            var produto = await repositoryProduto.GetProduto(venda.ProdutoId);

            if (venda.QuantidadeProduto > produto.QuantEstoque)
            {
                return(BadRequest());
            }
            venda.PrecoPago = produto.PrecoVenda;

            var novoProduto = produto;

            novoProduto.QuantEstoque -= venda.QuantidadeProduto;

            mapper.Map <Produto, Produto>(novoProduto, produto);
            repository.Add(venda);
            await unitOfWork.CompleteAsync();

            venda = await repository.GetVenda(venda.Id, venda.ClienteId, venda.ProdutoId);

            var result = mapper.Map <ProdutoCliente, VendaResource>(venda);

            return(Ok(result));
        }
        public Response Comprar(PedidoDto pedidoDto, int clienteId)
        {
            try
            {
                var listItemVenda = ItemVenda.ListEmpty();
                var discos        = Disco.ListEmpty();

                #region Validation

                if (pedidoDto.IsNotValid())
                {
                    return(Response.BuildBadRequest());
                }

                var cliente = _clienteRepository.ObterPorId(clienteId);

                if (cliente == null)
                {
                    return(Response.BuildBadRequest(ExceptionMessages.ClienteNaoEncontrado));
                }

                discos = _discoRepository.ObterListaPorId(pedidoDto.GetListId());

                if (!discos.Any())
                {
                    return(Response.BuildBadRequest(ExceptionMessages.DiscoNaoEncontrado));
                }

                #endregion

                foreach (var disco in discos)
                {
                    var pedidoItem = pedidoDto.ItemPedidoDto.Where(i => i.DiscoId == disco.DiscoId).FirstOrDefault();

                    var cashback = PorcentagemCachbackFactory.
                                   CriaInstanciaPorcentagemCashback((GeneroEnum)_generoRepository.ObterPorId(disco.Genero.GeneroId).GeneroId)
                                   .CalculaValorCashbackPorGenero(DateTime.Now.DayOfWeek);

                    listItemVenda.Add(ItemVenda.Build(pedidoItem.Quantidade, cashback, disco));
                }

                var venda = _vendaRepository.Add(Venda.Build(cliente, listItemVenda));

                if (!_unitOfWork.Commit())
                {
                    Response.BuildBadRequest(ExceptionMessages.ErroAoSalvarDados);
                }

                return(Response.BuildSuccess(_mapper.Map <VendaDto>(venda)));
            }
            catch (Exception ex)
            {
                return(Response.BuildInternalServerError(ex.Message));
            }
        }
Exemplo n.º 4
0
 public Venda Add(Venda venda)
 {
     try
     {
         venda.Id      = 0;
         venda.Horario = DateTime.Now;
         _anuncioRepository.Sell(venda.AnuncioId);
         return(_repository.Add(venda));
     }
     catch (Exception e)
     {
         var c = e.Message;
         return(null);
     }
 }
Exemplo n.º 5
0
        public async Task <VendaResult> Execute(VendaParameter parameter)
        {
            var venda = new Venda()
            {
                FuncionarioVendaId = parameter.IdFuncionario,
                Itens = _mapper.Map <IEnumerable <ItemVenda> >(parameter.Itens)
            };

            await _vendaRepository.Add(venda);

            foreach (var item in parameter.Itens)
            {
                await _editarQuantidadeProdutoExecutor.Execute(new AtualizarEstoqueProdutoParameter { Codigo = item.CodigoProduto, Quantidade = item.Quantidade, Somar = false });
            }

            return(new VendaResult());
        }
Exemplo n.º 6
0
 public IActionResult PostVenda([FromBody] VendaRequest vendaRequest)
 {
     if (ModelState.IsValid)
     {
         var venda = vendaRequest.ToVenda();
         venda.UsuarioEmail = User.Identity.Name;
         var deu = _vendaRepository.Add(venda);
         if (deu)
         {
             var uri        = Url.Action("GetVenda", new{ id = venda.Id });
             var uriEvento  = Url.Action("GetEvento", "Evento", new{ id = venda.EventoId });
             var uriUsuario = Url.Action("GetUsuario", "Usuario", new{ email = venda.UsuarioEmail });
             return(Created(uri, venda.ToVendaResponse(uriEvento, uriUsuario)));
         }
         return(BadRequest("Evento ou Email inválidos."));
     }
     return(BadRequest("Requisição inválida"));
 }
Exemplo n.º 7
0
        public Task <CommandResult> Handle(AddVendaCommand command, CancellationToken cancellationToken)
        {
            if (!command.IsValid())
            {
                NotifyCommandErrors(command);
                return(Response());
            }

            Cliente cliente = _clienteRepository.GetById(command.ClienteId);
            Venda   venda   = new Venda(command.DataVenda, command.Detalhes, cliente);

            _vendaRepository.Add(venda);

            if (Commit())
            {
                _mediator.Publish(new AddedVendaEvent());
            }

            return(Response());
        }
        public Response Add(RequestVenda request)
        {
            try
            {
                #region Validations initial

                if (request.IsNotValid())
                {
                    return(Response.BuildBadRequest());
                }

                if (request.Pedidos.Any(p => p.DiscoId <= 0))
                {
                    return(Response.BuildBadRequest(request.GetValueInvalidId()));
                }

                if (request.Pedidos.Any(p => p.Quantidade <= 0))
                {
                    return(Response.BuildBadRequest(request.GetValueInvalidQuantidade()));
                }

                #endregion

                #region Get discs

                var discos = _discoRepository.GetListById(request.GetListId());

                if (!discos.Any())
                {
                    return(Response.BuildNotFound("Discos não encontrado"));
                }

                #endregion

                #region Get percentage Cashback

                var diaSemana    = DataExtensions.GetWeekCurrent();
                var listCashback = _cashbackRepository.GetByWeek(diaSemana);

                #endregion

                #region Generate venda

                #region Item

                var listItem = ItemVenda.ListEmpty();

                foreach (var item in discos)
                {
                    var itemPedido = request.Pedidos.Distinct().FirstOrDefault(x => x.DiscoId == item.DiscoId);
                    var cashback   = listCashback.FirstOrDefault(c => c.GeneroId == item.GeneroId);

                    if (cashback == null)
                    {
                        return(Response.BuildNotFound($"Não foi encontrado o percentual de cashback para o generoId: {item.GeneroId} e DiSemanaId: {(int)diaSemana}"));
                    }

                    var itemVenda = ItemVenda.Build(item, itemPedido, cashback);
                    listItem.Add(itemVenda);
                }

                #endregion

                #region Venda

                var venda = Venda.Build(listItem);

                #endregion

                #endregion

                var data = ResponseVenda.Build(_vendaRepository.Add(venda));
                return(Response.BuildSuccess(data));
            }
            catch (Exception ex)
            {
                return(Response.BuildInternalServerError());
            }
        }