|
|
| (Не показані 2 проміжні версії цього користувача) |
| Рядок 1: |
Рядок 1: |
| {{Картка документації K2 | | {{DISPLAYTITLE:Класи та команди K2 ERP Python}} |
| | назва = K2 Cloud ERP Python для розробників
| |
| | система = K2 Cloud ERP
| |
| | мова = Python
| |
| | тип = Документація для розробників
| |
| }} | |
|
| |
|
| '''K2 Cloud ERP Python для розробників''' — документація з вимогами до створення компонентів, структури пакетів, системних класів, API, компонентних класів і допоміжних JavaScript-функцій системи [[K2 Cloud ERP]]. | | '''Класи та команди K2 ERP Python''' — це технічна документація для розробників, які працюють із Python-версією [[K2 ERP]], створюють компоненти, підключають системні класи, використовують API, пишуть документацію, тести та допоміжні JavaScript-функції. |
|
| |
|
| __TOC__
| | Документ описує загальні вимоги до компонентів K2 ERP, базові системні класи, структуру компонентів, правила документування та приклади використання окремих класів. |
|
| |
|
| == K2 Cloud ERP Python == | | <div style="border:3px solid #1565c0; background:#e3f2fd; padding:14px; margin:16px 0;"> |
| | '''Коротко.''' Компонент K2 ERP має бути не просто набором Python-файлів. Він повинен мати зрозумілу структуру, моделі, роути, API, залежності, документацію, історію змін, тести, локалізації, приклади та ресурси. |
| | </div> |
|
| |
|
| Команда для автоматичної генерації html файлу з документацією по док стрінгах:
| | __TOC__ |
| pydoc -w k2/k2obj.py, де k2/k2obj.py - шлях до файлу з корня
| |
|
| |
|
| == Вимоги до створення компонент == | | == Призначення документа == |
|
| |
|
| ==== Компоненти, які публікуються в K2 Cloud ERP повинні мати щонайменше такі атрибути ====
| | Ця сторінка потрібна для того, щоб розробники K2 ERP працювали з компонентами в єдиному стилі. |
|
| |
|
| ORM структури. Структури, які потрібні для даної компоненти. (файл models.py)
| | Документація допомагає зрозуміти: |
|
| |
|
| ==== Головний клас компоненти, роути та api (файл views.py) ====
| | * як має виглядати структура компоненти; |
| | * які файли є обов’язковими; |
| | * де зберігати моделі, роути, хуки й додаткові об’єкти; |
| | * як описувати залежності; |
| | * як оформлювати документацію для користувачів і розробників; |
| | * які базові класи доступні в ядрі K2 ERP; |
| | * як використовувати системні API; |
| | * які JavaScript-допоміжні функції доступні для інтерфейсу. |
|
| |
|
| Додаткові об’єкти компоненти. Додаткові класи від яких залежить функціонал компоненти. (каталог objects/)
| | == Генерація документації з docstring == |
|
| |
|
| Хуки. Використовуються для розширення або зміни поведінки стандартних методів системи (файл hooks.py)
| | Для автоматичної генерації HTML-документації з docstring можна використовувати стандартний інструмент `pydoc`. |
|
| |
|
| Зележності від інших компонент. (файл requirements-components.txt)
| | Приклад команди: |
| приклад:
| |
|
| |
|
| <pre> | | <pre> |
| k2log==2.0.0.2
| | pydoc -w k2/k2obj.py |
| k2grid==2.0.4.1
| |
| k2form==2.0.1.27
| |
| </pre> | | </pre> |
|
| |
|
| Python залежності, якщо є. (файл requirements.txt)
| | де: |
|
| |
|
| Readme.md. Файл в якому написана ціль компоненти, як її використовувати. Та різні моменти, які потрібно знати програмістам, адмінам та користувачам
| | <pre> |
| | k2/k2obj.py |
| | </pre> |
|
| |
|
| Історія змін. Документ, в якому описуються зміни текстом, зрозумілим для користувачів. (файл history.txt)
| | — шлях до Python-файлу від кореня проєкту. |
|
| |
|
| Структура бази даних. На даний час, в форматі SQL power Architech. (каталог doc/schema)
| | <div style="border:2px solid #f57c00; background:#fff3e0; padding:14px; margin:16px 0;"> |
| | '''Важливо.''' Щоб автоматична документація була корисною, класи й методи потрібно описувати зрозумілими docstring-коментарями, а не залишати код без пояснень. |
| | </div> |
|
| |
|
| Бізнес-процеси, схеми роботи, які були втілені в проудкті. В форматі Draw.io. (каталог doc/business_processes)
| | == Вимоги до компоненти K2 ERP == |
|
| |
|
| Інструкція користувача. Де розписано, як користуватись продуктом. Інструкція користувача повинна автоматично підтягуватись системою документації K2 Cloud ERP, додаючи розділ документації для цього продукту і надаючи можливість пошуку інформації в документації. Зберігається в каталозі: doc/user_manual)
| | Компонента K2 ERP повинна мати стандартизовану структуру. Це потрібно для того, щоб систему можна було оновлювати, документувати, тестувати й підключати до інших модулів без ручного хаосу. |
|
| |
|
| Документацію для розробників, що генерується автоматично з коментарів. Зберігається в каталозі: doc/developer_documentation )
| | Основні частини компоненти: |
|
| |
|
| (потрібно завершити автоматичне збирання із компонент)
| | {| class="wikitable" style="width:100%;" |
| | ! Частина |
| | ! Призначення |
| | |- |
| | | <code>models.py</code> |
| | | ORM-структури та моделі бази даних компоненти |
| | |- |
| | | <code>views.py</code> |
| | | Головний клас компоненти, роути та API |
| | |- |
| | | <code>objects/</code> |
| | | Додаткові класи, від яких залежить функціонал компоненти |
| | |- |
| | | <code>hooks.py</code> |
| | | Хуки для розширення або зміни стандартної поведінки системи |
| | |- |
| | | <code>requirements-components.txt</code> |
| | | Залежності від інших компонент K2 ERP |
| | |- |
| | | <code>requirements.txt</code> |
| | | Python-залежності компоненти |
| | |- |
| | | <code>README.md</code> |
| | | Опис цілі компоненти, способу використання та важливих приміток |
| | |- |
| | | <code>history.txt</code> |
| | | Історія змін, написана зрозумілою для користувача мовою |
| | |- |
| | | <code>doc/</code> |
| | | Документація, схеми, бізнес-процеси та інструкції |
| | |- |
| | | <code>tests/</code> |
| | | Юніт-тести компоненти |
| | |- |
| | | <code>examples/</code> |
| | | Приклади використання компоненти |
| | |- |
| | | <code>widgets/</code> |
| | | Віджети, дашборди та візуальні елементи |
| | |- |
| | | <code>languages/</code> |
| | | Локалізації та переклади |
| | |- |
| | | <code>static/</code> |
| | | Зображення, стилі, JavaScript, текстові ресурси |
| | |- |
| | | <code>templates/</code> |
| | | Шаблони компоненти |
| | |- |
| | | <code>yml/</code> |
| | | YML-конфігурації |
| | |} |
|
| |
|
| Документація для розробників (не обов’язково, але желательно). Додатково, якщо потрібно, щось додатково відмітити. Каталог doc/additional_developer_docs)
| | == Залежності компоненти == |
|
| |
|
| Приклади програмного коду з використанням компонент. Які автоматично з’являються в Examples при встановленні компоненти. І по яким можна протестувати функціонал. /examples (потрібно вирішити як додавати)
| | Якщо компонента залежить від інших компонент K2 ERP, ці залежності потрібно вказати у файлі: |
|
| |
|
| Віджети. Дашборди та інші візуальні елементи для вставки на головну сторінку та інші сторінки, які можна додавати автоматично. (потрібно вирішити як додавати) /widgets
| | <pre> |
| | requirements-components.txt |
| | </pre> |
|
| |
|
| Юніт тести. Написати де і яка структура. Юніт тести повинні автоматично знаходитись системою і використовуватись для загального тестування системи. Каталог /tests (потрібно завершити автоматичне збирання із компонент)
| | Приклад: |
| | |
| Локалізації. В К2 використовуються щонайменше: українська та англійська мова. Ядро повинно вміти робити переклади і давати можливість працювати з перекладами стороннім користувачам, покращуючи якість перекладу. Зберігається в каталозі:
| |
|
| |
|
| <pre> | | <pre> |
| /languages/en/LC_MESSAGES/messages.po
| | k2log==2.0.0.2 |
| /languages/en/LC_MESSAGES/messages.mo
| | k2grid==2.0.4.1 |
| | k2form==2.0.1.27 |
| </pre> | | </pre> |
|
| |
|
| Демо-дані. Це дані, які розгортаються на демо-базі даних для демонстрації роботи з продуктом. (потрібно вирішити як додавати)
| | Python-залежності, якщо вони потрібні, вказуються у файлі: |
| | |
| Файли ресурсів (зображення, тексти): Каталог /static
| |
| | |
| YML, якщо є. Каталог /yml
| |
| | |
| Іконки, які будуть використовуватись для представлення компоненти. Каталог /static/img
| |
| | |
| Авторство. Якщо К2, то в форматі, як прийнято в цілому для К2, якщо сторонній розробник - інформація про стороннього розробника. Copyright © 2000-2025 К2®, Rudiuk Serhii. All rights reserved.
| |
| | |
| Шаблони, якщо є. Вказуємо каталог. Звертаю увагу, що К2 Cloud ERP повинна мати змогу використовувати не обмежену кількість шаблонів. Шаблони повинні бути так розроблені, щоб не конфліктувати з глобальними шаблонами системи. Каталог /templates
| |
| | |
| ==== Приклад дерева структури компоненти ====
| |
|
| |
|
| <pre> | | <pre> |
| components/
| | requirements.txt |
| └── k2adm/
| |
| ├── k2adm/
| |
| │ ├── data/
| |
| │ ├── languages/
| |
| │ ├── static/
| |
| │ ├── templates/
| |
| │ ├── yml/
| |
| │ ├── tests/
| |
| │ ├── examples/
| |
| │ ├── widgets/
| |
| │ ├── __init__.py
| |
| │ ├── objects/
| |
| │ ├── users/users.py
| |
| │ ├── roles/roles.py
| |
| │ ├── forms.py
| |
| │ ├── history.txt
| |
| │ ├── hooks.py
| |
| │ ├── models.py
| |
| │ ├── views.py│
| |
| ├── __init__.py
| |
| ├── doc/
| |
| ├── schema/
| |
| ├── business_processes/
| |
| ├── user_manual/
| |
| ├── developer_documentation/
| |
| ├── additional_developer_docs/
| |
| ├── history.txt
| |
| ├── requirements-components.txt
| |
| ├── requirements.txt
| |
| ├── setup.py
| |
| </pre> | | </pre> |
|
| |
|
| == Системні класи == | | == Документація компоненти == |
| | |
| === Клас K2 ===
| |
|
| |
|
| Ядро системи K2CloudERP.
| | Компонента повинна мати документацію для різних груп користувачів. |
|
| |
|
| ==== Властивості ==== | | {| class="wikitable" style="width:100%;" |
| | ! Каталог |
| | ! Що зберігається |
| | |- |
| | | <code>doc/schema</code> |
| | | Структура бази даних, зокрема SQL Power Architect-схеми |
| | |- |
| | | <code>doc/business_processes</code> |
| | | Бізнес-процеси та схеми роботи у форматі Draw.io |
| | |- |
| | | <code>doc/user_manual</code> |
| | | Інструкція користувача |
| | |- |
| | | <code>doc/developer_documentation</code> |
| | | Документація для розробників, згенерована автоматично з коментарів |
| | |- |
| | | <code>doc/additional_developer_docs</code> |
| | | Додаткова документація для розробників |
| | |} |
|
| |
|
| ==== Властивості класу ====
| | Інструкція користувача повинна автоматично підтягуватися системою документації K2 ERP, створюючи окремий розділ документації для встановленого продукту. |
|
| |
|
| domain_name #назва домену
| | == Локалізації == |
|
| |
|
| domain_protocol #протокол
| | У K2 ERP використовуються щонайменше українська та англійська мови. |
|
| |
|
| domain #домен
| | Файли перекладів зберігаються у структурі: |
| | |
| port #порт
| |
| | |
| db #підключення до БД
| |
| | |
| default_language #мова за замовчуванням
| |
| | |
| ==== Властивості інстансу ====
| |
| | |
| ==== self.secur #властивість що підключає до ядра клас безпеки ====
| |
| | |
| self.path #властивість що підключає до ядра клас пошуку шляхів по ієрархії self.data #властивість що підключає до ядра клас синхронізації даних
| |
| | |
| ==== self.settings #властивість що підключає до ядра клас збереження та пошуку налаштувань ====
| |
| | |
| ==== self.notifications #властивість що підключає до ядра клас створення та відправки сповіщень ====
| |
|
| |
|
| <pre> | | <pre> |
| #отримати домен
| | /languages/en/LC_MESSAGES/messages.po |
| | /languages/en/LC_MESSAGES/messages.mo |
| </pre> | | </pre> |
|
| |
|
| ==== K2().domain ====
| | Ядро K2 ERP має підтримувати роботу з перекладами та давати можливість покращувати локалізацію стороннім користувачам або розробникам. |
|
| |
|
| ==== Методи ==== | | == Ресурси компоненти == |
|
| |
|
| ==== Методи інстансу ====
| | Ресурси компоненти зберігаються у стандартних каталогах: |
|
| |
|
| Приклад використання:
| | {| class="wikitable" style="width:100%;" |
| | ! Каталог |
| | ! Призначення |
| | |- |
| | | <code>/static</code> |
| | | Зображення, тексти, JavaScript, CSS та інші статичні ресурси |
| | |- |
| | | <code>/static/img</code> |
| | | Іконки та зображення компоненти |
| | |- |
| | | <code>/templates</code> |
| | | Шаблони компоненти |
| | |- |
| | | <code>/yml</code> |
| | | YML-конфігурації |
| | |- |
| | | <code>/data</code> |
| | | Дані компоненти, якщо вони потрібні |
| | |} |
|
| |
|
| <pre> | | Шаблони мають бути розроблені так, щоб не конфліктувати з глобальними шаблонами системи. |
| #отримати id поточного контрагента
| | |
| </pre> | | <div style="border:2px solid #1565c0; background:#e3f2fd; padding:14px; margin:16px 0;"> |
| | '''Принцип.''' Компонента повинна бути самодостатньою, але не повинна ламати глобальну структуру K2 ERP. |
| | </div> |
|
| |
|
| ==== K2().get_user_counterparts_id() ==== | | == Авторство == |
|
| |
|
| <pre>
| | У компоненті має бути вказане авторство. |
| # отримати список встановлених компонент
| |
| </pre>
| |
|
| |
|
| ==== K2().component_list() ====
| | Для компонент K2 використовується стандартний формат: |
|
| |
|
| <pre> | | <pre> |
| # отримати назву поточного проекту
| | Copyright © 2000-2025 К2®, Rudiuk Serhii. All rights reserved. |
| </pre> | | </pre> |
|
| |
|
| ==== K2().get_user_project_name() ====
| | Якщо компоненту створює сторонній розробник, потрібно вказати інформацію про такого розробника. |
|
| |
|
| <pre>
| | == Приклад структури компоненти == |
| #отримати id поточного користувача
| |
| </pre>
| |
|
| |
|
| ==== K2().get_current_user() ====
| | Нижче наведено приклад типової структури компоненти K2 ERP. |
|
| |
|
| <pre> | | <pre> |
| #створити користувача на рівні БД
| | components/ |
| | └── k2adm/ |
| | ├── k2adm/ |
| | │ ├── data/ |
| | │ ├── languages/ |
| | │ ├── static/ |
| | │ ├── templates/ |
| | │ ├── yml/ |
| | │ ├── tests/ |
| | │ ├── examples/ |
| | │ ├── widgets/ |
| | │ ├── objects/ |
| | │ ├── users/ |
| | │ │ └── users.py |
| | │ ├── roles/ |
| | │ │ └── roles.py |
| | │ ├── __init__.py |
| | │ ├── forms.py |
| | │ ├── history.txt |
| | │ ├── hooks.py |
| | │ ├── models.py |
| | │ └── views.py |
| | ├── __init__.py |
| | ├── doc/ |
| | │ ├── schema/ |
| | │ ├── business_processes/ |
| | │ ├── user_manual/ |
| | │ ├── developer_documentation/ |
| | │ └── additional_developer_docs/ |
| | ├── history.txt |
| | ├── requirements-components.txt |
| | ├── requirements.txt |
| | └── setup.py |
| </pre> | | </pre> |
|
| |
|
| ==== K2().create_db_role(user_name, password) ==== | | == Системні класи == |
|
| |
|
| ==== __init__(self, *args, **kwargs) ====
| | Системні класи K2 ERP забезпечують базову роботу ядра, об’єктів, безпеки, шляхів, даних, налаштувань, повідомлень, перекладів і оновлень. |
|
| |
|
| Initialize self. See help(type(self)) for accurate signature.
| | Основні системні класи: |
|
| |
|
| ==== add_authorized_users(self, user_id, login) ==== | | {| class="wikitable" style="width:100%;" |
| | ! Клас |
| | ! Призначення |
| | |- |
| | | <code>K2</code> |
| | | Ядро системи K2 ERP |
| | |- |
| | | <code>K2Obj</code> |
| | | Базовий клас для об’єктів системи |
| | |- |
| | | <code>K2admin_menus</code> |
| | | Формування меню для конкретного користувача |
| | |- |
| | | <code>k2data</code> |
| | | Робота з даними |
| | |- |
| | | <code>k2datasync</code> |
| | | Синхронізація даних |
| | |- |
| | | <code>k2logging</code> |
| | | Логування повідомлень і помилок |
| | |- |
| | | <code>k2mail</code> |
| | | Робота з поштою |
| | |- |
| | | <code>k2notifications</code> |
| | | Сповіщення користувачів |
| | |- |
| | | <code>k2path</code> |
| | | Пошук шляхів у системі |
| | |- |
| | | <code>k2secur</code> |
| | | Безпека та доступи |
| | |- |
| | | <code>k2settings</code> |
| | | Налаштування системи |
| | |- |
| | | <code>k2trans</code> |
| | | Переклади |
| | |- |
| | | <code>k2upd</code> |
| | | Оновлення |
| | |} |
|
| |
|
| Додати користувача до списку авторизованих
| | == Клас K2 == |
|
| |
|
| ==== check_authorized_users(self, user_id) ====
| | <code>K2</code> — це ядро системи K2 ERP. |
|
| |
|
| Перевірити чи користувач активний
| | Клас відповідає за базові параметри домену, підключення до бази даних, мову, поточного користувача, список компонентів, налаштування, доступи, сесії та службові методи. |
|
| |
|
| ==== check_logout_users(self, user_id) ==== | | === Основні властивості класу === |
|
| |
|
| Авторизовані користувачі
| | {| class="wikitable" style="width:100%;" |
| | ! Властивість |
| | ! Опис |
| | |- |
| | | <code>domain_name</code> |
| | | Назва домену |
| | |- |
| | | <code>domain_protocol</code> |
| | | Протокол домену |
| | |- |
| | | <code>domain</code> |
| | | Поточний домен |
| | |- |
| | | <code>port</code> |
| | | Порт |
| | |- |
| | | <code>db</code> |
| | | Підключення до бази даних |
| | |- |
| | | <code>default_language</code> |
| | | Мова за замовчуванням |
| | |} |
|
| |
|
| ==== component_list() ==== | | === Основні властивості інстансу === |
|
| |
|
| Пошук встановлених компонент
| | {| class="wikitable" style="width:100%;" |
| | ! Властивість |
| | ! Опис |
| | |- |
| | | <code>self.secur</code> |
| | | Підключення класу безпеки |
| | |- |
| | | <code>self.path</code> |
| | | Підключення класу пошуку шляхів |
| | |- |
| | | <code>self.data</code> |
| | | Підключення класу синхронізації даних |
| | |- |
| | | <code>self.settings</code> |
| | | Підключення класу налаштувань |
| | |- |
| | | <code>self.notifications</code> |
| | | Підключення класу сповіщень |
| | |} |
|
| |
|
| ==== create_db_file_config_user(self) ==== | | === Приклади використання K2 === |
|
| |
|
| Створення файлу з параметрами підключенням до БД для користувача
| | Отримати домен: |
|
| |
|
| ==== create_db_role(self, user_name, password) ====
| | <pre> |
| | K2().domain |
| | </pre> |
|
| |
|
| Створення користувача на рівні БД
| | Отримати поточного користувача: |
|
| |
|
| ==== current_template(self) ====
| | <pre> |
| | K2().get_current_user() |
| | </pre> |
|
| |
|
| Search current template
| | Отримати id поточного контрагента: |
|
| |
|
| ==== db_custom_engine(self, db) ====
| | <pre> |
| | K2().get_user_counterparts_id() |
| | </pre> |
|
| |
|
| Зміна custom параметрів підключення
| | Отримати список встановлених компонент: |
|
| |
|
| ==== db_user_engine(self, db) ====
| | <pre> |
| | K2().component_list() |
| | </pre> |
|
| |
|
| Зміна параметрів підключення для поточного користувача
| | Отримати назву поточного проєкту: |
|
| |
|
| ==== dell_authorized_users(self, user_id) ====
| | <pre> |
| | K2().get_user_project_name() |
| | </pre> |
|
| |
|
| Видалити користувача зі списку авторизованих
| | Створити користувача на рівні бази даних: |
|
| |
|
| ==== drop_db_role(self, user_name) ====
| | <pre> |
| | K2().create_db_role(user_name, password) |
| | </pre> |
|
| |
|
| Видалення користувача на рівні БД
| | Згенерувати ID: |
|
| |
|
| ==== get_all_subclasses(cls) ====
| | <pre> |
| | | id = K2.generate_id() |
| ==== Пошук підкласів ====
| | </pre> |
| | |
| ==== get_authorized_users(self) ====
| |
| | |
| Отримати список авторизованих користувачів
| |
| | |
| ==== get_current_user(self) ====
| |
| | |
| Повертає об’єкт поточного користувача
| |
| | |
| ==== K2().get_current_user() ====
| |
| | |
| ==== get_menu_url(self) ====
| |
| | |
| Повертає список url активних пунктів меню
| |
| | |
| ==== get_project_setting(self) ====
| |
| | |
| Форма зміни проекту
| |
| | |
| ==== get_user_counterparts_id(self) ====
| |
| | |
| Пошук id поточного контрагента
| |
| | |
| ==== K2().get_user_counterparts_id() ====
| |
| | |
| ==== get_user_counterparts_name(self) ====
| |
| | |
| Пошук назви поточного контрагента
| |
| | |
| ==== K2().get_user_counterparts_name() ====
| |
| | |
| ==== get_user_project_id(self) ====
| |
| | |
| Пошук id поточного проекту користувача
| |
| | |
| ==== K2().get_user_project_id() ====
| |
| | |
| ==== get_user_project_name(self) ====
| |
| | |
| Пошук назви поточного проекту користувача
| |
| | |
| ==== K2().get_user_project_name() ====
| |
| | |
| ==== get_user_stoages_name(self) ====
| |
| | |
| Пошук назви поточного складу
| |
| | |
| ==== K2().get_user_stoages_name() ====
| |
| | |
| ==== get_user_storage_id(self) ====
| |
| | |
| Пошук id поточного складу
| |
| | |
| ==== K2().get_user_storage_id() ====
| |
| | |
| ==== get_user_structural_division_id(self) ====
| |
| | |
| Пошук id поточного підрозділу
| |
| | |
| ==== K2().get_user_structural_division_id() ====
| |
| | |
| ==== get_user_structural_division_id_tree(self) ====
| |
| | |
| Пошук всіх підрозділів за ієрархією від поточного підрозділу користувача у форматі tuple ('id1', 'id2', 'id3')
| |
| | |
| ==== init_db(self) ====
| |
| | |
| Підключення db_uri для вибраної бази даних
| |
| | |
| ==== init_db_custom(self, key) ====
| |
| | |
| Підключення custom db_uri за ключем.
| |
| | |
| ==== init_db_uri(self) ====
| |
| | |
| Пошук і ініціалізація файлу з підключення до бази даних
| |
| | |
| ==== init_db_uri_custom(self) ====
| |
| | |
| Зчитує всі підключення до бази даних з файлу db_custom.yml і зберігає їх у словник.
| |
| | |
| ==== init_db_uri_user(self) ====
| |
| | |
| Пошук і ініціалізація файлу з підключення до бази даних для поточного користуача
| |
| | |
| ==== init_db_user(self) ====
| |
| | |
| Підключення db_uri для користувача
| |
| | |
| ==== init_lm(self, app) ====
| |
| | |
| Ініціалізація логін-менеджера
| |
| | |
| ==== kill_user_sessions(self, target_username) ====
| |
|
| |
|
| Завершення сесії підключення користувача на рівні БД
| | Отримати права поточного користувача: |
| | |
| ==== search_class_dict(self, parent_class=None) ====
| |
| | |
| ==== Рекурсивний пошук властивостей нащадків базового класу ====
| |
| | |
| ==== search_class_prop(path_objs) ====
| |
|
| |
|
| <pre> | | <pre> |
| # Отримуємо значення з path_objs для розширення поточного класу
| | usr_perm = K2().get_user_permissions() |
| </pre> | | </pre> |
|
| |
|
| ==== search_menu_items(self) ====
| | Визначити платформу: |
| | |
| Search menu items
| |
| | |
| ==== search_menu_items_category(self) ====
| |
| | |
| Search menu items category
| |
| | |
| ==== search_static_files(self) ====
| |
| | |
| ==== url_map(self) ====
| |
| | |
| ==== Методи класу ====
| |
| | |
| Приклад використання:
| |
|
| |
|
| <pre> | | <pre> |
| id = K2.generate_id()
| |
| usr_perm = K2().get_user_permissions()
| |
| K2.get_platform() | | K2.get_platform() |
| yml_path = K2.search_yml('users')
| |
| </pre> | | </pre> |
|
| |
|
| ==== clear_logging_messages() ====
| | Знайти YML-файл: |
| | |
| Clear all logging message by user
| |
| | |
| ==== compare_versions(version1, version2) ====
| |
| | |
| порівняння версій
| |
| | |
| ==== create_system_settings() ====
| |
| | |
| ==== dump_stacks() ====
| |
| | |
| Request information about the running threads of the current process.
| |
| | |
| :return: A tuple containing:
| |
| | |
| * A sequence of text lines detailing the stacks of running
| |
| | |
| threads and greenlets. (One greenlet will duplicate one thread,
| |
| | |
| the current thread and greenlet.)
| |
| | |
| * The number of greenlets.
| |
| | |
| ==== generate_id() ====
| |
| | |
| Генерація ID
| |
| | |
| ==== get_active_lang_list() ====
| |
| | |
| Визначення id поточної мови
| |
| | |
| ==== get_current_user_role_name() ====
| |
| | |
| Отрмання rolename поточного користувача
| |
| | |
| ==== get_locale() ====
| |
| | |
| Визначення поточної мови
| |
| | |
| ==== get_locale_id() ====
| |
| | |
| Визначення id поточної мови
| |
| | |
| ==== get_path_abs(caller_file) ====
| |
| | |
| Абсолютний шлях до файлу, в якому виконується код.
| |
| | |
| Виклик K2.get_path_abs(__file__)
| |
| | |
| __file__ -стандартна змінна в Python, яка містить абсолютний шлях до поточного файлу, в якому вона використовується.
| |
| | |
| ==== get_path_to_root(caller_file) ====
| |
| | |
| Відносний шлях до рута.
| |
| | |
| Виклик K2.get_path_to_root(__file__).
| |
| | |
| __file__ - стандартна змінна в Python, яка містить абсолютний шлях до поточного файлу, в якому вона використовується.
| |
| | |
| ==== get_platform() ====
| |
| | |
| Визначення операційної системи
| |
| | |
| ==== get_user_permissions() ====
| |
| | |
| Retrieve user permissions based on the URL.
| |
| | |
| This method fetches permissions for the current user based on the URL they are accessing.
| |
| | |
| Returns:
| |
| | |
| dict: A dictionary containing the user permissions, including 'roleid' and various permission flags
| |
| | |
| such as 'r' (read), 'w' (write), 'i' (insert), 'd' (delete), 'c' (create), 'exp' (export), 'imp' (import), 'del_' (undelete), 'settable' (set table), 'cutpast' (cut and paste), 'enable' (enable), and 'active' (active).
| |
| | |
| If the user is a superadmin, a default set of permissions is returned.
| |
| | |
| If no permissions are found for the user, an empty dictionary is returned.
| |
| | |
| Raises:
| |
| | |
| Exception: If an error occurs during database query execution.
| |
| | |
| Usage:
| |
|
| |
|
| <pre> | | <pre> |
| current_user_permissions = K2().get_user_permissions()
| | yml_path = K2.search_yml('users') |
| </pre> | | </pre> |
|
| |
|
| ==== get_user_role(user_id) ==== | | == Основні методи K2 == |
| | |
| Отрмання roleid користувача
| |
| | |
| ==== ins_search_comp() ====
| |
| | |
| Вивід списку компонент з файлу components.yml у всіх шляхах пошуку
| |
| | |
| ==== load_babel_translation_directories() ====
| |
|
| |
|
| Завантаження перекладів
| | {| class="wikitable" style="width:100%;" |
| | ! Метод |
| | ! Призначення |
| | |- |
| | | <code>component_list()</code> |
| | | Пошук встановлених компонент |
| | |- |
| | | <code>get_current_user()</code> |
| | | Повертає об’єкт поточного користувача |
| | |- |
| | | <code>get_user_counterparts_id()</code> |
| | | Пошук id поточного контрагента |
| | |- |
| | | <code>get_user_counterparts_name()</code> |
| | | Пошук назви поточного контрагента |
| | |- |
| | | <code>get_user_project_id()</code> |
| | | Пошук id поточного проєкту користувача |
| | |- |
| | | <code>get_user_project_name()</code> |
| | | Пошук назви поточного проєкту користувача |
| | |- |
| | | <code>get_user_storage_id()</code> |
| | | Пошук id поточного складу |
| | |- |
| | | <code>get_user_stoages_name()</code> |
| | | Пошук назви поточного складу |
| | |- |
| | | <code>get_user_structural_division_id()</code> |
| | | Пошук id поточного підрозділу |
| | |- |
| | | <code>get_user_structural_division_id_tree()</code> |
| | | Пошук підрозділів за ієрархією |
| | |- |
| | | <code>get_menu_url()</code> |
| | | Повертає список URL активних пунктів меню |
| | |- |
| | | <code>search_menu_items()</code> |
| | | Пошук пунктів меню |
| | |- |
| | | <code>search_menu_items_category()</code> |
| | | Пошук категорій пунктів меню |
| | |- |
| | | <code>search_static_files()</code> |
| | | Пошук статичних файлів |
| | |- |
| | | <code>url_map()</code> |
| | | Робота з картою URL |
| | |} |
|
| |
|
| ==== load_logging_message_by_id(error_id: str) ==== | | == Методи роботи з базою даних і сесіями == |
|
| |
|
| Load a logging message by its error_id from the error log file.
| | {| class="wikitable" style="width:100%;" |
| | ! Метод |
| | ! Призначення |
| | |- |
| | | <code>init_db()</code> |
| | | Підключення <code>db_uri</code> для вибраної бази даних |
| | |- |
| | | <code>init_db_custom(key)</code> |
| | | Підключення custom <code>db_uri</code> за ключем |
| | |- |
| | | <code>init_db_uri()</code> |
| | | Пошук і ініціалізація файлу підключення до бази даних |
| | |- |
| | | <code>init_db_uri_custom()</code> |
| | | Зчитування підключень із <code>db_custom.yml</code> |
| | |- |
| | | <code>init_db_uri_user()</code> |
| | | Ініціалізація підключення до БД для поточного користувача |
| | |- |
| | | <code>init_db_user()</code> |
| | | Підключення <code>db_uri</code> для користувача |
| | |- |
| | | <code>create_db_role(user_name, password)</code> |
| | | Створення користувача на рівні БД |
| | |- |
| | | <code>drop_db_role(user_name)</code> |
| | | Видалення користувача на рівні БД |
| | |- |
| | | <code>kill_user_sessions(target_username)</code> |
| | | Завершення сесій користувача на рівні БД |
| | |} |
|
| |
|
| Parameters:
| | == Методи авторизації користувачів == |
|
| |
|
| error_id (str): The ID of the error to load.
| | {| class="wikitable" style="width:100%;" |
| | ! Метод |
| | ! Призначення |
| | |- |
| | | <code>add_authorized_users(user_id, login)</code> |
| | | Додає користувача до списку авторизованих |
| | |- |
| | | <code>check_authorized_users(user_id)</code> |
| | | Перевіряє, чи користувач активний |
| | |- |
| | | <code>check_logout_users(user_id)</code> |
| | | Перевіряє користувачів, що вийшли |
| | |- |
| | | <code>dell_authorized_users(user_id)</code> |
| | | Видаляє користувача зі списку авторизованих |
| | |- |
| | | <code>get_authorized_users()</code> |
| | | Отримує список авторизованих користувачів |
| | |} |
|
| |
|
| Returns:
| | == Методи класу K2 == |
|
| |
|
| dict: The logging message if found, None otherwise.
| | {| class="wikitable" style="width:100%;" |
| | ! Метод |
| | ! Призначення |
| | |- |
| | | <code>generate_id()</code> |
| | | Генерація ID |
| | |- |
| | | <code>compare_versions(version1, version2)</code> |
| | | Порівняння версій |
| | |- |
| | | <code>get_platform()</code> |
| | | Визначення операційної системи |
| | |- |
| | | <code>get_locale()</code> |
| | | Визначення поточної мови |
| | |- |
| | | <code>get_locale_id()</code> |
| | | Визначення id поточної мови |
| | |- |
| | | <code>get_active_lang_list()</code> |
| | | Отримання списку активних мов |
| | |- |
| | | <code>get_user_role(user_id)</code> |
| | | Отримання <code>roleid</code> користувача |
| | |- |
| | | <code>get_current_user_role_name()</code> |
| | | Отримання role name поточного користувача |
| | |- |
| | | <code>get_path_abs(caller_file)</code> |
| | | Абсолютний шлях до файлу, в якому виконується код |
| | |- |
| | | <code>get_path_to_root(caller_file)</code> |
| | | Відносний шлях до кореня |
| | |- |
| | | <code>search_yml(name_yml)</code> |
| | | Пошук YML-файлу в каталогах компонент |
| | |- |
| | | <code>search_comp_names()</code> |
| | | Пошук ідентифікаторів компонент |
| | |- |
| | | <code>load_babel_translation_directories()</code> |
| | | Завантаження перекладів |
| | |} |
|
| |
|
| ==== load_logging_messages(page_url: str) ====
| | Приклад отримання абсолютного шляху: |
| | |
| Load logging messages for the curren page from the error log file.
| |
| | |
| Parameters:
| |
| | |
| name (str): Name of the object (page) to load messages for.
| |
| | |
| Returns:
| |
| | |
| dict: A dictionary containing formatted log messages, the count of 'error' messages, and the count of 'warning' messages.
| |
| | |
| ==== log_entry(error_id, status, message, name) ====
| |
| | |
| ==== logging_message(status, message, page_url=None, show_message=True) ====
| |
| | |
| Send a logging message to the client via Socket.IO.
| |
| | |
| This method emits a message to the client with a given status and message content.
| |
| | |
| The message is sent to a room identified by the current user's ID.
| |
| | |
| Parameters:
| |
| | |
| status (str): The status of the message (e.g., cls.log_error - 'ERROR', cls.log_warning - 'WARNING', cls.log_success - 'SUCCESS').
| |
| | |
| message (str): The content of the message to be sent.
| |
|
| |
|
| <pre> | | <pre> |
| page_url(str): url of page with Errors.
| | K2.get_path_abs(__file__) |
| </pre> | | </pre> |
|
| |
|
| show_message (bool): True - save log and show windows, False - only save_log
| | Приклад отримання відносного шляху до кореня: |
| | |
| Приклад використання функції: | |
| | |
| K2.logging_message(K2.log_error, 'Operation completed with error.')
| |
| | |
| K2.logging_message(K2.log_success, 'Operation completed successfully.'1)
| |
|
| |
|
| <pre> | | <pre> |
| K2.logging_message(status=K2.log_success, message='Operation completed successfully.', page_url='/kadm/users', show_message=False) | | K2.get_path_to_root(__file__) |
| </pre> | | </pre> |
|
| |
|
| Example:
| | == Логування та повідомлення K2 == |
| | |
| ==== namemenu(url) ==== | |
| | |
| Add identificators to url page
| |
| | |
| ==== save_logging_message(error_id, status, message, name) ====
| |
| | |
| Save a logging message to the stack.
| |
|
| |
|
| Parameters:
| | K2 має методи для збереження, завантаження та відправлення повідомлень користувачу. |
|
| |
|
| status (str): The status of the message (e.g., cls.log_error - 'ERROR', cls.log_warning - 'WARNING', cls.log_success - 'SUCCESS').
| | Основний метод: |
| | |
| message (str): The content of the message to be saved.
| |
| | |
| name (str): Name of object where the message originated.
| |
| | |
| ==== search_babel_translation_directories() ====
| |
| | |
| Пошук файлів з перекладами
| |
| | |
| ==== search_comp_names() ====
| |
| | |
| Вивід списку ідентифікаторів компонент
| |
| | |
| у всіх шляхах пошуку
| |
| | |
| Rerurn: list of components identificators
| |
| | |
| ==== search_yml(name_yml) ====
| |
| | |
| Search for a yml file in the caller directories of subclasses.
| |
| | |
| This method searches for a yml file with a specified name in the caller directories of all subclasses of K2Obj.
| |
| | |
| The search is performed in the 'yml' subdirectory of each caller directory.
| |
| | |
| Args:
| |
| | |
| name_yml: The name of the yml file to search for (without the '.yml' extension).
| |
| | |
| Returns:
| |
| | |
| The caller directory where the yml file was found, or None if the file was not found.
| |
| | |
| Usage:
| |
| | |
| To search for a yml file named 'users.yml', call this method as follows:
| |
| | |
| K2.search_yml('users')
| |
| | |
| == API ==
| |
| | |
| === Клас K2Obj ===
| |
| | |
| З цього класу створюються всі об’єкти системи К2. Він має основну базову функціональність, що розширюється та розвивається та яка є у всіх класів системи
| |
| | |
| ==== Властивості ====
| |
| | |
| ==== Властивості класу ====
| |
| | |
| name #Назва компоненти.
| |
| | |
| version #Версія компоненти
| |
| | |
| ==== Властивості інстансу ====
| |
| | |
| self._name_yml #назва конфігураційного файлу
| |
| | |
| self._name_yml_tree #назва конфігураційного файлу з деревом
| |
| | |
| self._new_buttons #назва кнопки
| |
| | |
| self._name_yml_master #назва конфігураційного файлу
| |
| | |
| self._send_params #параметри для конфігураційного файлу
| |
| | |
| self._send_group_params #параметри групи
| |
| | |
| self._report_id #id звіту
| |
| | |
| self._data_source #датасети
| |
| | |
| self._off_buttons #вимкнути кнопки
| |
| | |
| self._row_selection #вибір з рядка
| |
| | |
| ==== Методи ====
| |
| | |
| ==== Методи інстансу ====
| |
| | |
| Приклад використання:
| |
| | |
| ==== __init__(self) ====
| |
| | |
| Initialize self. See help(type(self)) for accurate signature.
| |
| | |
| ==== content(self) ====
| |
| | |
| ==== create_names_yml(self, name_yml: str = '', name_yml_tree: str = '', ====
| |
|
| |
|
| <pre> | | <pre> |
| name_yml_master: str = '')
| | K2.logging_message(status, message, page_url=None, show_message=True) |
| </pre> | | </pre> |
|
| |
|
| ==== search_class_prop(path_objs) ====
| | Приклади: |
| | |
| ==== Пошук властивостей для розширення класу ====
| |
| | |
| ==== select_grid(self) ====
| |
| | |
| ==== show_grid(self) ====
| |
| | |
| == API ==
| |
| | |
| === Клас K2admin_menus ===
| |
| | |
| ==== Даний клас формує список пунктів меню для конкретного користувача ====
| |
| | |
| === Клас k2data ===
| |
| | |
| === Клас k2datasync ===
| |
| | |
| === Клас k2logging ===
| |
| | |
| ==== Класk2mail ====
| |
| | |
| ==== Класk2notifications ====
| |
| | |
| === Клас k2path ===
| |
| | |
| === Клас k2secur ===
| |
| | |
| === Клас k2settings ===
| |
| | |
| === Клас k2trans ===
| |
| | |
| === Клас k2upd ===
| |
| | |
| == Класи компонент ==
| |
| | |
| === Клас K2Site ===
| |
| | |
| === Клас K2Grid ===
| |
| | |
| === Клас K2WMS ===
| |
| | |
| === K2UpdateRemainder ===
| |
| | |
| === Клас для оновлення залишків на основі даних з отриманих від клієнтів. ===
| |
| | |
| Відповідає за обробку даних з логів, створення/оновлення записів про залишки товарів та керування їх статусами (новий, стабільний, старий).
| |
| | |
| ==== Методи ====
| |
| | |
| ==== __init__() ====
| |
| | |
| Ініціалізація класу.
| |
| Викликає конструктор батьківського класу K2Docs.
| |
| | |
| Параметри:
| |
| Відсутні.
| |
| | |
| Повертає:
| |
| Об'єкт класу K2UpdateRemainder.
| |
| | |
| ==== update_pub_sub_remainder() ====
| |
| | |
| Оновлення залишків на основі даних Pub/Sub.
| |
| Витягує нові залишки з логів, додає їх у таблицю k2remainder_by_parties, оновлює статуси існуючих записів та видаляє застарілі залишки.
| |
| | |
| Логіка статусів:
| |
| | |
| 'new' – нові залишки, отримані в поточному оновленні.
| |
| | |
| 'stable' – залишки, які підтвердились та доступні користувачам.
| |
| | |
| 'old' – застарілі дані, що підлягають видаленню.
| |
| | |
| Алгоритм роботи:
| |
| | |
| Отримує список pub_sub_list_id з логів k2pubsub_logs.
| |
| | |
| Витягує дані про залишки (inventSumLines).
| |
| | |
| Вставляє нові записи у таблицю k2remainder_by_parties зі статусом 'new'.
| |
| | |
| Масово оновлює статуси залишків:
| |
| | |
| Видаляє застарілі ('old').
| |
| | |
| Переводить стабільні ('stable') в старі ('old').
| |
| | |
| Нові ('new') переводить у стабільні ('stable').
| |
| | |
| Фіксує зміни у базі (commit).
| |
| | |
| У разі помилки виконує відкат (rollback).
| |
| | |
| ==== _insert_new_pub_sub_nomenclature(session, nomenclature_data) ====
| |
| | |
| Додавання нової номенклатури.
| |
| Перевіряє наявність номенклатури у таблиці k2nomenclature. Якщо запису немає – створює його.
| |
| | |
| Параметри:
| |
| | |
| session (Session) – об'єкт сесії бази даних.
| |
| | |
| nomenclature_data (dict) – дані про номенклатуру:
| |
| | |
| itemId (str) – ідентифікатор номенклатури.
| |
| | |
| itemName (str) – назва товару.
| |
| | |
| unitId (str) – одиниця виміру (конвертується за фіксованим списком).
| |
| | |
| Повертає:
| |
| Нічого.
| |
| | |
| Винятки:
| |
| | |
| Логує помилку у разі невдалої вставки даних.
| |
| | |
| === Клас K2CRM ===
| |
| | |
| Цей клас представляє CRM модуль, який забезпечує роботу з різними розділами CRM системи такими як:
| |
| | |
| управління лідами
| |
| - замовлення
| |
| | |
| * рахунки
| |
| | |
| * звіти
| |
| | |
| * налаштування системи CRM
| |
| | |
| === Клас K2CRM наслідується від K2Obj, всі властивості та методи отримуються від батьківського класу. ===
| |
| | |
| === K2DocsCRM ===
| |
| | |
| === Клас K2DocsCRM є частиною системи K2CRM і наслідується від K2Obj. Він надає доступ до ключових глобальних налаштувань та ресурсів, необхідних для роботи з документами або іншими функціями CRM. ===
| |
| | |
| ==== Атрибути ====
| |
| | |
| database:
| |
| | |
| База даних, доступна через глобальний об'єкт K2.db.
| |
| | |
| Призначення: Використовується для зберігання та обробки даних, пов'язаних з CRM.
| |
| | |
| time_zone:
| |
| | |
| Часовий пояс системи, визначений глобальним об'єктом K2.timezone.
| |
| | |
| Призначення: Забезпечує коректну обробку часу в межах системи.
| |
| | |
| domain:
| |
| | |
| Домен, на якому працює CRM, отримується з глобального об'єкта K2.domain.
| |
| | |
| Призначення: Використовується для побудови URL-адрес або інших задач, пов'язаних з доменним середовищем.
| |
| | |
| ==== Властивості ====
| |
| | |
| ==== Методи ====
| |
|
| |
|
| <pre> | | <pre> |
| create_contact() - Цей метод створює контакт на основі даних існуючого ліда. Лід і контакт взаємодіють через базу даних, де дані ліда переносяться в таблицю контактів.
| | K2.logging_message(K2.log_error, 'Operation completed with error.') |
| </pre> | | </pre> |
|
| |
| Логіка роботи:
| |
|
| |
| ==== Метод очікує вхідний JSON, що містить ідентифікатор ліда (lead_id) ====
| |
|
| |
| Перевіряє чи було надано lead_id. Якщо lead_id не надано то повертається помилка.
| |
|
| |
| Шукає ліда в таблиці k2lead за наданим параметром.
| |
|
| |
| Якщо лід знайдено то створюється новий запис у таблиці k2contacts на основі даних ліда.
| |
|
| |
| У разі помилки скасовує транзакцію і повертає опис помилки.
| |
|
| |
| ==== Моделі які використовуються ====
| |
|
| |
| K2Lead. Таблиця яка містить дані про лідів.
| |
|
| |
| k2contacts. Таблиця, в яку додається новий контакт на основі даних ліда.
| |
|
| |
|
| <pre> | | <pre> |
| check_lead() - Цей метод перевіряє, чи існує контакт із заданим номером телефону у базі даних (k2contacts). Якщо знайдено, оновлює дані ліда (ім'я, прізвище, email) у переданому об'єкті.
| | K2.logging_message( |
| | status=K2.log_success, |
| | message='Operation completed successfully.', |
| | page_url='/kadm/users', |
| | show_message=False |
| | ) |
| </pre> | | </pre> |
|
| |
|
| Логіка роботи:
| | Метод може зберігати повідомлення в журналі та відправляти його клієнту через Socket.IO. |
| | |
| Отримає вхідний JSON, що містить options із даними для перевірки.
| |
| | |
| З options[‘dataField’] отримує номер телефону (phone)
| |
|
| |
|
| Виконує SQL-запит до таблиці k2contacts для пошуку контакту за номером телефону.
| | == Права користувача == |
|
| |
|
| Якщо контакт знайдено то відбувається оновлення даних у options[‘dataField’] (name, surname, email, lead_id)
| | Метод: |
| | |
| Якщо контакт не знайдено то для полів name, surname, email встановлюється значення None.
| |
| | |
| У разі помилки повертає повідомлення з помилкою.
| |
|
| |
|
| <pre> | | <pre> |
| crm_data(route, data) - Цей метод отримує дані із відповідних таблиць з бази даних на основі переданих параметрів для подальшого оформлення друкованої форми документів у компоненті k2CRM
| | K2().get_user_permissions() |
| </pre> | | </pre> |
|
| |
|
| Логіка роботи:
| | повертає права поточного користувача для URL, до якого він звертається. |
|
| |
|
| Створює порожній словник result_dict, який буде наповнюватись даними та парсить вхідні дані data у форматі JSON і зберігає їх у result_dict[‘Header’].
| | Результат містить roleid та прапорці доступу, зокрема: |
|
| |
|
| Формує SQL-запити для витягування даних із таблиць бази даних (Товари, Організація, Контрагент, Склад, Договір, Відповідальна особа, Клієнт).
| | * <code>r</code> — читання; |
| | * <code>w</code> — запис; |
| | * <code>i</code> — вставка; |
| | * <code>d</code> — видалення; |
| | * <code>c</code> — створення; |
| | * <code>exp</code> — експорт; |
| | * <code>imp</code> — імпорт; |
| | * <code>del_</code> — відновлення; |
| | * <code>settable</code> — налаштування таблиці; |
| | * <code>cutpast</code> — вирізати / вставити; |
| | * <code>enable</code> — доступність; |
| | * <code>active</code> — активність. |
|
| |
|
| Для кожного запиту виконується SQL-запит та результат додається до result_dict.
| | Приклад: |
| | |
| Результати запитів конвертуються у словники (row_asdict) для зручного JSON-формату.
| |
| | |
| Успішний результат повертається у форматі JSON із ключем data. У разі помилки застосовується лог помилки і повертається повідомлення з помилкою.
| |
| | |
| process_options - Метод обробляє різні параметри, передані через JSON-запит, і налаштовує об'єкти типу K2Grid для роботи з даними в залежності від значення ключа name у вхідних даних.
| |
| | |
| Основні операції:
| |
| | |
| Обробка k2doc_rows_detail:
| |
| | |
| Ім'я YML: 'k2doc_rows_detail'.
| |
| | |
| Вимикаються кнопки: add, delete, printReport.
| |
| | |
| Передаються параметри: row_id та storage_id.
| |
| | |
| Обробка k2doc_move:
| |
| | |
| Ім'я YML: 'k2doc_move'.
| |
| | |
| Вимикаються кнопки: add, edit, delete, printReport.
| |
| | |
| Передаються параметри: doc_id.
| |
| | |
| Логіка роботи:
| |
| | |
| Метод очікує вхідні дані у форматі JSON і доступ до них здійснюється через request.json.
| |
| | |
| Перевіряється значення ключа name у вхідних даних:
| |
|
| |
|
| <pre> | | <pre> |
| Якщо name == 'k2doc_rows_detail':
| | current_user_permissions = K2().get_user_permissions() |
| Виділяється row_id із переданих даних. Створюється об’єкт K2Grid з іменем yml “'k2doc_rows_detail”. Вимикаються кнопки add, delete, printReport на панелі інструментів. Отримується storage_id через метод self.get_storage_id(). Параметри row_id та storage_id передаються через send_params.
| |
| Якщо name == 'k2doc_move':
| |
| </pre> | | </pre> |
|
| |
|
| Виділяється doc_id із вхідних даних. Створюється об'єкт K2Grid з іменем yml 'k2doc_move'. Вимикаються кнопки add, edit, delete, printReport на панелі інструментів. Параметри (doc_id) передаються через send_params.
| | == Клас K2Obj == |
|
| |
|
| Повернення результату у форматі JSON
| | <code>K2Obj</code> — базовий клас для об’єктів системи K2 ERP. |
|
| |
|
| === Клас K2Report ===
| | Від нього наслідуються об’єкти, які використовують стандартну логіку системи: конфігурації, YML, grids, форми, параметри, кнопки, джерела даних і розширення. |
|
| |
|
| Цей клас забезпечує генерацію та друк звітів за допомогою API Stimulsoft.
| | === Основні властивості класу === |
|
| |
|
| ==== Основні можливості модуля ==== | | {| class="wikitable" style="width:100%;" |
| | ! Властивість |
| | ! Опис |
| | |- |
| | | <code>name</code> |
| | | Назва компоненти |
| | |- |
| | | <code>version</code> |
| | | Версія компоненти |
| | |} |
|
| |
|
| створення звітів за допомогою конструктора звітів
| | === Основні властивості інстансу === |
|
| |
|
| управління друкованими формами
| | {| class="wikitable" style="width:100%;" |
| | ! Властивість |
| | ! Опис |
| | |- |
| | | <code>self._name_yml</code> |
| | | Назва конфігураційного YML-файлу |
| | |- |
| | | <code>self._name_yml_tree</code> |
| | | Назва YML-файлу з деревом |
| | |- |
| | | <code>self._new_buttons</code> |
| | | Нові кнопки |
| | |- |
| | | <code>self._name_yml_master</code> |
| | | Майстер-конфігурація |
| | |- |
| | | <code>self._send_params</code> |
| | | Параметри для конфігураційного файлу |
| | |- |
| | | <code>self._send_group_params</code> |
| | | Параметри групи |
| | |- |
| | | <code>self._report_id</code> |
| | | ID звіту |
| | |- |
| | | <code>self._data_source</code> |
| | | Джерела даних |
| | |- |
| | | <code>self._off_buttons</code> |
| | | Кнопки, які потрібно вимкнути |
| | |- |
| | | <code>self._row_selection</code> |
| | | Вибір рядка |
| | |} |
|
| |
|
| генерація друкованих документів
| | === Основні методи K2Obj === |
|
| |
|
| ==== взаємодія з API Stimulsoft для візуалізації та експорту звітів ==== | | {| class="wikitable" style="width:100%;" |
| | ! Метод |
| | ! Призначення |
| | |- |
| | | <code>__init__()</code> |
| | | Ініціалізація об’єкта |
| | |- |
| | | <code>content()</code> |
| | | Формування контенту |
| | |- |
| | | <code>create_names_yml()</code> |
| | | Створення назв YML-конфігурацій |
| | |- |
| | | <code>search_class_prop()</code> |
| | | Пошук властивостей для розширення класу |
| | |- |
| | | <code>select_grid()</code> |
| | | Вибір grid |
| | |- |
| | | <code>show_grid()</code> |
| | | Відображення grid |
| | |} |
|
| |
|
| === Клас K2Report наслідується від K2Obj, всі властивості та методи отримуються від батьківського класу. | | == Класи компонент == |
| Також клас K2Report є батьківським класом для K2ReportEmbed та K2ReportDesigner ===
| |
| | |
| ==== Атрибути класу ====
| |
| | |
| ==== Методи класу ====
| |
| | |
| ==== __init__(sql=[]) ====
| |
| | |
| Ініціалізація класу. Отримує шлях до каталогу файлу, що викликав ініціалізацію.
| |
|
| |
|
| Параметри:
| | Класи компонент реалізують функціональність конкретних модулів K2 ERP. |
|
| |
|
| sql (list, опціонально): Список SQL-запитів.
| | Основні приклади: |
|
| |
|
| ==== create_report(sql=None, data_source=None) ==== | | {| class="wikitable" style="width:100%;" |
| | ! Клас |
| | ! Призначення |
| | |- |
| | | <code>K2Site</code> |
| | | Робота з сайтом |
| | |- |
| | | <code>K2Grid</code> |
| | | Робота з таблицями та grid-компонентами |
| | |- |
| | | <code>K2WMS</code> |
| | | Складські процеси та WMS |
| | |- |
| | | <code>K2CRM</code> |
| | | CRM-функціональність |
| | |- |
| | | <code>K2DocsCRM</code> |
| | | Документи CRM |
| | |- |
| | | <code>K2Report</code> |
| | | Звіти та друковані форми |
| | |- |
| | | <code>K2ReportEmbed</code> |
| | | Вбудовування звітів у вебсторінки |
| | |- |
| | | <code>K2ReportDesigner</code> |
| | | Конструктор звітів і дашбордів |
| | |- |
| | | <code>K2Production</code> |
| | | Виробничі процеси |
| | |- |
| | | <code>K2LogbookTMDoc</code> |
| | | Логбук технічного обслуговування |
| | |- |
| | | <code>K2EquipmentFunction</code> |
| | | Робота з обладнанням |
| | |} |
|
| |
|
| Створення звіту. Відображає HTML-сторінку редактора або переглядача звітів.
| | == Клас K2UpdateRemainder == |
|
| |
|
| Параметри:
| | <code>K2UpdateRemainder</code> відповідає за оновлення залишків на основі даних, отриманих від клієнтів. |
|
| |
|
| sql (dict, опціонально): SQL-запити.
| | Клас обробляє дані з логів, створює або оновлює записи про залишки товарів і керує їхніми статусами. |
|
| |
|
| data_source (dict, опціонально): Джерело даних.
| | === Статуси залишків === |
|
| |
|
| Повертає:
| | {| class="wikitable" style="width:100%;" |
| | ! Статус |
| | ! Значення |
| | |- |
| | | <code>new</code> |
| | | Нові залишки, отримані в поточному оновленні |
| | |- |
| | | <code>stable</code> |
| | | Підтверджені залишки, доступні користувачам |
| | |- |
| | | <code>old</code> |
| | | Застарілі дані, що підлягають видаленню |
| | |} |
|
| |
|
| HTML-сторінку редактора або переглядача звітів.
| | === Основні методи === |
|
| |
|
| ==== get_report(file_name) ==== | | {| class="wikitable" style="width:100%;" |
| | ! Метод |
| | ! Призначення |
| | |- |
| | | <code>update_pub_sub_remainder()</code> |
| | | Оновлює залишки на основі даних Pub/Sub |
| | |- |
| | | <code>_insert_new_pub_sub_nomenclature(session, nomenclature_data)</code> |
| | | Додає нову номенклатуру, якщо її ще немає |
| | |} |
|
| |
|
| Отримання звіту за його ім'ям.
| | == Клас K2CRM == |
|
| |
|
| Параметри:
| | <code>K2CRM</code> — клас CRM-модуля K2 ERP. |
|
| |
|
| file_name (str): Назва файлу звіту.
| | Він забезпечує роботу з лідами, замовленнями, рахунками, звітами та налаштуваннями CRM. |
|
| |
|
| Повертає:
| | Клас наслідується від <code>K2Obj</code>, тому використовує базові властивості та методи системних об’єктів K2 ERP. |
|
| |
|
| Файл звіту або помилку 404, якщо файл не знайдено.
| | == Клас K2DocsCRM == |
|
| |
|
| ==== execute_query(query, params=None) ====
| | <code>K2DocsCRM</code> — частина CRM-модуля, яка відповідає за роботу з документами та даними CRM. |
|
| |
|
| Виконує SQL-запит.
| | Клас також наслідується від <code>K2Obj</code>. |
|
| |
|
| Параметри:
| | === Основні атрибути === |
|
| |
|
| query (str): SQL-запит.
| | {| class="wikitable" style="width:100%;" |
| | ! Атрибут |
| | ! Призначення |
| | |- |
| | | <code>database</code> |
| | | База даних через глобальний об’єкт <code>K2.db</code> |
| | |- |
| | | <code>time_zone</code> |
| | | Часовий пояс системи через <code>K2.timezone</code> |
| | |- |
| | | <code>domain</code> |
| | | Поточний домен через <code>K2.domain</code> |
| | |} |
|
| |
|
| params (dict, опціонально): Параметри запиту.
| | === Основні методи K2DocsCRM === |
|
| |
|
| Повертає:
| | {| class="wikitable" style="width:100%;" |
| | ! Метод |
| | ! Призначення |
| | |- |
| | | <code>create_contact()</code> |
| | | Створює контакт на основі даних ліда |
| | |- |
| | | <code>check_lead()</code> |
| | | Перевіряє, чи існує контакт із заданим телефоном |
| | |- |
| | | <code>crm_data(route, data)</code> |
| | | Отримує дані для друкованих форм CRM |
| | |- |
| | | <code>process_options()</code> |
| | | Обробляє параметри JSON-запиту й налаштовує об’єкти K2Grid |
| | |} |
|
| |
|
| Результат виконання запиту.
| | == Метод create_contact() == |
|
| |
|
| ==== get_report_designer(file_name, design_type_id) ====
| | <code>create_contact()</code> створює контакт на основі даних існуючого ліда. |
|
| |
|
| Отримує дизайнер звіту за типом звіту.
| | Логіка роботи: |
|
| |
|
| Параметри:
| | # отримує JSON із <code>lead_id</code>; |
| | # перевіряє, чи передано <code>lead_id</code>; |
| | # шукає лід у таблиці <code>k2lead</code>; |
| | # створює запис у таблиці <code>k2contacts</code>; |
| | # у разі помилки скасовує транзакцію та повертає опис помилки. |
|
| |
|
| file_name (str): Назва файлу.
| | == Метод check_lead() == |
|
| |
|
| design_type_id (str): Тип дизайну (1 - звіт, 2 - дашборд).
| | <code>check_lead()</code> перевіряє, чи існує контакт із заданим номером телефону в таблиці <code>k2contacts</code>. |
|
| |
|
| Повертає:
| | Якщо контакт знайдено, метод оновлює дані ліда: ім’я, прізвище, email та <code>lead_id</code>. Якщо контакт не знайдено, відповідні поля очищаються. |
|
| |
|
| Файл дизайну або помилку 404.
| | == Метод crm_data(route, data) == |
|
| |
|
| ==== add_reports_type(name, data) ====
| | <code>crm_data()</code> отримує дані з таблиць бази для формування друкованих форм документів у CRM. |
|
| |
|
| Додає тип звіту до групи звітів.
| | Метод збирає дані по товарах, організації, контрагенту, складу, договору, відповідальній особі та клієнту, після чого повертає результат у JSON-форматі. |
|
| |
|
| Параметри:
| | == Метод process_options() == |
|
| |
|
| name (str): Назва типу звіту.
| | <code>process_options()</code> обробляє JSON-запит і налаштовує K2Grid залежно від значення параметра <code>name</code>. |
|
| |
|
| data (dict): Дані для оновлення.
| | Приклади сценаріїв: |
|
| |
|
| Повертає:
| | {| class="wikitable" style="width:100%;" |
| | ! Значення <code>name</code> |
| | ! Дія |
| | |- |
| | | <code>k2doc_rows_detail</code> |
| | | Створює grid для деталізації рядків документа, вимикає зайві кнопки, передає <code>row_id</code> і <code>storage_id</code> |
| | |- |
| | | <code>k2doc_move</code> |
| | | Створює grid руху документа, вимикає кнопки додавання, редагування, видалення та друку |
| | |} |
|
| |
|
| bool: True, якщо успішно.
| | == Клас K2Report == |
|
| |
|
| === Клас K2ReportEmbed ===
| | <code>K2Report</code> забезпечує генерацію та друк звітів за допомогою API Stimulsoft. |
|
| |
|
| K2ReportEmbed - Компонент для вбудовування звітів у веб-додаток. Дозволяє отримувати та відображати звіти з бази даних на основі їх ідентифікаторів.
| | Клас наслідується від <code>K2Obj</code> і є батьківським класом для: |
|
| |
|
| ==== Атрибути класу ====
| | * <code>K2ReportEmbed</code>; |
| | * <code>K2ReportDesigner</code>. |
|
| |
|
| ==== __init__(reports_id: List[str]) ==== | | === Основні можливості === |
|
| |
|
| Ініціалізує екземпляр класу K2ReportEmbed.
| | * створення звітів; |
| | * робота з конструктором звітів; |
| | * управління друкованими формами; |
| | * генерація друкованих документів; |
| | * взаємодія з API Stimulsoft; |
| | * візуалізація та експорт звітів. |
|
| |
|
| Аргументи:
| | === Основні методи K2Report === |
|
| |
|
| reports_id (List[str]) – список ідентифікаторів звітів.
| | {| class="wikitable" style="width:100%;" |
| | ! Метод |
| | ! Призначення |
| | |- |
| | | <code>__init__(sql=[])</code> |
| | | Ініціалізує клас і отримує шлях до каталогу виклику |
| | |- |
| | | <code>create_report(sql=None, data_source=None)</code> |
| | | Створює звіт і відображає редактор або переглядач |
| | |- |
| | | <code>get_report(file_name)</code> |
| | | Отримує звіт за назвою файлу |
| | |- |
| | | <code>execute_query(query, params=None)</code> |
| | | Виконує SQL-запит |
| | |- |
| | | <code>get_report_designer(file_name, design_type_id)</code> |
| | | Отримує дизайнер звіту за типом дизайну |
| | |- |
| | | <code>add_reports_type(name, data)</code> |
| | | Додає тип звіту до групи звітів |
| | |} |
|
| |
|
| ==== get_report_data() -> Optional[List[Dict[str, Any]]] ==== | | == Клас K2ReportEmbed == |
|
| |
|
| Отримує дані звітів з бази даних.
| | <code>K2ReportEmbed</code> використовується для вбудовування звітів у вебзастосунок. |
|
| |
|
| Повертає:
| | Клас дозволяє отримувати та відображати звіти з бази даних за їхніми ідентифікаторами. |
|
| |
|
| Optional[List[Dict[str, Any]]] – список даних звітів або None, якщо сталася помилка.
| | === Ініціалізація === |
|
| |
|
| Опис: Метод виконує запит до бази даних для отримання інформації про звіти, джерела даних та формує структуру JSON-даних. Він включає наступні дані для кожного звіту:
| | <pre> |
| | K2ReportEmbed(reports_id: List[str]) |
| | </pre> |
|
| |
|
| report_name – Назва звіту.
| | де <code>reports_id</code> — список ідентифікаторів звітів. |
|
| |
|
| file_name – Ім'я файлу звіту.
| | === Основний метод === |
|
| |
|
| json_data_list – JSON-структура, що містить дані для звіту.
| | <pre> |
| | get_report_data() -> Optional[List[Dict[str, Any]]] |
| | </pre> |
|
| |
|
| Якщо під час виконання запитів виникає помилка, вона логуватиметься у системному журналі помилок
| | Метод отримує дані звітів із бази даних і формує JSON-структуру для відображення. |
|
| |
|
| Приклад вбудовування звітів на веб-сторінку
| | === Приклад backend Flask === |
| | |
| ==== Бекенд (Flask) ==== | |
|
| |
|
| <pre> | | <pre> |
| @k2production.route('/test_dashboard', methods=['GET']) | | @k2production.route('/test_dashboard', methods=['GET']) |
| def test_dashboard(): | | def test_dashboard(): |
| </pre>
| | reports_id = [ |
| | 'b452a5ae84f9e92e75eb0467c196fd71', |
| | '1673a4fab757fb6c5df970fdc6ee680c', |
| | '49952f397efff44d7ce0e5cb9aa625fb' |
| | ] |
|
| |
|
| """ Index page """
| | k2report_embed = K2ReportEmbed(reports_id) |
|
| |
|
| <pre>
| | return render_template( |
| reports_id = ['b452a5ae84f9e92e75eb0467c196fd71', '1673a4fab757fb6c5df970fdc6ee680c',
| | 'k2dashboard_production/k2dashboard_production.html', |
| | dashboard_settings=k2report_embed |
| | ) |
| </pre> | | </pre> |
|
| |
|
| '49952f397efff44d7ce0e5cb9aa625fb']
| | === Приклад Jinja-шаблону === |
|
| |
|
| <pre> | | <pre> |
| k2report_embed = K2ReportEmbed(reports_id)
| | {% extends template_name + '/base.html' %} |
| return render_template('k2dashboard_production/k2dashboard_production.html',
| |
| dashboard_settings=k2report_embed)
| |
| </pre>
| |
| | |
| ==== Фронтенд (Jinja-шаблон) ====
| |
|
| |
|
| <pre>
| |
| {% extends template_name + '/base.html' %}
| |
| {% block content %} | | {% block content %} |
| {% if error %} | | {% if error %} |
| {{ error }} | | {{ error }} |
| {% else %} | | {% else %} |
| {% include dashboard_settings.template %} | | {% include dashboard_settings.template %} |
| {% endif %} | | {% endif %} |
| {% endblock % | | {% endblock %} |
| </pre> | | </pre> |
|
| |
|
| === Клас K2ReportDesigner ===
| | == Клас K2ReportDesigner == |
|
| |
|
| === Клас K2ReportDesigner надає функціональність для створення, редагування та перегляду звітів і дашбордів. Він взаємодіє з базою даних, управляє файлами звітів та генерує JSON-дані для подальшого використання. ===
| | <code>K2ReportDesigner</code> надає функціональність для створення, редагування та перегляду звітів і дашбордів. |
|
| |
|
| ==== Атрибути класу ====
| | Клас взаємодіє з базою даних, керує файлами звітів і генерує JSON-дані для подальшого використання. |
|
| |
|
| ==== Методи класу ==== | | === Основні методи === |
|
| |
|
| ==== designer() ==== | | {| class="wikitable" style="width:100%;" |
| | ! Метод |
| | ! Призначення |
| | |- |
| | | <code>designer()</code> |
| | | Відображає сторінку редагування друкованої форми |
| | |- |
| | | <code>viewer()</code> |
| | | Відображає сторінку перегляду друкованої форми |
| | |- |
| | | <code>dashboard_viewer()</code> |
| | | Відображає сторінку перегляду дашборду |
| | |- |
| | | <code>dashboard_designer()</code> |
| | | Відображає сторінку редагування дашборду |
| | |- |
| | | <code>json_data_create(...)</code> |
| | | Створює JSON-дані на основі джерел даних і періоду |
| | |- |
| | | <code>save_report_id()</code> |
| | | Зберігає ідентифікатор і налаштування звіту |
| | |- |
| | | <code>mrt_report_create(report_id, design_type_id=None)</code> |
| | | Створює MRT-файл звіту на основі шаблону |
| | |- |
| | | <code>table_report_data(datasource_value, datasource_keys)</code> |
| | | Обробляє SQL-дані для джерел звіту |
| | |- |
| | | <code>save_info_report_designer()</code> |
| | | Зберігає інформацію про звіт і генерує MRT-файл |
| | |- |
| | | <code>data_source_lists_creating(group_reports_id)</code> |
| | | Створює списки джерел даних для звіту |
| | |} |
|
| |
|
| Відображає сторінку редагування друкованої форми.
| | === Приклад json_data_create() === |
| | |
| Повертає:
| |
| | |
| str: HTML-шаблон сторінки редагування.
| |
| | |
| ==== viewer() ==== | |
| | |
| Відображає сторінку перегляду друкованої форми.
| |
| | |
| Повертає:
| |
| | |
| str: HTML-шаблон сторінки перегляду.
| |
| | |
| ==== dashboard_viewer() ====
| |
| | |
| Відображає сторінку перегляду дашборду.
| |
| | |
| Повертає:
| |
| | |
| str: HTML-шаблон сторінки перегляду дашборду.
| |
| | |
| ==== dashboard_designer() ====
| |
| | |
| Відображає сторінку редагування дашборду.
| |
| | |
| Повертає:
| |
| | |
| str: HTML-шаблон сторінки редагування дашборду.
| |
| | |
| <pre>
| |
| json_data_create(datasource_value, datasource_keys, datasource_is_counterpart_id, datasource_is_storage_id, period, date_from=None, date_to=None) | |
| </pre>
| |
| | |
| Створює JSON-дані на основі джерел даних та періоду.
| |
| | |
| Параметри:
| |
| | |
| datasource_value (list): Список SQL-запитів.
| |
| | |
| datasource_keys (list): Список ключів для джерел даних.
| |
| | |
| datasource_is_counterpart_id (list): Список флагів, що вказують на наявність counterpart_id.
| |
| | |
| datasource_is_storage_id (list): Список флагів, що вказують на наявність storage_id.
| |
| | |
| period (int): Період вибірки даних.
| |
| | |
| date_from (str, опціонально): Початкова дата періоду.
| |
| | |
| date_to (str, опціонально): Кінцева дата періоду.
| |
| | |
| Повертає:
| |
| | |
| dict: Словник з результатами запитів або помилкою.
| |
| | |
| ==== Приклад використання ====
| |
|
| |
|
| <pre> | | <pre> |
| Рядок 1128: |
Рядок 1040: |
| date_from = "2023-01-01" | | date_from = "2023-01-01" |
| date_to = "2023-12-31" | | date_to = "2023-12-31" |
| json_data = k2_designer.json_data_create(datasource_value, datasource_keys, datasource_is_counterpart_id, datasource_is_storage_id, period, date_from, date_to) | | |
| | json_data = k2_designer.json_data_create( |
| | datasource_value, |
| | datasource_keys, |
| | datasource_is_counterpart_id, |
| | datasource_is_storage_id, |
| | period, |
| | date_from, |
| | date_to |
| | ) |
| </pre> | | </pre> |
|
| |
|
| ==== save_report_id() ====
| | == Клас K2Production == |
| | |
| Зберігає ідентифікатор та налаштування звіту в JSON-файл.
| |
| | |
| Повертає:
| |
| | |
| Response: JSON-відповідь про результат збереження.
| |
| | |
| ==== mrt_report_create(report_id, design_type_id=None) ====
| |
| | |
| Створює MRT-файл звіту на основі шаблону.
| |
| | |
| Параметри:
| |
| | |
| report_id (str): Ідентифікатор звіту.
| |
| | |
| design_type_id (str, опціонально): Тип дизайну звіту.
| |
| | |
| Повертає:
| |
| | |
| str: Ім'я створеного файлу або помилка.
| |
| | |
| ==== table_report_data(datasource_value, datasource_keys) ====
| |
| | |
| Обробляє дані з SQL-запитів для кожного джерела даних і повертає їх у вигляді JSON.
| |
| | |
| Параметри:
| |
| | |
| datasource_value (list): Список SQL-запитів для виконання.
| |
| | |
| datasource_keys (list): Список ключів, які відповідають кожному SQL-запиту.
| |
| | |
| Повертає:
| |
| | |
| dict: Словник, де ключі — це значення з datasource_keys, а значення — дані у форматі JSON для кожного запиту.
| |
| | |
| ==== save_info_report_designer() ====
| |
| | |
| Зберігає інформацію про репорт та генерує файл MRT.
| |
| | |
| Повертає:
| |
| | |
| Response: JSON-об'єкт із результатами генерації звіту та повідомленням про успішність.
| |
| | |
| ==== data_source_lists_creating(group_reports_id) ====
| |
| | |
| Створює списки джерел даних для звіту.
| |
| | |
| Параметри:
| |
| | |
| group_reports_id (str): Ідентифікатор групи звітів.
| |
| | |
| Повертає:
| |
| | |
| list: Списки джерел даних.
| |
| | |
| === Клас K2Production ===
| |
| | |
| ==== Методи класу ====
| |
| | |
| Схема вибору обслуговування терміналу
| |
| | |
| === Клас K2LogbookTMDoc ===
| |
| | |
| === Клас для управління логбуком технічного обслуговування (ТО). Забезпечує функціональність для створення, перегляду, редагування записів логбука ТО, роботи з параметрами завдань та обладнання, а також підготовки даних про запчастини. ===
| |
| | |
| ==== Методи класу ====
| |
|
| |
|
| ==== k2logbook_tm() ====
| | <code>K2Production</code> використовується для виробничих процесів. |
|
| |
|
| Відображає сторінку логбука технічного обслуговування.
| | У документації клас згадується в контексті схеми вибору обслуговування терміналу. |
| Повертає:
| |
| str: HTML-шаблон сторінки логбука.
| |
|
| |
|
| ==== take_logbook_tm(task_id) ==== | | == Клас K2LogbookTMDoc == |
|
| |
|
| Створює форму логбука для конкретного завдання.
| | <code>K2LogbookTMDoc</code> керує логбуком технічного обслуговування. |
| Параметри:
| |
|
| |
|
| task_id (str): Ідентифікатор завдання.
| | Клас забезпечує створення, перегляд і редагування записів логбука, роботу з параметрами завдань, обладнанням, запчастинами, кроками технічного обслуговування та підтвердженням виконання робіт. |
|
| |
|
| Повертає:
| | === Основні групи методів === |
| str: HTML-шаблон форми логбука.
| |
|
| |
|
| ==== edit_logbook_tm(logbook_fields_tm_id) ==== | | {| class="wikitable" style="width:100%;" |
| | ! Група |
| | ! Методи |
| | ! Призначення |
| | |- |
| | | Відображення логбука |
| | | <code>k2logbook_tm()</code>, <code>take_logbook_tm()</code>, <code>edit_logbook_tm()</code> |
| | | Відкриття списку, форми та редагування логбука |
| | |- |
| | | Планове і позапланове ТО |
| | | <code>planned_tm()</code>, <code>unplanned_tm()</code>, <code>create_unplanned_task()</code> |
| | | Робота з плановим і позаплановим технічним обслуговуванням |
| | |- |
| | | Параметри |
| | | <code>write_logbook_params()</code>, <code>read_logbook_params()</code> |
| | | Збереження та читання параметрів логбука |
| | |- |
| | | Запчастини |
| | | <code>pull_spare_parts_data()</code>, <code>spare_parts_check()</code>, <code>take_material_by_qr()</code>, <code>return_material_by_qr()</code> |
| | | Робота із запчастинами та матеріалами |
| | |- |
| | | Кроки ТО |
| | | <code>task_step_form()</code>, <code>save_step()</code>, <code>end_step()</code>, <code>end_step_manager()</code> |
| | | Обробка кроків технічного обслуговування |
| | |- |
| | | Перевірки |
| | | <code>step_image_check()</code>, <code>step_data_check()</code>, <code>detail_check()</code>, <code>equipment_qr_confirmation()</code> |
| | | Перевірка зображень, даних, деталей і QR-кодів |
| | |- |
| | | Статуси |
| | | <code>decline_task()</code>, <code>confirm_task()</code>, <code>send_on_revision_task()</code>, <code>requires_partner()</code>, <code>join_task()</code> |
| | | Керування статусами завдань |
| | |- |
| | | Звіти та зображення |
| | | <code>e_report_logbook()</code>, <code>get_all_employee_image()</code>, <code>get_employee_image()</code>, <code>get_image_logbook()</code> |
| | | Звіти та робота із зображеннями логбука |
| | |} |
|
| |
|
| Редагує запис логбука технічного обслуговування.
| | == Клас K2EquipmentFunction == |
| Параметри:
| |
|
| |
|
| logbook_fields_tm_id (str): Ідентифікатор запису логбука.
| | <code>K2EquipmentFunction</code> — підклас <code>K2Obj</code>, призначений для роботи з функціональністю обладнання в K2 ERP. |
|
| |
|
| Повертає:
| | Клас містить методи для обробки запитів на затвердження змін у технічній документації обладнання. |
| str: HTML-шаблон сторінки редагування.
| |
|
| |
|
| ==== select_current_step(connection, logbook_fields_tm_id) ====
| | === Атрибути === |
| | |
| Вибирає поточний активний крок логбука.
| |
| Параметри:
| |
| | |
| connection: Підключення до бази даних.
| |
| | |
| logbook_fields_tm_id (str): Ідентифікатор запису логбука.
| |
| | |
| Повертає:
| |
| str: Ідентифікатор поточного кроку.
| |
| | |
| ==== planned_tm(data, connection) ====
| |
| | |
| Налаштовує параметри grid для запланованого технічного обслуговування.
| |
| Параметри:
| |
| | |
| data (dict): Дані завдання.
| |
| | |
| connection: Підключення до бази даних.
| |
| | |
| Повертає:
| |
| dict: Налаштування grid.
| |
| | |
| ==== unplanned_tm(data, connection) ====
| |
| | |
| Налаштовує параметри grid для незапланованого технічного обслуговування.
| |
| Параметри:
| |
| | |
| data (dict): Дані завдання.
| |
| | |
| connection: Підключення до бази даних.
| |
| | |
| Повертає:
| |
| dict: Налаштування grid.
| |
| | |
| ==== write_logbook_params(data) ====
| |
| | |
| Зберігає параметри логбука в JSON-файл.
| |
| Параметри:
| |
| | |
| data (dict): Дані для збереження.
| |
| | |
| Повертає:
| |
| JSON: Відповідь про успішне збереження.
| |
| | |
| ==== read_logbook_params() ====
| |
| | |
| Зчитує параметри логбука з JSON-файлу поточного користувача.
| |
| Повертає:
| |
| dict: Збережені параметри логбука.
| |
| | |
| ==== fill_logbook_tm_rows(data) ====
| |
| | |
| Заповнює рядки логбука технічного обслуговування.
| |
| Параметри:
| |
| | |
| data (dict): Параметри для заповнення рядків.
| |
| | |
| Повертає:
| |
| bool: True при успішному заповненні, False при помилці.
| |
| | |
| ==== pull_spare_parts_data() ====
| |
| | |
| Витягує та підготовлює дані про запчастини для логбука.
| |
| Повертає:
| |
| JSON: Відповідь з результатом операції та даними про запчастини.
| |
| | |
| ==== send_params_to_k2logbook_spare_parts(data) ====
| |
| | |
| Формує параметри та SQL-запит для отримання даних про запчастини.
| |
| Параметри:
| |
| | |
| data (dict): Параметри логбука.
| |
| | |
| Повертає:
| |
| dict: Інформація про запчастини або False при помилці.
| |
| | |
| ==== instruments_and_equipment_parts_params() ====
| |
| | |
| Отримує параметри інструментів та запчастин для обладнання.
| |
| Повертає:
| |
| JSON: Відповідь з результатом операції або повідомленням про помилку.
| |
| | |
| ==== task_step_form() ====
| |
| | |
| Формує форму кроку завдання технічного обслуговування.
| |
| Повертає:
| |
| JSON: Відповідь з параметрами кроку або повідомленням про помилку.
| |
| | |
| ==== is_unplanned_step_form(step_data) ====
| |
| | |
| Обробляє форму кроку для позапланованого ТО.
| |
| Параметри:
| |
| | |
| step_data (dict): Дані кроку.
| |
| | |
| Повертає:
| |
| str: ID кроку або JSON з помилкою.
| |
| | |
| ==== save_step(data) ====
| |
| | |
| Зберігає дані кроку (номенклатуру).
| |
| Параметри:
| |
| | |
| data (dict): Параметри кроку.
| |
| | |
| Повертає:
| |
| bool: True при успіху, False при помилці.
| |
| | |
| ==== end_step(data, session_id, connection, post_request) ====
| |
| | |
| Завершує крок ТО. Обробляє запчастини, час, статус.
| |
| Параметри:
| |
| | |
| data (dict): Дані кроку.
| |
| | |
| session_id (str): ID сесії.
| |
| | |
| connection (опціонально): Підключення до БД.
| |
| | |
| post_request (bool): Чи це постобробка.
| |
| | |
| Повертає:
| |
| JSON або False.
| |
| | |
| ==== step_image_check(connection, data) ====
| |
| | |
| Перевіряє наявність зображень для кроку.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data (dict): Дані кроку.
| |
| | |
| Повертає:
| |
| bool: True (є зображення), False (немає або помилка).
| |
| | |
| ==== step_data_check(connection, data) ====
| |
| | |
| Перевіряє коректність даних про запчастини.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data (dict): Дані кроку.
| |
| | |
| Повертає:
| |
| bool: True (дані валідні), False (невалідні або помилка).
| |
| | |
| ==== decline_task() ====
| |
| | |
| Відхиляє завдання. Деактивує запис у логбуці.
| |
| Повертає:
| |
| JSON: Результат операції.
| |
| | |
| ==== write_user_comment() ====
| |
| | |
| Додає коментар користувача до кроку.
| |
| Повертає:
| |
| JSON: Результат збереження.
| |
| | |
| ==== end_step_manager(data) ====
| |
| | |
| Керує завершенням кроку. Перевіряє матеріали, зображення.
| |
| Параметри:
| |
| | |
| data (dict): Дані кроку.
| |
| | |
| Повертає:
| |
| bool: True (успіх), False (помилка).
| |
| | |
| ==== detail_check(connection, data) ====
| |
| | |
| Перевіряє відповідність номенклатури обладнанню.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data (dict): Дані кроку.
| |
| | |
| Повертає:
| |
| bool: True (відповідність є), False (немає або помилка).
| |
| | |
| ==== send_params_to_k2mount_point_form() ====
| |
| | |
| Формує параметри для форми монтажних точок обладнання.
| |
| Повертає:
| |
| JSON: Параметри форми (точки монтування, URL зображення схеми).
| |
| | |
| ==== change_scheme_equipment() ====
| |
| | |
| Оновлює схему обладнання шляхом заміни монтажних точок.
| |
| Повертає:
| |
| JSON: Результат операції.
| |
| | |
| ==== pass_familiarisation() ====
| |
| | |
| Позначає завдання як ознайомлене та оновлює його статус.
| |
| Повертає:
| |
| JSON: Підтвердження операції.
| |
| Примітка:
| |
| Функціонал створення акту списання закоментований.
| |
| | |
| ==== create_write_off_act_logbook(connection, data) ====
| |
| | |
| Створює акт списання для логбука.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data: Дані для акту.
| |
| | |
| Повертає:
| |
| bool: True (акт створено), False (помилка).
| |
| | |
| ==== create_doc_rows_for_write_of_act(connection, data) ====
| |
| | |
| Створює рядки документу для акту списання.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data: Дані документу.
| |
| | |
| Повертає:
| |
| bool: True (рядки створено), False (помилка).
| |
| | |
| ==== write_off_part_logbook(connection, data) ====
| |
| | |
| Списати частину обладнання з логбука.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data: Дані для списання.
| |
| | |
| Повертає:
| |
| Нічого (помилки обробляються через rollback).
| |
| | |
| ==== end_logbook() ====
| |
| | |
| Завершує роботу з журналом ТО.
| |
| Повертає:
| |
| JSON: Результат операції (успіх або помилка).
| |
| | |
| ==== spare_parts_check() ====
| |
| | |
| Перевіряє наявність запасних частин для журналу.
| |
| Повертає:
| |
| JSON: Результат перевірки (успіх або помилка).
| |
| | |
| ==== equipment_qr_confirmation() ====
| |
| | |
| Підтверджує відповідність QR-коду обладнання.
| |
| Повертає:
| |
| JSON: Результат перевірки (успіх або помилка).
| |
| | |
| ==== add_new_equipment_parts(connection, data) ====
| |
| | |
| Додає нові частини обладнання до БД.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data: Дані про частини обладнання.
| |
| | |
| Повертає:
| |
| bool: True (успіх), False (помилка).
| |
| | |
| ==== material_quantity() ====
| |
| | |
| Отримує інформацію про кількість матеріалів.
| |
| Повертає:
| |
| JSON: Дані про кількість матеріалів.
| |
| | |
| ==== create_unplanned_task(data) ====
| |
| | |
| Створює незаплановане завдання.
| |
| Параметри:
| |
| | |
| data: Дані для створення завдання.
| |
| | |
| Повертає:
| |
| bool: True (успіх), False (помилка).
| |
| | |
| ==== take_material_by_qr() ====
| |
| | |
| Резервує матеріал за допомогою QR-коду.
| |
| Повертає:
| |
| JSON: Результат операції (успіх або помилка).
| |
| | |
| ==== return_material_by_qr() ====
| |
| | |
| Повертає матеріал за QR-кодом.
| |
| Повертає:
| |
| JSON: Результат операції (успіх або помилка).
| |
| | |
| ==== requires_partner() ====
| |
| | |
| Встановлює статус завдання "потребує партнера".
| |
| Повертає:
| |
| JSON: Підтвердження операції.
| |
| | |
| ==== join_task() ====
| |
| | |
| Додає користувача до завдання та змінює статус на "in_work".
| |
| Повертає:
| |
| JSON: Результат операції.
| |
| | |
| ==== e_report_logbook(logbook_fields_tm_id) ====
| |
| | |
| Генерує звіт для журналу ТО у форматі HTML.
| |
| Параметри:
| |
| | |
| logbook_fields_tm_id: ID журналу.
| |
| | |
| Повертає:
| |
| HTML: Відображення звіту.
| |
| | |
| ==== get_all_employee_image() ====
| |
| | |
| Отримує всі зображення журналу.
| |
| Повертає:
| |
| JSON: Список URL зображень.
| |
| | |
| ==== get_employee_image() ====
| |
| | |
| Отримує зображення конкретного рядка журналу.
| |
| Повертає:
| |
| JSON: Список URL зображень.
| |
| | |
| ==== get_image_logbook(image_data) ====
| |
| | |
| Перетворює шляхи зображень у URL.
| |
| Параметри:
| |
| | |
| image_data: Дані зображень з БД.
| |
| | |
| Повертає:
| |
| list: Список URL
| |
| | |
| ==== confirm_task() ====
| |
| | |
| Підтверджує завершення завдання. Надсилає сповіщення.
| |
| Повертає:
| |
| JSON: Результат операції.
| |
| | |
| ==== send_on_revision_task() ====
| |
| | |
| Надсилає завдання на доопрацювання.
| |
| Повертає:
| |
| JSON: Підтвердження операції.
| |
| | |
| ==== send_to_the_task_list_revision() ====
| |
| | |
| Надсилає завдання на доопрацювання та деактивує виконавців.
| |
| Повертає:
| |
| JSON: Результат операції.
| |
| | |
| ==== change_task_employee(connection, data) ====
| |
| | |
| Оновлює виконавців завдання.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data: Нові виконавці та рядки.
| |
| | |
| ==== change_step_status_revision(connection, data) ====
| |
| | |
| Скидає статус виконання кроків.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data: Ідентифікатори кроків.
| |
| | |
| ==== change_task_status_revision(connection, data, status) ====
| |
| | |
| Змінює статус завдання.
| |
| Параметри:
| |
| | |
| connection: Підключення до БД.
| |
| | |
| data: Ідентифікатор завдання.
| |
| | |
| status: Новий статус (за замовчуванням in_work).
| |
| | |
| === Клас K2EquipmentFunction ===
| |
| | |
| === Клас K2EquipmentFunction є підкласом K2Obj і призначений для роботи з функціональністю, пов'язаною з обладнанням у системі K2. Він містить методи для обробки запитів на затвердження змін у технічній документації обладнання. ===
| |
| | |
| ==== Атрибути ====
| |
| | |
| path_class: 'components/k2production/k2production/k2equipment'
| |
| | |
| file_class: 'k2equipment'
| |
| | |
| ==== Методи ====
| |
| | |
| ==== init(self) ====
| |
| | |
| Конструктор класу, який викликає конструктор батьківського класу K2Obj.
| |
|
| |
|
| <pre> | | <pre> |
| send_approval_request_from_hook(self, data) - Метод для відправлення запиту на затвердження змін у технічній карті обладнання.
| | path_class = 'components/k2production/k2production/k2equipment' |
| | file_class = 'k2equipment' |
| </pre> | | </pre> |
|
| |
|
| ==== Параметри ==== | | === Метод send_approval_request_from_hook() === |
| | |
| data (dict): Словник з даними, що містить:
| |
| | |
| equipment_type_id (int): Ідентифікатор типу обладнання
| |
| | |
| changed_fields (dict): Словник зі зміненими полями та їх значеннями
| |
| | |
| ==== Логіка роботи ====
| |
| | |
| Перевірка наявності записів з parentid:
| |
|
| |
|
| <pre> | | <pre> |
| Перевіряє наявність записів у таблиці k2tm_fields з parentid != '0'
| | send_approval_request_from_hook(self, data) |
| </pre> | | </pre> |
|
| |
|
| Якщо записів немає, повертає помилку 404
| | Метод відправляє запит на затвердження змін у технічній карті обладнання. |
|
| |
|
| Отримання інформації про тип обладнання:
| | Очікувані дані: |
|
| |
|
| Витягує equipment_type_name та equipment_type_code з таблиці k2equipment_type
| | {| class="wikitable" style="width:100%;" |
| | ! Поле |
| | ! Призначення |
| | |- |
| | | <code>equipment_type_id</code> |
| | | Ідентифікатор типу обладнання |
| | |- |
| | | <code>changed_fields</code> |
| | | Словник зі зміненими полями та їхніми значеннями |
| | |} |
|
| |
|
| Якщо тип обладнання не знайдено, повертає помилку 404
| | Логіка роботи: |
|
| |
|
| Пошук затверджувачів:
| | # перевіряє наявність записів із <code>parentid != '0'</code> у таблиці <code>k2tm_fields</code>; |
| | # отримує інформацію про тип обладнання з таблиці <code>k2equipment_type</code>; |
| | # шукає активних затверджувачів у таблиці <code>k2users_for_approval</code>; |
| | # формує опис змін; |
| | # формує URL для сторінки затвердження; |
| | # надсилає повідомлення через <code>K2Notifications.send_approval_request()</code>. |
|
| |
|
| Отримує список активних користувачів для затвердження з таблиці k2users_for_approval
| | Метод повертає JSON-відповідь про успіх або помилку. |
|
| |
|
| Якщо затверджувачів не знайдено, повертає помилку 404
| | == K2 ERP JavaScript == |
|
| |
|
| Формування повідомлення:
| | У K2 ERP використовуються допоміжні JavaScript-функції для роботи з інтерфейсом, зображеннями, завантаженням і повідомленнями користувачу. |
|
| |
|
| Створює опис змін у форматі "поле: старе_значення → нове_значення"
| | === createImageSliderModal() === |
| | |
| Формує URL для сторінки затвердження
| |
| | |
| Відправка запиту на затвердження:
| |
|
| |
|
| <pre> | | <pre> |
| Використовує K2Notifications.send_approval_request() для відправки повідомлення
| | createImageSliderModal(images, containerId = null) |
| </pre> | | </pre> |
|
| |
| Передає список затверджувачів, ідентифікатор об'єкта, URL та опис змін
| |
|
| |
| ==== Повертає ====
| |
|
| |
| У разі успіху: JSON з повідомленням про успішну відправку (код 200)
| |
|
| |
| У разі помилки: JSON з описом помилки (код 404 або 500)
| |
|
| |
| ==== Залежності ====
| |
|
| |
| Потребує доступу до бази даних через self.db
| |
|
| |
| ==== Використовує клас K2Notifications для відправки повідомлень ====
| |
|
| |
| Працює з конфігурацією домену через K2.domain
| |
|
| |
| == K2 Cloud ERP Javascript ==
| |
|
| |
| ==== createImageSliderModal(images, containerId = null) ====
| |
|
| |
|
| Створює слайдер зображень у контейнері або модальному вікні. | | Створює слайдер зображень у контейнері або модальному вікні. |
| Рядок 1700: |
Рядок 1163: |
| Параметри: | | Параметри: |
|
| |
|
| images: Масив URL-адрес зображень. | | {| class="wikitable" style="width:100%;" |
| | ! Параметр |
| | ! Опис |
| | |- |
| | | <code>images</code> |
| | | Масив URL-адрес зображень |
| | |- |
| | | <code>containerId</code> |
| | | Ідентифікатор контейнера для вставки слайдера |
| | |} |
|
| |
|
| containerId: Ідентифікатор контейнера для вставки слайдера (необов’язково).
| | Повертає ідентифікатор створеного каруселя або модального вікна. Якщо зображення відсутні, показує повідомлення та повертає <code>null</code>. |
|
| |
|
| Повертає:
| | === showBootstrapLoader() === |
|
| |
|
| Ідентифікатор створеного каруселя або модального вікна.
| | <pre> |
| | | showBootstrapLoader(containerId) |
| Якщо зображення відсутні, показує повідомлення та повертає null.
| | </pre> |
| | |
| ==== showBootstrapLoader(containerId) ====
| |
|
| |
|
| Додає анімацію завантаження у вказаний контейнер. | | Додає анімацію завантаження у вказаний контейнер. |
|
| |
|
| Параметри:
| | === removeBootstrapLoader() === |
|
| |
|
| containerId: Ідентифікатор контейнера, у який буде вставлений індикатор завантаження.
| | <pre> |
| | | removeBootstrapLoader(containerId) |
| ==== removeBootstrapLoader(containerId) ====
| | </pre> |
|
| |
|
| Видаляє анімацію завантаження з контейнера. | | Видаляє анімацію завантаження з контейнера. |
|
| |
|
| Параметри:
| | === showUserAlert() === |
| | |
| containerId: Ідентифікатор контейнера, з якого потрібно прибрати індикатор завантаження.
| |
|
| |
|
| ==== showUserAlert(message, type = 'light') ====
| | <pre> |
| | showUserAlert(message, type = 'light') |
| | </pre> |
|
| |
|
| Відображає сповіщення користувача у вигляді Bootstrap Toast | | Відображає повідомлення користувачу у вигляді Bootstrap Toast. |
| | |
| . | |
|
| |
|
| Параметри: | | Параметри: |
|
| |
|
| message: Текст повідомлення. type: Тип сповіщення (primary, success, danger, warning, info, light). За замовчуванням 'light'. | | {| class="wikitable" style="width:100%;" |
| | ! Параметр |
| | ! Опис |
| | |- |
| | | <code>message</code> |
| | | Текст повідомлення |
| | |- |
| | | <code>type</code> |
| | | Тип повідомлення: <code>primary</code>, <code>success</code>, <code>danger</code>, <code>warning</code>, <code>info</code>, <code>light</code> |
| | |} |
|
| |
|
| == Стилі (Назва) == | | == Ілюстрації == |
|
| |
|
| Подзаголовок
| | <gallery mode="packed" heights="180"> |
| | | K2_Cloud_ERP_Python_01.png|Ілюстрація K2 ERP Python|посилання=Файл:K2_Cloud_ERP_Python_01.png |
| Заголовок 1
| | </gallery> |
| | |
| Заголовок 2
| |
| | |
| Заголовок 3
| |
| | |
| Заголовок 4
| |
| | |
| Заголовок 5
| |
|
| |
|
| Заголовок 6
| | == Коротко == |
|
| |
|
| Звичвйний текст
| | {| class="wikitable" style="width:100%;" |
| | | ! Питання |
| == Ілюстрації з документа ==
| | ! Відповідь |
| | | |- |
| <gallery mode="packed" heights="180">
| | | Для кого ця сторінка? |
| K2_Cloud_ERP_Python_01.png|Ілюстрація K2 Cloud ERP Python
| | | Для розробників K2 ERP Python |
| </gallery> | | |- |
| | | Що описує документ? |
| | | Вимоги до компонентів, системні класи, API, CRM, звіти, production-класи та JavaScript-утиліти |
| | |- |
| | | Який базовий клас системи? |
| | | <code>K2</code> |
| | |- |
| | | Від чого наслідуються об’єкти системи? |
| | | Від <code>K2Obj</code> |
| | |- |
| | | Де описуються залежності компонент? |
| | | У <code>requirements-components.txt</code> та <code>requirements.txt</code> |
| | |- |
| | | Де зберігається документація? |
| | | У каталозі <code>doc/</code> |
| | |- |
| | | Де зберігаються локалізації? |
| | | У каталозі <code>languages/</code> |
| | |- |
| | | Які JavaScript-функції описані? |
| | | Слайдер зображень, loader, видалення loader та повідомлення користувачу |
| | |} |
|
| |
|
| == Див. також == | | == Див. також == |
|
| |
|
| * [[K2 Cloud ERP]] | | * [[K2 Cloud ERP|K2 ERP]] |
| * [[K2 ERP]] | | * [[K2 ERP]] |
| * [[Python]] | | * [[Python]] |
| * [[API]] | | * [[API]] |
| * [[Документація для розробників]] | | * [[Документація для розробників]] |
| * [[K2 Cloud ERP Javascript]] | | * [[K2 Cloud ERP Javascript|K2 ERP Javascript]] |
| | * [[Розгортання системи K2 ERP Python для розробників]] |
| | * [[Компоненти K2 ERP]] |
| | * [[K2 CRM]] |
| | * [[K2 Report]] |
| | * [[K2 Production]] |
|
| |
|
| [[Категорія:K2 ERP]] | | [[Категорія:K2 ERP]] |
| [[Категорія:K2 Cloud ERP]] | | [[Категорія:K2 ERP Python]] |
| [[Категорія:Python]] | | [[Категорія:Python]] |
| | [[Категорія:API]] |
| [[Категорія:Документація K2]] | | [[Категорія:Документація K2]] |
| [[Категорія:Документація для розробників]] | | [[Категорія:Документація для розробників]] |
| | [[Категорія:Компоненти K2 ERP]] |
| | [[Категорія:K2 CRM]] |
| | [[Категорія:K2 Report]] |
| | [[Категорія:K2 Production]] |
| | [[Категорія:K2 ERP Javascript]] |
| | [[Категорія:Корпоративна Wiki]] |