152 lines
4.7 KiB
PHP
152 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace App\Config;
|
|
|
|
use CodeIgniter\Config\BaseConfig;
|
|
|
|
/**
|
|
* Конфигурация бизнес-модулей системы
|
|
*
|
|
* Определяет доступные модули, их параметры и цены.
|
|
*/
|
|
class BusinessModules extends BaseConfig
|
|
{
|
|
/**
|
|
* Список доступных модулей
|
|
*
|
|
* @var array<string, array{
|
|
* name: string,
|
|
* description: string,
|
|
* price_monthly: int,
|
|
* price_yearly: int,
|
|
* trial_days: int,
|
|
* features: string[]
|
|
* }>
|
|
*/
|
|
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<string, array>
|
|
*/
|
|
public function getPaidModules(): array
|
|
{
|
|
return array_filter($this->modules, function ($module) {
|
|
return $module['trial_days'] > 0;
|
|
});
|
|
}
|
|
}
|