HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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());
    }
}