コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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());
            }
        }