public void incluirProduto(decimal quantidade) { // Cálculos serão apurados no segundo ciclo após novo levantamento de requisitos da Tributação try { if (produtoSelected == null) { throw new Exception("Selecione o produto."); } if (nfeSelected.listaDetalhe == null) { nfeSelected.listaDetalhe = new List <NFeDetalheDTO>(); } detalheNFe.idProduto = produtoSelected.id; detalheNFe.codigoProduto = produtoSelected.gtin; detalheNFe.gtin = produtoSelected.gtin; detalheNFe.valorBrutoProduto = quantidade * produtoSelected.valorVenda; detalheNFe.gtinUnidadeTributavel = produtoSelected.gtin; detalheNFe.quantidadeTributavel = quantidade; detalheNFe.valorUnitarioTributavel = produtoSelected.valorVenda; detalheNFe.nomeProduto = produtoSelected.nome; detalheNFe.quantidadeComercial = quantidade; detalheNFe.valorUnitarioComercial = produtoSelected.valorVenda; detalheNFe.valorSubtotal = quantidade * produtoSelected.valorVenda; detalheNFe.valorTotal = quantidade * produtoSelected.valorVenda; detalheNFe.ncm = produtoSelected.ncm; detalheNFe.unidadeComercial = produtoSelected.UnidadeProduto.Sigla; detalheNFe.unidadeTributavel = produtoSelected.UnidadeProduto.Sigla; // ICMS ViewTributacaoIcmsDTO viewIcms = new ViewTributacaoIcmsDTO(); using (ServicoEstoqueClient serv = new ServicoEstoqueClient()) { viewIcms.IdTributOperacaoFiscal = nfeSelected.TributOperacaoFiscal.Id; viewIcms.IdTributGrupoTributario = produtoSelected.TributGrupoTributario.Id; viewIcms.UfDestino = nfeSelected.destinatario.uf; viewIcms = serv.selectViewTributacaoIcms(viewIcms); if (viewIcms == null) { throw new Exception("Não existe tributação definida para o para o produto selecionado."); } } detalheNFe.cfop = viewIcms.Cfop; detalheNFe.impostoIcms = new NfeDetalheImpostoIcmsDTO(); detalheNFe.impostoIcms.OrigemMercadoria = viewIcms.OrigemMercadoria; detalheNFe.impostoIcms.CstIcms = viewIcms.CstB; detalheNFe.impostoIcms.Csosn = viewIcms.CsosnB; detalheNFe.impostoIcms.ModalidadeBcIcms = viewIcms.ModalidadeBc; detalheNFe.impostoIcms.TaxaReducaoBcIcms = viewIcms.PorcentoBc; detalheNFe.impostoIcms.AliquotaIcms = viewIcms.Aliquota; detalheNFe.impostoIcms.ModalidadeBcIcmsSt = viewIcms.ModalidadeBcSt; detalheNFe.impostoIcms.PercentualMvaIcmsSt = viewIcms.Mva; detalheNFe.impostoIcms.PercentualReducaoBcIcmsSt = viewIcms.PorcentoBcSt; detalheNFe.impostoIcms.AliquotaIcmsSt = viewIcms.AliquotaIcmsSt; detalheNFe.impostoIcms.BaseCalculoIcms = produtoSelected.valorVenda; detalheNFe.impostoIcms.ValorIcms = (produtoSelected.valorVenda * viewIcms.Aliquota) / 100; ViewTributacaoPisDTO viewPis = new ViewTributacaoPisDTO(); using (ServicoEstoqueClient serv = new ServicoEstoqueClient()) { viewPis.IdTributOperacaoFiscal = nfeSelected.TributOperacaoFiscal.Id; viewPis.IdTributGrupoTributario = produtoSelected.TributGrupoTributario.Id; viewPis = serv.selectViewTributacaoPis(viewPis); detalheNFe.impostoPis = new NfeDetalheImpostoPisDTO(); detalheNFe.impostoPis.CstPis = viewPis.CstPis; detalheNFe.impostoPis.AliquotaPisPercentual = viewPis.AliquotaPorcento; detalheNFe.impostoPis.AliquotaPisReais = viewPis.AliquotaUnidade; detalheNFe.impostoPis.ValorBaseCalculoPis = produtoSelected.valorVenda; detalheNFe.impostoPis.ValorPis = (produtoSelected.valorVenda * viewPis.AliquotaPorcento) / 100;; } ViewTributacaoCofinsDTO viewCofins = new ViewTributacaoCofinsDTO(); using (ServicoEstoqueClient serv = new ServicoEstoqueClient()) { viewCofins.IdTributOperacaoFiscal = nfeSelected.TributOperacaoFiscal.Id; viewCofins.IdTributGrupoTributario = produtoSelected.TributGrupoTributario.Id; viewCofins = serv.selectViewTributacaoCofins(viewCofins); detalheNFe.impostoCofins = new NfeDetalheImpostoCofinsDTO(); detalheNFe.impostoCofins.CstCofins = viewCofins.CstCofins; detalheNFe.impostoCofins.AliquotaCofinsPercentual = viewCofins.AliquotaPorcento; detalheNFe.impostoCofins.AliquotaCofinsReais = viewCofins.AliquotaUnidade; detalheNFe.impostoCofins.BaseCalculoCofins = produtoSelected.valorVenda; detalheNFe.impostoCofins.ValorCofins = (produtoSelected.valorVenda * viewCofins.AliquotaPorcento) / 100;; } nfeSelected.listaDetalhe.Add(detalheNFe); atualizarNumeroItemDetalhe(); atualizarValoresNFe(); produtoSelected = null; detalheNFe = null; notifyPropertyChanged("produtoSelected"); notifyPropertyChanged("detalheNFe"); } catch (Exception ex) { throw ex; } }