From f571caa204c59075903c7598ec3daaf8b3c51f75 Mon Sep 17 00:00:00 2001 From: CarlosTorres Date: Tue, 27 Jan 2026 04:08:12 +0000 Subject: [PATCH] Correcciones en controladores de postulaciones y contratos MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Corregir método distance() a withinDistanceTo() para consultas espaciales - Corregir parsing de fecha/hora con timezone America/Tijuana - Comentar código de WhatsApp no configurado Co-Authored-By: Claude Opus 4.5 --- app/Http/Controllers/ContractController.php | 110 +++++++++--------- .../Controllers/PostulationController.php | 46 ++++---- app/Http/Controllers/SupplierController.php | 2 +- 3 files changed, 84 insertions(+), 74 deletions(-) diff --git a/app/Http/Controllers/ContractController.php b/app/Http/Controllers/ContractController.php index 154255d..e23dae2 100755 --- a/app/Http/Controllers/ContractController.php +++ b/app/Http/Controllers/ContractController.php @@ -323,7 +323,7 @@ class ContractController extends Controller Postulations::destroy($request->postulation_id); //Notify the suppliers that they have been hired - /*OneSignal::sendNotificationUsingTags( + OneSignal::sendNotificationUsingTags( "Dirígete a la sección de postulaciones contratadas en la app para ver más detalles", array( ["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id] @@ -333,17 +333,18 @@ class ContractController extends Controller $buttons = null, $schedule = null, $headings = "Proveedor: has sido contratado" - );*/ - Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() - ->name('suppplier_hired') - ->language('es_US') - ->body(Messages\Components\Body::create([ - Messages\Components\Parameters\Text::create('Proveedor has sido contratado: dirígete a la sección de postulaciones contratadas en JobHero para ver más detalles'), - ]))); + ); + // TODO: Configurar WhatsApp cuando esté disponible + // Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() + // ->name('suppplier_hired') + // ->language('es_US') + // ->body(Messages\Components\Body::create([ + // Messages\Components\Parameters\Text::create('Proveedor has sido contratado: dirígete a la sección de postulaciones contratadas en JobHero para ver más detalles'), + // ]))); //Schedule a notification for the suppliers about their appointment - /*OneSignal::sendNotificationUsingTags( - "Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dírigeta a la sección de postulaciones contratados para más detalles", + OneSignal::sendNotificationUsingTags( + "Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dirígete a la sección de postulaciones contratados para más detalles", array( ["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id] ), @@ -352,18 +353,19 @@ class ContractController extends Controller $buttons = null, $schedule = $delay_UTC, $headings = "Proveedor, no olvides tu cita de hoy" - );*/ - Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() - ->name('suppplier_appointment') - ->language('es_US') - ->body(Messages\Components\Body::create([ - Messages\Components\Parameters\Text::create('Proveedor no olvides tu cita de hoy: Tienes un servicio en ' . $contract->address . ' hoy en 30 minutos. Dírigeta a la sección de postulaciones contratados para más detalles'), - ]))); + ); + // TODO: Configurar WhatsApp cuando esté disponible + // Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() + // ->name('suppplier_appointment') + // ->language('es_US') + // ->body(Messages\Components\Body::create([ + // Messages\Components\Parameters\Text::create('Proveedor no olvides tu cita de hoy: Tienes un servicio en ' . $contract->address . ' hoy en 30 minutos. Dírigeta a la sección de postulaciones contratados para más detalles'), + // ]))); //Schedule a notification for the users about their appointment - /*OneSignal::sendNotificationUsingTags( - "Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dírigeta a la sección de contratos confirmados para más detalles", + OneSignal::sendNotificationUsingTags( + "Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dirígete a la sección de contratos confirmados para más detalles", array( ["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $user->id] ), @@ -372,13 +374,14 @@ class ContractController extends Controller $buttons = null, $schedule = $delay_UTC, $headings = $user->name . ", no olvides tu cita de hoy" - );*/ - Whatsapp::send($user->phone, Messages\TemplateMessage::create() - ->name('user_appointment') - ->language('es_US') - ->body(Messages\Components\Body::create([ - Messages\Components\Parameters\Text::create($user->name . ' no olvides tu cita de hoy: Tienes un servicio agendado hoy en ' . $contract->address . ' en 30 minutos. Dírigeta a la sección de contratos confirmados para más detalles'), - ]))); + ); + // TODO: Configurar WhatsApp cuando esté disponible + // Whatsapp::send($user->phone, Messages\TemplateMessage::create() + // ->name('user_appointment') + // ->language('es_US') + // ->body(Messages\Components\Body::create([ + // Messages\Components\Parameters\Text::create($user->name . ' no olvides tu cita de hoy: Tienes un servicio agendado hoy en ' . $contract->address . ' en 30 minutos. Dírigeta a la sección de contratos confirmados para más detalles'), + // ]))); return response()->json([ 'message' => 'Servicio contratado exitosamente' @@ -460,7 +463,7 @@ class ContractController extends Controller Postulations::destroy($request->postulation_id); //Notify the suppliers that they have been hired - /*OneSignal::sendNotificationUsingTags( + OneSignal::sendNotificationUsingTags( "Dirígete a la sección de postulaciones contratadas en la app para ver más detalles", array( ["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id] @@ -470,17 +473,18 @@ class ContractController extends Controller $buttons = null, $schedule = null, $headings = "Proveedor: has sido contratado" - );*/ - Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() - ->name('suppplier_hired') - ->language('es_US') - ->body(Messages\Components\Body::create([ - Messages\Components\Parameters\Text::create('Proveedor has sido contratado: dirígete a la sección de postulaciones contratadas en JobHero para ver más detalles'), - ]))); + ); + // TODO: Configurar WhatsApp cuando esté disponible + // Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() + // ->name('suppplier_hired') + // ->language('es_US') + // ->body(Messages\Components\Body::create([ + // Messages\Components\Parameters\Text::create('Proveedor has sido contratado: dirígete a la sección de postulaciones contratadas en JobHero para ver más detalles'), + // ]))); //Schedule a notification for the suppliers about their appointment - /*OneSignal::sendNotificationUsingTags( - "Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dírigeta a la sección de postulaciones contratados para más detalles", + OneSignal::sendNotificationUsingTags( + "Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dirígete a la sección de postulaciones contratados para más detalles", array( ["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id] ), @@ -489,18 +493,19 @@ class ContractController extends Controller $buttons = null, $schedule = $delay_UTC, $headings = "Proveedor, no olvides tu cita de hoy" - );*/ - Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() - ->name('suppplier_appointment') - ->language('es_US') - ->body(Messages\Components\Body::create([ - Messages\Components\Parameters\Text::create('Proveedor no olvides tu cita de hoy: Tienes un servicio en ' . $contract->address . ' hoy en 30 minutos. Dírigeta a la sección de postulaciones contratados para más detalles'), - ]))); + ); + // TODO: Configurar WhatsApp cuando esté disponible + // Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() + // ->name('suppplier_appointment') + // ->language('es_US') + // ->body(Messages\Components\Body::create([ + // Messages\Components\Parameters\Text::create('Proveedor no olvides tu cita de hoy: Tienes un servicio en ' . $contract->address . ' hoy en 30 minutos. Dírigeta a la sección de postulaciones contratados para más detalles'), + // ]))); //Schedule a notification for the users about their appointment - /*OneSignal::sendNotificationUsingTags( - "Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dírigeta a la sección de contratos confirmados para más detalles", + OneSignal::sendNotificationUsingTags( + "Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dirígete a la sección de contratos confirmados para más detalles", array( ["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $user->id] ), @@ -509,13 +514,14 @@ class ContractController extends Controller $buttons = null, $schedule = $delay_UTC, $headings = $user->name . ", no olvides tu cita de hoy" - );*/ - Whatsapp::send($user->phone, Messages\TemplateMessage::create() - ->name('user_appointment') - ->language('es_US') - ->body(Messages\Components\Body::create([ - Messages\Components\Parameters\Text::create($user->name . ' no olvides tu cita de hoy: Tienes un servicio agendado hoy en ' . $contract->address . ' en 30 minutos. Dírigeta a la sección de contratos confirmados para más detalles'), - ]))); + ); + // TODO: Configurar WhatsApp cuando esté disponible + // Whatsapp::send($user->phone, Messages\TemplateMessage::create() + // ->name('user_appointment') + // ->language('es_US') + // ->body(Messages\Components\Body::create([ + // Messages\Components\Parameters\Text::create($user->name . ' no olvides tu cita de hoy: Tienes un servicio agendado hoy en ' . $contract->address . ' en 30 minutos. Dírigeta a la sección de contratos confirmados para más detalles'), + // ]))); $coupon->limit = $coupon->limit - 1; $coupon->save(); diff --git a/app/Http/Controllers/PostulationController.php b/app/Http/Controllers/PostulationController.php index ccdd307..f0e142a 100755 --- a/app/Http/Controllers/PostulationController.php +++ b/app/Http/Controllers/PostulationController.php @@ -110,7 +110,7 @@ class PostulationController extends Controller $category = Categories::where('name', strip_tags($request->category))->orwhere('en_name', strip_tags($request->category))->first(); $distance = 0.5; - $suppliers = Suppliers::distance('location', $geometry, $distance)->get(); + $suppliers = Suppliers::withinDistanceTo('location', $geometry, $distance)->get(); if ($suppliers != '[]') { @@ -121,8 +121,10 @@ class PostulationController extends Controller $postulation->location = $geometry; $postulation->int_number = $request->int_number; $postulation->references = preg_replace('/\d+/', '', strip_tags($request->references)); - $timeoffset = str_replace("0", "", substr(substr(strip_tags($request->sethour), 23), 0, 3)); - $postulation->appointment = Carbon::createFromFormat('Y-m-d H:i:s', (substr(strip_tags($request->setdate), 0, 10) . ' ' . substr(substr(strip_tags($request->sethour), 11), 0, 8)), $timeoffset)->tz('UTC'); + // Parsear fecha y hora del formato ISO que envía el frontend + $dateStr = substr(strip_tags($request->setdate), 0, 10); // "2026-01-28" + $timeStr = substr(strip_tags($request->sethour), 11, 8); // "19:47:00" + $postulation->appointment = Carbon::createFromFormat('Y-m-d H:i:s', $dateStr . ' ' . $timeStr, 'America/Tijuana')->tz('UTC'); $postulation->amount = 5000; $postulation->details = preg_replace('/\d+/', '', strip_tags($request->details)); $postulation->save(); @@ -141,7 +143,7 @@ class PostulationController extends Controller foreach ($suppliers as $supplier) { if (in_array($category->id, $supplier->categories->pluck('id')->toArray())) { - /*OneSignal::sendNotificationUsingTags( + OneSignal::sendNotificationUsingTags( "Dirígete a la sección de postulaciones en la app para ver más detalles", array( ["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id] @@ -151,14 +153,15 @@ class PostulationController extends Controller $buttons = null, $schedule = null, $headings = "Proveedor: hay nueva postulación" - );*/ + ); - Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() - ->name('suppplier_new_postulation') - ->language('es_US') - ->body(Messages\Components\Body::create([ - Messages\Components\Parameters\Text::create('Proveedor hay nueva postulación: dirígete a la sección de postulaciones en JobHero para ver más detalles'), - ]))); + // TODO: Configurar WhatsApp cuando esté disponible + // Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() + // ->name('suppplier_new_postulation') + // ->language('es_US') + // ->body(Messages\Components\Body::create([ + // Messages\Components\Parameters\Text::create('Proveedor hay nueva postulación: dirígete a la sección de postulaciones en JobHero para ver más detalles'), + // ]))); } } @@ -178,7 +181,7 @@ class PostulationController extends Controller $delay_UTC = Carbon::now()->addMinutes(15)->toString(); - /*OneSignal::sendNotificationUsingTags( + OneSignal::sendNotificationUsingTags( "Dirígete a la sección de contratos en la app para ver más detalles", array( ["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $user->id] @@ -188,7 +191,7 @@ class PostulationController extends Controller $buttons = null, $schedule = $delay_UTC, $headings = "Búsqueda Finalizada" - );*/ + ); return response()->json([ 'message' => 'Servicio solicitado, espere a que un proveedor se postule' @@ -227,7 +230,7 @@ class PostulationController extends Controller if ($time_limit > 0) { if (in_array($postulation->category_id, $supplier->categories->pluck('id')->toArray())) { - /*if($supplier->membership == 1) { + if($supplier->membership == 1) { OneSignal::sendNotificationUsingTags( "Dirígete a la sección de contratos en la app para ver más detalles", array( @@ -239,13 +242,14 @@ class PostulationController extends Controller $schedule = null, $headings = "Un proveedor certificado se ha postulado" ); - }*/ - Whatsapp::send($postulation->user->phone, Messages\TemplateMessage::create() - ->name('suppplier_postulated') - ->language('es_US') - ->body(Messages\Components\Body::create([ - Messages\Components\Parameters\Text::create('Un proveedor certificado se ha postulado: dirígete a la sección de contratos en JobHero para ver más detalles'), - ]))); + } + // TODO: Configurar WhatsApp cuando esté disponible + // Whatsapp::send($postulation->user->phone, Messages\TemplateMessage::create() + // ->name('suppplier_postulated') + // ->language('es_US') + // ->body(Messages\Components\Body::create([ + // Messages\Components\Parameters\Text::create('Un proveedor certificado se ha postulado: dirígete a la sección de contratos en JobHero para ver más detalles'), + // ]))); $supplier->postulations()->attach($request->postulation_id); $supplier->save(); diff --git a/app/Http/Controllers/SupplierController.php b/app/Http/Controllers/SupplierController.php index f8ae52c..550e6a4 100755 --- a/app/Http/Controllers/SupplierController.php +++ b/app/Http/Controllers/SupplierController.php @@ -1220,7 +1220,7 @@ class SupplierController extends Controller } $distance = 0.5; - $postulations = Postulations::distance('location', $supplier->location, $distance)->orderBy('created_at', 'DESC')->get(); + $postulations = Postulations::withinDistanceTo('location', $supplier->location, $distance)->orderBy('created_at', 'DESC')->get(); $postulationsinfo = array();