@startuml
skinparam classAttributeIconSize 0

class SeriarAnuncioUI{
}

class SeriarAnuncioController{
 +List<Anuncio> getListaAnuncios()
 +novoProcessoSeriacao(refTarefa, dataHora)
 +List<Colaborador> getListaColaboradores()
 +addColaboradorParticipante(emailColabP)
 +List<Candidatura> getListaCandidaturas()
 +novaClassificacao(emailCandi, lugar)
 +registaProcessoSeriacao()
}

class AplicacaoPOT {
  +AplicacaoPOT getInstance()
  +SessaoUtilizador getSessaoAtual()
}

class SessaoUtilizador{
  +String getEmailUtilizador()
}

class Plataforma{
  -String designacao
  +RegistoAnuncios getRegistoAnuncios()
  +RegistoOrganizacoes getRegistoOrganizacoes()
}

class RegistoAnuncios{
  +List<Anuncio> getListaAnunciosByEmailUtilizador()
}

class Anuncio{
  -Date inicioPeriodoPublicitacao
  -Date fimPeriodoPublicitacao
  -Date inicioPeriodoApresentacaoCandidaturas
  -Date fimPeriodoApresentacaoCandidaturas
  -Date inicioPeriodoSeriacao
  -Date fimPeriodoSeriacao
  -String tipoRegimento
  +ProcessoSeriacao novoProcessoSeriacao(dataHora)
  +ListaCandidaturas getListaCandidaturas()
  +registarProcessoSeriacao(processoS)
  +validaProcessoSeriacao(processoS)
  +addProcessoSeriacao(processoS)
}

class RegistoOrganizacoes{
  +Organizacao getOrganizacaoByEmailUtilizador(email)
}

class Organizacao{
  -String nome
  -String NIF
  -String website
  -String telefone
  -String email
  +List<Colaborador> getListaColaboradores()
  +Colaborador getColaboradorByEmailUtilizador(email)
}

class ProcessoSeriacao{
  -DateTime dataHora
  +ProcessoSeriacao(dataHora)
  +addColaboradorParticipante(colabP)
  +Classificacao novaClassificacao(candi, lugar)
  +registarClassificacao(classi)
  +validarClassificacao(classi)
  +addClassificacao(classi)
}

class ListaCandidaturas{
  +List<Candidatura> getListaCandidaturas()
  +getCandidaturaByEmailUtilizador(emailCandi)
}

class Classificacao{
  -Integer lugar
  +Classificacao(candi, lugar)
}

class Candidatura{
  -Double valorPretendido
  -Integer diasNecessarios
  -String textoApresentacao
}

class ListaTarefas{
  +getTarefaByReferencia(refTarefa)
}

class Tarefa{
  -String referencia
  -String designcao
  -String descInformal
  -String descTecnica
  -Integer duracaoEst
  -Double custoEst
}

SeriarAnuncioUI ..> SeriarAnuncioController

SeriarAnuncioController ..> AplicacaoPOT
SeriarAnuncioController ..> SessaoUtilizador
SeriarAnuncioController ..> Plataforma
SeriarAnuncioController ..> RegistoAnuncios
SeriarAnuncioController ..> Anuncio
SeriarAnuncioController ..> RegistoOrganizacoes
SeriarAnuncioController ..> Organizacao
SeriarAnuncioController ..> ProcessoSeriacao
SeriarAnuncioController ..> ListaCandidaturas
SeriarAnuncioController ..> ListaTarefas

Plataforma "1" ..> "1" RegistoOrganizacoes : possui >
Plataforma "1" ..> "1" RegistoAnuncios : possui >

Organizacao "1" ..> "1" ListaTarefas: possui >

ListaTarefas "1" ..> "*" Tarefa: tem listada >

RegistoOrganizacoes "1" ..> "*" Organizacao: tem registada >

RegistoAnuncios "1" ..> "*" Anuncio : tem registado >

Anuncio "1" ..> "1" ListaCandidaturas : possui >
Anuncio "1" --> "1" ProcessoSeriacao: tem >

ListaCandidaturas "1" ..> "*" Candidatura : tem listada >


Classificacao "1" --> "1" Candidatura: referente a

ProcessoSeriacao "1" --> "*" Classificacao: tem >

Tarefa "1" --> "1" Anuncio : origina


@enduml
