#126 - fix workdays

This commit is contained in:
Adrian Hopek
2022-04-25 15:49:33 +02:00
parent dcce188419
commit eb5dcf39c6
9 changed files with 42 additions and 45 deletions

View File

@@ -12,6 +12,7 @@ use Toby\Domain\Notifications\VacationRequestWaitsForApprovalNotification;
use Toby\Domain\States\VacationRequest\WaitingForAdministrative;
use Toby\Domain\States\VacationRequest\WaitingForTechnical;
use Toby\Domain\VacationTypeConfigRetriever;
use Toby\Domain\WorkDaysCalculator;
use Toby\Eloquent\Models\User;
use Toby\Eloquent\Models\VacationRequest;
@@ -22,7 +23,7 @@ class SendVacationRequestRemindersToApprovers extends Command
protected $signature = "toby:send-vacation-request-reminders";
protected $description = "Sends vacation request reminders to approvers if they didn't approve";
public function handle(VacationTypeConfigRetriever $configRetriever): void
public function handle(VacationTypeConfigRetriever $configRetriever, WorkDaysCalculator $daysCalculator): void
{
$vacationRequests = VacationRequest::query()
->type(VacationType::all()->filter(fn(VacationType $type) => $configRetriever->isVacation($type))->all())
@@ -30,7 +31,7 @@ class SendVacationRequestRemindersToApprovers extends Command
/** @var VacationRequest $vacationRequest */
foreach ($vacationRequests as $vacationRequest) {
if (!$this->shouldNotify($vacationRequest)) {
if (!$this->shouldNotify($vacationRequest, $daysCalculator)) {
continue;
}
@@ -44,12 +45,13 @@ class SendVacationRequestRemindersToApprovers extends Command
}
}
protected function shouldNotify(VacationRequest $vacationRequest): bool
protected function shouldNotify(VacationRequest $vacationRequest, WorkDaysCalculator $daysCalculator): bool
{
$today = Carbon::today();
$diff = $vacationRequest->updated_at->diffInDays($today);
$days = $daysCalculator
->calculateDays($vacationRequest->updated_at->addDay(), Carbon::today())
->count();
return $diff >= static::REMINDER_INTERVAL && ($diff % static::REMINDER_INTERVAL === 0);
return $days >= static::REMINDER_INTERVAL && ($days % static::REMINDER_INTERVAL === 0);
}
protected function notifyAdminApprovers(VacationRequest $vacationRequest): void

View File

@@ -6,15 +6,15 @@ namespace Toby\Infrastructure\Http\Controllers\Api;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Carbon;
use Toby\Domain\VacationDaysCalculator;
use Toby\Domain\WorkDaysCalculator;
use Toby\Infrastructure\Http\Controllers\Controller;
use Toby\Infrastructure\Http\Requests\Api\CalculateVacationDaysRequest;
class CalculateVacationDaysController extends Controller
{
public function __invoke(CalculateVacationDaysRequest $request, VacationDaysCalculator $calculator): JsonResponse
public function __invoke(CalculateVacationDaysRequest $request, WorkDaysCalculator $calculator): JsonResponse
{
$days = $calculator->calculateDays($request->yearPeriod(), $request->from(), $request->to());
$days = $calculator->calculateDays($request->from(), $request->to());
return new JsonResponse($days->map(fn(Carbon $day) => $day->toDateString())->all());
}