Update Alert Profil Petani

This commit is contained in:
2026-11-04 16:20:33 +07:00
parent 41da3a71ee
commit 89c5a1371a
10 changed files with 943 additions and 1 deletions
@@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers\Web\Produktivitas;
use App\Enums\StatusDataPetani;
use App\Http\Controllers\Controller;
use App\Models\Pertanian\Petani;
use App\Services\Produktivitas\KelengkapanPetani;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
/**
* Enumerator penginput menandai data petani Lengkap, atau membatalkannya kembali ke Draf.
* Perubahan ke Terverifikasi dilakukan koordinator (menu menyusul), bukan di sini.
*/
class PetaniStatusController extends Controller
{
public function update(Request $request, Petani $petani)
{
abort_unless($petani->bisaDitandaiOleh($request->user()), 403);
$validated = $request->validate([
'status' => ['required', Rule::in([StatusDataPetani::LENGKAP->value, StatusDataPetani::DRAFT->value])],
]);
$tujuan = StatusDataPetani::from($validated['status']);
if ($petani->status === StatusDataPetani::TERVERIFIKASI) {
return back()->with('status_petani_error', 'Data petani sudah terverifikasi. Hubungi koordinator untuk mengubahnya.');
}
if ($tujuan === StatusDataPetani::LENGKAP) {
if ($petani->status !== StatusDataPetani::DRAFT) {
return back()->with('status_petani_error', 'Data petani sudah ditandai lengkap.');
}
$wajibKosong = KelengkapanPetani::untuk($petani)->jumlahWajibKosong();
if ($wajibKosong > 0) {
return back()->with('status_petani_error', "Masih ada {$wajibKosong} isian wajib yang kosong.");
}
}
if ($tujuan === StatusDataPetani::DRAFT && $petani->status !== StatusDataPetani::LENGKAP) {
return back()->with('status_petani_error', 'Data petani masih berstatus draf.');
}
$petani->status = $tujuan;
$petani->updated_by = $request->user()->id;
$petani->save();
return back()->with('status_petani_success', $tujuan === StatusDataPetani::LENGKAP
? 'Data petani berhasil ditandai lengkap.'
: 'Tanda lengkap berhasil dibatalkan. Status kembali ke draf.');
}
}