Laravel - [DB::Connection(...)->select(...)] Works on one Job, but does not work on another!

Asked

Viewed 95 times

-1

Hello, I have a problem that seems impossible to solve.

In my Laravel 6.X application, I have a report that performs database extracts for Excel files, this report has two extraction versions:

• Valued Activities (Functional)

• Activities by Period (Non-functional)

The two extraction modules have a similar structure, however, only the Job Activityvalued.php works. I realized that the variable (array) $Rows only ends up being filled in the job of valued activities, for some unknown reason in the other job this variable is not being filled

Controller

<?php

namespace app\Http\Controllers\Administrativo\Pit\Relatorio\Atividade;

use App\Http\Controllers\Controller;
use DB;
use App\Models\Metodo\Pit\PitTipoAtividades;

use App\Http\Requests\Pit\Relatorios\RelatorioAtividadeRequest;

use App\Jobs\Pit\Relatorios\Atividades\AtividadeValorizada;
use App\Jobs\Pit\Relatorios\Atividades\AtividadePorPeriodo;

class AtividadeController extends Controller{

    public function __construct() {

        $this->middleware('auth:administrativo');
    }

    public function index() {

        $tipoatividades = PitTipoAtividades::all();

        return view('administrativo.pit.relatorio.atividades.index')->with([
            'acao' => 'Adicionar',
            'tipoatividades' => $tipoatividades,
            'ind_meses' => dominios('IND_MESES')
        ]);
    }

    public function getAtividadeValorizado(RelatorioAtividadeRequest $request){

        try {
            AtividadeValorizada::dispatchNow($request->all());
        } catch (Exception $e) {
        }

        return response()->json(
            route('admin.metodo.pit.efetivo.relatorio.atividade.index')
        );
    }

    public function getAtividadePeriodoInformado(RelatorioAtividadeRequest $request){

        try {
            AtividadePorPeriodo::dispatchNow($request->all());
        } catch (Exception $e) {
        }

        return response()->json(
            route('admin.metodo.pit.efetivo.relatorio.atividade.index')
        );
    }
}

Job Valued Activities

<?php

namespace App\Jobs\Pit\Relatorios\Atividades;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

use App\Exports\Excel\CollectionExport;
use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\FromCollection;

use DB;
use Auth;
use Illuminate\Support\Facades\Log;

use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;

use App\Models\Metodo\Pit\PitAtividadeExport;

use Monolog\Formatter\HtmlFormatter;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Logger;
use Monolog\Processor\MemoryUsageProcessor;
use Monolog\Processor\ProcessIdProcessor;
use Monolog\Processor\WebProcessor;

