Example #1
0
        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;
            }
        }