Really, this should be it, for the passing income.
[capital-apms-progress.git] / workflow / create-all-tasks.p
blob7fe2095236f10b91e7c9ec68a4412ae3e0772fae
1 &ANALYZE-SUSPEND _VERSION-NUMBER UIB_v8r12
2 &ANALYZE-RESUME
3 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure
4 /*--------------------------------------------------------------------------
5 File : workflow/create-all-tasks.p
6 Purpose : Create all tasks for system events if they don't already exist
8 Syntax :
10 Description :
12 Author(s) :
13 Created :
14 Notes :
15 ------------------------------------------------------------------------*/
17 DEF INPUT PARAMETER process-options AS CHAR NO-UNDO.
19 DEF VAR w1 AS WIDGET-HANDLE NO-UNDO.
20 DEF VAR prev-window AS WIDGET-HANDLE NO-UNDO.
22 CREATE WINDOW w1
23 ASSIGN TITLE = "Creating System Events"
24 WIDTH-CHARS = 80
25 HEIGHT-CHARS = 20
26 STATUS-AREA = no
27 MESSAGE-AREA = no.
29 prev-window = CURRENT-WINDOW.
30 CURRENT-WINDOW = w1.
32 DEF VAR event-types AS CHAR NO-UNDO INITIAL "".
34 /* _UIB-CODE-BLOCK-END */
35 &ANALYZE-RESUME
38 &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
40 /* ******************** Preprocessor Definitions ******************** */
42 &Scoped-define PROCEDURE-TYPE Procedure
46 /* _UIB-PREPROCESSOR-BLOCK-END */
47 &ANALYZE-RESUME
51 /* *********************** Procedure Settings ************************ */
53 &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
54 /* Settings for THIS-PROCEDURE
55 Type: Procedure
56 Allow:
57 Frames: 0
58 Add Fields to: Neither
59 Other Settings: CODE-ONLY COMPILE
61 &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
63 /* ************************* Create Window ************************** */
65 &ANALYZE-SUSPEND _CREATE-WINDOW
66 /* DESIGN Window definition (used by the UIB)
67 CREATE WINDOW Procedure ASSIGN
68 HEIGHT = .5
69 WIDTH = 42.43.
70 /* END WINDOW DEFINITION */
72 &ANALYZE-RESUME
76 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB Procedure
77 /* ************************* Included-Libraries *********************** */
79 {inc/date.i}
81 /* _UIB-CODE-BLOCK-END */
82 &ANALYZE-RESUME
86 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
89 /* *************************** Main Block *************************** */
91 RUN parse-parameters.
92 RUN build-system-events.
94 /* clean up and close window */
95 CURRENT-WINDOW = prev-window.
96 DELETE WIDGET w1.
98 /* _UIB-CODE-BLOCK-END */
99 &ANALYZE-RESUME
102 /* ********************** Internal Procedures *********************** */
104 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE build-lease-events Procedure
105 PROCEDURE build-lease-events :
106 /*------------------------------------------------------------------------------
107 Purpose:
108 ------------------------------------------------------------------------------*/
109 DEF VAR due-date AS DATE NO-UNDO.
110 DEF VAR task-no AS INT NO-UNDO.
111 DEF VAR out-results AS CHAR NO-UNDO.
113 FOR EACH TenancyLease NO-LOCK:
114 FOR EACH RentReview OF TenancyLease NO-LOCK:
115 due-date = RentReview.DateDue.
116 IF due-date = ? THEN NEXT.
117 FIND FIRST FlowTask WHERE FlowTask.DueDate = RentReview.DateDue
118 AND FlowTask.FlowTaskType = "RR"
119 AND FlowTask.EntityType = "T"
120 AND FlowTask.EntityCode = TenancyLease.TenantCode
121 AND FlowTask.ActivityStatus <> "DONE"
122 NO-LOCK NO-ERROR.
123 IF RentReview.ReviewStatus = "DONE" AND AVAILABLE(FlowTask) THEN DO:
124 /* mark any existing events as completed */
125 task-no = FlowTask.FlowTaskNo.
126 RUN workflow/update-task.p( INPUT-OUTPUT due-date, INPUT-OUTPUT task-no,
127 "TaskDone", "", OUTPUT out-results ).
128 END.
129 ELSE IF TenancyLease.LeaseStatus <> "PAST" AND NOT AVAILABLE(FlowTask) THEN DO:
130 /* make sure this event is set up as a FlowTask record */
131 RUN workflow/update-task.p( INPUT-OUTPUT due-date, INPUT-OUTPUT task-no,
132 "NewTask", "T," + STRING(TenancyLease.TenantCode) + ",RR",
133 OUTPUT out-results ).
134 END.
135 END. /* each rent review of lease */
137 due-date = TenancyLease.LeaseEndDate.
138 IF due-date = ? THEN NEXT.
139 FIND FIRST FlowTask WHERE FlowTask.DueDate = due-date
140 AND FlowTask.FlowTaskType = "LE"
141 AND FlowTask.EntityType = "T"
142 AND FlowTask.EntityCode = TenancyLease.TenantCode
143 AND FlowTask.ActivityStatus <> "DONE"
144 NO-LOCK NO-ERROR.
145 IF TenancyLease.LeaseStatus = "PAST" AND AVAILABLE(FlowTask) THEN DO:
146 task-no = FlowTask.FlowTaskNo.
147 RUN workflow/update-task.p( INPUT-OUTPUT due-date, INPUT-OUTPUT task-no,
148 "TaskDone", "", OUTPUT out-results ).
149 END.
150 ELSE IF TenancyLease.LeaseStatus <> "PAST" AND NOT AVAILABLE(FlowTask) THEN DO:
151 /* make sure this event is set up as a FlowTask record */
152 RUN workflow/update-task.p( INPUT-OUTPUT due-date, INPUT-OUTPUT task-no,
153 "NewTask", "T," + STRING(TenancyLease.TenantCode) + ",LE",
154 OUTPUT out-results ).
155 END.
156 END.
158 END PROCEDURE.
160 /* _UIB-CODE-BLOCK-END */
161 &ANALYZE-RESUME
164 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE build-property-events Procedure
165 PROCEDURE build-property-events :
166 /*------------------------------------------------------------------------------
167 Purpose:
168 ------------------------------------------------------------------------------*/
169 DEF VAR due-date AS DATE NO-UNDO.
170 DEF VAR task-no AS INT NO-UNDO.
171 DEF VAR out-results AS CHAR NO-UNDO.
173 FOR EACH Property NO-LOCK:
174 FOR EACH FlowTask WHERE FlowTask.EntityType = "P"
175 AND FlowTask.EntityCode = Property.PropertyCode
176 NO-LOCK:
177 IF (FlowTask.FlowTaskType = "WOF" AND FlowTask.DueDate < Property.WofExpiryDate)
178 OR NOT(Property.Active) THEN DO:
179 task-no = FlowTask.FlowTaskNo.
180 due-date = FlowTask.DueDate.
181 RUN workflow/update-task.p( INPUT-OUTPUT due-date, INPUT-OUTPUT task-no,
182 "TaskDone", "", OUTPUT out-results ).
183 END.
184 END.
186 IF Property.Active AND Property.WofExpiryDate <> ? THEN DO:
187 due-date = Property.WofExpiryDate.
188 FIND FlowTask WHERE FlowTask.EntityType = "P"
189 AND FlowTask.EntityCode = Property.PropertyCode
190 AND FlowTask.FlowTaskType = "WOF"
191 AND FlowTask.DueDate = due-date NO-LOCK NO-ERROR.
192 IF NOT AVAILABLE(FlowTask) THEN DO:
193 /* make sure this event is set up as a FlowTask record */
194 RUN workflow/update-task.p( INPUT-OUTPUT due-date, INPUT-OUTPUT task-no,
195 "NewTask", "P," + STRING(Property.PropertyCode) + ",WOF",
196 OUTPUT out-results ).
197 END.
198 END.
200 IF Property.Active AND Property.ReconciliationDue <> ? THEN DO:
201 due-date = Property.ReconciliationDue.
202 FIND FlowTask WHERE FlowTask.EntityType = "P"
203 AND FlowTask.EntityCode = Property.PropertyCode
204 AND FlowTask.FlowTaskType = "OB"
205 AND FlowTask.DueDate = due-date NO-LOCK NO-ERROR.
206 IF NOT AVAILABLE(FlowTask) THEN
207 FIND FlowTask WHERE FlowTask.EntityType = "P"
208 AND FlowTask.EntityCode = Property.PropertyCode
209 AND FlowTask.FlowTaskType = "OB"
210 AND FlowTask.DueDate = first-of-month(due-date) NO-LOCK NO-ERROR.
211 IF NOT AVAILABLE(FlowTask) THEN DO:
212 /* make sure this event is set up as a FlowTask record */
213 RUN workflow/update-task.p( INPUT-OUTPUT due-date, INPUT-OUTPUT task-no,
214 "NewTask", "P," + STRING(Property.PropertyCode) + ",OB",
215 OUTPUT out-results ).
216 END.
217 END.
219 END.
221 END PROCEDURE.
223 /* _UIB-CODE-BLOCK-END */
224 &ANALYZE-RESUME
227 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE build-system-events Procedure
228 PROCEDURE build-system-events :
229 /*------------------------------------------------------------------------------
230 Purpose:
231 ------------------------------------------------------------------------------*/
232 IF event-types = "" OR CAN-DO( event-types, "Lease" ) THEN RUN build-lease-events.
233 IF event-types = "" OR CAN-DO( event-types, "Property" ) THEN RUN build-property-events.
235 MESSAGE "System Event Update Completed".
237 END PROCEDURE.
239 /* _UIB-CODE-BLOCK-END */
240 &ANALYZE-RESUME
243 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE parse-parameters Procedure
244 PROCEDURE parse-parameters :
245 /*------------------------------------------------------------------------------
246 Purpose:
247 ------------------------------------------------------------------------------*/
248 DEF VAR token AS CHAR NO-UNDO.
249 DEF VAR i AS INT NO-UNDO.
250 DEF VAR n AS INT NO-UNDO.
252 {inc/showopts.i "process-options"}
254 n = NUM-ENTRIES( process-options, "~n" ).
255 DO i = 1 TO n:
256 token = ENTRY( i, process-options, "~n" ).
258 CASE ENTRY( 1, token ):
259 WHEN "EventTypes" THEN event-types = SUBSTRING( token, INDEX(token, ",") + 1).
260 END CASE.
262 END.
264 END PROCEDURE.
266 /* _UIB-CODE-BLOCK-END */
267 &ANALYZE-RESUME