Database: - Simplified beneficiary schema: single `name` field instead of first_name/last_name - Single `address` field instead of 5 separate address columns - Added migration 008_update_notification_settings.sql Backend: - Updated all beneficiaries routes for new schema - Fixed admin routes for simplified fields - Updated notification settings routes - Improved stripe and webhook handlers Frontend: - Updated all forms to use single name/address fields - Added new equipment-status and purchase screens - Added BeneficiaryDetailController service - Added subscription service - Improved navigation and auth flow - Various UI improvements 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
24 lines
764 B
TypeScript
24 lines
764 B
TypeScript
import type { BeneficiarySubscription } from '@/types';
|
|
|
|
export const isSubscriptionActive = (
|
|
subscription?: BeneficiarySubscription
|
|
): boolean => {
|
|
return subscription?.status === 'active' ||
|
|
subscription?.status === 'expiring_soon' ||
|
|
subscription?.status === 'trialing';
|
|
};
|
|
|
|
export const isSubscriptionExpiringSoon = (
|
|
subscription?: BeneficiarySubscription
|
|
): boolean => {
|
|
if (!subscription) return false;
|
|
if (subscription.status === 'expiring_soon') return true;
|
|
if (!subscription.cancelAtPeriodEnd || !subscription.endDate) return false;
|
|
|
|
const endTime = new Date(subscription.endDate).getTime();
|
|
if (Number.isNaN(endTime)) return false;
|
|
|
|
const daysLeft = (endTime - Date.now()) / (1000 * 60 * 60 * 24);
|
|
return daysLeft <= 7;
|
|
};
|