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 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()); } }