Skip to content

Commit becd985

Browse files
committed
Merge branch 'epic/FOUR-29101' into task/FOUR-29116
2 parents 5ced5e6 + c8c44e1 commit becd985

5 files changed

Lines changed: 537 additions & 80 deletions

File tree

ProcessMaker/Console/Commands/EvaluateCaseRetention.php

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Illuminate\Console\Command;
66
use ProcessMaker\Jobs\EvaluateProcessRetentionJob;
77
use ProcessMaker\Models\Process;
8+
use ProcessMaker\Models\ProcessCategory;
89

910
class EvaluateCaseRetention extends Command
1011
{
@@ -37,16 +38,37 @@ public function handle()
3738
}
3839

3940
$this->info('Case retention policy is enabled');
40-
$this->info('Evaluating and deleting cases past their retention period');
41+
$this->info('Dispatching retention evaluation jobs for all processes');
4142

42-
// Process all processes when retention policy is enabled
43-
// Processes without retention_period will default to 1_year
44-
Process::chunkById(100, function ($processes) {
43+
// Get system category IDs to exclude
44+
$systemCategoryIds = ProcessCategory::where('is_system', true)->pluck('id');
45+
46+
// Exclude processes that are templates or in system categories
47+
$jobCount = 0;
48+
$query = Process::where('is_template', '!=', 1);
49+
50+
// Exclude processes in system categories
51+
if ($systemCategoryIds->isNotEmpty()) {
52+
$query->where(function ($q) use ($systemCategoryIds) {
53+
$q->where(function ($subQuery) use ($systemCategoryIds) {
54+
$subQuery->whereNotIn('process_category_id', $systemCategoryIds)
55+
->orWhereNull('process_category_id');
56+
});
57+
})
58+
->whereDoesntHave('categories', function ($q) use ($systemCategoryIds) {
59+
// Exclude processes with any category assignment to system categories
60+
$q->whereIn('process_categories.id', $systemCategoryIds);
61+
});
62+
}
63+
64+
$query->chunkById(100, function ($processes) use (&$jobCount) {
4565
foreach ($processes as $process) {
4666
dispatch(new EvaluateProcessRetentionJob($process->id));
67+
$jobCount++;
4768
}
4869
});
4970

50-
$this->info('Cases retention evaluation complete');
71+
$this->info("Dispatched {$jobCount} retention evaluation job(s) to the queue");
72+
$this->info('Jobs will be processed asynchronously by queue workers');
5173
}
5274
}

ProcessMaker/Http/Controllers/Api/Actions/Cases/DeleteCase.php

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -99,20 +99,4 @@ private function getTaskDraftIds(array $tokenIds): array
9999
->pluck('id')
100100
->all();
101101
}
102-
103-
private function dispatchSavedSearchRecount(): void
104-
{
105-
if (!config('savedsearch.count', false)) {
106-
return;
107-
}
108-
109-
$jobClass = 'ProcessMaker\\Package\\SavedSearch\\Jobs\\RecountAllSavedSearches';
110-
if (!class_exists($jobClass)) {
111-
return;
112-
}
113-
114-
DB::afterCommit(static function () use ($jobClass): void {
115-
$jobClass::dispatch(['request', 'task']);
116-
});
117-
}
118102
}

ProcessMaker/Http/Controllers/Api/Actions/Cases/DeletesCaseRecords.php

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,30 @@
2121

2222
trait DeletesCaseRecords
2323
{
24-
private function deleteCasesStarted(string $caseNumber): void
24+
private function deleteCasesStarted(string | array $caseNumbers): void
2525
{
26-
CaseStarted::query()
27-
->where('case_number', $caseNumber)
28-
->delete();
26+
if (is_array($caseNumbers) && $caseNumbers !== []) {
27+
CaseStarted::query()
28+
->whereIn('case_number', $caseNumbers)
29+
->delete();
30+
} else {
31+
CaseStarted::query()
32+
->where('case_number', $caseNumbers)
33+
->delete();
34+
}
2935
}
3036

31-
private function deleteCasesParticipated(string $caseNumber): void
37+
private function deleteCasesParticipated(string | array $caseNumbers): void
3238
{
33-
CaseParticipated::query()
34-
->where('case_number', $caseNumber)
35-
->delete();
39+
if (is_array($caseNumbers)) {
40+
CaseParticipated::query()
41+
->whereIn('case_number', $caseNumbers)
42+
->delete();
43+
} else {
44+
CaseParticipated::query()
45+
->where('case_number', $caseNumbers)
46+
->delete();
47+
}
3648
}
3749

3850
private function deleteCaseNumbers(array $requestIds): void
@@ -183,11 +195,18 @@ private function deleteRequestMedia(array $requestIds): void
183195
->delete();
184196
}
185197

186-
private function deleteComments(string $caseNumber, array $requestIds, array $tokenIds): void
198+
private function deleteComments(string | array $caseNumbers, array $requestIds, array $tokenIds): void
187199
{
188-
Comment::query()
189-
->where('case_number', $caseNumber)
190-
->orWhere(function ($query) use ($requestIds, $tokenIds) {
200+
if (is_array($caseNumbers) && $caseNumbers !== []) {
201+
$query = Comment::query()
202+
->whereIn('case_number', $caseNumbers);
203+
} else {
204+
$query = Comment::query()
205+
->where('case_number', $caseNumbers);
206+
}
207+
208+
if ($requestIds !== [] || $tokenIds !== []) {
209+
$query->orWhere(function ($query) use ($requestIds, $tokenIds) {
191210
$query->where('commentable_type', ProcessRequest::class)
192211
->whereIn('commentable_id', $requestIds);
193212

@@ -197,8 +216,10 @@ private function deleteComments(string $caseNumber, array $requestIds, array $to
197216
->whereIn('commentable_id', $tokenIds);
198217
});
199218
}
200-
})
201-
->delete();
219+
});
220+
}
221+
222+
$query->delete();
202223
}
203224

204225
private function deleteNotifications(array $requestIds): void
@@ -220,4 +241,20 @@ private function deleteNotifications(array $requestIds): void
220241
->whereIn('data->type', $notificationTypes)
221242
->delete();
222243
}
244+
245+
private function dispatchSavedSearchRecount(): void
246+
{
247+
if (!config('savedsearch.count', false)) {
248+
return;
249+
}
250+
251+
$jobClass = 'ProcessMaker\\Package\\SavedSearch\\Jobs\\RecountAllSavedSearches';
252+
if (!class_exists($jobClass)) {
253+
return;
254+
}
255+
256+
DB::afterCommit(static function () use ($jobClass): void {
257+
$jobClass::dispatch(['request', 'task']);
258+
});
259+
}
223260
}

0 commit comments

Comments
 (0)