diff --git a/app/Http/Controllers/ContractController.php b/app/Http/Controllers/ContractController.php index ff5c0cb..a6d0017 100755 --- a/app/Http/Controllers/ContractController.php +++ b/app/Http/Controllers/ContractController.php @@ -356,53 +356,34 @@ class ContractController extends Controller Postulations::destroy($request->postulation_id); - //Notify the suppliers that they have been hired - OneSignal::sendNotificationToExternalUser( - "Dirígete a la sección de postulaciones contratadas en la app para ver más detalles", - (string) $supplier->user_id, - null, null, null, null, - "Proveedor: has sido contratado" - ); - // 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'), - // ]))); + try { + OneSignal::sendNotificationToExternalUser( + "Dirígete a la sección de postulaciones contratadas en la app para ver más detalles", + (string) $supplier->user_id, + null, null, null, null, + "Proveedor: has sido contratado" + ); + } catch (\Exception $e) {} - //Schedule a notification for the suppliers about their appointment - OneSignal::sendNotificationToExternalUser( - "Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dirígete a la sección de postulaciones contratados para más detalles", - (string) $supplier->user_id, - null, null, null, - $delay_UTC, - "Proveedor, no olvides tu cita de hoy" - ); - // 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'), - // ]))); + try { + OneSignal::sendNotificationToExternalUser( + "Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dirígete a la sección de postulaciones contratados para más detalles", + (string) $supplier->user_id, + null, null, null, + $delay_UTC, + "Proveedor, no olvides tu cita de hoy" + ); + } catch (\Exception $e) {} - - //Schedule a notification for the users about their appointment - OneSignal::sendNotificationToExternalUser( - "Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dirígete a la sección de contratos confirmados para más detalles", - (string) $user->id, - null, null, null, - $delay_UTC, - $user->name . ", no olvides tu cita de hoy" - ); - // 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'), - // ]))); + try { + OneSignal::sendNotificationToExternalUser( + "Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dirígete a la sección de contratos confirmados para más detalles", + (string) $user->id, + null, null, null, + $delay_UTC, + $user->name . ", no olvides tu cita de hoy" + ); + } catch (\Exception $e) {} return response()->json([ 'message' => 'Servicio contratado exitosamente' @@ -483,46 +464,34 @@ class ContractController extends Controller Postulations::destroy($request->postulation_id); - //Notify the suppliers that they have been hired - OneSignal::sendNotificationToExternalUser( - "Dirígete a la sección de postulaciones contratadas en la app para ver más detalles", - (string) $supplier->user_id, - null, null, null, null, - "Proveedor: has sido contratado" - ); - // 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'), - // ]))); + try { + OneSignal::sendNotificationToExternalUser( + "Dirígete a la sección de postulaciones contratadas en la app para ver más detalles", + (string) $supplier->user_id, + null, null, null, null, + "Proveedor: has sido contratado" + ); + } catch (\Exception $e) {} - //Schedule a notification for the suppliers about their appointment - OneSignal::sendNotificationToExternalUser( - "Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dirígete a la sección de postulaciones contratados para más detalles", - (string) $supplier->user_id, - null, null, null, - $delay_UTC, - "Proveedor, no olvides tu cita de hoy" - ); - // 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'), - // ]))); + try { + OneSignal::sendNotificationToExternalUser( + "Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dirígete a la sección de postulaciones contratados para más detalles", + (string) $supplier->user_id, + null, null, null, + $delay_UTC, + "Proveedor, no olvides tu cita de hoy" + ); + } catch (\Exception $e) {} - - //Schedule a notification for the users about their appointment - OneSignal::sendNotificationToExternalUser( - "Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dirígete a la sección de contratos confirmados para más detalles", - (string) $user->id, - null, null, null, - $delay_UTC, - $user->name . ", no olvides tu cita de hoy" - ); + try { + OneSignal::sendNotificationToExternalUser( + "Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dirígete a la sección de contratos confirmados para más detalles", + (string) $user->id, + null, null, null, + $delay_UTC, + $user->name . ", no olvides tu cita de hoy" + ); + } catch (\Exception $e) {} // TODO: Configurar WhatsApp cuando esté disponible // Whatsapp::send($user->phone, Messages\TemplateMessage::create() // ->name('user_appointment') @@ -760,12 +729,14 @@ class ContractController extends Controller CurrentContracts::destroy($request->contract_id); - OneSignal::sendNotificationToExternalUser( - "El servicio en " . $fcontract->address . " el día " . substr($fcontract->appointment, 0, 10) . "ha sido cancelado. Dírigeta a la sección de servicios contratados para más detalles", - (string) $supplier->user_id, - null, null, null, null, - "Proveedor: un servicio ha sido cancelado" - ); + try { + OneSignal::sendNotificationToExternalUser( + "El servicio en " . $fcontract->address . " el día " . substr($fcontract->appointment, 0, 10) . "ha sido cancelado. Dírigeta a la sección de servicios contratados para más detalles", + (string) $supplier->user_id, + null, null, null, null, + "Proveedor: un servicio ha sido cancelado" + ); + } catch (\Exception $e) {} return response()->json([ 'message' => 'Servicio cancelado exitosamente' @@ -836,12 +807,14 @@ class ContractController extends Controller $payment->status_id = null; $payment->save(); - OneSignal::sendNotificationToExternalUser( - "El servicio en " . $fcontract->address . " el día " . substr($fcontract->appointment, 0, 10) . " ha sido iniciado. Dírigeta a la sección de servicios contratados para más detalles", - (string) $fcontract->user_id, - null, null, null, null, - "Usuario: el proveedor ha iniciado el servicio" - ); + try { + OneSignal::sendNotificationToExternalUser( + "El servicio en " . $fcontract->address . " el día " . substr($fcontract->appointment, 0, 10) . " ha sido iniciado. Dírigeta a la sección de servicios contratados para más detalles", + (string) $fcontract->user_id, + null, null, null, null, + "Usuario: el proveedor ha iniciado el servicio" + ); + } catch (\Exception $e) {} return response()->json([ 'message' => 'Servicio iniciado exitosamente' diff --git a/app/Http/Controllers/NoHomeController.php b/app/Http/Controllers/NoHomeController.php index 47173c3..f187eda 100755 --- a/app/Http/Controllers/NoHomeController.php +++ b/app/Http/Controllers/NoHomeController.php @@ -137,12 +137,14 @@ class NoHomeController extends Controller if (Carbon::now()->diffInMinutes($contract->appointment, false) < 10) { return response()->json($contract); } else { - OneSignal::sendNotificationToExternalUser( - "El proveedor para el servicio en " . $contract->address . " ha llegado. Dírigeta a la sección de contratos confirmados para más detalles", - (string) $client->id, - null, null, null, null, - $client->name . ", tu proveedor del servicio ha llegado" - ); + try { + OneSignal::sendNotificationToExternalUser( + "El proveedor para el servicio en " . $contract->address . " ha llegado. Dírigeta a la sección de contratos confirmados para más detalles", + (string) $client->id, + null, null, null, null, + $client->name . ", tu proveedor del servicio ha llegado" + ); + } catch (\Exception $e) {} return response()->json([ //'message' => 'Por favor espere a los 10 minutos de tolerancia de la hora acordada' 'message' => 'wait' @@ -227,12 +229,14 @@ class NoHomeController extends Controller 'message' => 'Ausencia registrada con éxito, nos comunicaremos con usted por correo electrónico en caso de alguna circunstancia' ]); } else { - OneSignal::sendNotificationToExternalUser( - "El proveedor para el servicio en " . $ccontract->address . " ha llegado. Dírigeta a la sección de contratos confirmados para más detalles", - (string) $client->id, - null, null, null, null, - $client->name . ", tu proveedor del servicio ha llegado" - ); + try { + OneSignal::sendNotificationToExternalUser( + "El proveedor para el servicio en " . $ccontract->address . " ha llegado. Dírigeta a la sección de contratos confirmados para más detalles", + (string) $client->id, + null, null, null, null, + $client->name . ", tu proveedor del servicio ha llegado" + ); + } catch (\Exception $e) {} return response()->json([ 'order' => 'wait', 'message' => 'Por favor espere a los 10 minutos de tolerancia de la hora acordada' diff --git a/app/Http/Controllers/PostulationController.php b/app/Http/Controllers/PostulationController.php index 5293963..d147426 100755 --- a/app/Http/Controllers/PostulationController.php +++ b/app/Http/Controllers/PostulationController.php @@ -109,7 +109,7 @@ class PostulationController extends Controller $geometry = new Point($request->lat, $request->lng); $category = Categories::where('name', strip_tags($request->category))->orwhere('en_name', strip_tags($request->category))->first(); - $distance = 0.5; + $distance = 5000; // metros (5 km) $suppliers = Suppliers::withinDistanceTo('location', $geometry, $distance)->get(); if ($suppliers != '[]') { @@ -129,21 +129,25 @@ class PostulationController extends Controller $postulation->details = preg_replace('/\d+/', '', strip_tags($request->details)); $postulation->save(); - OneSignal::sendNotificationToExternalUser( - "Coméntele al Ing. que hay una postulación", - "128", - null, null, null, null, - "Admin: hay nueva postulación" - ); + try { + OneSignal::sendNotificationToExternalUser( + "Coméntele al Ing. que hay una postulación", + "128", + null, null, null, null, + "Admin: hay nueva postulación" + ); + } catch (\Exception $e) {} foreach ($suppliers as $supplier) { if (in_array($category->id, $supplier->categories->pluck('id')->toArray())) { - OneSignal::sendNotificationToExternalUser( - "Dirígete a la sección de postulaciones en la app para ver más detalles", - (string) $supplier->user_id, - null, null, null, null, - "Proveedor: hay nueva postulación" - ); + try { + OneSignal::sendNotificationToExternalUser( + "Dirígete a la sección de postulaciones en la app para ver más detalles", + (string) $supplier->user_id, + null, null, null, null, + "Proveedor: hay nueva postulación" + ); + } catch (\Exception $e) {} // TODO: Configurar WhatsApp cuando esté disponible // Whatsapp::send($supplier->user->phone, Messages\TemplateMessage::create() @@ -171,13 +175,15 @@ class PostulationController extends Controller $delay_UTC = Carbon::now()->addMinutes(15)->toString(); - OneSignal::sendNotificationToExternalUser( - "Dirígete a la sección de contratos en la app para ver más detalles", - (string) $user->id, - null, null, null, - $delay_UTC, - "Búsqueda Finalizada" - ); + try { + OneSignal::sendNotificationToExternalUser( + "Dirígete a la sección de contratos en la app para ver más detalles", + (string) $user->id, + null, null, null, + $delay_UTC, + "Búsqueda Finalizada" + ); + } catch (\Exception $e) {} return response()->json([ 'message' => 'Servicio solicitado, espere a que un proveedor se postule' @@ -217,12 +223,14 @@ class PostulationController extends Controller if ($time_limit > 0) { if (in_array($postulation->category_id, $supplier->categories->pluck('id')->toArray())) { if($supplier->membership == 1) { - OneSignal::sendNotificationToExternalUser( - "Dirígete a la sección de contratos en la app para ver más detalles", - (string) $postulation->user_id, - null, null, null, null, - "Un proveedor certificado se ha postulado" - ); + try { + OneSignal::sendNotificationToExternalUser( + "Dirígete a la sección de contratos en la app para ver más detalles", + (string) $postulation->user_id, + null, null, null, null, + "Un proveedor certificado se ha postulado" + ); + } catch (\Exception $e) {} } // TODO: Configurar WhatsApp cuando esté disponible // Whatsapp::send($postulation->user->phone, Messages\TemplateMessage::create() diff --git a/app/Http/Controllers/ReportCommentController.php b/app/Http/Controllers/ReportCommentController.php index 5a7d4ba..f2e105d 100755 --- a/app/Http/Controllers/ReportCommentController.php +++ b/app/Http/Controllers/ReportCommentController.php @@ -2,111 +2,51 @@ namespace App\Http\Controllers; +use App\Models\Report; use App\Models\ReportComment; use App\Models\FinishedContracts; use App\Models\NoHome; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Validator; class ReportCommentController extends Controller { - /** - * Display a listing of the resource. - * - * @return \Illuminate\Http\Response - */ - public function index(Request $request, $id, $contract_id) + public function index(Request $request, $id) { - // - $request->session()->put('search', $request - ->has('search') ? strip_tags($request->get('search')) : ($request->session() - ->has('search') ? strip_tags($request->session()->get('search')) : '')); + $report = Report::find($id); + $contract = FinishedContracts::with(['user', 'suppliers.user', 'categories'])->find($report->contract_id); + $nohome = NoHome::where('contract_id', $contract->id)->first(); + $comments = ReportComment::with('user') + ->where('report_id', $id) + ->orderBy('created_at', 'asc') + ->paginate(50); - $request->session()->put('field', $request - ->has('field') ? strip_tags($request->get('field')) : ($request->session() - ->has('field') ? strip_tags($request->session()->get('field')) : 'id')); - - $request->session()->put('sort', $request - ->has('sort') ? strip_tags($request->get('sort')) : ($request->session() - ->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc')); - - //$headers = $request->get('header') != '' ? $request->get('header') : -1; - - $contract = FinishedContracts::where('id', $contract_id)->first(); - $nohome = NoHome::where('contract_id', $contract_id)->first(); - $comments = new ReportComment(); - $comments = $comments->where('report_id', $id) - ->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort'))) - ->paginate(10); - - if ($request->isMethod('get')) - return view('reports.comments', compact('comments', 'contract', 'nohome')); + return view('reports.comments', compact('comments', 'contract', 'nohome', 'report')); } - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() + public function store(Request $request, $id) { - // + $validator = Validator::make($request->all(), [ + 'comment' => 'required|string', + ]); + + if ($validator->fails()) { + return redirect()->back()->withErrors($validator); + } + + $comment = new ReportComment(); + $comment->report_id = $id; + $comment->user_id = Auth::id(); + $comment->comment = strip_tags($request->comment); + $comment->save(); + + return redirect()->back(); } - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(Request $request) + public function destroy($id, $comment_id) { - // - } - - /** - * Display the specified resource. - * - * @param \App\ReportComment $reportComment - * @return \Illuminate\Http\Response - */ - public function show(ReportComment $reportComment) - { - // - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\ReportComment $reportComment - * @return \Illuminate\Http\Response - */ - public function edit(ReportComment $reportComment) - { - // - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param \App\ReportComment $reportComment - * @return \Illuminate\Http\Response - */ - public function update(Request $request, ReportComment $reportComment) - { - // - } - - /** - * Remove the specified resource from storage. - * - * @param \App\ReportComment $reportComment - * @return \Illuminate\Http\Response - */ - public function destroy($id, $contract_id) - { - // - ReportComment::destroy($id); - return redirect('reports/comments/'.$id.'/'.$contract_id); + ReportComment::destroy($comment_id); + return redirect('reports/' . $id . '/comments'); } } diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index 38c54aa..36e4228 100755 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -108,7 +108,7 @@ class ReportController extends Controller $report = Report::find($id); $report->veredict = strip_tags($request->veredict); - $coupon->save(); + $report->save(); return redirect('reports'); } @@ -138,6 +138,155 @@ class ReportController extends Controller return redirect('reports'); } + public function getcomments(Request $request, $id) + { + $user = Auth::user(); + $report = Report::with('finishedcontracts.suppliers')->find($id); + + if (!$report) { + return response()->json(['message' => 'Reporte no encontrado'], 404); + } + + $contract = $report->finishedcontracts; + $supplierUserId = $contract->suppliers->user_id ?? null; + + if ($user->id !== $contract->user_id && $user->id !== $supplierUserId) { + return response()->json(['message' => 'No autorizado'], 403); + } + + $comments = ReportComment::with('user') + ->where('report_id', $id) + ->orderBy('created_at', 'asc') + ->get() + ->map(function ($c) use ($contract, $supplierUserId) { + $isSupplier = $c->user_id === $supplierUserId; + $isClient = $c->user_id === $contract->user_id; + return [ + 'id' => $c->id, + 'sender_id' => $c->user_id, + 'sender_name' => $isSupplier + ? ($contract->suppliers->company_name ?? null) + : ($c->user->name ?? null), + 'role_id' => $c->user->role_id ?? null, + 'sender_type' => !$isClient && !$isSupplier ? 'moderator' : null, + 'comment' => $c->comment, + 'created_at' => $c->created_at, + ]; + }); + + return response()->json($comments); + } + + public function storecomment(Request $request, $id) + { + $validator = Validator::make($request->all(), ['comment' => 'required|string']); + if ($validator->fails()) { + return response()->json($validator->errors(), 422); + } + + $user = Auth::user(); + $report = Report::with('finishedcontracts.suppliers')->find($id); + + if (!$report) { + return response()->json(['message' => 'Reporte no encontrado'], 404); + } + + $contract = $report->finishedcontracts; + $supplierUserId = $contract->suppliers->user_id ?? null; + + if ($user->id !== $contract->user_id && $user->id !== $supplierUserId) { + return response()->json(['message' => 'No autorizado'], 403); + } + + $comment = new ReportComment(); + $comment->report_id = $id; + $comment->user_id = $user->id; + $comment->comment = strip_tags($request->comment); + $comment->save(); + + $supplierUserId = $contract->suppliers->user_id ?? null; + $isSupplier = $user->id === $supplierUserId; + $isClient = $user->id === $contract->user_id; + + return response()->json([ + 'id' => $comment->id, + 'sender_id' => $user->id, + 'sender_name' => $isSupplier ? ($contract->suppliers->company_name ?? null) : $user->name, + 'role_id' => $user->role_id, + 'sender_type' => !$isClient && !$isSupplier ? 'moderator' : null, + 'comment' => $comment->comment, + 'created_at' => $comment->created_at, + ], 201); + } + + public function getsupplierreports(Request $request) + { + $user = Auth::user(); + + if (!$user->suppliers) { + return response()->json(['success' => false, 'message' => 'No tienes un perfil de proveedor registrado'], 400); + } + + $contractIds = FinishedContracts::where('supplier_id', $user->suppliers->id)->pluck('id'); + + $reports = Report::with([ + 'finishedcontracts.suppliers.user', + 'finishedcontracts.categories', + ]) + ->whereIn('contract_id', $contractIds) + ->orderBy('created_at', 'desc') + ->get(); + + $data = $reports->map(function ($report) { + $contract = $report->finishedcontracts; + return [ + 'id' => $report->id, + 'supplier' => $contract->suppliers->user->name ?? null, + 'company' => $contract->suppliers->company_name ?? null, + 'category' => $contract->categories->name ?? null, + 'en_category' => $contract->categories->en_name ?? null, + 'appointment' => $contract->appointment, + 'address' => $contract->address, + 'amount' => $contract->amount, + 'veredict' => $report->veredict, + ]; + }); + + return response()->json($data); + } + + public function getreports(Request $request) + { + $user = Auth::user(); + + $contractIds = FinishedContracts::where('user_id', $user->id)->pluck('id'); + + $reports = Report::with([ + 'finishedcontracts.suppliers.user', + 'finishedcontracts.categories', + ]) + ->whereIn('contract_id', $contractIds) + ->orderBy('created_at', 'desc') + ->get(); + + $data = $reports->map(function ($report) { + $contract = $report->finishedcontracts; + return [ + 'id' => $report->id, + 'supplier' => $contract->suppliers->user->name ?? null, + 'company' => $contract->suppliers->company_name ?? null, + 'category' => $contract->categories->name ?? null, + 'en_category' => $contract->categories->en_name ?? null, + 'appointment' => $contract->appointment, + 'address' => $contract->address, + 'amount' => $contract->amount, + 'veredict' => $report->veredict, + ]; + }); + + return response()->json($data); + } + public function report(Request $request) { $rules = [ diff --git a/app/Http/Controllers/SupplierController.php b/app/Http/Controllers/SupplierController.php index 6335272..b1702f8 100755 --- a/app/Http/Controllers/SupplierController.php +++ b/app/Http/Controllers/SupplierController.php @@ -1237,7 +1237,7 @@ class SupplierController extends Controller ], 400); } - $distance = 0.5; + $distance = 5000; // metros (5 km) $postulations = Postulations::withinDistanceTo('location', $supplier->location, $distance)->orderBy('created_at', 'DESC')->get(); $postulationsinfo = array(); diff --git a/app/Models/Report.php b/app/Models/Report.php index 9d6c4e9..61a5a47 100644 --- a/app/Models/Report.php +++ b/app/Models/Report.php @@ -20,7 +20,7 @@ class Report extends Model public function finishedcontracts() { - return $this->belongsTo(FinishedContracts::class); + return $this->belongsTo(FinishedContracts::class, 'contract_id'); } public function user() diff --git a/app/Services/PushNotificationService.php b/app/Services/PushNotificationService.php index 75d0f13..650ee40 100644 --- a/app/Services/PushNotificationService.php +++ b/app/Services/PushNotificationService.php @@ -17,15 +17,17 @@ class PushNotificationService */ public function sendToUser(int $userId, string $message, string $heading = 'JobHero', array $data = []) { - return OneSignal::sendNotificationToExternalUser( - $message, - (string) $userId, - null, - $data ?: null, - null, - null, - $heading - ); + try { + return OneSignal::sendNotificationToExternalUser( + $message, + (string) $userId, + null, + $data ?: null, + null, + null, + $heading + ); + } catch (\Exception $e) {} } /** @@ -58,15 +60,17 @@ class PushNotificationService */ public function sendScheduledToUser(int $userId, string $message, string $sendAt, string $heading = 'JobHero', array $data = []) { - return OneSignal::sendNotificationToExternalUser( - $message, - (string) $userId, - null, - $data ?: null, - null, - $sendAt, - $heading - ); + try { + return OneSignal::sendNotificationToExternalUser( + $message, + (string) $userId, + null, + $data ?: null, + null, + $sendAt, + $heading + ); + } catch (\Exception $e) {} } /** @@ -80,7 +84,7 @@ class PushNotificationService */ public function sendToRole(int $roleId, string $message, string $heading = 'JobHero', array $data = []) { - return OneSignal::sendNotificationUsingTags( + try { return OneSignal::sendNotificationUsingTags( $message, [ ['field' => 'tag', 'key' => 'iChamba_Role', 'relation' => '=', 'value' => (string) $roleId] @@ -107,7 +111,7 @@ class PushNotificationService null, null, $data - ); + ); } catch (\Exception $e) {} } /** diff --git a/resources/views/reports/comments.blade.php b/resources/views/reports/comments.blade.php index e024060..553c52b 100755 --- a/resources/views/reports/comments.blade.php +++ b/resources/views/reports/comments.blade.php @@ -1,116 +1,199 @@ @extends('layouts.app') -@section('content') - - @if (Auth::user()->role_id >= 5) -
-
- @else -
- @endif +@push('styles') + +@endpush -
-
-

