@startuml
'https://plantuml.com/sequence-diagram
title User Story 7: As Administrator, I want to create a new project typology

actor Admin as "Admin"

autonumber

Admin -> ": CreateProjectTypologyUI" ++: Starts Project Typology creation
Admin <-- ": CreateProjectTypologyUI" --: Requests data (description,fixed cost, materials)
Admin -> ": CreateProjectTypologyUI" ++: Input requested data
": CreateProjectTypologyUI" --> "Admin" --: Shows new Project Typology and requests confirmation
"Admin" -> ": CreateProjectTypologyUI" ++: Confirms new Project Typology
": CreateProjectTypologyUI" -> ": CreateProjectTypologyController" ++: createTypology(description,fixedCost,materials)
": CreateProjectTypologyController" -> ": Organization" ++: getProjectTypologyContainer()
": Organization" --> ": CreateProjectTypologyController" --: ProjectTypologyContainer
": CreateProjectTypologyController" -> ": ProjectTypologyContainer" ++: createTypology(description,fixedCost,materials)
": ProjectTypologyContainer" -> ": ProjectTypologyContainer": isNotDuplicate(description)
": ProjectTypologyContainer" --> "newTypology : ProjectTypology" **: newTypology = create(description,fixedCost,materials)
": ProjectTypologyContainer" -> ": ProjectTypologyContainer": saveTypology(newTypology)
": ProjectTypologyContainer" --> ": CreateProjectTypologyController" --: true
": CreateProjectTypologyController" --> ": CreateProjectTypologyUI" --: true
": CreateProjectTypologyUI" --> "Admin" --: Informs successful operation



@enduml


@startuml
Admin -> ":CreateProjectTypologyUI" ++: Starts Project Typology creation
Admin <-- ":CreateProjectTypologyUI" --: Requests data (description,fixed cost, materials)
Admin -> ":CreateProjectTypologyUI" ++: Input requested data
":CreateProjectTypologyUI" -> ":CreateProjectTypologyController" ++: createTypology(typologyName,fixedCost,materials)
":CreateProjectTypologyController" -> ":Organization" ++: getProjectTypologyContainer()
":Organization" --> ":CreateProjectTypologyController" --: ProjectTypologyContainer
":CreateProjectTypologyController" -> ":ProjectTypologyContainer" ++: createTypology(typologyName,fixedCost,materials)
":ProjectTypologyContainer" --> "newTypology : ProjectTypology" **: newTypology = create(typologyName,fixedCost,materials)

":ProjectTypologyContainer" --> ":ProjectTypologyMapper"++: createDTO(newTypology)
":ProjectTypologyMapper" --> "newTypologyDTO : ProjectTypologyDTO" **: create(newTypology)
":ProjectTypologyMapper" --> ":ProjectTypologyContainer" --: newTypologyDTO
":ProjectTypologyContainer" --> ":CreateProjectTypologyController" --: newTypologyDTO
":CreateProjectTypologyController" --> ":CreateProjectTypologyUI" --: newTypologyDTO
":CreateProjectTypologyUI" --> "Admin" --: Shows new Project Typology and requests confirmation
"Admin" -> ":CreateProjectTypologyUI" ++: Confirms new Project Typology
":CreateProjectTypologyUI" -> ":CreateProjectTypologyController" ++: saveTypology(newTypologyDTO)
":CreateProjectTypologyController" -> ":Organization" ++: getProjectTypologyContainer()
":Organization" --> ":CreateProjectTypologyController" --: ProjectTypologyContainer
":CreateProjectTypologyController" -> ":ProjectTypologyContainer" ++: saveTypology(newTypologyDTO)
":ProjectTypologyContainer" -> ":ProjectTypologyContainer": isNotDuplicate(newTypology)
":ProjectTypologyContainer" -> ":ProjectTypologyContainer": addTypology(newTypology)
":ProjectTypologyContainer" --> ":CreateProjectTypologyController" --: true
":CreateProjectTypologyController" --> ":CreateProjectTypologyUI" --: true
":CreateProjectTypologyUI" --> "Admin" --: Informs successful operation


@enduml