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 Illuminate\Http\Request;
use App\Models\VehicleTagLog;
use App\Models\Tag;
use App\Models\Module;
use App\Models\Record;
use App\Models\TagCancellationLog;
@ -21,6 +20,7 @@
use PhpOffice\PhpSpreadsheet\Style\Border as PhpSpreadsheetBorder;
use PhpOffice\PhpSpreadsheet\Style\Fill;
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)
$records = Record::with([
'vehicle',
'vehicle.owner',
'vehicle.tag:id,vehicle_id,folio,tag_number,status_id,package_id,module_id',
'vehicle.tag.status:id,code,name',
'vehicle.tag.package:id,lot,box_number',
'vehicle.tag.module:id,name',
'files:id,record_id,name_id,path,md5',
'files.catalogName:id,name',
'user:id,name,username,module_id',
'module:id,name',
'error:id,code,description',
'vehicle.vehicleTagLogs' => function ($q) {
$q->with([
'tag:id,folio,tag_number,status_id,module_id,package_id',
'tag.status:id,code,name',
'tag.module:id,name',
'tag.package:id,lot,box_number'
])->orderBy('created_at', 'DESC');
},
])->orderBy('id', 'ASC');
$records = Record::forUserModule(Auth::user())
->with([
'vehicle',
'vehicle.owner',
'vehicle.tag:id,vehicle_id,folio,tag_number,status_id,package_id,module_id',
'vehicle.tag.status:id,code,name',
'vehicle.tag.package:id,lot,box_number',
'vehicle.tag.module:id,name',
'files:id,record_id,name_id,path,md5',
'files.catalogName:id,name',
'user:id,name,username,module_id',
'module:id,name',
'error:id,code,description',
'vehicle.vehicleTagLogs' => function ($q) {
$q->with([
'tag:id,folio,tag_number,status_id,module_id,package_id',
'tag.status:id,code,name',
'tag.module:id,name',
'tag.package:id,lot,box_number'
])->orderBy('created_at', 'DESC');
},
])->orderBy('id', 'ASC');
// Aplicar los mismos filtros
if ($request->filled('folio')) {

View File

@ -63,12 +63,23 @@ public function vehicleTagLog()
/**
* 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)
{
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;
}
if (is_null($user->module_id)) {
return $query->whereRaw('1 = 0');
}
return $query->where('module_id', $user->module_id);
}
}