Skip to content

Encapsulate application state transitions logic in the Application model #233

@mrogaski

Description

@mrogaski

As noted in views.ApplicationStatusView, the logic for validating and applying state transitions should be encapsulated and direct updates to the status should be prevented.

An example why this is necessary is that models.get_legal_state_changes doesn't appear to allow applications to enter the ASSIGNMENT_PENDING or ASSIGNMENT states.

stateDiagram-v2
    [*] --> APPLIED
    APPLIED --> INVITATION_PENDING
    APPLIED --> INVITED
    APPLIED --> REJECTION_PENDING
    APPLIED --> REJECTED
    APPLIED --> WITHDRAWN
    INVITATION_PENDING --> APPLIED
    INVITATION_PENDING --> INVITED
    INVITATION_PENDING --> CONFIRMED
    INVITATION_PENDING --> WITHDRAWN
    INVITED --> CONFIRMED
    INVITED --> DECLINED
    INVITED --> WITHDRAWN
    REJECTION_PENDING --> APPLIED
    REJECTION_PENDING --> REJECTED
    REJECTION_PENDING --> WITHDRAWN
    ASSIGNMENT_PENDING --> ASSIGNED
    ASSIGNMENT_PENDING --> WITHDRAWN
    ASSIGNED --> WITHDRAWN
    CONFIRMED --> WITHDRAWN

Loading

Enforcing the use of a setter method on the Application model should fix this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions