From 1275d7ebc43fff7a3fba97092bf45d23097e79e8 Mon Sep 17 00:00:00 2001 From: Nabeel Shahzad Date: Fri, 30 Mar 2018 22:28:19 -0500 Subject: [PATCH] Set user on ON_LEAVE automatically after days in settings() #96 --- app/Database/seeds/DatabaseSeeder.php | 1 + app/Listeners/Cron/Nightly/PilotLeave.php | 48 +++++++++++++++++++++++ app/Providers/EventServiceProvider.php | 5 ++- app/Services/PirepService.php | 11 ++++++ app/Services/UserService.php | 18 ++++++++- 5 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 app/Listeners/Cron/Nightly/PilotLeave.php diff --git a/app/Database/seeds/DatabaseSeeder.php b/app/Database/seeds/DatabaseSeeder.php index bc319d9e..f1661bac 100755 --- a/app/Database/seeds/DatabaseSeeder.php +++ b/app/Database/seeds/DatabaseSeeder.php @@ -16,6 +16,7 @@ class DatabaseSeeder extends Seeder /** * Run the database seeds. + * @throws Exception */ public function run() { diff --git a/app/Listeners/Cron/Nightly/PilotLeave.php b/app/Listeners/Cron/Nightly/PilotLeave.php new file mode 100644 index 00000000..3dc94fe6 --- /dev/null +++ b/app/Listeners/Cron/Nightly/PilotLeave.php @@ -0,0 +1,48 @@ +userSvc = $userSvc; + } + + /** + * Set any users to being on leave after X days + * @param CronNightly $event + * @throws \UnexpectedValueException + * @throws \InvalidArgumentException + */ + public function handle(CronNightly $event): void + { + if(setting('pilots.auto_leave_days') === 0) { + return; + } + + $date = Carbon::now()->subDay(setting('pilots.auto_leave_days')); + $users = User::where('status', UserState::ACTIVE) + ->whereDate('updated_at', '<', $date); + + foreach($users as $user) { + $this->userSvc->stStatusOnLeave($user); + } + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 4f04c4c0..310236af 100755 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -8,6 +8,8 @@ use App\Events\CronWeekly; use App\Events\Expenses; use App\Events\UserStatsChanged; use App\Listeners\AwardListener; +use App\Listeners\Cron\Nightly\ApplyExpenses; +use App\Listeners\Cron\Nightly\PilotLeave; use App\Listeners\Cron\Nightly\RecalculateBalances; use App\Listeners\ExpenseListener; use App\Listeners\FinanceEvents; @@ -24,8 +26,9 @@ class EventServiceProvider extends ServiceProvider # Cron hooks CronNightly::class => [ - \App\Listeners\Cron\Nightly\ApplyExpenses::class, + ApplyExpenses::class, RecalculateBalances::class, + PilotLeave::class, ], CronWeekly::class => [ diff --git a/app/Services/PirepService.php b/app/Services/PirepService.php index eadea636..c6f04406 100644 --- a/app/Services/PirepService.php +++ b/app/Services/PirepService.php @@ -5,6 +5,7 @@ namespace App\Services; use App\Events\PirepAccepted; use App\Events\PirepFiled; use App\Events\PirepRejected; +use App\Events\UserStateChanged; use App\Events\UserStatsChanged; use App\Interfaces\Service; use App\Models\Acars; @@ -12,6 +13,7 @@ use App\Models\Bid; use App\Models\Enums\AcarsType; use App\Models\Enums\PirepSource; use App\Models\Enums\PirepState; +use App\Models\Enums\UserState; use App\Models\Navdata; use App\Models\Pirep; use App\Models\PirepFieldValues; @@ -199,6 +201,15 @@ class PirepService extends Service $this->setPilotState($pirep->pilot, $pirep); } + # Check the user state, set them to ACTIVE if on leave + if($pirep->user->state !== UserState::ACTIVE) { + $old_state = $pirep->user->state; + $pirep->user->state = UserState::ACTIVE; + $pirep->user->save(); + + event(new UserStateChanged($pirep->user, $old_state)); + } + return $pirep; } diff --git a/app/Services/UserService.php b/app/Services/UserService.php index 5c8b45b3..97ec46f1 100644 --- a/app/Services/UserService.php +++ b/app/Services/UserService.php @@ -90,7 +90,6 @@ class UserService extends Service } $subfleets = $user->rank->subfleets(); - return $subfleets->with('aircraft')->get(); } @@ -213,6 +212,23 @@ class UserService extends Service return $user; } + /** + * Set the user's status to being on leave + * @param User $user + * @return User + */ + public function stStatusOnLeave(User $user): User + { + $user->refresh(); + $user->state = UserState::ON_LEAVE; + $user->save(); + + event(new UserStateChanged($user, UserState::ACTIVE)); + + $user->refresh(); + return $user; + } + /** * Recount/update all of the stats for a user * @param User $user