applyPenalty(); $bill = $generateMonthlyBill->generateAutoBill(); $paymentType = PaymentType::pluck('payment_type'); $nominal = PaymentType::pluck('nominal'); $paymentPenalties = DetailPayment::with('paymentType') ->get() ->pluck('penalty', 'type_id'); $santri = User::with([ 'payments.detailPayments.paymentType', ])->paginate(2); return Inertia::render('list-admin/payment/ManualPayment', [ 'santri' => $santri->items(), 'penalty' => $penalty, 'bill' => $bill, 'fields' => [ 'nis' => 'text', 'nama' => 'text', 'status_santri' => 'text', 'role_santri' => 'text', ], 'options' => [ 'payment_type' => $paymentType, 'payment_nominal' => $nominal, 'payment_penalty' => $paymentPenalties ] ]); } public function manualPayment(Request $request, $paymentId) { try { DB::beginTransaction(); DB::enableQueryLog(); $range = $request->input('range'); $payment = Payment::find($paymentId); $userId = User::findOrFail($request->id); if (!$payment) { Payment::create([ 'payment_status' => 'pending', 'amount_payment' => 0, 'bank' => null, 'no_va' => null, 'expired_at' => null, 'user_id' => $userId ]); } $unpaidDetails = DetailPayment::where('payment_id', $paymentId) ->where('status', 'unpaid') ->orderBy('payment_year', 'asc') ->orderBy('payment_month', 'asc') ->get(); $jumlahUnpaid = $unpaidDetails->count(); $totalAmount = 0; Log::info("Jumlah Unpaid: $jumlahUnpaid | Range: $range"); if ($jumlahUnpaid > 0) { foreach ($unpaidDetails->take($range) as $detail) { $nominal = PaymentType::where('id', $detail->type_id)->value('nominal') ?? 0; $penalty = $detail->penalty ?? 0; $total = $nominal + $penalty; Log::info("Update DetailPayment ID {$detail->id} | Total: $total"); $detail->update([ 'status' => 'paid', 'amount' => $total, 'penalty' => $penalty, ]); $totalAmount += $total; } } $sisa = max(0, $range - $jumlahUnpaid); dd("Sisa pembayaran baru yang perlu dibuat: $sisa"); if ($sisa > 0) { $latestUnpaid = $unpaidDetails->last(); $bulanTerakhir = $latestUnpaid ? $latestUnpaid->payment_month : now()->month; $tahunTerakhir = $latestUnpaid ? $latestUnpaid->payment_year : now()->year; $typeId = $latestUnpaid ? $latestUnpaid->type_id : PaymentType::first()->id; $nominal = PaymentType::where('id', $typeId)->value('nominal') ?? 0; for ($i = 1; $i <= $sisa; $i++) { $bulanTerakhir++; if ($bulanTerakhir > 12) { $bulanTerakhir = 1; $tahunTerakhir++; } $totalAmount += $nominal; Log::info("Buat DetailPayment baru untuk bulan: $bulanTerakhir, tahun: $tahunTerakhir"); DetailPayment::create([ 'payment_id' => $paymentId, 'payment_month' => $bulanTerakhir, 'payment_year' => $tahunTerakhir, 'amount' => $nominal, 'penalty' => 0, 'status' => 'paid', 'type_id' => $typeId, ]); } } $totalAmountFinal = DetailPayment::where('payment_id', $paymentId)->sum('amount'); Log::info("Total pembayaran akhir: $totalAmountFinal"); $payment->update([ 'amount_payment' => $totalAmountFinal, 'payment_status' => DetailPayment::where('payment_id', $paymentId) ->where('status', 'unpaid') ->exists() ? 'pending' : 'success' ]); Log::info("Update Payment ID $paymentId | amount_payment: $totalAmountFinal"); DB::commit(); // dd($request->all()); return redirect()->back()->with('success', 'Berhasil Melakukan Pembayaran'); } catch (Exception $e) { DB::rollBack(); return dd('Error:', $e->getMessage()); } } }