File tree Expand file tree Collapse file tree 2 files changed +75
-25
lines changed Expand file tree Collapse file tree 2 files changed +75
-25
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change @@ -3,6 +3,15 @@ module default {
3
3
required status: Engagement:: Status {
4
4
default := Engagement:: Status.InDevelopment;
5
5
}
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
+ );
6
15
statusModifiedAt: datetime {
7
16
rewrite update using (datetime_of_statement () if .status != __old__ .status else .statusModifiedAt);
8
17
}
@@ -141,31 +150,6 @@ module default {
141
150
}
142
151
143
152
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
- > ;
169
153
170
154
scalar type InternPosition extending enum <
171
155
ConsultantInTraining,
You can’t perform that action at this time.
0 commit comments