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


@startuml

skinparam classAttributeIconSize 0

class Пользователь <<entity>> {
    - id: Integer
    - ФИО: String
    - логин: String
    - роль: РольПользователя
    - активен: Boolean

    + проверитьАктивность(): Boolean
}

class КатегорияОборудования <<entity>> {
    - id: Integer
    - название: String
    - описание: String
}

class Оборудование <<entity>> {
    - id: Integer
    - инвентарныйНомер: String
    - название: String
    - статус: СтатусОборудования
    - состояние: СостояниеОборудования

    + доступноДляВыдачи(): Boolean
    + изменитьСтатус(статус: СтатусОборудования): void
}

class Заявка <<entity>> {
    - id: Integer
    - цель: String
    - датаПолучения: Date
    - плановаяДатаВозврата: Date
    - статус: СтатусЗаявки

    + проверитьДаты(): Boolean
    + действительна(текущаяДата: Date): Boolean
    + завершить(): void
}

class Выдача <<entity>> {
    - id: Integer
    - датаВыдачи: Date
    - плановаяДатаВозврата: Date
    - датаВозврата: Date
    - комплектность: String
    - состояниеПриВыдаче: СостояниеОборудования
    - состояниеПриВозврате: СостояниеОборудования

    + оформить(
        дата: Date,
        комплектность: String,
        состояние: СостояниеОборудования
      ): void

    + оформитьВозврат(
        дата: Date,
        состояние: СостояниеОборудования
      ): void

    + просрочена(текущаяДата: Date): Boolean
}

class Отчёт <<technical>> {
    - периодНачало: Date
    - периодКонец: Date
    - фильтрКатегория: Integer
    - фильтрСтатус: String
}

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

    + ввестиДанныеВыдачи(
        комплектность: String,
        состояние: СостояниеОборудования
      ): void

    + показатьРезультат(
        результат: РезультатВыдачи
      ): void
}

class КонтроллерВыдачи <<control>> {
    + получитьСведения(
        заявкаId: Integer
      ): СведенияВыдачи

    + проверитьВозможностьВыдачи(
        заявкаId: Integer
      ): РезультатПроверки

    + оформитьВыдачу(
        заявкаId: Integer,
        комплектность: String,
        состояние: СостояниеОборудования
      ): РезультатВыдачи
}

class ХранилищеЗаявок <<technical>> {
    + найти(заявкаId: Integer): Заявка
    + сохранить(заявка: Заявка): void
}

class ХранилищеОборудования <<technical>> {
    + найти(оборудованиеId: Integer): Оборудование
    + сохранить(оборудование: Оборудование): void
}


Пользователь "1" -- "0..*" Заявка : подаёт

КатегорияОборудования "1" o-- "0..*" Оборудование : содержит

Оборудование "1" -- "0..*" Заявка : относится

Заявка "1" *-- "0..1" Выдача : основание

Оборудование "1" -- "0..*" Выдача : история

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

КонтроллерВыдачи ..> ХранилищеЗаявок : использует

КонтроллерВыдачи ..> ХранилищеОборудования : использует

@enduml