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

A função apuracao( )


Frank K Hosaka

Pergunta

A listagem que segue é enorme, mas o mais importante é a função apuracao( ) que terminei hoje. Faz três anos que estou trabalhando nele.

Ele retorna o mês por extenso, a data inicial e a data final daquele mês. Ele também é capaz de retornar o número do mês correspondente se você usar o mês por extenso.

echo apuracao("2024-02-02")[0]; // "Fevereiro de 2024"
echo apuracao("2024-02-02")[1]; // "2024-02-01"
echo apuracao("2024-02-02")[2]; // "2024-02-29"
echo apuracao(null,"Fevereiro"); // 2

O resto da listagem é particular. Estou tentando montar um relatório mensal de venda pelo cartão de débito, totalmente baseada na escrituração contábil. Se houver qualquer erro de classificação contábil ou digitação, o programa simplesmente não funciona, mas fica bem fácil localizar pelo menos o mês que ocorreu o problema.

arquivo Index.php

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<style> body {width:500;margin:0 auto} .linha {line-height:0px} </style>
<?php

function apuracao($dia = null, $mes = null){
  $mesVetor=['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho',
    'Agosto','Setembro','Outubro','Novembro','Dezembro'];
  if(isset($mes)){return array_search($mes,$mesVetor)+1;}
  $ano=date('Y',strtotime($dia));
  $mes=date('m',strtotime($dia));
  $apuracao=$mesVetor[$mes-1] . " de $ano";
  $primeiroDia="$ano-$mes-01";
  $ultimoDia=date('Y-m-t',strtotime($primeiroDia));
  return [$apuracao,$primeiroDia,$ultimoDia];}

function dec($num) {
    if (empty($num)) {$fmt="";} else {$fmt = number_format($num,2,',','.'); 
    return $fmt;}}

$mysqli=new mysqli("localhost","root","","diario");
$dataInicial=date('Y-m-1');
$dataFinal=date('Y-m-t');
if(isset($_GET['apurar'])){
    $selecionado=explode(' ',$_GET['apurar']);
    $chaveMes=apuracao(null,$selecionado[0]);
    $ano=$selecionado[2];
    $dataInicial=date('Y-m-1',strtotime("$ano-$chaveMes-1"));
    $dataFinal=date('Y-m-t',strtotime("$ano-$chaveMes-1"));}
$apuracaoSelecionada=apuracao($dataInicial)[0];
$query=$mysqli->query("select dia from tbdiario where contad=407 and hist like 'Mercado%' order by dia");
$primeiroDia=$query->fetch_assoc()['dia'];
$meses=[];
$hoje=date('Y-m-1');
while($primeiroDia<=$hoje){
    $meses[]=apuracao(date('Y-m-1',strtotime($primeiroDia)))[0];
    $data=new DateTime($primeiroDia);
    $primeiroDia=date_modify($data,'+1 month')->format('Y-m-d');}
$meses=array_reverse($meses); ?>
<table class='table table-striped linha'>
    <tr class='align-middle'>
    <th>
    <form>
    <select name=apurar onchange=submit()>
        <?php foreach($meses as $mes):
        if($mes==$apuracaoSelecionada): ?>
        <option selected><?=$mes?></option>
        <?php else: ?>
        <option><?=$mes?></option>
        <?php endif; endforeach; ?>
    </select>
    </form>
    <th class=text-end>Tarifa<th class=text-end>Venda         
<?php
$query=$mysqli->query("select * from tbdiario where contad=407 and hist like 'Mercado%' 
  and dia between '$dataInicial' and '$dataFinal' order by dia");
$tarifas=$query->fetch_all(MYSQLI_ASSOC);
$query=$mysqli->query("select * from tbdiario where contac=304 and hist like 'Mercado%' 
  and dia between '$dataInicial' and '$dataFinal' order by dia");
$venda=$query->fetch_all(MYSQLI_ASSOC);
$query=$mysqli->query("select sum(valor) as soma from tbdiario where contad=407 
  and hist like 'Mercado%' and dia between '$dataInicial' and '$dataFinal'");
$query2=$mysqli->query("select sum(valor) as soma from tbdiario where contac=304 
  and hist like 'Mercado%' and dia between '$dataInicial' and '$dataFinal'");
echo "<tr><th>Total<th class=text-end>".dec($query->fetch_assoc()['soma']).
  "<th class=text-end>".dec($query2->fetch_assoc()['soma']);
foreach($tarifas as $key=>$tarifa){
    echo "<tr><td>".date('d/m/y',strtotime($tarifa['dia'])).
    "<td class=text-end nowrap >".dec($tarifa['valor'])."<td class=text-end>".
    dec($venda[$key]['valor']);}
echo "</table>";

 

Captura de tela 2024-02-02 103723.png

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