@startuml
actor Лаборант
boundary ИнтерфейсЛаборанта
control КонтроллерВыдачи
database ХранилищеЗаявок
database ХранилищеОборудования
entity Заявка
entity Пользователь
entity Оборудование
entity Выдача
Лаборант
-> ИнтерфейсЛаборанта:
показатьПодтвержденныеЗаявки()
ИнтерфейсЛаборанта
-> КонтроллерВыдачи:
получитьСведения(заявкаId)
КонтроллерВыдачи
-> ХранилищеЗаявок:
найти(заявкаId)
ХранилищеЗаявок
--> КонтроллерВыдачи:
Заявка
КонтроллерВыдачи
-> Заявка:
действительна(текущаяДата)
КонтроллерВыдачи
-> ХранилищеОборудования:
найти(оборудованиеId)
ХранилищеОборудования
--> КонтроллерВыдачи:
Оборудование
КонтроллерВыдачи
-> Оборудование:
доступноДляВыдачи()
КонтроллерВыдачи
--> ИнтерфейсЛаборанта:
СведенияВыдачи
Лаборант
-> ИнтерфейсЛаборанта:
ввестиДанныеВыдачи(
комплектность,
состояние
)
ИнтерфейсЛаборанта
-> КонтроллерВыдачи:
оформитьВыдачу(
заявкаId,
комплектность,
состояние
)
КонтроллерВыдачи
-> ХранилищеЗаявок:
найти(заявкаId)
ХранилищеЗаявок
--> КонтроллерВыдачи:
Заявка
КонтроллерВыдачи
-> ХранилищеОборудования:
найти(оборудованиеId)
ХранилищеОборудования
--> КонтроллерВыдачи:
Оборудование
alt Успешная выдача
КонтроллерВыдачи
-> Пользователь:
проверитьАктивность()
Пользователь
--> КонтроллерВыдачи:
true
КонтроллерВыдачи
-> Оборудование:
доступноДляВыдачи()
Оборудование
--> КонтроллерВыдачи:
true
КонтроллерВыдачи
-> Выдача:
оформить(
дата,
комплектность,
состояние
)
КонтроллерВыдачи
-> Оборудование:
изменитьСтатус(Выдано)
КонтроллерВыдачи
-> Заявка:
завершить()
КонтроллерВыдачи
-> ХранилищеЗаявок:
сохранить(заявка)
КонтроллерВыдачи
-> ХранилищеОборудования:
сохранить(оборудование)
КонтроллерВыдачи
--> ИнтерфейсЛаборанта:
РезультатВыдачи(успех)
ИнтерфейсЛаборанта
--> Лаборант:
показатьРезультат(успех)
else Отказ в выдаче
КонтроллерВыдачи
--> ИнтерфейсЛаборанта:
РезультатВыдачи(отказ, причина)
ИнтерфейсЛаборанта
--> Лаборант:
показатьРезультат(отказ)
end
@enduml