'skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false
skinparam linetype polyline

skinparam classAttributeIconSize 0

class Employee {
    - name
    - email
    - position
    - phone
}

class Task {
    - String reference
    - String description
    - String informalDescription
    - String technicalDescription
    - Integer duration
    - Double cost

    + Task(reference, description,\ninformalDescription, technicalDescription,\nduration, cost, createdBy, taskCategory)
}

class TaskCategory {
    - String description

    + TaskCategory(description)
}

class Organization {
    - String name
    - String vatNumber
    - String website
    - String phone
    - String email

    + anyEmployeeHasEmail(email)
    + Organization(name, vatNumber, webSite, phone, email, postalAddress, manager)
}

class TaskCategoryRepository {
    + getTaskCategoryByDescription(description)
}

class OrganizationRepository {
    + getOrganizationByEmployeeEmail(email)
}

class Repositories {
    - Repositories()
    + getInstance() : Repositories
    + getTaskCategoryRepository()
    + getOrganizationRepository()
}

class CreateTaskController {
    + CreateTaskController(organizationRepository, taskCategoryRepository)
    + getTaskCategories()
    + createTask(userEmail, reference, description,\ninformalDescription, technicalDescription,\nduration, cost, categoryDescription)
}

note right of CreateTaskController
    - userEmail é obtido da sessão do usuário
    - categoryDescription é obtido dos dados selecionados
end note

note bottom of TaskCategoryRepository
    - usado para exibir a lista de categorias
end note

class CreateTaskUI {
}

Repositories -> Repositories : instance
CreateTaskUI .> CreateTaskController
CreateTaskController .> Repositories : repositories
Repositories -> "1" TaskCategoryRepository
CreateTaskController ..> TaskCategory
CreateTaskController ..> OrganizationRepository : organizationRepository
CreateTaskController ..> TaskCategoryRepository : TaskCategoryRepository
Repositories --> "1" OrganizationRepository
OrganizationRepository --> "*" Organization
CreateTaskController ..> "1" Organization : organization
Task "*" --> "1" TaskCategory : taskCategory
TaskCategoryRepository "1" --> "*" TaskCategory : taskCategory
Organization "1" --> "*" Task : tasks
Task --> Employee : createdBy
Organization --> "*" Employee : employs
