<?php

namespace App\Http\Controllers\Reporte;

use App\Model\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;

class TramiteController extends Controller
{

    //Alumno
    public function tramiteporalumno()
    {

        try {

            $alumnos = DB::select(DB::raw("
        
                SELECT DISTINCT a.codigo, u.nombres, u.apellido_paterno, u.apellido_materno, u.id as userid
                FROM usuario u 
                INNER JOIN tramite_usuario tu on u.id = tu.id_usuario
                INNER JOIN tramite_procedimiento tp on tu.id_tramite_procedimiento = tp.id
                INNER JOIN alumno a on u.id = a.id
                WHERE tp.id_tramite_tipo = " . config('constants.TRAMITE_TIPO.TUPA') . "
        
            "));

            return view('pages.reportes.tramites.poralumno', compact('alumnos'));

        } catch (\SQLiteException $e) {
            alert()->error('Ocurrio un inconveniente. Por favor intentelo nuevamente.', 'Uuppsss...')->confirmButton('OK');
        }

    }

    public function tramites($userID)
    {

        try {

            $user = User::find($userID);

            $tramites = DB::select(DB::raw("
        
            SELECT DISTINCT  tu.id,tr.codigo ,tu.id as tupausuarioID ,tp.nombre, tdt.nombre as nombre_dependencia, tp.created_at, tp.plazo_resolucion, tu.id_tramite_usuario_estado as estado
            FROM tramite_procedimiento tp
            INNER JOIN tramite_usuario tu on tp.id = tu.id_tramite_procedimiento
            INNER JOIN tramite_usuario_observacion tuo on tu.id = tuo.id_tramite_usuario
            INNER JOIN tramite_requisito tr on tp.id = tr.id_tramite_procedimiento
            INNER JOIN dependencia_usuario td on tu.id_dependencia = td.id
            INNER JOIN dependencia tdt on td.id_dependencia = tdt.id
            WHERE tp.id_tramite_tipo = " . config('constants.TRAMITE_TIPO.TUPA') . " AND tu.id_usuario = $userID
            ORDER BY tp.created_at DESC
            
        "));

            return view('pages.reportes.tramites.tramite', compact('tramites', 'user'));

        } catch (\SQLiteException $e) {
            alert()->error('Ocurrio un inconveniente. Por favor intentelo nuevamente.', 'Uuppsss...')->confirmButton('OK');
        }

    }

    public function observacionTramite($tupausuarioID)
    {

        try {

            $obs = DB::select(DB::raw("
        
                SELECT * 
                FROM tramite_usuario_observacion tuo
                INNER JOIN tramite_usuario tu on tuo.id_tramite_usuario = tu.id
                INNER JOIN tramite_procedimiento tp on tu.id_tramite_procedimiento = tp.id
                WHERE tuo.id = $tupausuarioID AND tp.id_tramite_tipo = " . config('constants.TRAMITE_TIPO.TUPA') . "
        
            "));

            return view('pages.reportes.tramites.observaciones', compact('obs'));

        } catch (\SQLiteException $e) {
            alert()->error('Ocurrio un inconveniente. Por favor intentelo nuevamente.', 'Uuppsss...')->confirmButton('OK');
        }


    }
    //Fin Alumno

    //--------------------------------------------------------

    //Dependencia
    public function dependencias()
    {

        try {

            $dependencias = DB::table('dependencia_usuario')
                ->join('dependencia', 'dependencia_usuario.id_dependencia', '=', 'dependencia.id')
                ->select('dependencia.nombre', 'dependencia.id')
                ->distinct()
                ->get();

            return view('pages.reportes.tramites.dependencias', compact('dependencias'));

        } catch (\SQLiteException $e) {
            alert()->error('Ocurrio un inconveniente. Por favor intentelo nuevamente.', 'Uuppsss...')->confirmButton('OK');
        }

    }

    public function tramitexdependencia($id_dependencia)
    {

        try {

            $tramites = DB::select(DB::raw("

              SELECT DISTINCT tu.id,tu.id as tupausuarioID,tp.codigo as codigo, tp.nombre,
              concat(u.apellido_paterno,' ',u.apellido_materno,', ',u.nombres) as nombre_completo,
              tp.created_at, tp.plazo_resolucion, tu.id_tramite_usuario_estado as estado 
              FROM tramite_procedimiento tp 
              INNER JOIN tramite_usuario tu on tp.id = tu.id_tramite_procedimiento 
              INNER JOIN tramite_usuario_observacion tuo on tu.id = tuo.id_tramite_usuario 
              INNER JOIN tramite_requisito tr on tp.id = tr.id_tramite_procedimiento 
              INNER JOIN dependencia_usuario td on tu.id_dependencia = td.id 
              INNER JOIN dependencia tdt on td.id_dependencia = tdt.id 
              INNER JOIN usuario u on tu.id_usuario = u.id 
              WHERE tp.id_tramite_tipo = " . config('constants.TRAMITE_TIPO.TUPA') . " AND tdt.id = $id_dependencia
              GROUP BY tu.id ,tp.codigo, tp.plazo_resolucion, tp.nombre, u.apellido_paterno,u.apellido_materno,u.nombres, tp.created_at, tu.id_tramite_usuario_estado
              ORDER BY tp.created_at DESC
            
            "));

            $dependencia = DB::table('dependencia')->find($id_dependencia);

            return view('pages.reportes.tramites.dependenciaxtramite', compact('tramites', 'dependencia'));

        } catch (\SQLiteException $e) {
            alert()->error('Ocurrio un inconveniente. Por favor intentelo nuevamente.', 'Uuppsss...')->confirmButton('OK');
        }

    }
    //Fin Dependencia

    //--------------------------------------------------------

    //Periodo
    public function periodo()
    {

        try {

            $periodo = DB::table('periodo')
                ->select('periodo.nombre', 'periodo.id')
                ->distinct()
                ->get();

            return view('pages.reportes.tramites.periodo', compact('periodo'));

        } catch (\SQLiteException $e) {
            alert()->error('Ocurrio un inconveniente. Por favor intentelo nuevamente.', 'Uuppsss...')->confirmButton('OK');
        }

    }

    public function tramitexperiodo($id_periodo)
    {

        try {


            $periodos = DB::select(DB::raw("
                SELECT DISTINCT
                  p.id as id,
                  p.nombre as nombre,
                  p.fecha_inicio as fecha_inicio,
                  p.fecha_fin as fecha_fin
                FROM periodo p 
                WHERE p.id = $id_periodo
                LIMIT 1
            "));
            $periodo = $periodos[0];
            $fecha_inicio = $periodo->fecha_inicio;
            $fecha_fin = $periodo->fecha_fin;

            $tramites = DB::select(DB::raw("
                SELECT
                tu.id as id,
                tu.id as tupausuarioID,
                tu.folio as folio,
                tu.id_tramite_procedimiento as id_tupa_procedimiento,
                tu.id_dependencia as id_dependencia,
                tu.id_tramite_usuario_estado as id_tupa_usuario_estado,
                tu.id_usuario as id_usuario,
                tu.created_at as created_at,
                tp.codigo as tupa_procedimiento_codigo,
                tp.cuenta_contable as tupa_procedimiento_cuenta_contable,
                tp.nombre as tupa_procedimiento_nombre,
                tp.base_legal as tupa_procedimiento_base_legal,
                tp.plazo_resolucion ,
                tp.id_tramite_categoria as tupa_procedimiento_id_tupa_categoria,
                tp.id_tramite_calificacion as tupa_procedimiento_id_tupa_calificacion,
                tp.id_area_inicio as tupa_procedimiento_id_area_inicio,
                tp.id_autoridad_competente as tupa_procedimiento_id_autoridad_competente,
                d.nombre as dependencia,
                tu.id_tramite_usuario_estado as estado ,
                CONCAT(u.apellido_paterno, \" \", u.apellido_materno, \", \", u.nombres) as usuario_nombres,
                u.email as usuario_email
                FROM tramite_usuario tu
                LEFT JOIN tramite_procedimiento tp
                ON tp.id = tu.id_tramite_procedimiento
                LEFT JOIN dependencia d
                ON d.id = tu.id_dependencia
                LEFT JOIN usuario u
                ON u.id = tu.id_usuario
                WHERE tu.created_at BETWEEN '$fecha_inicio' AND '$fecha_fin' AND tp.id_tramite_tipo = " . config('constants.TRAMITE_TIPO.TUPA') . "
            "));

            return view('pages.reportes.tramites.periodoxtramite', compact('periodo', 'tramites'));

        } catch (\SQLiteException $e) {
            alert()->error('Ocurrio un inconveniente. Por favor intentelo nuevamente.', 'Uuppsss...')->confirmButton('OK');
        }

    }
    //Fin Periodo

    //--------------------------------------------------------

    //Tramite
    public function ingresotupa(){

        $ingresostupa = DB::select(DB::raw('
            SELECT tp.nombre, COUNT(r.id) as cantidad, SUM(r.monto) as monto
            FROM tramite_usuario tu
            INNER JOIN tramite_procedimiento tp on tu.id_tramite_procedimiento = tp.id
            INNER JOIN recibo r on tu.id_recibo = r.id
            WHERE tp.id_tramite_tipo = ' . config('constants.TRAMITE_TIPO.TUPA') . ' AND r.anulado = 0
            GROUP BY tp.nombre
        '));

        return view('pages.reportes.tesoreria.indexingresotupa',compact('ingresostupa'));
    }
    //Fin Tramite
}
