コード例 #1
0
        /// <summary>
        /// Realiza a conversão dos dados de rentabilidade do custo do produto da nota
        /// para um registro da rentabilidade.
        /// </summary>
        /// <param name="produtoNfCustoRentabilidade"></param>
        /// <returns></returns>
        private IRegistroRentabilidade ConverterParaRegistroRentabilidade(Data.Model.ProdutoNfCustoRentabilidade produtoNfCustoRentabilidade)
        {
            var tipo = (TipoRegistroRentabilidade)produtoNfCustoRentabilidade.Tipo;

            return(new RegistroRentabilidade(produtoNfCustoRentabilidade.IdRegistro,
                                             ProvedorDescritoresRegistro.ObterDescritor(tipo, produtoNfCustoRentabilidade.IdRegistro), tipo, produtoNfCustoRentabilidade.Valor));
        }
コード例 #2
0
        /// <summary>
        /// Recupera o item da rentabilidade para o custo do produto da nota fiscal.
        /// </summary>
        /// <param name="sessao"></param>
        /// <param name="produtoNf"></param>
        /// <param name="produtoNfCusto"></param>
        /// <param name="prazoMedio"></param>
        /// <param name="produto"></param>
        /// <returns></returns>
        private IItemRentabilidade <Data.Model.ProdutoNfCusto> ObterItemProdutoNfCusto(
            GDA.GDASession sessao, Data.Model.ProdutosNf produtoNf,
            Data.Model.ProdutoNfCusto produtoNfCusto, int prazoMedio, Data.Model.Produto produto)
        {
            var registros = new Lazy <IList <Data.Model.ProdutoNfCustoRentabilidade> >(
                () => Data.DAL.ProdutoNfCustoRentabilidadeDAO.Instance.ObterPorProdutoNf(sessao, produtoNfCusto.IdProdNfCusto));

            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.ProdutoNfCustoRentabilidade
                    {
                        IdProdNfCusto = produtoNfCusto.IdProdNfCusto,
                        IdRegistro    = idRegistro,
                        Tipo          = (int)tipo,
                        Valor         = valor
                    };
                    registros.Value.Add(registro);
                }
                else
                {
                    registro.Valor = valor;
                }

                return(ConverterParaRegistroRentabilidade(registro));
            });

            // Calcula o custo do produto
            var custoProd = Glass.Global.CalculosFluxo.CalcTotaisItemProdFast(sessao, produto.TipoCalculo,
                                                                              produtoNf.Altura, produtoNf.Largura, produtoNf.Qtde,
                                                                              produtoNf.TotM, produtoNfCusto.CustoCompra,
                                                                              produtoNf.AlturaBenef.GetValueOrDefault(2),
                                                                              produtoNf.LarguraBenef.GetValueOrDefault(2));

            var preceoVendaSemIPIUnitario = (produtoNf.Total + produtoNf.ValorIcmsSt) / (decimal)produtoNf.Qtde;

            return(new ItemRentabilidade <Data.Model.ProdutoNfCusto, Data.Model.ProdutoNfCustoRentabilidade>(
                       ProvedorIndicadoresFinanceiro, criarRegistro, produtoNfCusto, registros, ConverterParaRegistroRentabilidade)
            {
                Descricao = $"Produto [{produtoNfCusto.Qtde}] ({produto?.CodInterno}) {produto?.Descricao}",
                PrecoVendaSemIPI = preceoVendaSemIPIUnitario * produtoNfCusto.Qtde,
                PrecoCusto = custoProd,
                PrazoMedio = prazoMedio,
                PercentualICMSCompra = (decimal)(produtoNfCusto.AliqIcmsCompra ?? 0) / 100m,
                PercentualICMSVenda = (decimal)produtoNf.AliqIcms / 100m,
                FatorICMSSubstituicao = 0m,
                PercentualIPICompra = (decimal)(produtoNfCusto.AliqIpiCompra ?? 0) / 100m,
                PercentualIPIVenda = (decimal)produtoNf.AliqIpi / 100m,
                PercentualComissao = produtoNf.PercComissao / 100m,
                CustosExtras = 0m,
                PercentualRentabilidade = produtoNfCusto.PercentualRentabilidade / 100m,
                RentabilidadeFinanceira = produtoNfCusto.RentabilidadeFinanceira
            });
        }