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 smsCountThisMonth(Organization $organization): int { return (int) $this->forOrganization($organization)->sms_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 = 0): void { $usage = $this->forOrganization($organization); $usage->increment('sms_count'); if ($chargedMinor > 0) { $usage->increment('sms_charged_minor', $chargedMinor); } } }