Загрузка данных


@startuml

actor Лаборант

boundary ИнтерфейсЛаборанта
control КонтроллерВыдачи

database ХранилищеЗаявок
database ХранилищеОборудования

entity Заявка
entity Пользователь
entity Оборудование
entity Выдача


Лаборант
    -> ИнтерфейсЛаборанта:
    показатьПодтвержденныеЗаявки()

ИнтерфейсЛаборанта
    -> КонтроллерВыдачи:
    получитьСведения(заявкаId)

КонтроллерВыдачи
    -> ХранилищеЗаявок:
    найти(заявкаId)

ХранилищеЗаявок
    --> КонтроллерВыдачи:
    Заявка

КонтроллерВыдачи
    -> Заявка:
    действительна(текущаяДата)

КонтроллерВыдачи
    -> ХранилищеОборудования:
    найти(оборудованиеId)

ХранилищеОборудования
    --> КонтроллерВыдачи:
    Оборудование

КонтроллерВыдачи
    -> Оборудование:
    доступноДляВыдачи()

КонтроллерВыдачи
    --> ИнтерфейсЛаборанта:
    СведенияВыдачи


Лаборант
    -> ИнтерфейсЛаборанта:
    ввестиДанныеВыдачи(
    комплектность,
    состояние
    )

ИнтерфейсЛаборанта
    -> КонтроллерВыдачи:
    оформитьВыдачу(
    заявкаId,
    комплектность,
    состояние
    )


КонтроллерВыдачи
    -> ХранилищеЗаявок:
    найти(заявкаId)

ХранилищеЗаявок
    --> КонтроллерВыдачи:
    Заявка

КонтроллерВыдачи
    -> ХранилищеОборудования:
    найти(оборудованиеId)

ХранилищеОборудования
    --> КонтроллерВыдачи:
    Оборудование


alt Успешная выдача

    КонтроллерВыдачи
        -> Пользователь:
        проверитьАктивность()

    Пользователь
        --> КонтроллерВыдачи:
        true

    КонтроллерВыдачи
        -> Оборудование:
        доступноДляВыдачи()

    Оборудование
        --> КонтроллерВыдачи:
        true

    КонтроллерВыдачи
        -> Выдача:
        оформить(
        дата,
        комплектность,
        состояние
        )

    КонтроллерВыдачи
        -> Оборудование:
        изменитьСтатус(Выдано)

    КонтроллерВыдачи
        -> Заявка:
        завершить()

    КонтроллерВыдачи
        -> ХранилищеЗаявок:
        сохранить(заявка)

    КонтроллерВыдачи
        -> ХранилищеОборудования:
        сохранить(оборудование)

    КонтроллерВыдачи
        --> ИнтерфейсЛаборанта:
        РезультатВыдачи(успех)

    ИнтерфейсЛаборанта
        --> Лаборант:
        показатьРезультат(успех)

else Отказ в выдаче

    КонтроллерВыдачи
        --> ИнтерфейсЛаборанта:
        РезультатВыдачи(отказ, причина)

    ИнтерфейсЛаборанта
        --> Лаборант:
        показатьРезультат(отказ)

end

@enduml