FIX_FILE_REMOVE_IN_THE_CLAIMS

This commit is contained in:
VENKATESHWARAN 2026-08-04 11:37:48 +05:30
parent 158e91a94f
commit 107966a73d

View File

@ -327,7 +327,20 @@ class ClaimController extends ResourceController
return $this->respond(['status' => 'failed', 'code' => 422, 'data' => $this->ClaimModel->errors()], 422);
}
$fileResult = $this->saveClaimFiles((int) $claimId, $reqData['updated_by'] ?? $reqData['created_by'] ?? null);
$updatedBy = $reqData['updated_by'] ?? $reqData['created_by'] ?? null;
// Soft-delete active files whose ids are not sent in claim_file_ids.
// When claim_file_ids is present (even empty), missing ids are soft-deleted.
$deletedFileIds = [];
if (array_key_exists('claim_file_ids', $reqData)) {
$deletedFileIds = $this->softDeleteMissingClaimFiles(
(int) $claimId,
$reqData['claim_file_ids'],
$updatedBy
);
}
$fileResult = $this->saveClaimFiles((int) $claimId, $updatedBy);
if ($fileResult['attempted'] > 0 && empty($fileResult['saved'])) {
return $this->respond([
@ -341,9 +354,10 @@ class ClaimController extends ResourceController
'status' => 'success',
'code' => 200,
'data' => [
'claim_id' => (int) $claimId,
'uploaded_files' => $fileResult['saved'],
'files' => $this->decorateFilesWithUrls($this->getClaimFiles((int) $claimId)),
'claim_id' => (int) $claimId,
'uploaded_files' => $fileResult['saved'],
'deleted_file_ids' => $deletedFileIds,
'files' => $this->decorateFilesWithUrls($this->getClaimFiles((int) $claimId)),
],
], 200);
} catch (\Exception $e) {
@ -535,6 +549,58 @@ class ClaimController extends ResourceController
->findAll();
}
/**
* Soft-delete active claim files whose ids are not in the keep list.
* Accepts array, comma-separated string, or single id.
*
* @return int[] Soft-deleted file ids
*/
private function softDeleteMissingClaimFiles(int $claimId, $keepFileIds, $updatedBy = null): array
{
$keepIds = [];
if (is_string($keepFileIds)) {
$keepFileIds = array_filter(array_map('trim', explode(',', $keepFileIds)), 'strlen');
}
if (!is_array($keepFileIds)) {
$keepFileIds = [$keepFileIds];
}
foreach ($keepFileIds as $id) {
if ($id !== null && $id !== '' && is_numeric($id)) {
$keepIds[] = (int) $id;
}
}
$keepIds = array_values(array_unique($keepIds));
$query = $this->ClaimFilesModel
->where('claim_id', $claimId)
->where('is_active', 1);
if (!empty($keepIds)) {
$query->whereNotIn('id', $keepIds);
}
$filesToDelete = $query->findAll();
if (empty($filesToDelete)) {
return [];
}
$deletedIds = array_map('intval', array_column($filesToDelete, 'id'));
$this->ClaimFilesModel
->whereIn('id', $deletedIds)
->set([
'is_active' => 0,
'updated_by' => $updatedBy,
])
->update();
return $deletedIds;
}
/**
* Add preview_url and download_url to each claim file row.
*/