Sindbad~EG File Manager

Current Path : /var/www/html/eddacademiach.sumar.com.py/app/Http/Controllers/
Upload File :
Current File : /var/www/html/eddacademiach.sumar.com.py/app/Http/Controllers/FormularioController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Competencia;
use App\Models\Asignacion;
use App\Models\Evaluacion;
use App\Models\Interrogante;
use App\Models\Respuesta;
use DB;
use Session;
use Illuminate\Support\Facades\Redirect;
use Auth;

class FormularioController extends Controller{

    public function create($id) {

        $asignacion=DB::table('asignacions as a')
            ->join('users as u','a.evaluador_id','u.id')
            ->join('users as us','a.evaluado_id','us.id')
            ->join('evaluacions as e','a.evaluacion_id','e.id')
            ->join('empresas as em','a.empresa_id','em.id')
            ->select('a.*','a.asi_estado as estado','e.eva_informe as informe','u.id as evaluador_id','u.name as evaluador','us.id as evaluado_id','us.name as evaluado','e.eva_nombre as evaluacion','e.eva_descripcion as info','e.eva_autoevaluacion')
            ->where('a.id',$id)->first();
        $totalinput=DB::table('interrogantes as i')
            ->join('competencias as c','i.competencia_id','c.id')
            ->join('evaluacions as e','c.evaluacion_id','e.id')
            ->join('asignacions as a','a.evaluacion_id','e.id')
            ->where('a.id',$id)->where('i.int_tipo',3)->where('i.int_grafico',1)->where('int_estado',1)->count();

        $competencias=Competencia::where('evaluacion_id',$asignacion->evaluacion_id)->get();

        $competencialista = DB::table('competencias as c')
        ->join('interrogantes as i', 'c.id', '=', 'i.competencia_id')
        ->select(
            'c.id', // Traemos el ID de las competencias
            'c.com_nom', 
            // Para tipo 1 (numérico)
            DB::raw('SUM(CASE WHEN i.int_tipo = 1 THEN i.int_fin ELSE 0 END) as total_puntos'),
            
            // Para tipo 3 (opciones)
            DB::raw('GROUP_CONCAT(
                CASE 
                    WHEN i.int_tipo = 3 AND i.int_grafico = 1 THEN
                        CONCAT(
                            CASE 
                                WHEN i.int_opcion1_punto IS NOT NULL THEN i.int_opcion1
                                WHEN i.int_opcion2_punto IS NOT NULL THEN i.int_opcion2
                                WHEN i.int_opcion3_punto IS NOT NULL THEN i.int_opcion3
                                WHEN i.int_opcion4_punto IS NOT NULL THEN i.int_opcion4
                                WHEN i.int_opcion5_punto IS NOT NULL THEN i.int_opcion5
                                WHEN i.int_opcion6_punto IS NOT NULL THEN i.int_opcion6
                                WHEN i.int_opcion7_punto IS NOT NULL THEN i.int_opcion7
                                WHEN i.int_opcion8_punto IS NOT NULL THEN i.int_opcion8
                                WHEN i.int_opcion9_punto IS NOT NULL THEN i.int_opcion9
                                WHEN i.int_opcion10_punto IS NOT NULL THEN i.int_opcion10
                            END
                        )
                    WHEN i.int_tipo = 3 AND i.int_grafico = 0 THEN NULL
                    ELSE NULL
                END
                SEPARATOR "||"
            ) as respuestas_tipo3'),
            
            // Para tipo 4 (múltiple con comentario)
            DB::raw('GROUP_CONCAT(
                CASE 
                    WHEN i.int_tipo = 4 THEN NULL
                    ELSE NULL
                END
                SEPARATOR "||"
            ) as respuestas_tipo4'),
            
            // Para otros tipos (excluyendo tipo 2)
            DB::raw('GROUP_CONCAT(
                CASE 
                    WHEN i.int_tipo NOT IN (1,2,3,4) THEN NULL
                    ELSE NULL
                END
                SEPARATOR "||"
            ) as otras_respuestas')
        )
        ->where('c.evaluacion_id', $asignacion->evaluacion_id)
        ->where('i.int_estado', 1)
        ->where('c.com_estado', 1)
        ->where('i.int_tipo', '!=', 2) // Excluir tipo 2
        ->groupBy('c.id', 'c.com_nom') // Agrupamos por ID y nombre de la competencia
        ->orderBy('c.id') // Ordenar por ID de menor a mayor
        ->get();

        //dd($competencialista , $competencias);
        return view('admin.formulario.create',[
            "asignacion"=>$asignacion,
            'competencias'=>$competencias,
            "totalinput"=>$totalinput,
            "competencialista"=>$competencialista
        ]);
    }

