feat: automatically end absences that expired

This commit is contained in:
Miguel Nogueira 2022-04-03 20:35:55 +01:00
parent 06df0e7906
commit a9c2617713
3 changed files with 55 additions and 0 deletions

View File

@ -22,6 +22,7 @@
namespace App\Console; namespace App\Console;
use App\Jobs\ProcessDueSuspensions; use App\Jobs\ProcessDueSuspensions;
use App\Jobs\ProcessExpiredAbsences;
use Illuminate\Console\Scheduling\Schedule; use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel; use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
@ -54,6 +55,11 @@ class Kernel extends ConsoleKernel
->daily(); ->daily();
// Production value: Every day // Production value: Every day
// Development value: Every minute // Development value: Every minute
$schedule->job(new ProcessExpiredAbsences)
->daily();
// Production value: Every day
// Development value: Every minute
} }
/** /**

View File

@ -0,0 +1,39 @@
<?php
namespace App\Jobs;
use App\Services\AbsenceService;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class ProcessExpiredAbsences implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle(AbsenceService $absenceService)
{
Log::info('(absence cleaner) Ending all expired absences.');
$absenceService->endExpired();
}
}

View File

@ -5,6 +5,7 @@ namespace App\Services;
use App\Absence; use App\Absence;
use App\Exceptions\AbsenceNotActionableException; use App\Exceptions\AbsenceNotActionableException;
use App\User; use App\User;
use Carbon\Carbon;
use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
@ -148,6 +149,15 @@ class AbsenceService
} }
public function endExpired()
{
foreach (Absence::all() as $absence)
{
if (!Carbon::parse($absence->predicted_end)->isFuture()) {
$absence->setEnded();
}
}
}