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

A Nota Fiscal do fornecedor


Frank K Hosaka

Pergunta

O seguinte código importa um arquivo xml, calcula o valor do produto como a soma do seu valor com o ICMS-ST, IPI e diferença de alíquota do ICMS, se houverem. Se ele não encontrar o código do produto correspondente ao do fornecedor, ele dispara um alerta 'Verificar'. Se houver diferença entre o custo anterior com o custo atual, ele avermelha o total do item, por onde o usuário pode atualizar o custo do produto, se assim desejar. Finalmente, o programa pede um número de lançamento para que ele possa encaminhar tudo para o banco de dados. Como esse programa é gratuito, não aceito reclamações. Mas se funcionar, eu aceito qualquer valor pelo pix frankhosaka@gmail.com.

arquivo nota_bd.php
<?php
$mysqli=new mysqli("localhost","root","","diario");
if(isset($_POST['custoAtual'])){
    $custoAtual=$_POST['custoAtual'];
    $codprod=$_POST['codprod'];
    $mysqli->query("update tbprod set custo=$custoAtual where codprod = $codprod");
}
if(isset($_POST['lcto'])){
    $lcto=$_POST['lcto'];
    $matriz=json_decode($_POST['matriz']);
    echo "aqui fica a rotina do lançamento $lcto que vai incluir os dados: ";
    var_dump($matriz);
}

arquivo notaDoFornecedor.php
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"
    rel="stylesheet">
<script>
    function atualizar(custoAtual,custoAnterior,codprod){
        confirma=confirm("Atualizar?\ncusto atual: "+custoAtual+"\ncusto anterior: "+custoAnterior)
        if(confirma){
            xmlhttp=new XMLHttpRequest()
            url = "nota_bd.php"
            formData = new FormData()
            formData.append('custoAtual',custoAtual)
            formData.append('codprod',codprod)
            xmlhttp.open("POST",url,true)
            xmlhttp.send(formData)
            location.reload()
        }
    }
</script>
<form method=post class="w-50 m-auto" enctype="multipart/form-data">
    <label for=arquivo>Escolha o arquivo XML</label>
    <input type=file name=arquivo required>
    <input type=submit>
</form>
<?php
if(!isset($_FILES['arquivo'])){exit;}
$notaFornecedor=$_FILES['arquivo']['tmp_name'];

function dec($value) {
    return ($value) ? number_format($value,2,',','.') : null;
}
$mysqli=new mysqli("localhost","root","","diario");

// Carregar o arquivo XML
$dom = new DOMDocument();
$dom->load($notaFornecedor);

// Acessar os itens
$nfe = $dom->documentElement;
$itens = $nfe->getElementsByTagName('det');

// Calcula diferença de alíquota do ICMS
$difAliqICMS=0;
$aliquotaInterna=0.18;
foreach($itens as $item){
    if($item->getElementsByTagName('CFOP')->item(0)->textContent==6102){
        $vBC=$item->getElementsByTagName('vBC')->item(0)->textContent;
        $vICMS=$item->getElementsByTagName('vICMS')->item(0)->textContent;
        $difAliqICMS += intval(($vBC*$aliquotaInterna - $vICMS)*100)/100;
    }
}

echo "<table class='table table-striped table-sm w-50 m-auto'>";
$vNF=$nfe->getElementsByTagName('vNF')->item(0)->textContent;
$nNF=$nfe->getElementsByTagName('nNF')->item(0)->textContent;
$xNome=$nfe->getElementsByTagName('xNome')->item(0)->textContent;
echo "<tr class=fw-semibold><td><td><td>NF $nNF ". substr($xNome,0,4). "<td><td class=text-end>". dec($vNF);
if($difAliqICMS!==0){
    echo "<tr class=fw-semibold><td><td><td>Diferença de Alíquota de ICMS<td><td class=text-end>" .dec($difAliqICMS);
    echo "<tr class=fw-semibold><td><td><td>Total a conferir<td><td class=text-end>" .dec($difAliqICMS+$vNF);
}
echo "<tr class=fw-semibold><td>CodForn<td>CodProd<td>Produto<td>Qt<td class=text-end>Total";

$soma=0;
$matriz=[];

foreach ($itens as $item) {
    // no campo codforn uso a primeira letra para identificar o fornecedor
    $codforn = $xNome[0] . $item->getElementsByTagName('cProd')->item(0)->textContent;
    $consulta=$mysqli->query("select codprod from tbprod where codforn like '%$codforn%' ");
    $codprod='<spam class=text-danger>Verificar</spam>';
    if ($consulta->num_rows==1) {
        $codprod=$consulta->fetch_assoc()['codprod'];
    }
    $produto = $item->getElementsByTagName('xProd')->item(0)->textContent;
    $quantidade=$item->getElementsByTagName('qCom')->item(0)->textContent;
    if(is_numeric($codprod)){
        $produtoDobrado = [510];
        if(in_array($codprod,$produtoDobrado)){
            $quantidade = 2 * $quantidade;
        }
    }
    $vICMSST = ($item->getElementsByTagName('vICMSST')->item(0)) ? 
        $item->getElementsByTagName('vICMSST')->item(0)->textContent : null;
    $difAliqICMS=0;
    if($item->getElementsByTagName('CFOP')->item(0)->textContent==6102){
        $vBC=$item->getElementsByTagName('vBC')->item(0)->textContent;
        $vICMS=$item->getElementsByTagName('vICMS')->item(0)->textContent;
        $difAliqICMS = intval(($vBC*$aliquotaInterna - $vICMS)*100)/100;
    }
    $vIPI=0;
    if($item->getElementsByTagName('vIPI')->item(0)){
        $vIPI=$item->getElementsByTagName('vIPI')->item(0)->textContent;
    }
    $vProd = $item->getElementsByTagName('vProd')->item(0)->textContent;
    $valorTotal=$vProd+$vICMSST+$difAliqICMS+$vIPI;
    $soma += $valorTotal;
    $class="class='text-end'";
    if(is_numeric($codprod)){
        $custoAtual=intval($valorTotal/$quantidade*100)/100;
        $consulta=$mysqli->query("select custo from tbprod where codprod=$codprod");
        $custoAnterior=$consulta->fetch_assoc()['custo'];
        if(abs($custoAnterior-$custoAtual)>0.02){
            $class="class='text-end text-danger' onclick='atualizar($custoAtual,$custoAnterior,$codprod)'";
        }
    }
    echo "<tr><td>" . $codforn;
    echo "<td>" . $codprod;
    echo "<td>" . substr($produto,0,25);
    echo "<td>" . intval($quantidade);
    echo "<td $class>" . dec($valorTotal);
    $matriz[]=['codpprod'=>$codprod,'qt'=>$quantidade,'subtotal'=>$valorTotal];
}
?>
<tr class=fw-semibold><td><td><td>Total dos itens<td><td class=text-end><?=dec($soma)?>
</table>
<div class="w-50 m-auto">
Enviar tudo para o banco de dados
<form action=nota_bd method=post>
    <input name=lcto placeholder="Número do Lançamento" required>
    <input type=hidden name=matriz value=<?=json_encode($matriz)?>>
    <input type=submit>
</form>
</div>

 

 

 

 

 

Captura de tela 2024-05-05 103131.png

Captura de tela 2024-05-05 103202.png

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...