Ir para conteúdo
Fórum Script Brasil
  • 0

PHP: Tentativa e erro


Frank K Hosaka

Pergunta

Nessa semana, eu consegui fazer o cálculo do Simples Nacional no meu notebook, mas eu não consegui fazer o valor do imposto ser igual ao que foi calculado pela Contabilidade, a diferença é de alguns centavos, mas eu posso usar o meu programa como uma estimativa.

O problema foi na hora de copiar o meu código PHP na Hostinger, lá o PHP reclamou que o comando scandir não encontrou o diretório que mandei procurar.

Levei um tempão para entender porque o scandir não funciona: o que funciona no notebook nem sempre vai funcionar na Hostinger.

Na base da tentativa e erro, fui procurar a solução no HTML, no <input type="file" multiple>, mas o máximo que eu consegui foi obter uma lista de 20 arquivos, quando precisava ver coisa da ordem de 700 arquivos. O Copilot explicou que o navegador e o servidor podem definir restrição para o <input type="file" multiple>, e o Copilot disse que eu preciso estudar mais, ir além do PHP e aprender como fazer a Hostinger ter acesso remoto ao meu notebook, e assim calcular o Simples Nacional na internet.

A minha primeira tentativa de calcular o Simples foi pelo comando zipArchive do PHP, e eu consegui fazer funcionar uma vez ou outra. O Windows sempre consegue abrir o arquivo .zip, já o comando zipArchive do PHP sempre reclamava que encontrou erro no arquivo, assim eu desisti dele.

Conclusão: eu não sei se é possível calcular o Simples Nacional na internet, mas eu consegui calcular aqui no notebook com o PHP. Mas para calcular o Simples aqui no notebook, eu preciso da venda dos doze últimos meses que está no MySQL que está hospedado lá na Hostinger. Isso é constrangedor, mas pelo menos eu posso chorar a vontade, isso é o que dá para fazer quando estou num beco sem saída.

bling.php (parcial)
<?php

class Bling {

static function simplesSelecionado() {
        $diretorio="C:/Users/Frank/Downloads/".substr($_FILES['pasta']['full_path'],0,-4);
        $contaArquivos = count(scandir($diretorio)) - 2 - 2 ;
        $notasFiscais = [];
        $nfCanceladas = [];
        $nfces = scandir($diretorio);
        $notasCanceladas=0;
        $somaTotal=0;
        $comST=0;
        $semST=0;
        foreach($nfces as $nfce) {
            if($nfce !== '.' && $nfce !=='..' ) {
                if(strpos($nfce,'-can') !== false) {
                    $nfCanceladas[] = intval(substr($nfce,28,6));
                    $notasCanceladas++;
                    continue;
                }
                $numeroNota=intval(substr($nfce,28,6));
                if(in_array($numeroNota,$nfCanceladas)) {
                    continue;
                }
                $notasFiscais[]=$numeroNota;
                $dom = new DOMDocument();
                $dom->load("$diretorio/$nfce");
                $nfe=$dom->documentElement;
                if($nfe->getElementsByTagName('vNF')->item(0)) {
                    $somaNF=$nfe->getElementsByTagName('vNF')->item(0)->nodeValue;
                    $somaTotal+=$somaNF;
                    $produtos=$nfe->getElementsByTagName('prod');
                    foreach($produtos as $p) {
                        $cfop=$p->getElementsByTagName('CFOP')->item(0)->nodeValue;
                        $vProd=$p->getElementsByTagName('vProd')->item(0)->nodeValue;
                        $vDesc=0;
                        if($p->getElementsByTagName('vDesc')->item(0)) {
                            $vDesc=$p->getElementsByTagName('vDesc')->item(0)->nodeValue;
                        }
                        if($cfop==5405) {
                            $comST += $vProd - $vDesc;
                        } else {
                            $semST += $vProd - $vDesc;
                        } 
                    }
                }
            }
        }
        sort($notasFiscais);
        $primeiraNota=intval($notasFiscais[0]);
        $ultimaNota=intval($notasFiscais[$contaArquivos-1]);
        $totalDeNotas=count($notasFiscais);
        $rendas=bd::x('select * from tbrendabruta order by id desc limit 13')->get();
        $renda=0;
        foreach($rendas as $key=>$r) {
            if($key>0) {
                $renda += $r->renda;
            }
        }
		// indices da primeira faixa da tabela do Simples Nacional 2025 no comércio
        $aliqICMS=1.36;
        $ICMS=round($semST*$aliqICMS/100,2);
        $aliqIRPJ=0.22;
        $IRPJ=round($somaTotal*$aliqIRPJ/100,2);
        $aliqCSLL=0.14;
        $CSLL=round($somaTotal*$aliqCSLL/100,2);
        $aliqCOFINS=0.5096;
        $COFINS=round($somaTotal*$aliqCOFINS/100,2);
        $aliqPIS=0.1105;
        $PIS=round($somaTotal*$aliqPIS/100,2);
        $aliqINSS=1.66;
        $INSS=intval($somaTotal*$aliqINSS)/100;
        $aliqSimples=4;
        $Simples=$ICMS+$IRPJ+$CSLL+$COFINS+$PIS+$INSS;
        view('blingSimples',['primeiraNota'=>$primeiraNota,'ultimaNota'=>$ultimaNota,
            'notasFiscais'=>$notasFiscais,'somaTotal'=>$somaTotal,
            'contaArquivos'=>$contaArquivos,'notasCanceladas'=>$notasCanceladas,
            'totalDeNotas'=>$totalDeNotas,'nfCanceladas'=>$nfCanceladas,
            'comST'=>$comST,'semST'=>$semST,'renda'=>$renda,
            'aliqICMS'=>$aliqICMS,'ICMS'=>$ICMS,
            'aliqIRPJ'=>$aliqIRPJ,'IRPJ'=>$IRPJ,
            'aliqCSLL'=>$aliqCSLL,'CSLL'=>$CSLL,
            'aliqCOFINS'=>$aliqCOFINS,'COFINS'=>$COFINS,
            'aliqPIS'=>$aliqPIS,'PIS'=>$PIS,
            'aliqINSS'=>$aliqINSS,'INSS'=>$INSS,
            'aliqSimples'=>$aliqSimples,'Simples'=>$Simples,
            'rendas'=>$rendas]);
    }
}