Comentarios del reporte

-
+@section('content') +@php + $clientId = $contract->user_id; + $supplierId = $contract->suppliers->user_id ?? null; +@endphp + +
+ + {{-- Info del contrato --}} +
+ Contrato #{{ $contract->id }} + Cliente: {{ $contract->user->name ?? '—' }} + Proveedor: {{ $contract->suppliers->company_name ?? '—' }} + Categoría: {{ $contract->categories->name ?? '—' }} + Monto: ${{ $contract->amount }} + Cita: {{ $contract->appointment }} + @if($report->veredict) + Veredicto: {{ $report->veredict }} + @endif + + +
-
-
Contrato:
- - - - + {{-- Leyenda --}} +
+ Cliente + Proveedor + Moderador +
- + {{-- Mensajes --}} +
+ @forelse($comments as $comment) + @php + if ($comment->user_id == $clientId) { + $side = 'right'; + $label = 'Cliente'; + } elseif ($comment->user_id == $supplierId) { + $side = 'left'; + $label = 'Proveedor'; + } else { + $side = 'center'; + $label = 'Moderador'; + } + @endphp -
+
+
+
{{ $label }} — {{ $comment->user->name ?? '—' }}
+
+ {{ $comment->comment }} +
{{ $comment->created_at->format('d/m/Y H:i') }}
+
+
+
+ @empty +

