Exemple #1
0
        public ActionResult <Response> Post([FromBody] RequestVenda request)
        {
            var response = _vendaAppService.Add(request);

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