Add freemium plans, wallet-billed host notifications, and Pro upgrades.
Deploy Ladill Frontdesk / deploy (push) Successful in 44s
Deploy Ladill Frontdesk / deploy (push) Successful in 44s
Host alerts use email/phone on the host record without requiring a Ladill account link; SMS and over-quota emails debit the org wallet at platform rates. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Frontdesk;
|
||||
|
||||
use App\Models\NotificationUsage;
|
||||
use App\Models\Organization;
|
||||
|
||||
class NotificationUsageService
|
||||
{
|
||||
public function currentPeriod(): string
|
||||
{
|
||||
return now()->format('Y-m');
|
||||
}
|
||||
|
||||
public function forOrganization(Organization $organization, ?string $period = null): NotificationUsage
|
||||
{
|
||||
$period ??= $this->currentPeriod();
|
||||
|
||||
return NotificationUsage::firstOrCreate(
|
||||
['organization_id' => $organization->id, 'period' => $period],
|
||||
['email_count' => 0, 'sms_count' => 0, 'email_charged_minor' => 0, 'sms_charged_minor' => 0],
|
||||
);
|
||||
}
|
||||
|
||||
public function emailCountThisMonth(Organization $organization): int
|
||||
{
|
||||
return (int) $this->forOrganization($organization)->email_count;
|
||||
}
|
||||
|
||||
public function recordEmail(Organization $organization, int $chargedMinor = 0): void
|
||||
{
|
||||
$usage = $this->forOrganization($organization);
|
||||
$usage->increment('email_count');
|
||||
if ($chargedMinor > 0) {
|
||||
$usage->increment('email_charged_minor', $chargedMinor);
|
||||
}
|
||||
}
|
||||
|
||||
public function recordSms(Organization $organization, int $chargedMinor): void
|
||||
{
|
||||
$usage = $this->forOrganization($organization);
|
||||
$usage->increment('sms_count');
|
||||
if ($chargedMinor > 0) {
|
||||
$usage->increment('sms_charged_minor', $chargedMinor);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user