Fix: Correcciones panel admin y API frontend
## Panel de Administración ### FormBuilder personalizado (Laravel 11) - Creado app/Support/FormBuilder.php como reemplazo de laravelcollective/html - Creado app/Support/Facades/Form.php para el facade - Registrado en AppServiceProvider y config/app.php - Soporta: text, email, password, file, textarea, select, checkbox, radio, etc. - Manejo de valores null en todos los parámetros ### Configuración de sesión - Cambiado same_site de "none" a "lax" para compatibilidad HTTP - Corrige error 419 Page Expired en login ### Status CRUD - Agregado campo en_name al formulario (español/inglés) - Actualizado StatusController create/update para manejar en_name ### Dependencias - Instalado spatie/laravel-google-cloud-storage para driver GCS ## API Frontend ### Validaciones de perfil de proveedor Agregadas validaciones en endpoints que requieren perfil de proveedor: - SupplierController::getpostulation - Retorna error 400 si no hay perfil - SupplierController::getcontractedpostulation - Retorna error 400 si no hay perfil - PostulationController::postulate - Retorna error 400 si no hay perfil - PostulationController::getfinishedpostulations - Retorna error 400 si no hay perfil - ContractController::startcontract - Retorna error 400 si no hay perfil ### Null safety en contratos - ContractController::getcurrentcontracts - Manejo seguro de supplier/category null - ContractController::getfinishedcontracts - Manejo seguro de supplier/category/status null Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -639,12 +639,12 @@ class ContractController extends Controller
|
||||
$day_limit = Carbon::parse($ccontract->created_at);
|
||||
$currentcontractinfo = array(
|
||||
'id' => $ccontract->id,
|
||||
'phone' => $supplier->user->phone,
|
||||
'category' => $category->name,
|
||||
'en_category' => $category->en_name,
|
||||
'phone' => $supplier ? ($supplier->user ? $supplier->user->phone : null) : null,
|
||||
'category' => $category ? $category->name : null,
|
||||
'en_category' => $category ? $category->en_name : null,
|
||||
'address' => $ccontract->address,
|
||||
'date' => $ccontract->appointment,
|
||||
'supplier' => $supplier->company_name,
|
||||
'supplier' => $supplier ? $supplier->company_name : 'Proveedor no disponible',
|
||||
'status' => $ccontract->status_id,
|
||||
'amount' => $ccontract->amount,
|
||||
'code' => $ccontract->code,
|
||||
@@ -778,6 +778,14 @@ class ContractController extends Controller
|
||||
|
||||
$user = Auth::user();
|
||||
$supplier = $user->suppliers;
|
||||
|
||||
if (!$supplier) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No tienes un perfil de proveedor registrado'
|
||||
], 400);
|
||||
}
|
||||
|
||||
$ccontract = CurrentContracts::where('code', $request->contract_pin)->where('supplier_id', $supplier->id)->first();
|
||||
|
||||
if($ccontract) {
|
||||
@@ -969,16 +977,16 @@ class ContractController extends Controller
|
||||
$day_limit = Carbon::parse($fcontract->created_at);
|
||||
$finishedcontractinfo = array(
|
||||
'id' => $fcontract->id,
|
||||
'category' => $category->name,
|
||||
'en_category' => $category->en_name,
|
||||
'category' => $category ? $category->name : null,
|
||||
'en_category' => $category ? $category->en_name : null,
|
||||
'address' => $fcontract->address,
|
||||
'date' => $fcontract->appointment,
|
||||
'date_difference' => $time_limit->diff(Carbon::now(), false)->days,
|
||||
'supplier' => $supplier->company_name,
|
||||
'supplier' => $supplier ? $supplier->company_name : 'Proveedor no disponible',
|
||||
'amount' => $fcontract->amount,
|
||||
'scored' => $fcontract->scored_at,
|
||||
'parent' => $fcontract->parent_contract_id,
|
||||
'status' => $fcontract->status->name
|
||||
'status' => $fcontract->status ? $fcontract->status->name : null
|
||||
);
|
||||
$finishedcontracts[] = $finishedcontractinfo;
|
||||
}
|
||||
|
||||
@@ -218,6 +218,13 @@ class PostulationController extends Controller
|
||||
$time_limit = (9900 - Carbon::now()->diffInMinutes($time_created));
|
||||
$supplier = Suppliers::where('user_id', $user->id)->first();
|
||||
|
||||
if (!$supplier) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No tienes un perfil de proveedor registrado'
|
||||
], 400);
|
||||
}
|
||||
|
||||
if ($time_limit > 0) {
|
||||
if (in_array($postulation->category_id, $supplier->categories->pluck('id')->toArray())) {
|
||||
/*if($supplier->membership == 1) {
|
||||
@@ -282,6 +289,14 @@ class PostulationController extends Controller
|
||||
|
||||
public function getfinishedpostulations(Request $request) {
|
||||
$user = Auth::user();
|
||||
|
||||
if (!$user->suppliers) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No tienes un perfil de proveedor registrado'
|
||||
], 400);
|
||||
}
|
||||
|
||||
$postulations = FinishedContracts::where('supplier_id', $user->suppliers->id)->orderBy('created_at', 'DESC')->get();
|
||||
$finishedpostulations = array();
|
||||
|
||||
|
||||
@@ -53,10 +53,12 @@ class StatusController extends Controller
|
||||
|
||||
$rules = [
|
||||
'name' => 'required|string',
|
||||
'en_name' => 'required|string',
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'name.required' => 'Se requiere el nombre del status',
|
||||
'en_name.required' => 'Se requiere el nombre del status en inglés',
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), $rules, $messages);
|
||||
@@ -66,6 +68,7 @@ class StatusController extends Controller
|
||||
|
||||
$status = new Status();
|
||||
$status->name = strip_tags($request->name);
|
||||
$status->en_name = strip_tags($request->en_name);
|
||||
$status->save();
|
||||
|
||||
return redirect('status');
|
||||
@@ -119,10 +122,12 @@ class StatusController extends Controller
|
||||
|
||||
$rules = [
|
||||
'name' => 'required|string',
|
||||
'en_name' => 'required|string',
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'name.required' => 'Se requiere el nombre del status',
|
||||
'en_name.required' => 'Se requiere el nombre del status en inglés',
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), $rules, $messages);
|
||||
@@ -132,6 +137,7 @@ class StatusController extends Controller
|
||||
|
||||
$status = Status::find($id);
|
||||
$status->name = strip_tags($request->name);
|
||||
$status->en_name = strip_tags($request->en_name);
|
||||
$status->save();
|
||||
|
||||
return redirect('status');
|
||||
|
||||
@@ -1211,6 +1211,14 @@ class SupplierController extends Controller
|
||||
|
||||
$user = Auth::user();
|
||||
$supplier = Suppliers::where('user_id', $user->id)->first();
|
||||
|
||||
if (!$supplier) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No tienes un perfil de proveedor registrado'
|
||||
], 400);
|
||||
}
|
||||
|
||||
$distance = 0.5;
|
||||
$postulations = Postulations::distance('location', $supplier->location, $distance)->orderBy('created_at', 'DESC')->get();
|
||||
|
||||
@@ -1246,6 +1254,14 @@ class SupplierController extends Controller
|
||||
|
||||
$user = Auth::user();
|
||||
$supplier = Suppliers::where('user_id', $user->id)->first();
|
||||
|
||||
if (!$supplier) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No tienes un perfil de proveedor registrado'
|
||||
], 400);
|
||||
}
|
||||
|
||||
$contracts = CurrentContracts::where('supplier_id', $supplier->id)->orderBy('created_at', 'DESC')->get();
|
||||
|
||||
$contractsinfo = array();
|
||||
|
||||
Reference in New Issue
Block a user