File: /var/www/vhost/disk-apps/qas.sports-crowd.com/app/Core/Academy/Application/AcademyUserService.php
<?php
declare(strict_types=1);
namespace App\Core\Academy\Application;
use App\AcademyUser;
use App\Core\Academy\Application\CodeGenerators\CodeGeneratorFactory;
use App\Core\Payment\Entities\Payment;
use App\Http\Controllers\NotificationsController;
use Illuminate\Http\Request;
class AcademyUserService
{
private $academyParameterService;
public function __construct()
{
$this->academyParameterService = new AcademyParameterService();
}
public function generateCode(AcademyUser $academyUser)
{
$codeType = ParameterService::get('student_academy_code_type');
if (is_null($codeType)) {
return $academyUser;
}
if (!is_null($academyUser->student_academy_code)) {
return $academyUser;
}
$generator = CodeGeneratorFactory::make($codeType);
$academyUser->student_academy_code = $generator->generate();
$academyUser->update();
return $academyUser;
}
public function hasPaymentsByIdentification($identification)
{
$academyUser = AcademyUser::select('id')
->where('identification', $identification)
->whereHas('academy_purchases', function ($query) {
$query->where('academy_purchases.state', '=', "CONFIRMED");
})
->first();
return $academyUser != null;
}
public function createAcademyUser(Request $request)
{
$request['advisor_dial_code'] = $request['advisor_phone']['dialCode'] ?? null;
$request['advisor_country_code'] = $request['advisor_phone']['countryCode'] ?? null;
$request['advisor_phone'] = data_get($request, 'advisor_phone.nationalNumber', $request['advisor_phone'] ?? null);
return AcademyUser::firstOrCreate(['identification' => $request->get("identification")], $request->all());
}
public function notifyUnconfirmedPaymentsToAcademy(Payment $payment, $paymentTransaction)
{
// Logic to notify the academy about unconfirmed payments
$message = $this->academyParameterService->getParametersValueByTypeAcademy('notify_unconfirmed_payments');
if ($message) {
$message = preg_replace('/:payment/', $payment->description(), $message);
$message = preg_replace('/:status/', ($paymentTransaction->state . ', motivo: ' . $paymentTransaction->comment), $message);
}
// Send notification to the academy
$notificationsController = new NotificationsController();
$notificationsController->createSystemNotification($message, $payment->customer()->id());
}
}