HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux Bradford-Sitios 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: www-data (33)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/gestion-formularios.bdfschool/app/Http/Controllers/ParentsController.php
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\Parents;
use App\Models\Students;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class ParentsController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth.users')->except('logout');
        $this->middleware('auth.users:LIST_PARENTS')->only(['index']);
        $this->middleware('auth.users:ADD_PARENTS')->only(['create', 'store']);
        $this->middleware('auth.users:EDIT_PARENTS')->only(['edit', 'update']);
        $this->middleware('auth.users:CANCEL_PARENTS')->only(['destroy']);
    }
    public function index()
    {
        $sidenav = 'parents';
        $sidenav_item = 'parents_list';
        $title = 'Gestión de Apoderados';
        $title_table = 'Listado de Apoderados';
        $list_data = Parents::where('deleted', false)->get();


        foreach ($list_data as $parent) {
            $explode_name = explode(' ', $parent->first_name);
            if (count($explode_name) > 1) {
                $first_name = $explode_name[0];
                unset($explode_name[0]);

                $second_name = '';
                foreach ($explode_name as $key => $value) {
                    $second_name .= $value . ' ';
                }
                $parent->first_name = strCapital($first_name);
                $parent->second_name = strCapital($second_name);
                $parent->save();
            }
        }

        return view('admin.parents.parents_list', compact(
            'title',
            'sidenav',
            'sidenav_item',
            'title_table',
            'list_data'
        ));
    }

    public function create()
    {
        $sidenav = 'parents';
        $sidenav_item = 'parents_new';
        $title = 'Nuevo Apoderado';
        $title_form = 'Formulario de Registro de Apoderado';

        return view(
            'admin.parents.parents_new',
            compact(
                'title',
                'sidenav',
                'sidenav_item',
                'title_form'
            )
        );
    }

    public function store(Request $request)
    {
        $this->validateData($request);

        $rut = null;
        if (!empty($request->rut)) {
            $this->validate($request, [
                'rut' => 'min:11|max:13',
            ], [
                'rut.min' => 'Rut debe tener Mínimo 11 Caracteres',
                'rut.max' => 'Rut debe tener Máximo 13 Caracteres',
            ]);
            $rut = trim($request->rut);
            $rut = str_replace('.', '', $rut);
            if (!validateRut($rut)) {
                return back()->with(['danger_message' => 'Rut posee formato inválido'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
            }

            $validate_rut = Parents::where('rut', $rut)->where('deleted', false)->first();
            if (!empty($validate_rut)) {
                return back()->with(['danger_message' => 'Rut ya existe en nuestros registros'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
            }
        }

        $user_register = $this->createOrUpdate($request, '');
        if ($user_register > 0) {
            return redirect(route('parents'))->with(['success_message' => 'Apoderado Creado Correctamente'])->with(['success_message_title' => 'GESTIÓN DE APODERADOS']);
        }
        return back()->with(['danger_message' => 'Ha Ocurrido un error al crear. Intente Nuevamente'])->with(['danger_message_title' => 'ERROR INTERNO'])->withInput();
    }

    public function edit($register_id)
    {
        $form_data = $this->validateExists($register_id);
        if (empty($form_data)) {
            return redirect(route('parents'))->with(['danger_message' => 'Registro No existe o fue Eliminado'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
        }
        $sidenav = 'parents';
        $sidenav_item = 'parents_list';
        $title = 'Editar Apoderado';
        $title_form = 'Formulario de Edición de Apoderado';
        return view(
            'admin.parents.parents_edit',
            compact(
                'title',
                'sidenav',
                'sidenav_item',
                'title_form',
                'form_data'
            )
        );
    }

    public function update(Request $request, $register_id)
    {
        $register_data = $this->validateExists($register_id);
        if (empty($register_data)) {
            return redirect(route('parents'))->with(['danger_message' => 'Registro No existe o fue Eliminado'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
        }
        $this->validateData($request);

        $rut = null;
        if (!empty($request->rut)) {
            $this->validate($request, [
                'rut' => 'min:11|max:13',
            ], [
                'rut.min' => 'Rut debe tener Mínimo 11 Caracteres',
                'rut.max' => 'Rut debe tener Máximo 13 Caracteres',
            ]);
            $rut = trim($request->rut);
            $rut = str_replace('.', '', $rut);
            if (!validateRut($rut)) {
                return back()->with(['danger_message' => 'Rut posee formato inválido'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
            }

            $validate_rut = Parents::where('rut', $rut)->where('deleted', false)->where('id', '!=', $register_id)->first();
            if (!empty($validate_rut)) {
                return back()->with(['danger_message' => 'Rut ya existe en nuestros registros'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
            }
        }

        $register_data = $this->createOrUpdate($request, $register_data);
        if ($register_data > 0) {
            return redirect(route('parents'))->with(['success_message' => 'Apoderado Modificado Correctamente'])->with(['success_message_title' => 'GESTIÓN DE APODERADOS']);
        }
        return back()->with(['danger_message' => 'Ha Ocurrido un error al modificar. Intente Nuevamente'])->with(['danger_message_title' => 'ERROR INTERNO'])->withInput();
    }

    private function validateData(Request $request)
    {
        $this->validate($request, [
            'rut' => 'required',
            'first_name' => 'required|min:3|max:100',
            'last_name' => 'required|min:3|max:100',
            'email' => 'required',
        ], [
            'rut.required' => 'Rut Requerido',
            'first_name.required' => 'Primer Nombre Requerido',
            'first_name.min' => 'Primer Nombre debe tener Mínimo 3 Caracteres',
            'first_name.max' => 'Primer Nombre debe tener Máximo 100 Caracteres',

            'last_name.required' => 'Primer Apellido Requerido',
            'last_name.min' => 'Primer Apellido debe tener Mínimo 3 Caracteres',
            'last_name.max' => 'Primer Apellido debe tener Máximo 100 Caracteres',
            'email.required' => 'Correo electrónico Requerido',

        ]);
    }

    private function validateExists($register_id)
    {
        $error = false;
        if (!is_numeric($register_id)) {
            $error = true;
        }

        $register_data = [];
        if (!$error) {
            $register_data = Parents::where('deleted', false)->where('id', $register_id)->first();
            if (empty($register_data)) {
                $error = true;
            }
        }

        return $register_data;
    }

    private function createOrUpdate(Request $request, $register_data = '')
    {
        try {
            if (empty($register_data)) {
                $register_data = new Parents();
                $register_data->created_at =  ahoraServidor();
                $register_data->user_created = auth()->user()->id;
            }

            $register_data->rut = str_replace('.', '', $request->rut);
            $register_data->first_name =  strCapital($request->first_name);
            $register_data->second_name =  strCapital($request->second_name);
            $register_data->last_name =  strCapital($request->last_name);
            $register_data->second_last_name =  strCapital($request->second_last_name);
            $register_data->email = strLower($request->email);
            $register_data->mobile = !empty($request->mobile) ? $request->mobile : null;
            $register_data->status = isset($request->status) ? ($request->status == 1 ? true : false) : true;
            $register_data->financial_parent = isset($request->financial_parent) ? ($request->financial_parent == 1 ? true : false) : false;
            $register_data->academic_parent  = isset($request->academic_parent ) ? ($request->academic_parent  == 1 ? true : false) : false;
            $register_data->updated_at =  ahoraServidor();
            $register_data->user_updated = auth()->user()->id;
            return $register_data->save() ? $register_data->id : 0;
        } catch (Exception $e) {
            return $e->getMessage();
        }
    }

    public function destroy(Request $request)
    {
        $this->validate($request, [
            'id_modal' => 'required',
        ], [
            'id_modal.required' => 'Id de registro Requerido',
        ]);

        $register_data = $this->validateExists($request->id_modal);
        if (empty($register_data)) {
            return redirect(route('parents'))->with(['danger_message' => 'Registro No existe o fue Eliminado'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
        }

        $register_data->deleted = true;
        $register_data->deleted_at =  ahoraServidor();
        $register_data->user_deleted = auth()->user()->id;
        if ($register_data->save()) {
            return redirect(route('parents'))->with(['success_message' => 'Apoderado Eliminado Correctamente'])->with(['success_message_title' => 'GESTIÓN DE APODERADOS']);
        }
        return back()->with(['danger_message' => 'Ha Ocurrido un error al eliminar. Intente Nuevamente'])->with(['danger_message_title' => 'ERROR INTERNO']);
    }

    // public function get_parents_by_students(Request $request)
    // {

    //     if (!isset($request->student_id) || !is_numeric($request->student_id) || $request->student_id < 0) {
    //         return sendResponse('error', "No se encontró ID de estudiante");
    //     }

    //     $html = '';
    //     $student = Students::find($request->student_id);
    //     if (!$student) {
    //         return sendResponse('error', "Estudiante no encontrado");
    //     }

    //     $parent_ids = array_unique([
    //         $student->parent_id,
    //         $student->parent_academic_id
    //     ]);

    //     $parents = Parents::whereIn('id', $parent_ids)->get();

    //     if ($parents->isEmpty()) {
    //         return sendResponse('error', "No se encontraron apoderados");
    //     }

    //     // $parent_id = isset($student->parent_id) ? $student->parent_id : 0;
    //     // $parent_academic_id = isset($student->parent_academic_id) ? $student->parent_academic_id : 0;

    //     $parent = Parents::find($student->parent_id);
    //     Log::info("parent: " . $parent);

    //     foreach ($parents as $parent) {
    //         $disabled = $parent->request_id > 0 ? 'disabled' : '';
    //         $name_rut = (!empty($parent->rut) ? formateaRut($parent->rut) : '-') . " | " . 
    //                     (!empty($parent->first_name) ? strCapital($parent->first_name . ' ' . $parent->second_name . ' ' . $parent->last_name . ' ' . $parent->second_last_name) : 'Sin información');

    //         $label = $parent->request_id > 0
    //             ? "<del style='text-decoration-color: red' class='text-muted'>$name_rut</del>"
    //             : $name_rut;

    //         $html .= "
    //             <div class='col-md-6'>
    //                 <div class='form-group'>
    //                     <input type='checkbox' class='checkbox checkbox-parent' name='parent' id='parent_$parent->id' value='$parent->id' $disabled />
    //                     <label for='parent_$parent->id' class='ml-2'>$label" .
    //                     ($parent->request_id > 0 ? " (Solicitud #$parent->request_id)" : "") . "
    //                     </label>
    //                 </div>
    //             </div>";
    //     }

    // return sendResponse('success', 'ok', $html);
    // }
}