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);
// }
}