Example #1
0
        private void ConverterDtoParaModelo(Data.Model.ProdutosPedido destino)
        {
            destino.IdAmbientePedido  = (uint?)this.cadastro.ObterValorNormalizado(c => c.IdAmbiente, (int?)destino.IdAmbientePedido);
            destino.IdProd            = this.cadastro.Produto != null ? (uint)this.cadastro.Produto.Id : destino.IdProd;
            destino.Espessura         = this.cadastro.Produto != null ? (float)this.cadastro.Produto.Espessura : destino.Espessura;
            destino.Qtde              = (float)this.cadastro.ObterValorNormalizado(c => c.Quantidade, (decimal)destino.Qtde);
            destino.PercDescontoQtde  = this.cadastro.DescontoPorQuantidade != null ? (float)this.cadastro.DescontoPorQuantidade.Percentual.GetValueOrDefault() : destino.PercDescontoQtde;
            destino.ValorDescontoQtde = this.cadastro.DescontoPorQuantidade != null?this.cadastro.DescontoPorQuantidade.Valor.GetValueOrDefault() : destino.ValorDescontoQtde;

            destino.Largura                = this.cadastro.ObterValorNormalizado(c => c.Largura, destino.Largura);
            destino.Altura                 = (float?)this.cadastro.Altura?.ParaCalculo ?? destino.Altura;
            destino.AlturaReal             = (float?)this.cadastro.Altura?.Real ?? destino.Altura;
            destino.TotM                   = (float?)this.cadastro.AreaEmM2?.Real ?? destino.TotM;
            destino.TotM2Calc              = (float?)this.cadastro.AreaEmM2?.ParaCalculo ?? destino.TotM2Calc;
            destino.ValorVendido           = this.cadastro.ObterValorNormalizado(c => c.ValorUnitario, destino.ValorVendido);
            destino.IdProcesso             = (uint?)this.cadastro.ObterValorNormalizado(c => c.IdProcesso, (int?)destino.IdProcesso);
            destino.IdAplicacao            = (uint?)this.cadastro.ObterValorNormalizado(c => c.IdAplicacao, (int?)destino.IdAplicacao);
            destino.CodPedCliente          = this.cadastro.ObterValorNormalizado(c => c.CodigoPedidoCliente, destino.CodPedCliente);
            destino.Total                  = this.cadastro.ObterValorNormalizado(c => c.Total, destino.Total);
            destino.Obs                    = this.cadastro.ObterValorNormalizado(c => c.Observacao, destino.Obs);
            destino.AplicarBenefComposicao = this.cadastro.Composicao != null?this.cadastro.Composicao.AplicarBeneficiamentosProdutosFilhos.GetValueOrDefault() : destino.AplicarBenefComposicao;

            destino.IdProcessoFilhas  = this.cadastro.ObterValorNormalizado(c => c.IdProcessoFilhas, destino.IdProcessoFilhas);
            destino.IdAplicacaoFilhas = this.cadastro.ObterValorNormalizado(c => c.IdAplicacaoFilhas, destino.IdAplicacaoFilhas);

            this.ConverterBeneficiamentos(destino);
        }
Example #2
0
        /// <summary>
        /// Recupera o item de rentabilidade para o produto do pedido.
        /// </summary>
        /// <param name="sessao"></param>
        /// <param name="produtoPedido"></param>
        /// <returns></returns>
        private IItemRentabilidade ObterItemProdutoPedido(GDA.GDASession sessao, Data.Model.ProdutosPedido produtoPedido)
        {
            var prazoMedio = CalcularPrazoMedioPedido(sessao, produtoPedido.IdPedido);
            var filhos     = Data.DAL.ProdutosPedidoDAO.Instance.ObterFilhosComposicao(sessao, (int)produtoPedido.IdProdPed);

            var produtos = Data.DAL.ProdutoDAO.Instance.ObterProdutos(sessao,
                                                                      filhos.Select(f => f.IdProd).Concat(new uint[] { produtoPedido.IdProd }).Distinct());

            return(ObterItemProdutoPedido(sessao, produtoPedido, prazoMedio, produtos, filhos));
        }
Example #3
0
        private void ConverterBeneficiamentos(Data.Model.ProdutosPedido destino)
        {
            var itens = this.cadastro.Beneficiamentos?.Itens
                        ?? new Models.Genericas.V1.ItemBeneficiamentoDto[0];

            destino.ValorBenef      = this.cadastro.Beneficiamentos?.Valor ?? destino.ValorBenef;
            destino.AlturaBenef     = this.cadastro.Beneficiamentos?.Altura ?? destino.AlturaBenef;
            destino.LarguraBenef    = this.cadastro.Beneficiamentos?.Largura ?? destino.LarguraBenef;
            destino.Redondo         = this.cadastro.Beneficiamentos?.Redondo ?? destino.Redondo;
            destino.Beneficiamentos = itens.ObterListaBeneficiamentos();
        }
