@startuml
'skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false
skinparam linetype polyline
'skinparam linetype orto

skinparam classAttributeIconSize 0

'left to right direction

class ApplicationSession
{
    + static getInstance()
    + getCurrentSession()
}

class UserSession
{
    + getUserEmail()
}

class HRM {
    - name
    - email
    - permissions
}
class Organization {
    - String name
    - String vatNumber
    - String website
    - String phone
    - String email

    - addJob(job)
    - validateJob(job)
    + anyEmployeeHasEmail(email)
    + Organization(name, vatNumber, webSite, phone, email, postalAddress, manager)
    + createJob(jobName, workplace, entryTime, exitTime, Salary)
    - getEmployeeByEmail(email)

'  +saveJob(job)
}
class OrganizationRepository {
    + getOrganizationByEmployeeEmail(email)
}
class Job {
    - String jobName
    - String workplace
    - LocalTime entryTime
    - LocalTime exitTime
    - Double salary

    + Job(jobName, workplace,\nentryTime, exitTime,\nsalary, createdBy)
}

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

class CreateJobController {
    + CreateJobController(organizationRepository)
    + createJob(userEmail, jobName, \nworkplace, entryTime, exitTime, salary)
    - getEmployeeFromSession()
}

note right of CreateJobController
    - userEmail is obtained
    from the user session
    - categoryDescription
    is retrieved from selected data
end note

class CreateJobUI {
}

Repositories -> Repositories : instance
ApplicationSession -> ApplicationSession : instance

CreateJobUI .> CreateJobController

CreateJobController .> Repositories : repositories

CreateJobController ..> OrganizationRepository : organizationRepository

Repositories --> "1" OrganizationRepository

OrganizationRepository --> "*" Organization
ApplicationSession --> "1" UserSession : userSession

CreateJobController ..> "1" Organization : organization
CreateJobController ..> ApplicationSession
CreateJobController ..> UserSession
Organization "1" --> "*" Job : jobs
HRM <- Job : createdBy

Organization --> "*" HRM : employs

@enduml