arquivo blingSimples.php (ele usa o CSS https://cdn.tailwindcss.com)
<?php include 'menuView.php'; ?>
<script>btMenu.innerHTML="Simples";document.title="Simples"</script>
<div class=flex>
    <div>Total de Notas</div>
    <div class="ml-2"><?=$totalDeNotas?></div>
</div>
<div class=flex>
    <div>Notas Canceladas</div>
    <div class="ml-2 text-right mr-2"><?=$notasCanceladas.": ";?></div>
    <?php foreach($nfCanceladas as $n): echo $n."<br>"; endforeach; ?>
</div>
<div class=flex>
    <div>Total das Notas Fiscais</div>
    <div class="text-right ml-2"><?=dec($somaTotal)?></div>
</div>
<div class=flex>
    <div>Primeira Nota</div>
    <div class="text-right ml-2"><?=$primeiraNota?></div>
</div>
<div class=flex>
    <div>Última Nota</div>
    <div class="text-right ml-5"><?=$ultimaNota?></div>
</div>
<div class=flex>
    <div class="w-[120px]">Renda 12 Meses</div>
    <div class="w-[100px] text-right"><?=dec($renda)?></div>
</div>
<div class="flex">
<?php 
    $contador = 0; 
    foreach($rendas as $key=>$r):
        if($key>0):
            if ($contador % 4 === 0 && $contador !== 0): ?>
                </div><div class="flex">
            <?php endif; ?>    
            <div class="w-[50px]"><?php echo $r->apuracao; ?></div>
            <div class="w-[80px] text-right font-semibold mr-2"><?php echo dec($r->renda); ?></div>   
        <?php 
        $contador++;
        endif; 
    endforeach; ?>
</div>
<div class=flex>
    <div class="w-[120px]">Com ST</div>
    <div class="w-[100px] text-right"><?=dec($comST)?></div>
</div>
<div class=flex>
    <div class="w-[120px]">Sem ST ICMS</div>
    <div class="w-[100px] text-right"><?=dec($semST)?></div>
    <div class="w-[100px] text-right"><?=dec($aliqICMS)."%"?></div>
    <div class="w-[100px] text-right"><?=dec($ICMS)?></div>
</div>
<div class=flex>
    <div class="w-[120px]">IRPJ</div>
    <div class="w-[100px] text-right"><?=dec($somaTotal)?></div>
    <div class="w-[100px] text-right"><?=dec($aliqIRPJ)."%"?></div>
    <div class="w-[100px] text-right"><?=dec($IRPJ)?></div>
</div>
<div class=flex>
    <div class="w-[120px]">CSLL</div>
    <div class="w-[100px] text-right"><?=dec($somaTotal)?></div>
    <div class="w-[100px] text-right"><?=dec($aliqCSLL)."%"?></div>
    <div class="w-[100px] text-right"><?=dec($CSLL)?></div>
</div>
<div class=flex>
    <div class="w-[120px]">COFINS</div>
    <div class="w-[100px] text-right"><?=dec($somaTotal)?></div>
    <div class="w-[100px] text-right"><?=dec($aliqCOFINS)."%"?></div>
    <div class="w-[100px] text-right"><?=dec($COFINS)?></div>
</div>
<div class=flex>
    <div class="w-[120px]">PIS</div>
    <div class="w-[100px] text-right"><?=dec($somaTotal)?></div>
    <div class="w-[100px] text-right"><?=dec($aliqPIS)."%"?></div>
    <div class="w-[100px] text-right"><?=dec($PIS)?></div>
</div>

<div class=flex>
    <div class="w-[120px]">INSS</div>
    <div class="w-[100px] text-right"><?=dec($somaTotal)?></div>
    <div class="w-[100px] text-right"><?=dec($aliqINSS)."%"?></div>
    <div class="w-[100px] text-right"><?=dec($INSS)?></div>
</div>
<div class=flex>
    <div class="w-[120px]">Simples</div>
    <div class="w-[100px] text-right">Estimativa</div>
    <div class="w-[100px] text-right"><?=dec($aliqSimples)."%"?></div>
    <div class="w-[100px] text-right font-semibold"><?=dec($Simples)?></div>
</div>

 

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,4k
    • Posts
      652,2k
×
×
  • Criar Novo...