diff --git a/src/services/api/expense.ts b/src/services/api/expense.ts index 613b93c0..6c580dff 100644 --- a/src/services/api/expense.ts +++ b/src/services/api/expense.ts @@ -351,6 +351,47 @@ export class ExpenseApiService extends BaseApiService< } } + async bulkApprovals( + ids: number[], + status: + | BulkApproveExpensePayload['status'] + | 'SELESAI', + date?: string, + notes?: string + ): Promise | undefined> { + if (status === 'SELESAI') { + const responses = await Promise.all(ids.map((id) => this.complete(id))); + const failedResponse = responses.find( + (response) => response?.status !== 'success' + ); + + if (failedResponse) { + return failedResponse; + } + + const completedExpenses = responses.flatMap((response) => + response?.status === 'success' ? [response.data] : [] + ); + + return { + code: 200, + status: 'success', + message: + completedExpenses.length === 1 + ? 'Submit expense approval successfully' + : 'Submit expense approvals successfully', + data: completedExpenses, + }; + } + + return this.bulkApproveToStatus({ + approvable_ids: ids, + status, + date: date || undefined, + notes: notes || undefined, + }); + } + async rejectHeadArea( id: number, notes?: string