class AtividadeValorizada implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;
    protected $request;
    public $timeout = 120; //O número de segundos que o trabalho pode ser executado antes do tempo limite
    public $tries = 5; //O número de vezes que o trabalho pode ser tentado.

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(array $request){
        $this->user = Auth::user();
        $this->request = $request;
        $this->request['mes_referencia'] = str_pad($this->request['mes_referencia'], 2, '0', STR_PAD_LEFT);
    }

    public function handle(){

        try{
            $countAtividadeExport = PitAtividadeExport::whereRaw("ANO_MES = to_char(".$this->request['ano_letivo'].",'fm0000')||to_char(".$this->request['mes_referencia'].",'fm00')")->count();
            $mesReferencia = '';
            foreach(dominios('IND_MESES') as $meses){
                if($meses['val_dominio_item'] == $this->request['mes_referencia']){
                    $mesReferencia = $meses['dsc_dominio_item'];
                }
            }

            $rows = array();
            $heards = null;

            if($countAtividadeExport > 0 && isset($this->request['base_atual'])) {
                $rows = DB::connection('metodo_hml')->select(" SELECT
                        p.cod_pessoa,
                        f.nom_func,
                        p.cod_ativde,
                        t.nom_ativde,
                        to_char(p.dat_inicio,'dd/mm/rrrr') dat_inicio,
                        to_char(p.dat_termino,'dd/mm/rrrr') dat_termino,
                        x.cod_emp,
                        x.cod_ccusto
                    FROM
                        pit_atividade p,
                        vwm_populis_func f,
                        pit_tp_atividade t,
                        g_centro_custo x,
                        g_pessoa a,
                        pit_tp_categoria_docente s
                    WHERE
                        p.cod_pessoa = f.cod_pessoa
                        AND  p.cod_ativde = t.cod_ativde
                        AND  p.cod_ativde = DECODE(:cod_atividade,NULL,p.cod_ativde,:cod_atividade)
                        AND  p.cod_pessoa = a.cod_pessoa
                        AND  a.cod_categoria = s.cod_categoria (+)
                        AND  a.cod_sub_categoria = s.cod_sub_categoria (+)
                        AND  p.cod_emp = x.cod_emp
                        AND  p.cod_ccusto = x.cod_ccusto
                        AND  s.ind_status = 'A'
                        AND  p.ind_status = 'A'
                        AND  TO_CHAR(:ano_letivo,'fm0000') || TO_CHAR(:mes_referencia,'fm00') BETWEEN TO_CHAR(p.dat_inicio,'rrrrmm') AND TO_CHAR(p.dat_termino,'rrrrmm')
                        AND  nvl(TO_CHAR(f.dat_demissao,'yyyymm'),999999) >= TO_CHAR(:ano_letivo,'fm0000') || TO_CHAR(:mes_referencia,'fm00')
                        AND  TO_CHAR(:ano_letivo,'fm0000') || TO_CHAR(:mes_referencia,'fm00') BETWEEN TO_CHAR(p.dat_inicio,'rrrrmm') AND TO_CHAR(p.dat_termino,'rrrrmm')
                    ORDER BY
                        p.cod_pessoa,
                        p.dat_inicio DESC,
                        p.dat_termino DESC",
                    [
                        'ano_letivo'     => $this->request['ano_letivo'],
                        'mes_referencia' => $this->request['mes_referencia'],
                        'cod_atividade'  => $this->request['tipo_atividade']
                    ]);

                foreach ($rows as $index => $row):
                    if ($row->ind_tp_peridiocidade = 'S') {
                        $horas_sem      = $row->qtd_horas;
                        $horas_men      = $row->qtd_horas * 4.5;
                        $rows[$index]->horas_sem = $horas_sem;
                        $rows[$index]->horas_men = $horas_men;
                    } elseif ($row->ind_tp_peridiocidade = 'Q') {
                        $horas_sem      = $row->qtd_horas / 2;
                        $horas_men      = $row->qtd_horas / 2 * 4.5;
                        $rows[$index]->horas_sem = $horas_sem;
                        $rows[$index]->horas_men = $horas_men;
                    } else {
                        $horas_sem      = $row->qtd_horas / 4.5;
                        $horas_men      = $row->qtd_horas;
                        $rows[$index]->horas_sem = $horas_sem;
                        $rows[$index]->horas_men = $horas_men;

                    }
                    //busca se o docente está afastado

                    $buscaDocenteAfastado = $this->getDocenteAfastado($row->cod_pessoa, $this->request['ano_letivo'], $this->request['mes_referencia']);

                    $rows[$index]->data_inicio_afastamento = $buscaDocenteAfastado[0]->data_inicio_afastamento;
                    $rows[$index]->data_termino_afastamento = $buscaDocenteAfastado[0]->data_termino_afastamento;
                    if ($buscaDocenteAfastado[0]->data_inicio_afastamento != '' && $row->status_docente = 'ATIVO') {
                        $rows[$index]->novo_status_docente  = 'AFASTADO';
                    } else {
                        $rows[$index]->novo_status_docente  = $row->status_docente;
                    }
                    $dataFunQtdDiasMes    = "01-";
                    if(...}

                    $concatInicio         = $dataFunQtdDiasMes.$this->request['mes_referencia'].'-'.$this->request['ano_letivo'];
                    $concatFim            = $dataFunQtdDiasMesFim.$this->request['mes_referencia'].'-'.$this->request['ano_letivo'];
                    $atvd                 = 'ATVD';

                    if ($row->ind_tp_calc <> 'F') {
                        if ($row->ind_tp_peridiocidade = 'S') {
                            $valor = $row->pago_valor * 4.5;
                            $rows[$index]->pago_valor = $valor;
                            $valorPago  = $this->round($row->cod_pessoa,$this->request['ano_letivo'],$this->request['mes_referencia'],"'$concatInicio'","'$concatFim'","'$atvd'");
                            $round  = $row->pago_valor / 30 * $valorPago[0]->round;
                            $rows[$index]->vlr_informado = round($round,2);
                        } elseif ($row->ind_tp_peridiocidade = 'Q') {
                            $valor = $row->pago_valor / 2 * 4.5;
                            $rows[$index]->pago_valor = $valor;
                            $valorPago  = $this->round($row->cod_pessoa,$this->request['ano_letivo'],$this->request['mes_referencia'],"'$concatInicio'","'$concatFim'","'$atvd'");
                            $round  = $row->pago_valor / 30 * $valorPago[0]->round;
                            $rows[$index]->vlr_informado = round($round,2);
                        } else {
                            $valor = $row->pago_valor;
                            $rows[$index]->pago_valor = $valor;
                            $valorPago  = $this->round($row->cod_pessoa,$this->request['ano_letivo'],$this->request['mes_referencia'],"'$concatInicio'","'$concatFim'","'$atvd'");
                            $round  = $row->pago_valor / 30 * $valorPago[0]->round;
                            $rows[$index]->vlr_informado = round($round,2);
                        }
                    } else {
                        $valor = $row->pago_valor;
                        $rows[$index]->pago_valor = $valor;
                        $valorPago  = $this->round($row->cod_pessoa,$this->request['ano_letivo'],$this->request['mes_referencia'],"'$concatInicio'","'$concatFim'","'$atvd'");
                        $round  = $row->pago_valor / 30 * $valorPago[0]->round;
                        $rows[$index]->vlr_informado = round($round,2);

                    }

                    if(!$heards){
                        $heards = array_keys((array)$row);
                    }
                endforeach;

            }elseif($countAtividadeExport > 0 && !isset($this->request['base_atual'])){
                $rows = DB::connection('metodo_hml')->select("
                    SELECT
                        p.cod_pessoa,
                        f.nom_func,
                        p.cod_ativde,
                        t.nom_ativde,
                        to_char(p.dat_inicio,'dd/mm/rrrr') dat_inicio,
                        to_char(p.dat_termino,'dd/mm/rrrr') dat_termino
                    FROM
                        pit_atividade_export     p,
                        pit_funcionario_export   f,
                        pit_tp_atividade_export  t,
                        g_centro_custo           x,
                        g_pessoa_export          a,
                        pit_tp_cat_doc_export    s
                    WHERE   p.cod_pessoa = f.cod_pessoa
                        AND f.ano_mes = p.ano_mes
                        AND p.cod_ativde = t.cod_ativde
                        AND t.ano_mes = p.ano_mes
                        AND p.cod_pessoa = a.cod_pessoa
                        AND a.ano_mes = p.ano_mes
                        AND s.ind_status = 'I'
                        AND p.ind_status = 'A'
                        AND p.cod_emp = x.cod_emp
                        AND p.cod_ccusto = x.cod_ccusto
                        AND a.cod_categoria = s.cod_categoria(+)
                        AND a.cod_sub_categoria = s.cod_sub_categoria(+)
                        --AND s.ano_mes(+) = to_char(:ano_letivo,'fm0000')||to_char(:mes_referencia,'fm00')
                        AND p.cod_ativde = decode(:cod_atividade,null,p.cod_ativde,:cod_atividade)
                        AND p.ano_mes = to_char(:ano_letivo,'fm0000')||to_char(:mes_referencia,'fm00')
                        AND nvl(to_char(f.dat_demissao,'yyyymm'),999999) >= to_char(:ano_letivo,'fm0000')||to_char(:mes_referencia,'fm00')
                        AND to_char(:ano_letivo,'fm0000')||to_char(:mes_referencia,'fm00') BETWEEN to_char(p.dat_inicio,'rrrrmm') AND to_char(p.dat_termino,'rrrrmm')
                    ORDER BY
                        p.cod_pessoa,
                        p.dat_inicio desc,
                        p.dat_termino desc",
                    [
                        'ano_letivo'     => $this->request['ano_letivo'],
                        'mes_referencia' => $this->request['mes_referencia'],
                        'cod_atividade'  => $this->request['tipo_atividade']
                    ]
                );

                foreach ($rows as $index => $row):
                    if ($row->ind_tp_peridiocidade = 'S') {
                        $horas_sem      = $row->qtd_horas;
                        $horas_men      = $row->qtd_horas * 4.5;
                        $rows[$index]->horas_sem = $horas_sem;
                        $rows[$index]->horas_men = $horas_men;
                    } elseif ($row->ind_tp_peridiocidade = 'Q') {
                        $horas_sem      = $row->qtd_horas / 2;
                        $horas_men      = $row->qtd_horas / 2 * 4.5;
                        $rows[$index]->horas_sem = $horas_sem;
                        $rows[$index]->horas_men = $horas_men;
                    } else {
                        $horas_sem      = $row->qtd_horas / 4.5;
                        $horas_men      = $row->qtd_horas;
                        $rows[$index]->horas_sem = $horas_sem;
                        $rows[$index]->horas_men = $horas_men;

                    }
                    //busca se o docente está afastado
                    $buscaDocenteAfastado = $this->getDocenteAfastado($row->cod_pessoa, $this->request['ano_letivo'], $this->request['mes_referencia']);
                    $rows[$index]->data_inicio_afastamento = $buscaDocenteAfastado[0]->data_inicio_afastamento;
                    $rows[$index]->data_termino_afastamento = $buscaDocenteAfastado[0]->data_termino_afastamento;
                    if ($buscaDocenteAfastado[0]->data_inicio_afastamento != '' && $row->status_docente = 'ATIVO') {
                        $rows[$index]->novo_status_docente  = 'AFASTADO';
                    } else {
                        $rows[$index]->novo_status_docente  = $row->status_docente;
                    }
                    $dataFunQtdDiasMes    = "01-";
                    if(...){...}
                    $concatInicio         = $dataFunQtdDiasMes.$this->request['mes_referencia'].'-'.$this->request['ano_letivo'];
                    $concatFim            = $dataFunQtdDiasMesFim.$this->request['mes_referencia'].'-'.$this->request['ano_letivo'];
                    $atvd                 = 'ATVD';
                    if ($row->ind_tp_calc <> 'F') {...}
                    } else {
                        $valor = $row->pago_valor;
                        $rows[$index]->pago_valor = $valor;
                        $valorPago  = $this->round($row->cod_pessoa,$this->request['ano_letivo'],$this->request['mes_referencia'],"'$concatInicio'","'$concatFim'","'$atvd'");
                        $round  = $row->pago_valor / 30 * $valorPago[0]->round;
                        $rows[$index]->vlr_informado = round($round,2);
                    }
                    if(!$heards){
                        $heards = array_keys((array)$row);
                    }
                endforeach;
            }

            if($rows){...}

        }catch(Exception $th) {...}
    }

}

