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.
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
<linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"rel="stylesheet"><scriptsrc="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=newDateTime($primeiroDia);
$primeiroDia=date_modify($data,'+1 month')->format('Y-m-d');}
$meses=array_reverse($meses);?><tableclass='table table-striped linha'><trclass='align-middle'><th><form><selectname=apuraronchange=submit()><?php foreach($meses as $mes):if($mes==$apuracaoSelecionada):?><optionselected><?=$mes?></option><?php else:?><option><?=$mes?></option><?php endif; endforeach;?></select></form><thclass=text-end>Tarifa<thclass=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>";
Pergunta
Frank K Hosaka
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.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.