    public function edit($id) {

        $asignacion=DB::table('asignacions as a')
            ->join('users as u','a.evaluador_id','u.id')
            ->join('users as us','a.evaluado_id','us.id')
            ->join('evaluacions as e','a.evaluacion_id','e.id')
            ->join('empresas as em','a.empresa_id','em.id')
            ->select('a.id','a.asi_estado as estado','u.id as evaluador_id','u.name as evaluador','us.id as evaluado_id','us.name as evaluado','e.eva_nombre as evaluacion','e.eva_descripcion as info','a.evaluacion_id','a.updated_at as fecha_evaluacion')
            ->where('a.id',$id)->first();

        $competencias=Competencia::where('evaluacion_id',$asignacion->evaluacion_id)->get();

        return view('admin.formulario.edit',["asignacion"=>$asignacion,'competencias'=>$competencias]);
    }

    public function store(Request $request) {
        $asignacion = Asignacion::findOrFail($request->asignacion_id);

        $evaluacion = Evaluacion::findOrFail($asignacion->evaluacion_id);

        $competencias=Competencia::where('evaluacion_id',$asignacion->evaluacion_id)->where('com_estado',1)->get();

        foreach ($competencias as $com) {

            $interrogantes=Interrogante::where('competencia_id',$com->id)->where('int_estado',1)->get();
            
            foreach ($interrogantes as $int){

                $cargarespuesta = 'respuesta'.$int->id;
                $cargarespuesta2 = 'respuesta2'.$int->id;

                if($int->int_tipo == 4 && $asignacion->evaluador_id == Auth::user()->id){

                    $respuesta=new Respuesta;

                        $respuesta->asignacion_id = $request->asignacion_id;
                        $respuesta->interrogante_id = $int->id;
                        $respuesta->respuesta = serialize($request->$cargarespuesta);
                        $respuesta->respuesta2 = $request->$cargarespuesta2;
                        $respuesta->usuario_id = Auth::user()->id;

                    $respuesta->save();

                }elseif($int->int_tipo == 1){

                    $respuesta=new Respuesta;

                        $respuesta->asignacion_id = $request->asignacion_id;
                        $respuesta->interrogante_id = $int->id;
                        $respuesta->respuesta = $request->$cargarespuesta;
                        $respuesta->usuario_id = Auth::user()->id;

                    $respuesta->save();

                }elseif($int->int_tipo == 2 && $asignacion->evaluador_id == Auth::user()->id){

                    $respuesta=new Respuesta;

                        $respuesta->asignacion_id = $request->asignacion_id;
                        $respuesta->interrogante_id = $int->id;
                        $respuesta->respuesta = $request->$cargarespuesta;
                        $respuesta->usuario_id = Auth::user()->id;

                    $respuesta->save();

                }elseif($int->int_tipo == 3){

                    $respuesta=new Respuesta;

                        $respuesta->asignacion_id = $request->asignacion_id;
                        $respuesta->interrogante_id = $int->id;
                        $respuesta->respuesta = $request->$cargarespuesta;
                        $respuesta->usuario_id = Auth::user()->id;

                    $respuesta->save();

                }

                
            }

        }

        if($asignacion->evaluador_id == Auth::user()->id){
            if($asignacion->asi_estado == 1){
                $asignacion->asi_estado = 3;
            }else{
                $asignacion->asi_estado = 2;
            }
        }else{
            if($evaluacion->eva_autoevaluacion){
                if($asignacion->asi_estado == 1){
                    $asignacion->asi_estado = 3;
                }else{
                    $asignacion->asi_estado = 2;
                }
            }else{
                if($asignacion->asi_estado == 2){
                    $asignacion->asi_estado = 3;
                }else{
                    $asignacion->asi_estado = 1; 
                }
            }
        }

        if ($asignacion->update()) {
            Session::flash('success', '¡Formulario guardado correctamente!');
        }

        return Redirect::to('/admin/evaluar');
    }

