Untitled
unknown
plain_text
3 years ago
2.1 kB
17
Indexable
$journal = Journal::with(['cashbank', 'ccLog', 'mutation'])->where('user_id', $userID)
->where('id', $id)
->firstOrFail();
// berarti pemasukan
if($journal->status_credit > 0) {
$totalSaldoJikaDihapus = Journal::where('user_id', '=', $userID)
->where('id', '!=', $journal->id)
->where('cashbank_id', $journal->cashbank_id)
->lockForUpdate()
->sum(DB::raw('amount * status_credit'));
// ini validasi pertama, jika keseluruhan saldo kurang dari 0, langsung errorin
if ($totalSaldoJikaDihapus < 0) {
throw new \Exception('Data tidak bisa dihapus, karena jika dihapus, jadinya saldonya minus.');
}
$saldoSebelumDihapus = Journal::where('user_id', '=', $userID)
->where('created_at', '<', $journal->created_at)
->where('cashbank_id', $journal->cashbank_id)
->where('id', '!=', $journal->id)
->lockForUpdate()
->sum(DB::raw('amount * status_credit'));
// ini validasi kedua, ambil data setelah dihapus, di validasi
$journals = Journal::select([
'id', 'user_id', 'created_at', 'cashbank_id', 'created_at', 'amount', 'status_credit'
])->where('user_id', '=', $userID)
->where('created_at', '>', $journal->created_at)
->where('cashbank_id', $journal->cashbank_id)
->where('id', '!=', $journal->id)
->orderBy('created_at')
->get();
$balance = $saldoSebelumDihapus;
foreach ($journals as $journal) {
$amount = $journal->amount * $journal->status_credit;
$balance -= $amount;
if ($balance < 0) {
throw new \Exception('Gagal dihapus, saldo tidak boleh minus.');
}
}
}
$cashbank = $journal->cashbank;
Editor is loading...