*/ public array $modules = [ 'base' => [ 'name' => 'Базовый модуль', 'description' => 'Основные функции управления клиентами', 'price_monthly' => 0, 'price_yearly' => 0, 'trial_days' => 0, 'features' => [ 'Управление клиентами', 'Базовая история взаимодействий', ], ], 'crm' => [ 'name' => 'CRM', 'description' => 'Полноценная CRM-система с воронками продаж', 'price_monthly' => 990, 'price_yearly' => 9900, 'trial_days' => 14, 'features' => [ 'Воронки продаж', 'Управление контактами', 'Этапы сделок', 'Drag-n-drop сортировка', 'Автоматизация', ], ], 'booking' => [ 'name' => 'Бронирования', 'description' => 'Управление бронированиями и расписанием', 'price_monthly' => 1490, 'price_yearly' => 14900, 'trial_days' => 14, 'features' => [ 'Календарь бронирований', 'Управление ресурсами', 'Уведомления клиентам', ], ], 'tasks' => [ 'name' => 'Задачи', 'description' => 'Управление задачами и проектами', 'price_monthly' => 790, 'price_yearly' => 7900, 'trial_days' => 14, 'features' => [ 'Доски задач', 'Назначение ответственных', 'Сроки и дедлайны', ], ], 'proof' => [ 'name' => 'Proof', 'description' => 'Система согласования документов', 'price_monthly' => 590, 'price_yearly' => 5900, 'trial_days' => 14, 'features' => [ 'Согласование документов', 'Комментарии и версии', 'Утверждение', ], ], ]; /** * Проверка существования модуля * * @param string $moduleCode * @return bool */ public function exists(string $moduleCode): bool { return isset($this->modules[$moduleCode]); } /** * Получение информации о модуле (без переопределений) * * @param string $moduleCode * @return array|null */ public function getModule(string $moduleCode): ?array { return $this->modules[$moduleCode] ?? null; } /** * Получение цены модуля * * @param string $moduleCode * @param string $period 'monthly' или 'yearly' * @return int */ public function getPrice(string $moduleCode, string $period = 'monthly'): int { $module = $this->getModule($moduleCode); if (!$module) { return 0; } return $period === 'yearly' ? $module['price_yearly'] : $module['price_monthly']; } /** * Получение списка всех кодов модулей * * @return array */ public function getAllModuleCodes(): array { return array_keys($this->modules); } /** * Получение списка платных модулей (с возможностью триала) * * @return array */ public function getPaidModules(): array { return array_filter($this->modules, function ($module) { return $module['trial_days'] > 0; }); } }