Job Activities Per Period

<?php

namespace App\Jobs\Pit\Relatorios\Atividades;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use DB;
use Auth;
use Carbon\Carbon;

use App\Exports\Excel\CollectionExport;
use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\FromCollection;

use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;

use Monolog\Formatter\HtmlFormatter;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Logger;
use Monolog\Processor\MemoryUsageProcessor;
use Monolog\Processor\ProcessIdProcessor;
use Monolog\Processor\WebProcessor;

class AtividadePorPeriodo implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;
    protected $request;
    public $timeout = 120; //O número de segundos que o trabalho pode ser executado antes do tempo limite
    public $tries = 5; //O número de vezes que o trabalho pode ser tentado.

    /**
     * Create a new job instance.
     *
     * @return void
     */

    public function __construct(array $request){
        $this->user = Auth::user();
        $this->request = $request;

        $this->request['data_inicio'] = Carbon::parse($this->request['data_inicio'])->format('d/m/Y');;
        $this->request['data_fim'] = Carbon::parse($this->request['data_fim'])->format('d/m/Y');
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle(){

        try{

            $rows = array();
            $heards = array();

            $rows = DB::connection('metodo_hml')->select(" SELECT 
                    A.COD_ATIVDE, INITCAP(NOM_ATIVDE) Atividade,
                    b.cod_ccusto,
                    (SELECT gcc.dsc_ccusto
                     FROM   g_centro_custo gcc 
                     WHERE  gcc.cod_ccusto = b.cod_ccusto) dsc_ccusto,
                    decode(IND_NIVEL_ATIVDE,'T','Turma','C','Curso','Institucional') Nivel_Atividade, 
                    DECODE(IND_TP_CALC, 'F','Valor Fixo','C','Categoria', 'H','Hora Atividade') Tipo_calculo,
                    decode(ind_tp_ativde,1, 'Atividade',2,'Aula',3,'Pesquisa',4,'Extensão') Tipo_atividade,
                    decode(IND_SUP_ADM,'S','Suplementar','A','Administracao') Classificacao_atividade,
                    b.cod_pessoa,
                    f.cod_pessoa_rm, 
                    f.nom_func,
                    to_char(f.dat_demissao,'dd/mm/rrrr') dat_demissao,
                    to_char(af.dat_inicio_afast,'dd/mm/rrrr') dat_inicio_afast,
                    to_char(af.dat_termino_afast,'dd/mm/rrrr') dat_termino_afast,
                    to_char(b.dat_inicio,'dd/mm/rrrr') dat_inicio,
                    to_char(b.dat_termino,'dd/mm/rrrr') dat_termino,
                    B.QTD_HORAS, 
                    B.QTD_HOR_REF,  
                    b.vlr_atividade,
                    b.IND_TP_PERIDIOCIDADE,  
                    decode(b.IND_TP_PERIDIOCIDADE,'M','Mensal','Q','Quinzenal','S','Semanal') periodicidade,
                    decode(b.ind_status,'A','Ativa','Inativada') situacao_atividade,
                    b.cod_usuario,
                    u.nom_usuario,
                    decode(b.ind_transacao,'I','Inclusao','U','Alteracao') tipo_transacao,
                    to_char(b.dat_transacao,'dd/mm/rrrr hh24:mi:ss') dat_transacao,
                    b.dsc_atividade,
                    b.dsc_observacao||rat.dsc_observacao dsc_observacao,
                    rat.num_seq_regime_ano_letivo,
                    rat.ind_tp_nivel_ativ_curso,
                    (SELECT DISTINCT b.rv_meaning
                     FROM cg_ref_codes b
                     WHERE UPPER(b.RV_LOW_VALUE) = UPPER(rat.ind_tp_nivel_ativ_curso)
                     AND UPPER(b.rv_domain) = 'TP_NIVEL_ATIV_CURSO') descricao,
                    rat.num_ordem,
                    rat.cod_curso,
                    gc.nom_curso,
                    rat.cod_usuario usuario_rateio,
                    to_char(rat.dat_inclusao,'dd/mm/rrrr') dat_inclusao_rat,
                    b.cod_atividade,
                    decode(b.cod_modalidade_ensino,'P','Presencial','D','EAD','A','Ambas') modalidade_ensino
                FROM PIT_TP_ATIVIDADE a, 
                     pit_atividade b, 
                     vwm_populis_func f, 
                     pit_mov_afastamento af, 
                     s_usuario u, 
                     PIT_ATIVIDADE_RATEIO RAT, 
                     gc_curso gc
                WHERE a.COD_ATIVDE      = b.cod_ativde
                    AND b.cod_usuario   = u.cod_usuario
                    AND f.cod_pessoa_pk = (SELECT max(f2.cod_pessoa_pk) 
                                           FROM vwm_populis_func f2
                                           WHERE f2.cod_pessoa = f.cod_pessoa)
                    AND f.cod_pessoa_pk = af.cod_pessoa_pk 
                    AND b.cod_atividade = rat.cod_atividade(+)
                    AND b.cod_pessoa    = rat.cod_pessoa(+)
                    AND rat.cod_curso   = gc.cod_curso(+)
                    AND (((trunc( af.dat_inicio_afast) >= :data_inicio) AND 
                        af.dat_termino_afast is null) 
                                    OR
                        af.dat_termino_afast is null)       
                    AND f.cod_pessoa  = b.cod_pessoa
                    AND b.dat_inicio  >= :data_inicio
                    AND b.dat_termino <= :data_termino
                UNION ALL
                SELECT 
                    A.COD_ATIVDE, INITCAP(NOM_ATIVDE) Atividade,
                    b.cod_ccusto,
                    (SELECT gcc.dsc_ccusto
                     FROM   g_centro_custo gcc 
                     WHERE  gcc.cod_ccusto = b.cod_ccusto) dsc_ccusto,
                    decode(IND_NIVEL_ATIVDE,'T','Turma','C','Curso','Institucional') Nivel_Atividade, 
                    DECODE(IND_TP_CALC, 'F','Valor Fixo','C','Categoria', 'H','Hora Atividade') Tipo_calculo,
                    decode(ind_tp_ativde,1, 'Atividade',2,'Aula',3,'Pesquisa',4,'Extensão') Tipo_atividade,
                    decode(IND_SUP_ADM,'S','Suplementar','A','Administracao') Classificacao_atividade,
                    b.cod_pessoa,
                    f.cod_pessoa_rm, 
                    f.nom_func,
                    to_char(f.dat_demissao,'dd/mm/rrrr') dat_demissao, 
                    to_char(af.dat_inicio_afast,'dd/mm/rrrr') dat_inicio_afast,
                    to_char(af.dat_termino_afast,'dd/mm/rrrr') dat_termino_afast,  
                    to_char(b.dat_inicio,'dd/mm/rrrr') dat_inicio,
                    to_char(b.dat_termino,'dd/mm/rrrr') dat_termino,
                    B.QTD_HORAS, 
                    B.QTD_HOR_REF,  
                    b.vlr_atividade,
                    b.IND_TP_PERIDIOCIDADE, 
                    decode(b.IND_TP_PERIDIOCIDADE,'M','Mensal','Q','Quinzenal','S','Semanal') periodicidade,
                    decode(b.ind_status,'A','Ativa','Inativada') situacao_atividade,                         
                    b.cod_usuario,
                    u.nom_usuario,
                    decode(b.ind_transacao,'I','Inclusao','U','Alteracao') tipo_transacao,
                    to_char(b.dat_transacao,'dd/mm/rrrr hh24:mi:ss') dat_transacao,
                    b.dsc_atividade,
                    b.dsc_observacao||rat.dsc_observacao dsc_observacao,
                    rat.num_seq_regime_ano_letivo,
                    rat.ind_tp_nivel_ativ_curso,
                    (SELECT DISTINCT b.rv_meaning
                     FROM cg_ref_codes b
                     WHERE UPPER(b.RV_LOW_VALUE) = UPPER(rat.ind_tp_nivel_ativ_curso)
                     AND UPPER(b.rv_domain) = 'TP_NIVEL_ATIV_CURSO') descricao,
                    rat.num_ordem,
                    rat.cod_curso,
                    gc.nom_curso,
                    rat.cod_usuario usuario_rateio,
                    to_char(rat.dat_inclusao,'dd/mm/rrrr') dat_inclusao_rat,
                    b.cod_atividade,
                    decode(b.cod_modalidade_ensino,'P','Presencial','D','EAD','A','Ambas') modalidade_ensino
                FROM PIT_TP_ATIVIDADE a, 
                     pit_atividade b,
                     vwm_populis_func f,
                     pit_mov_afastamento af,
                     s_usuario u,
                     PIT_ATIVIDADE_RATEIO RAT,
                     gc_curso gc
                WHERE a.COD_ATIVDE      = b.cod_ativde
                    AND f.cod_pessoa    = b.cod_pessoa  
                    AND b.cod_usuario   = u.cod_usuario
                    AND b.cod_atividade = rat.cod_atividade(+)
                    AND b.cod_pessoa    = rat.cod_pessoa(+)
                    AND rat.cod_curso   = gc.cod_curso(+)
                    AND f.cod_pessoa_pk = (SELECT max(f2.cod_pessoa_pk) 
                                           FROM vwm_populis_func f2
                                           WHERE f2.cod_pessoa = f.cod_pessoa)
                    AND f.cod_pessoa_pk =  af.cod_pessoa_pk 
                    AND trunc(af.dat_inicio_afast)  >= :data_inicio
                    AND trunc(nvl(af.dat_termino_afast, sysdate )) <= :data_termino            
                    AND b.dat_inicio    >= :data_inicio
                    AND b.dat_termino   <= :data_termino                
                UNION ALL
                SELECT   
                    A.COD_ATIVDE, INITCAP(NOM_ATIVDE) Atividade,
                    b.cod_ccusto,
                    (SELECT gcc.dsc_ccusto
                     FROM   g_centro_custo gcc 
                     WHERE  gcc.cod_ccusto = b.cod_ccusto) dsc_ccusto,
                    decode(IND_NIVEL_ATIVDE,'T','Turma','C','Curso','Institucional') Nivel_Atividade, 
                    DECODE(IND_TP_CALC, 'F','Valor Fixo','C','Categoria', 'H','Hora Atividade') Tipo_calculo,
                    decode(ind_tp_ativde,1, 'Atividade',2,'Aula',3,'Pesquisa',4,'Extensão') Tipo_atividade,
                    decode(IND_SUP_ADM,'S','Suplementar','A','Administracao') Classificacao_atividade,
                    b.cod_pessoa,
                    f.cod_pessoa_rm, 
                    f.nom_func,
                    to_char(f.dat_demissao,'dd/mm/rrrr') dat_demissao,
                    null dat_inicio_afast,
                    null dat_termino_afast,
                    to_char(b.dat_inicio,'dd/mm/rrrr') dat_inicio,
                    to_char(b.dat_termino,'dd/mm/rrrr') dat_termino,
                    B.QTD_HORAS,
                    B.QTD_HOR_REF,
                    b.vlr_atividade,
                    b.IND_TP_PERIDIOCIDADE,
                    decode(b.IND_TP_PERIDIOCIDADE,'M','Mensal','Q','Quinzenal','S','Semanal') periodicidade,
                    decode(b.ind_status,'A','Ativa','Inativada') situacao_atividade,
                    b.cod_usuario,
                    u.nom_usuario,
                    decode(b.ind_transacao,'I','Inclusao','U','Alteracao') tipo_transacao,
                    to_char(b.dat_transacao,'dd/mm/rrrr hh24:mi:ss') dat_transacao,
                    b.dsc_atividade,
                    b.dsc_observacao||rat.dsc_observacao dsc_observacao,
                    rat.num_seq_regime_ano_letivo,
                    rat.ind_tp_nivel_ativ_curso,
                    (SELECT DISTINCT b.rv_meaning
                     FROM cg_ref_codes b
                     WHERE UPPER(b.RV_LOW_VALUE) = UPPER(rat.ind_tp_nivel_ativ_curso)
                     AND UPPER(b.rv_domain) = 'TP_NIVEL_ATIV_CURSO') descricao,
                    rat.num_ordem,
                    rat.cod_curso,
                    gc.nom_curso,
                    rat.cod_usuario usuario_rateio,
                    to_char(rat.dat_inclusao,'dd/mm/rrrr') dat_inclusao_rat,
                    b.cod_atividade,
                    decode(b.cod_modalidade_ensino,'P','Presencial','D','EAD','A','Ambas') modalidade_ensino
                FROM PIT_TP_ATIVIDADE a, 
                     pit_atividade b, 
                     vwm_populis_func f, 
                     s_usuario u,
                     PIT_ATIVIDADE_RATEIO RAT, 
                     gc_curso gc
                WHERE a.COD_ATIVDE      =  b.cod_ativde
                    AND f.cod_pessoa    = b.cod_pessoa  
                    AND b.cod_usuario   = u.cod_usuario
                    AND b.cod_atividade = rat.cod_atividade(+)
                    AND b.cod_pessoa    = rat.cod_pessoa(+)
                    AND rat.cod_curso   = gc.cod_curso(+)
                    AND f.cod_pessoa_pk = (SELECT max(f2.cod_pessoa_pk) 
                                           FROM vwm_populis_func f2
                                           WHERE f2.cod_pessoa = f.cod_pessoa)
                    AND 0 = (SELECT count(*) 
                             FROM pit_mov_afastamento f3
                             WHERE f3.cod_pessoa_pk = f.cod_pessoa_pk
                                AND   trunc(f3.dat_inicio_afast) >= :data_inicio
                                AND ( f3.dat_termino_afast IS NULL  or trunc(f3.dat_termino_afast) <= :data_termino))
                    AND  b.dat_inicio  >= :data_inicio
                    AND  b.dat_termino <= :data_termino 
                ORDER BY 7,14,15",
                [
                    'data_inicio'  => $this->request['data_inicio'],
                    'data_termino' => $this->request['data_fim']
                ]);

            foreach ($rows as $index => $row):  
                if(!$heards){
                    $heards = array_keys((array)$row);
                }
            endforeach;

            if($rows){...}

        }catch(Exception $th) {...}
    }

}
  • Did you test the Sqls directly on a database client to see if they work? Is your date filter correct? It seems to me that you are trying to format the input to d/m/Y and when testing with the database, it may not work

  • @Ademirmazerjr-Nuno I tested in the Oracle client and it worked, both with dates in the format (d/m/Y) or (d-m-Y)

