feat: profile_photo en contratos activos, notificaciones bilingues en reportes y foto en panel usuarios

- API contratos activos (cliente y proveedor): agrega campo profile_photo (técnico asignado o supplier, null si no tiene)
- Notificaciones push bilingues en comentarios de reporte: "Nueva actividad en tu reporte" / "New activity on your report"
- Moderador en web panel notifica a cliente y proveedor al comentar, con prefijo Moderador/Moderator
- Panel usuarios: columna de foto de perfil entre ID y Nombre

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-23 17:17:14 -06:00
parent 38da1b56ce
commit 0ed98c96ee
40 changed files with 1390 additions and 651 deletions

View File

@@ -37,9 +37,7 @@ Route::group([
'prefix' => 'payments',
'middleware' => 'auth:api'
], function() {
Route::post('addcard', 'PaymentController@addcard');
Route::post('deletecard', 'PaymentController@deletecard');
Route::get('getcards', 'PaymentController@getcards');
Route::post('intent', 'PaymentController@intent');
});
Route::group([
@@ -80,6 +78,13 @@ Route::group([
Route::get('postulations/reports', 'ReportController@getsupplierreports');
Route::get('get-postulants', 'PostulationController@getpostulants');
Route::post('postulate', 'PostulationController@postulate');
// Técnicos
Route::get('technicians', 'TechnicianController@index');
Route::get('technicians/find', 'TechnicianController@find');
Route::post('technicians/add', 'TechnicianController@store');
Route::delete('technicians/{id}', 'TechnicianController@destroy');
Route::post('contracts/assign-technician', 'TechnicianController@assign');
});
Route::get('/parameters', 'IChambaParameterController@parameters');

View File

@@ -56,14 +56,6 @@ Route::group([
Route::match(['get', 'put'], 'update/{id}', 'BanksController@update')->middleware('rolecheck:6');
Route::match(['get', 'post'], 'create', 'BanksController@create')->middleware('rolecheck:6');
});
Route::group([
'prefix' => 'cards'
], function() {
Route::get('/', 'PaymentController@cardsindex')->middleware('rolecheck:6');
Route::delete('delete/{id}', 'PaymentController@destroy')->middleware('superadmin');
//Route::match(['get', 'put'], 'update/{id}', 'PaymentController@update')->middleware('rolecheck:6');
//Route::match(['get', 'post'], 'create', 'PaymentController@create')->middleware('rolecheck:6');
});
Route::group([
'prefix' => 'coupons'
], function() {
@@ -92,10 +84,17 @@ Route::group([
'prefix' => 'payments'
], function() {
Route::get('/', 'PaymentController@index')->middleware('rolecheck:6');
Route::post('generate', 'PaymentController@generate')->middleware('rolecheck:6');
Route::delete('delete/{id}', 'StatusController@destroy')->middleware('superadmin');
Route::match(['get', 'put'], 'update/{id}', 'StatusController@update')->middleware('rolecheck:6');
Route::match(['get', 'post'], 'create', 'StatusController@create')->middleware('rolecheck:6');
});
Route::group([
'prefix' => 'payment-batches'
], function() {
Route::get('/', 'PaymentBatchController@index')->middleware('rolecheck:6');
Route::get('{id}/download', 'PaymentBatchController@download')->middleware('rolecheck:6');
});
Route::group([
'prefix' => 'postulations'
], function() {