Update Koperasi

This commit is contained in:
2026-11-06 22:38:45 +07:00
parent 6232b28e11
commit cb36682d9e
79 changed files with 4639 additions and 1378 deletions
@@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers\Web\Koperasi;
use App\Http\Controllers\Controller;
use App\Http\Requests\Koperasi\IndexKoperasiTabRequest;
use App\Http\Requests\Koperasi\StoreKelembagaanKoperasiRequest;
use App\Models\Koperasi\PengurusKoperasi;
use App\Services\Koperasi\PengurusKoperasiService;
class KelembagaanKoperasiController extends Controller
{
public function index(IndexKoperasiTabRequest $request, PengurusKoperasi $pengurusKoperasi, PengurusKoperasiService $service)
{
return view('koperasi.kelembagaan-aktor.index', $service->profileViewData($pengurusKoperasi));
}
public function store(StoreKelembagaanKoperasiRequest $request, PengurusKoperasi $pengurusKoperasi, PengurusKoperasiService $service)
{
$data = $request->validated();
unset($data['section']);
$pengurusKoperasi->update($service->tabData($data));
$response = redirect()->route('koperasi.pengurus.kelembagaan-aktor.index', $pengurusKoperasi);
if ($section = $request->section()) {
$response->withFragment($section->afterSaveFragment());
}
return $response->with('success', 'Data operasional koperasi berhasil diperbarui.');
}
}
@@ -3,175 +3,51 @@
namespace App\Http\Controllers\Web\Koperasi;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\Koperasi\IndexPengurusKoperasiRequest;
use App\Http\Requests\Koperasi\StorePengurusKoperasiRequest;
use App\Http\Requests\Koperasi\UpdatePengurusKoperasiRequest;
use App\Models\Koperasi\PengurusKoperasi;
use App\Services\Koperasi\PengurusKoperasiService;
class PengurusKoperasiController extends Controller
{
public function index(Request $request)
public function index(IndexPengurusKoperasiRequest $request, PengurusKoperasiService $service)
{
$query = PengurusKoperasi::query();
if ($request->filled('search')) {
$search = $request->search;
$query->where('nama_lengkap', 'like', "%{$search}%")
->orWhere('nama_koperasi', 'like', "%{$search}%");
}
$perPage = $request->get('per_page', 10);
$pengurus = $query->latest()->paginate($perPage);
$totalPengurus = PengurusKoperasi::count();
$totalKoperasi = PengurusKoperasi::distinct('nama_koperasi')->count('nama_koperasi');
$totalJabatan = PengurusKoperasi::distinct('posisi_dalam_koperasi')->count('posisi_dalam_koperasi');
return view('koperasi.profil.index', compact(
'pengurus',
'totalPengurus',
'totalKoperasi',
'totalJabatan',
));
}
public function create()
{
return view('koperasi.profil.add');
}
public function edit($id)
{
$pengurus = PengurusKoperasi::findOrFail($id);
return view('koperasi.profil.edit', compact('pengurus'));
return view('koperasi.profil.index', $service->indexData($request->validated()));
}
public function update(Request $request, $id)
public function create(PengurusKoperasiService $service)
{
$validatedData = $request->validate([
'nama_lengkap' => 'required|string|max:255',
'posisi_dalam_koperasi' => 'required|string|max:255',
'tahun_bergabung' => 'nullable|integer',
'no_hp' => 'nullable|string|max:20',
'alamat_tinggal' => 'nullable|string',
'nama_koperasi' => 'required|string|max:255',
'jenis_koperasi' => 'required|string|max:255',
'jenis_koperasi_lainnya'=> 'nullable|string|max:255',
'alamat_koperasi' => 'nullable|string',
'skala_operasi' => 'required|string|max:255',
'tahun_berdiri' => 'nullable|integer',
'jumlah_anggota_awal' => 'nullable|integer',
'jumlah_anggota_dewasa' => 'nullable|integer',
'jumlah_anggota_anak' => 'nullable|integer',
'jumlah_pengurus' => 'nullable|integer',
'shu_2025' => 'nullable|numeric',
'shu_2024' => 'nullable|numeric',
'shu_2023' => 'nullable|numeric',
]);
if ($validatedData['jenis_koperasi'] === 'Lainnya' && !empty($validatedData['jenis_koperasi_lainnya'])) {
$validatedData['jenis_koperasi'] = $validatedData['jenis_koperasi_lainnya'];
}
unset($validatedData['jenis_koperasi_lainnya']);
$pengurus = PengurusKoperasi::findOrFail($id);
$pengurus->update($validatedData);
return redirect()->route('koperasi.pengurus.index')
->with('success', 'Profil Koperasi berhasil diperbarui!');
}
public function survey(Request $request, $id)
{
$pengurus = PengurusKoperasi::findOrFail($id);
$step = $request->query('step', 1);
if ($step == 1) {
return view('koperasi.kelembagaan-aktor.index', compact('pengurus'));
} elseif ($step == 2) {
return view('koperasi.rantai-nilai-akses-pasar.index', compact('pengurus'));
} elseif ($step == 3) {
return view('koperasi.sosial-ekonomi.index', compact('pengurus'));
}
abort(404);
return view('koperasi.profil.create', $service->profileViewData());
}
public function surveyStore(Request $request, $id)
public function edit(PengurusKoperasi $pengurusKoperasi, PengurusKoperasiService $service)
{
$pengurus = PengurusKoperasi::findOrFail($id);
$step = $request->query('step', 1);
$data = $request->except(['_token', 'pengurus_koperasi_id']);
foreach ($data as $key => $value) {
if (is_array($value)) {
$data[$key] = json_encode($value);
}
}
$pengurus->update($data);
if ($step == 1) {
if ($request->has('agregasi_komoditas') && str_contains($data['agregasi_komoditas'], 'Tidak terlibat')) {
return redirect()->route('koperasi.pengurus.survey', ['id' => $id, 'step' => 3])
->with('success', 'Data Kelembagaan tersimpan! (Melewati Rantai Nilai)');
}
return redirect()->route('koperasi.pengurus.survey', ['id' => $id, 'step' => 2])
->with('success', 'Data Kelembagaan berhasil disimpan!');
}
if ($step == 2) {
return redirect()->route('koperasi.pengurus.survey', ['id' => $id, 'step' => 3])
->with('success', 'Data Rantai Nilai berhasil disimpan!');
}
if ($step == 3) {
return redirect()->route('koperasi.pengurus.index')
->with('success', 'Seluruh data survei berhasil diselesaikan dan disimpan!');
}
return redirect()->back();
return view('koperasi.profil.edit', $service->profileViewData($pengurusKoperasi));
}
public function store(Request $request)
public function update(UpdatePengurusKoperasiRequest $request, PengurusKoperasi $pengurusKoperasi, PengurusKoperasiService $service)
{
$validatedData = $request->validate([
'nama_lengkap' => 'required|string|max:255',
'posisi_dalam_koperasi' => 'required|string|max:255',
'tahun_bergabung' => 'nullable|integer',
'no_hp' => 'nullable|string|max:20',
'alamat_tinggal' => 'nullable|string',
'nama_koperasi' => 'required|string|max:255',
'jenis_koperasi' => 'required|string|max:255',
'jenis_koperasi_lainnya'=> 'nullable|string|max:255',
'alamat_koperasi' => 'nullable|string',
'skala_operasi' => 'required|string|max:255',
'tahun_berdiri' => 'nullable|integer',
'jumlah_anggota_awal' => 'nullable|integer',
'jumlah_anggota_dewasa' => 'nullable|integer',
'jumlah_anggota_anak' => 'nullable|integer',
'jumlah_pengurus' => 'nullable|integer',
'shu_2025' => 'nullable|numeric',
'shu_2024' => 'nullable|numeric',
'shu_2023' => 'nullable|numeric',
]);
$pengurusKoperasi->update($service->profileData($request->validated()));
if ($validatedData['jenis_koperasi'] === 'Lainnya' && !empty($validatedData['jenis_koperasi_lainnya'])) {
$validatedData['jenis_koperasi'] = $validatedData['jenis_koperasi_lainnya'];
}
unset($validatedData['jenis_koperasi_lainnya']);
$pengurus = PengurusKoperasi::create($validatedData);
return redirect()->route('koperasi.pengurus.index')
->with('success', 'Profil Koperasi berhasil ditambahkan! Silakan klik tombol hijau untuk mulai survei.');
return redirect()->route('koperasi.pengurus.edit', $pengurusKoperasi)
->with('success', 'Profil koperasi berhasil diperbarui.');
}
public function store(StorePengurusKoperasiRequest $request, PengurusKoperasiService $service)
{
$pengurus = $service->createProfile($request->validated(), $request->user()->id);
return redirect()->route('koperasi.pengurus.edit', $pengurus)
->with('success', 'Profil koperasi berhasil ditambahkan.');
}
public function destroy($id)
{
$pengurus = PengurusKoperasi::findOrFail($id);
$pengurus->delete();
return redirect()->route('koperasi.pengurus.index')
->with('success', 'Data pengurus koperasi berhasil dihapus!');
->with('success', 'Data koperasi berhasil dihapus.');
}
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers\Web\Koperasi;
use App\Http\Controllers\Controller;
use App\Http\Requests\Koperasi\IndexKoperasiTabRequest;
use App\Http\Requests\Koperasi\StoreRantaiNilaiKoperasiRequest;
use App\Models\Koperasi\PengurusKoperasi;
use App\Services\Koperasi\PengurusKoperasiService;
class RantaiNilaiKoperasiController extends Controller
{
public function index(IndexKoperasiTabRequest $request, PengurusKoperasi $pengurusKoperasi, PengurusKoperasiService $service)
{
return view('koperasi.rantai-nilai-akses-pasar.index', $service->profileViewData($pengurusKoperasi));
}
public function store(StoreRantaiNilaiKoperasiRequest $request, PengurusKoperasi $pengurusKoperasi, PengurusKoperasiService $service)
{
$data = $request->validated();
unset($data['section']);
$pengurusKoperasi->update($service->tabData($data));
$response = redirect()->route('koperasi.pengurus.rantai-nilai-akses-pasar.index', $pengurusKoperasi);
if ($section = $request->section()) {
$response->withFragment($section->afterSaveFragment());
}
return $response->with('success', 'Data rantai nilai dan akses pasar koperasi berhasil diperbarui.');
}
}
@@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers\Web\Koperasi;
use App\Http\Controllers\Controller;
use App\Http\Requests\Koperasi\IndexKoperasiTabRequest;
use App\Http\Requests\Koperasi\StoreSosialEkonomiKoperasiRequest;
use App\Models\Koperasi\PengurusKoperasi;
use App\Services\Koperasi\PengurusKoperasiService;
class SosialEkonomiKoperasiController extends Controller
{
public function index(IndexKoperasiTabRequest $request, PengurusKoperasi $pengurusKoperasi, PengurusKoperasiService $service)
{
return view('koperasi.sosial-ekonomi.index', $service->profileViewData($pengurusKoperasi));
}
public function store(StoreSosialEkonomiKoperasiRequest $request, PengurusKoperasi $pengurusKoperasi, PengurusKoperasiService $service)
{
$pengurusKoperasi->update($service->tabData($request->validated()));
return redirect()->route('koperasi.pengurus.sosial-ekonomi.index', $pengurusKoperasi)
->with('success', 'Data sosial ekonomi koperasi berhasil diperbarui.');
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Web\Koperasi;
use App\Enums\Koperasi\TabKoperasi;
use App\Http\Controllers\Controller;
use App\Http\Requests\Koperasi\IndexKoperasiTabRequest;
use App\Models\Koperasi\PengurusKoperasi;
// Pertahankan tautan/form survei lama sambil memakai controller resource per tab.
class SurveyKoperasiController extends Controller
{
public function index(IndexKoperasiTabRequest $request, PengurusKoperasi $pengurusKoperasi)
{
$tab = TabKoperasi::from((int) $request->input('step', 1));
return redirect()->route($tab->routePrefix().'.index', $pengurusKoperasi);
}
public function store(IndexKoperasiTabRequest $request, PengurusKoperasi $pengurusKoperasi)
{
$controller = match (TabKoperasi::from((int) $request->input('step', 1))) {
TabKoperasi::KELEMBAGAAN => KelembagaanKoperasiController::class,
TabKoperasi::RANTAI_NILAI => RantaiNilaiKoperasiController::class,
TabKoperasi::SOSIAL_EKONOMI => SosialEkonomiKoperasiController::class,
};
return app()->call([app($controller), 'store'], ['pengurusKoperasi' => $pengurusKoperasi]);
}
}