1 answer

-1


It is solved, for some reason the query worked in client and did not work in the call by function.

So I decided to solve it this way. Since there are 3 querys on the same table with different data, I created 3 views and made a query with filters based on the original query.

New query

$rows = DB::connection(env('DB_CONNECTION_METODO_DEFAULT'))->select("
                SELECT * FROM VW_PIT_TP_ATIVIDADES_1 
                WHERE 
                TO_DATE(dat_inicio,'DD/MM/YYYY')  >= TO_DATE(:data_inicio,'DD/MM/YYYY')
                AND TO_DATE(dat_termino,'DD/MM/YYYY') <= TO_DATE(:data_termino,'DD/MM/YYYY') 
                AND (TO_DATE(dat_inicio_afast,'DD/MM/YYYY')  >= TO_DATE(:data_inicio,'DD/MM/YYYY') OR TO_DATE(dat_inicio_afast,'DD/MM/YYYY') IS NULL)
                AND (TO_DATE(dat_termino_afast,'DD/MM/YYYY') <= TO_DATE(:data_termino,'DD/MM/YYYY') OR TO_DATE(dat_termino_afast,'DD/MM/YYYY') IS NULL) 
                UNION ALL
                SELECT * FROM VW_PIT_TP_ATIVIDADES_2 
                WHERE 
                TO_DATE(dat_inicio,'DD/MM/YYYY')  >= TO_DATE(:data_inicio,'DD/MM/YYYY')
                AND TO_DATE(dat_termino,'DD/MM/YYYY') <= TO_DATE(:data_termino,'DD/MM/YYYY') 
                AND (TO_DATE(dat_inicio_afast,'DD/MM/YYYY')  >= TO_DATE(:data_inicio,'DD/MM/YYYY') OR TO_DATE(dat_inicio_afast,'DD/MM/YYYY') IS NULL)
                AND (TO_DATE(dat_termino_afast,'DD/MM/YYYY') <= TO_DATE(:data_termino,'DD/MM/YYYY') OR TO_DATE(dat_termino_afast,'DD/MM/YYYY') IS NULL)
                UNION ALL 
                SELECT * FROM VW_PIT_TP_ATIVIDADES_3 
                WHERE 
                TO_DATE(dat_inicio,'DD/MM/YYYY')  >= TO_DATE(:data_inicio,'DD/MM/YYYY')
                AND TO_DATE(dat_termino,'DD/MM/YYYY') <= TO_DATE(:data_termino,'DD/MM/YYYY') 
                AND (TO_DATE(dat_inicio_afast,'DD/MM/YYYY')  >= TO_DATE(:data_inicio,'DD/MM/YYYY') OR TO_DATE(dat_inicio_afast,'DD/MM/YYYY') IS NULL)
                AND (TO_DATE(dat_termino_afast,'DD/MM/YYYY') <= TO_DATE(:data_termino,'DD/MM/YYYY') OR TO_DATE(dat_termino_afast,'DD/MM/YYYY') IS NULL) ",
                [
                    'data_inicio'  => $this->request['data_inicio'],
                    'data_termino' => $this->request['data_fim']
                ]);
  • You can accept your own answer to the correct Stackoverflow accounts that this question has a solution

Browser other questions tagged

You are not signed in. Login or sign up in order to post.