    public function update(Request $request, $id) {

        $respuestas = Respuesta::where('asignacion_id',$id)->where('usuario_id',Auth::user()->id)->get();

        foreach($respuestas as $value){
            $value->delete();
        }

        $asignacion = Asignacion::findOrFail($request->asignacion_id);

        $competencias=Competencia::where('evaluacion_id',$asignacion->evaluacion_id)->where('com_estado',1)->get();

        foreach ($competencias as $com) {

            $interrogantes=Interrogante::where('competencia_id',$com->id)->where('int_estado',1)->get();
            
            foreach ($interrogantes as $int){

                $cargarespuesta = 'respuesta'.$int->id;
                $cargarespuesta2 = 'respuesta2'.$int->id;

                if($int->int_tipo == 4 && $asignacion->evaluador_id == Auth::user()->id){

                    $respuesta=new Respuesta;

                        $respuesta->asignacion_id = $request->asignacion_id;
                        $respuesta->interrogante_id = $int->id;
                        $respuesta->respuesta = serialize($request->$cargarespuesta);
                        $respuesta->respuesta2 = $request->$cargarespuesta2;
                        $respuesta->usuario_id = Auth::user()->id;

                    $respuesta->save();

                }elseif($int->int_tipo == 1){

                    $respuesta=new Respuesta;

                        $respuesta->asignacion_id = $request->asignacion_id;
                        $respuesta->interrogante_id = $int->id;
                        $respuesta->respuesta = $request->$cargarespuesta;
                        $respuesta->usuario_id = Auth::user()->id;

                    $respuesta->save();

                }elseif($int->int_tipo == 2 && $asignacion->evaluador_id == Auth::user()->id){

                    $respuesta=new Respuesta;

                        $respuesta->asignacion_id = $request->asignacion_id;
                        $respuesta->interrogante_id = $int->id;
                        $respuesta->respuesta = $request->$cargarespuesta;
                        $respuesta->usuario_id = Auth::user()->id;

                    $respuesta->save();

                }elseif($int->int_tipo == 3){

                    $respuesta=new Respuesta;

                        $respuesta->asignacion_id = $request->asignacion_id;
                        $respuesta->interrogante_id = $int->id;
                        $respuesta->respuesta = $request->$cargarespuesta;
                        $respuesta->usuario_id = Auth::user()->id;

                    $respuesta->save();

                }

                
            }

        }

        if($asignacion->evaluador_id == Auth::user()->id){
            if($asignacion->asi_estado == 1){
                $asignacion->asi_estado = 3;
            }else{
                $asignacion->asi_estado = 2;
            }
        }else{
            if($asignacion->asi_estado == 2){
                $asignacion->asi_estado = 3;
            }else{
                $asignacion->asi_estado = 1;
            }
        }

        if ($asignacion->update()) {
            Session::flash('success', '¡Formulario guardado correctamente!');
        }

        return Redirect::to('admin/evaluar');
    }

