fix: ajustar el filtrado de registros por módulo del usuario

This commit is contained in:
Juan Felipe Zapata Moreno 2026-02-16 12:48:29 -06:00
parent 2093ff7538
commit 43269ca04a
2 changed files with 35 additions and 23 deletions

View File

@ -9,7 +9,6 @@
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\VehicleTagLog; use App\Models\VehicleTagLog;
use App\Models\Tag;
use App\Models\Module; use App\Models\Module;
use App\Models\Record; use App\Models\Record;
use App\Models\TagCancellationLog; use App\Models\TagCancellationLog;
@ -21,6 +20,7 @@
use PhpOffice\PhpSpreadsheet\Style\Border as PhpSpreadsheetBorder; use PhpOffice\PhpSpreadsheet\Style\Border as PhpSpreadsheetBorder;
use PhpOffice\PhpSpreadsheet\Style\Fill; use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
use Illuminate\Support\Facades\Auth;
/** /**
@ -1193,27 +1193,28 @@ public function exportSearchRecords(Request $request)
]); ]);
// Reutilizar la misma query de búsqueda (sin paginación) // Reutilizar la misma query de búsqueda (sin paginación)
$records = Record::with([ $records = Record::forUserModule(Auth::user())
'vehicle', ->with([
'vehicle.owner', 'vehicle',
'vehicle.tag:id,vehicle_id,folio,tag_number,status_id,package_id,module_id', 'vehicle.owner',
'vehicle.tag.status:id,code,name', 'vehicle.tag:id,vehicle_id,folio,tag_number,status_id,package_id,module_id',
'vehicle.tag.package:id,lot,box_number', 'vehicle.tag.status:id,code,name',
'vehicle.tag.module:id,name', 'vehicle.tag.package:id,lot,box_number',
'files:id,record_id,name_id,path,md5', 'vehicle.tag.module:id,name',
'files.catalogName:id,name', 'files:id,record_id,name_id,path,md5',
'user:id,name,username,module_id', 'files.catalogName:id,name',
'module:id,name', 'user:id,name,username,module_id',
'error:id,code,description', 'module:id,name',
'vehicle.vehicleTagLogs' => function ($q) { 'error:id,code,description',
$q->with([ 'vehicle.vehicleTagLogs' => function ($q) {
'tag:id,folio,tag_number,status_id,module_id,package_id', $q->with([
'tag.status:id,code,name', 'tag:id,folio,tag_number,status_id,module_id,package_id',
'tag.module:id,name', 'tag.status:id,code,name',
'tag.package:id,lot,box_number' 'tag.module:id,name',
])->orderBy('created_at', 'DESC'); 'tag.package:id,lot,box_number'
}, ])->orderBy('created_at', 'DESC');
])->orderBy('id', 'ASC'); },
])->orderBy('id', 'ASC');
// Aplicar los mismos filtros // Aplicar los mismos filtros
if ($request->filled('folio')) { if ($request->filled('folio')) {

View File

@ -63,12 +63,23 @@ public function vehicleTagLog()
/** /**
* Filtra registros por módulo del usuario * Filtra registros por módulo del usuario
* Admin y developer pueden ver todos los registros
* Otros usuarios solo ven registros de su módulo
*/ */
public function scopeForUserModule($query, $user) public function scopeForUserModule($query, $user)
{ {
if ($user->hasRole('admin')) { $isAdminOrDeveloper = $user->hasRole(['admin', 'developer'])
|| $user->hasRole(['admin', 'developer'], 'api')
|| $user->roles()->whereIn('name', ['admin', 'developer'])->exists();
if ($isAdminOrDeveloper) {
return $query; return $query;
} }
if (is_null($user->module_id)) {
return $query->whereRaw('1 = 0');
}
return $query->where('module_id', $user->module_id); return $query->where('module_id', $user->module_id);
} }
} }