1 package hudsonfog.voc.model;
2
3 import com.fogx.webdav.DavResource;
4 import com.fogx.webdav.DavClass;
5 import com.fogx.webdav.DavBean;
6 import com.fogx.webdav.DavProperty;
7 import static com.fogx.webdav.DavProperty.*;
8 import com.fogx.webdav.packages.DavBeanPackage;
9 import com.fogx.webdav.util.DavResourceSupport;
10 import com.fogx.webdav.util.UrlUtil;
11 import java.util.Date;
12 import java.util.Map;
13 import java.util.HashMap;
14 import java.util.List;
15 import java.util.Collections;
16 import java.util.Arrays;
17
18 import hudsonfog.voc.system.changeHistory.*;
19 import hudsonfog.voc.model.crm.*;
20 import hudsonfog.voc.model.company.*;
21 import hudsonfog.voc.system.primitiveTypes.*;
22 import hudsonfog.voc.model.recurrence.*;
23 import hudsonfog.voc.model.portal.*;
24 import hudsonfog.voc.model.work.*;
25 import hudsonfog.voc.system.parse.*;
26 import hudsonfog.voc.model.top.*;
27 import hudsonfog.voc.model.workflow.*;
28 import hudsonfog.voc.system.XMLSchema.*;
29
30 import hudsonfog.voc.system.fog.*;
31
32
33 public abstract class workflow {
34
35
38 @DavClass._label("Message")
39 public static class IncomingWorkflowMessage extends hudsonfog.voc.system.parse.IncomingMessage implements Annotated {
40 @_displayNameElm
41 @k@s public String subject;
42 @k@s public ComplexDate dateReceived;
43 @_backLink("forum")
44 @_displayInline
45 @c public Annotation[] comments;
46 @c public Annotation lastComment;
47 @_backLink("forResource")
48 @_displayInline
49 @c public ChatHistoryFile[] chatHistory;
50 @_dateFormat("~MMM-dd, yyyy HH:mm")
51 @_readOnly
52 @_icon("icons/classes/Comment.gif")
53 public ComplexDate lastCommentTime = formula("lastComment.submitTime");
54 @_backLink("message")
55 public TimeEntryPerMessage[] timeEntries;
56 @s public Contact sender;
57 @s public Contact to;
58 }
59
60
63 @DavClass._label("Email")
64 public static class IncomingMailMessage extends hudsonfog.voc.system.parse.IncomingMessage {
65 @_displayNameElm
66 @k@s public String subject;
67 @k@s public ComplexDate dateReceived;
68 @_maxSize(200)
69 public String messageId; @_maxSize(60000)
71 public longString messageHeaders; }
73
74
77 @DavClass._label("Auto-Registration")
78 public static class AutoRegistrationAlert extends IncomingWorkflowMessage {
79 @_displayNameElm
80 @k@s public String subject;
81 @k@s public ComplexDate dateReceived;
82 }
83
84
87 @DavClass._label("Message")
88 public static class CollaborationMessage extends IncomingWorkflowMessage {
89 @_displayNameElm
90 @k@s public String subject;
91 @k@s public ComplexDate dateReceived;
92 @_subPropertyOf("associatedWith")
93 @s public CollaborationPoint forum; }
95
96
99 public static class OfflineMessage extends IncomingWorkflowMessage {
100 @_displayNameElm
101 @k@s public String subject;
102 @k@s public ComplexDate dateReceived;
103 }
104
105 @DavClass._largeIcon("icons/classes/Subscription-large.gif")
106 @DavClass._icon("icons/classes/Subscription.gif")
107 public static class SubscriptionInvitation extends CollaborationMessage {
108 @_displayNameElm
109 @k@s public String subject;
110 @k@s public ComplexDate dateReceived;
111 public dateTime dateAccepted = writeJS("setSubscribed()");
112 public MySubscription subscription;
113 public Boolean accepted;
114 @_backLink("message")
115 @h@s public TimeEntryPerMessage[] timeEntries;
116 }
117
118 @DavClass._largeIcon("icons/classes/SubscriptionAlert-large.gif")
119 @DavClass._icon("icons/classes/SubscriptionAlert.gif")
120 public static class SubscriptionAlert extends CollaborationMessage {
121 @_displayNameElm
122 @k@s public String subject;
123 @k@s public ComplexDate dateReceived;
124 public MySubscription subscription;
125 }
126
127 @DavClass._largeIcon("icons/classes/CommentAlert-large.gif")
128 @DavClass._icon("icons/classes/CommentAlert.gif")
129 public static class CommentAlert extends CollaborationMessage {
130 @_displayNameElm
131 @k@s public String subject;
132 @k@s public ComplexDate dateReceived;
133 public Note comment;
134 }
135
136 public static class MeetingAlert extends ReminderAlert {
137 @k@s public String subject = writeJS("formatDate() + ' meeting ' + meeting.title");
138 @k@s public ComplexDate dateReceived;
139 @k@s public Contact to;
140 @_subPropertyOf("forum")
141 @s public Meeting meeting;
142 }
143
144 @DavClass._largeIcon("icons/classes/New-large.gif")
145 @DavClass._icon("icons/classes/New.gif")
146 public static class NewResourceAlert extends CollaborationMessage {
147 @_displayNameElm
148 @k@s public String subject;
149 @k@s public ComplexDate dateReceived;
150 }
151
152 @DavClass._largeIcon("icons/classes/ModificationAlert-large.gif")
153 @DavClass._icon("icons/classes/ModificationAlert.gif")
154 public static class ModificationAlert extends CollaborationMessage {
155 @_displayNameElm
156 @k@s public String subject;
157 @k@s public ComplexDate dateReceived;
158 public Modification modification;
159 @_icon("icons/description.gif")
160 @_displayInline
161 public String editNotes = formula("modification.editNotes");
162 }
163
164 @DavClass._largeIcon("icons/classes/ReminderAlert-large.gif")
165 @DavClass._icon("icons/classes/ReminderAlert.gif")
166 public static class ReminderAlert extends CollaborationMessage {
167 @_displayNameElm
168 @k@s public String subject = writeJS("'reminder: ' + formatDate() + ': ' + forum.subject");
169 @k@s public ComplexDate dateReceived;
170 public ScheduledItem scheduledItem;
171 public dateTime start; public dateTime end; }
174
175 @DavClass._largeIcon("icons/classes/ReminderAlert-large.gif")
176 @DavClass._icon("icons/classes/ReminderAlert.gif")
177 public static class InvitationAlert extends CollaborationMessage {
178 @_displayNameElm
179 @k@s public String subject;
180 @k@s public ComplexDate dateReceived;
181 public Boolean accepted; }
183
184
187 public static class SystemAlert extends IncomingWorkflowMessage {
188 @k public Integer seq;
189 @k@s public Contact to;
190 @s public String subject;
191 @s public ComplexDate dateReceived;
192 }
193
194 public static class AssignmentAlert extends CollaborationMessage {
195 @_displayNameElm
196 @k@s public String subject;
197 @k@s public ComplexDate dateReceived;
198 public PartyAssignment assignment;
199 public WorkEffort workEffort = formula("assignment.workEffort");
200 @_backLink("message")
201 @s public TimeEntryPerAssignmentAlert[] timeEntries;
202 }
203
204 public static class PartyResourceAlert extends CollaborationMessage {
205 @_displayNameElm
206 @k@s public String subject;
207 @k@s public ComplexDate dateReceived;
208 public PartyResource partyResource;
209 @_readOnly
210 @_subPropertyOf("forum")
211 @s public WorkEffort mainWorkEffort = writeJS("partyResource.mainWorkEffort");
212 }
213
214
220 public static class TimeEntryPerMessage extends hudsonfog.voc.model.work.TimeEntry {
221 @k@s public Integer seq;
222 @_readOnly
223 @k@s public Contact contact = writeJS("setContact()");
224 public IncomingWorkflowMessage message; }
226
227
233 public static class TimeEntryPerAssignmentAlert extends TimeEntryPerMessage {
234 @k@s public Integer seq;
235 @s public AssignmentAlert message; @k@s public Contact contact;
237 public WorkAssignment assignment = formula("message.assignment");
238 @_notifyContainer
239 public WorkEffort workEffort = formula("assignment.workEffort"); @_notifyContainer
241 public WorkEffort mainWorkEffort = formula("workEffort.mainWorkEffort"); }
243
244 @DavClass._largeIcon("icons/classes/ApprovalRequest-large.gif")
245 @DavClass._icon("icons/classes/ApprovalRequest.gif")
246 public static class ApprovalRequest extends hudsonfog.voc.model.top.Demand implements ScheduledItem {
247 @_subPropertyOf("forum")
248 @k@s public CollaborationPoint itemToApprove;
249 @_displayNameElm
250 @_subPropertyOf("synopsis")
251 @r@s public String title;
252 @k@s public ComplexDate dateSubmitted;
253 @_subPropertyOf("description")
254 @s public String notes;
255 @_backLink("request")
256 @_displayInline
257 @_extractSubscribers public Approval[] approvals; @_readOnly
260 public Boolean approved = writeJS("approved != null? approved: unconfirmedApprovals.COUNT() == 0 ? true : false"); @_readOnly
262 @_backLink("request")
263 public UnconfirmedApproval[] unconfirmedApprovals;
264 @_readOnly
265 public Integer unconfirmedApprovalCount = writeJS("unconfirmedApprovals.COUNT()");
266 @s public ComplexDate deadline; }
268
269
272 @DavClass._viewCols("request, approver, status, deadline, itemToApprove")
273 @DavClass._largeIcon("icons/classes/Approval-large.gif")
274 @DavClass._icon("icons/classes/Approval.gif")
275 public static class Approval implements ScheduledItem {
276 @k public ApprovalRequest request;
277 @k public Integer seq;
278 @r public Contact approver; @_icon("icons/Status.gif")
280 @_colorCoding("'Requested' icons/status_requested.gif; 'Approved' icons/classes/ApprovalMessage.gif; 'Rejected' icons/classes/RejectedMessage.gif; 'Returned' icons/classes/ReturnedMessage.gif; ")
281 @_onCreate
282 public ApprovalStatus status = writeJS("status ? status : 'Requested'"); @_icon("icons/deadline.gif")
284 @_cloneOf("end")
285 @c public dateTime deadline; public DavResource itemToApprove = formula("request.itemToApprove"); }
288
289 public static enum ApprovalStatus {
290 Requested, Approved, Rejected, Returned;
291 }
292
293 @DavClass._aView
294 @DavClass._avoidEditing
295 @DavClass._where("status != 'Approved'")
296 @DavClass._filterView
297 public static class UnconfirmedApproval extends Approval {
298 @h@s public ApprovalRequest request;
299 @h@s public Integer seq;
300 @h@s public Contact approver;
301 @h@s public ApprovalStatus status;
302 @h@s public dateTime deadline;
303 @h@s public DavResource itemToApprove;
304 }
305
306
309 public static class ApprovalAlert extends IncomingWorkflowMessage {
310 @_displayNameElm
311 @k@s public String subject;
312 @_subPropertyOf("to")
313 @s public Contact approver;
314 @_subPropertyOf("sender")
315 @s public Contact requestedBy;
316 @k@s public ComplexDate dateReceived;
317 @_subPropertyOf("associatedWith")
318 @s public Approval approval; public DavResource itemToApprove = formula("approval.itemToApprove"); public ApprovalRequest request = formula("approval.request"); }
322
323
328 public static interface ReceiptRequested {
329 public Integer days = null;
330 public Integer hours = null; public Integer minutes = null;
332 public Boolean received = null; public Contact recipient = null;
335 }
336
337
341 public static interface ConfirmationRequested extends ReceiptRequested {
342 public Boolean confirmed = null; }
345 }
346