/'
 ' This DSD implements the role assignments for a previously selected event.
 '/
@startuml
title demandStaff
actor Actor
participant "CatERingAppManager.eventManager:EventManager" as em
participant "CatERingAppManager.event:Event" as e
participant "assignment:Assignment" as assgn
participant "roles: List<Assignment>" as roles
participant "r:EventReceiver" as r

Actor -> em++: demandStaff(staff)
alt currentEvent == null
	em -> Actor: throw UseCaseLogicException
else !staff.isStaff()
	em -> Actor: throw UseCaseLogicException
else event.hasStaff(staff)
	em -> Actor: throw UseCaseLogicException
else
    em -> assgn **: create(staff)
    activate assgn
    assgn -> assgn: setInvolvedUser(staff)
    assgn --> em: assignment
    deactivate assgn
    
    em -> e++: addAssignment(assignment)
    e -> roles ++: add(assignment)
    deactivate roles
    deactivate e

    group for each r in receivers
    	em -> r++:notifyStaffDemanded(currentEvent, assignment)
        deactivate r
    end 

    em --> Actor --: currentEvent
end
@enduml
