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

Eliminando os views do MySQL


Frank K Hosaka

Pergunta

Em 2020 eu criei uma planilha que faz auditoria no MySQL usando um view chamado vw_balancete. No código PHP, eu também usei o vw_balancete para montar o demonstrativo contábil, só que eu percebi que é mais rápido usar os recursos do PHP para montar o demonstrativo do que utilizar o recurso do MySQL.

Em 2024, eu decidi não trabalhar mais com o view do MySQL. O problema é saber como a planilha iria fazer a auditoria. A minha ideia foi pedir para o PHP montar o demonstrativo dentro de uma tabela que eu chamei de tbw. Para a minha alegria, agora a planilha não demora mais cinco minutos para fazer a auditoria, ela é instantânea!

Mas eu ainda não sei se é possível conectar a planilha à tabela tbw hospedado no VPS do Hostinger. Primeiro eu tenho que baixar uma cópia do banco de dados do servidor, depois atualizo o meu banco de dados no meu PC, e finalmente eu peço para a planilha fazer a auditoria.

Isso é muita burocracia, mas eu pedi para o PHP pelo menos abrir o banco de dados, assim que ele terminar de montar a tabela tbw, e de lá eu começo o serviço de exportação.

Arquivo Modelos / Config.php
<?php

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

Arquivo Controles / ControleDiario.php
<?php

class ControleDiario extends Controle 
{
    public function balancete()
    {
        $receita=0;
        $despesa=0;
        $anterior=0;
        $balancete=[];
        $contas=$this->Conexao->select("* from tbconta");
        if(!isset($_SESSION['dia'])){$_SESSION['dia']=date('Y-m-d');}
        $apuracao=apuracao($_SESSION['dia']);
        $primeiroDia=$apuracao->primeiroDia;
        $ultimoDia=$apuracao->ultimoDia;
        foreach($contas as $conta)
        {
            $debitoAnterior=$this->Conexao->select("sum(valor) as soma from 
                tbdiario where contad=$conta->conta and dia<'$primeiroDia'")[0]->soma;
            $creditoAnterior=$this->Conexao->select("sum(valor) as soma from 
                tbdiario where contac=$conta->conta and dia<'$primeiroDia'")[0]->soma;
            $inicio=$debitoAnterior-$creditoAnterior;
            $anterior+=$inicio;
            $debito=$this->Conexao->select("sum(valor) as soma from
                tbdiario where contad=$conta->conta and 
                dia between '$primeiroDia' and '$ultimoDia'")[0]->soma;
            $credito=$this->Conexao->select("sum(valor) as soma from
                tbdiario where contac=$conta->conta and 
                dia between '$primeiroDia' and '$ultimoDia'")[0]->soma;
            $debitoFim=$this->Conexao->select("sum(valor) as soma from 
                tbdiario where contad=$conta->conta and dia<='$ultimoDia'")[0]->soma;
            $creditoFim=$this->Conexao->select("sum(valor) as soma from 
                tbdiario where contac=$conta->conta and dia<='$ultimoDia'")[0]->soma;
            $fim=$debitoFim-$creditoFim;
            if($conta->conta>=301 and $conta->conta<=304)
            {
                $receita+=$fim;
            }
            if($conta->conta>304)
            {
                $despesa+=$fim;
            }
            array_push($balancete,['conta'=>$conta->conta,'descricao'=>$conta->descricao,
                'inicio'=>$inicio,'debito'=>$debito,'credito'=>$credito,'fim'=>$fim]);
        }
        $resultado=$receita+$despesa;
        if($resultado<0){$nota="Lucro";} else {$nota="Prejuízo";}
        $balancete=json_decode(json_encode($balancete));
        return json_decode(json_encode(['balancete'=>$balancete,'apuracao'=>$apuracao,
            'anterior'=>$anterior,'despesa'=>$despesa,'receita'=>$receita,
            'resultado'=>$resultado,'nota'=>$nota]));
    }


    public function tbw()
    {
        $ultimoDia=$this->Conexao->select("dia from tbdiario order by dia desc")[0]->dia;
        $_SESSION['dia']=$ultimoDia;
        $balancete=$this->balancete()->balancete;
        $this->Conexao->exec("drop table if exists tbw");
        $this->Conexao->exec("create table tbw (conta int not null,
            descricao varchar(45) default null, inicio decimal(13,2) default null,
            debito decimal(13,2) default null, credito decimal(13,2) default null,
            fim decimal(13,2) default null, primary key (conta))
            engine=InnoDB default charset=utf8mb4 collate=utf8mb4_0900_ai_ci");
        foreach($balancete as $conta)
        {
            $inicio=$conta->inicio;
            $debito=$conta->debito;
            $credito=$conta->credito;
            $fim=$conta->fim;
            if($inicio==null)
            {
                $inicio='null';
            }
            if($debito==null)
            {
                $debito='null';
            }
            if($credito==null)
            {
                $credito='null';
            }
            if($fim==null)
            {
                $fim='null';
            }
            $this->Conexao->insert("tbw values ($conta->conta,'$conta->descricao',
                $inicio,$debito,$credito,$fim)");
        }
            return header("location:https://123.123.123.123:8443/phpmyadmin/index.php?route=/database/export&db=Diario");
    }

}



 

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

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

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...