Sin comentarios aún.

+ @endforelse + - + {{-- Paginación --}} + @if($comments->hasPages()) +
{{ $comments->links() }}
+ @endif - + {{-- Input del moderador --}} +
+
+ @csrf + @error('comment') +
{{ $message }}
+ @enderror + + + +
- - - - - - - - - - - - - - - - - - - - @php - $i=1; - @endphp - - - - - - - - - - - - - - - - -
IDUsuarioProveedorCategoríaDirecciónCitaMontoCalificaciónComentariosTransacción IDFecha de creaciónFecha de fuera de casaConfirmación de descripción de la casa
{{ $contract->id }}{{ $contract->user->name ?? null }}{{ $contract->suppliers->company_name ?? null }}{{ $contract->categories->name ?? null }}{{ $contract->address }}{{ $contract->appointment }}${{ $contract->amount }}{{ $contract->score }}{{ $contract->comments }}{{ $contract->transaction_id }}{{ $contract->created_at }}{{ isset($nohome->confirmed_at) }}{{ isset($nohome->house_description) }}
-

-
Comentarios:
- - - - - {{request()->session()->get('field')=='user_id'?(request()->session()->get('sort')=='asc'?'':''):''}} - - - {{request()->session()->get('field')=='user_id'?(request()->session()->get('sort')=='asc'?'':''):''}} - - - {{request()->session()->get('field')=='comment'?(request()->session()->get('sort')=='asc'?'':''):''}} - - - {{request()->session()->get('field')=='created_at'?(request()->session()->get('sort')=='asc'?'':''):''}} - - - - - @php - $i=1; - @endphp - @foreach ($comments as $comment) - - - - - - - - @endforeach - - -
UsuarioTeléfonoComentarioFecha de creación
{{ $comment->user->name }}{{ $comment->user->phone }}{{ $comment->comment }}{{ $comment->created_at }} - - - - -
- - {{ $comments->links() }}
@endsection diff --git a/resources/views/reports/index.blade.php b/resources/views/reports/index.blade.php index f906902..2935991 100755 --- a/resources/views/reports/index.blade.php +++ b/resources/views/reports/index.blade.php @@ -57,13 +57,9 @@ {{ $report->veredict }} + href="{{url('reports/'.$report->id.'/comments')}}"> - - - diff --git a/routes/api.php b/routes/api.php index a3680b9..695f5f3 100755 --- a/routes/api.php +++ b/routes/api.php @@ -57,6 +57,9 @@ Route::group([ Route::post('review', 'ContractController@reviewcontract'); Route::post('extra', 'ContractController@extra'); Route::post('report', 'ReportController@report'); + Route::get('reports', 'ReportController@getreports'); + Route::get('reports/{id}/comments', 'ReportController@getcomments'); + Route::post('reports/{id}/comments', 'ReportController@storecomment'); Route::get('nohome-check', 'NoHomeController@nohomecheck'); Route::post('nohome-confirm', 'NoHomeController@nohomeconfirm'); //Route::post('nohome-test', 'NoHomeController@test'); @@ -74,6 +77,7 @@ Route::group([ Route::get('get-postulations', 'SupplierController@getpostulation'); Route::get('get-contracted-postulations', 'SupplierController@getcontractedpostulation'); Route::get('get-finished-postulations', 'PostulationController@getfinishedpostulations'); + Route::get('postulations/reports', 'ReportController@getsupplierreports'); Route::get('get-postulants', 'PostulationController@getpostulants'); Route::post('postulate', 'PostulationController@postulate'); }); diff --git a/routes/web.php b/routes/web.php index 1cc294e..b26fcb3 100755 --- a/routes/web.php +++ b/routes/web.php @@ -126,9 +126,10 @@ Route::group([ ], function() { Route::get('/', 'ReportController@index')->middleware('rolecheck:6'); Route::delete('delete/{id}', 'ReportController@destroy')->middleware('superadmin'); - Route::get('comments/{id}/{contract_id}', 'ReportCommentController@index')->middleware('rolecheck:6'); - Route::delete('comments/delete/{id}/{contract_id}', 'ReportCommentController@destroy')->middleware('superadmin'); - Route::get('veredict/{id}', 'ReportController@veredict')->middleware('rolecheck:6'); + Route::get('{id}/comments', 'ReportCommentController@index')->middleware('rolecheck:6'); + Route::post('{id}/comments', 'ReportCommentController@store')->middleware('rolecheck:6'); + Route::delete('{id}/comments/{comment_id}', 'ReportCommentController@destroy')->middleware('superadmin'); + Route::match(['get', 'post'], 'veredict/{id}', 'ReportController@veredict')->middleware('rolecheck:6'); //Route::match(['get', 'post'], 'create', 'CouponController@create')->middleware('rolecheck:6'); }); });