Класи та команди K2 ERP Python: відмінності між версіями

Створена сторінка: {{Картка документації K2 | назва = K2 Cloud ERP Python для розробників | система = K2 Cloud ERP | мова = Python | тип = Документація для розробників }} '''K2 Cloud ERP Python для розробників''' — документація з вимогами до створення компонентів, структури пакетів, системних класів, API, ко...
 
Немає опису редагування
 
(Не показані 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]]