33namespace ProcessMaker \Http \Controllers \Api \Actions \Cases ;
44
55use Illuminate \Support \Facades \DB ;
6- use Illuminate \Support \Facades \Schema ;
7- use ProcessMaker \Models \CaseNumber ;
8- use ProcessMaker \Models \CaseParticipated ;
6+ use ProcessMaker \Events \CaseDeleted ;
97use ProcessMaker \Models \CaseStarted ;
10- use ProcessMaker \Models \Comment ;
11- use ProcessMaker \Models \InboxRule ;
12- use ProcessMaker \Models \InboxRuleLog ;
13- use ProcessMaker \Models \Media ;
14- use ProcessMaker \Models \ProcessAbeRequestToken ;
158use ProcessMaker \Models \ProcessRequest ;
16- use ProcessMaker \Models \ProcessRequestLock ;
179use ProcessMaker \Models \ProcessRequestToken ;
18- use ProcessMaker \Models \ScheduledTask ;
1910use ProcessMaker \Models \TaskDraft ;
2011
2112class DeleteCase
2213{
14+ use DeletesCaseRecords;
15+
2316 public function __invoke (string $ caseNumber ): void
2417 {
2518 $ requestIds = $ this ->getRequestIds ($ caseNumber );
@@ -28,6 +21,7 @@ public function __invoke(string $caseNumber): void
2821 abort (404 );
2922 }
3023
24+ $ caseTitle = $ this ->getCaseTitle ($ caseNumber );
3125 $ tokenIds = $ this ->getRequestTokenIds ($ requestIds );
3226
3327 DB ::transaction (function () use ($ caseNumber , $ requestIds , $ tokenIds ) {
@@ -49,6 +43,8 @@ public function __invoke(string $caseNumber): void
4943 $ this ->deleteProcessRequests ($ requestIds );
5044 });
5145
46+ CaseDeleted::dispatch ($ caseNumber , $ caseTitle );
47+
5248 $ this ->dispatchSavedSearchRecount ();
5349 }
5450
@@ -60,6 +56,25 @@ private function getRequestIds(string $caseNumber): array
6056 ->all ();
6157 }
6258
59+ private function getCaseTitle (string $ caseNumber ): string
60+ {
61+ $ caseStarted = CaseStarted::query ()
62+ ->where ('case_number ' , $ caseNumber )
63+ ->first ();
64+
65+ if ($ caseStarted ) {
66+ return $ caseStarted ->case_title ?? "Case # {$ caseNumber }" ;
67+ } else {
68+ // If CaseStarted doesn't exist, get case title from the first ProcessRequest
69+ $ firstRequest = ProcessRequest::query ()
70+ ->where ('case_number ' , $ caseNumber )
71+ ->whereNull ('parent_request_id ' )
72+ ->first ();
73+
74+ return $ firstRequest ?->case_title ?? "Case # {$ caseNumber }" ;
75+ }
76+ }
77+
6378 private function getRequestTokenIds (array $ requestIds ): array
6479 {
6580 if ($ requestIds === []) {
@@ -84,186 +99,6 @@ private function getTaskDraftIds(array $tokenIds): array
8499 ->all ();
85100 }
86101
87- private function deleteCasesStarted (string $ caseNumber ): void
88- {
89- CaseStarted::query ()
90- ->where ('case_number ' , $ caseNumber )
91- ->delete ();
92- }
93-
94- private function deleteCasesParticipated (string $ caseNumber ): void
95- {
96- CaseParticipated::query ()
97- ->where ('case_number ' , $ caseNumber )
98- ->delete ();
99- }
100-
101- private function deleteCaseNumbers (array $ requestIds ): void
102- {
103- if ($ requestIds === []) {
104- return ;
105- }
106-
107- CaseNumber::query ()
108- ->whereIn ('process_request_id ' , $ requestIds )
109- ->delete ();
110- }
111-
112- private function deleteProcessRequests (array $ requestIds ): void
113- {
114- if ($ requestIds === []) {
115- return ;
116- }
117-
118- ProcessRequest::query ()
119- ->whereIn ('id ' , $ requestIds )
120- ->get ()
121- ->each
122- ->delete ();
123- }
124-
125- private function deleteProcessRequestTokens (array $ requestIds ): void
126- {
127- if ($ requestIds === []) {
128- return ;
129- }
130-
131- ProcessRequestToken::query ()
132- ->whereIn ('process_request_id ' , $ requestIds )
133- ->delete ();
134- }
135-
136- private function deleteProcessRequestLocks (array $ requestIds , array $ tokenIds ): void
137- {
138- ProcessRequestLock::query ()
139- ->whereIn ('process_request_id ' , $ requestIds )
140- ->delete ();
141-
142- if ($ tokenIds !== []) {
143- ProcessRequestLock::query ()
144- ->whereIn ('process_request_token_id ' , $ tokenIds )
145- ->delete ();
146- }
147- }
148-
149- private function deleteProcessAbeRequestTokens (array $ requestIds , array $ tokenIds ): void
150- {
151- ProcessAbeRequestToken::query ()
152- ->whereIn ('process_request_id ' , $ requestIds )
153- ->delete ();
154-
155- if ($ tokenIds !== []) {
156- ProcessAbeRequestToken::query ()
157- ->whereIn ('process_request_token_id ' , $ tokenIds )
158- ->delete ();
159- }
160- }
161-
162- private function deleteScheduledTasks (array $ requestIds , array $ tokenIds ): void
163- {
164- ScheduledTask::query ()
165- ->whereIn ('process_request_id ' , $ requestIds )
166- ->delete ();
167-
168- if ($ tokenIds !== []) {
169- ScheduledTask::query ()
170- ->whereIn ('process_request_token_id ' , $ tokenIds )
171- ->delete ();
172- }
173- }
174-
175- private function deleteInboxRules (array $ tokenIds ): void
176- {
177- if ($ tokenIds === []) {
178- return ;
179- }
180-
181- InboxRule::query ()
182- ->whereIn ('process_request_token_id ' , $ tokenIds )
183- ->get ()
184- ->each
185- ->delete ();
186- }
187-
188- private function deleteInboxRuleLogs (array $ tokenIds ): void
189- {
190- if ($ tokenIds === []) {
191- return ;
192- }
193-
194- InboxRuleLog::query ()
195- ->whereIn ('process_request_token_id ' , $ tokenIds )
196- ->delete ();
197- }
198-
199- private function deleteEllucianEthosSyncTasks (array $ tokenIds ): void
200- {
201- if ($ tokenIds === [] || !Schema::hasTable ('ellucian_ethos_sync_global_task_list ' )) {
202- return ;
203- }
204-
205- DB ::table ('ellucian_ethos_sync_global_task_list ' )
206- ->whereIn ('process_request_token_id ' , $ tokenIds )
207- ->delete ();
208- }
209-
210- private function deleteTaskDrafts (array $ tokenIds ): void
211- {
212- if ($ tokenIds === []) {
213- return ;
214- }
215-
216- TaskDraft::query ()
217- ->whereIn ('task_id ' , $ tokenIds )
218- ->delete ();
219- }
220-
221- private function deleteTaskDraftMedia (array $ draftIds ): void
222- {
223- if ($ draftIds === []) {
224- return ;
225- }
226-
227- Media::query ()
228- ->where ('model_type ' , TaskDraft::class)
229- ->whereIn ('model_id ' , $ draftIds )
230- ->get ()
231- ->each
232- ->delete ();
233- }
234-
235- private function deleteRequestMedia (array $ requestIds ): void
236- {
237- if ($ requestIds === []) {
238- return ;
239- }
240-
241- Media::query ()
242- ->where ('model_type ' , ProcessRequest::class)
243- ->whereIn ('model_id ' , $ requestIds )
244- ->get ()
245- ->each
246- ->delete ();
247- }
248-
249- private function deleteComments (string $ caseNumber , array $ requestIds , array $ tokenIds ): void
250- {
251- Comment::query ()
252- ->where ('case_number ' , $ caseNumber )
253- ->orWhere (function ($ query ) use ($ requestIds , $ tokenIds ) {
254- $ query ->where ('commentable_type ' , ProcessRequest::class)
255- ->whereIn ('commentable_id ' , $ requestIds );
256-
257- if ($ tokenIds !== []) {
258- $ query ->orWhere (function ($ nestedQuery ) use ($ tokenIds ) {
259- $ nestedQuery ->where ('commentable_type ' , ProcessRequestToken::class)
260- ->whereIn ('commentable_id ' , $ tokenIds );
261- });
262- }
263- })
264- ->delete ();
265- }
266-
267102 private function dispatchSavedSearchRecount (): void
268103 {
269104 if (!config ('savedsearch.count ' , false )) {
0 commit comments