Example #4
0
        /// <summary>
        /// Inicia uma nova instância da classe <see cref="ListaDto"/>.
        /// </summary>
        /// <param name="produtoPedido">A model de produtos de pedido.</param>
        internal ListaDto(Data.Model.ProdutosPedido produtoPedido)
        {
            this.Id      = (int)produtoPedido.IdProdPed;
            this.Produto = new ProdutoDto
            {
                Codigo    = produtoPedido.CodInterno,
                Descricao = produtoPedido.DescrProduto,
            };

            this.Beneficiamentos    = produtoPedido.DescrBeneficiamentos;
            this.Quantidade         = (decimal)produtoPedido.Qtde;
            this.Largura            = produtoPedido.Largura;
            this.Altura             = (decimal)produtoPedido.Altura;
            this.TotalMetroQuadrado = (decimal)produtoPedido.TotM;
            this.Total = produtoPedido.Total;
        }
Example #5
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="produtoPedido"></param>
 /// <param name="loja"></param>
 /// <param name="cliente"></param>
 /// <param name="naturezaOperacao"></param>
 /// <param name="produto"></param>
 /// <param name="mva"></param>
 /// <param name="descontoRateadoImpostos"></param>
 /// <param name="codValorFiscal"></param>
 public ProdutoPedidoItemImposto(
     Data.Model.ProdutosPedido produtoPedido,
     Global.Negocios.Entidades.Loja loja,
     Global.Negocios.Entidades.Cliente cliente,
     Entidades.NaturezaOperacao naturezaOperacao,
     Global.Negocios.Entidades.Produto produto,
     float mva, decimal descontoRateadoImpostos,
     IProvedorCodValorFiscal provedorCodValorFiscal)
 {
     ProdutoPedido    = produtoPedido;
     Loja             = loja;
     Cliente          = cliente;
     NaturezaOperacao = naturezaOperacao;
     Produto          = produto;
     Mva = mva;
     DescontoRateadoImpostos = descontoRateadoImpostos;
     ProvedorCodValorFiscal  = provedorCodValorFiscal;
 }
Example #6
0
        /// <summary>
        /// Executa o calculo da rentabilidade para o produto do tipo principal.
        /// </summary>
        /// <param name="sessao"></param>
        /// <param name="instancia">Instância do produto.</param>
        /// <returns></returns>
        Data.ICalculoRentabilidadeResultado Data.ICalculadoraRentabilidade <Data.Model.ProdutosPedido> .Calcular(GDA.GDASession sessao, Data.Model.ProdutosPedido instancia)
        {
            if (!CalculoHabilitado)
            {
                return(CriarResultadoNaoExecutado());
            }

            var pedido = Data.DAL.PedidoDAO.Instance.GetElementByPrimaryKey(sessao, instancia.IdPedido);

            IdFunc = (int)pedido.IdFunc;
            IdLoja = (int)pedido.IdLoja;

            var item = ObterItemProdutoPedido(sessao, instancia);

            return(Calcular(item));
        }
Example #7
0
 /// <summary>
 /// Recupera o item com base no produto do pedido.
 /// </summary>
 /// <param name="referencia"></param>
 /// <returns></returns>
 IItemRentabilidade IProvedorItemRentabilidade <Data.Model.ProdutosPedido> .ObterItem(GDA.GDASession sessao, Data.Model.ProdutosPedido referencia)
 {
     return(ObterItemProdutoPedido(sessao, referencia));
 }
Example #8
0
 /// <summary>
 /// Recupera o item com base no produto do pedido.
 /// </summary>
 /// <param name="referencia"></param>
 /// <returns></returns>
 IItemRentabilidade IProvedorItemRentabilidade <Data.Model.ProdutosPedido> .ObterItem(Data.Model.ProdutosPedido referencia)
 {
     using (var sessao = new GDA.GDASession())
         return(ObterItemProdutoPedido(sessao, referencia));
 }
