ldc-boutique-cnc-sable/domain/Models/ValueObjects/ShopPickupOverride.php

42 lines
1.3 KiB
PHP
Raw Permalink Normal View History

2026-06-14 21:32:07 +02:00
<?php
declare(strict_types=1);
namespace Domain\Models\ValueObjects;
use Carbon\CarbonImmutable;
2026-06-14 21:32:07 +02:00
use Carbon\CarbonInterface;
use Domain\Models\Entities\PickupExceptionOnDate;
final readonly class ShopPickupOverride
{
public function __construct(
public PickupExceptionOnDate $exception,
public ?CarbonInterface $replacementDate = null,
public ?CarbonInterface $orderDeadlineAt = null
) {
if ($orderDeadlineAt !== null && $replacementDate !== null && $orderDeadlineAt->greaterThanOrEqualTo($replacementDate)) {
throw new \DomainException(
'Order deadline must be strictly before the replacement date'
);
}
}
public function hasReplacement(): bool
{
return $this->replacementDate !== null;
}
public function effectiveDeadline(CarbonInterface $defaultDeadline): CarbonImmutable
{
return $this->orderDeadlineAt !== null
? CarbonImmutable::createFromInterface($this->orderDeadlineAt)
: CarbonImmutable::createFromInterface($defaultDeadline);
}
public function isDeadlinePassed(CarbonInterface $now, CarbonInterface $defaultDeadline): bool
{
return $now->greaterThan($this->effectiveDeadline($defaultDeadline));
}
2026-06-14 21:32:07 +02:00
}