Разработка #5935
Обновлено Андрей Ерзунов около 1 месяца назад
Со стороны ДТ-Синтеза в разделе "Заказы" появился новый пункт меню "Заявки на синтез". На данной странице подгружается список заявок, созданных в Личном кабинете заказчика. ДТ-Синтез раз в минуту запрашивает новый список заявок со статусом "На рассмотрении" из Личного кабинета закачзика. *1. Детали заявки на синтез* Нажав на строку с соответствующей заявкой будет выполнен переход на страницу "Деталей заявки на синтез". В верхней части страницы располагается блок с общими параметрами заявки, которые можно редактировать посредством соответствующей кнопки. При редактировании параметров, - изменения должны примениться и у соответствующей заявки в Личном кабинете заказчика. Раз в минуту ДТ-Синтез отправляет в Личный кабинет запрос на синхронизацию, поэтому ориентировочно в течение этого времени соответствующая запись заявки должна обновиться в Личном кабинете. В Личном кабинете с заявкой связан определённый Email пользователя, а в ДТ-Синтезе, есть сущность Клиент, которая связана с заказами и указывается при их создании. По сути это одно и тоже, но в разных приложениях, поэтому если мы однажды для определённого Email'а в заявке выберем определённое значение заказчика, - это соответствие сохранится и впоследствии поле "Заказчик" будет заполняться автоматически ранее выбранным значением, соответствующих определённому Email'у, для новых заявок. По поводу деталей заявки также стоит упомянуть, что ниже располагается блок со Списком олигов в заявке, - исходно с теми же параметрами, что были указаны при создании заявки в Личном кабинете. Важный момент. В ДТ-Синтезе есть своя сущность олига, с системным названием, из Справочника олигонуклеотидов, а при создании заявки пользователь (внешний заказчик) не имеет представления о том, какие названия олигов зарегистрированы в ДТ-Синтезе для определённых последовательностей олигов, и тем более, между разными проектами одна и та же последовательность может называться по-разному. В связи с этим, для олигов в заявке, в ДТ-Синтезе, было введено поле "Проектное название", которое может отличаться от названия сущности Олига в справочнике. Данное проектное название можно редактировать, нажав на правую кнопку мыши по значению проектного названия, в тех местах, где оно используется. Данное название отображается: 1. На странице Деталей заявки (/synthesisRequests/<id>). 2. На всех страницах в разделе УВПН, где есть списки олигов (таблицы с олигами). 3. В компоненте деталей Научного заказа (/scientificOrders/<id>). 4. На странице информации о Пробирке и Планшете, при клике на ячейку. В общем случае проектное название олига - редактируемое, одинаковым образом (с помощью правой кнопки мыши), а также, при отображении данного названия в таблицах используется общее правило: если Проектное название олига отличается от названия сущности Олига в системе, - отображается информация об обоих названиях, иначе - отображается только одно значение, но возможность редактирования остаётся. !clipboard-202604061124-wilqj.png! Редактирование названия в общем случае автоматически сохраняется в базе при нажатии на кнопку "Подтвердить" в модальном окне редактирования. !clipboard-202604061125-rza6m.png! За исключением ситуации, когда проектное название редактируется в момент создания заказа, связанного с заявкой в ДТ-Синтезе. Более подробно о данной функциональности постараюсь расписать в следующем пункте. *2. Создание заказа, связанного с заявкой на синтез.* При нажатии на кнопку "Создать заказ" на странице Деталей заявки на синтез, - пользователь перенаправляется на форму создания закза, похожую на стандартную, за тем исключением, что в верхней части страницы отображается блок с информацией о связанной заявке, а также информация о списке олигов в заявке. Данный блок - сворачиваемый. !clipboard-202604061128-ax0ca.png! Параметры заказа должны заполняться соответствующими параметрами из заявки (при их наличии). При открытии страницы создания заказа, связанного с заявкой, - система автоматически пробует найти сущности Олигов, имеющиеся в системе, и сопоставить их с сущностями Олигов в заявке. Автоматическое добавление олигов в заказ, в блок "Список олигонуклеотидов" работает аналогично стандартному созданию заказа, за тем исключением, что в качестве параметров добавляемых олигов система использует значения, указанные для соответствующего олига в заявке. В качестве названия сущности Олига в ДТ-Синтезе система подставляет проектное название олига из заявки. В связи с чем, в нижней таблице со списком олигов могут отображаться несоответствия, аналогичные тем, что есть при создании стандартного заказа в системе. !clipboard-202604061136-rt1ro.png! !clipboard-202604061353-km6lu.png! !clipboard-202604061135-ubada.png! Во всех модальных окнах по разрешению таких несоответствий добавлена возможность редактирования "Проектного названия" олига. Соответствующая возможность с указанием проектного названия добавлена и в стандартное модальное окно Добавления олига в заказ. !clipboard-202604061144-orsmj.png! При импорте информации из .csv также добавлена функциональность автоматического сопоставления Олигов из ДТ-Синтеза с олигами в заявке, а также в .csv-файл добавлена поддержка дополнительного поля "projectName", соответствующего проектному названию олига. На всякий случай напомню, что в отличие от всех остальных мест в системе, - изменения после редактирования проектного названия олига во время создания заказа будут применены только при нажатии на кнопку "Сохранить изменения и сформировать заказ". У пользователя в ДТ-Синтезе при создании заказа есть возможность полностью изменить состав олигов в рамках заказа, а следовательно и в рамках заявки. То есть пользователь может удалить информацию из таблицы "Список олигонуклеотидов", а также удалить информацию из Списка олигов в заявке, после этого добавить те олиги, которые посчитает нужным, и после сохранения информации о новом заказе, - обновлённая информация о составе олигов в заявке должна появиться на страницах Деталей заявки, как в ДТ-Синтезе, так и в Личном кабинете заказчика. В блоке "Список олигов в заявке" для дополнительной индикации разработаны следующие обозначения. * 1. Значок галочки сигнализирует о том, для записи олига в заявке была добавлена запись сущности Олига из ДТ-Синтеза. !clipboard-202604061141-haslg.png! Если для всех олигов в заявке были выбраны записи Олигов из ДТ-Синтеза, - тот же значок начинает отображаться и справа от заголовка данного блока. !clipboard-202604061143-ydu2q.png! * Для олигов, которые исходно не находились в заявке, но были добавлены во время создания заказа предусмотрена отдельная иконка. !clipboard-202604061353-fup29.png! *3. Формирование детального статуса олигов в заявке* После того, как заказ в ДТ-Синтезе будет создан, - ДТ-Синтез будет раз в минуту собирать информацию о заявках в своей базе с любым статусом, отличным от статуса "Выполнена", и отправлять информацию для обновления соответствующей заявки в Личном кабинете. В рамках этой синхронизации могут обновляться как общие параметры заявки, отредактированные в ДТ-Синтезе, так и состав олигов, который был изменён в ДТ-Синтезе, а также их детальный статус по этапам, более подробно про отображение которого было указано в задаче https://redmine.dna-tech.dev/issues/5933. Приведу краткое описание того, в какой момент в ДТ-Синтезе происходит фиксация дат завершения этапов синтеза для каждого из олигов в заявке. Для олигов на текущий момент выделяются следующие стадии: Для каждой из стадий есть своя теоретическая длительность выполнения: *1. Принят в работу.* В качестве фактической даты завершения данной стадии выступает дата создания заказа в ДТ-Синтезе. *2. Синтез.* В качестве фактической даты завершения данной стадии выступает дата первой передачи олига с УС (через стандартный функционал передачи или через концентрирование). *3. Очистка.* В качестве фактической даты завершения данной стадии выступает дата первой передачи олига с УПР (через стандартный функционал передачи или через концентрирование). *4. Клик.* В качестве фактической даты завершения данной стадии выступает дата первой передачи олига с УКХ (через стандартный функционал передачи или через концентрирование). *5. Повторная очистка.* В качестве фактической даты завершения данной стадии выступает дата первой передачи олига с УПР (через стандартный функционал передачи или через концентрирование), после того, как олиг побывал на УКХ и был принят там в работу через соответствующий функционал. !clipboard-202604061246-czngh.png! *6. Контроль качества.* *7. Выпуск.* Две данные стадии на текущий момент считаются завершёнными в одно и то же время. В качестве фактической даты завершения данных стадий на текущий момент выступает следующее условие: Если для олига была зафиксирована передача заказчику через функционал передачи олигов заказчику на странице Деталей научного заказа, или же соответствующий заказ был закрыт с помощью функциональности закрытия научного заказа, - из двух данных дат берётся наименьшая (но достаточно хотя бы одной). После закрытия заказа у связанной заявки в ДТ-Синтезе обновляется статус на "Выполнена", - после чего данный статус должен в течение ~1 минуты быть установлен и у заявки в Личном кабинете, вместе с текущими параметрами заявки в ДТ-Синтезе и детальными статусами олигонуклеотидов, после чего для данной заявки ДТ-Синтез перестаёт отправлять запросы на синхронизацию в Личный кабинет, так как для синхронизации выбираются только заявки, у которых статус отличен от статуса "Выполнена". Но смена статуса всё ещё доступна на Деталях заявки в ДТ-Синтезе, поэтому при необходимости синхронизацию всё ещё можно выполнить, но для этого необходимо вернуть статус заявки на "В работе". В тестовых целях, для корректной работы закрытия заказа (и установки дат у финальных стадий синтеза олигов в заявках) можно было бы передать олиги на УВПН, после чего установить им статус по контролю "ОК" с помощью функциональности, представленной на скриншоте. !clipboard-202604061347-gakyf.png! Затем, на деталях соответствующего Научного заказа, данным олигам в заказе необходимо установить "Статус ОК по контролю". !clipboard-202604061348-tvl0m.png! После чего, нажав на кнопку "Закрыть заказ", - появится возможность отсканировать все необходимые физические олиги и выполнить закрытие заказа.