Example #9
0
        /// <summary>
        /// Recupera um item de rentabilidade para o produto pedido informado.
        /// </summary>
        /// <param name="sessao"></param>
        /// <param name="produtoPedido"></param>
        /// <param name="prazoMedio"></param>
        /// <param name="produtos"></param>
        /// <param name="produtosPedidoFilhos">Relação dos produtos do pedidos filhos do produto informado.</param>
        /// <returns></returns>
        private IItemRentabilidade <Data.Model.ProdutosPedido> ObterItemProdutoPedido(
            GDA.GDASession sessao, Data.Model.ProdutosPedido produtoPedido,
            int prazoMedio, IEnumerable <Data.Model.Produto> produtos,
            IEnumerable <Data.Model.ProdutosPedido> produtosPedidoFilhos)
        {
            var registros = new Lazy <IList <Data.Model.ProdutoPedidoRentabilidade> >(
                () => Data.DAL.ProdutoPedidoRentabilidadeDAO.Instance.ObterPorProdutoPedido(sessao, produtoPedido.IdProdPed));

            var criarRegistro = new CriadorRegistroRentabilidade((tipo, nome, valor) =>
            {
                var idRegistro = ProvedorDescritoresRegistro.ObterRegistro(tipo, nome);
                var registro   = registros.Value.FirstOrDefault(f => f.Tipo == (int)tipo && f.IdRegistro == idRegistro);

                if (registro == null)
                {
                    registro = new Data.Model.ProdutoPedidoRentabilidade
                    {
                        IdProdPed  = (int)produtoPedido.IdProdPed,
                        IdRegistro = idRegistro,
                        Tipo       = (int)tipo,
                        Valor      = valor
                    };
                    registros.Value.Add(registro);
                }
                else
                {
                    registro.Valor = valor;
                }

                return(ConverterParaRegistroRentabilidade(registro));
            });

            // Carrega o produto associado
            var produto = produtos.FirstOrDefault(f => f.IdProd == produtoPedido.IdProd);

            // Calculao custo do produto
            var custoProd = Global.CalculosFluxo.CalcTotaisItemProdFast(sessao, produto.TipoCalculo,
                                                                        produtoPedido.Altura, produtoPedido.Largura, produtoPedido.Qtde,
                                                                        produtoPedido.TotM, produto.CustoCompra, produtoPedido.AlturaBenef.GetValueOrDefault(2),
                                                                        produtoPedido.LarguraBenef.GetValueOrDefault(2));

            if (produtosPedidoFilhos.Any())
            {
                // Recupera os itens dos produtos filhos
                var itens = produtosPedidoFilhos.Select(produtoPedido1 =>
                                                        ObterItemProdutoPedido(sessao, produtoPedido1, prazoMedio, produtos, new Data.Model.ProdutosPedido[0]))
                            .ToList();

                return(new ItemRentabilidadeContainer <Data.Model.ProdutosPedido, Data.Model.ProdutoPedidoRentabilidade>(
                           ProvedorIndicadoresFinanceiro, criarRegistro, produtoPedido, itens, f => true, registros,
                           ConverterParaRegistroRentabilidade)
                {
                    Descricao = $"Produto ({produto?.CodInterno}) {produto?.Descricao}",
                    PrecoVendaSemIPI = produtoPedido.Total + produtoPedido.ValorBenef,
                    PrazoMedio = prazoMedio,
                    PercentualComissao = produtoPedido.PercComissao / 100m,
                    PercentualRentabilidade = produtoPedido.PercentualRentabilidade / 100m,
                    RentabilidadeFinanceira = produtoPedido.RentabilidadeFinanceira
                });
            }
            else
            {
                return new ItemRentabilidade <Data.Model.ProdutosPedido, Data.Model.ProdutoPedidoRentabilidade>(
                    ProvedorIndicadoresFinanceiro, criarRegistro, produtoPedido, registros, ConverterParaRegistroRentabilidade)
                       {
                           Descricao               = $"Produto ({produto?.CodInterno}) {produto?.Descricao}",
                           PrecoVendaSemIPI        = produtoPedido.Total + produtoPedido.ValorBenef, // Não atualizar a configuração do sistema o total do produto não possui o valor do IPI
                           PrecoCusto              = custoProd,
                           PrazoMedio              = prazoMedio,
                           PercentualICMSVenda     = (decimal)produtoPedido.AliqIcms / 100m,
                           FatorICMSSubstituicao   = 0m,
                           PercentualIPICompra     = 0m, //(decimal)(produto?.AliqIPI ?? 0) / 100m,
                           PercentualIPIVenda      = (decimal)produtoPedido.AliqIpi / 100m,
                           PercentualComissao      = produtoPedido.PercComissao / 100m,
                           CustosExtras            = 0M,
                           PercentualRentabilidade = produtoPedido.PercentualRentabilidade / 100m,
                           RentabilidadeFinanceira = produtoPedido.RentabilidadeFinanceira
                       }
            };
        }
Example #10
0
        /// <summary>
        /// Inicia uma nova instância da classe <see cref="ConverterCadastroAtualizacaoParaProdutoPedido"/>.
        /// </summary>
        /// <param name="cadastro">O DTO de cadastro, enviado para o endpoint.</param>
        /// <param name="atual">O produto de pedido atual (opcional), para que sejam aproveitados os valores, se necessário.</param>
        public ConverterCadastroAtualizacaoParaProdutoPedido(CadastroAtualizacaoDto cadastro, Data.Model.ProdutosPedido atual = null)
        {
            this.cadastro      = cadastro;
            this.produtoPedido = new Lazy <Data.Model.ProdutosPedido>(() =>
            {
                var destino = atual ?? new Data.Model.ProdutosPedido();
                this.ConverterDtoParaModelo(destino);

                return(destino);
            });
        }
