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

PHP: continue


Frank K Hosaka

Pergunta

Comecei a estudar o cálculo do Simples Nacional, começando com um arquivo zipado da Bling, onde tem um monte de NFCE.

O problema é a nota cancelada. A nota comum tem o formato 35...123-nfe.xml, já a nota cancelada tem o formato 35...123-can.xml. 

No Windows Explorer, o arquivo -can aparece antes do -nfe.

Usei o famoso método da tentativa e erro e presumi que o comando PHP scandir($diretorio) seguisse o mesmo formato do Windows Explorer.

O problema é como desconsiderar o arquivo -can e o arquivo -nfe correspondente.

E assim o Copilot me ensinou a usar um novo comando do PHP, o continue. Eu achei esse comando muito esperto, digno de receber uma nota aqui no fórum, o comando continue simplesmente faz o ciclo foreach pular para o item seguinte:

<?php

class Bling {

function faltanteSelecionado() {
        $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);
        view('blingFaltante',['primeiraNota'=>$primeiraNota,'ultimaNota'=>$ultimaNota,
            'notasFiscais'=>$notasFiscais,'somaTotal'=>$somaTotal,
            'contaArquivos'=>$contaArquivos,'notasCanceladas'=>$notasCanceladas,
            'totalDeNotas'=>$totalDeNotas,'nfCanceladas'=>$nfCanceladas,
            'comST'=>$comST,'semST'=>$semST]);
    }

}

 

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...