58 lines
1.3 KiB
PHP
58 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Policies\Frontend;
|
|
|
|
use App\Models\Customer;
|
|
use App\Models\User;
|
|
use Domain\Enums\OrderTunnelStep;
|
|
use Domain\Services\OrderTunnelService;
|
|
use Illuminate\Support\Facades\Gate;
|
|
|
|
class OrderTunnelStepPolicy
|
|
{
|
|
public function __construct(
|
|
private readonly OrderTunnelService $orderTunnelService
|
|
) {
|
|
}
|
|
|
|
public function canReviewBasketSummary(User | Customer $user): bool
|
|
{
|
|
if ($user instanceof User) {
|
|
return false;
|
|
}
|
|
|
|
return Gate::allows(
|
|
'customerPassOrders',
|
|
$user
|
|
) && $this->orderTunnelService
|
|
->canAccessStep(OrderTunnelStep::REVIEW);
|
|
}
|
|
|
|
public function canPickTimeSlot(User | Customer $user): bool
|
|
{
|
|
if ($user instanceof User) {
|
|
return false;
|
|
}
|
|
|
|
return Gate::allows(
|
|
'customerPassOrders',
|
|
$user
|
|
) && $this->orderTunnelService
|
|
->canAccessStep(OrderTunnelStep::BOOKING);
|
|
}
|
|
|
|
public function canFinalizeOrder(User | Customer $user): bool
|
|
{
|
|
if ($user instanceof User) {
|
|
return false;
|
|
}
|
|
|
|
return Gate::allows(
|
|
'customerPassOrders',
|
|
$user
|
|
) && $this->orderTunnelService
|
|
->canAccessStep(OrderTunnelStep::CONFIRMATION);
|
|
}
|
|
}
|