Correcciones en controladores de postulaciones y contratos

- 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 <noreply@anthropic.com>
This commit is contained in:
2026-01-27 04:08:12 +00:00
parent 09a37c08a3
commit f571caa204
3 changed files with 84 additions and 74 deletions

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();