private KhanPedidoServiceReference.ItemPedido ConverterItemPedido( Data.Model.ProdutosNf produtoNf, Data.Model.Produto produto, ref int sequencia) { return(new KhanPedidoServiceReference.ItemPedido { numped_int = (int)produtoNf.IdNf, seqped_int = 0, codempresa = this.configuracao.Empresa, seq = sequencia++, codpro = produto.CodInterno, codbar = string.Empty, qtdpro = produtoNf.Qtde, prunit = (float)produtoNf.ValorUnitario, vfrete = (float)produtoNf.ValorFrete, vdesc = (float)produtoNf.ValorDesconto, lote = string.Empty, PPIS = produtoNf.AliqPis, PCOFINS = produtoNf.AliqCofins, PIPI = produtoNf.AliqIpi, PICMS = produtoNf.AliqIcms, PICMSSUB = produtoNf.AliqIcmsSt, SITTRIB = "000", SITTRIB_IPI = string.Empty, SITTRIB_COFINS = string.Empty, SITTRIB_PIS = string.Empty, }); }
/// <summary> /// Recupera o proxy dos dados do produto. /// </summary> /// <param name="produto"></param> /// <returns></returns> private object GetProxy(Data.Model.Produto produto) { return(new { IdProd = produto.IdProd, IdSubgrupoProd = produto.IdSubgrupoProd, IdGrupoProd = produto.IdGrupoProd, IdCorVidro = produto.IdCorVidro, IdUnidadeMedida = produto.IdUnidadeMedida, CodInterno = produto.CodInterno, Situacao = produto.Situacao, Descricao = produto.Descricao, Espessura = produto.Espessura, Peso = produto.Peso, AreaMinima = produto.AreaMinima, AtivarAreaMinima = produto.AtivarAreaMinima, ItemGenerico = produto.ItemGenerico, Obs = produto.Obs, Altura = produto.Altura, Largura = produto.Largura, Redondo = produto.Redondo, IdProcesso = produto.IdProcesso, IdAplicacao = produto.IdAplicacao, IdProdOrig = produto.IdProdOrig, IdProdBase = produto.IdProdBase }); }
/// <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 }); }