]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-499 Доработка системы оцистки вложений в док списания origin/feature_filippov_erp-499_add_cluster_filter
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Tue, 9 Dec 2025 10:12:36 +0000 (13:12 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Tue, 9 Dec 2025 10:12:36 +0000 (13:12 +0300)
14 files changed:
erp24/php_skills/01-php-basics.md
erp24/php_skills/02-php-naming.md
erp24/php_skills/10-yii2-structure.md
erp24/php_skills/11-yii2-models.md
erp24/php_skills/12-yii2-controllers.md
erp24/php_skills/13-yii2-views.md
erp24/php_skills/14-yii2-routing.md
erp24/php_skills/15-yii2-migrations.md
erp24/php_skills/16-yii2-testing.md
erp24/php_skills/17-yii2-security.md
erp24/php_skills/18-yii2-performance.md
erp24/php_skills/19-yii2-api.md
erp24/php_skills/20-yii2-widgets.md
erp24/php_skills/README.md

index 17cdd4d24d0edd967eb623fed04d5ef91db2f74e..b2f2f90481f3be503b713270647ef60d0d582b29 100644 (file)
@@ -1,5 +1,7 @@
 # PHP Basics - Основы форматирования и синтаксиса
 
+> **ВАЖНО для ERP24**: В примерах используется стандартный Yii2 namespace `app\models`. В проекте ERP24 используйте `yii_app\records` (папка `erp24/records/`).
+
 ## Кодировка и форматирование
 
 ### Кодировка файлов
index 8f4e71dd93329670f859f00f4ce84356b0dd1786..64624186383699b6f4f28270bbf0a514e656f122 100644 (file)
@@ -1,5 +1,11 @@
 # PHP Naming - Соглашения об именовании
 
+> **ВАЖНО для ERP24**: В проекте ERP24 используются специфичные namespaces:
+>
+> - Модели: `yii_app\records` (папка `erp24/records/`)
+> - Сервисы: `yii_app\services` (папка `erp24/services/`)
+> - Контроллеры: `yii_app\controllers` (папка `erp24/controllers/`)
+
 ## Общие правила
 
 ### Язык идентификаторов
index ae2bb1d7de42ace20a1697210225484b7034d5b8..5a62ed137abb82367256375d777047f5dcc4c394 100644 (file)
@@ -1,9 +1,56 @@
 # Yii2 Structure - Структура приложения
 
-## Структура директорий
+> **ВАЖНО для ERP24**: Структура проекта ERP24 отличается от стандартной Yii2. Модели находятся в `erp24/records/` (не `models/`), namespace — `yii_app\records`.
+
+## Структура ERP24
+
+```text
+yii_erp24/
+├── erp24/                   # Основное приложение
+│   ├── records/             # <-- Модели ActiveRecord (387 моделей)
+│   │   ├── Admin.php
+│   │   ├── AdminGroup.php
+│   │   ├── Store.php
+│   │   ├── Users.php
+│   │   ├── *Search.php      # Search-модели для GridView
+│   │   └── ...
+│   ├── services/            # Сервисные классы (51 сервис)
+│   ├── controllers/         # Контроллеры (160+)
+│   ├── api1/                # API версия 1
+│   ├── api2/                # API версия 2
+│   ├── api3/                # API версия 3
+│   ├── actions/             # Standalone actions (40+)
+│   ├── helpers/             # Вспомогательные классы (15+)
+│   ├── forms/               # Формы (20+)
+│   ├── migrations/          # Миграции БД (278)
+│   ├── config/              # Конфигурация
+│   ├── views/               # Представления
+│   ├── widgets/             # Виджеты
+│   ├── jobs/                # Очереди
+│   └── docs/                # Документация
+├── docker/                  # Docker конфигурация
+└── tests/                   # Тесты
+```
+
+### Namespaces ERP24
+
+| Путь | Namespace |
+|------|-----------|
+| `erp24/records/` | `yii_app\records` |
+| `erp24/services/` | `yii_app\services` |
+| `erp24/controllers/` | `yii_app\controllers` |
+| `erp24/api1/controllers/` | `yii_app\api1\controllers` |
+| `erp24/api2/controllers/` | `yii_app\api2\controllers` |
+| `erp24/api3/` | `yii_app\api3` |
+| `erp24/helpers/` | `yii_app\helpers` |
+| `erp24/forms/` | `yii_app\forms` |
+| `erp24/jobs/` | `yii_app\jobs` |
+
+## Структура директорий (стандартный Yii2)
 
 ### Стандартная структура Yii2 Basic
-```
+
+```text
 project/
 ├── assets/              # Asset bundles
 ├── commands/            # Console команды
@@ -14,7 +61,7 @@ project/
 │   └── web.php          # Конфиг веб-приложения
 ├── controllers/         # Контроллеры
 ├── mail/                # Шаблоны писем
-├── models/              # Модели
+├── models/              # Модели (в ERP24: records/)
 ├── runtime/             # Временные файлы
 ├── views/               # Представления
 │   ├── layouts/         # Макеты
@@ -28,7 +75,8 @@ project/
 ```
 
 ### Структура Yii2 Advanced
-```
+
+```text
 project/
 ├── backend/             # Административная часть
 │   ├── assets/
@@ -65,7 +113,8 @@ project/
 ## Модульная структура
 
 ### Организация для больших проектов
-```
+
+```text
 project/
 ├── api/                 # REST API модуль
 │   ├── config/
@@ -140,6 +189,7 @@ $config = [
             'class' => \yii\caching\FileCache::class,
         ],
         'user' => [
+            // В ERP24: \yii_app\records\Admin::class
             'identityClass' => \app\models\User::class,
             'enableAutoLogin' => true,
             'loginUrl' => ['site/login'],
@@ -425,13 +475,15 @@ Yii::$app->notifier->send('Hello!', 'email');
 ## Сервисные классы
 
 ### Структура сервиса
+
 ```php
 <?php
-// services/payment/PaymentService.php
-namespace app\services\payment;
+// erp24/services/PaymentService.php (для ERP24)
+// или services/payment/PaymentService.php (стандартный Yii2)
+namespace yii_app\services;  // В ERP24
 
-use app\models\Order;
-use app\models\Payment;
+use yii_app\records\Order;   // В ERP24: records вместо models
+use yii_app\records\Payment;
 use yii\base\Component;
 use yii\base\InvalidConfigException;
 
@@ -735,9 +787,19 @@ Yii::endProfile('slow-operation');
 
 ## Рекомендации для Claude Code
 
+### Общие правила
+
 1. **Следуйте структуре Yii2** - используйте стандартные директории
 2. **Модульность** - разбивайте большие приложения на модули
 3. **Компоненты** - выносите переиспользуемую логику в компоненты
 4. **Сервисы** - изолируйте бизнес-логику от контроллеров
 5. **Конфигурация** - используйте переменные окружения для секретов
 6. **Логирование** - настраивайте разные targets для разных уровней
+
+### Специфика ERP24
+
+1. **Модели в `erp24/records/`** — namespace `yii_app\records`
+2. **Сервисы в `erp24/services/`** — namespace `yii_app\services`
+3. **3 уровня API**: `api1`, `api2`, `api3` со своими контроллерами
+4. **Search-модели** находятся рядом с основными моделями в `records/`
+5. **Identity Class**: `\yii_app\records\Admin` (не User)
index 27fbc3047aee6008c445b673451bacbbcad2d2a6..52e55374a1d33695c62565774bcf770bd945b1a6 100644 (file)
@@ -1,12 +1,32 @@
 # Yii2 Models - Модели и ActiveRecord
 
+> **ВАЖНО для ERP24**: В проекте ERP24 модели (ActiveRecord) располагаются в папке `erp24/records/` с namespace `yii_app\records`, а не в стандартной `models/` с namespace `app\models`.
+
+## Структура проекта ERP24
+
+```text
+erp24/
+├── records/              # <-- Модели ActiveRecord (387 моделей)
+│   ├── Admin.php
+│   ├── AdminGroup.php
+│   ├── Store.php
+│   ├── Users.php
+│   └── ...
+├── services/             # Бизнес-логика
+├── controllers/          # Контроллеры
+└── ...
+```
+
 ## Структура модели
 
 ### Порядок элементов в модели
 ```php
 <?php
-namespace app\models;
+declare(strict_types=1);
 
+namespace yii_app\records;  // Namespace для ERP24
+
+use Yii;
 use yii\db\ActiveRecord;
 use yii\behaviors\TimestampBehavior;
 use yii\behaviors\BlameableBehavior;
@@ -153,21 +173,53 @@ class User extends ActiveRecord
 ### Модели и таблицы
 ```php
 <?php
-// ПРАВИЛЬНО - имя класса в единственном числе, CamelCase
-class User extends ActiveRecord {}
-class OrderItem extends ActiveRecord {}
-class ProductCategory extends ActiveRecord {}
+namespace yii_app\records;
 
-// Таблица - множественное число, snake_case
+use yii\db\ActiveRecord;
+
+// ПРАВИЛЬНО для ERP24 - имя класса в CamelCase
+class Admin extends ActiveRecord {}
+class AdminGroup extends ActiveRecord {}
+class StoreOrders extends ActiveRecord {}
+class WriteOffsProducts extends ActiveRecord {}
+
+// Таблица - возвращается через tableName()
 public static function tableName(): string
 {
-    return '{{%users}}';       // users
-    return '{{%order_items}}'; // order_items
+    return 'admin';           // Без префикса
+    return 'admin_group';     // snake_case
+    return 'store_orders';    // snake_case
 }
 
 // НЕПРАВИЛЬНО
-class Users extends ActiveRecord {}  // множественное число
-class orderItem extends ActiveRecord {} // не CamelCase
+class admin extends ActiveRecord {}      // не CamelCase
+class adminGroup extends ActiveRecord {} // не CamelCase
+```
+
+### Примеры из ERP24
+```php
+<?php
+// erp24/records/Admin.php
+namespace yii_app\records;
+
+class Admin extends ActiveRecord implements IdentityInterface
+{
+    public static function tableName(): string
+    {
+        return 'admin';
+    }
+}
+
+// erp24/records/AdminGroup.php
+namespace yii_app\records;
+
+class AdminGroup extends ActiveRecord
+{
+    public static function tableName(): string
+    {
+        return 'admin_group';
+    }
+}
 ```
 
 ## Связи (Relations)
@@ -175,6 +227,11 @@ class orderItem extends ActiveRecord {} // не CamelCase
 ### hasOne
 ```php
 <?php
+namespace yii_app\records;
+
+use yii\db\ActiveQuery;
+use yii\db\ActiveRecord;
+
 class User extends ActiveRecord
 {
     // Один к одному
@@ -202,6 +259,11 @@ class User extends ActiveRecord
 ### hasMany
 ```php
 <?php
+namespace yii_app\records;
+
+use yii\db\ActiveQuery;
+use yii\db\ActiveRecord;
+
 class User extends ActiveRecord
 {
     // Один ко многим
@@ -237,6 +299,11 @@ class User extends ActiveRecord
 ### Many-to-Many через связующую таблицу
 ```php
 <?php
+namespace yii_app\records;
+
+use yii\db\ActiveQuery;
+use yii\db\ActiveRecord;
+
 class User extends ActiveRecord
 {
     // Через промежуточную модель
@@ -267,12 +334,14 @@ class User extends ActiveRecord
     }
 }
 
-// Связующая модель
+// Связующая модель (erp24/records/UserRole.php)
+namespace yii_app\records;
+
 class UserRole extends ActiveRecord
 {
     public static function tableName(): string
     {
-        return '{{%user_roles}}';
+        return 'user_roles';  // Без префикса {{%}} для ERP24
     }
 
     public function getUser(): ActiveQuery
@@ -582,8 +651,9 @@ $user->save();
 ### Кастомный ActiveQuery
 ```php
 <?php
-// models/query/UserQuery.php
-namespace app\models\query;
+// erp24/records/query/UserQuery.php (если нужен отдельный файл)
+// Или в том же файле модели
+namespace yii_app\records;
 
 use yii\db\ActiveQuery;
 
@@ -975,9 +1045,62 @@ $transaction = \Yii::$app->db->beginTransaction(
 
 ## Рекомендации для Claude Code
 
-1. **Тонкие модели** - выносите сложную бизнес-логику в сервисы
+### Общие правила
+
+1. **Тонкие модели** - выносите сложную бизнес-логику в сервисы (`erp24/services/`)
 2. **Используйте behaviors** - для повторяющейся логики (timestamps, slugs)
 3. **Кастомные ActiveQuery** - для переиспользуемых scope-ов
 4. **Eager loading** - всегда используйте with() для связей в циклах
 5. **Валидация на уровне БД** - добавляйте constraints в миграциях
 6. **Транзакции** - оборачивайте связанные операции
+
+### Специфика ERP24
+
+1. **Расположение моделей**: все модели ActiveRecord в `erp24/records/`
+2. **Namespace**: `yii_app\records`
+3. **Без префиксов таблиц**: в `tableName()` возвращается имя таблицы без `{{%}}`
+4. **Search-модели**: `*Search.php` классы находятся рядом с основной моделью
+5. **Константы**: используются для статусов, типов, ID групп
+6. **PHPDoc**: обязательны `@property` аннотации для связей и виртуальных свойств
+
+### Примеры из проекта
+
+```php
+<?php
+// erp24/records/Admin.php - типичная структура модели ERP24
+declare(strict_types=1);
+
+namespace yii_app\records;
+
+use Yii;
+use yii\db\ActiveRecord;
+use yii\web\IdentityInterface;
+
+/**
+ * Class Admin
+ * @property AdminGroup $adminGroup
+ * @property EmployeePosition $employeePosition
+ * @property int $id
+ * @property int $group_id
+ * @property string $name
+ */
+class Admin extends ActiveRecord implements IdentityInterface
+{
+    // Константы для статусов и групп
+    public const WORK_STATUS_IS_WORK = 1;
+    public const WORK_STATUS_FIRED = 4;
+    public const CLUSTER_MANAGER_GROUP_ID = 7;
+    public const ADMINISTRATOR_GROUP_ID = 50;
+
+    public static function tableName(): string
+    {
+        return 'admin';  // Без префикса
+    }
+
+    // Связь с группой
+    public function getAdminGroup(): ActiveQuery
+    {
+        return $this->hasOne(AdminGroup::class, ['id' => 'group_id']);
+    }
+}
+```
index 4c914f9c4019c3f5d1c9d1301c2f32d23d4dc464..924683609c715bd52227fb65ea16e04638bf687e 100644 (file)
@@ -1,13 +1,18 @@
 # Yii2 Controllers - Контроллеры
 
+> **ВАЖНО для ERP24**: Контроллеры располагаются в `erp24/controllers/` с namespace `yii_app\controllers`. Модели импортируются из `yii_app\records`.
+
 ## Структура контроллера
 
 ### Базовый контроллер
+
 ```php
 <?php
-namespace app\controllers;
+declare(strict_types=1);
+
+namespace yii_app\controllers;  // Namespace для ERP24
 
-use app\models\User;
+use yii_app\records\User;       // Модели из records
 use yii\web\Controller;
 use yii\web\NotFoundHttpException;
 use yii\filters\AccessControl;
index eae981c998740f8424997c0cd69c8b443c2491f2..a242ec62ad09f7188b4e12eca8931cedd6dafd81 100644 (file)
@@ -1,9 +1,12 @@
 # Yii2 Views - Представления и шаблоны
 
+> **ВАЖНО для ERP24**: Views располагаются в `erp24/views/`. При работе с моделями используйте `yii_app\records`, assets — `yii_app\assets`.
+
 ## Структура views
 
 ### Организация директорий
-```
+
+```text
 views/
 ├── layouts/              # Макеты
 │   ├── main.php          # Основной layout
index 5fc1f05970454f99820e9f8935bb5413dd698ab8..2317bf88c18941bebcba502a50f45c3b0a2f7607 100644 (file)
@@ -1,5 +1,7 @@
 # Yii2 Routing - Маршрутизация
 
+> **ВАЖНО для ERP24**: Маршрутизация настраивается в `erp24/config/`. При создании кастомных правил используйте namespace `yii_app\components`.
+
 ## Конфигурация UrlManager
 
 ### Базовая настройка
index 8164137002ff38dfaad1c3861cf9a4d9f7c14eff..90af7b550279787bb1ad7cf0ce66b09b1bf0f803 100644 (file)
@@ -1,5 +1,7 @@
 # Yii2 Migrations - Миграции базы данных
 
+> **ВАЖНО для ERP24**: Миграции располагаются в `erp24/migrations/` (278 миграций). Namespace миграций — `yii_app\migrations`.
+
 ## Основы миграций
 
 ### Создание миграции
index 6662e8727a764a1c1d0b29b106d25144d56a9e3b..8cd4c0a2d643a5bb2130e2142dbb8b4224fc6b63 100644 (file)
@@ -1,5 +1,7 @@
 # Yii2 Testing - Тестирование
 
+> **ВАЖНО для ERP24**: Тесты располагаются в `erp24/tests/`. При тестировании моделей используйте `yii_app\records`, fixtures в `erp24/tests/fixtures/`.
+
 ## Настройка окружения
 
 ### Codeception конфигурация
index e9c53eb1089b0eaf1b5e63aaf800b006fc4b810f..52fd0a089158f07179592d87c792daadf0854fa4 100644 (file)
@@ -1,12 +1,16 @@
 # Yii2 Security - Безопасность
 
+> **ВАЖНО для ERP24**: Identity класс — `yii_app\records\Admin` (файл `erp24/records/Admin.php`). Используйте namespace `yii_app\records` вместо `app\models`.
+
 ## Аутентификация
 
 ### Identity Interface
+
 ```php
 <?php
-// models/User.php
-namespace app\models;
+// erp24/records/Admin.php (для ERP24)
+// или models/User.php (стандартный Yii2)
+namespace yii_app\records;  // В ERP24
 
 use yii\db\ActiveRecord;
 use yii\web\IdentityInterface;
index 2d6e461f4c1c2c103af510c8f1c9981f4f392955..8aae0750ad234e908d268e9c612eefc256168ae9 100644 (file)
@@ -1,5 +1,7 @@
 # Yii2 Performance - Производительность
 
+> **ВАЖНО для ERP24**: При оптимизации запросов используйте модели из `yii_app\records`. Кэширование настраивается в `erp24/config/`.
+
 ## Кэширование
 
 ### Конфигурация кэша
index b65540c3f6ad2a13f387b9f1c96886f25e2923fe..d006afbde6cb7592962561b1764a5e285344b0ad 100644 (file)
@@ -1,12 +1,21 @@
 # Yii2 REST API - Построение API
 
+> **ВАЖНО для ERP24**: API контроллеры располагаются в:
+>
+> - `erp24/api1/controllers/` — namespace `yii_app\api1\controllers`
+> - `erp24/api2/controllers/` — namespace `yii_app\api2\controllers`
+> - `erp24/api3/` — namespace `yii_app\api3`
+>
+> Модели импортируются из `yii_app\records`.
+
 ## Базовая конфигурация
 
 ### ActiveController
+
 ```php
 <?php
-// controllers/api/UserController.php
-namespace app\controllers\api;
+// erp24/api1/controllers/UserController.php (для ERP24)
+namespace yii_app\api1\controllers;  // В ERP24
 
 use yii\rest\ActiveController;
 use yii\filters\auth\HttpBearerAuth;
@@ -14,7 +23,7 @@ use yii\filters\RateLimiter;
 
 class UserController extends ActiveController
 {
-    public $modelClass = \app\models\User::class;
+    public $modelClass = \yii_app\records\User::class;  // В ERP24
 
     public function behaviors(): array
     {
index 1f3036d9f648b39bbad86eec2e012ae5a0fe9168..b0b0d1a6fa416b8eb1d4be67dc7e3e4d5975ad96 100644 (file)
@@ -1,5 +1,7 @@
 # Yii2 Widgets - Виджеты и компоненты
 
+> **ВАЖНО для ERP24**: Виджеты располагаются в `erp24/widgets/` с namespace `yii_app\widgets`. При работе с моделями используйте `yii_app\records`.
+
 ## Базовые виджеты
 
 ### GridView
index 36bddef43781879a14a7cdf4c34ce28c3367ac44..fbf59600fb5a1acf26ed80cd67eb83d2b2267484 100644 (file)
@@ -2,6 +2,31 @@
 
 Современный набор гайдлайнов для разработки на PHP 8 и Yii2, оптимизированный для использования с Claude Code и другими AI-ассистентами.
 
+## Адаптация для ERP24
+
+> **ВАЖНО**: Данные гайдлайны адаптированы под структуру проекта ERP24.
+
+### Ключевые отличия от стандартного Yii2
+
+| Компонент | Стандартный Yii2 | ERP24 |
+|-----------|------------------|-------|
+| Модели | `app\models` | `yii_app\records` |
+| Папка моделей | `models/` | `erp24/records/` |
+| Сервисы | `app\services` | `yii_app\services` |
+| Контроллеры | `app\controllers` | `yii_app\controllers` |
+| API v1 | — | `yii_app\api1\controllers` |
+| API v2 | — | `yii_app\api2\controllers` |
+| API v3 | — | `yii_app\api3` |
+| Identity Class | `User` | `Admin` |
+
+### Статистика проекта ERP24
+
+- **387** моделей ActiveRecord
+- **160+** контроллеров
+- **51** сервис
+- **278** миграций
+- **3** версии API
+
 ## Структура документации
 
 ### Основы PHP