From 1486d6c21b890eef96d142a05eb42e7ee4a0bf0b Mon Sep 17 00:00:00 2001 From: rries Date: Tue, 28 May 2024 20:56:44 -0300 Subject: [PATCH] IPI e Cofins Ajustes --- index.html | 8 +-- script.js | 166 +++++++++++++++++++++++++++++++++-------------------- styles.css | 46 +++++++-------- 3 files changed, 132 insertions(+), 88 deletions(-) diff --git a/index.html b/index.html index 22feb60..fc9461a 100644 --- a/index.html +++ b/index.html @@ -21,10 +21,10 @@

ExtratorNFE

Selecione uma nota fiscal

OBS: A nota tem que estar em arquivo XML
-
+
Arraste e solte o arquivo aqui ou clique para selecionar
- +

Nenhuma informação
até o momento

@@ -35,8 +35,8 @@

Nenhuma informação
até o momento

- - + +

diff --git a/script.js b/script.js index be9fab3..0d30c05 100644 --- a/script.js +++ b/script.js @@ -35,6 +35,36 @@ socialButton.addEventListener('click', function() { document.querySelector('.social').click(); }); +// Eventos de arrastar e soltar +dropZone.addEventListener('dragover', (event) => { + event.preventDefault(); + event.stopPropagation(); + dropZone.classList.add('dragover'); +}); + +dropZone.addEventListener('dragleave', (event) => { + event.preventDefault(); + event.stopPropagation(); + dropZone.classList.remove('dragover'); +}); + +dropZone.addEventListener('drop', (event) => { + event.preventDefault(); + event.stopPropagation(); + dropZone.classList.remove('dragover'); + + const files = event.dataTransfer.files; + if (files.length) { + processFile(files[0]); + } +}); + +dropZone.addEventListener('click', (event) => { + if (event.target !== input) { + input.click(); + } +}); + document.getElementById('infoEmitenteButton').addEventListener('click', function() { mostrarInformacao('infoEmitenteButton'); }); @@ -59,36 +89,16 @@ document.getElementById('infoIcmsStProdsButton').addEventListener('click', funct mostrarInformacao('infoIcmsStProdsButton'); }); - -// Eventos de arrastar e soltar -dropZone.addEventListener('dragover', (event) => { - event.preventDefault(); - event.stopPropagation(); - dropZone.classList.add('dragover'); +document.getElementById('infoPisButton').addEventListener('click', function() { + mostrarInformacao('infoPisButton'); }); -dropZone.addEventListener('dragleave', (event) => { - event.preventDefault(); - event.stopPropagation(); - dropZone.classList.remove('dragover'); +document.getElementById('infoCofinsButton').addEventListener('click', function() { + mostrarInformacao('infoCofinsButton'); }); -dropZone.addEventListener('drop', (event) => { - event.preventDefault(); - event.stopPropagation(); - dropZone.classList.remove('dragover'); - const files = event.dataTransfer.files; - if (files.length) { - processFile(files[0]); - } -}); -dropZone.addEventListener('click', (event) => { - if (event.target !== input) { - input.click(); - } -}); function processFile(file) { mudarVisibilidade(divBotoes); @@ -158,33 +168,33 @@ function mostrarInformacao(id) { const tableAux = document.querySelector('.infoTable'); switch (id) { case "infoEmitenteButton": - auxiliarTable = ` + auxiliarTable = `
EmitenteInformações
Nome / Razão Social:${emitenteInfo.nome}
CNPJ:${emitenteInfo.cnpj}
Endereço: ${emitenteInfo.bairro}, ${emitenteInfo.logradouro}, N° ${emitenteInfo.numero}
`; i++; break; - + case "infoDestinatarioButton": - auxiliarTable = ` + auxiliarTable = `
DestinatárioInformações
Nome / Razão Social:${destinatarioInfo.nome}
CNPJ / CPF:${destinatarioInfo.cnpj}
Endereço:${destinatarioInfo.bairro}, ${destinatarioInfo.logradouro}, ${destinatarioInfo.numero}
`; i++; break; - + case "infoProdsButton": if (produtos && produtos.length > 0) { auxiliarTable = ''; for (i = 0; i < produtos.length; i++) { - auxiliarTable += ``; + auxiliarTable += ``; } auxiliarTable += '
ProdutoNCMEMBQntVlr Unt.Valor Total
${produtos[i].cProd}${produtos[i].xProd}${produtos[i].NCM}${produtos[i].uCom}${produtos[i].qCom}${produtos[i].vUnCom}${produtos[i].vProd}
${i+1}${produtos[i].xProd}${produtos[i].NCM}${produtos[i].uCom}${produtos[i].qCom}${produtos[i].vUnCom}${produtos[i].vProd}
'; } else { auxiliar = 'Não há produtos disponíveis.'; } break; - + case "InfoIpiProdsButton": if (produtos && produtos.length > 0) { auxiliarTable = ''; @@ -192,7 +202,7 @@ function mostrarInformacao(id) { if (produtos[i].impostos && produtos[i].impostos.IPI) { const ipiData = produtos[i].impostos.IPI; if (ipiData.vIPI != null) { - auxiliarTable += ``; + auxiliarTable += ``; } } } @@ -201,7 +211,7 @@ function mostrarInformacao(id) { auxiliar = 'Não há produtos disponíveis.'; } break; - + case "infoIcmsProdsButton": if (produtos && produtos.length > 0) { auxiliarTable = '
ProdutoBase IPIAlíquota IPIValor IPI
${produtos[i].cProd}${produtos[i].xProd}${ipiData.vBC}${ipiData.pIPI}${ipiData.vIPI}
${i+1}${produtos[i].xProd}${ipiData.vBC}${ipiData.pIPI}${ipiData.vIPI}
'; @@ -209,7 +219,7 @@ function mostrarInformacao(id) { if (produtos[i].impostos && produtos[i].impostos.ICMS) { const icmsData = produtos[i].impostos.ICMS; if (icmsData.vICMS != null) { - auxiliarTable += ``; + auxiliarTable += ``; } } } @@ -218,14 +228,14 @@ function mostrarInformacao(id) { auxiliar = 'Não há produtos disponíveis.'; } break; - + case "infoIcmsStProdsButton": if (produtos && produtos.length > 0) { auxiliarTable = '
ProdutoBase ICMSAlíquota ICMSValor ICMS
${produtos[i].cProd}${produtos[i].xProd}${icmsData.vBC}${icmsData.pICMS}${icmsData.vICMS}
${i+1}${produtos[i].xProd}${icmsData.vBC}${icmsData.pICMS}${icmsData.vICMS}
'; for (i = 0; i < produtos.length; i++) { if (produtos[i].impostos && produtos[i].impostos.ICMS && produtos[i].impostos.ICMS.vICMSST != null) { const icmsSTData = produtos[i].impostos.ICMS; - auxiliarTable += ``; + auxiliarTable += ``; } } auxiliarTable += '
ProdutoBase ICMS ST% ICMS STValor ICMS ST
${produtos[i].nItem}${produtos[i].xProd}${icmsSTData.vBCST}${icmsSTData.pICMSST}${icmsSTData.vICMSST}
${i+1}${produtos[i].xProd}${icmsSTData.vBCST}${icmsSTData.pICMSST}${icmsSTData.vICMSST}
'; @@ -233,7 +243,41 @@ function mostrarInformacao(id) { auxiliar = 'Não há produtos disponíveis.'; } break; - } + + case "infoPisButton": + if (produtos && produtos.length > 0) { + auxiliarTable = ''; + for (i = 0; i < produtos.length; i++) { + if (produtos[i].impostos && produtos[i].impostos.PIS) { + const pisData = produtos[i].impostos.PIS; + if (pisData.vPIS != null) { + auxiliarTable += ``; + } + } + } + auxiliarTable += '
ProdutoBase PISAlíquota PISValor PIS
${i+1}${produtos[i].xProd}${pisData.vBC}${pisData.pPIS}${pisData.vPIS}
'; + } else { + auxiliar = 'Não há produtos disponíveis.'; + } + break; + + case "infoCofinsButton": + if (produtos && produtos.length > 0) { + auxiliarTable = ''; + for (i = 0; i < produtos.length; i++) { + if (produtos[i].impostos && produtos[i].impostos.COFINS) { + const cofinsData = produtos[i].impostos.COFINS; + if (cofinsData.vCOFINS != null) { + auxiliarTable += ``; + } + } + } + auxiliarTable += '
ProdutoBase COFINSAlíquota COFINSValor COFINS
${i+1}${produtos[i].xProd}${cofinsData.vBC}${cofinsData.pCOFINS}${cofinsData.vCOFINS}
'; + } else { + auxiliar = 'Não há produtos disponíveis.'; + } + break; + } if (auxiliar.length > 0) { mudarVisibilidade(infoArea); @@ -333,13 +377,13 @@ function extrairProdutos(xmlDoc, namespace) { const NCM = prodElement.getElementsByTagNameNS(namespace, 'NCM')[0]?.textContent || 'Não encontrado'; const CFOP = prodElement.getElementsByTagNameNS(namespace, 'CFOP')[0]?.textContent || 'Não encontrado'; const uCom = prodElement.getElementsByTagNameNS(namespace, 'uCom')[0]?.textContent || 'Não encontrado'; - const qCom = prodElement.getElementsByTagNameNS(namespace, 'qCom')[0]?.textContent || 'Não encontrado'; - const vUnCom = prodElement.getElementsByTagNameNS(namespace, 'vUnCom')[0]?.textContent || 'Não encontrado'; - const vProd = prodElement.getElementsByTagNameNS(namespace, 'vProd')[0]?.textContent || 'Não encontrado'; + const qCom = parseFloat(prodElement.getElementsByTagNameNS(namespace, 'qCom')[0]?.textContent.replace(',', '.') || '0').toFixed(2).replace('.', ','); + const vUnCom = parseFloat(prodElement.getElementsByTagNameNS(namespace, 'vUnCom')[0]?.textContent.replace(',', '.') || '0').toFixed(2).replace('.', ','); + const vProd = parseFloat(prodElement.getElementsByTagNameNS(namespace, 'vProd')[0]?.textContent.replace(',', '.') || '0').toFixed(2).replace('.', ','); const cEANTrib = prodElement.getElementsByTagNameNS(namespace, 'cEANTrib')[0]?.textContent || 'Não encontrado'; const uTrib = prodElement.getElementsByTagNameNS(namespace, 'uTrib')[0]?.textContent || 'Não encontrado'; - const qTrib = prodElement.getElementsByTagNameNS(namespace, 'qTrib')[0]?.textContent || 'Não encontrado'; - const vUnTrib = prodElement.getElementsByTagNameNS(namespace, 'vUnTrib')[0]?.textContent || 'Não encontrado'; + const qTrib = parseFloat(prodElement.getElementsByTagNameNS(namespace, 'qTrib')[0]?.textContent.replace(',', '.') || '0').toFixed(2).replace('.', ','); + const vUnTrib = parseFloat(prodElement.getElementsByTagNameNS(namespace, 'vUnTrib')[0]?.textContent.replace(',', '.') || '0').toFixed(2).replace('.', ','); const indTot = prodElement.getElementsByTagNameNS(namespace, 'indTot')[0]?.textContent || 'Não encontrado'; // Extrair dados de impostos @@ -398,16 +442,16 @@ function extractICMSData(ICMS) { orig: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'orig')[0]?.textContent ?? 'Não disponível', CST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'CST')[0]?.textContent ?? 'Não disponível', modBC: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'modBC')[0]?.textContent ?? null, - vBC: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vBC')[0]?.textContent ?? null, - pICMS: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pICMS')[0]?.textContent ?? null, - vICMS: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vICMS')[0]?.textContent ?? null, - vBCST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vBCST')[0]?.textContent ?? null, - pICMSST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pICMSST')[0]?.textContent ?? null, - vICMSST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vICMSST')[0]?.textContent ?? null, - vFCP: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vFCP')[0]?.textContent ?? null, - vFCPST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vFCPST')[0]?.textContent ?? null, - pFCP: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pFCP')[0]?.textContent ?? null, - pFCPST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pFCPST')[0]?.textContent ?? null + vBC: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vBC')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vBC')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + pICMS: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pICMS')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pICMS')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + vICMS: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vICMS')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vICMS')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + vBCST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vBCST')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vBCST')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + pICMSST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pICMSST')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pICMSST')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + vICMSST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vICMSST')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vICMSST')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + vFCP: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vFCP')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vFCP')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + vFCPST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vFCPST')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'vFCPST')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + pFCP: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pFCP')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pFCP')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + pFCPST: icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pFCPST')[0]?.textContent != null ? parseFloat(icmsNode.getElementsByTagNameNS(ICMS.namespaceURI, 'pFCPST')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null }; } @@ -415,9 +459,9 @@ function extractIPIData(IPI) { const ipiTrib = IPI.getElementsByTagNameNS(IPI.namespaceURI, 'IPITrib')[0]; return { cEnq: IPI.getElementsByTagNameNS(IPI.namespaceURI, 'cEnq')[0]?.textContent ?? 'Não disponível', - vBC: ipiTrib?.getElementsByTagNameNS(IPI.namespaceURI, 'vBC')[0]?.textContent ?? null, - pIPI: ipiTrib?.getElementsByTagNameNS(IPI.namespaceURI, 'pIPI')[0]?.textContent ?? null, - vIPI: ipiTrib?.getElementsByTagNameNS(IPI.namespaceURI, 'vIPI')[0]?.textContent ?? null + vBC: ipiTrib?.getElementsByTagNameNS(IPI.namespaceURI, 'vBC')[0]?.textContent != null ? parseFloat(ipiTrib.getElementsByTagNameNS(IPI.namespaceURI, 'vBC')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + pIPI: ipiTrib?.getElementsByTagNameNS(IPI.namespaceURI, 'pIPI')[0]?.textContent != null ? parseFloat(ipiTrib.getElementsByTagNameNS(IPI.namespaceURI, 'pIPI')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + vIPI: ipiTrib?.getElementsByTagNameNS(IPI.namespaceURI, 'vIPI')[0]?.textContent != null ? parseFloat(ipiTrib.getElementsByTagNameNS(IPI.namespaceURI, 'vIPI')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null }; } @@ -425,9 +469,9 @@ function extractPISData(PIS) { const pisAliq = PIS.getElementsByTagNameNS(PIS.namespaceURI, 'PISAliq')[0]; return { CST: pisAliq?.getElementsByTagNameNS(PIS.namespaceURI, 'CST')[0]?.textContent ?? 'Não disponível', - vBC: pisAliq?.getElementsByTagNameNS(PIS.namespaceURI, 'vBC')[0]?.textContent ?? null, - pPIS: pisAliq?.getElementsByTagNameNS(PIS.namespaceURI, 'pPIS')[0]?.textContent ?? null, - vPIS: pisAliq?.getElementsByTagNameNS(PIS.namespaceURI, 'vPIS')[0]?.textContent ?? null + vBC: pisAliq?.getElementsByTagNameNS(PIS.namespaceURI, 'vBC')[0]?.textContent != null ? parseFloat(pisAliq.getElementsByTagNameNS(PIS.namespaceURI, 'vBC')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + pPIS: pisAliq?.getElementsByTagNameNS(PIS.namespaceURI, 'pPIS')[0]?.textContent != null ? parseFloat(pisAliq.getElementsByTagNameNS(PIS.namespaceURI, 'pPIS')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + vPIS: pisAliq?.getElementsByTagNameNS(PIS.namespaceURI, 'vPIS')[0]?.textContent != null ? parseFloat(pisAliq.getElementsByTagNameNS(PIS.namespaceURI, 'vPIS')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null }; } @@ -435,8 +479,8 @@ function extractCOFNSData(COFINS) { const cofinsAliq = COFINS.getElementsByTagNameNS(COFINS.namespaceURI, 'COFINSAliq')[0]; return { CST: cofinsAliq?.getElementsByTagNameNS(COFINS.namespaceURI, 'CST')[0]?.textContent ?? 'Não disponível', - vBC: cofinsAliq?.getElementsByTagNameNS(COFINS.namespaceURI, 'vBC')[0]?.textContent ?? null, - pCOFINS: cofinsAliq?.getElementsByTagNameNS(COFINS.namespaceURI, 'pCOFINS')[0]?.textContent ?? null, - vCOFINS: cofinsAliq?.getElementsByTagNameNS(COFINS.namespaceURI, 'vCOFINS')[0]?.textContent ?? null + vBC: cofinsAliq?.getElementsByTagNameNS(COFINS.namespaceURI, 'vBC')[0]?.textContent != null ? parseFloat(cofinsAliq.getElementsByTagNameNS(COFINS.namespaceURI, 'vBC')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + pCOFINS: cofinsAliq?.getElementsByTagNameNS(COFINS.namespaceURI, 'pCOFINS')[0]?.textContent != null ? parseFloat(cofinsAliq.getElementsByTagNameNS(COFINS.namespaceURI, 'pCOFINS')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null, + vCOFINS: cofinsAliq?.getElementsByTagNameNS(COFINS.namespaceURI, 'vCOFINS')[0]?.textContent != null ? parseFloat(cofinsAliq.getElementsByTagNameNS(COFINS.namespaceURI, 'vCOFINS')[0]?.textContent.replace(',', '.')).toFixed(2).replace('.', ',') : null }; -} +} \ No newline at end of file diff --git a/styles.css b/styles.css index 4b04e59..6dc00cd 100644 --- a/styles.css +++ b/styles.css @@ -7,8 +7,10 @@ body { } img { + cursor: pointer; margin: 10px; padding: 5px; + width: -moz-fit-content; width: fit-content; background-color: rgba(255, 255, 255, 0.74); border-radius: 8px; @@ -18,6 +20,7 @@ img { } .dropZone { + cursor: pointer; font-size: larger; border: 2px dashed #666666; border-radius: 10px; @@ -25,32 +28,30 @@ img { text-align: center; margin: 20px 0; transition: all 0.5s; - user-select: none; - } - .dropZone.dragover { + cursor: auto; border-color: #000; - scale: 1.1; + transform: scale(1.1); background-color: #ffffff90; } - img:hover { transform: scale(1.1); } -.socialIMG{ +.socialIMG { position: absolute; top: 8px; right: 16px; font-size: 18px; } - .fileSelectContainer, -.infoNfeContainer,.InfoHeadContainer{ +.infoNfeContainer, +.InfoHeadContainer { + height: auto; padding: 10px; max-width: 600px; background-color: rgba(255, 255, 255, 0.74); @@ -63,12 +64,12 @@ img:hover { transition: all 1s; } - -.InfoHeadContainer{ +.InfoHeadContainer { margin: 50px auto; + min-height: 50px; } -.bodyContainer{ +.bodyContainer { align-items: center; display: flex; margin: 50px auto; @@ -77,7 +78,8 @@ img:hover { resize: both; } -.infoNfeContainer{ +.infoNfeContainer { + width: -moz-fit-content; width: fit-content; } @@ -87,7 +89,6 @@ img:hover { .infoText { width: 300px; - min-height: auto; font-size: large; text-align: left; border: none; @@ -121,23 +122,22 @@ button:hover { border-color: #000; } - .infoTable { - margin: 0 auto; /* Define as margens laterais automáticas para centralizar a tabela */ - width: auto; /* Define a largura da tabela */ - border-collapse: collapse; /* Mescla as bordas das células da tabela */ + margin: 0 auto; + width: auto; + border-collapse: collapse; height: auto; } .infoTable th, .infoTable td { - border: 1px solid #000000; /* Adiciona bordas às células da tabela */ - padding: 6px; /* Adiciona espaçamento interno às células */ - text-align: center; /* Alinha o texto à esquerda dentro das células */ + border: 1px solid #000000; + padding: 6px; + text-align: center; justify-content: center; } .infoTable th { - background-color: #f2f2f2; /* Define a cor de fundo das células do cabeçalho */ - color: #333; /* Define a cor do texto do cabeçalho */ -} \ No newline at end of file + background-color: #f2f2f2; + color: #333; +}