@startuml
'autonumber

actor "Marketing Director" as User
participant ":CreatePlanView" as System
participant ":CreatePlanController" as Controller
participant "PlanFactory" as Factory
participant "PlanRepository" as Repository
participant "PlanService" as PlanService
participant "Person" as Person
participant "Plan" as Plan

activate User

User -> System: Requests to create a new plan
System -> Controller: createPlan()
Controller -> Person: getPlanContainer()
Person --> Controller: container
Controller -> Factory: createPlanContainer()
Factory --> Controller: planContainer
Controller --> System: Ok
System --> User: Data request (planId, name, description, monthlyFee, annualFee, nminutes, ndevices, ncollections)

User -> System: Enters the requested data
System -> Controller: setData(planId, name, description, monthlyFee, annualFee, nminutes, ndevices, ncollections)
Controller -> Plan: setId()
Plan --> Controller: Ok
Controller -> Plan: setName(name)
Plan --> Controller: Ok
Controller -> Plan: setDescription(description)
Plan --> Controller: Ok
Controller -> Plan: setMonthlyFee(monthlyFee)
Plan --> Controller: Ok
Controller -> Plan: setAnnualFee(annualFee)
Plan --> Controller: Ok
Controller -> Plan: setNminutes(nminutes)
Plan --> Controller: Ok
Controller -> Plan: setNdevices(ndevices)
Plan --> Controller: Ok
Controller -> Plan: setNcollections(ncollections)
Plan --> Controller: Ok
Controller -> Controller: validate(plan)
Controller --> System: Validation result

System -> User: Displays all data and requests confirmation

User -> System: Confirms the data
System -> Controller: saveCreatedPlan()
Controller -> Repository: saveCreatedPlan()
Repository -> PlanService: save(plan)
PlanService -> Repository: validate(plan)
Repository --> PlanService: Validation result
PlanService -> PlanService: save(plan)
PlanService --> Repository: Result
Repository --> Controller: Result
Controller --> System: Ok
System --> User: Informs operation success
@enduml