Example #11
0
        private IHttpActionResult ValidarOperacaoId(GDASession sessao, int idPedido, int id, out Data.Model.ProdutosPedido produtoPedido)
        {
            produtoPedido = null;

            var validacao = this.ValidarIdPedido(sessao, idPedido);

            if (validacao != null)
            {
                return(validacao);
            }

            if (id <= 0)
            {
                return(this.ErroValidacao("Número do produto deve ser maior que zero."));
            }

            produtoPedido = ProdutosPedidoDAO.Instance.GetElementByPrimaryKey(sessao, id);

            if (produtoPedido == null)
            {
                return(this.NaoEncontrado($"Produto de pedido {id} não encontrado."));
            }

            if (produtoPedido.IdPedido != idPedido)
            {
                return(this.NaoEncontrado($"Produto de pedido {id} não pertence ao pedido {idPedido}."));
            }

            return(null);
        }
Example #12
0
        /// <summary>
        /// Inicia uma nova instância da classe <see cref="ListaDto"/>.
        /// </summary>
        /// <param name="sessao">A transação com o banco de dados.</param>
        /// <param name="produtoPedido">A model de produto de pedido.</param>
        internal ListaDto(GDASession sessao, Data.Model.ProdutosPedido produtoPedido)
        {
            this.Id = (int)produtoPedido.IdProdPed;
            this.IdMaterialProjeto = (int?)produtoPedido.IdMaterItemProj;
            this.Produto           = new ProdutoDto
            {
                Id        = (int)produtoPedido.IdProd,
                Codigo    = produtoPedido.CodInterno,
                Descricao = produtoPedido.DescrProduto,
                DescricaoComBeneficiamentos = produtoPedido.DescricaoProdutoComBenef,
                Espessura = (decimal)produtoPedido.Espessura,
                Vidro     = produtoPedido.IsVidro == "true",
            };

            this.Quantidade            = (decimal)produtoPedido.Qtde;
            this.QuantidadeAmbiente    = produtoPedido.QtdeAmbiente;
            this.DescontoPorQuantidade = new DescontoQuantidadeDto
            {
                Percentual = (decimal)produtoPedido.PercDescontoQtde,
                Valor      = produtoPedido.ValorDescontoQtde,
            };

            this.Largura = produtoPedido.Largura;
            this.Altura  = new AlturaDto
            {
                Real              = (decimal)produtoPedido.AlturaReal,
                ParaCalculo       = (decimal)produtoPedido.Altura,
                ParaExibirNaLista = produtoPedido.AlturaLista,
            };

            this.AreaEmM2 = new AreaDto
            {
                Real                = (decimal)produtoPedido.TotM,
                ParaCalculo         = (decimal)produtoPedido.TotM2Calc,
                ParaCalculoSemChapa = produtoPedido.TotalM2CalcSemChapaString,
            };

            this.ValorUnitario       = produtoPedido.ValorVendido;
            this.Processo            = IdCodigoDto.TentarConverter((int?)produtoPedido.IdProcesso, produtoPedido.CodProcesso);
            this.Aplicacao           = IdCodigoDto.TentarConverter((int?)produtoPedido.IdAplicacao, produtoPedido.CodAplicacao);
            this.CodigoPedidoCliente = produtoPedido.PedCli;
            this.Total           = produtoPedido.Total;
            this.Beneficiamentos = new BeneficiamentosDto
            {
                Valor     = produtoPedido.ValorBenef,
                Altura    = produtoPedido.AlturaBenef,
                Largura   = produtoPedido.LarguraBenef,
                Espessura = (decimal?)produtoPedido.EspessuraBenef,
                Redondo   = produtoPedido.Redondo,
                Itens     = produtoPedido.Beneficiamentos?.ObterListaBeneficiamentos(),
            };

            this.Observacao         = produtoPedido.Obs;
            this.PercentualComissao = (decimal)produtoPedido.PercComissao;
            this.Composicao         = new ComposicaoDto
            {
                PossuiFilhos          = produtoPedido.IsProdLamComposicao,
                PermitirInserirFilhos = produtoPedido.IsProdLamComposicao &&
                                        !ProdutosPedidoDAO.Instance.IsProdLaminado(produtoPedido.IdProdPed),
            };

            this.Permissoes = new PermissoesDto
            {
                Editar  = produtoPedido.PodeEditar,
                Excluir = produtoPedido.DeleteVisible,
            };
        }