Exemple #1
0
        public bool importarNFe()
        {
            try
            {
                string FORMATO_DATA = "yyyy-MM-dd";

                OpenFileDialog dialog = new OpenFileDialog();
                dialog.Filter           = "Arquivos Processados NF-e (*-procNFe.xml) | *-procNFe.xml";
                dialog.Title            = "Selecione a NF-e";
                dialog.InitialDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                dialog.Multiselect      = false;

                if (dialog.ShowDialog() != true)
                {
                    return(false);
                }
                string path = dialog.FileName;

                XmlSerializer serializer = new XmlSerializer(typeof(TNfeProc));
                StreamReader  reader     = new StreamReader(path);

                TNfeProc nfeProc = (TNfeProc)serializer.Deserialize(reader);

                nfeSelected              = new NFeCabecalhoDTO();
                nfeSelected.emitente     = new NFeEmitenteDTO();
                nfeSelected.listaDetalhe = new List <NFeDetalheDTO>();

                nfeSelected.tipoOperacao            = "0";
                nfeSelected.codigoNumerico          = nfeProc.NFe.infNFe.ide.cNF;
                nfeSelected.naturezaOperacao        = nfeProc.NFe.infNFe.ide.natOp;
                nfeSelected.indicadorFormaPagamento = ((int)nfeProc.NFe.infNFe.ide.indPag).ToString();
                nfeSelected.codigoModelo            = nfeProc.NFe.infNFe.ide.mod.ToString().Replace("Item", "");
                nfeSelected.serie                 = nfeProc.NFe.infNFe.ide.serie;
                nfeSelected.numero                = nfeProc.NFe.infNFe.ide.nNF;
                nfeSelected.dataEmissao           = DateTime.ParseExact(nfeProc.NFe.infNFe.ide.dEmi, FORMATO_DATA, CultureInfo.InvariantCulture);
                nfeSelected.dataEntradaSaida      = DateTime.ParseExact(nfeProc.NFe.infNFe.ide.dSaiEnt, FORMATO_DATA, CultureInfo.InvariantCulture);
                nfeSelected.horaEntradaSaida      = nfeProc.NFe.infNFe.ide.hSaiEnt;
                nfeSelected.tipoEmissao           = nfeProc.NFe.infNFe.ide.tpEmis.ToString().Last().ToString();
                nfeSelected.versaoProcessoEmissao = nfeProc.NFe.infNFe.ide.verProc;
                nfeSelected.finalidadeEmissao     = nfeProc.NFe.infNFe.ide.finNFe.ToString().Last().ToString();
                nfeSelected.digitoChaveAcesso     = nfeProc.NFe.infNFe.ide.cDV;
                nfeSelected.chaveAcesso           = nfeProc.protNFe.infProt.chNFe;
                nfeSelected.formatoImpressaoDanfe = nfeProc.NFe.infNFe.ide.tpImp.ToString().Replace("Item", "");
                nfeSelected.ambiente              = nfeProc.NFe.infNFe.ide.tpAmb.ToString().Replace("Item", "");

                /*Emitente*/
                nfeSelected.emitente.logradouro      = nfeProc.NFe.infNFe.emit.enderEmit.xLgr;
                nfeSelected.emitente.numero          = nfeProc.NFe.infNFe.emit.enderEmit.nro;
                nfeSelected.emitente.complemento     = nfeProc.NFe.infNFe.emit.enderEmit.xCpl;
                nfeSelected.emitente.bairro          = nfeProc.NFe.infNFe.emit.enderEmit.xBairro;
                nfeSelected.emitente.codigoMunicipio = int.Parse(nfeProc.NFe.infNFe.emit.enderEmit.cMun);
                nfeSelected.emitente.nomeMunicipio   = nfeProc.NFe.infNFe.emit.enderEmit.xMun;
                nfeSelected.emitente.uf                  = nfeProc.NFe.infNFe.emit.enderEmit.UF.ToString();
                nfeSelected.emitente.cep                 = nfeProc.NFe.infNFe.emit.enderEmit.CEP;
                nfeSelected.emitente.codigoPais          = 55;
                nfeSelected.emitente.nomePais            = "Brasil";
                nfeSelected.emitente.telefone            = nfeProc.NFe.infNFe.emit.enderEmit.fone;
                nfeSelected.emitente.crt                 = nfeProc.NFe.infNFe.emit.CRT.ToString().Replace("Item", "");
                nfeSelected.emitente.inscricaoEstadual   = nfeProc.NFe.infNFe.emit.IE;
                nfeSelected.emitente.inscricaoEstadualSt = nfeProc.NFe.infNFe.emit.IEST;
                nfeSelected.emitente.razaoSocial         = nfeProc.NFe.infNFe.emit.xNome;
                nfeSelected.emitente.fantasia            = nfeProc.NFe.infNFe.emit.xFant;
                nfeSelected.emitente.cpfCnpj             = nfeProc.NFe.infNFe.emit.Item;

                nfeSelected.informacoesAddFisco        = nfeProc.NFe.infNFe.infAdic.infAdFisco;
                nfeSelected.informacoesAddContribuinte = nfeProc.NFe.infNFe.infAdic.infCpl;

                using (ServicoEstoqueClient serv = new ServicoEstoqueClient())
                {
                    foreach (TNFeInfNFeDet detalhe in nfeProc.NFe.infNFe.det)
                    {
                        NFeDetalheDTO nfeDet = new NFeDetalheDTO();
                        nfeDet.gtin                   = detalhe.prod.cEAN;
                        nfeDet.nomeProduto            = detalhe.prod.xProd;
                        nfeDet.valorTotal             = decimal.Parse(detalhe.prod.vProd);
                        nfeDet.valorUnitarioComercial = decimal.Parse(detalhe.prod.vUnCom);
                        nfeDet.quantidadeComercial    = decimal.Parse(detalhe.prod.qCom);

                        nfeSelected.listaDetalhe.Add(nfeDet);

                        List <ProdutoDTO> listaProd = serv.selectProduto(new ProdutoDTO {
                            gtin = nfeDet.gtin
                        });

                        if (listaProd != null && listaProd.Count > 0)
                        {
                            nfeDet.idProduto = listaProd.First().id;
                        }
                        else
                        {
                            throw new Exception("Produto não localizado, efetue o cadastramento: " + nfeDet.gtin + " - " + nfeDet.nomeProduto);
                        }
                    }
                }

                nfeSelected.baseCalculoIcms         = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vBC);
                nfeSelected.valorIcms               = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vICMS);
                nfeSelected.baseCalculoIcmsSt       = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vBCST);
                nfeSelected.valorIcmsSt             = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vST);
                nfeSelected.valorCofins             = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vCOFINS);
                nfeSelected.valorTotalProdutos      = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vProd);
                nfeSelected.valorFrete              = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vFrete);
                nfeSelected.valorSeguro             = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vSeg);
                nfeSelected.valorDespesasAcessorias = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vOutro);
                nfeSelected.valorPis      = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vPIS);
                nfeSelected.valorDesconto = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vDesc);
                nfeSelected.valorTotal    = decimal.Parse(nfeProc.NFe.infNFe.total.ICMSTot.vNF);

                contentPresenterTabDados.Content = new NFeDados();
                isSelectedTabDados = true;
                notifyPropertyChanged("isSelectedTabDados");

                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }