vault backup: 2025-06-04 12:26:55

This commit is contained in:
sShemet
2025-06-04 12:26:55 +05:00
parent 8beaf750bf
commit 6f0ea5c8fa
2 changed files with 18 additions and 9 deletions

View File

@@ -13,15 +13,15 @@
"state": {
"type": "canvas",
"state": {
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Данные образца и ФИЗы.canvas",
"file": "WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/ТЗ динамических полей и ФИЗов.canvas",
"viewState": {
"x": -225.7335164524918,
"y": 664.7273615628912,
"zoom": -0.33333333333333326
"x": -103,
"y": 118.5,
"zoom": -1.415296855277791
}
},
"icon": "lucide-layout-dashboard",
"title": "Данные образца и ФИЗы"
"title": "ТЗ динамических полей и ФИЗов"
}
},
{
@@ -205,8 +205,8 @@
},
"active": "343836aed0394d03",
"lastOpenFiles": [
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Данные образца и ФИЗы.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/pgo_to_groups.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/ТЗ динамических полей и ФИЗов.canvas",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/dynamic_controls_table.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/modules_to_dyn_controls.md",
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/samplings table.md",

View File

@@ -2,24 +2,33 @@
"nodes":[
{"id":"471fc15ab64b3b4b","x":-1586,"y":-280,"width":2966,"height":1140,"color":"4","type":"group","label":"Загрузка полей и данных"},
{"id":"1bdc3fd8f4fc131a","type":"group","x":-1586,"y":-1483,"width":2966,"height":1103,"color":"5","label":"Структура данных"},
{"id":"730071c06b433cd8","x":-1220,"y":920,"width":2220,"height":420,"color":"6","type":"group","label":"Сохранение"},
{"id":"9eb9ce3354acd504","x":-802,"y":1440,"width":1382,"height":280,"color":"3","type":"group","label":"TODO:"},
{"id":"4aefb6d2d59c1c9a","type":"file","file":"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/modules_to_dyn_controls.md","x":-960,"y":-1309,"width":760,"height":669},
{"id":"68b998893332eba2","type":"text","text":"trials_type\n1 - Лабораторные\n2 - Выездные","x":-560,"y":-1440,"width":250,"height":103},
{"id":"ae68b7d5dfd17b3e","x":-765,"y":-560,"width":565,"height":140,"type":"text","text":"Участвующие в динамическом распределении данных таблицы sample_details, requests и т.д. **ОБЯЗАНЫ** привязку к текущему incoming_object и иметь поле dynamic_data, в котором будут храниться данные, сохранённые из динамических полей"},
{"id":"b630f9de672de8d5","type":"file","file":"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/dynamic_controls_table.md","x":-40,"y":-1309,"width":1360,"height":749},
{"id":"330a5e6e96216ba6","x":-1500,"y":-1206,"width":400,"height":464,"type":"file","file":"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/pgo_to_groups.md"},
{"id":"3c06fbe8ba52b772","type":"text","text":"### Отправка данных на backend\n\nС фронтенда прилетают данные полей со свойством dynamic_control_id и value\n\nСюда необходимо добавить валидацию полей","x":-1400,"y":920,"width":600,"height":380},
{"id":"2219c7c391038f10","x":-1520,"y":-260,"width":600,"height":463,"type":"text","text":"### Инициация\n\nКрасные поля в таблице “Распределение данных” и поля, **которые ни от чего не зависят** - грузятся в форму на фронте и сохраняются в свои соответствующие таблицы (поля с заказчиком, основание, договор, контактные лица, менеджер и тд) - они общие для всех и их лучше обрабатывать как нормальные данные.\n\nПосле выбора ТИПА ОИ, ТИПА ИСПЫТАНИЙ, ГРУППЫ ОИ (в окне Заявки или Образца) начинается подгрузка динамических полей."},
{"id":"78a47b6bae2c6690","x":-800,"y":-260,"width":600,"height":463,"type":"text","text":"### Определение динамических полей\n\nИз группы ОИ получается PGO (пакет группы испытаний (бывший ФИЗ)) из таблицы pgo_to_groups\nВыполняется выборка dyn_controls_id из таблицы **modules_to_dyn_controls** согласно выбранным object_type, trials_type, pgo и модуля (page), запрашивающего данные.\nПо каждому элементу массива dyn_controls_id выполняется выборка из таблицы dynamic_controls_table c сортировкой по sort_id."},
{"id":"4c9e712b802ea35e","x":600,"y":-260,"width":600,"height":463,"type":"text","text":"### Подгрузка сохранённых данных\n\nЭту процедуру можно выполнять в предыдущем цикле обработки каждого поля\nСобираются все уникальные значения destination_table у текущих выбранных полей\nДелается выборка по таблицам destination_table по id открытого документа или destination_table.incoming_object.id\nУ выбранных объектов получаются json-массивы сохранённых данных из поля dynamic_data\nКаждое динамическое поле проверяется на соответствие и присутствие в сохранённых данных.\nЕсли данные присутствуют - динамическому полю добавляется поле “value” со значением из документа.\nТаким образом можно собирать данные, присвоенные в совершенно разных динамических полях заявки/документов. Пример сохранённых данных показан ниже"},
{"id":"d3bed003864f4b06","x":-80,"y":-260,"width":600,"height":463,"type":"text","text":"### Форматирование динамических полей\n\nКаждый элемент поля проходит проверку и подготавливается для отправки на фронтэнд.\nПроверяется каждое поле renderData и если есть ключ table, то делается выборка из соответствующей таблицы с параметрами и поле трансформируется в options с готовыми данными.\n\nКаждому полю на фронте присваивается свойство dynamic_control_id, чтобы обработать его данные при сохранении"},
{"id":"36f032eaa8b89a57","x":-400,"y":283,"width":535,"height":517,"type":"text","text":"### Содержание поля dynamic_data у таблиц с данными динамических полей.\n\n```json\n[\n\t{\n\t\t\"id\": \"3\",\n\t\t\"name: \"tn_ved\",\n\t\t\"value\" : \"3022 4433\"\n\t},\n\t{\n\t\t\"id\": \"7\",\n\t\t\"name: \"storage_conditions\",\n\t\t\"value\" : \"Пакет целлофановый\"\n\t},\n\t{\n\t\t\"id\": \"9\",\n\t\t\"name: \"trials_in_OA_range\",\n\t\t\"value\" : true\n\t},\n]\n```"},
{"id":"2f8ebcf398e207de","type":"text","text":"### Формирование массива данных\n\nДелается выборка полей id, name, destination_table из таблицы dynamic_control_id из массива всех полученных dynamic_control_id\n\nСобирается несколько массивов dynamic_data с группировкой по destination_table\nПроходя по каждой записи destination_table выбирается объект для записи из таблицы по incoming_object_id.\nТекущ","x":-465,"y":920,"width":600,"height":380}
{"id":"625877f2c5a88673","x":-782,"y":1460,"width":1342,"height":50,"type":"text","text":"Продумать полностью формат хранения динамических контролов и подгружаемых данных"},
{"id":"2ec086ec8e32925e","type":"text","text":"Сформировать первичные данные таблиц pgo_to_groups, dynamic_controls_table и modules_to_dyn_controls, необходимые для отображения/сохранения данных по текущим данным. Для начала вручную. Можно задуматься о ТЗ редактора :)","x":-782,"y":1510,"width":1342,"height":70},
{"id":"ddb16308453a51d9","type":"text","text":"Продумать поддержку зависимости от объектов, глубже incoming_object (Испытания/протоколы)","x":-779,"y":1580,"width":1339,"height":60},
{"id":"3c06fbe8ba52b772","type":"text","text":"### Отправка данных на backend\n\nС фронтенда прилетают данные полей со свойством dynamic_control_id и value","x":-1120,"y":940,"width":600,"height":380},
{"id":"2f8ebcf398e207de","type":"text","text":"### Формирование и сохранение массива данных\n\nДелается выборка полей id, name, destination_table из таблицы dynamic_control_id из массива всех полученных dynamic_control_id\n\nСобирается несколько массивов dynamic_data с группировкой по destination_table\nПроходя по каждой записи destination_table выбирается объект для записи из таблицы по текущему incoming_object_id (прилетает с фронтенда или создаётся при первичном сохранении).\nТекущий массив данных сохраняется в поле dynamic_data в таблицу destination_table","x":340,"y":940,"width":600,"height":380},
{"id":"a936e40ca6c658a7","x":-384,"y":940,"width":609,"height":380,"type":"text","text":"### Валидация динамических полей\n\nTODO!"},
{"id":"e968c77fea8190c3","type":"text","text":"Валидация полей","x":-779,"y":1640,"width":1339,"height":60}
],
"edges":[
{"id":"15a75fcef9b6166b","fromNode":"4aefb6d2d59c1c9a","fromSide":"right","toNode":"b630f9de672de8d5","toSide":"left"},
{"id":"ef85aa37ebd26a2a","fromNode":"330a5e6e96216ba6","fromSide":"right","toNode":"4aefb6d2d59c1c9a","toSide":"left"},
{"id":"4b3eb7d74e747c79","fromNode":"2219c7c391038f10","fromSide":"right","toNode":"78a47b6bae2c6690","toSide":"left"},
{"id":"d9451be02d13baec","fromNode":"78a47b6bae2c6690","fromSide":"right","toNode":"d3bed003864f4b06","toSide":"left"},
{"id":"1cabf9437f0fdd76","fromNode":"d3bed003864f4b06","fromSide":"right","toNode":"4c9e712b802ea35e","toSide":"left"}
{"id":"1cabf9437f0fdd76","fromNode":"d3bed003864f4b06","fromSide":"right","toNode":"4c9e712b802ea35e","toSide":"left"},
{"id":"dd879e7b5dca46fd","fromNode":"3c06fbe8ba52b772","fromSide":"right","toNode":"a936e40ca6c658a7","toSide":"left"},
{"id":"fa6b923d8a4f2053","fromNode":"a936e40ca6c658a7","fromSide":"right","toNode":"2f8ebcf398e207de","toSide":"left"}
]
}