Skip to content

Commit c245feb

Browse files
author
Andre Turner
committed
engagement workflow schema and engagement schema revisions
1 parent a89b623 commit c245feb

File tree

2 files changed

+75
-25
lines changed

2 files changed

+75
-25
lines changed

dbschema/engagement-workflow.esdl

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
module Engagement {
2+
type WorkflowEvent extending ContextAware {
3+
required engagement: default::Engagement {
4+
readonly := true;
5+
on target delete delete source;
6+
};
7+
required who: default::Actor {
8+
readonly := true;
9+
default := global default::currentActor;
10+
};
11+
required at: datetime {
12+
readonly := true;
13+
default := datetime_of_statement();
14+
};
15+
transitionKey: uuid {
16+
readonly := true;
17+
};
18+
required to: Status {
19+
readonly := true;
20+
};
21+
notes: default::RichText {
22+
readonly := true;
23+
};
24+
25+
trigger setEngagementStatus after insert for all do (
26+
update default::Engagement
27+
filter default::Engagement in __new__.engagement
28+
set {
29+
status := default::Engagement.latestWorkflowEvent.to ?? Engagement::Status.InDevelopment
30+
}
31+
);
32+
trigger refreshEngagementStatus after delete for all do (
33+
update default::Engagement
34+
filter default::Engagement in __old__.engagement
35+
set {
36+
status := default::Engagement.latestWorkflowEvent.to ?? Engagement::Status.InDevelopment
37+
}
38+
);
39+
}
40+
41+
scalar type Status extending enum<
42+
InDevelopment,
43+
DidNotDevelop,
44+
Rejected,
45+
46+
Active,
47+
48+
DiscussingTermination,
49+
DiscussingReactivation,
50+
DiscussingChangeToPlan,
51+
DiscussingSuspension,
52+
53+
FinalizingCompletion,
54+
ActiveChangedPlan,
55+
Suspended,
56+
57+
Terminated,
58+
Completed,
59+
60+
# deprecated / legacy
61+
Converted,
62+
Unapproved,
63+
Transferred,
64+
NotRenewed,
65+
>;
66+
}

dbschema/engagement.esdl

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@ module default {
33
required status: Engagement::Status {
44
default := Engagement::Status.InDevelopment;
55
}
6+
latestWorkflowEvent := (select .workflowEvents order by .at desc limit 1);
7+
workflowEvents := .<engagement[is Engagement::WorkflowEvent];
8+
trigger assertMatchingLatestWorkflowEvent after insert, update for each do (
9+
assert(
10+
__new__.latestWorkflowEvent.to ?= __new__.status,
11+
or (not exists __new__.latestWorkflowEvent and __new__.status = Engagement::Status.InDevelopment),
12+
message := "Engagement status must match the latest workflow event"
13+
)
14+
);
615
statusModifiedAt: datetime {
716
rewrite update using (datetime_of_statement() if .status != __old__.status else .statusModifiedAt);
817
}
@@ -141,31 +150,6 @@ module default {
141150
}
142151

143152
module Engagement {
144-
scalar type Status extending enum<
145-
InDevelopment,
146-
DidNotDevelop,
147-
Rejected,
148-
149-
Active,
150-
151-
DiscussingTermination,
152-
DiscussingReactivation,
153-
DiscussingChangeToPlan,
154-
DiscussingSuspension,
155-
156-
FinalizingCompletion,
157-
ActiveChangedPlan,
158-
Suspended,
159-
160-
Terminated,
161-
Completed,
162-
163-
# deprecated / legacy
164-
Converted,
165-
Unapproved,
166-
Transferred,
167-
NotRenewed,
168-
>;
169153

170154
scalar type InternPosition extending enum<
171155
ConsultantInTraining,

0 commit comments

Comments
 (0)