Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/warga-saya.aplikasipos.info/app/Livewire/
Upload File :
Current File : /home/aplikasiposinfo/www/warga-saya.aplikasipos.info/app/Livewire/PembayaranView.php

<?php

namespace App\Livewire;

use App\Models\Expense;
use Livewire\Component;
use App\Models\Civilian;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use App\Models\CivilianPivotSubscription;

class PembayaranView extends Component
{
    public $paymentMonths = [];

    /**
     * Generate bulan mulai dari tanggal registrasi hingga Desember tahun ini
     */
    private function generateMonthsFromRegistrationDate($registrationDate)
    {
        $months = [];
        $startDate = Carbon::parse($registrationDate);
        $endDate = Carbon::now()->endOfYear(); // Sampai akhir tahun ini

        $currentDate = $startDate->copy()->startOfMonth();

        while ($currentDate <= $endDate) {
            $key = $currentDate->format('Y-m');
            $label = $currentDate->translatedFormat('F Y'); // Format: "Maret 2023"
            $months[$key] = $label;
            $currentDate->addMonth();
        }

        return $months;
    }

    public function togglePayment($pivotId, $monthKey)
    {
        $pivot = CivilianPivotSubscription::with(['subscription', 'civilian'])->findOrFail($pivotId);
        $amount = (float) preg_replace('/[^0-9]/', '', $pivot->subscription->amount);

        DB::transaction(function () use ($pivot, $monthKey, $amount) {
            $currentMonths = $pivot->paid_months ?? [];
            
            if (in_array($monthKey, $currentMonths)) {
                // Jika bulan dicentang ulang (batalkan pembayaran)
                $currentMonths = array_diff($currentMonths, [$monthKey]);
                $pivot->debit -= $amount;
                
                // Hapus record pemasukan terkait
                $data = Expense::where([
                    'civilian_pivot_subscription_id' => $pivot->id,
                    // 'expense_date' => Carbon::parse($monthKey)->startOfMonth()
                ])->delete();
                // dd($data);
            } else {
                // Jika bulan baru dicentang (catat pembayaran)
                $currentMonths = array_merge($currentMonths, [$monthKey]);
                $pivot->debit += $amount;
                
                // Buat record pemasukan
                $data = Expense::create([
                    'expense_name' => 'iuran ' . $pivot->civilian->full_name,
                    'amount' => $amount,
                    'is_income' => true, // Tambahkan kolom ini di migration
                    'expense_date' => Carbon::parse($monthKey)->startOfMonth(),
                    'subscription_id' => $pivot->subscription_id,
                    'civilian_pivot_subscription_id' => $pivot->id,
                ]);

                // dd($data);
            }

            // dd($pivot);
            $pivot->paid_months = array_values(array_unique($currentMonths));
            $pivot->save();
        });
    }

    public function render()
    {
        $subscriptions = CivilianPivotSubscription::with(['subscription', 'civilian'])
            ->get()
            ->map(function ($subscription) {
                // Hitung ulang total_paid jika null / potential error
                if (is_null($subscription->debit)) {
                    $monthlyAmount = (float) preg_replace('/[^0-9]/', '', $subscription->subscription->amount);
                    $subscription->debit = count($subscription->paid_months ?? []) * $monthlyAmount;
                    $subscription->save();
                }
                
                // Return array bukan model Eloquent
                return [
                    'model' => $subscription,
                    'availableMonths' => $this->generateMonthsFromRegistrationDate(
                        $subscription->civilian->created_at
                    )
                ];
            });
    
        return view('livewire.pembayaran-view', [
            'subscriptions' => $subscriptions
        ]);
    }
}

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]