FIX: relación municipality con modules
This commit is contained in:
parent
7a5bf3a2a0
commit
dd2b3211db
@ -21,16 +21,17 @@ class ModuleController extends Controller
|
|||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$query = Module::query('responsible')->withCount(['packages']);
|
$query = Module::with(['responsible', 'municipality'])->withCount(['packages']);
|
||||||
|
|
||||||
// Filtro por nombre
|
// Filtro por nombre
|
||||||
if ($request->filled('name')) {
|
if ($request->filled('name')) {
|
||||||
$query->where('name', 'like', '%' . $request->input('name') . '%');
|
$query->where('name', 'like', '%' . $request->input('name') . '%');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filtro por municipio
|
|
||||||
if ($request->filled('municipality')) {
|
if ($request->filled('municipality')) {
|
||||||
$query->where('municipality', 'like', '%' . $request->input('municipality') . '%');
|
$query->whereHas('municipality', function ($q) use ($request) {
|
||||||
|
$q->where('name', 'like', '%' . $request->input('municipality') . '%');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cargar relaciones para contar
|
// Cargar relaciones para contar
|
||||||
@ -54,7 +55,11 @@ public function index(Request $request)
|
|||||||
'name' => $module->responsible->full_name,
|
'name' => $module->responsible->full_name,
|
||||||
'email' => $module->responsible->email,
|
'email' => $module->responsible->email,
|
||||||
] : null,
|
] : null,
|
||||||
'municipality' => $module->municipality,
|
'municipality' => $module->municipality ? [
|
||||||
|
'id' => $module->municipality->id,
|
||||||
|
'code' => $module->municipality->code,
|
||||||
|
'name' => $module->municipality->name,
|
||||||
|
] : null,
|
||||||
'address' => $module->address,
|
'address' => $module->address,
|
||||||
'colony' => $module->colony,
|
'colony' => $module->colony,
|
||||||
'cp' => $module->cp,
|
'cp' => $module->cp,
|
||||||
@ -76,7 +81,6 @@ public function index(Request $request)
|
|||||||
'to' => $modules->lastItem(),
|
'to' => $modules->lastItem(),
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return ApiResponse::INTERNAL_ERROR->response([
|
return ApiResponse::INTERNAL_ERROR->response([
|
||||||
'message' => 'Error al listar módulos',
|
'message' => 'Error al listar módulos',
|
||||||
@ -97,7 +101,7 @@ public function store(ModuleStoreRequest $request)
|
|||||||
$module = Module::create([
|
$module = Module::create([
|
||||||
'name' => $request->input('name'),
|
'name' => $request->input('name'),
|
||||||
'responsible_id' => $request->input('responsible_id'),
|
'responsible_id' => $request->input('responsible_id'),
|
||||||
'municipality' => $request->input('municipality'),
|
'municipality_id' => $request->input('municipality_id'),
|
||||||
'address' => $request->input('address'),
|
'address' => $request->input('address'),
|
||||||
'colony' => $request->input('colony'),
|
'colony' => $request->input('colony'),
|
||||||
'cp' => $request->input('cp'),
|
'cp' => $request->input('cp'),
|
||||||
@ -108,12 +112,18 @@ public function store(ModuleStoreRequest $request)
|
|||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
|
$module->load('municipality');
|
||||||
|
|
||||||
return ApiResponse::CREATED->response([
|
return ApiResponse::CREATED->response([
|
||||||
'message' => 'Módulo creado exitosamente',
|
'message' => 'Módulo creado exitosamente',
|
||||||
'module' => [
|
'module' => [
|
||||||
'name' => $module->name,
|
'name' => $module->name,
|
||||||
'responsible_id' => $module->responsible_id,
|
'responsible_id' => $module->responsible_id,
|
||||||
'municipality' => $module->municipality,
|
'municipality' => $module->municipality ? [
|
||||||
|
'id' => $module->municipality->id,
|
||||||
|
'code' => $module->municipality->code,
|
||||||
|
'name' => $module->municipality->name,
|
||||||
|
] : null,
|
||||||
'address' => $module->address,
|
'address' => $module->address,
|
||||||
'colony' => $module->colony,
|
'colony' => $module->colony,
|
||||||
'cp' => $module->cp,
|
'cp' => $module->cp,
|
||||||
@ -123,7 +133,6 @@ public function store(ModuleStoreRequest $request)
|
|||||||
'created_at' => $module->created_at->format('Y-m-d H:i:s'),
|
'created_at' => $module->created_at->format('Y-m-d H:i:s'),
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
return ApiResponse::INTERNAL_ERROR->response([
|
return ApiResponse::INTERNAL_ERROR->response([
|
||||||
@ -148,12 +157,19 @@ public function update(ModuleUpdateRequest $request, int $id)
|
|||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
|
// Cargar la relación actualizada
|
||||||
|
$module->load('municipality');
|
||||||
|
|
||||||
return ApiResponse::OK->response([
|
return ApiResponse::OK->response([
|
||||||
'message' => 'Módulo actualizado exitosamente',
|
'message' => 'Módulo actualizado exitosamente',
|
||||||
'module' => [
|
'module' => [
|
||||||
'name' => $module->name,
|
'name' => $module->name,
|
||||||
'responsible_id' => $module->responsible_id,
|
'responsible_id' => $module->responsible_id,
|
||||||
'municipality' => $module->municipality,
|
'municipality' => $module->municipality ? [
|
||||||
|
'id' => $module->municipality->id,
|
||||||
|
'code' => $module->municipality->code,
|
||||||
|
'name' => $module->municipality->name,
|
||||||
|
] : null,
|
||||||
'address' => $module->address,
|
'address' => $module->address,
|
||||||
'colony' => $module->colony,
|
'colony' => $module->colony,
|
||||||
'cp' => $module->cp,
|
'cp' => $module->cp,
|
||||||
@ -163,7 +179,6 @@ public function update(ModuleUpdateRequest $request, int $id)
|
|||||||
'updated_at' => $module->updated_at->format('Y-m-d H:i:s'),
|
'updated_at' => $module->updated_at->format('Y-m-d H:i:s'),
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
} catch (ModelNotFoundException $e) {
|
} catch (ModelNotFoundException $e) {
|
||||||
return ApiResponse::NOT_FOUND->response([
|
return ApiResponse::NOT_FOUND->response([
|
||||||
'message' => 'Módulo no encontrado',
|
'message' => 'Módulo no encontrado',
|
||||||
@ -206,7 +221,6 @@ public function toggleStatus(int $id)
|
|||||||
'updated_at' => $module->updated_at->format('Y-m-d H:i:s'),
|
'updated_at' => $module->updated_at->format('Y-m-d H:i:s'),
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
} catch (ModelNotFoundException $e) {
|
} catch (ModelNotFoundException $e) {
|
||||||
return ApiResponse::NOT_FOUND->response([
|
return ApiResponse::NOT_FOUND->response([
|
||||||
'message' => 'Módulo no encontrado',
|
'message' => 'Módulo no encontrado',
|
||||||
|
|||||||
@ -16,7 +16,7 @@ public function rules(): array
|
|||||||
return [
|
return [
|
||||||
'name' => ['required', 'string', 'max:255'],
|
'name' => ['required', 'string', 'max:255'],
|
||||||
'responsible_id' => ['required', 'exists:users,id'],
|
'responsible_id' => ['required', 'exists:users,id'],
|
||||||
'municipality' => ['required', 'string', 'max:100'],
|
'municipality_id' => 'required|exists:municipalities,id',
|
||||||
'address' => ['required', 'string', 'max:255'],
|
'address' => ['required', 'string', 'max:255'],
|
||||||
'colony' => ['required', 'string', 'max:100'],
|
'colony' => ['required', 'string', 'max:100'],
|
||||||
'cp' => ['nullable', 'string', 'max:10'],
|
'cp' => ['nullable', 'string', 'max:10'],
|
||||||
@ -32,9 +32,7 @@ public function messages(): array
|
|||||||
'name.required' => 'El nombre del módulo es requerido',
|
'name.required' => 'El nombre del módulo es requerido',
|
||||||
'name.string' => 'El nombre debe ser una cadena de texto',
|
'name.string' => 'El nombre debe ser una cadena de texto',
|
||||||
'name.max' => 'El nombre no debe superar los 255 caracteres',
|
'name.max' => 'El nombre no debe superar los 255 caracteres',
|
||||||
'municipality.required' => 'El municipio es requerido',
|
'municipality_id.required' => 'El municipio es requerido',
|
||||||
'municipality.string' => 'El municipio debe ser una cadena de texto',
|
|
||||||
'municipality.max' => 'El municipio no debe superar los 100 caracteres',
|
|
||||||
'address.required' => 'La dirección es requerida',
|
'address.required' => 'La dirección es requerida',
|
||||||
'address.string' => 'La dirección debe ser una cadena de texto',
|
'address.string' => 'La dirección debe ser una cadena de texto',
|
||||||
'address.max' => 'La dirección no debe superar los 255 caracteres',
|
'address.max' => 'La dirección no debe superar los 255 caracteres',
|
||||||
|
|||||||
@ -12,7 +12,7 @@ class Module extends Model
|
|||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'name',
|
'name',
|
||||||
'responsible_id',
|
'responsible_id',
|
||||||
'municipality',
|
'municipality_id',
|
||||||
'address',
|
'address',
|
||||||
'colony',
|
'colony',
|
||||||
'cp',
|
'cp',
|
||||||
@ -30,6 +30,11 @@ protected function casts(): array
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function municipality()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Municipality::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function devices()
|
public function devices()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Device::class, 'device_module')
|
return $this->belongsTo(Device::class, 'device_module')
|
||||||
|
|||||||
@ -19,4 +19,9 @@ class Municipality extends Model
|
|||||||
'code',
|
'code',
|
||||||
'name',
|
'name',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function modules()
|
||||||
|
{
|
||||||
|
return $this->hasMany(Module::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('modules', function (Blueprint $table) {
|
||||||
|
// Eliminar la columna antigua
|
||||||
|
$table->dropColumn('municipality');
|
||||||
|
|
||||||
|
// Agregar la nueva columna con foreign key
|
||||||
|
$table->foreignId('municipality_id')
|
||||||
|
->nullable()
|
||||||
|
->constrained('municipalities')
|
||||||
|
->onDelete('set null');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('modules', function (Blueprint $table) {
|
||||||
|
$table->dropForeign(['municipality_id']);
|
||||||
|
$table->dropColumn('municipality_id');
|
||||||
|
$table->string('municipality');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -16,7 +16,7 @@ public function run(): void
|
|||||||
$modules = [
|
$modules = [
|
||||||
[
|
[
|
||||||
'name' => 'MODULO PARQUE LA CHOCA',
|
'name' => 'MODULO PARQUE LA CHOCA',
|
||||||
'municipality' => '4',
|
'municipality_id' => 4,
|
||||||
'address' => 'CIRCUITO CARLOS PELLICER S/N JUNTO A PLAZA MALLORCA ESTACIONAMIENTO DEL PARQUE LA CHOCA',
|
'address' => 'CIRCUITO CARLOS PELLICER S/N JUNTO A PLAZA MALLORCA ESTACIONAMIENTO DEL PARQUE LA CHOCA',
|
||||||
'colony' => 'CENTRO',
|
'colony' => 'CENTRO',
|
||||||
'cp' => null,
|
'cp' => null,
|
||||||
@ -26,7 +26,7 @@ public function run(): void
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'name' => 'MODULO FINANZAS BASE 4',
|
'name' => 'MODULO FINANZAS BASE 4',
|
||||||
'municipality' => '4',
|
'municipality_id' => 4,
|
||||||
'address' => 'AV. RUIZ CORTINES S/N',
|
'address' => 'AV. RUIZ CORTINES S/N',
|
||||||
'colony' => 'CASA BLANCA',
|
'colony' => 'CASA BLANCA',
|
||||||
'cp' => null,
|
'cp' => null,
|
||||||
@ -36,7 +36,7 @@ public function run(): void
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'name' => 'MODULO CARDENAS',
|
'name' => 'MODULO CARDENAS',
|
||||||
'municipality' => '2',
|
'municipality_id' => 2,
|
||||||
'address' => 'ANILLO PERIFERICO CARLOS MOLINA S/N',
|
'address' => 'ANILLO PERIFERICO CARLOS MOLINA S/N',
|
||||||
'colony' => 'SANTA MARIA DE GUADALUPE',
|
'colony' => 'SANTA MARIA DE GUADALUPE',
|
||||||
'cp' => null,
|
'cp' => null,
|
||||||
@ -46,7 +46,7 @@ public function run(): void
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'name' => 'MODULO PASEO DE LA SIERRA',
|
'name' => 'MODULO PASEO DE LA SIERRA',
|
||||||
'municipality' => '4',
|
'municipality_id' => 4,
|
||||||
'address' => ' AV. PASEO DE LA SIERRA #435 COL. REFORMA, C.P. 86080 VILLAHERMOSA, TABASCO,',
|
'address' => ' AV. PASEO DE LA SIERRA #435 COL. REFORMA, C.P. 86080 VILLAHERMOSA, TABASCO,',
|
||||||
'colony' => 'REFORMA',
|
'colony' => 'REFORMA',
|
||||||
'cp' => null,
|
'cp' => null,
|
||||||
@ -56,7 +56,7 @@ public function run(): void
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'name' => 'CENTRO DE ACTIVACION COMALCALCO',
|
'name' => 'CENTRO DE ACTIVACION COMALCALCO',
|
||||||
'municipality' => '5',
|
'municipality_id' => 5,
|
||||||
'address' => 'MONSERRAT #5',
|
'address' => 'MONSERRAT #5',
|
||||||
'colony' => 'SANTO DOMINGO',
|
'colony' => 'SANTO DOMINGO',
|
||||||
'cp' => null,
|
'cp' => null,
|
||||||
@ -66,7 +66,10 @@ public function run(): void
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
foreach ($modules as $module) {
|
foreach ($modules as $module) {
|
||||||
Module::create($module);
|
Module::updateOrCreate(
|
||||||
|
['name' => $module['name']], // Buscar por nombre
|
||||||
|
$module // Actualizar o crear con estos datos
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user