Fix endcustomer package allocation and event create gating
This commit is contained in:
@@ -13,13 +13,38 @@ class PackageLimitEvaluator
|
||||
|
||||
public function assessEventCreation(Tenant $tenant, ?string $includedPackageSlug = null): ?array
|
||||
{
|
||||
$hasEndcustomerPackage = $tenant->tenantPackages()
|
||||
$activeEndcustomerPackages = $tenant->tenantPackages()
|
||||
->where('active', true)
|
||||
->where(function ($query) {
|
||||
$query->whereNull('expires_at')->orWhere('expires_at', '>', now());
|
||||
})
|
||||
->whereHas('package', fn ($query) => $query->withTrashed()->where('type', 'endcustomer'))
|
||||
->exists();
|
||||
->withCount(['eventPackages' => function ($query) use ($tenant) {
|
||||
$query->whereHas('event', fn ($eventQuery) => $eventQuery->where('tenant_id', $tenant->id));
|
||||
}])
|
||||
->get();
|
||||
|
||||
if ($hasEndcustomerPackage) {
|
||||
return null;
|
||||
if ($activeEndcustomerPackages->isNotEmpty()) {
|
||||
$hasAvailableEndcustomerPackage = $activeEndcustomerPackages
|
||||
->contains(fn ($tenantPackage) => (int) ($tenantPackage->event_packages_count ?? 0) < 1);
|
||||
|
||||
if ($hasAvailableEndcustomerPackage) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
'code' => 'event_limit_exceeded',
|
||||
'title' => __('api.packages.event_limit_exceeded.title'),
|
||||
'message' => __('api.packages.event_limit_exceeded.message'),
|
||||
'status' => 402,
|
||||
'meta' => [
|
||||
'scope' => 'events',
|
||||
'used' => (int) $activeEndcustomerPackages->count(),
|
||||
'limit' => (int) $activeEndcustomerPackages->count(),
|
||||
'remaining' => 0,
|
||||
'source' => 'endcustomer_packages',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
if ($tenant->hasEventAllowanceFor($includedPackageSlug)) {
|
||||
|
||||
Reference in New Issue
Block a user