I'm writing a project with Laravel.i have a loop with a lot of condition like this:
foreach ($transactionsGroupBys as $transactionsGroupBy) {
if ($this->checkExistSettlement($transactionsGroupBy, Carbon::today())) {
$this->setErrorLog('This settlement has already been created', $transactionsGroupBy);
continue;
}
try {
if ($this->doChunk()) {
$transactions = $this->getTransactions($transactionsGroupBy);
$maxAmountSettle = $this->configRepository->find('transaction_chunk:PUBLIC')->value;
$transactionChunk = app(ChunkTransaction::class)->chunk($transactions, $maxAmountSettle);
foreach ($transactionChunk as $chunk) {
$transactionsIds = collect($chunk->transactions)->pluck('id')->toArray();
$settlements[] = $this->insertSettlement($chunk->transactions_group_by, $transactionsIds)->toArray();
$this->setInfoLog("Created $counter/$countSettlements settlement", $chunk->transactions_group_by);
}
} else {
$transactions = $this->getTransactions($transactionsGroupBy, ['id']);
$transactionsIds = $transactions ? collect($transactions)->pluck('id')->toArray() : [];
$settlements[] = $this->insertSettlement($transactionsGroupBy, $transactionsIds)->toArray();
$this->setInfoLog("Created $counter/$countSettlements settlement", $transactionsGroupBy);
}
$counter += 1;
} catch (\Exception $exception) {
$this->setErrorLog($exception->getMessage());
continue;
}
}
i am checking $this->doChunk()
and if true, run other loop. i feel this code is very Complicated and i have duplicated code. i need new pattern for Solve this problem.