@startuml
autonumber

actor "Colaborador de Organização" as CDO

participant ":PublicarTarefaUI" as UI
participant ":PublicarTarefaController" as CTRL
participant "AplicacaoPOT" as POT
participant "app\n:AplicacaoPOT" as APP
participant "sessao\n:SessaoUtilizador" as SESSAO
participant ":Plataforma" as PLAT
participant "ro\n:RegistoOrganizacao" as RO
participant "rt\n:RegistoTarefa" as RT
participant "ra\n:RegistoAnuncio" as RA
participant "rtr\n:Registo TR" as RTR
participant "anu\n:Anuncio" as AN
participant "ltu\n:ListaTarefa" as LTU
participant "ltr\n:ListaTipoRegimento" as LTR



activate CDO
CDO -> UI : inicia a publicação de uma tarefa
activate UI
UI -> CTRL : ltu = getListaTarefasUtilizador()

activate CTRL
CTRL -> POT : app = getInstance()
activate POT
deactivate POT
CTRL -> APP : sessao = getSessaoAtual()
activate APP
deactivate APP
CTRL -> SESSAO : email = getEmailUtilizador()
activate SESSAO
deactivate SESSAO



CTRL -> PLAT : rt = getRegistoTarefa()
activate PLAT
deactivate PLAT

CTRL -> RT : ltByEmail = getTarefasByEmailUtilizador(email)
activate RT
deactivate RT
deactivate CTRL

UI --> CDO : mostra lista de tarefas por si criadas
deactivate UI


CDO -> UI : seleciona uma tarefa
activate UI

UI -> CTRL : novoAnuncio(refUnica)
activate CTRL

CTRL -> PLAT : ro = getRegistoOrganizacao()
activate PLAT
deactivate PLAT


CTRL -> RO : org = getOrganizacaoByEmailUtilizador(email)
activate RO
deactivate RO
CTRL -> PLAT : ra = getRegistoAnuncio()
activate PLAT
deactivate PLAT



CTRL -> RT : tar = getTarefa(refUnica,org)
activate RT
deactivate RT

CTRL -> RA : anuncio = novoAnuncio(tar)
activate RA

RA --> AN** : create(tar)
deactivate RA
deactivate CTRL
UI --> CDO : solicita os dados necessários(períodos inicial e final de: \npublicitação da tarefa; apresentação de candidaturas pelos freelancers; \n seriação e decisão de atribuição de tarefa a um freelancer)
deactivate UI


CDO -> UI : introduz os dados necessários
activate UI
UI -> CTRL : addPeriodos(pTarIn,pTarFi,\npAprIn,pAprFi,pSerIn,pSerFi)
activate CTRL
CTRL -> AN : setPer(pTarIn,pTarFi,pAprIn,pAprFi,pSerIn,pSerFi)
activate AN
deactivate AN

CTRL -> PLAT : rtr = getRegistoTipoRegimento()
activate PLAT
deactivate PLAT

CTRL -> RTR : ltrg = getTR()
activate RTR
deactivate RTR




deactivate CTRL



UI --> CDO : Mostra TR
deactivate UI


CDO -> UI : seleciona um TR
activate UI
UI -> CTRL : addTipoRegimento(trId)
activate CTRL
CTRL -> RTR : tr = getTRByID(trId)
activate RTR
deactivate RTR
CTRL -> AN : setTR(tr)
activate AN
deactivate AN
deactivate CTRL

UI --> CDO : apresenta dados e solicita confirmação
deactivate UI

CDO -> UI : confirma
activate UI
UI -> CTRL : registaAnuncio()
activate CTRL
CTRL -> RA : registaAnuncio(anuncio)
activate RA 

RA -> RA : validaAnuncio(anuncio)
RA -> RA : addAnuncio(anuncio)

UI -> CDO : informa o sucesso da operação

deactivate RA
deactivate UI
deactivate CTRL
deactivate CDO

@enduml
