public IVenda Criar(ICliente cliente) { var novaVenda = new Venda(cliente); _vendaRepository.Add(novaVenda); return(novaVenda); }
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)); } }
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); } }
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()); }
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")); }
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()); } }