![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/job-board.corals.io/Corals/modules/Subscriptions/Jobs/ |
<?php namespace Corals\Modules\Subscriptions\Jobs; use Corals\Modules\Payment\Facades\Payments; use Corals\Modules\Subscriptions\Models\Subscription; use Corals\Modules\Subscriptions\Services\SubscriptionService; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; class SubscriptionsCheckupJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * @var SubscriptionService */ private $subscriptionService; /** * SubscriptionsCheckupJob constructor. * @param SubscriptionService $subscriptionService */ public function __construct() { $this->subscriptionService = new SubscriptionService(); } /** * Execute the job. * * @return void */ public function handle() { $selfManagedGateways = array_keys(Payments::getAvailableGateways('subscription_self_managed')); Subscription::query() ->where('status', 'active') ->whereRaw("JSON_EXTRACT(extras, '$.notify_end_subscription_sent') is null") ->whereIn('gateway', $selfManagedGateways) ->chunk(100, function ($subscriptions) { foreach ($subscriptions as $subscription) { $remainingDays = $subscription->remainingDays(); $notifyBeforeDays = $subscription->plan->notify_end_subscription_before; if ($remainingDays < 1) { $this->subscriptionExpired($subscription); continue; } if (!$notifyBeforeDays || $subscription->getProperty('notify_end_subscription_sent')) { continue; } if ($notifyBeforeDays >= $remainingDays) { continue; } $this->notifySubscription($subscription); } }); } /** * @param $subscription */ protected function notifySubscription($subscription): void { //notify subscription $subscription->setProperty('notify_end_subscription_sent', true); event('notifications.subscription.subscription_renewal_notification', ['user' => $subscription->user, 'subscription' => $subscription]); $this->subscriptionService->renewSubscription($subscription); } /** * @param $subscription */ protected function subscriptionExpired($subscription): void { $this->subscriptionService->expireSubscription($subscription); } }