    public function show($id) {

        $asignacion=DB::table('asignacions as a')
            ->join('users as u','a.evaluador_id','u.id')
            ->join('users as us','a.evaluado_id','us.id')
            ->join('evaluacions as e','a.evaluacion_id','e.id')
            ->join('empresas as em','a.empresa_id','em.id')
            ->select('a.*','e.eva_informe as informe','u.name as evaluador','u.puesto as cargoevaluador',
		        'us.name as evaluado','us.area','us.puesto','us.ingreso','us.ingresocargo',
		        'e.eva_nombre as evaluacion','us.id as evaluadooo_id','e.eva_autoevaluacion','a.updated_at as fecha_evaluacion')
                ->where('a.id',$id)->first();

        $competencias=Competencia::where('evaluacion_id',$asignacion->evaluacion_id)
            ->where('com_estado',1)->get();
        $total = 0;
        $sumainput = 0;
        $totalinput=0;
        $asignacionid=$asignacion->id;
        
        $competencialista = DB::table('competencias as c')
            ->join('interrogantes as i', 'c.id', 'i.competencia_id')
            ->leftJoin('respuestas as r', function($join) use ($asignacionid) {
                $join->on('i.id', '=', 'r.interrogante_id')
                    ->where('r.asignacion_id', '=', $asignacionid);
            })
            ->select('c.com_nom',
                // Para tipo 1 (numérico)
                DB::raw('SUM(CASE WHEN i.int_tipo = 1 THEN i.int_fin ELSE 0 END) as total_puntos'),
                DB::raw('SUM(CASE WHEN i.int_tipo = 1 AND r.respuesta != "N/A" THEN CAST(r.respuesta AS DECIMAL(10,2)) ELSE 0 END) as puntos_alcanzados'),
                
                // Para tipo 3 (opciones) - Total puntos y respuestas
                DB::raw('SUM(CASE WHEN i.int_tipo = 3 THEN 
                    GREATEST(
                        COALESCE(i.int_opcion1_punto, 0),
                        COALESCE(i.int_opcion2_punto, 0),
                        COALESCE(i.int_opcion3_punto, 0),
                        COALESCE(i.int_opcion4_punto, 0),
                        COALESCE(i.int_opcion5_punto, 0),
                        COALESCE(i.int_opcion6_punto, 0),
                        COALESCE(i.int_opcion7_punto, 0),
                        COALESCE(i.int_opcion8_punto, 0),
                        COALESCE(i.int_opcion9_punto, 0),
                        COALESCE(i.int_opcion10_punto, 0)
                    )
                    ELSE 0 END) as total_puntos_tipo3'),
                DB::raw('GROUP_CONCAT(
                    CASE 
                        WHEN i.int_tipo = 3 THEN r.respuesta
                        ELSE NULL
                    END
                    SEPARATOR "||"
                ) as respuestas_tipo3'),
                
                // Para tipo 4 (múltiple con comentario)
                DB::raw('GROUP_CONCAT(
                    CASE 
                        WHEN i.int_tipo = 4 THEN 
                            CONCAT(r.respuesta, "###", COALESCE(r.respuesta2, ""))
                        ELSE NULL
                    END
                    SEPARATOR "||"
                ) as respuestas_tipo4'),
                
                // Para otros tipos (excluyendo tipo 2)
                DB::raw('GROUP_CONCAT(
                    CASE 
                        WHEN i.int_tipo NOT IN (1,2,3,4) THEN r.respuesta
                        ELSE NULL
                    END
                    SEPARATOR "||"
                ) as otras_respuestas'))
            ->where('c.evaluacion_id', $asignacion->evaluacion_id)
            ->where('i.int_estado', 1)
            ->where('c.com_estado', 1)
            ->where('i.int_tipo', '!=', 2)  // Excluimos tipo 2
            ->groupBy('c.com_nom')
            ->orderBy('c.com_nom')
            ->get();
        //dd($competencialista);
        
        $interrogantes = DB::table('interrogantes as i')
    		->join('competencias as c','i.competencia_id','c.id')
    		->select('i.*','c.com_nom')
            ->where('c.evaluacion_id',$asignacion->evaluacion_id)
    		->where('i.int_estado',1)
            ->where('c.com_estado',1)
    		->get();

        foreach ($interrogantes as $int) {
            if($asignacion->eva_autoevaluacion){
                $respuesta = Respuesta::where('interrogante_id',$int->id)
                    ->where('asignacion_id',$id)
                    ->where('usuario_id',$asignacion->evaluado_id)->first();
            }else{
                $respuesta = Respuesta::where('interrogante_id',$int->id)
                    ->where('asignacion_id',$id)
                    ->where('usuario_id',$asignacion->evaluador_id)->first();
            }
            if($respuesta){
                if ($int->int_tipo == 1 && $respuesta->respuesta != "N/A") { 
                    $total+=$respuesta->respuesta;
                }

                if ($int->int_tipo == 3 && $int->int_grafico == 1) {
                    $total+=$respuesta->respuesta;
                }

                if ($int->int_tipo == 1 || $int->int_tipo == 3) {
                    $totalinput+=1;
                }
            }

        }
        

        return view('admin.formulario.show',[
            "sumainput"=>$total,
            "totalinput"=>$totalinput,
		    "asignacion"=>$asignacion,
            'competencias'=>$competencias,
            "total"=>$total,
            "competencialista"=>$competencialista,
        ]);
    }

    public function show2($id) {

        $asignacion=DB::table('asignacions as a')
            ->join('users as u','a.evaluador_id','u.id')
            ->join('users as us','a.evaluado_id','us.id')
            ->join('evaluacions as e','a.evaluacion_id','e.id')
            ->join('empresas as em','a.empresa_id','em.id')
            ->select('a.id','a.asi_estado as estado','u.name as evaluador','u.puesto','u.ingreso','us.name as evaluado','e.eva_nom as evaluacion','a.evaluacion_id','us.id as evaluado_id','a.updated_at as fecha_evaluacion')
            ->where('a.id',$id)->first();

        $competencias=Competencia::where('evaluacion_id',$asignacion->evaluacion_id)->get();

        $nombres = [];
        $estadisticas = [];
        $estadisticas2 = [];
        $total = [];
        $feckback = [];
        foreach($competencias as $com){

            $interrogantes=Interrogante::where('competencia_id',$com->id)->where('int_estado',1)->orderBy('int_ubicacion','asc')->get();

            $envio=0;
            $contador=0;

            foreach ($interrogantes as $int) {
                $respuesta = Respuesta::where('interrogante_id',$int->id)->where('asignacion_id',$id)->first();

                if ($int->int_tipo == 1 && $respuesta->respuesta != "N/A") {
                    $envio+=intval($respuesta->respuesta);
                    $contador+=1;
                }else{
                    $feckback[] = $respuesta->respuesta;
                }

            }

            if ($envio != 0) {

                $totalpuntos=intval($com->int_fin)*$contador;

                $estadisticas2[] = $envio;

                $envio=intval(($envio*100)/$totalpuntos);
                
                $nombres[] = $com->int_nom;

                $total[] = $totalpuntos;
            }

            $estadisticas[] = $envio;
            
        }

        

        return view('admin.formulario.show2',[
            "asignacion"=>$asignacion,
            'competencias'=>$competencias,
            'nombres2'=>$nombres,
            "nombres"=>json_encode($nombres,JSON_NUMERIC_CHECK),
            "estadisticas"=>json_encode($estadisticas,JSON_NUMERIC_CHECK),
            "estadisticas3"=>$estadisticas,
            "feckback"=>$feckback,
            "estadisticas2"=>$estadisticas2,
            "total"=>$total]);
    }
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists