Update Koperasi
This commit is contained in:
+1
-1
@@ -690,7 +690,7 @@ Status: `Belum` / `Proses` / `Selesai` / `Dikecualikan`
|
||||
| Program | Workshop (+ Sesi, Peserta) | B | Belum | Sesi/Peserta sedang dikerjakan |
|
||||
| Program | Kelompok Belajar Tani | B | Belum | |
|
||||
| Bumdes | Profil, Kelembagaan, Survei | B | Belum | |
|
||||
| Koperasi | Profil, Kelembagaan, Survei | B | Belum | |
|
||||
| Koperasi | Profil, Operasional, Rantai Nilai, Sosial Ekonomi | C | Proses | Daftar Data Koperasi berfokus pada identitas koperasi, jenis, layanan, dokumen kelembagaan, responden dan enumerator (admin/super admin), dengan ringkasan total/jenis koperasi dan dokumen lengkap, card filter wilayah bertingkat berbasis relasi desa serta jenis/layanan/dokumen/urutan seperti profil lain, Form Request pencarian/pagination dan validasi hierarki wilayah, service query, serta JS terpisah; migration desa_kelurahan_id/created_by diterapkan 6 November 2026 (batch 16); penginput lama dipulihkan hanya dari log created, profil tanpa desa tetap tampil pada daftar kabupaten agar wilayah lama dapat dilengkapi di Profil; Card ringkasan pada seluruh tab memakai komponen Blade dan service, mengikuti tampilan BUMDes/Kelompok Tani, menampilkan identitas, jenis koperasi dan layanan utama, anggota dan pengurus di bawahnya, serta kontak; Profil dan tiap tab memakai Form Request, controller resource, model binding, dan JS terpisah; tab survei memakai enum/casts dan percabangan bersama di tampilan/server, rincian wajib bersyarat, dan pembersihan jawaban tidak aktif; Operasional memiliki box pengelolaan dan box Rantai Nilai dan Pascapanen (termasuk K3), masing-masing menyimpan data sendiri, simpan pengelolaan menuju box berikutnya; D6 dapat diisi semua koperasi setelah profil tersimpan, dengan penyimpanan terpisah per box, simpan saluran menuju box harga, dan tabel harga lengkap empat bentuk produk × tiga musim panen; Sosial Ekonomi membatasi keperluan pinjaman serta ikatan keuangan berdasarkan jenis simpan pinjam pada profil, bentuk pembayaran mengikuti ketersediaan mekanisme, harga pasar mengikuti pembayaran hasil bumi, dan alasan wajib untuk harga di luar pasar; simpan tetap di tab aktif, rupiah memakai pemisah ribuan; URL survei lama tetap didukung; soft delete belum direfaktor |
|
||||
| Konfigurasi | User | B | Belum | Route `users` & `users.verify` dobel |
|
||||
| Konfigurasi | Profil akun | — | Belum | Hanya `edit`/`update` |
|
||||
| Ekosistem | Semua | — | Dikecualikan | Lihat 11.3 |
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum AlasanPinjamanKoperasi: string
|
||||
{
|
||||
case PRODUKSI = 'Produksi';
|
||||
case PENDIDIKAN = 'Pendidikan';
|
||||
case KESEHATAN = 'Kesehatan';
|
||||
case ACARA_KELUARGA = 'Acara keluarga';
|
||||
case RENOVASI = 'Renovasi';
|
||||
case SEKUNDER = 'Sekunder';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PRODUKSI => 'Keperluan produksi',
|
||||
self::PENDIDIKAN => 'Pendidikan',
|
||||
self::KESEHATAN => 'Kesehatan',
|
||||
self::ACARA_KELUARGA => 'Acara keluarga/adat/hari besar',
|
||||
self::RENOVASI => 'Renovasi rumah',
|
||||
self::SEKUNDER => 'Kebutuhan sekunder',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum BagianOperasionalKoperasi: string
|
||||
{
|
||||
case PENGELOLAAN = 'pengelolaan';
|
||||
case RANTAI_NILAI = 'rantai-nilai';
|
||||
|
||||
public function fragment(): string
|
||||
{
|
||||
return 'section-operasional-'.$this->value;
|
||||
}
|
||||
|
||||
public function afterSaveFragment(): string
|
||||
{
|
||||
return self::RANTAI_NILAI->fragment();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum BagianRantaiNilaiKoperasi: string
|
||||
{
|
||||
case SALURAN = 'saluran';
|
||||
case HARGA = 'harga';
|
||||
|
||||
public function fragment(): string
|
||||
{
|
||||
return 'section-rantai-'.$this->value;
|
||||
}
|
||||
|
||||
public function afterSaveFragment(): string
|
||||
{
|
||||
return self::HARGA->fragment();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum BentukPembayaranKoperasi: string
|
||||
{
|
||||
case HASIL_BUMI = 'Hasil bumi';
|
||||
case GANTI_JASA = 'Ganti jasa';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::HASIL_BUMI => 'Hasil bumi (hasil panen)',
|
||||
self::GANTI_JASA => 'Ganti jasa/tenaga harian',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum BentukProdukKoperasi: string
|
||||
{
|
||||
case SEGAR = 'Buah segar hasil petik';
|
||||
case BASAH = 'Biji basah';
|
||||
case KERING = 'Biji kering/kupas';
|
||||
case FERMENTASI = 'Produk terfermentasi';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SEGAR => 'Buah segar hasil petik',
|
||||
self::BASAH => 'Biji basah',
|
||||
self::KERING => 'Biji kering/biji kupas',
|
||||
self::FERMENTASI => 'Produk terfermentasi',
|
||||
};
|
||||
}
|
||||
|
||||
public function pricePrefix(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SEGAR => 'segar',
|
||||
self::BASAH => 'basah',
|
||||
self::KERING => 'kering',
|
||||
self::FERMENTASI => 'fermentasi',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum EfektivitasSanksiKoperasi: string
|
||||
{
|
||||
case SANGAT_EFEKTIF = 'Sangat efektif';
|
||||
case EFEKTIF = 'Efektif';
|
||||
case BIASA = 'Biasa Saja';
|
||||
case KURANG = 'Kurang Efektif';
|
||||
case TIDAK = 'Tidak Efektif';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SANGAT_EFEKTIF => 'Sangat efektif',
|
||||
self::EFEKTIF => 'Efektif',
|
||||
self::BIASA => 'Biasa saja',
|
||||
self::KURANG => 'Kurang efektif',
|
||||
self::TIDAK => 'Tidak efektif',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum FaktorManajemenKoperasi: string
|
||||
{
|
||||
case KEPERCAYAAN = 'Rasa saling percaya';
|
||||
case KEPEMIMPINAN = 'Kepemimpinan koperasi';
|
||||
case ANGGOTA = 'Jumlah anggota';
|
||||
case PEMBUKUAN = 'Catatan/pembukuan rapi';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::KEPERCAYAAN => 'Rasa saling percaya',
|
||||
self::KEPEMIMPINAN => 'Kepemimpinan koperasi',
|
||||
self::ANGGOTA => 'Jumlah anggota',
|
||||
self::PEMBUKUAN => 'Catatan/pembukuan rapi',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum FasilitasKoperasi: string
|
||||
{
|
||||
case GUDANG = 'Gudang penyimpanan';
|
||||
case PENGERING = 'Alat pengering';
|
||||
case PEMECAH = 'Mesin pemecah';
|
||||
case PENGGILING = 'Mesin penggiling';
|
||||
case SORTASI = 'Mesin sortasi';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::GUDANG => 'Gudang penyimpanan',
|
||||
self::PENGERING => 'Alat pengering',
|
||||
self::PEMECAH => 'Mesin pemecah',
|
||||
self::PENGGILING => 'Mesin penggiling',
|
||||
self::SORTASI => 'Mesin sortasi',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum FokusKomoditasKoperasi: string
|
||||
{
|
||||
case YA = 'Ya';
|
||||
case TIDAK = 'Tidak';
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum FormatPembukuanKoperasi: string
|
||||
{
|
||||
case MANUAL = 'Manual/buku kas';
|
||||
case DIGITAL = 'Digital/file Excel';
|
||||
case APLIKASI = 'Aplikasi khusus';
|
||||
case TIDAK_ADA = 'Tidak ada';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::MANUAL => 'Manual/buku kas',
|
||||
self::DIGITAL => 'Digital/file Excel',
|
||||
self::APLIKASI => 'Aplikasi keuangan khusus',
|
||||
self::TIDAK_ADA => 'Tidak ada',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum FrekuensiPertemuanKoperasi: string
|
||||
{
|
||||
case BULANAN = 'Satu bulan sekali';
|
||||
case TAHUNAN = 'Satu tahun sekali';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::BULANAN => 'Satu bulan sekali',
|
||||
self::TAHUNAN => 'Satu tahun sekali',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum HubunganPemasokKoperasi: string
|
||||
{
|
||||
case BEBAS = 'Bebas';
|
||||
case LANGGANAN = 'Langganan tetap';
|
||||
case HUTANG = 'Berbasis hutang';
|
||||
case KONSINYASI = 'Titip jual';
|
||||
case VOLUME = 'Komitmen volume';
|
||||
case SEMI_KONTRAK = 'Semi-kontrak';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::BEBAS => 'Bebas/tidak terikat',
|
||||
self::LANGGANAN => 'Langganan tetap',
|
||||
self::HUTANG => 'Berbasis hutang/pinjaman',
|
||||
self::KONSINYASI => 'Titip jual (konsinyasi)',
|
||||
self::VOLUME => 'Komitmen volume',
|
||||
self::SEMI_KONTRAK => 'Semi-kontrak',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
|
||||
public function description(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::BEBAS => 'Petani bebas menjual kepada koperasi atau pihak lain tanpa ikatan.',
|
||||
self::LANGGANAN => 'Petani rutin menjual kepada koperasi tanpa perjanjian formal.',
|
||||
self::HUTANG => 'Petani menjual kepada koperasi karena memiliki pinjaman.',
|
||||
self::KONSINYASI => 'Petani dibayar setelah hasil panen terjual.',
|
||||
self::VOLUME => 'Ada kesepakatan volume yang dipenuhi secara berkala.',
|
||||
self::SEMI_KONTRAK => 'Ada kesepakatan harga, volume, dan waktu penyerahan.',
|
||||
self::LAINNYA => '',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum JawabanYaTidakKoperasi: string
|
||||
{
|
||||
case YA = 'Ya';
|
||||
case TIDAK = 'Tidak';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::YA => 'Ya',
|
||||
self::TIDAK => 'Tidak',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum JenisKoperasi: string
|
||||
{
|
||||
case PRODUKSI = 'Koperasi Produksi';
|
||||
case SIMPAN_PINJAM = 'Koperasi Simpan Pinjam';
|
||||
case PEMASARAN = 'Koperasi Pemasaran';
|
||||
case DESA = 'Koperasi Desa';
|
||||
case LAINNYA = 'Lainnya';
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum KetersediaanKoperasi: string
|
||||
{
|
||||
case ADA = 'Ada';
|
||||
case TIDAK_ADA = 'Tidak ada';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::ADA => 'Ada',
|
||||
self::TIDAK_ADA => 'Tidak ada',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum KomoditasAgregasiKoperasi: string
|
||||
{
|
||||
case KOPI = 'Kopi';
|
||||
case KAKAO = 'Kakao';
|
||||
case VANILI = 'Vanili';
|
||||
case KEMIRI = 'Kemiri';
|
||||
case LAINNYA = 'Lainnya';
|
||||
case TIDAK_TERLIBAT = 'Tidak terlibat';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::KOPI => 'Kopi',
|
||||
self::KAKAO => 'Kakao',
|
||||
self::VANILI => 'Vanili',
|
||||
self::KEMIRI => 'Kemiri',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
self::TIDAK_TERLIBAT => 'Tidak melakukan agregasi',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum LayananKoperasi: string
|
||||
{
|
||||
case SIMPAN_PINJAM = 'Simpan pinjam';
|
||||
case INPUT_PRODUKSI = 'Pengadaan input produksi';
|
||||
case PEMASARAN = 'Pemasaran hasil';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SIMPAN_PINJAM => 'Simpan pinjam',
|
||||
self::INPUT_PRODUKSI => 'Pengadaan input produksi',
|
||||
self::PEMASARAN => 'Pemasaran hasil',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum MekanismePembayaranKoperasi: string
|
||||
{
|
||||
case TUNAI = 'Tunai';
|
||||
case TEMPO = 'Tempo';
|
||||
case CAMPURAN = 'Campuran';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TUNAI => 'Tunai langsung',
|
||||
self::TEMPO => 'Tempo/dibayar kemudian',
|
||||
self::CAMPURAN => 'Campuran, tergantung situasi',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum ModelFermentasiKoperasi: string
|
||||
{
|
||||
case INDIVIDUAL = 'Individual';
|
||||
case KOLEKTIF = 'Kolektif';
|
||||
case UNIT_DESA = 'Unit desa';
|
||||
case CAMPURAN = 'Campuran';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::INDIVIDUAL => 'Individual',
|
||||
self::KOLEKTIF => 'Kolektif kelompok',
|
||||
self::UNIT_DESA => 'Unit pengolah desa',
|
||||
self::CAMPURAN => 'Campuran',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum PenetapanHargaKoperasi: string
|
||||
{
|
||||
case PASAR = 'Ikut pasar';
|
||||
case BIAYA = 'Kalkulasi biaya';
|
||||
case OFFTAKER = 'Harga offtaker';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PASAR => 'Mengikuti harga pasar/tengkulak setempat',
|
||||
self::BIAYA => 'Kalkulasi biaya koperasi',
|
||||
self::OFFTAKER => 'Mengikuti harga offtaker/mitra',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum PeranRantaiNilaiKoperasi: string
|
||||
{
|
||||
case INPUT = 'Penyediaan input';
|
||||
case AGREGASI = 'Agregasi';
|
||||
case PEMASARAN_MENTAH = 'Pemasaran mentah';
|
||||
case PENGOLAHAN = 'Pengolahan barang jadi';
|
||||
case PEMASARAN_OLAHAN = 'Pemasaran olahan';
|
||||
case PENJUALAN_LANGSUNG = 'Jual langsung konsumen';
|
||||
case TIDAK_TERLIBAT = 'Tidak terlibat kegiatan di atas';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::INPUT => 'Penyediaan input pertanian (pupuk, bibit, dan lainnya)',
|
||||
self::AGREGASI => 'Agregasi produk pertanian dan perkebunan',
|
||||
self::PEMASARAN_MENTAH => 'Pemasaran produk mentah',
|
||||
self::PENGOLAHAN => 'Pengolahan produk pangan setengah jadi/jadi',
|
||||
self::PEMASARAN_OLAHAN => 'Pemasaran produk olahan',
|
||||
self::PENJUALAN_LANGSUNG => 'Penjualan langsung ke konsumen',
|
||||
self::TIDAK_TERLIBAT => 'Tidak terlibat',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum PerjanjianPetaniKoperasi: string
|
||||
{
|
||||
case TERTULIS = 'Tertulis';
|
||||
case LISAN = 'Lisan';
|
||||
case TIDAK_ADA = 'Tidak ada';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TERTULIS => 'Ada, tertulis',
|
||||
self::LISAN => 'Ada, kesepakatan lisan',
|
||||
self::TIDAK_ADA => 'Tidak ada perjanjian',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum PraktikFermentasiKoperasi: string
|
||||
{
|
||||
case RUTIN = 'Ya rutin';
|
||||
case PERNAH = 'Pernah coba';
|
||||
case DIRENCANAKAN = 'Belum, direncakan';
|
||||
case TIDAK_DIRENCANAKAN = 'Belum, tidak';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::RUTIN => 'Ya, rutin',
|
||||
self::PERNAH => 'Pernah mencoba',
|
||||
self::DIRENCANAKAN => 'Belum pernah, direncanakan',
|
||||
self::TIDAK_DIRENCANAKAN => 'Belum pernah, tidak direncanakan',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum PraktikPengeringanKoperasi: string
|
||||
{
|
||||
case RUTIN = 'Ya rutin';
|
||||
case KADANG = 'Kadang';
|
||||
case TIDAK = 'Tidak';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::RUTIN => 'Ya, rutin',
|
||||
self::KADANG => 'Kadang-kadang',
|
||||
self::TIDAK => 'Tidak pernah',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum PraktikSortasiKoperasi: string
|
||||
{
|
||||
case RUTIN = 'Ya rutin';
|
||||
case TIDAK_KONSISTEN = 'Ya tidak konsisten';
|
||||
case BELUM = 'Belum pernah';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::RUTIN => 'Ya, rutin berstandar',
|
||||
self::TIDAK_KONSISTEN => 'Ya, tidak konsisten',
|
||||
self::BELUM => 'Belum pernah',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum SkalaOperasiKoperasi: string
|
||||
{
|
||||
case LEVEL_DUSUN = 'Level Dusun';
|
||||
case LINTAS_DUSUN = 'Lintas Dusun';
|
||||
case LEVEL_DESA = 'Level Desa';
|
||||
case LINTAS_DESA = 'Lintas Desa';
|
||||
case LEVEL_KECAMATAN = 'Level Kecamatan';
|
||||
case LINTAS_KECAMATAN = 'Lintas Kecamatan';
|
||||
case LEVEL_KABUPATEN = 'Level Kabupaten';
|
||||
case LINTAS_KABUPATEN = 'Lintas Kabupaten';
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum StatusAdArtKoperasi: string
|
||||
{
|
||||
case LENGKAP = 'Ada, lengkap';
|
||||
case TIDAK_LENGKAP = 'Ada tapi tidak lengkap';
|
||||
case TIDAK_ADA = 'Tidak ada';
|
||||
case TIDAK_TAHU = 'Tidak tahu';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::LENGKAP => 'Ada dan lengkap',
|
||||
self::TIDAK_LENGKAP => 'Ada, belum lengkap',
|
||||
self::TIDAK_ADA => 'Tidak ada',
|
||||
self::TIDAK_TAHU => 'Tidak tahu',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum StatusPembukuanKoperasi: string
|
||||
{
|
||||
case SUDAH = 'Sudah';
|
||||
case BELUM = 'Belum ada';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SUDAH => 'Sudah',
|
||||
self::BELUM => 'Belum ada',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum SumberPasokanKoperasi: string
|
||||
{
|
||||
case ANGGOTA = 'Anggota';
|
||||
case NON_ANGGOTA = 'Petani non-anggota';
|
||||
case PENGUMPUL = 'Pengumpul/sub-agen';
|
||||
case CAMPURAN = 'Campuran';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::ANGGOTA => 'Anggota kelompok tani langsung',
|
||||
self::NON_ANGGOTA => 'Petani non-anggota',
|
||||
self::PENGUMPUL => 'Pengumpul/sub-agen desa',
|
||||
self::CAMPURAN => 'Campuran',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum TabKoperasi: int
|
||||
{
|
||||
case KELEMBAGAAN = 1;
|
||||
case RANTAI_NILAI = 2;
|
||||
case SOSIAL_EKONOMI = 3;
|
||||
|
||||
public function slug(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::KELEMBAGAAN => 'kelembagaan-aktor',
|
||||
self::RANTAI_NILAI => 'rantai-nilai-akses-pasar',
|
||||
self::SOSIAL_EKONOMI => 'sosial-ekonomi',
|
||||
};
|
||||
}
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::KELEMBAGAAN => 'Operasional',
|
||||
self::RANTAI_NILAI => 'Rantai Nilai & Akses Pasar',
|
||||
self::SOSIAL_EKONOMI => 'Sosial Ekonomi',
|
||||
};
|
||||
}
|
||||
|
||||
public function icon(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::KELEMBAGAAN => 'clipboard-list',
|
||||
self::RANTAI_NILAI => 'arrows-exchange',
|
||||
self::SOSIAL_EKONOMI => 'heart-handshake',
|
||||
};
|
||||
}
|
||||
|
||||
public function routePrefix(): string
|
||||
{
|
||||
return 'koperasi.pengurus.'.$this->slug();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum TingkatKreditMacetKoperasi: string
|
||||
{
|
||||
case DI_BAWAH_SEPULUH = '<10%';
|
||||
case SEPULUH_DUA_PULUH_LIMA = '10-25%';
|
||||
case DUA_PULUH_LIMA_LIMA_PULUH = '25-50%';
|
||||
case LIMA_PULUH_TUJUH_PULUH_LIMA = '50-75%';
|
||||
case DI_ATAS_TUJUH_PULUH_LIMA = '>75%';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::DI_BAWAH_SEPULUH => 'Di bawah 10%',
|
||||
self::SEPULUH_DUA_PULUH_LIMA => '10–25%',
|
||||
self::DUA_PULUH_LIMA_LIMA_PULUH => '25–50%',
|
||||
self::LIMA_PULUH_TUJUH_PULUH_LIMA => '50–75%',
|
||||
self::DI_ATAS_TUJUH_PULUH_LIMA => 'Di atas 75%',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum TujuanPenjualanKoperasi: string
|
||||
{
|
||||
case OFFTAKER = 'Offtaker/Eksportir';
|
||||
case PEDAGANG = 'Pedagang besar';
|
||||
case KOPERASI = 'Koperasi/BUMDes lain';
|
||||
case ECERAN = 'Eceran';
|
||||
case BELUM_MENJUAL = 'Belum pernah';
|
||||
case LAINNYA = 'Lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::OFFTAKER => 'Offtaker/eksportir langsung',
|
||||
self::PEDAGANG => 'Pedagang besar/pengepul kabupaten',
|
||||
self::KOPERASI => 'Koperasi atau BUMDes lain',
|
||||
self::ECERAN => 'Eceran/pasar lokal',
|
||||
self::BELUM_MENJUAL => 'Belum pernah menjual (disimpan/diproses)',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\Koperasi;
|
||||
|
||||
enum UrutanKoperasi: string
|
||||
{
|
||||
case TERBARU = 'terbaru';
|
||||
case NAMA_ASC = 'nama_asc';
|
||||
case NAMA_DESC = 'nama_desc';
|
||||
case ANGGOTA_DESC = 'anggota_desc';
|
||||
case ANGGOTA_ASC = 'anggota_asc';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TERBARU => 'Urut Terbaru',
|
||||
self::NAMA_ASC => 'Nama A-Z',
|
||||
self::NAMA_DESC => 'Nama Z-A',
|
||||
self::ANGGOTA_DESC => 'Anggota Terbanyak',
|
||||
self::ANGGOTA_ASC => 'Anggota Tersedikit',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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,167 +3,43 @@
|
||||
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}%");
|
||||
return view('koperasi.profil.index', $service->indexData($request->validated()));
|
||||
}
|
||||
|
||||
$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()
|
||||
public function create(PengurusKoperasiService $service)
|
||||
{
|
||||
return view('koperasi.profil.add');
|
||||
return view('koperasi.profil.create', $service->profileViewData());
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
public function edit(PengurusKoperasi $pengurusKoperasi, PengurusKoperasiService $service)
|
||||
{
|
||||
$pengurus = PengurusKoperasi::findOrFail($id);
|
||||
return view('koperasi.profil.edit', compact('pengurus'));
|
||||
return view('koperasi.profil.edit', $service->profileViewData($pengurusKoperasi));
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
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::findOrFail($id);
|
||||
$pengurus->update($validatedData);
|
||||
|
||||
return redirect()->route('koperasi.pengurus.index')
|
||||
->with('success', 'Profil Koperasi berhasil diperbarui!');
|
||||
return redirect()->route('koperasi.pengurus.edit', $pengurusKoperasi)
|
||||
->with('success', 'Profil koperasi berhasil diperbarui.');
|
||||
}
|
||||
|
||||
public function survey(Request $request, $id)
|
||||
public function store(StorePengurusKoperasiRequest $request, PengurusKoperasiService $service)
|
||||
{
|
||||
$pengurus = PengurusKoperasi::findOrFail($id);
|
||||
$step = $request->query('step', 1);
|
||||
$pengurus = $service->createProfile($request->validated(), $request->user()->id);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
public function surveyStore(Request $request, $id)
|
||||
{
|
||||
$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();
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$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::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', $pengurus)
|
||||
->with('success', 'Profil koperasi berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
@@ -172,6 +48,6 @@ class PengurusKoperasiController extends Controller
|
||||
$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]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
class IndexKoperasiTabRequest extends KoperasiTabRequest
|
||||
{
|
||||
public function rules(): array
|
||||
{
|
||||
return ['step' => ['nullable', 'integer', 'in:1,2,3']];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\LayananKoperasi;
|
||||
use App\Enums\Koperasi\StatusAdArtKoperasi;
|
||||
use App\Enums\Koperasi\UrutanKoperasi;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class IndexPengurusKoperasiRequest extends KoperasiRequest
|
||||
{
|
||||
use ValidatesWilayahKoperasi;
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'search' => ['nullable', 'string', 'max:255'],
|
||||
...$this->wilayahRules(),
|
||||
'jenis_koperasi' => ['nullable', 'string', 'max:255'],
|
||||
'layanan' => ['nullable', Rule::enum(LayananKoperasi::class)],
|
||||
'ad_art' => ['nullable', Rule::enum(StatusAdArtKoperasi::class)],
|
||||
'sort_by' => ['nullable', Rule::enum(UrutanKoperasi::class)],
|
||||
'per_page' => ['nullable', 'integer', 'in:10,25'],
|
||||
];
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
...$this->wilayahAttributes(),
|
||||
'search' => 'Pencarian', 'jenis_koperasi' => 'Jenis Koperasi', 'layanan' => 'Layanan Utama',
|
||||
'ad_art' => 'Dokumen Kelembagaan', 'sort_by' => 'Urutan Data', 'per_page' => 'Jumlah data per halaman',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Services\Koperasi\PengurusKoperasiService;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rules\Enum as EnumRule;
|
||||
|
||||
abstract class KoperasiRequest extends FormRequest
|
||||
{
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
$values = [];
|
||||
foreach (PengurusKoperasiService::RUPIAH_FIELDS as $field) {
|
||||
if ($this->exists($field)) {
|
||||
$values[$field] = PengurusKoperasiService::normalizeRupiah($this->input($field));
|
||||
}
|
||||
}
|
||||
$this->merge($values);
|
||||
}
|
||||
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'required' => ':attribute wajib diisi.',
|
||||
'exists' => 'Pilihan :attribute tidak ditemukan.',
|
||||
'prohibited' => ':attribute belum tersedia.',
|
||||
'string' => ':attribute harus berupa teks.',
|
||||
'max.string' => ':attribute maksimal :max karakter.',
|
||||
'integer' => ':attribute harus berupa bilangan bulat.',
|
||||
'numeric' => ':attribute harus berupa angka.',
|
||||
'array' => 'Pilihan :attribute tidak valid.',
|
||||
'in' => 'Pilihan :attribute tidak valid.',
|
||||
'min.numeric' => ':attribute minimal :min.',
|
||||
'max.numeric' => ':attribute maksimal :max.',
|
||||
EnumRule::class => 'Pilihan :attribute tidak valid.',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Models\Koperasi\PengurusKoperasi;
|
||||
|
||||
abstract class KoperasiTabRequest extends KoperasiRequest
|
||||
{
|
||||
public function authorize(): bool
|
||||
{
|
||||
$pengurus = $this->route('pengurusKoperasi');
|
||||
|
||||
return $pengurus instanceof PengurusKoperasi && $pengurus->profilLengkap();
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
$attributes = [];
|
||||
foreach (array_keys($this->rules()) as $field) {
|
||||
$attributes[$field] = ucfirst(str_replace(['_', '.*'], [' ', ''], $field));
|
||||
}
|
||||
|
||||
return $attributes;
|
||||
}
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
|
||||
// Checkbox yang dikosongkan harus menghapus pilihan yang sebelumnya tersimpan.
|
||||
foreach ($this->rules() as $field => $rules) {
|
||||
if (in_array('array', $rules, true) && ! $this->exists($field)) {
|
||||
$this->merge([$field => []]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\BagianOperasionalKoperasi;
|
||||
use App\Enums\Koperasi\EfektivitasSanksiKoperasi;
|
||||
use App\Enums\Koperasi\FaktorManajemenKoperasi;
|
||||
use App\Enums\Koperasi\FasilitasKoperasi;
|
||||
use App\Enums\Koperasi\FormatPembukuanKoperasi;
|
||||
use App\Enums\Koperasi\FrekuensiPertemuanKoperasi;
|
||||
use App\Enums\Koperasi\JawabanYaTidakKoperasi;
|
||||
use App\Enums\Koperasi\KetersediaanKoperasi;
|
||||
use App\Enums\Koperasi\KomoditasAgregasiKoperasi;
|
||||
use App\Enums\Koperasi\LayananKoperasi;
|
||||
use App\Enums\Koperasi\ModelFermentasiKoperasi;
|
||||
use App\Enums\Koperasi\PeranRantaiNilaiKoperasi;
|
||||
use App\Enums\Koperasi\PraktikFermentasiKoperasi;
|
||||
use App\Enums\Koperasi\PraktikPengeringanKoperasi;
|
||||
use App\Enums\Koperasi\PraktikSortasiKoperasi;
|
||||
use App\Enums\Koperasi\StatusAdArtKoperasi;
|
||||
use App\Enums\Koperasi\StatusPembukuanKoperasi;
|
||||
use App\Enums\Koperasi\TingkatKreditMacetKoperasi;
|
||||
use App\Services\Koperasi\OperasionalKoperasiService;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\Validator;
|
||||
|
||||
class StoreKelembagaanKoperasiRequest extends KoperasiTabRequest
|
||||
{
|
||||
public function section(): ?BagianOperasionalKoperasi
|
||||
{
|
||||
$section = $this->input('section');
|
||||
|
||||
return is_string($section) ? BagianOperasionalKoperasi::tryFrom($section) : null;
|
||||
}
|
||||
|
||||
protected function getRedirectUrl(): string
|
||||
{
|
||||
if ($section = $this->section()) {
|
||||
return route('koperasi.pengurus.kelembagaan-aktor.index', $this->route('pengurusKoperasi')).'#'.$section->fragment();
|
||||
}
|
||||
|
||||
return parent::getRedirectUrl();
|
||||
}
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
$policy = app(OperasionalKoperasiService::class);
|
||||
$data = $policy->normalize($this->all(), $policy->context($this->route('pengurusKoperasi')));
|
||||
if ($section = $this->section()) {
|
||||
$data = array_intersect_key($data, array_flip([...$policy->sectionFields($section), 'section', '_token']));
|
||||
}
|
||||
$this->replace($data);
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
$rules = [
|
||||
'section' => ['nullable', Rule::enum(BagianOperasionalKoperasi::class)],
|
||||
'ad_art' => ['nullable', Rule::enum(StatusAdArtKoperasi::class)],
|
||||
'pelatihan_produksi' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'pelatihan_pascapanen' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'pelatihan_pengolahan' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'pelatihan_keuangan' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'pelatihan_pemasaran' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'status_pembukuan' => ['nullable', Rule::enum(StatusPembukuanKoperasi::class)],
|
||||
'format_pembukuan' => ['nullable', Rule::enum(FormatPembukuanKoperasi::class)],
|
||||
'pertemuan_rutin' => ['nullable', Rule::enum(FrekuensiPertemuanKoperasi::class)],
|
||||
'kasus_kredit_macet' => ['nullable', Rule::enum(TingkatKreditMacetKoperasi::class)],
|
||||
'sanksi_kredit_macet' => ['nullable', Rule::enum(KetersediaanKoperasi::class)],
|
||||
'efektivitas_sanksi' => ['nullable', Rule::enum(EfektivitasSanksiKoperasi::class)],
|
||||
'pengolahan_lanjutan' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'kontrak_offtaker' => ['nullable', Rule::enum(KetersediaanKoperasi::class)],
|
||||
'layanan_koperasi' => ['nullable', 'array'],
|
||||
'layanan_koperasi.*' => [Rule::enum(LayananKoperasi::class)],
|
||||
'faktor_manajemen' => ['nullable', 'array'],
|
||||
'faktor_manajemen.*' => [Rule::enum(FaktorManajemenKoperasi::class)],
|
||||
'keterlibatan_rantai_nilai' => ['nullable', 'array'],
|
||||
'keterlibatan_rantai_nilai.*' => [Rule::enum(PeranRantaiNilaiKoperasi::class)],
|
||||
'agregasi_komoditas' => ['nullable', 'array'],
|
||||
'agregasi_komoditas.*' => [Rule::enum(KomoditasAgregasiKoperasi::class)],
|
||||
'fasilitas_koperasi' => ['nullable', 'array'],
|
||||
'fasilitas_koperasi.*' => [Rule::enum(FasilitasKoperasi::class)],
|
||||
'layanan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'pelatihan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'pertemuan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'faktor_manajemen_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'agregasi_komoditas_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'fasilitas_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'detail_pengolahan_lanjutan' => ['nullable', 'string', 'max:255'],
|
||||
'kontrak_komoditas' => ['nullable', 'string', 'max:255'],
|
||||
'cara_penentuan_harga' => ['nullable', 'string'],
|
||||
'tahun_ad_art' => ['nullable', 'integer', 'min:1900', 'max:'.now()->year],
|
||||
'praktik_sortasi' => ['nullable', Rule::enum(PraktikSortasiKoperasi::class)],
|
||||
'standar_sortasi' => ['nullable', 'string', 'max:255'],
|
||||
'praktik_pengeringan' => ['nullable', Rule::enum(PraktikPengeringanKoperasi::class)],
|
||||
'cara_pengeringan' => ['nullable', 'string', 'max:255'],
|
||||
'praktik_fermentasi' => ['nullable', Rule::enum(PraktikFermentasiKoperasi::class)],
|
||||
'model_fermentasi' => ['nullable', 'array'],
|
||||
'model_fermentasi.*' => [Rule::enum(ModelFermentasiKoperasi::class)],
|
||||
'proses_fermentasi' => ['nullable', 'string'],
|
||||
'harga_premium_rupiah' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_premium_persen' => ['nullable', 'integer', 'min:0', 'max:100'],
|
||||
];
|
||||
$policy = app(OperasionalKoperasiService::class);
|
||||
foreach ($policy->requiredFields() as $field) {
|
||||
$rules[$field][] = Rule::requiredIf(fn () => $policy->active($field, $this->all(), $policy->context($this->route('pengurusKoperasi'))));
|
||||
}
|
||||
if ($section = $this->section()) {
|
||||
$fields = $policy->sectionFields($section);
|
||||
$rules = array_filter($rules, fn ($key) => $key === 'section' || in_array(explode('.', $key)[0], $fields, true), ARRAY_FILTER_USE_KEY);
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
public function after(): array
|
||||
{
|
||||
return [function (Validator $validator) {
|
||||
$policy = app(OperasionalKoperasiService::class);
|
||||
foreach ([
|
||||
'keterlibatan_rantai_nilai' => PeranRantaiNilaiKoperasi::TIDAK_TERLIBAT->value,
|
||||
'agregasi_komoditas' => KomoditasAgregasiKoperasi::TIDAK_TERLIBAT->value,
|
||||
] as $field => $exclusive) {
|
||||
$selected = $policy->values($this->input($field));
|
||||
if (in_array($exclusive, $selected, true) && count(array_unique($selected)) > 1) {
|
||||
$validator->errors()->add($field, 'Pilihan tidak terlibat tidak boleh digabungkan dengan pilihan lainnya.');
|
||||
}
|
||||
}
|
||||
if ($this->input('status_pembukuan') === StatusPembukuanKoperasi::SUDAH->value
|
||||
&& $this->input('format_pembukuan') === FormatPembukuanKoperasi::TIDAK_ADA->value) {
|
||||
$validator->errors()->add('format_pembukuan', 'Pilih format pembukuan yang digunakan.');
|
||||
}
|
||||
if (filled($this->input('harga_premium_rupiah')) && filled($this->input('harga_premium_persen'))) {
|
||||
$validator->errors()->add('harga_premium_persen', 'Isi premium harga dalam rupiah atau persen, bukan keduanya.');
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
'section' => 'Bagian form',
|
||||
'layanan_lainnya' => 'Layanan Lainnya',
|
||||
'pelatihan_lainnya' => 'Pelatihan Lainnya',
|
||||
'pertemuan_lainnya' => 'Frekuensi Pertemuan Lainnya',
|
||||
'faktor_manajemen_lainnya' => 'Faktor Pengelolaan Lainnya',
|
||||
'agregasi_komoditas_lainnya' => 'Komoditas Agregasi Lainnya',
|
||||
'fasilitas_lainnya' => 'Fasilitas Lainnya',
|
||||
'detail_pengolahan_lanjutan' => 'Jenis Pengolahan Lanjutan',
|
||||
'kontrak_komoditas' => 'Komoditas dalam Kontrak',
|
||||
'cara_penentuan_harga' => 'Penetapan Harga Beli',
|
||||
'tahun_ad_art' => 'Tahun Pembaruan AD/ART',
|
||||
'ad_art' => 'Status AD/ART',
|
||||
'pelatihan_produksi' => 'Pelatihan Produksi Pertanian',
|
||||
'pelatihan_pascapanen' => 'Pelatihan Pascapanen',
|
||||
'pelatihan_pengolahan' => 'Pelatihan Pengolahan Produk',
|
||||
'pelatihan_keuangan' => 'Pelatihan Keuangan',
|
||||
'pelatihan_pemasaran' => 'Pelatihan Pengemasan dan Pemasaran',
|
||||
'status_pembukuan' => 'Pembukuan Keuangan',
|
||||
'format_pembukuan' => 'Format Pembukuan',
|
||||
'pertemuan_rutin' => 'Frekuensi Pertemuan Anggota',
|
||||
'kasus_kredit_macet' => 'Tingkat Kredit Macet',
|
||||
'sanksi_kredit_macet' => 'Sanksi Kredit Macet',
|
||||
'efektivitas_sanksi' => 'Efektivitas Sanksi',
|
||||
'pengolahan_lanjutan' => 'Pengolahan Lanjutan',
|
||||
'kontrak_offtaker' => 'Kontrak dengan Mitra Pembeli',
|
||||
'layanan_koperasi' => 'Layanan Koperasi',
|
||||
'faktor_manajemen' => 'Faktor Pengelolaan',
|
||||
'keterlibatan_rantai_nilai' => 'Peran dalam Rantai Nilai',
|
||||
'agregasi_komoditas' => 'Komoditas Agregasi',
|
||||
'fasilitas_koperasi' => 'Fasilitas Pascapanen',
|
||||
'layanan_koperasi.*' => 'Layanan Koperasi',
|
||||
'faktor_manajemen.*' => 'Faktor Pengelolaan',
|
||||
'keterlibatan_rantai_nilai.*' => 'Peran dalam Rantai Nilai',
|
||||
'agregasi_komoditas.*' => 'Komoditas Agregasi',
|
||||
'fasilitas_koperasi.*' => 'Fasilitas Pascapanen',
|
||||
'praktik_sortasi' => 'Praktik Sortasi',
|
||||
'standar_sortasi' => 'Standar/Kriteria Sortasi',
|
||||
'praktik_pengeringan' => 'Praktik Pengeringan',
|
||||
'cara_pengeringan' => 'Cara dan Tempat Pengeringan',
|
||||
'praktik_fermentasi' => 'Praktik Fermentasi/Pengepresan',
|
||||
'model_fermentasi' => 'Model Fermentasi',
|
||||
'model_fermentasi.*' => 'Model Fermentasi',
|
||||
'proses_fermentasi' => 'Proses Fermentasi',
|
||||
'harga_premium_rupiah' => 'Premium Harga (Rupiah)',
|
||||
'harga_premium_persen' => 'Premium Harga (Persen)',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\FokusKomoditasKoperasi;
|
||||
use App\Enums\Koperasi\JenisKoperasi;
|
||||
use App\Enums\Koperasi\PosisiKoperasi;
|
||||
use App\Enums\Koperasi\SkalaOperasiKoperasi;
|
||||
use App\Services\Koperasi\WilayahKoperasiService;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class StorePengurusKoperasiRequest extends KoperasiRequest
|
||||
{
|
||||
use ValidatesWilayahKoperasi;
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
if (app(WilayahKoperasiService::class)->available() && $this->exists('provinsi_id') && ! $this->exists('desa_kelurahan_id')) {
|
||||
$this->merge(['desa_kelurahan_id' => null]);
|
||||
}
|
||||
}
|
||||
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
...$this->wilayahRules(true),
|
||||
'nama_lengkap' => ['required', 'string', 'max:255'],
|
||||
'posisi_dalam_koperasi' => ['required', Rule::enum(PosisiKoperasi::class)],
|
||||
'tahun_bergabung' => ['nullable', 'integer'],
|
||||
'no_hp' => ['nullable', 'string', 'max:20'],
|
||||
'alamat_tinggal' => ['nullable', 'string'],
|
||||
'nama_koperasi' => ['required', 'string', 'max:255'],
|
||||
'jenis_koperasi' => ['required', Rule::enum(JenisKoperasi::class)],
|
||||
'jenis_koperasi_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'alamat_koperasi' => ['nullable', 'string'],
|
||||
'sejarah_lembaga' => ['nullable', 'string'],
|
||||
'fokus_komoditas' => ['nullable', Rule::enum(FokusKomoditasKoperasi::class)],
|
||||
'detail_fokus_komoditas' => ['nullable', 'string', 'max:255'],
|
||||
'skala_operasi' => ['required', Rule::enum(SkalaOperasiKoperasi::class)],
|
||||
'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'],
|
||||
];
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
...$this->wilayahAttributes(),
|
||||
'nama_lengkap' => 'Nama responden',
|
||||
'posisi_dalam_koperasi' => 'Posisi dalam koperasi',
|
||||
'tahun_bergabung' => 'Tahun bergabung koperasi',
|
||||
'no_hp' => 'Nomor HP',
|
||||
'alamat_tinggal' => 'Alamat tinggal',
|
||||
'nama_koperasi' => 'Nama koperasi',
|
||||
'jenis_koperasi' => 'Jenis koperasi',
|
||||
'jenis_koperasi_lainnya' => 'Jenis koperasi lainnya',
|
||||
'alamat_koperasi' => 'Alamat koperasi',
|
||||
'sejarah_lembaga' => 'Sejarah dan tujuan pendirian',
|
||||
'fokus_komoditas' => 'Fokus komoditas pertanian',
|
||||
'detail_fokus_komoditas' => 'Komoditas yang dikembangkan',
|
||||
'skala_operasi' => 'Skala operasi koperasi',
|
||||
'tahun_berdiri' => 'Tahun berdiri',
|
||||
'jumlah_anggota_awal' => 'Jumlah anggota awal berdiri',
|
||||
'jumlah_anggota_dewasa' => 'Jumlah anggota dewasa',
|
||||
'jumlah_anggota_anak' => 'Jumlah anggota anak',
|
||||
'jumlah_pengurus' => 'Jumlah pengurus',
|
||||
'shu_2025' => 'SHU 2025',
|
||||
'shu_2024' => 'SHU 2024',
|
||||
'shu_2023' => 'SHU 2023',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\BagianRantaiNilaiKoperasi;
|
||||
use App\Enums\Koperasi\BentukProdukKoperasi;
|
||||
use App\Enums\Koperasi\HubunganPemasokKoperasi;
|
||||
use App\Enums\Koperasi\MekanismePembayaranKoperasi;
|
||||
use App\Enums\Koperasi\PenetapanHargaKoperasi;
|
||||
use App\Enums\Koperasi\PerjanjianPetaniKoperasi;
|
||||
use App\Enums\Koperasi\SumberPasokanKoperasi;
|
||||
use App\Enums\Koperasi\TujuanPenjualanKoperasi;
|
||||
use App\Services\Koperasi\RantaiNilaiKoperasiService;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\Validator;
|
||||
|
||||
class StoreRantaiNilaiKoperasiRequest extends KoperasiTabRequest
|
||||
{
|
||||
public function section(): ?BagianRantaiNilaiKoperasi
|
||||
{
|
||||
$section = $this->input('section');
|
||||
|
||||
return is_string($section) ? BagianRantaiNilaiKoperasi::tryFrom($section) : null;
|
||||
}
|
||||
|
||||
protected function getRedirectUrl(): string
|
||||
{
|
||||
if ($section = $this->section()) {
|
||||
return route('koperasi.pengurus.rantai-nilai-akses-pasar.index', $this->route('pengurusKoperasi')).'#'.$section->fragment();
|
||||
}
|
||||
|
||||
return parent::getRedirectUrl();
|
||||
}
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
$policy = app(RantaiNilaiKoperasiService::class);
|
||||
$data = $policy->normalize($this->all(), []);
|
||||
if ($section = $this->section()) {
|
||||
$data = array_intersect_key($data, array_flip([...$policy->sectionFields($section), 'section', '_token']));
|
||||
}
|
||||
$this->replace($data);
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
$rules = [
|
||||
'section' => ['nullable', Rule::enum(BagianRantaiNilaiKoperasi::class)],
|
||||
'mekanisme_pembayaran' => ['nullable', Rule::enum(MekanismePembayaranKoperasi::class)],
|
||||
'status_perjanjian_tertulis' => ['nullable', Rule::enum(PerjanjianPetaniKoperasi::class)],
|
||||
'sumber_pasokan' => ['nullable', 'array'],
|
||||
'sumber_pasokan.*' => [Rule::enum(SumberPasokanKoperasi::class)],
|
||||
'bentuk_pembelian' => ['nullable', 'array'],
|
||||
'bentuk_pembelian.*' => [Rule::enum(BentukProdukKoperasi::class)],
|
||||
'tujuan_penjualan' => ['nullable', 'array'],
|
||||
'tujuan_penjualan.*' => [Rule::enum(TujuanPenjualanKoperasi::class)],
|
||||
'bentuk_penjualan' => ['nullable', 'array'],
|
||||
'bentuk_penjualan.*' => [Rule::enum(BentukProdukKoperasi::class)],
|
||||
'sifat_hubungan_bisnis' => ['nullable', 'array'],
|
||||
'sifat_hubungan_bisnis.*' => [Rule::enum(HubunganPemasokKoperasi::class)],
|
||||
'cara_menetapkan_harga_pasar' => ['nullable', 'array'],
|
||||
'cara_menetapkan_harga_pasar.*' => [Rule::enum(PenetapanHargaKoperasi::class)],
|
||||
'sumber_pasokan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'tujuan_penjualan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'sifat_hubungan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'cara_menetapkan_harga_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'volume_beli_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_jual_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_segar_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_basah_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_kering_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_fermentasi_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_beli_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_jual_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_segar_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_basah_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_kering_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_fermentasi_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_beli_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_jual_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_segar_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_basah_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_kering_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_fermentasi_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
];
|
||||
$policy = app(RantaiNilaiKoperasiService::class);
|
||||
foreach ($policy->requiredFields() as $field) {
|
||||
$rules[$field][] = Rule::requiredIf(fn () => $policy->active($field, $this->all(), []));
|
||||
}
|
||||
if ($section = $this->section()) {
|
||||
$fields = $policy->sectionFields($section);
|
||||
$rules = array_filter($rules, fn ($key) => $key === 'section' || in_array(explode('.', $key)[0], $fields, true), ARRAY_FILTER_USE_KEY);
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
public function after(): array
|
||||
{
|
||||
return [function (Validator $validator) {
|
||||
if ($this->section() === BagianRantaiNilaiKoperasi::HARGA) {
|
||||
return;
|
||||
}
|
||||
$selected = app(RantaiNilaiKoperasiService::class)->values($this->input('tujuan_penjualan'));
|
||||
if (in_array(TujuanPenjualanKoperasi::BELUM_MENJUAL->value, $selected, true) && count(array_unique($selected)) > 1) {
|
||||
$validator->errors()->add('tujuan_penjualan', 'Pilihan belum pernah menjual tidak boleh digabungkan dengan tujuan penjualan lainnya.');
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
'section' => 'Bagian form',
|
||||
'sumber_pasokan' => 'Sumber Pasokan',
|
||||
'sumber_pasokan_lainnya' => 'Sumber Pasokan Lainnya',
|
||||
'bentuk_pembelian' => 'Bentuk Produk yang Dibeli',
|
||||
'tujuan_penjualan' => 'Tujuan Penjualan',
|
||||
'tujuan_penjualan_lainnya' => 'Tujuan Penjualan Lainnya',
|
||||
'bentuk_penjualan' => 'Bentuk Produk yang Dijual',
|
||||
'sifat_hubungan_bisnis' => 'Hubungan dengan Petani Pemasok',
|
||||
'sifat_hubungan_lainnya' => 'Hubungan Pemasok Lainnya',
|
||||
'mekanisme_pembayaran' => 'Mekanisme Pembayaran kepada Petani',
|
||||
'status_perjanjian_tertulis' => 'Perjanjian Sebelum Pembelian',
|
||||
'cara_menetapkan_harga_pasar' => 'Penetapan Harga Beli',
|
||||
'cara_menetapkan_harga_lainnya' => 'Penetapan Harga Lainnya',
|
||||
'sumber_pasokan.*' => 'Sumber Pasokan',
|
||||
'bentuk_pembelian.*' => 'Bentuk Produk yang Dibeli',
|
||||
'tujuan_penjualan.*' => 'Tujuan Penjualan',
|
||||
'bentuk_penjualan.*' => 'Bentuk Produk yang Dijual',
|
||||
'sifat_hubungan_bisnis.*' => 'Hubungan dengan Petani Pemasok',
|
||||
'cara_menetapkan_harga_pasar.*' => 'Penetapan Harga Beli',
|
||||
'volume_beli_sekarang' => 'Volume Pembelian Panen Terakhir',
|
||||
'volume_jual_sekarang' => 'Volume Penjualan Panen Terakhir',
|
||||
'harga_segar_sekarang' => 'Harga Buah Segar Panen Terakhir',
|
||||
'harga_basah_sekarang' => 'Harga Biji Basah Panen Terakhir',
|
||||
'harga_kering_sekarang' => 'Harga Biji Kering/Kupas Panen Terakhir',
|
||||
'harga_fermentasi_sekarang' => 'Harga Produk Terfermentasi Panen Terakhir',
|
||||
'volume_beli_1_tahun' => 'Volume Pembelian Tahun Lalu',
|
||||
'volume_jual_1_tahun' => 'Volume Penjualan Tahun Lalu',
|
||||
'harga_segar_1_tahun' => 'Harga Buah Segar Tahun Lalu',
|
||||
'harga_basah_1_tahun' => 'Harga Biji Basah Tahun Lalu',
|
||||
'harga_kering_1_tahun' => 'Harga Biji Kering/Kupas Tahun Lalu',
|
||||
'harga_fermentasi_1_tahun' => 'Harga Produk Terfermentasi Tahun Lalu',
|
||||
'volume_beli_2_tahun' => 'Volume Pembelian Dua Tahun Lalu',
|
||||
'volume_jual_2_tahun' => 'Volume Penjualan Dua Tahun Lalu',
|
||||
'harga_segar_2_tahun' => 'Harga Buah Segar Dua Tahun Lalu',
|
||||
'harga_basah_2_tahun' => 'Harga Biji Basah Dua Tahun Lalu',
|
||||
'harga_kering_2_tahun' => 'Harga Biji Kering/Kupas Dua Tahun Lalu',
|
||||
'harga_fermentasi_2_tahun' => 'Harga Produk Terfermentasi Dua Tahun Lalu',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\AlasanPinjamanKoperasi;
|
||||
use App\Enums\Koperasi\BentukPembayaranKoperasi;
|
||||
use App\Enums\Koperasi\JawabanYaTidakKoperasi;
|
||||
use App\Enums\Koperasi\KetersediaanKoperasi;
|
||||
use App\Services\Koperasi\SosialEkonomiKoperasiService;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class StoreSosialEkonomiKoperasiRequest extends KoperasiTabRequest
|
||||
{
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
$policy = app(SosialEkonomiKoperasiService::class);
|
||||
$this->merge($policy->normalize($this->all(), $policy->context($this->route('pengurusKoperasi'))));
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
$rules = [
|
||||
'momen_simpanan_terbesar' => ['nullable', 'string', 'max:255'],
|
||||
'alasan_pinjaman_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'pembayaran_selain_uang' => ['nullable', Rule::enum(KetersediaanKoperasi::class)],
|
||||
'bentuk_pembayaran_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'perhitungan_harga_pasar' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'alasan_bukan_harga_pasar' => ['nullable', 'string'],
|
||||
'alasan_pinjaman' => ['nullable', 'array'],
|
||||
'alasan_pinjaman.*' => [Rule::enum(AlasanPinjamanKoperasi::class)],
|
||||
'bentuk_pembayaran_barang' => ['nullable', 'array'],
|
||||
'bentuk_pembayaran_barang.*' => [Rule::enum(BentukPembayaranKoperasi::class)],
|
||||
'simpanan_terbesar' => ['nullable', 'integer', 'min:0'],
|
||||
];
|
||||
$policy = app(SosialEkonomiKoperasiService::class);
|
||||
foreach ($policy->requiredFields() as $field) {
|
||||
$rules[$field][] = Rule::requiredIf(fn () => $policy->active($field, $this->all(), $policy->context($this->route('pengurusKoperasi'))));
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
'simpanan_terbesar' => 'Simpanan Wajib Terbesar per Anggota',
|
||||
'momen_simpanan_terbesar' => 'Bulan dan Momen Setoran Lebih Tinggi',
|
||||
'alasan_pinjaman' => 'Keperluan Utama Pinjaman',
|
||||
'alasan_pinjaman.*' => 'Keperluan Utama Pinjaman',
|
||||
'alasan_pinjaman_lainnya' => 'Keperluan Pinjaman Lainnya',
|
||||
'pembayaran_selain_uang' => 'Pembayaran Pinjaman Selain Uang',
|
||||
'bentuk_pembayaran_barang' => 'Bentuk Pembayaran Selain Uang',
|
||||
'bentuk_pembayaran_barang.*' => 'Bentuk Pembayaran Selain Uang',
|
||||
'bentuk_pembayaran_lainnya' => 'Bentuk Pembayaran Lainnya',
|
||||
'perhitungan_harga_pasar' => 'Penilaian Hasil Bumi Sesuai Harga Pasar',
|
||||
'alasan_bukan_harga_pasar' => 'Alasan Tidak Menggunakan Harga Pasar',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
class UpdatePengurusKoperasiRequest extends StorePengurusKoperasiRequest {}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Services\Koperasi\WilayahKoperasiService;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\Validator;
|
||||
|
||||
trait ValidatesWilayahKoperasi
|
||||
{
|
||||
protected function wilayahRules(bool $profile = false): array
|
||||
{
|
||||
$tables = ['kabupaten_kota_id' => 'master_kabupaten_kota', 'kecamatan_id' => 'master_kecamatan', 'desa_kelurahan_id' => 'master_desa_kelurahan'];
|
||||
if ($profile) {
|
||||
$tables = ['provinsi_id' => 'master_provinsi', ...$tables];
|
||||
}
|
||||
$available = app(WilayahKoperasiService::class)->available();
|
||||
$rules = [];
|
||||
foreach ($tables as $field => $table) {
|
||||
$rules[$field] = ['bail', Rule::prohibitedIf(! $available), 'nullable', 'integer', Rule::exists($table, 'id')->whereNull('deleted_at')];
|
||||
if ($profile) {
|
||||
$others = array_diff(array_keys($tables), [$field]);
|
||||
$rules[$field][] = Rule::requiredIf(fn () => collect($others)->contains(fn ($other) => $this->filled($other)));
|
||||
}
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
protected function wilayahAttributes(): array
|
||||
{
|
||||
return ['provinsi_id' => 'Provinsi', 'kabupaten_kota_id' => 'Kabupaten/Kota', 'kecamatan_id' => 'Kecamatan', 'desa_kelurahan_id' => 'Desa/Kelurahan'];
|
||||
}
|
||||
|
||||
public function after(): array
|
||||
{
|
||||
return [function (Validator $validator) {
|
||||
$labels = $this->wilayahAttributes();
|
||||
if ($validator->errors()->hasAny(array_keys($labels))) {
|
||||
return;
|
||||
}
|
||||
foreach ([
|
||||
['kabupaten_kota_id', 'provinsi_id', 'master_kabupaten_kota'],
|
||||
['kecamatan_id', 'kabupaten_kota_id', 'master_kecamatan'],
|
||||
['desa_kelurahan_id', 'kecamatan_id', 'master_desa_kelurahan'],
|
||||
] as [$child, $parent, $table]) {
|
||||
if ($parent === 'provinsi_id' && ! $this instanceof StorePengurusKoperasiRequest) {
|
||||
continue;
|
||||
}
|
||||
if ($this->filled($child) && $this->filled($parent)
|
||||
&& ! DB::table($table)->where('id', $this->input($child))->where($parent, $this->input($parent))->exists()) {
|
||||
$validator->errors()->add($child, 'Pilihan '.$labels[$child].' tidak sesuai dengan '.$labels[$parent].'.');
|
||||
}
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,41 @@
|
||||
|
||||
namespace App\Models\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\AlasanPinjamanKoperasi;
|
||||
use App\Enums\Koperasi\BentukPembayaranKoperasi;
|
||||
use App\Enums\Koperasi\BentukProdukKoperasi;
|
||||
use App\Enums\Koperasi\EfektivitasSanksiKoperasi;
|
||||
use App\Enums\Koperasi\FaktorManajemenKoperasi;
|
||||
use App\Enums\Koperasi\FasilitasKoperasi;
|
||||
use App\Enums\Koperasi\FokusKomoditasKoperasi;
|
||||
use App\Enums\Koperasi\FormatPembukuanKoperasi;
|
||||
use App\Enums\Koperasi\FrekuensiPertemuanKoperasi;
|
||||
use App\Enums\Koperasi\HubunganPemasokKoperasi;
|
||||
use App\Enums\Koperasi\JawabanYaTidakKoperasi;
|
||||
use App\Enums\Koperasi\KetersediaanKoperasi;
|
||||
use App\Enums\Koperasi\KomoditasAgregasiKoperasi;
|
||||
use App\Enums\Koperasi\LayananKoperasi;
|
||||
use App\Enums\Koperasi\MekanismePembayaranKoperasi;
|
||||
use App\Enums\Koperasi\ModelFermentasiKoperasi;
|
||||
use App\Enums\Koperasi\PenetapanHargaKoperasi;
|
||||
use App\Enums\Koperasi\PeranRantaiNilaiKoperasi;
|
||||
use App\Enums\Koperasi\PerjanjianPetaniKoperasi;
|
||||
use App\Enums\Koperasi\PosisiKoperasi;
|
||||
use App\Enums\Koperasi\PraktikFermentasiKoperasi;
|
||||
use App\Enums\Koperasi\PraktikPengeringanKoperasi;
|
||||
use App\Enums\Koperasi\PraktikSortasiKoperasi;
|
||||
use App\Enums\Koperasi\SkalaOperasiKoperasi;
|
||||
use App\Enums\Koperasi\StatusAdArtKoperasi;
|
||||
use App\Enums\Koperasi\StatusPembukuanKoperasi;
|
||||
use App\Enums\Koperasi\SumberPasokanKoperasi;
|
||||
use App\Enums\Koperasi\TingkatKreditMacetKoperasi;
|
||||
use App\Enums\Koperasi\TujuanPenjualanKoperasi;
|
||||
use App\Models\Concerns\CatatAktivitas;
|
||||
use App\Models\User;
|
||||
use App\Models\Wilayah\DesaKelurahan;
|
||||
use Illuminate\Database\Eloquent\Casts\AsEnumCollection;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class PengurusKoperasi extends Model
|
||||
{
|
||||
@@ -12,12 +45,12 @@ class PengurusKoperasi extends Model
|
||||
protected $table = 'pengurus_koperasi';
|
||||
|
||||
protected $fillable = [
|
||||
// Profil Dassar
|
||||
// Profil responden
|
||||
'nama_lengkap', 'posisi_dalam_koperasi', 'tahun_bergabung',
|
||||
'no_hp', 'alamat_tinggal',
|
||||
|
||||
// Profil Koperasi
|
||||
'nama_koperasi', 'jenis_koperasi', 'alamat_koperasi',
|
||||
'nama_koperasi', 'jenis_koperasi', 'alamat_koperasi', 'desa_kelurahan_id', 'created_by',
|
||||
'skala_operasi', 'tahun_berdiri',
|
||||
|
||||
// Anggota & Pengurus
|
||||
@@ -63,6 +96,67 @@ class PengurusKoperasi extends Model
|
||||
'bentuk_pembayaran_barang', 'bentuk_pembayaran_lainnya', 'perhitungan_harga_pasar', 'alasan_bukan_harga_pasar',
|
||||
|
||||
// PENILAIAN ENUMERATOR
|
||||
'enum_potensi', 'enum_alasan_potensi', 'enum_kebutuhan', 'enum_kebutuhan_lain', 'enum_keterbukaan'
|
||||
'enum_potensi', 'enum_alasan_potensi', 'enum_kebutuhan', 'enum_kebutuhan_lain', 'enum_keterbukaan',
|
||||
];
|
||||
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'alasan_pinjaman' => AsEnumCollection::of(AlasanPinjamanKoperasi::class),
|
||||
'bentuk_pembayaran_barang' => AsEnumCollection::of(BentukPembayaranKoperasi::class),
|
||||
'pembayaran_selain_uang' => KetersediaanKoperasi::class,
|
||||
'perhitungan_harga_pasar' => JawabanYaTidakKoperasi::class,
|
||||
'posisi_dalam_koperasi' => PosisiKoperasi::class,
|
||||
'skala_operasi' => SkalaOperasiKoperasi::class,
|
||||
'fokus_komoditas' => FokusKomoditasKoperasi::class,
|
||||
'mekanisme_pembayaran' => MekanismePembayaranKoperasi::class,
|
||||
'status_perjanjian_tertulis' => PerjanjianPetaniKoperasi::class,
|
||||
'praktik_sortasi' => PraktikSortasiKoperasi::class,
|
||||
'praktik_pengeringan' => PraktikPengeringanKoperasi::class,
|
||||
'praktik_fermentasi' => PraktikFermentasiKoperasi::class,
|
||||
'sumber_pasokan' => AsEnumCollection::of(SumberPasokanKoperasi::class),
|
||||
'bentuk_pembelian' => AsEnumCollection::of(BentukProdukKoperasi::class),
|
||||
'tujuan_penjualan' => AsEnumCollection::of(TujuanPenjualanKoperasi::class),
|
||||
'bentuk_penjualan' => AsEnumCollection::of(BentukProdukKoperasi::class),
|
||||
'sifat_hubungan_bisnis' => AsEnumCollection::of(HubunganPemasokKoperasi::class),
|
||||
'cara_menetapkan_harga_pasar' => AsEnumCollection::of(PenetapanHargaKoperasi::class),
|
||||
'model_fermentasi' => AsEnumCollection::of(ModelFermentasiKoperasi::class),
|
||||
'ad_art' => StatusAdArtKoperasi::class,
|
||||
'pelatihan_produksi' => JawabanYaTidakKoperasi::class,
|
||||
'pelatihan_pascapanen' => JawabanYaTidakKoperasi::class,
|
||||
'pelatihan_pengolahan' => JawabanYaTidakKoperasi::class,
|
||||
'pelatihan_keuangan' => JawabanYaTidakKoperasi::class,
|
||||
'pelatihan_pemasaran' => JawabanYaTidakKoperasi::class,
|
||||
'status_pembukuan' => StatusPembukuanKoperasi::class,
|
||||
'format_pembukuan' => FormatPembukuanKoperasi::class,
|
||||
'pertemuan_rutin' => FrekuensiPertemuanKoperasi::class,
|
||||
'kasus_kredit_macet' => TingkatKreditMacetKoperasi::class,
|
||||
'sanksi_kredit_macet' => KetersediaanKoperasi::class,
|
||||
'efektivitas_sanksi' => EfektivitasSanksiKoperasi::class,
|
||||
'pengolahan_lanjutan' => JawabanYaTidakKoperasi::class,
|
||||
'kontrak_offtaker' => KetersediaanKoperasi::class,
|
||||
'layanan_koperasi' => AsEnumCollection::of(LayananKoperasi::class),
|
||||
'faktor_manajemen' => AsEnumCollection::of(FaktorManajemenKoperasi::class),
|
||||
'keterlibatan_rantai_nilai' => AsEnumCollection::of(PeranRantaiNilaiKoperasi::class),
|
||||
'agregasi_komoditas' => AsEnumCollection::of(KomoditasAgregasiKoperasi::class),
|
||||
'fasilitas_koperasi' => AsEnumCollection::of(FasilitasKoperasi::class),
|
||||
];
|
||||
}
|
||||
|
||||
public function profilLengkap(): bool
|
||||
{
|
||||
return $this->exists && collect([
|
||||
'nama_lengkap', 'posisi_dalam_koperasi', 'nama_koperasi', 'jenis_koperasi', 'skala_operasi',
|
||||
])->every(fn ($field) => filled($this->getAttributes()[$field] ?? null));
|
||||
}
|
||||
|
||||
public function creator(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(User::class, 'created_by');
|
||||
}
|
||||
|
||||
public function desaKelurahan(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(DesaKelurahan::class, 'desa_kelurahan_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Koperasi;
|
||||
|
||||
use App\Models\Koperasi\PengurusKoperasi;
|
||||
use BackedEnum;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
abstract class KoperasiSurveyService
|
||||
{
|
||||
abstract public function dependencies(): array;
|
||||
|
||||
public function context(?PengurusKoperasi $model): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
public function requiredFields(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
protected function arrayFields(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
public function values(mixed $value): array
|
||||
{
|
||||
if ($value instanceof Collection) {
|
||||
$value = $value->all();
|
||||
} elseif (is_string($value)) {
|
||||
$decoded = json_decode($value, true);
|
||||
$value = is_array($decoded) ? $decoded : [$value];
|
||||
}
|
||||
$values = array_map(fn ($item) => $item instanceof BackedEnum ? $item->value : $item, is_array($value) ? $value : [$value]);
|
||||
|
||||
return array_values(array_filter($values, fn ($item) => is_string($item) && $item !== ''));
|
||||
}
|
||||
|
||||
protected function matches(array $condition, array $data, array $context): bool
|
||||
{
|
||||
if (isset($condition['any'])) {
|
||||
foreach ($condition['any'] as $option) {
|
||||
if ($this->matches($option, $data, $context)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
$parent = $condition['field'];
|
||||
if ($condition['source'] === 'profile') {
|
||||
$selected = $this->values($context[$parent] ?? null);
|
||||
} else {
|
||||
if (! $this->active($parent, $data, $context)) {
|
||||
return false;
|
||||
}
|
||||
$selected = $this->values($data[$parent] ?? null);
|
||||
}
|
||||
|
||||
return (bool) array_intersect($selected, $condition['values']);
|
||||
}
|
||||
|
||||
public function active(string $field, array $data, array $context): bool
|
||||
{
|
||||
foreach ($this->dependencies()[$field] ?? [] as $condition) {
|
||||
if (! $this->matches($condition, $data, $context)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function normalize(array $data, array $context): array
|
||||
{
|
||||
foreach (array_keys($this->dependencies()) as $field) {
|
||||
if (! $this->active($field, $data, $context)) {
|
||||
$data[$field] = in_array($field, $this->arrayFields(), true) ? [] : null;
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\BagianOperasionalKoperasi;
|
||||
use App\Enums\Koperasi\FaktorManajemenKoperasi;
|
||||
use App\Enums\Koperasi\FasilitasKoperasi;
|
||||
use App\Enums\Koperasi\FormatPembukuanKoperasi;
|
||||
use App\Enums\Koperasi\FrekuensiPertemuanKoperasi;
|
||||
use App\Enums\Koperasi\JawabanYaTidakKoperasi;
|
||||
use App\Enums\Koperasi\JenisKoperasi;
|
||||
use App\Enums\Koperasi\KetersediaanKoperasi;
|
||||
use App\Enums\Koperasi\KomoditasAgregasiKoperasi;
|
||||
use App\Enums\Koperasi\LayananKoperasi;
|
||||
use App\Enums\Koperasi\PeranRantaiNilaiKoperasi;
|
||||
use App\Enums\Koperasi\PraktikFermentasiKoperasi;
|
||||
use App\Enums\Koperasi\PraktikPengeringanKoperasi;
|
||||
use App\Enums\Koperasi\PraktikSortasiKoperasi;
|
||||
use App\Enums\Koperasi\StatusAdArtKoperasi;
|
||||
use App\Enums\Koperasi\StatusPembukuanKoperasi;
|
||||
use App\Models\Koperasi\PengurusKoperasi;
|
||||
|
||||
class OperasionalKoperasiService extends KoperasiSurveyService
|
||||
{
|
||||
public function context(?PengurusKoperasi $model): array
|
||||
{
|
||||
return ['jenis_koperasi' => $model?->jenis_koperasi];
|
||||
}
|
||||
|
||||
public function dependencies(): array
|
||||
{
|
||||
$when = fn (string $field, array $values, string $source = 'form') => [
|
||||
'field' => $field, 'values' => $values, 'source' => $source,
|
||||
];
|
||||
$simpanPinjam = $when('jenis_koperasi', [JenisKoperasi::SIMPAN_PINJAM->value], 'profile');
|
||||
$komoditas = array_map(fn ($case) => $case->value, array_filter(
|
||||
KomoditasAgregasiKoperasi::cases(), fn ($case) => $case !== KomoditasAgregasiKoperasi::TIDAK_TERLIBAT,
|
||||
));
|
||||
$agregasi = $when('agregasi_komoditas', $komoditas);
|
||||
|
||||
return [
|
||||
'tahun_ad_art' => [$when('ad_art', [StatusAdArtKoperasi::LENGKAP->value])],
|
||||
'layanan_lainnya' => [$when('layanan_koperasi', [LayananKoperasi::LAINNYA->value])],
|
||||
'format_pembukuan' => [$when('status_pembukuan', [StatusPembukuanKoperasi::SUDAH->value])],
|
||||
'pertemuan_lainnya' => [$when('pertemuan_rutin', [FrekuensiPertemuanKoperasi::LAINNYA->value])],
|
||||
'kasus_kredit_macet' => [$simpanPinjam],
|
||||
'sanksi_kredit_macet' => [$simpanPinjam],
|
||||
'efektivitas_sanksi' => [$simpanPinjam, $when('sanksi_kredit_macet', [KetersediaanKoperasi::ADA->value])],
|
||||
'faktor_manajemen_lainnya' => [$when('faktor_manajemen', [FaktorManajemenKoperasi::LAINNYA->value])],
|
||||
'agregasi_komoditas' => [$when('keterlibatan_rantai_nilai', [PeranRantaiNilaiKoperasi::AGREGASI->value])],
|
||||
'agregasi_komoditas_lainnya' => [$when('agregasi_komoditas', [KomoditasAgregasiKoperasi::LAINNYA->value])],
|
||||
'fasilitas_koperasi' => [$agregasi],
|
||||
'fasilitas_lainnya' => [$when('fasilitas_koperasi', [FasilitasKoperasi::LAINNYA->value])],
|
||||
'pengolahan_lanjutan' => [$agregasi],
|
||||
'detail_pengolahan_lanjutan' => [$when('pengolahan_lanjutan', [JawabanYaTidakKoperasi::YA->value])],
|
||||
'cara_penentuan_harga' => [$agregasi],
|
||||
'kontrak_offtaker' => [$agregasi],
|
||||
'kontrak_komoditas' => [$when('kontrak_offtaker', [KetersediaanKoperasi::ADA->value])],
|
||||
'standar_sortasi' => [$when('praktik_sortasi', [PraktikSortasiKoperasi::RUTIN->value, PraktikSortasiKoperasi::TIDAK_KONSISTEN->value])],
|
||||
'cara_pengeringan' => [$when('praktik_pengeringan', [PraktikPengeringanKoperasi::RUTIN->value, PraktikPengeringanKoperasi::KADANG->value])],
|
||||
'model_fermentasi' => [$when('praktik_fermentasi', [PraktikFermentasiKoperasi::RUTIN->value, PraktikFermentasiKoperasi::PERNAH->value])],
|
||||
'proses_fermentasi' => [$when('praktik_fermentasi', [PraktikFermentasiKoperasi::RUTIN->value, PraktikFermentasiKoperasi::PERNAH->value])],
|
||||
'harga_premium_rupiah' => [$this->postHarvestCondition()],
|
||||
'harga_premium_persen' => [$this->postHarvestCondition()],
|
||||
];
|
||||
}
|
||||
|
||||
public function requiredFields(): array
|
||||
{
|
||||
return [
|
||||
'tahun_ad_art', 'layanan_lainnya', 'format_pembukuan', 'pertemuan_lainnya',
|
||||
'efektivitas_sanksi', 'faktor_manajemen_lainnya', 'agregasi_komoditas',
|
||||
'agregasi_komoditas_lainnya', 'fasilitas_lainnya', 'detail_pengolahan_lanjutan', 'kontrak_komoditas',
|
||||
'standar_sortasi', 'cara_pengeringan', 'model_fermentasi', 'proses_fermentasi',
|
||||
];
|
||||
}
|
||||
|
||||
protected function arrayFields(): array
|
||||
{
|
||||
return ['agregasi_komoditas', 'fasilitas_koperasi', 'model_fermentasi'];
|
||||
}
|
||||
|
||||
public function sectionFields(BagianOperasionalKoperasi $section): array
|
||||
{
|
||||
return match ($section) {
|
||||
BagianOperasionalKoperasi::PENGELOLAAN => [
|
||||
'ad_art', 'tahun_ad_art', 'layanan_koperasi', 'layanan_lainnya',
|
||||
'pelatihan_produksi', 'pelatihan_pascapanen', 'pelatihan_pengolahan',
|
||||
'pelatihan_keuangan', 'pelatihan_pemasaran', 'pelatihan_lainnya',
|
||||
'status_pembukuan', 'format_pembukuan', 'pertemuan_rutin', 'pertemuan_lainnya',
|
||||
'kasus_kredit_macet', 'sanksi_kredit_macet', 'efektivitas_sanksi',
|
||||
'faktor_manajemen', 'faktor_manajemen_lainnya',
|
||||
],
|
||||
BagianOperasionalKoperasi::RANTAI_NILAI => [
|
||||
'keterlibatan_rantai_nilai', 'agregasi_komoditas', 'agregasi_komoditas_lainnya',
|
||||
'fasilitas_koperasi', 'fasilitas_lainnya', 'pengolahan_lanjutan', 'detail_pengolahan_lanjutan',
|
||||
'cara_penentuan_harga', 'kontrak_offtaker', 'kontrak_komoditas',
|
||||
'praktik_sortasi', 'standar_sortasi', 'praktik_pengeringan', 'cara_pengeringan',
|
||||
'praktik_fermentasi', 'model_fermentasi', 'proses_fermentasi', 'harga_premium_rupiah', 'harga_premium_persen',
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
private function postHarvestCondition(): array
|
||||
{
|
||||
return ['any' => [
|
||||
['field' => 'pengolahan_lanjutan', 'source' => 'form', 'values' => [JawabanYaTidakKoperasi::YA->value]],
|
||||
['field' => 'praktik_sortasi', 'source' => 'form', 'values' => [PraktikSortasiKoperasi::RUTIN->value, PraktikSortasiKoperasi::TIDAK_KONSISTEN->value]],
|
||||
['field' => 'praktik_pengeringan', 'source' => 'form', 'values' => [PraktikPengeringanKoperasi::RUTIN->value, PraktikPengeringanKoperasi::KADANG->value]],
|
||||
['field' => 'praktik_fermentasi', 'source' => 'form', 'values' => [PraktikFermentasiKoperasi::RUTIN->value, PraktikFermentasiKoperasi::PERNAH->value]],
|
||||
]];
|
||||
}
|
||||
|
||||
public function normalize(array $data, array $context): array
|
||||
{
|
||||
$data = parent::normalize($data, $context);
|
||||
if (($data['status_pembukuan'] ?? null) === StatusPembukuanKoperasi::BELUM->value) {
|
||||
$data['format_pembukuan'] = FormatPembukuanKoperasi::TIDAK_ADA->value;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,198 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\FokusKomoditasKoperasi;
|
||||
use App\Enums\Koperasi\JenisKoperasi;
|
||||
use App\Enums\Koperasi\LayananKoperasi;
|
||||
use App\Enums\Koperasi\StatusAdArtKoperasi;
|
||||
use App\Enums\Koperasi\UrutanKoperasi;
|
||||
use App\Enums\Role;
|
||||
use App\Models\Koperasi\PengurusKoperasi;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class PengurusKoperasiService
|
||||
{
|
||||
public function __construct(private WilayahKoperasiService $wilayah) {}
|
||||
|
||||
public const RUPIAH_FIELDS = [
|
||||
'shu_2025', 'shu_2024', 'shu_2023', 'simpanan_terbesar', 'harga_premium_rupiah',
|
||||
'harga_segar_sekarang', 'harga_segar_1_tahun', 'harga_segar_2_tahun',
|
||||
'harga_basah_sekarang', 'harga_basah_1_tahun', 'harga_basah_2_tahun',
|
||||
'harga_kering_sekarang', 'harga_kering_1_tahun', 'harga_kering_2_tahun',
|
||||
'harga_fermentasi_sekarang', 'harga_fermentasi_1_tahun', 'harga_fermentasi_2_tahun',
|
||||
];
|
||||
|
||||
public function indexData(array $validated): array
|
||||
{
|
||||
$filters = [
|
||||
'search' => $validated['search'] ?? '',
|
||||
'kabupaten_kota_id' => $validated['kabupaten_kota_id'] ?? ($this->wilayah->available() ? $this->wilayah->defaultKabupaten()?->id : ''),
|
||||
'kecamatan_id' => $validated['kecamatan_id'] ?? '', 'desa_kelurahan_id' => $validated['desa_kelurahan_id'] ?? '',
|
||||
'jenis_koperasi' => $validated['jenis_koperasi'] ?? '',
|
||||
'layanan' => $validated['layanan'] ?? '', 'ad_art' => $validated['ad_art'] ?? '',
|
||||
'sort_by' => $validated['sort_by'] ?? UrutanKoperasi::TERBARU->value,
|
||||
];
|
||||
$query = PengurusKoperasi::query()->with('creator:id,name')
|
||||
->when(filled($filters['jenis_koperasi']), function ($query) use ($filters) {
|
||||
if ($filters['jenis_koperasi'] === JenisKoperasi::LAINNYA->value) {
|
||||
$standard = array_map(fn ($jenis) => $jenis->value, array_filter(JenisKoperasi::cases(), fn ($jenis) => $jenis !== JenisKoperasi::LAINNYA));
|
||||
|
||||
return $query->whereNotIn('jenis_koperasi', $standard);
|
||||
}
|
||||
|
||||
return $query->where('jenis_koperasi', $filters['jenis_koperasi']);
|
||||
})
|
||||
->when(filled($filters['layanan']), fn ($query) => $query->whereJsonContains('layanan_koperasi', $filters['layanan']))
|
||||
->when(filled($filters['ad_art']), fn ($query) => $query->where('ad_art', $filters['ad_art']))
|
||||
->when(filled($filters['search']), function ($query) use ($filters) {
|
||||
$query->where(function ($query) use ($filters) {
|
||||
foreach (['nama_koperasi', 'alamat_koperasi', 'jenis_koperasi', 'nama_lengkap'] as $field) {
|
||||
$query->orWhereLike($field, '%'.$filters['search'].'%');
|
||||
}
|
||||
});
|
||||
});
|
||||
$this->wilayah->applyFilters($query, $filters);
|
||||
$order = UrutanKoperasi::from($filters['sort_by']);
|
||||
match ($order) {
|
||||
UrutanKoperasi::NAMA_ASC, UrutanKoperasi::NAMA_DESC => $query->orderByRaw('LOWER(nama_koperasi) '.($order === UrutanKoperasi::NAMA_ASC ? 'asc' : 'desc')),
|
||||
UrutanKoperasi::ANGGOTA_ASC, UrutanKoperasi::ANGGOTA_DESC => $query
|
||||
->orderByRaw('CASE WHEN jumlah_anggota_dewasa IS NULL OR jumlah_anggota_anak IS NULL THEN 1 ELSE 0 END')
|
||||
->orderByRaw('(jumlah_anggota_dewasa + jumlah_anggota_anak) '.($order === UrutanKoperasi::ANGGOTA_ASC ? 'asc' : 'desc')),
|
||||
UrutanKoperasi::TERBARU => $query->latest(),
|
||||
};
|
||||
$koperasi = $query->orderByDesc('id')->paginate((int) ($validated['per_page'] ?? 10))->withQueryString();
|
||||
$ringkasanKoperasi = $koperasi->getCollection()->mapWithKeys(fn (PengurusKoperasi $item) => [$item->id => $this->profileSummary($item)]);
|
||||
$jenisTerdata = PengurusKoperasi::whereNotNull('jenis_koperasi')->where('jenis_koperasi', '!=', '')
|
||||
->distinct()->orderBy('jenis_koperasi')->pluck('jenis_koperasi');
|
||||
$jenisKoperasiOptions = collect(JenisKoperasi::cases())->map(fn ($jenis) => $jenis->value)
|
||||
->merge($jenisTerdata)->unique()->values();
|
||||
|
||||
return [
|
||||
'koperasi' => $koperasi,
|
||||
'ringkasanKoperasi' => $ringkasanKoperasi,
|
||||
'filters' => $filters,
|
||||
'jenisKoperasiOptions' => $jenisKoperasiOptions,
|
||||
...$this->wilayah->filterOptions($filters),
|
||||
'showEnumerator' => in_array(auth()->user()?->role, [Role::SUPER_ADMIN, Role::ADMIN], true),
|
||||
'totalKoperasi' => PengurusKoperasi::count(),
|
||||
'totalJenisKoperasi' => $jenisTerdata->count(),
|
||||
'totalDokumenLengkap' => PengurusKoperasi::where('ad_art', StatusAdArtKoperasi::LENGKAP->value)->count(),
|
||||
];
|
||||
}
|
||||
|
||||
public function profileViewData(?PengurusKoperasi $pengurus = null): array
|
||||
{
|
||||
return [
|
||||
'pengurus' => $pengurus ?? new PengurusKoperasi,
|
||||
'ringkasanProfil' => $this->profileSummary($pengurus),
|
||||
...$this->wilayah->profileOptions($pengurus, session()->getOldInput()),
|
||||
];
|
||||
}
|
||||
|
||||
public function profileSummary(?PengurusKoperasi $pengurus = null): array
|
||||
{
|
||||
$empty = 'Belum terisi';
|
||||
$dewasa = $pengurus?->jumlah_anggota_dewasa;
|
||||
$anak = $pengurus?->jumlah_anggota_anak;
|
||||
$count = fn ($value) => filled($value) ? number_format((int) $value, 0, ',', '.') : $empty;
|
||||
$layanan = collect($pengurus?->layanan_koperasi ?? [])->map(function (LayananKoperasi $item) use ($pengurus) {
|
||||
return $item === LayananKoperasi::LAINNYA && filled($pengurus->layanan_lainnya)
|
||||
? $item->label().': '.$pengurus->layanan_lainnya : $item->label();
|
||||
})->unique()->values()->all();
|
||||
|
||||
return [
|
||||
'judul' => filled($pengurus?->nama_koperasi) ? $pengurus->nama_koperasi : 'Nama Koperasi',
|
||||
'jenis' => filled($pengurus?->jenis_koperasi) ? $pengurus->jenis_koperasi : $empty,
|
||||
'alamat' => filled($pengurus?->alamat_koperasi) ? $pengurus->alamat_koperasi : $empty,
|
||||
'tahun_berdiri' => $pengurus?->tahun_berdiri ?? $empty,
|
||||
'anggota' => filled($dewasa) && filled($anak) ? $count((int) $dewasa + (int) $anak) : $empty,
|
||||
'anggota_rincian' => filled($dewasa) || filled($anak) ? 'Dewasa: '.$count($dewasa).' · Anak: '.$count($anak) : null,
|
||||
'pengurus' => $count($pengurus?->jumlah_pengurus),
|
||||
'layanan' => $layanan,
|
||||
'responden' => filled($pengurus?->nama_lengkap) ? $pengurus->nama_lengkap : $empty,
|
||||
'jabatan' => $pengurus?->posisi_dalam_koperasi?->value ?? $empty,
|
||||
'kontak' => filled($pengurus?->no_hp) ? $pengurus->no_hp : $empty,
|
||||
'diperbarui' => $pengurus?->updated_at ?? $pengurus?->created_at,
|
||||
'tersimpan' => $pengurus?->exists ?? false,
|
||||
];
|
||||
}
|
||||
|
||||
public static function normalizeRupiah(mixed $value): mixed
|
||||
{
|
||||
if (is_string($value) && preg_match('/^-?\d{1,3}(?:\.\d{3})+$/D', $value)) {
|
||||
return str_replace('.', '', $value);
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
public static function formatRupiah(mixed $value): string
|
||||
{
|
||||
$value = (string) self::normalizeRupiah($value);
|
||||
|
||||
return preg_match('/^-?\d+$/D', $value)
|
||||
? preg_replace('/\B(?=(\d{3})+(?!\d))/', '.', $value)
|
||||
: $value;
|
||||
}
|
||||
|
||||
public static function hasSelection(mixed $value, string $selection): bool
|
||||
{
|
||||
if ($value instanceof Collection) {
|
||||
$value = $value->all();
|
||||
}
|
||||
if ($value instanceof \BackedEnum) {
|
||||
$value = $value->value;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
return in_array($selection, array_map(fn ($item) => $item instanceof \BackedEnum ? $item->value : $item, $value), true);
|
||||
}
|
||||
|
||||
$decoded = json_decode((string) $value, true);
|
||||
|
||||
return is_array($decoded)
|
||||
? in_array($selection, $decoded, true)
|
||||
: str_contains((string) $value, $selection);
|
||||
}
|
||||
|
||||
public function profileData(array $data): array
|
||||
{
|
||||
unset($data['provinsi_id'], $data['kabupaten_kota_id'], $data['kecamatan_id'], $data['created_by']);
|
||||
if (! $this->wilayah->available()) {
|
||||
unset($data['desa_kelurahan_id']);
|
||||
}
|
||||
if ($data['jenis_koperasi'] === JenisKoperasi::LAINNYA->value && ! empty($data['jenis_koperasi_lainnya'])) {
|
||||
$data['jenis_koperasi'] = $data['jenis_koperasi_lainnya'];
|
||||
}
|
||||
|
||||
unset($data['jenis_koperasi_lainnya']);
|
||||
|
||||
if (array_key_exists('fokus_komoditas', $data) && $data['fokus_komoditas'] !== FokusKomoditasKoperasi::YA->value) {
|
||||
$data['detail_fokus_komoditas'] = null;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function createProfile(array $data, int $creatorId): PengurusKoperasi
|
||||
{
|
||||
$data = $this->profileData($data);
|
||||
if ($this->wilayah->available()) {
|
||||
$data['created_by'] = $creatorId;
|
||||
}
|
||||
|
||||
return PengurusKoperasi::create($data);
|
||||
}
|
||||
|
||||
public function tabData(array $data): array
|
||||
{
|
||||
$model = new PengurusKoperasi;
|
||||
foreach ($data as $field => $value) {
|
||||
if (is_array($value) && ! $model->hasCast($field)) {
|
||||
$data[$field] = json_encode($value, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\BagianRantaiNilaiKoperasi;
|
||||
use App\Enums\Koperasi\BentukProdukKoperasi;
|
||||
use App\Enums\Koperasi\HubunganPemasokKoperasi;
|
||||
use App\Enums\Koperasi\PenetapanHargaKoperasi;
|
||||
use App\Enums\Koperasi\SumberPasokanKoperasi;
|
||||
use App\Enums\Koperasi\TujuanPenjualanKoperasi;
|
||||
|
||||
class RantaiNilaiKoperasiService extends KoperasiSurveyService
|
||||
{
|
||||
public const PERIODS = ['sekarang' => 'Panen Terakhir', '1_tahun' => 'Tahun Lalu', '2_tahun' => 'Dua Tahun Lalu'];
|
||||
|
||||
public function dependencies(): array
|
||||
{
|
||||
$when = fn (string $field, array $values) => ['field' => $field, 'values' => $values, 'source' => 'form'];
|
||||
$buyers = array_values(array_map(fn ($case) => $case->value, array_filter(
|
||||
TujuanPenjualanKoperasi::cases(), fn ($case) => $case !== TujuanPenjualanKoperasi::BELUM_MENJUAL,
|
||||
)));
|
||||
$rules = [
|
||||
'sumber_pasokan_lainnya' => [$when('sumber_pasokan', [SumberPasokanKoperasi::LAINNYA->value])],
|
||||
'tujuan_penjualan_lainnya' => [$when('tujuan_penjualan', [TujuanPenjualanKoperasi::LAINNYA->value])],
|
||||
'sifat_hubungan_lainnya' => [$when('sifat_hubungan_bisnis', [HubunganPemasokKoperasi::LAINNYA->value])],
|
||||
'cara_menetapkan_harga_lainnya' => [$when('cara_menetapkan_harga_pasar', [PenetapanHargaKoperasi::LAINNYA->value])],
|
||||
'bentuk_penjualan' => [$when('tujuan_penjualan', $buyers)],
|
||||
];
|
||||
foreach (array_keys(self::PERIODS) as $period) {
|
||||
$rules['volume_jual_'.$period] = [$when('tujuan_penjualan', $buyers)];
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
public function requiredFields(): array
|
||||
{
|
||||
return ['sumber_pasokan_lainnya', 'tujuan_penjualan_lainnya', 'sifat_hubungan_lainnya', 'cara_menetapkan_harga_lainnya'];
|
||||
}
|
||||
|
||||
protected function arrayFields(): array
|
||||
{
|
||||
return ['bentuk_penjualan'];
|
||||
}
|
||||
|
||||
public function sectionFields(BagianRantaiNilaiKoperasi $section): array
|
||||
{
|
||||
if ($section === BagianRantaiNilaiKoperasi::HARGA) {
|
||||
$fields = ['cara_menetapkan_harga_pasar', 'cara_menetapkan_harga_lainnya'];
|
||||
foreach (BentukProdukKoperasi::cases() as $product) {
|
||||
foreach (array_keys(self::PERIODS) as $period) {
|
||||
$fields[] = 'harga_'.$product->pricePrefix().'_'.$period;
|
||||
}
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
$fields = [
|
||||
'sumber_pasokan', 'sumber_pasokan_lainnya', 'bentuk_pembelian',
|
||||
'tujuan_penjualan', 'tujuan_penjualan_lainnya', 'bentuk_penjualan',
|
||||
'sifat_hubungan_bisnis', 'sifat_hubungan_lainnya', 'mekanisme_pembayaran', 'status_perjanjian_tertulis',
|
||||
];
|
||||
foreach (array_keys(self::PERIODS) as $period) {
|
||||
$fields[] = 'volume_beli_'.$period;
|
||||
$fields[] = 'volume_jual_'.$period;
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\AlasanPinjamanKoperasi;
|
||||
use App\Enums\Koperasi\BentukPembayaranKoperasi;
|
||||
use App\Enums\Koperasi\JawabanYaTidakKoperasi;
|
||||
use App\Enums\Koperasi\JenisKoperasi;
|
||||
use App\Enums\Koperasi\KetersediaanKoperasi;
|
||||
use App\Models\Koperasi\PengurusKoperasi;
|
||||
|
||||
class SosialEkonomiKoperasiService extends KoperasiSurveyService
|
||||
{
|
||||
public function context(?PengurusKoperasi $model): array
|
||||
{
|
||||
return ['jenis_koperasi' => $model?->jenis_koperasi];
|
||||
}
|
||||
|
||||
public function dependencies(): array
|
||||
{
|
||||
$when = fn (string $field, array $values, string $source = 'form') => [
|
||||
'field' => $field, 'values' => $values, 'source' => $source,
|
||||
];
|
||||
$simpanPinjam = $when('jenis_koperasi', [JenisKoperasi::SIMPAN_PINJAM->value], 'profile');
|
||||
|
||||
return [
|
||||
'alasan_pinjaman' => [$simpanPinjam],
|
||||
'alasan_pinjaman_lainnya' => [$when('alasan_pinjaman', [AlasanPinjamanKoperasi::LAINNYA->value])],
|
||||
'pembayaran_selain_uang' => [$simpanPinjam],
|
||||
'bentuk_pembayaran_barang' => [$when('pembayaran_selain_uang', [KetersediaanKoperasi::ADA->value])],
|
||||
'bentuk_pembayaran_lainnya' => [$when('bentuk_pembayaran_barang', [BentukPembayaranKoperasi::LAINNYA->value])],
|
||||
'perhitungan_harga_pasar' => [$when('bentuk_pembayaran_barang', [BentukPembayaranKoperasi::HASIL_BUMI->value])],
|
||||
'alasan_bukan_harga_pasar' => [$when('perhitungan_harga_pasar', [JawabanYaTidakKoperasi::TIDAK->value])],
|
||||
];
|
||||
}
|
||||
|
||||
public function requiredFields(): array
|
||||
{
|
||||
return ['alasan_pinjaman_lainnya', 'bentuk_pembayaran_barang', 'bentuk_pembayaran_lainnya', 'perhitungan_harga_pasar', 'alasan_bukan_harga_pasar'];
|
||||
}
|
||||
|
||||
protected function arrayFields(): array
|
||||
{
|
||||
return ['alasan_pinjaman', 'bentuk_pembayaran_barang'];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Koperasi;
|
||||
|
||||
use App\Models\Koperasi\PengurusKoperasi;
|
||||
use App\Models\Wilayah\DesaKelurahan;
|
||||
use App\Models\Wilayah\KabupatenKota;
|
||||
use App\Models\Wilayah\Kecamatan;
|
||||
use App\Models\Wilayah\Provinsi;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class WilayahKoperasiService
|
||||
{
|
||||
private ?bool $available = null;
|
||||
|
||||
public function available(): bool
|
||||
{
|
||||
return $this->available ??= Schema::hasColumn('pengurus_koperasi', 'desa_kelurahan_id')
|
||||
&& Schema::hasColumn('pengurus_koperasi', 'created_by');
|
||||
}
|
||||
|
||||
public function applyFilters(Builder $query, array $filters): void
|
||||
{
|
||||
if (! $this->available()) {
|
||||
if (filled($filters['kabupaten_kota_id']) || filled($filters['kecamatan_id']) || filled($filters['desa_kelurahan_id'])) {
|
||||
$query->whereRaw('1 = 0');
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Seperti BUMDes, lokasi koperasi memakai seluruh master wilayah, termasuk di luar program aktif.
|
||||
// Profil yang belum memiliki desa tetap dapat ditemukan dan dilengkapi pada daftar kabupaten.
|
||||
$query->when($filters['kabupaten_kota_id'], fn ($query, $id) => $query->where(fn ($wilayah) => $wilayah
|
||||
->whereHas('desaKelurahan', fn ($desa) => $desa
|
||||
->withoutGlobalScope('program')->whereHas('kecamatan', fn ($kecamatan) => $kecamatan
|
||||
->withoutGlobalScope('program')->where('kabupaten_kota_id', $id)))
|
||||
->orWhereNull('desa_kelurahan_id')))
|
||||
->when($filters['kecamatan_id'], fn ($query, $id) => $query->whereHas('desaKelurahan', fn ($desa) => $desa
|
||||
->withoutGlobalScope('program')->where('kecamatan_id', $id)))
|
||||
->when($filters['desa_kelurahan_id'], fn ($query, $id) => $query->where('desa_kelurahan_id', $id));
|
||||
}
|
||||
|
||||
public function filterOptions(array $filters): array
|
||||
{
|
||||
$ready = $this->available();
|
||||
|
||||
return [
|
||||
'wilayahTersedia' => $ready,
|
||||
'selectedKabupaten' => filled($filters['kabupaten_kota_id'])
|
||||
? KabupatenKota::withoutGlobalScope('program')->find($filters['kabupaten_kota_id'], ['id', 'nama']) : $this->defaultKabupaten(),
|
||||
'kecamatanOptions' => $ready && filled($filters['kabupaten_kota_id'])
|
||||
? Kecamatan::withoutGlobalScope('program')->where('kabupaten_kota_id', $filters['kabupaten_kota_id'])->orderBy('nama')->get(['id', 'nama']) : collect(),
|
||||
'desaOptions' => $ready && filled($filters['kecamatan_id'])
|
||||
? DesaKelurahan::withoutGlobalScope('program')->where('kecamatan_id', $filters['kecamatan_id'])->orderBy('nama')->get(['id', 'nama']) : collect(),
|
||||
];
|
||||
}
|
||||
|
||||
public function defaultKabupaten(): ?KabupatenKota
|
||||
{
|
||||
return KabupatenKota::withoutGlobalScope('program')->whereLike('nama', '%ngada%')->orderBy('nama')->first(['id', 'nama']);
|
||||
}
|
||||
|
||||
public function profileOptions(?PengurusKoperasi $model, array $old): array
|
||||
{
|
||||
if (! $this->available()) {
|
||||
return ['wilayahTersedia' => false];
|
||||
}
|
||||
$model?->loadMissing([
|
||||
'desaKelurahan' => fn ($query) => $query->withoutGlobalScope('program'),
|
||||
'desaKelurahan.kecamatan' => fn ($query) => $query->withoutGlobalScope('program'),
|
||||
'desaKelurahan.kecamatan.kabupatenKota' => fn ($query) => $query->withoutGlobalScope('program'),
|
||||
]);
|
||||
$desa = $model?->desaKelurahan;
|
||||
$value = function ($key, $fallback) use ($old) {
|
||||
$selected = array_key_exists($key, $old) ? $old[$key] : $fallback;
|
||||
|
||||
return is_int($selected) || (is_string($selected) && ctype_digit($selected)) ? $selected : null;
|
||||
};
|
||||
$selected = [
|
||||
'provinsi_id' => $value('provinsi_id', $desa?->kecamatan?->kabupatenKota?->provinsi_id),
|
||||
'kabupaten_kota_id' => $value('kabupaten_kota_id', $desa?->kecamatan?->kabupaten_kota_id),
|
||||
'kecamatan_id' => $value('kecamatan_id', $desa?->kecamatan_id),
|
||||
'desa_kelurahan_id' => $value('desa_kelurahan_id', $model?->desa_kelurahan_id),
|
||||
];
|
||||
|
||||
return [
|
||||
...$this->filterOptions($selected),
|
||||
'selectedWilayah' => $selected,
|
||||
'provinsiOptions' => Provinsi::withoutGlobalScope('program')->orderBy('nama')->get(['id', 'nama']),
|
||||
'kabupatenOptions' => filled($selected['provinsi_id'])
|
||||
? KabupatenKota::withoutGlobalScope('program')->where('provinsi_id', $selected['provinsi_id'])->orderBy('nama')->get(['id', 'nama']) : collect(),
|
||||
];
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
use App\Models\Koperasi\PengurusKoperasi;
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('pengurus_koperasi', function (Blueprint $table) {
|
||||
$table->foreignId('desa_kelurahan_id')->nullable()->constrained('master_desa_kelurahan')->nullOnDelete();
|
||||
$table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete();
|
||||
});
|
||||
|
||||
if (! Schema::hasTable('activity_log')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Penginput lama hanya dipulihkan dari log pembuatan, bukan dari pengguna yang terakhir mengubah.
|
||||
DB::table('pengurus_koperasi')->select('id')->whereNull('created_by')->chunkById(100, function ($rows) {
|
||||
foreach ($rows as $row) {
|
||||
$creator = DB::table('activity_log')->where('subject_type', (new PengurusKoperasi)->getMorphClass())
|
||||
->where('subject_id', $row->id)->where('event', 'created')
|
||||
->where('causer_type', (new User)->getMorphClass())->orderBy('id')->value('causer_id');
|
||||
if ($creator && DB::table('users')->where('id', $creator)->exists()) {
|
||||
DB::table('pengurus_koperasi')->where('id', $row->id)->update(['created_by' => $creator]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('pengurus_koperasi', function (Blueprint $table) {
|
||||
$table->dropConstrainedForeignId('created_by');
|
||||
$table->dropConstrainedForeignId('desa_kelurahan_id');
|
||||
});
|
||||
}
|
||||
};
|
||||
+66
-28
@@ -191,9 +191,10 @@ body > .select2-container--open {
|
||||
inline-size: auto !important;
|
||||
}
|
||||
|
||||
/* Tipografi profil Kelompok Tani dan BUMDes */
|
||||
/* Tipografi profil Kelompok Tani, BUMDes, dan Koperasi */
|
||||
.kelompok-tani-page,
|
||||
.bumdes-page {
|
||||
.bumdes-page,
|
||||
.koperasi-profile-page {
|
||||
font-family: var(--bs-body-font-family);
|
||||
font-size: var(--bs-body-font-size);
|
||||
font-weight: var(--bs-body-font-weight);
|
||||
@@ -201,7 +202,8 @@ body > .select2-container--open {
|
||||
}
|
||||
|
||||
.kelompok-tani-page :is(.form-control, .form-select, .form-check-label, .select2-container),
|
||||
.bumdes-page :is(.form-control, .form-select, .form-check-label, .select2-container) {
|
||||
.bumdes-page :is(.form-control, .form-select, .form-check-label, .select2-container),
|
||||
.koperasi-profile-page :is(.form-control, .form-select, .form-check-label, .select2-container) {
|
||||
font-family: var(--bs-body-font-family);
|
||||
}
|
||||
|
||||
@@ -212,10 +214,15 @@ body > .select2-container--open {
|
||||
}
|
||||
|
||||
#bumdes-notifications,
|
||||
.koperasi-profile-page [data-koperasi-section],
|
||||
.bumdes-page #section-kepengurusan {
|
||||
scroll-margin-top: 7rem;
|
||||
}
|
||||
|
||||
.koperasi-profile-page [data-koperasi-section]:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.bumdes-page .pengurus-status-switch-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -294,22 +301,22 @@ body > .select2-container--open {
|
||||
|
||||
.bumdes-row { cursor: pointer; }
|
||||
.bumdes-filter-row { padding-block: 1.5rem; }
|
||||
.bumdes-filter-line { display: flex; align-items: center; flex-wrap: wrap; gap: .5rem; }
|
||||
.bumdes-filter-label { display: flex; align-items: center; font-weight: 500; margin-right: .5rem; white-space: nowrap; }
|
||||
.bumdes-filter-line .form-select,
|
||||
.bumdes-filter-line .btn { min-height: 31px; }
|
||||
.bumdes-filter-line .form-select {
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) { display: flex; align-items: center; flex-wrap: wrap; gap: .5rem; }
|
||||
:is(.bumdes-filter-label, .koperasi-filter-label) { display: flex; align-items: center; font-weight: 500; margin-right: .5rem; white-space: nowrap; }
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) .form-select,
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) .btn { min-height: 31px; }
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) .form-select {
|
||||
background-color: var(--bs-paper-bg);
|
||||
border-color: var(--bs-border-color);
|
||||
border-radius: var(--bs-border-radius);
|
||||
color: var(--bs-body-color);
|
||||
}
|
||||
.bumdes-filter-line .form-select:focus {
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) .form-select:focus {
|
||||
border-color: rgba(40, 167, 69, .55);
|
||||
box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .12);
|
||||
}
|
||||
.bumdes-filter-line .btn { white-space: nowrap; }
|
||||
.bumdes-filter-static {
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) .btn { white-space: nowrap; }
|
||||
:is(.bumdes-filter-static, .koperasi-filter-static) {
|
||||
display: flex; align-items: center; min-height: 31px;
|
||||
padding: .25rem .75rem; font-size: .8125rem;
|
||||
background-color: var(--bs-paper-bg);
|
||||
@@ -317,19 +324,19 @@ body > .select2-container--open {
|
||||
border-radius: var(--bs-border-radius);
|
||||
color: var(--bs-body-color);
|
||||
}
|
||||
.bumdes-filter-line .input-group-sm { width: 240px; }
|
||||
.bumdes-data-filters > div:not(.bumdes-filter-label) {
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) .input-group-sm { width: 240px; }
|
||||
.bumdes-data-filters > div:not(:is(.bumdes-filter-label, .koperasi-filter-label)) {
|
||||
flex: 1 1 11rem;
|
||||
min-inline-size: 0;
|
||||
}
|
||||
.bumdes-data-filters .form-select { text-overflow: ellipsis; }
|
||||
.bumdes-data-filters .input-group-sm { width: 100%; }
|
||||
@media (max-width: 767.98px) {
|
||||
.bumdes-filter-line { display: grid; grid-template-columns: minmax(0, 1fr); width: 100%; }
|
||||
.bumdes-filter-label { margin-right: 0; }
|
||||
.bumdes-filter-line .btn { justify-content: center; width: 100%; }
|
||||
.bumdes-filter-line .input-group-sm { width: 100%; }
|
||||
.bumdes-filter-line .input-group .btn { width: auto; }
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) { display: grid; grid-template-columns: minmax(0, 1fr); width: 100%; }
|
||||
:is(.bumdes-filter-label, .koperasi-filter-label) { margin-right: 0; }
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) .btn { justify-content: center; width: 100%; }
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) .input-group-sm { width: 100%; }
|
||||
:is(.bumdes-filter-line, .koperasi-filter-line) .input-group .btn { width: auto; }
|
||||
}
|
||||
|
||||
|
||||
@@ -367,7 +374,34 @@ body > .select2-container--open {
|
||||
}
|
||||
}
|
||||
|
||||
/* Tabel dan ringkasan profil BUMDes. */
|
||||
/* Tabel dan ringkasan profil. */
|
||||
.koperasi-filter-row {
|
||||
padding-block: 1.5rem;
|
||||
}
|
||||
|
||||
.koperasi-filter-row .form-select {
|
||||
min-inline-size: 0;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.koperasi-list-table .koperasi-list-identity {
|
||||
min-inline-size: 14rem;
|
||||
max-inline-size: 20rem;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.koperasi-list-table .koperasi-list-type,
|
||||
.koperasi-list-table .koperasi-list-services,
|
||||
.koperasi-list-table .koperasi-list-documents {
|
||||
min-inline-size: 10rem;
|
||||
max-inline-size: 16rem;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.koperasi-list-table [data-koperasi-row] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bumdes-list-table .bumdes-list-identity {
|
||||
min-inline-size: 12rem;
|
||||
max-inline-size: 16rem;
|
||||
@@ -384,19 +418,22 @@ body > .select2-container--open {
|
||||
}
|
||||
|
||||
.bumdes-profile-summary .bumdes-summary-content,
|
||||
.kelompok-profile-summary .kelompok-summary-content {
|
||||
.kelompok-profile-summary .kelompok-summary-content,
|
||||
.koperasi-profile-summary .koperasi-summary-content {
|
||||
min-inline-size: 0;
|
||||
}
|
||||
|
||||
.bumdes-profile-summary .bumdes-summary-label,
|
||||
.kelompok-profile-summary .kelompok-summary-label {
|
||||
.kelompok-profile-summary .kelompok-summary-label,
|
||||
.koperasi-profile-summary .koperasi-summary-label {
|
||||
color: var(--bs-secondary-color);
|
||||
font-size: 0.8125rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.bumdes-profile-summary .badge,
|
||||
.kelompok-profile-summary .badge {
|
||||
.kelompok-profile-summary .badge,
|
||||
.koperasi-profile-summary .badge {
|
||||
max-inline-size: 100%;
|
||||
line-height: 1.45;
|
||||
white-space: normal;
|
||||
@@ -405,18 +442,19 @@ body > .select2-container--open {
|
||||
}
|
||||
|
||||
.bumdes-profile-summary .bumdes-summary-more,
|
||||
.kelompok-profile-summary .kelompok-summary-more {
|
||||
.kelompok-profile-summary .kelompok-summary-more,
|
||||
.koperasi-profile-summary .koperasi-summary-more {
|
||||
min-block-size: 1.5rem;
|
||||
font-size: 0.8125rem;
|
||||
}
|
||||
|
||||
/* Daftar kelompok tani. */
|
||||
@media (min-width: 768px) {
|
||||
.kelompok-tani-page .nav-pills-custom-spacing { display: flex; width: 100%; gap: .5rem; flex-wrap: nowrap !important; overflow-x: auto; }
|
||||
.kelompok-tani-page .nav-pills-custom-spacing::-webkit-scrollbar { display: none; }
|
||||
.kelompok-tani-page .nav-pills-custom-spacing .nav-item { margin-right: 0 !important; flex: 1; }
|
||||
.kelompok-tani-page .nav-pills-custom-spacing .nav-link { display: flex; justify-content: center; align-items: center; padding-left: .5rem !important; padding-right: .5rem !important; width: 100%; white-space: nowrap; font-size: var(--bs-body-font-size) !important; }
|
||||
.kelompok-tani-page .nav-pills-custom-spacing .nav-link i { margin-right: .4rem !important; }
|
||||
:is(.kelompok-tani-page, .koperasi-profile-page) .nav-pills-custom-spacing { display: flex; width: 100%; gap: .5rem; flex-wrap: nowrap !important; overflow-x: auto; }
|
||||
:is(.kelompok-tani-page, .koperasi-profile-page) .nav-pills-custom-spacing::-webkit-scrollbar { display: none; }
|
||||
:is(.kelompok-tani-page, .koperasi-profile-page) .nav-pills-custom-spacing .nav-item { margin-right: 0 !important; flex: 1; }
|
||||
:is(.kelompok-tani-page, .koperasi-profile-page) .nav-pills-custom-spacing .nav-link { display: flex; justify-content: center; align-items: center; padding-left: .5rem !important; padding-right: .5rem !important; width: 100%; white-space: nowrap; font-size: var(--bs-body-font-size) !important; }
|
||||
:is(.kelompok-tani-page, .koperasi-profile-page) .nav-pills-custom-spacing .nav-link i { margin-right: .4rem !important; }
|
||||
}
|
||||
.kelompok-tani-row { cursor: pointer; }
|
||||
.kelompok-filter-row { padding-block: 1.5rem; }
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
'use strict';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const page = document.querySelector('.koperasi-list-page');
|
||||
if (!page) return;
|
||||
|
||||
page.querySelector('#koperasi-per-page').addEventListener('change', event => event.target.form.requestSubmit());
|
||||
|
||||
page.querySelectorAll('[data-koperasi-row]').forEach(row => {
|
||||
row.addEventListener('click', event => {
|
||||
if (event.target.closest('a, button, input, select, textarea, label, form')) return;
|
||||
window.location.href = row.querySelector('.edit-record').href;
|
||||
});
|
||||
});
|
||||
|
||||
page.querySelectorAll('[data-koperasi-delete]').forEach(form => {
|
||||
form.addEventListener('submit', event => {
|
||||
event.preventDefault();
|
||||
Swal.fire({
|
||||
title: 'Hapus koperasi?',
|
||||
text: `Data koperasi "${form.dataset.nama}" akan dihapus.`,
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'Ya, hapus',
|
||||
cancelButtonText: 'Batal',
|
||||
customClass: { confirmButton: 'btn btn-danger me-3', cancelButton: 'btn btn-label-secondary' },
|
||||
buttonsStyling: false
|
||||
}).then(result => {
|
||||
if (result.isConfirmed) form.submit();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,49 @@
|
||||
'use strict';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
document.querySelectorAll('[data-koperasi-wilayah], #koperasi-filter-form').forEach(container => {
|
||||
const levels = ['provinsi', 'kabupaten', 'kecamatan', 'desa']
|
||||
.map(name => ({ name, input: container.querySelector(`[data-wilayah-${name}]`) }))
|
||||
.filter(level => level.input);
|
||||
const controllers = new Map();
|
||||
const updateRequired = () => {
|
||||
if (!container.matches('[data-koperasi-wilayah]')) return;
|
||||
const hasSelection = levels.some(level => level.input.value);
|
||||
levels.forEach(level => { level.input.required = hasSelection; });
|
||||
};
|
||||
const reset = level => {
|
||||
controllers.get(level.name)?.abort();
|
||||
level.input.replaceChildren(new Option(level.input.options[0].textContent, ''));
|
||||
level.input.disabled = true;
|
||||
};
|
||||
levels.forEach((level, index) => {
|
||||
if (index === levels.length - 1) return;
|
||||
level.input.addEventListener('change', async () => {
|
||||
levels.slice(index + 1).forEach(reset);
|
||||
updateRequired();
|
||||
if (!level.input.value) return;
|
||||
const child = levels[index + 1];
|
||||
const controller = new AbortController();
|
||||
controllers.set(child.name, controller);
|
||||
const url = new URL(container.dataset[`${child.name}Url`].replace(':id', encodeURIComponent(level.input.value)), window.location.href);
|
||||
url.searchParams.set('all_wilayah', '1');
|
||||
try {
|
||||
const response = await fetch(url, {
|
||||
signal: controller.signal,
|
||||
headers: { 'Accept': 'application/json', 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]')?.content || '' }
|
||||
});
|
||||
if (!response.ok) throw new Error('Wilayah gagal dimuat');
|
||||
const options = await response.json();
|
||||
if (controller.signal.aborted) return;
|
||||
options.forEach(option => child.input.add(new Option(option.nama, option.id)));
|
||||
child.input.disabled = false;
|
||||
updateRequired();
|
||||
} catch (error) {
|
||||
if (error.name === 'AbortError') return;
|
||||
child.input.add(new Option('Gagal memuat wilayah, pilih ulang wilayah induk', '', false, true));
|
||||
}
|
||||
});
|
||||
});
|
||||
updateRequired();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,119 @@
|
||||
'use strict';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const page = document.querySelector('.koperasi-profile-page');
|
||||
if (!page) return;
|
||||
|
||||
page.querySelectorAll('[data-koperasi-locked-tab]').forEach(tab => {
|
||||
tab.addEventListener('click', event => event.preventDefault());
|
||||
});
|
||||
|
||||
page.querySelectorAll('[data-koperasi-survey]').forEach(operasional => {
|
||||
const fields = Array.from(operasional.querySelectorAll('[data-koperasi-survey-field]'));
|
||||
const conditions = new Map(fields.map(wrapper => [wrapper.dataset.koperasiSurveyField, JSON.parse(wrapper.dataset.koperasiConditions)]));
|
||||
const context = JSON.parse(operasional.dataset.koperasiContext);
|
||||
const requiredFields = JSON.parse(operasional.dataset.koperasiRequired);
|
||||
const selectedValues = name => Array.from(operasional.elements)
|
||||
.filter(input => input.name === name || input.name === name + '[]')
|
||||
.filter(input => !['checkbox', 'radio'].includes(input.type) || input.checked)
|
||||
.map(input => input.value);
|
||||
const matches = condition => {
|
||||
if (condition.any) return condition.any.some(matches);
|
||||
if (condition.source === 'profile') return condition.values.includes(context[condition.field]);
|
||||
return active(condition.field) && condition.values.some(value => selectedValues(condition.field).includes(value));
|
||||
};
|
||||
const active = field => (conditions.get(field) || []).every(matches);
|
||||
const updateDependencies = () => {
|
||||
fields.forEach(wrapper => {
|
||||
const field = wrapper.dataset.koperasiSurveyField;
|
||||
const visible = active(field);
|
||||
const required = visible && requiredFields.includes(field);
|
||||
wrapper.classList.toggle('d-none', !visible);
|
||||
wrapper.querySelectorAll('input, select, textarea').forEach(input => {
|
||||
input.disabled = !visible;
|
||||
input.required = required && input.type !== 'checkbox';
|
||||
input.setCustomValidity('');
|
||||
});
|
||||
const checkboxes = wrapper.querySelectorAll('input[type="checkbox"]');
|
||||
if (required && checkboxes.length && !Array.from(checkboxes).some(input => input.checked)) {
|
||||
checkboxes[0].setCustomValidity('Pilih sedikitnya satu pilihan.');
|
||||
}
|
||||
const indicator = wrapper.querySelector('[data-koperasi-required-indicator]');
|
||||
if (indicator) indicator.classList.toggle('d-none', !required);
|
||||
});
|
||||
};
|
||||
operasional.addEventListener('change', event => {
|
||||
const input = event.target;
|
||||
const group = input.closest('[data-koperasi-exclusive]');
|
||||
if (group && input.type === 'checkbox' && input.checked) {
|
||||
group.querySelectorAll('input[type="checkbox"]').forEach(option => {
|
||||
if (option !== input && (input.value === group.dataset.koperasiExclusive || option.value === group.dataset.koperasiExclusive)) {
|
||||
option.checked = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
updateDependencies();
|
||||
});
|
||||
updateDependencies();
|
||||
});
|
||||
|
||||
const activeSection = document.getElementById(window.location.hash.slice(1));
|
||||
if (activeSection && page.contains(activeSection) && activeSection.matches('[data-koperasi-section]')) {
|
||||
const showSection = () => {
|
||||
activeSection.scrollIntoView({ behavior: 'instant', block: 'start' });
|
||||
activeSection.focus({ preventScroll: true });
|
||||
};
|
||||
if (document.readyState === 'complete') {
|
||||
requestAnimationFrame(showSection);
|
||||
} else {
|
||||
window.addEventListener('load', () => requestAnimationFrame(showSection), { once: true });
|
||||
}
|
||||
}
|
||||
|
||||
const form = page.querySelector('[data-koperasi-profile]');
|
||||
if (form) {
|
||||
const jenis = form.querySelector('[name="jenis_koperasi"]');
|
||||
const wrapper = form.querySelector('#koperasi-jenis-lainnya-wrapper');
|
||||
const lainnya = form.querySelector('[name="jenis_koperasi_lainnya"]');
|
||||
const toggleJenisLainnya = () => {
|
||||
const isLainnya = jenis.value === form.dataset.jenisLainnya;
|
||||
wrapper.classList.toggle('d-none', !isLainnya);
|
||||
lainnya.disabled = !isLainnya;
|
||||
};
|
||||
jenis.addEventListener('change', toggleJenisLainnya);
|
||||
toggleJenisLainnya();
|
||||
|
||||
const fokus = form.querySelector('[name="fokus_komoditas"]');
|
||||
const detail = form.querySelector('[name="detail_fokus_komoditas"]');
|
||||
const fokusWrapper = form.querySelector('#koperasi-detail-fokus-wrapper');
|
||||
const toggleFokus = () => {
|
||||
const aktif = fokus.value === fokus.dataset.fokusYa;
|
||||
fokusWrapper.classList.toggle('d-none', !aktif);
|
||||
detail.disabled = !aktif;
|
||||
};
|
||||
fokus.addEventListener('change', toggleFokus);
|
||||
toggleFokus();
|
||||
}
|
||||
|
||||
const formatRupiah = value => {
|
||||
const negative = value.trimStart().startsWith('-');
|
||||
const digits = value.replace(/\D/g, '').replace(/^0+(?=\d)/, '');
|
||||
return (negative ? '-' : '') + digits.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
||||
};
|
||||
|
||||
page.querySelectorAll('[data-koperasi-rupiah]').forEach(input => {
|
||||
if (/^-?[\d.]+$/.test(input.value)) input.value = formatRupiah(input.value);
|
||||
input.addEventListener('input', () => {
|
||||
const digitsBefore = input.value.slice(0, input.selectionStart).replace(/\D/g, '').length;
|
||||
input.value = formatRupiah(input.value);
|
||||
let cursor = input.value.startsWith('-') ? 1 : 0;
|
||||
let count = 0;
|
||||
while (cursor < input.value.length && count < digitsBefore) {
|
||||
if (/\d/.test(input.value[cursor])) count++;
|
||||
cursor++;
|
||||
}
|
||||
input.setSelectionRange(cursor, cursor);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
@@ -0,0 +1,8 @@
|
||||
<div class="mt-4 text-end">
|
||||
<div class="d-inline-flex flex-wrap justify-content-end gap-2">
|
||||
<a href="{{ route('koperasi.pengurus.index') }}" class="btn btn-secondary wave-effect wave-light">Kembali</a>
|
||||
<button type="submit" class="btn btn-success data-submit wave-effect wave-light">
|
||||
<i class="icon-base ti tabler-check me-1_5 icon-sm" aria-hidden="true"></i> Simpan
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success" role="status">{{ session('success') }}</div>
|
||||
@endif
|
||||
@if($errors->any())
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<ul class="mb-0">
|
||||
@foreach($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
@@ -0,0 +1,99 @@
|
||||
@props(['summary'])
|
||||
|
||||
<section class="card koperasi-profile-summary mb-4" id="koperasi-profile-summary" aria-label="Ringkasan profil koperasi">
|
||||
<div class="card-body p-3 p-lg-4">
|
||||
<div class="row g-3 align-items-start">
|
||||
<div class="col-12 col-lg-5">
|
||||
<div class="d-flex align-items-start gap-3">
|
||||
<span class="avatar flex-shrink-0" aria-hidden="true">
|
||||
<span class="avatar-initial rounded bg-label-primary">
|
||||
<i class="icon-base ti tabler-building-store icon-22px"></i>
|
||||
</span>
|
||||
</span>
|
||||
<div class="koperasi-summary-content">
|
||||
<h5 class="mb-1 text-break" data-summary-field="judul">{{ $summary['judul'] }}</h5>
|
||||
<p class="small text-muted mb-1 text-break" data-summary-field="alamat">
|
||||
<i class="icon-base ti tabler-map-pin icon-16px me-1" aria-hidden="true"></i>{{ $summary['alamat'] }}
|
||||
</p>
|
||||
<p class="small mb-2 text-break"><span class="text-muted">Tahun Berdiri:</span> <span data-summary-field="tahun_berdiri">{{ $summary['tahun_berdiri'] }}</span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-7">
|
||||
<div class="row g-3">
|
||||
<div class="col-12 col-sm-6">
|
||||
<p class="koperasi-summary-label mb-1">Jenis Koperasi</p>
|
||||
<span class="badge bg-label-primary" data-summary-field="jenis">{{ $summary['jenis'] }}</span>
|
||||
</div>
|
||||
<div class="col-12 col-sm-6" data-summary-field="layanan">
|
||||
<p class="koperasi-summary-label mb-1">Layanan Utama</p>
|
||||
@if(count($summary['layanan']))
|
||||
<div class="d-flex flex-wrap align-items-start gap-2">
|
||||
@foreach(array_slice($summary['layanan'], 0, 2) as $item)
|
||||
<span class="badge bg-label-primary">{{ $item }}</span>
|
||||
@endforeach
|
||||
@if(count($summary['layanan']) > 2)
|
||||
<button class="btn btn-sm btn-text-primary p-0 koperasi-summary-more" type="button" data-bs-toggle="collapse" data-bs-target="#koperasi-summary-extra-layanan" aria-expanded="false" aria-controls="koperasi-summary-extra-layanan">+{{ count($summary['layanan']) - 2 }} lainnya</button>
|
||||
@endif
|
||||
</div>
|
||||
@if(count($summary['layanan']) > 2)
|
||||
<div class="collapse" id="koperasi-summary-extra-layanan">
|
||||
<div class="d-flex flex-wrap gap-2 pt-2">
|
||||
@foreach(array_slice($summary['layanan'], 2) as $item)
|
||||
<span class="badge bg-label-primary">{{ $item }}</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@else
|
||||
<p class="small mb-0 text-muted">Belum terisi</p>
|
||||
@endif
|
||||
</div>
|
||||
<div class="col-12 col-sm-6">
|
||||
<p class="koperasi-summary-label mb-1">Total Anggota (2025)</p>
|
||||
<span class="fw-medium text-break" data-summary-field="anggota">{{ $summary['anggota'] }}</span>
|
||||
@if($summary['anggota_rincian'])<p class="small text-muted mb-0 text-break">{{ $summary['anggota_rincian'] }}</p>@endif
|
||||
</div>
|
||||
<div class="col-12 col-sm-6">
|
||||
<p class="koperasi-summary-label mb-1">Total Pengurus</p>
|
||||
<span class="fw-medium text-break" data-summary-field="pengurus">{{ $summary['pengurus'] }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer border-top p-3 py-lg-2 px-lg-4">
|
||||
<div class="row gy-3">
|
||||
@foreach(['responden' => ['Nama Responden', 'user'], 'jabatan' => ['Jabatan Responden', 'briefcase'], 'kontak' => ['Kontak Responden', 'phone']] as $field => [$label, $icon])
|
||||
<div class="col-sm-6 col-lg-3 d-flex align-items-center">
|
||||
<span class="avatar avatar-sm me-2 flex-shrink-0" aria-hidden="true">
|
||||
<span class="avatar-initial rounded-circle bg-label-primary">
|
||||
<i class="icon-base ti tabler-{{ $icon }} icon-16px"></i>
|
||||
</span>
|
||||
</span>
|
||||
<div class="koperasi-summary-content">
|
||||
<p class="koperasi-summary-label mb-0">{{ $label }}</p>
|
||||
<span class="fw-medium small text-break" data-summary-field="{{ $field }}">{{ $summary[$field] }}</span>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
<div class="col-sm-6 col-lg-3 d-flex align-items-center">
|
||||
<span class="avatar avatar-sm me-2 flex-shrink-0" aria-hidden="true">
|
||||
<span class="avatar-initial rounded-circle bg-label-primary">
|
||||
<i class="icon-base ti tabler-calendar-event icon-16px"></i>
|
||||
</span>
|
||||
</span>
|
||||
<div class="koperasi-summary-content">
|
||||
<p class="koperasi-summary-label mb-0">Diperbarui</p>
|
||||
<span class="fw-medium small text-break" data-summary-field="diperbarui">
|
||||
@if($summary['diperbarui'])
|
||||
<time datetime="{{ $summary['diperbarui']->toIso8601String() }}">{{ $summary['diperbarui']->locale('id')->translatedFormat('d M Y, H:i') }}</time>
|
||||
@else
|
||||
{{ $summary['tersimpan'] ? 'Belum terisi' : 'Belum tersimpan' }}
|
||||
@endif
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,6 @@
|
||||
@props(['name', 'value' => null, 'showError' => true])
|
||||
|
||||
<input type="text" inputmode="numeric" data-koperasi-rupiah name="{{ $name }}"
|
||||
value="{{ \App\Services\Koperasi\PengurusKoperasiService::formatRupiah($value) }}"
|
||||
{{ $attributes->class(['form-control', 'is-invalid' => $errors->has($name)]) }}>
|
||||
@if($showError)@error($name)<div class="invalid-feedback">{{ $message }}</div>@enderror @endif
|
||||
@@ -0,0 +1,61 @@
|
||||
@props([
|
||||
'model', 'name', 'label', 'options' => [], 'multiple' => false,
|
||||
'type' => 'text', 'placeholder' => null, 'exclusiveValue' => null, 'help' => null,
|
||||
'policy' => null, 'min' => 0, 'max' => null, 'unit' => null,
|
||||
])
|
||||
|
||||
@php
|
||||
$value = old($name, $model->{$name});
|
||||
$id = 'koperasi-' . str_replace('_', '-', $name);
|
||||
$policy ??= app(\App\Services\Koperasi\OperasionalKoperasiService::class);
|
||||
$data = array_replace($model->getAttributes(), session()->getOldInput());
|
||||
$visible = $policy->active($name, $data, $policy->context($model));
|
||||
$required = $visible && in_array($name, $policy->requiredFields(), true);
|
||||
$error = $errors->first($name) ?: $errors->first($name . '.*');
|
||||
@endphp
|
||||
|
||||
<div {{ $attributes->class(['mb-4', 'form-control-validation', 'd-none' => !$visible]) }}
|
||||
data-koperasi-survey-field="{{ $name }}" data-koperasi-conditions="{{ json_encode($policy->dependencies()[$name] ?? []) }}"
|
||||
@if($exclusiveValue) data-koperasi-exclusive="{{ $exclusiveValue }}" @endif>
|
||||
@if($multiple)
|
||||
<fieldset>
|
||||
<legend class="form-label mb-3">{{ $label }} <span class="text-danger {{ $required ? '' : 'd-none' }}" data-koperasi-required-indicator>*</span></legend>
|
||||
<div class="row g-2">
|
||||
@foreach($options as $option)
|
||||
<div class="col-md-6">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input {{ $error ? 'is-invalid' : '' }}" id="{{ $id }}-{{ $loop->index }}" name="{{ $name }}[]" value="{{ $option->value }}"
|
||||
@checked(\App\Services\Koperasi\PengurusKoperasiService::hasSelection($value, $option->value)) @disabled(!$visible)>
|
||||
<label class="form-check-label" for="{{ $id }}-{{ $loop->index }}">{{ $option->label() }}</label>
|
||||
@if(method_exists($option, 'description') && $option->description())<div class="form-text mt-0">{{ $option->description() }}</div>@endif
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</fieldset>
|
||||
@else
|
||||
<label class="form-label" for="{{ $id }}">{{ $label }} <span class="text-danger {{ $required ? '' : 'd-none' }}" data-koperasi-required-indicator>*</span></label>
|
||||
@if($options)
|
||||
<select class="form-select {{ $error ? 'is-invalid' : '' }}" id="{{ $id }}" name="{{ $name }}" @disabled(!$visible) @required($required)>
|
||||
<option value="">Pilih {{ $label }}</option>
|
||||
@foreach($options as $option)
|
||||
<option value="{{ $option->value }}" @selected(\App\Services\Koperasi\PengurusKoperasiService::hasSelection($value, $option->value))>{{ $option->label() }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@elseif($type === 'textarea')
|
||||
<textarea class="form-control {{ $error ? 'is-invalid' : '' }}" id="{{ $id }}" name="{{ $name }}" rows="3" placeholder="{{ $placeholder }}" @disabled(!$visible) @required($required)>{{ $value }}</textarea>
|
||||
@else
|
||||
@if($unit || $type === 'rupiah')<div class="input-group">@endif
|
||||
@if($type === 'rupiah')
|
||||
<span class="input-group-text">Rp</span>
|
||||
<x-koperasi-rupiah :name="$name" :value="$value" :id="$id" :disabled="!$visible" :required="$required" :show-error="false" placeholder="{{ $placeholder }}" />
|
||||
@else
|
||||
<input type="{{ $type }}" class="form-control {{ $error ? 'is-invalid' : '' }}" id="{{ $id }}" name="{{ $name }}" value="{{ $value }}" placeholder="{{ $placeholder }}" @if($type === 'number') min="{{ $min }}" @if($max !== null) max="{{ $max }}" @endif @endif @disabled(!$visible) @required($required)>
|
||||
@endif
|
||||
@if($unit)<span class="input-group-text">{{ $unit }}</span>@endif
|
||||
@if($unit || $type === 'rupiah')</div>@endif
|
||||
@endif
|
||||
@endif
|
||||
@if($help)<div class="form-text">{{ $help }}</div>@endif
|
||||
@if($error)<div class="invalid-feedback d-block">{{ $error }}</div>@endif
|
||||
</div>
|
||||
@@ -1,306 +1,101 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
|
||||
@php
|
||||
$policy = app(\App\Services\Koperasi\OperasionalKoperasiService::class);
|
||||
$context = $policy->context($pengurus);
|
||||
@endphp
|
||||
<div class="container-xxl flex-grow-1 container-p-y koperasi-profile-page">
|
||||
@include('koperasi.profil.header', ['pengurus' => $pengurus])
|
||||
|
||||
<div class="card shadow-sm border-0 mb-4">
|
||||
<div class="card-body p-0">
|
||||
<form action="{{ route('koperasi.pengurus.survey.store', ['id' => $pengurus->id ?? 0, 'step' => 1]) }}" method="POST" class="p-4 p-md-5">
|
||||
<section class="card mb-6" id="section-operasional-pengelolaan" data-koperasi-section tabindex="-1">
|
||||
<div class="card-body pt-6">
|
||||
<form action="{{ route('koperasi.pengurus.kelembagaan-aktor.store', $pengurus->id) }}" method="POST" data-koperasi-operasional data-koperasi-survey
|
||||
data-koperasi-context="{{ json_encode($context) }}"
|
||||
data-koperasi-required="{{ json_encode($policy->requiredFields()) }}">
|
||||
@csrf
|
||||
<input type="hidden" name="pengurus_koperasi_id" value="{{ $pengurus->id ?? '' }}">
|
||||
<input type="hidden" name="section" value="{{ \App\Enums\Koperasi\BagianOperasionalKoperasi::PENGELOLAAN->value }}">
|
||||
|
||||
<h5 class="text-muted fw-bold border-bottom pb-2 mb-2">KELEMBAGAAN & AKTOR SISTEM</h5>
|
||||
<p class="text-muted small mb-3">Memetakan potensi dan kesiapan koperasi sebagai agregator atau mitra pengelola rantai nilai komoditas.</p>
|
||||
|
||||
<h5 class="text-muted pb-2 mt-7 mb-5">KOPERASI & BUMDes</h5>
|
||||
<h5 class="pb-3 border-bottom mb-5 mt-7">Keberadaan Koperasi</h5>
|
||||
|
||||
<div class="mb-4">
|
||||
<h6 class="form-label">Bagaimana sejarah awal pendirian koperasi/CU bapak/ibu? Apa tujuan/cita-cita bersama yang ingin dicapai saat itu?</h6>
|
||||
<textarea class="form-control" name="sejarah_lembaga" rows="3" placeholder="Ceritakan sejarah singkat...">{{ old('sejarah_lembaga', $pengurus->sejarah_lembaga) }}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-6 mb-3">
|
||||
<h6 class="form-label">Apakah koperasi ini memiliki fokus pada pengembangan komoditas pertanian tertentu?</h6>
|
||||
<div class="form-check mb-2">
|
||||
<input class="form-check-input trigger-toggle" type="radio" name="fokus_komoditas" value="Tidak" id="fokusTidak" data-target="fokusYaInput" data-action="hide" {{ old('fokus_komoditas', $pengurus->fokus_komoditas) == 'Tidak' ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="fokusTidak">Tidak</label>
|
||||
</div>
|
||||
<div class="form-check d-flex align-items-center gap-2">
|
||||
<input class="form-check-input trigger-toggle" type="radio" name="fokus_komoditas" value="Ya" id="fokusYa" data-target="fokusYaInput" data-action="show" {{ old('fokus_komoditas', $pengurus->fokus_komoditas) == 'Ya' ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap" for="fokusYa">Ya, sebutkan:</label>
|
||||
<input type="text" class="form-control form-control-sm w-75 {{ old('fokus_komoditas', $pengurus->fokus_komoditas) == 'Ya' ? '' : 'd-none' }}" id="fokusYaInput" name="detail_fokus_komoditas" placeholder="Contoh: Kopi, Vanili" value="{{ old('detail_fokus_komoditas', $pengurus->detail_fokus_komoditas) }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<h6 class="form-label">Apakah ada dokumen kelembagaan (AD/ART)?</h6>
|
||||
<div class="form-check d-flex align-items-center gap-2 mb-2">
|
||||
<input class="form-check-input trigger-toggle" type="radio" name="ad_art" value="Ada, lengkap" id="adArtAda" data-target="adArtTahun" data-action="show" {{ old('ad_art', $pengurus->ad_art) == 'Ada, lengkap' ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap" for="adArtAda">Ada, lengkap, terakhir diperbarui tahun:</label>
|
||||
<input type="number" class="form-control form-control-sm w-25 {{ old('ad_art', $pengurus->ad_art) == 'Ada, lengkap' ? '' : 'd-none' }}" id="adArtTahun" name="tahun_ad_art" placeholder="2020" value="{{ old('tahun_ad_art', $pengurus->tahun_ad_art) }}">
|
||||
</div>
|
||||
<div class="form-check"><input class="form-check-input trigger-toggle" type="radio" name="ad_art" value="Ada tapi tidak lengkap" data-target="adArtTahun" data-action="hide" {{ old('ad_art', $pengurus->ad_art) == 'Ada tapi tidak lengkap' ? 'checked' : '' }}><label class="form-check-label">Ada tapi tidak lengkap</label></div>
|
||||
<div class="form-check"><input class="form-check-input trigger-toggle" type="radio" name="ad_art" value="Tidak ada" data-target="adArtTahun" data-action="hide" {{ old('ad_art', $pengurus->ad_art) == 'Tidak ada' ? 'checked' : '' }}><label class="form-check-label">Tidak ada</label></div>
|
||||
<div class="form-check"><input class="form-check-input trigger-toggle" type="radio" name="ad_art" value="Tidak tahu" data-target="adArtTahun" data-action="hide" {{ old('ad_art', $pengurus->ad_art) == 'Tidak tahu' ? 'checked' : '' }}><label class="form-check-label">Tidak tahu</label></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-3 border-bottom mb-10 mt-4">Ketersediaan Layanan</h5>
|
||||
<div class="mb-4">
|
||||
<h6 class="form-label">Apa saja layanan yang disediakan oleh koperasi bapak/ibu untuk anggota koperasi?</h6>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="layanan_koperasi[]" value="Simpan pinjam" id="cekSimpanPinjam" {{ str_contains($pengurus->layanan_koperasi ?? '', 'Simpan pinjam') ? 'checked' : '' }}><label class="form-check-label">Simpan pinjam</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="layanan_koperasi[]" value="Pengadaan input produksi" {{ str_contains($pengurus->layanan_koperasi ?? '', 'Pengadaan input produksi') ? 'checked' : '' }}><label class="form-check-label">Pengadaan input produksi</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="layanan_koperasi[]" value="Pemasaran hasil" {{ str_contains($pengurus->layanan_koperasi ?? '', 'Pemasaran hasil') ? 'checked' : '' }}><label class="form-check-label">Pemasaran hasil</label></div>
|
||||
<div class="form-check d-flex align-items-center gap-2 mt-2">
|
||||
<input class="form-check-input trigger-toggle-check" type="checkbox" name="layanan_koperasi[]" value="Lainnya" data-target="layananLainnya" {{ str_contains($pengurus->layanan_koperasi ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya, sebutkan:</label>
|
||||
<input type="text" class="form-control form-control-sm w-50 {{ str_contains($pengurus->layanan_koperasi ?? '', 'Lainnya') ? '' : 'd-none' }}" id="layananLainnya" name="layanan_lainnya" placeholder="..." value="{{ old('layanan_lainnya', $pengurus->layanan_lainnya) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-10">
|
||||
<h6 class="form-label">Apakah terdapat program/pelatihan untuk meningkatkan kapasitas anggota koperasi?</h6>
|
||||
<div class="table-responsive mb-5">
|
||||
<table class="table table-sm w-75">
|
||||
<thead class="table-primary ">
|
||||
<tr><th style="border-top-left-radius: 8px; border-bottom-left-radius: 8px; border: none;">Jenis Pelatihan</th><th class="text-center " style="width: 100px; border: none;">Ya</th><th class="text-center" style="border-top-right-radius: 8px; border-bottom-right-radius: 8px; width: 100px; border: none;">Tidak</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Pelatihan produksi pertanian</td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_produksi" value="Ya" {{ old('pelatihan_produksi', $pengurus->pelatihan_produksi) == 'Ya' ? 'checked' : '' }}></td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_produksi" value="Tidak" {{ old('pelatihan_produksi', $pengurus->pelatihan_produksi) == 'Tidak' ? 'checked' : '' }}></td></tr>
|
||||
<tr><td>Pelatihan penanganan pascapanen</td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_pascapanen" value="Ya" {{ old('pelatihan_pascapanen', $pengurus->pelatihan_pascapanen) == 'Ya' ? 'checked' : '' }}></td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_pascapanen" value="Tidak" {{ old('pelatihan_pascapanen', $pengurus->pelatihan_pascapanen) == 'Tidak' ? 'checked' : '' }}></td></tr>
|
||||
<tr><td>Pelatihan pengolahan produk (setengah jadi/jadi)</td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_pengolahan" value="Ya" {{ old('pelatihan_pengolahan', $pengurus->pelatihan_pengolahan) == 'Ya' ? 'checked' : '' }}></td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_pengolahan" value="Tidak" {{ old('pelatihan_pengolahan', $pengurus->pelatihan_pengolahan) == 'Tidak' ? 'checked' : '' }}></td></tr>
|
||||
<tr><td>Pelatihan manajemen keuangan/pembukuan</td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_keuangan" value="Ya" {{ old('pelatihan_keuangan', $pengurus->pelatihan_keuangan) == 'Ya' ? 'checked' : '' }}></td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_keuangan" value="Tidak" {{ old('pelatihan_keuangan', $pengurus->pelatihan_keuangan) == 'Tidak' ? 'checked' : '' }}></td></tr>
|
||||
<tr><td>Pelatihan pengemasan dan pemasaran</td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_pemasaran" value="Ya" {{ old('pelatihan_pemasaran', $pengurus->pelatihan_pemasaran) == 'Ya' ? 'checked' : '' }}></td><td class="text-center"><input class="form-check-input" type="radio" name="pelatihan_pemasaran" value="Tidak" {{ old('pelatihan_pemasaran', $pengurus->pelatihan_pemasaran) == 'Tidak' ? 'checked' : '' }}></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="d-flex align-items-center gap-2 mt-2 mb-5">
|
||||
<label class="form-label mb-0">Lainnya, sebutkan:</label>
|
||||
<input type="text" class="form-control form-control-sm w-50" name="pelatihan_lainnya" placeholder="Pelatihan lainnya..." value="{{ old('pelatihan_lainnya', $pengurus->pelatihan_lainnya) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-3 border-bottom mb-10 mt-4">Kapasitas Pengelolaan</h5>
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-6 mb-1">
|
||||
<h6 class="form-label">Apakah sudah ada pencatatan/pembukuan keuangan?</h6>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="status_pembukuan" value="Sudah" {{ old('status_pembukuan', $pengurus->status_pembukuan) == 'Sudah' ? 'checked' : '' }}><label class="form-check-label">Sudah</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="status_pembukuan" value="Belum ada" {{ old('status_pembukuan', $pengurus->status_pembukuan) == 'Belum ada' ? 'checked' : '' }}><label class="form-check-label">Belum ada</label></div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<h6 class="form-label">Format pembukuan yang dilakukan:</h6>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="format_pembukuan" value="Manual/buku kas" {{ old('format_pembukuan', $pengurus->format_pembukuan) == 'Manual/buku kas' ? 'checked' : '' }}><label class="form-check-label">Manual/buku kas</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="format_pembukuan" value="Digital/file Excel" {{ old('format_pembukuan', $pengurus->format_pembukuan) == 'Digital/file Excel' ? 'checked' : '' }}><label class="form-check-label">Digital/file Excel</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="format_pembukuan" value="Aplikasi khusus" {{ old('format_pembukuan', $pengurus->format_pembukuan) == 'Aplikasi khusus' ? 'checked' : '' }}><label class="form-check-label">Aplikasi keuangan khusus</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="format_pembukuan" value="Tidak ada" {{ old('format_pembukuan', $pengurus->format_pembukuan) == 'Tidak ada' ? 'checked' : '' }}><label class="form-check-label">Tidak ada</label></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<h6 class="form-label mb-3">Berapa kali diadakan pertemuan rutin anggota koperasi untuk membahas <br> rencana kerja dan pertanggungjawaban keuangan?</h6>
|
||||
<div class="form-check"><input class="form-check-input trigger-toggle" type="radio" name="pertemuan_rutin" value="Satu bulan sekali" data-target="pertemuanLainnya" data-action="hide" {{ old('pertemuan_rutin', $pengurus->pertemuan_rutin) == 'Satu bulan sekali' ? 'checked' : '' }}><label class="form-check-label">Satu bulan sekali</label></div>
|
||||
<div class="form-check "><input class="form-check-input trigger-toggle" type="radio" name="pertemuan_rutin" value="Satu tahun sekali" data-target="pertemuanLainnya" data-action="hide" {{ old('pertemuan_rutin', $pengurus->pertemuan_rutin) == 'Satu tahun sekali' ? 'checked' : '' }}><label class="form-check-label">Satu tahun sekali</label></div>
|
||||
<div class="form-check form-check-inline d-inline-flex align-items-center gap-2">
|
||||
<input class="form-check-input trigger-toggle" type="radio" name="pertemuan_rutin" value="Lainnya" data-target="pertemuanLainnya" data-action="show" {{ old('pertemuan_rutin', $pengurus->pertemuan_rutin) == 'Lainnya' ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya:</label>
|
||||
<input type="text" class="form-control form-control-sm {{ old('pertemuan_rutin', $pengurus->pertemuan_rutin) == 'Lainnya' ? '' : 'd-none' }}" id="pertemuanLainnya" name="pertemuan_lainnya" placeholder="..." value="{{ old('pertemuan_lainnya', $pengurus->pertemuan_lainnya) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="blok-simpan-pinjam" class="p-3 mb-4 rounded border border-primary bg-label-primary {{ str_contains($pengurus->layanan_koperasi ?? '', 'Simpan pinjam') ? '' : 'd-none' }}">
|
||||
<h6 class="fw-bold text-primary mb-3"><i class="ti tabler-info-circle me-1"></i>Khusus Koperasi Simpan Pinjam</h6>
|
||||
<h5 class="pb-4 border-bottom mb-4">Dokumen Kelembagaan</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Tingkat/persentase kredit macet di koperasi?</label>
|
||||
<select class="form-select form-select-sm" name="kasus_kredit_macet">
|
||||
<option value="" selected disabled>Pilih...</option>
|
||||
<option value="<10%" {{ old('kasus_kredit_macet', $pengurus->kasus_kredit_macet) == '<10%' ? 'selected' : '' }}> < 10% </option>
|
||||
<option value="10-25%" {{ old('kasus_kredit_macet', $pengurus->kasus_kredit_macet) == '10-25%' ? 'selected' : '' }}>10 - 25%</option>
|
||||
<option value="25-50%" {{ old('kasus_kredit_macet', $pengurus->kasus_kredit_macet) == '25-50%' ? 'selected' : '' }}>25 - 50%</option>
|
||||
<option value="50-75%" {{ old('kasus_kredit_macet', $pengurus->kasus_kredit_macet) == '50-75%' ? 'selected' : '' }}>50 - 75%</option>
|
||||
<option value=">75%" {{ old('kasus_kredit_macet', $pengurus->kasus_kredit_macet) == '>75%' ? 'selected' : '' }}> > 75% </option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Apakah ada sanksi untuk anggota dengan kredit macet?</label>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="radio" name="sanksi_kredit_macet" value="Ada" {{ old('sanksi_kredit_macet', $pengurus->sanksi_kredit_macet) == 'Ada' ? 'checked' : '' }}><label class="form-check-label">Ada</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="radio" name="sanksi_kredit_macet" value="Tidak ada" {{ old('sanksi_kredit_macet', $pengurus->sanksi_kredit_macet) == 'Tidak ada' ? 'checked' : '' }}><label class="form-check-label">Tidak ada</label></div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Jika ada, apakah sanksi tersebut efektif?</label>
|
||||
<select class="form-select form-select-sm" name="efektivitas_sanksi">
|
||||
<option value="" selected disabled>Pilih efektivitas...</option>
|
||||
<option value="Sangat efektif" {{ old('efektivitas_sanksi', $pengurus->efektivitas_sanksi) == 'Sangat efektif' ? 'selected' : '' }}>Sangat efektif</option>
|
||||
<option value="Efektif" {{ old('efektivitas_sanksi', $pengurus->efektivitas_sanksi) == 'Efektif' ? 'selected' : '' }}>Efektif</option>
|
||||
<option value="Biasa Saja" {{ old('efektivitas_sanksi', $pengurus->efektivitas_sanksi) == 'Biasa Saja' ? 'selected' : '' }}>Biasa Saja</option>
|
||||
<option value="Kurang Efektif" {{ old('efektivitas_sanksi', $pengurus->efektivitas_sanksi) == 'Kurang Efektif' ? 'selected' : '' }}>Kurang Efektif</option>
|
||||
<option value="Tidak Efektif" {{ old('efektivitas_sanksi', $pengurus->efektivitas_sanksi) == 'Tidak Efektif' ? 'selected' : '' }}>Tidak Efektif</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<x-koperasi-survey-field :model="$pengurus" name="ad_art" label="Status AD/ART" :options="\App\Enums\Koperasi\StatusAdArtKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="tahun_ad_art" label="Tahun Pembaruan AD/ART" class="col-md-6" type="number" min="1900" :max="now()->year" placeholder="Contoh: 2024" />
|
||||
</div>
|
||||
|
||||
<div class="mb-10">
|
||||
<h6 class="form-label mb-3">Apa faktor utama yang menyebabkan manajemen pengelolaan dalam koperasi efektif/tidak efektif?</h6>
|
||||
<div class="form-check "><input class="form-check-input" type="checkbox" name="faktor_manajemen[]" value="Rasa saling percaya" {{ str_contains($pengurus->faktor_manajemen ?? '', 'Rasa saling percaya') ? 'checked' : '' }}><label class="form-check-label">Rasa saling percaya</label></div>
|
||||
<div class="form-check "><input class="form-check-input" type="checkbox" name="faktor_manajemen[]" value="Kepemimpinan koperasi" {{ str_contains($pengurus->faktor_manajemen ?? '', 'Kepemimpinan koperasi') ? 'checked' : '' }}><label class="form-check-label">Kepemimpinan koperasi</label></div>
|
||||
<div class="form-check "><input class="form-check-input" type="checkbox" name="faktor_manajemen[]" value="Jumlah anggota" {{ str_contains($pengurus->faktor_manajemen ?? '', 'Jumlah anggota') ? 'checked' : '' }}><label class="form-check-label">Jumlah anggota</label></div>
|
||||
<div class="form-check "><input class="form-check-input" type="checkbox" name="faktor_manajemen[]" value="Catatan/pembukuan rapi" {{ str_contains($pengurus->faktor_manajemen ?? '', 'Catatan/pembukuan rapi') ? 'checked' : '' }}><label class="form-check-label">Catatan/pembukuan rapi</label></div>
|
||||
<div class="form-check d-inline-flex align-items-center gap-2 mt-2 mt-md-0">
|
||||
<input class="form-check-input trigger-toggle-check" type="checkbox" name="faktor_manajemen[]" value="Lainnya" data-target="faktorLainnya" {{ str_contains($pengurus->faktor_manajemen ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya, Sebutkan:</label>
|
||||
<input type="text" class="form-control form-control-sm {{ str_contains($pengurus->faktor_manajemen ?? '', 'Lainnya') ? '' : 'd-none' }}" id="faktorLainnya" name="faktor_manajemen_lainnya" placeholder="..." value="{{ old('faktor_manajemen_lainnya', $pengurus->faktor_manajemen_lainnya) }}">
|
||||
</div>
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Layanan Koperasi</h5>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :model="$pengurus" name="layanan_koperasi" label="Layanan Koperasi" :options="\App\Enums\Koperasi\LayananKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="layanan_lainnya" label="Layanan Lainnya" class="col-md-12" />
|
||||
</div>
|
||||
|
||||
<h5 class="pb-3 border-bottom mb-10 mt-4">Pengalaman dalam mengelola rantai nilai komoditas pertanian</h5>
|
||||
<div class="mb-4">
|
||||
<label class="form-label">Apakah koperasi Bapak/Ibu terlibat dalam proses rantai nilai berikut ini?</label>
|
||||
<div class="row g-2">
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="keterlibatan_rantai_nilai[]" value="Penyediaan input" {{ str_contains($pengurus->keterlibatan_rantai_nilai ?? '', 'Penyediaan input') ? 'checked' : '' }}><label class="form-check-label">Penyediaan input (pupuk, bibit, dll)</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="keterlibatan_rantai_nilai[]" value="Agregasi" {{ str_contains($pengurus->keterlibatan_rantai_nilai ?? '', 'Agregasi') ? 'checked' : '' }}><label class="form-check-label">Agregasi (pengumpulan) produk pertanian dan perkebunan</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="keterlibatan_rantai_nilai[]" value="Pemasaran mentah" {{ str_contains($pengurus->keterlibatan_rantai_nilai ?? '', 'Pemasaran mentah') ? 'checked' : '' }}><label class="form-check-label">Pemasaran produk mentah (belum diolah)</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="keterlibatan_rantai_nilai[]" value="Pengolahan barang jadi" {{ str_contains($pengurus->keterlibatan_rantai_nilai ?? '', 'Pengolahan barang jadi') ? 'checked' : '' }}><label class="form-check-label">Pengolahan produk pangan menjadi bahan setengah jadi/barang jadi</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="keterlibatan_rantai_nilai[]" value="Pemasaran olahan" {{ str_contains($pengurus->keterlibatan_rantai_nilai ?? '', 'Pemasaran olahan') ? 'checked' : '' }}><label class="form-check-label">Pemasaran produk pertanian olahan</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="keterlibatan_rantai_nilai[]" value="Jual langsung konsumen" {{ str_contains($pengurus->keterlibatan_rantai_nilai ?? '', 'Jual langsung konsumen') ? 'checked' : '' }}><label class="form-check-label">Penjualan langsung ke konsumen akhir</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="keterlibatan_rantai_nilai[]" value="Tidak terlibat kegiatan di atas" {{ str_contains($pengurus->keterlibatan_rantai_nilai ?? '', 'Tidak terlibat kegiatan di atas') ? 'checked' : '' }}><label class="form-check-label">Tidak terlibat kegiatan di atas</label></div></div>
|
||||
</div>
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Pelatihan Anggota</h5>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :model="$pengurus" name="pelatihan_produksi" label="Pelatihan Produksi Pertanian" :options="\App\Enums\Koperasi\JawabanYaTidakKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="pelatihan_pascapanen" label="Pelatihan Penanganan Pascapanen" :options="\App\Enums\Koperasi\JawabanYaTidakKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="pelatihan_pengolahan" label="Pelatihan Pengolahan Produk Jadi/Setengah Jadi" :options="\App\Enums\Koperasi\JawabanYaTidakKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="pelatihan_keuangan" label="Pelatihan Manajemen Keuangan/Pembukuan" :options="\App\Enums\Koperasi\JawabanYaTidakKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="pelatihan_pemasaran" label="Pelatihan Pengemasan dan Pemasaran" :options="\App\Enums\Koperasi\JawabanYaTidakKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="pelatihan_lainnya" label="Pelatihan Lainnya" class="col-md-6" />
|
||||
</div>
|
||||
|
||||
<div class="mb-10">
|
||||
<h6 class="mb-3">Jika terlibat dalam proses agregasi, komoditas apa saja yang di agregasi oleh koperasi?</h6>
|
||||
|
||||
<div class="form-check form-check-inline mt-2"><input class="form-check-input opsi-agregasi" type="checkbox" name="agregasi_komoditas[]" value="Kopi" {{ str_contains($pengurus->agregasi_komoditas ?? '', 'Kopi') ? 'checked' : '' }}><label class="form-check-label">Kopi</label></div>
|
||||
<div class="form-check form-check-inline mt-2"><input class="form-check-input opsi-agregasi" type="checkbox" name="agregasi_komoditas[]" value="Kakao" {{ str_contains($pengurus->agregasi_komoditas ?? '', 'Kakao') ? 'checked' : '' }}><label class="form-check-label">Kakao</label></div>
|
||||
<div class="form-check form-check-inline mt-2"><input class="form-check-input opsi-agregasi" type="checkbox" name="agregasi_komoditas[]" value="Vanili" {{ str_contains($pengurus->agregasi_komoditas ?? '', 'Vanili') ? 'checked' : '' }}><label class="form-check-label">Vanili</label></div>
|
||||
<div class="form-check form-check-inline mt-2"><input class="form-check-input opsi-agregasi" type="checkbox" name="agregasi_komoditas[]" value="Kemiri" {{ str_contains($pengurus->agregasi_komoditas ?? '', 'Kemiri') ? 'checked' : '' }}><label class="form-check-label">Kemiri</label></div>
|
||||
|
||||
<div class="form-check form-check-inline d-inline-flex align-items-center gap-2 mt-2">
|
||||
<input class="form-check-input trigger-toggle-check opsi-agregasi" type="checkbox" name="agregasi_komoditas[]" value="Lainnya" data-target="komoditasLainnya" {{ str_contains($pengurus->agregasi_komoditas ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya, sebutkan:</label>
|
||||
<input type="text" class="form-control form-control-sm w-auto {{ str_contains($pengurus->agregasi_komoditas ?? '', 'Lainnya') ? '' : 'd-none' }}" id="komoditasLainnya" name="agregasi_komoditas_lainnya" placeholder="..." value="{{ old('agregasi_komoditas_lainnya', $pengurus->agregasi_komoditas_lainnya) }}">
|
||||
</div>
|
||||
|
||||
<div class="form-check mt-3">
|
||||
<input class="form-check-input" type="checkbox" name="agregasi_komoditas[]" value="Tidak terlibat" id="triggerSkipD6" {{ str_contains($pengurus->agregasi_komoditas ?? '', 'Tidak terlibat') ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="triggerSkipD6">Tidak terlibat proses agregasi <small class="text-danger">(Mencentang ini akan melewati bagian D6)</small></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="blok-sisa-d5" style="{{ str_contains($pengurus->agregasi_komoditas ?? '', 'Tidak terlibat') ? 'display: none;' : 'display: block;' }}">
|
||||
<div class="mb-10">
|
||||
<h6 class="mb-3">Fasilitas pengolahan pascapanen apa saja yang dikelola oleh koperasi saat ini?</h6>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="fasilitas_koperasi[]" value="Gudang penyimpanan" {{ str_contains($pengurus->fasilitas_koperasi ?? '', 'Gudang penyimpanan') ? 'checked' : '' }}><label class="form-check-label">Gudang</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="fasilitas_koperasi[]" value="Alat pengering" {{ str_contains($pengurus->fasilitas_koperasi ?? '', 'Alat pengering') ? 'checked' : '' }}><label class="form-check-label">Alat pengering</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="fasilitas_koperasi[]" value="Mesin pemecah" {{ str_contains($pengurus->fasilitas_koperasi ?? '', 'Mesin pemecah') ? 'checked' : '' }}><label class="form-check-label">Mesin pemecah</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="fasilitas_koperasi[]" value="Mesin penggiling" {{ str_contains($pengurus->fasilitas_koperasi ?? '', 'Mesin penggiling') ? 'checked' : '' }}><label class="form-check-label">Mesin penggiling</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="fasilitas_koperasi[]" value="Mesin sortasi" {{ str_contains($pengurus->fasilitas_koperasi ?? '', 'Mesin sortasi') ? 'checked' : '' }}><label class="form-check-label">Mesin sortasi</label></div>
|
||||
<div class="form-check form-check-inline d-inline-flex align-items-center gap-2">
|
||||
<input class="form-check-input trigger-toggle-check" type="checkbox" name="fasilitas_koperasi[]" value="Lainnya" data-target="fasilitasLainnya" {{ str_contains($pengurus->fasilitas_koperasi ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya:</label>
|
||||
<input type="text" class="form-control form-control-sm {{ str_contains($pengurus->fasilitas_koperasi ?? '', 'Lainnya') ? '' : 'd-none' }}" id="fasilitasLainnya" name="fasilitas_lainnya" placeholder="..." value="{{ old('fasilitas_lainnya', $pengurus->fasilitas_lainnya) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-10">
|
||||
<h6 class="mb-3">Apakah koperasi melakukan pengolahan lanjutan untuk menaikkan nilai jual <br> (seperti pengeringan, fermentasi, penepungan, pengemasan)?</h6>
|
||||
<div class="form-check d-flex align-items-center gap-2 mb-2">
|
||||
<input class="form-check-input trigger-toggle" type="radio" name="pengolahan_lanjutan" value="Ya" id="pengolahanYa" data-target="pengolahanYaInput" data-action="show" {{ old('pengolahan_lanjutan', $pengurus->pengolahan_lanjutan) == 'Ya' ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap" for="pengolahanYa">Ya, sebutkan:</label>
|
||||
<input type="text" class="form-control form-control-sm w-50 {{ old('pengolahan_lanjutan', $pengurus->pengolahan_lanjutan) == 'Ya' ? '' : 'd-none' }}" id="pengolahanYaInput" name="detail_pengolahan_lanjutan" placeholder="Contoh: Fermentasi biji kopi" value="{{ old('detail_pengolahan_lanjutan', $pengurus->detail_pengolahan_lanjutan) }}">
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input trigger-toggle" type="radio" name="pengolahan_lanjutan" value="Tidak" id="pengolahanTidak" data-target="pengolahanYaInput" data-action="hide" {{ old('pengolahan_lanjutan', $pengurus->pengolahan_lanjutan) == 'Tidak' ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="pengolahanTidak">Tidak</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-10">
|
||||
<h6 class="mb-3">Bagaimana cara pengurus koperasi menentukan harga beli di tingkat petani anggota? (Transparan/fluktuasi/kualitas mutu)</h6>
|
||||
<textarea class="form-control" name="cara_penentuan_harga" rows="3" placeholder="Jelaskan mekanisme penetapan harga...">{{ old('cara_penentuan_harga', $pengurus->cara_penentuan_harga) }}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<h6 class="mb-3">Adakah kontrak kerjasama antara koperasi dengan mitra pembeli utama (offtaker) atau perusahaan?</h6>
|
||||
<div class="form-check d-flex align-items-center gap-2 mb-2">
|
||||
<input class="form-check-input trigger-toggle" type="radio" name="kontrak_offtaker" value="Ada" id="kontrakAda" data-target="kontrakAdaInput" data-action="show" {{ old('kontrak_offtaker', $pengurus->kontrak_offtaker) == 'Ada' ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap" for="kontrakAda">Ada, sebutkan komoditasnya:</label>
|
||||
<input type="text" class="form-control form-control-sm w-50 {{ old('kontrak_offtaker', $pengurus->kontrak_offtaker) == 'Ada' ? '' : 'd-none' }}" id="kontrakAdaInput" name="kontrak_komoditas" placeholder="Contoh: Kopi Robusta" value="{{ old('kontrak_komoditas', $pengurus->kontrak_komoditas) }}">
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input trigger-toggle" type="radio" name="kontrak_offtaker" value="Tidak ada" data-target="kontrakAdaInput" data-action="hide" {{ old('kontrak_offtaker', $pengurus->kontrak_offtaker) == 'Tidak ada' ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="kontrakAda">Tidak ada</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between mt-5 border-top pt-4">
|
||||
<div></div>
|
||||
|
||||
<div class="ms-auto">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
Simpan & Selanjutnya <i class="ti tabler-arrow-right ms-1"></i>
|
||||
</button>
|
||||
</div>
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Kapasitas Pengelolaan</h5>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :model="$pengurus" name="status_pembukuan" label="Pembukuan Keuangan" :options="\App\Enums\Koperasi\StatusPembukuanKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="format_pembukuan" label="Format Pembukuan" :options="\App\Enums\Koperasi\FormatPembukuanKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="pertemuan_rutin" label="Frekuensi Pertemuan Anggota" :options="\App\Enums\Koperasi\FrekuensiPertemuanKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="pertemuan_lainnya" label="Frekuensi Pertemuan Lainnya" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="kasus_kredit_macet" label="Tingkat Kredit Macet" :options="\App\Enums\Koperasi\TingkatKreditMacetKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="sanksi_kredit_macet" label="Sanksi Kredit Macet" :options="\App\Enums\Koperasi\KetersediaanKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="efektivitas_sanksi" label="Efektivitas Sanksi" :options="\App\Enums\Koperasi\EfektivitasSanksiKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="faktor_manajemen" label="Faktor Pengelolaan" :options="\App\Enums\Koperasi\FaktorManajemenKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="faktor_manajemen_lainnya" label="Faktor Pengelolaan Lainnya" class="col-md-12" />
|
||||
</div>
|
||||
|
||||
<x-koperasi-form-actions />
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="card mb-6" id="section-operasional-rantai-nilai" data-koperasi-section tabindex="-1">
|
||||
<div class="card-body pt-6">
|
||||
<form action="{{ route('koperasi.pengurus.kelembagaan-aktor.store', $pengurus->id) }}" method="POST" data-koperasi-operasional data-koperasi-survey
|
||||
data-koperasi-context="{{ json_encode($context) }}"
|
||||
data-koperasi-required="{{ json_encode($policy->requiredFields()) }}">
|
||||
@csrf
|
||||
<input type="hidden" name="section" value="{{ \App\Enums\Koperasi\BagianOperasionalKoperasi::RANTAI_NILAI->value }}">
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Rantai Nilai dan Pascapanen</h5>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :model="$pengurus" name="keterlibatan_rantai_nilai" label="Peran dalam Rantai Nilai" :options="\App\Enums\Koperasi\PeranRantaiNilaiKoperasi::cases()" :multiple="true" class="col-md-12" :exclusive-value="\App\Enums\Koperasi\PeranRantaiNilaiKoperasi::TIDAK_TERLIBAT->value" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="agregasi_komoditas" label="Komoditas Agregasi" :options="\App\Enums\Koperasi\KomoditasAgregasiKoperasi::cases()" :multiple="true" class="col-md-12" :exclusive-value="\App\Enums\Koperasi\KomoditasAgregasiKoperasi::TIDAK_TERLIBAT->value" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="agregasi_komoditas_lainnya" label="Komoditas Agregasi Lainnya" class="col-md-12" />
|
||||
</div>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :model="$pengurus" name="fasilitas_koperasi" label="Fasilitas Pascapanen" :options="\App\Enums\Koperasi\FasilitasKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="fasilitas_lainnya" label="Fasilitas Lainnya" class="col-md-12" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="pengolahan_lanjutan" label="Pengolahan Lanjutan" :options="\App\Enums\Koperasi\JawabanYaTidakKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="detail_pengolahan_lanjutan" label="Jenis Pengolahan Lanjutan" placeholder="Contoh: Pengeringan skala besar, fermentasi kolektif, penepungan, atau pengemasan" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="cara_penentuan_harga" label="Penetapan Harga Beli" class="col-md-12" type="textarea" placeholder="Jelaskan mekanisme penetapan harga beli" help="Jelaskan transparansi penetapan harga, acuan harga pasar lokal/nasional, dan pengaruh mutu komoditas." />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="kontrak_offtaker" label="Kontrak dengan Mitra Pembeli" :options="\App\Enums\Koperasi\KetersediaanKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="kontrak_komoditas" label="Komoditas dalam Kontrak" class="col-md-6" />
|
||||
</div>
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Peluang Nilai Tambah (Pengolahan Pascapanen)</h5>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :model="$pengurus" name="praktik_sortasi" label="Praktik Sortasi" :options="\App\Enums\Koperasi\PraktikSortasiKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="standar_sortasi" label="Standar/Kriteria Sortasi" placeholder="Contoh: Ukuran biji, kadar air, dan mutu" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="praktik_pengeringan" label="Praktik Pengeringan" :options="\App\Enums\Koperasi\PraktikPengeringanKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="cara_pengeringan" label="Cara dan Tempat Pengeringan" placeholder="Contoh: Penjemuran di lantai jemur" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="praktik_fermentasi" label="Praktik Fermentasi/Pengepresan" :options="\App\Enums\Koperasi\PraktikFermentasiKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="model_fermentasi" label="Model Fermentasi" :options="\App\Enums\Koperasi\ModelFermentasiKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="proses_fermentasi" label="Proses Fermentasi" type="textarea" class="col-md-12" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="harga_premium_rupiah" label="Premium Harga (Rupiah)" type="rupiah" unit="/kg" placeholder="0" help="Isi premium dalam rupiah atau persen, pilih salah satu." class="col-md-6" />
|
||||
<x-koperasi-survey-field :model="$pengurus" name="harga_premium_persen" label="Premium Harga (Persen)" type="number" :max="100" unit="%" placeholder="0" class="col-md-6" />
|
||||
</div>
|
||||
|
||||
<x-koperasi-form-actions />
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
$('.trigger-toggle').change(function() {
|
||||
let target = $(this).data('target');
|
||||
let action = $(this).data('action');
|
||||
if (action === 'show') {
|
||||
$('#' + target).removeClass('d-none').focus();
|
||||
} else {
|
||||
$('#' + target).addClass('d-none').val('');
|
||||
}
|
||||
});
|
||||
|
||||
$('.trigger-toggle-check').change(function() {
|
||||
let target = $(this).data('target');
|
||||
if ($(this).is(':checked')) {
|
||||
$('#' + target).removeClass('d-none').focus();
|
||||
} else {
|
||||
$('#' + target).addClass('d-none').val('');
|
||||
}
|
||||
});
|
||||
|
||||
$('#cekSimpanPinjam').on('change', function() {
|
||||
if($(this).is(':checked')) {
|
||||
$('#blok-simpan-pinjam').removeClass('d-none').hide().slideDown();
|
||||
} else {
|
||||
$('#blok-simpan-pinjam').slideUp(function() {
|
||||
$(this).addClass('d-none');
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#triggerSkipD6').on('change', function() {
|
||||
if ($(this).is(':checked')) {
|
||||
$('#blok-sisa-d5').slideUp();
|
||||
$('.opsi-agregasi').prop('checked', false);
|
||||
$('#komoditasLainnya').addClass('d-none').val('');
|
||||
} else {
|
||||
$('#blok-sisa-d5').slideDown();
|
||||
}
|
||||
});
|
||||
|
||||
$('.opsi-agregasi').on('change', function() {
|
||||
if ($(this).is(':checked')) {
|
||||
$('#triggerSkipD6').prop('checked', false);
|
||||
$('#blok-sisa-d5').slideDown();
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -1,149 +1,175 @@
|
||||
<h6 class="fw-bold mb-3">Data Pribadi Responden</h6>
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Nama Lengkap <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('nama_lengkap') is-invalid @enderror" name="nama_lengkap" value="{{ old('nama_lengkap', $pengurus->nama_lengkap ?? '') }}" placeholder="Contoh: Budi Santoso" required>
|
||||
@error('nama_lengkap')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
@php
|
||||
$currentJenis = old('jenis_koperasi', $pengurus->jenis_koperasi);
|
||||
$lainnyaValue = \App\Enums\Koperasi\JenisKoperasi::LAINNYA->value;
|
||||
$isLainnya = filled($currentJenis) && (\App\Enums\Koperasi\JenisKoperasi::tryFrom($currentJenis) === null || $currentJenis === $lainnyaValue);
|
||||
$jenisLainnya = old('jenis_koperasi_lainnya', $isLainnya && $currentJenis !== $lainnyaValue ? $currentJenis : '');
|
||||
$currentFokus = old('fokus_komoditas', $pengurus->fokus_komoditas?->value);
|
||||
$fokusYa = $currentFokus === \App\Enums\Koperasi\FokusKomoditasKoperasi::YA->value;
|
||||
@endphp
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Data Responden</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-nama-lengkap">Nama Responden <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('nama_lengkap') is-invalid @enderror" id="koperasi-nama-lengkap" name="nama_lengkap" value="{{ old('nama_lengkap', $pengurus->nama_lengkap ?? '') }}" placeholder="Contoh: Budi Santoso" required>
|
||||
@error('nama_lengkap')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Posisi dalam Koperasi <span class="text-danger">*</span></label>
|
||||
<select class="form-select @error('posisi_dalam_koperasi') is-invalid @enderror" name="posisi_dalam_koperasi" required>
|
||||
<option value="" disabled {{ !isset($pengurus) ? 'selected' : '' }}>Pilih Posisi</option>
|
||||
<option value="Pengurus koperasi" {{ old('posisi_dalam_koperasi', $pengurus->posisi_dalam_koperasi ?? '') == 'Pengurus koperasi' ? 'selected' : '' }}>Pengurus koperasi</option>
|
||||
<option value="Anggota koperasi" {{ old('posisi_dalam_koperasi', $pengurus->posisi_dalam_koperasi ?? '') == 'Anggota koperasi' ? 'selected' : '' }}>Anggota koperasi</option>
|
||||
<option value="Pendamping koperasi" {{ old('posisi_dalam_koperasi', $pengurus->posisi_dalam_koperasi ?? '') == 'Pendamping koperasi' ? 'selected' : '' }}>Pendamping koperasi</option>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-posisi">Posisi dalam Koperasi <span class="text-danger">*</span></label>
|
||||
<select class="form-select @error('posisi_dalam_koperasi') is-invalid @enderror" id="koperasi-posisi" name="posisi_dalam_koperasi" required>
|
||||
<option value="">Pilih Posisi</option>
|
||||
@foreach(\App\Enums\Koperasi\PosisiKoperasi::cases() as $posisi)
|
||||
<option value="{{ $posisi->value }}" @selected(old('posisi_dalam_koperasi', $pengurus->posisi_dalam_koperasi?->value) === $posisi->value)>{{ $posisi->value }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('posisi_dalam_koperasi')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
@error('posisi_dalam_koperasi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Tahun Bergabung Koperasi</label>
|
||||
<input type="number" class="form-control @error('tahun_bergabung') is-invalid @enderror" name="tahun_bergabung" value="{{ old('tahun_bergabung', $pengurus->tahun_bergabung ?? '') }}" placeholder="Contoh: 2020" min="1900" max="{{ date('Y') }}">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-tahun-bergabung">Tahun Bergabung Koperasi</label>
|
||||
<input type="number" class="form-control @error('tahun_bergabung') is-invalid @enderror" id="koperasi-tahun-bergabung" name="tahun_bergabung" value="{{ old('tahun_bergabung', $pengurus->tahun_bergabung ?? '') }}" placeholder="Contoh: 2020" min="1900" max="{{ date('Y') }}">
|
||||
@error('tahun_bergabung')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">No. Handphone</label>
|
||||
<input type="text" class="form-control @error('no_hp') is-invalid @enderror" name="no_hp" value="{{ old('no_hp', $pengurus->no_hp ?? '') }}" placeholder="Contoh: 08123456789">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-no-hp">Nomor HP</label>
|
||||
<input type="text" class="form-control @error('no_hp') is-invalid @enderror" id="koperasi-no-hp" name="no_hp" value="{{ old('no_hp', $pengurus->no_hp ?? '') }}" placeholder="Contoh: 08123456789">
|
||||
@error('no_hp')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-12 mb-3">
|
||||
<label class="form-label">Alamat Tinggal</label>
|
||||
<textarea class="form-control @error('alamat_tinggal') is-invalid @enderror" name="alamat_tinggal" rows="2" placeholder="Masukkan alamat domisili lengkap">{{ old('alamat_tinggal', $pengurus->alamat_tinggal ?? '') }}</textarea>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-alamat-tinggal">Alamat Tinggal</label>
|
||||
<textarea class="form-control @error('alamat_tinggal') is-invalid @enderror" id="koperasi-alamat-tinggal" name="alamat_tinggal" rows="2" placeholder="Masukkan alamat domisili lengkap">{{ old('alamat_tinggal', $pengurus->alamat_tinggal ?? '') }}</textarea>
|
||||
@error('alamat_tinggal')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h6 class="fw-bold mb-3 pt-3 border-top">Profil Koperasi</h6>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Nama Koperasi <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('nama_koperasi') is-invalid @enderror" name="nama_koperasi" value="{{ old('nama_koperasi', $pengurus->nama_koperasi ?? '') }}" placeholder="Contoh: Koperasi Tani Makmur" required>
|
||||
@error('nama_koperasi')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label d-block">Jenis Koperasi <span class="text-danger">*</span></label>
|
||||
<div class="row g-2">
|
||||
@foreach(['Koperasi Produksi', 'Koperasi Simpan Pinjam', 'Koperasi Pemasaran', 'Koperasi Desa'] as $jenis)
|
||||
<div class="col-md-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="jenis_koperasi" id="jenis_{{ $loop->index }}" value="{{ $jenis }}" {{ old('jenis_koperasi', $pengurus->jenis_koperasi ?? '') == $jenis ? 'checked' : '' }} required>
|
||||
<label class="form-check-label" for="jenis_{{ $loop->index }}">{{ $jenis }}</label>
|
||||
</div>
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Identitas Koperasi</h5>
|
||||
@if($wilayahTersedia)
|
||||
<div class="row" data-koperasi-wilayah data-kabupaten-url="{{ route('kabupatenkota.byprovinsi', ':id') }}"
|
||||
data-kecamatan-url="{{ route('kecamatan.bykabupatenkota', ':id') }}" data-desa-url="{{ route('desakelurahan.bykecamatan', ':id') }}">
|
||||
@foreach([
|
||||
'provinsi_id' => ['Provinsi', 'provinsiOptions', 'provinsi', null],
|
||||
'kabupaten_kota_id' => ['Kabupaten/Kota', 'kabupatenOptions', 'kabupaten', 'provinsi_id'],
|
||||
'kecamatan_id' => ['Kecamatan', 'kecamatanOptions', 'kecamatan', 'kabupaten_kota_id'],
|
||||
'desa_kelurahan_id' => ['Desa/Kelurahan', 'desaOptions', 'desa', 'kecamatan_id'],
|
||||
] as $field => [$label, $options, $selector, $parent])
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-{{ $field }}">{{ $label }}</label>
|
||||
<select name="{{ $field }}" id="koperasi-{{ $field }}" class="form-select @error($field) is-invalid @enderror"
|
||||
data-wilayah-{{ $selector }} @disabled($parent && empty($selectedWilayah[$parent]))>
|
||||
<option value="">Pilih {{ $label }}</option>
|
||||
@foreach(${$options} as $option)
|
||||
<option value="{{ $option->id }}" @selected((string) $selectedWilayah[$field] === (string) $option->id)>{{ $option->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error($field)<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="mt-2 d-flex align-items-center">
|
||||
@php
|
||||
$isLainnya = isset($pengurus) && !in_array($pengurus->jenis_koperasi, ['Koperasi Produksi', 'Koperasi Simpan Pinjam', 'Koperasi Pemasaran', 'Koperasi Desa']) && $pengurus->jenis_koperasi != null;
|
||||
@endphp
|
||||
<div class="form-check me-3">
|
||||
<input class="form-check-input" type="radio" name="jenis_koperasi" id="jenis_lainnya" value="Lainnya" {{ old('jenis_koperasi') == 'Lainnya' || $isLainnya ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="jenis_lainnya">Lainnya, sebutkan:</label>
|
||||
@endif
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-nama">Nama Koperasi <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('nama_koperasi') is-invalid @enderror" id="koperasi-nama" name="nama_koperasi" value="{{ old('nama_koperasi', $pengurus->nama_koperasi ?? '') }}" placeholder="Contoh: Koperasi Tani Makmur" required>
|
||||
@error('nama_koperasi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-tahun-berdiri">Tahun Berdiri</label>
|
||||
<input type="number" class="form-control @error('tahun_berdiri') is-invalid @enderror" id="koperasi-tahun-berdiri" name="tahun_berdiri" value="{{ old('tahun_berdiri', $pengurus->tahun_berdiri ?? '') }}" placeholder="Contoh: 2015" min="1900" max="{{ date('Y') }}">
|
||||
@error('tahun_berdiri')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-jumlah-anggota-awal">Jumlah Anggota Awal Berdiri</label>
|
||||
<div class="input-group">
|
||||
<input type="number" class="form-control @error('jumlah_anggota_awal') is-invalid @enderror" id="koperasi-jumlah-anggota-awal" name="jumlah_anggota_awal" value="{{ old('jumlah_anggota_awal', $pengurus->jumlah_anggota_awal ?? '') }}" placeholder="0" min="0">
|
||||
<span class="input-group-text">orang</span>
|
||||
@error('jumlah_anggota_awal')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<input type="text" class="form-control form-control-sm w-50" name="jenis_koperasi_lainnya" value="{{ old('jenis_koperasi_lainnya', $isLainnya ? $pengurus->jenis_koperasi : '') }}" placeholder="Sebutkan jenis koperasi...">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Alamat Koperasi</label>
|
||||
<textarea class="form-control @error('alamat_koperasi') is-invalid @enderror" name="alamat_koperasi" rows="2" placeholder="Masukkan alamat lengkap koperasi">{{ old('alamat_koperasi', $pengurus->alamat_koperasi ?? '') }}</textarea>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-jenis">Jenis Koperasi <span class="text-danger">*</span></label>
|
||||
<select class="form-select @error('jenis_koperasi') is-invalid @enderror" id="koperasi-jenis" name="jenis_koperasi" required>
|
||||
<option value="">Pilih Jenis Koperasi</option>
|
||||
@foreach(\App\Enums\Koperasi\JenisKoperasi::cases() as $jenis)
|
||||
<option value="{{ $jenis->value }}" @selected(($isLainnya ? $lainnyaValue : $currentJenis) === $jenis->value)>{{ $jenis->value }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('jenis_koperasi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-skala-operasi">Skala Operasi Koperasi <span class="text-danger">*</span></label>
|
||||
<select class="form-select @error('skala_operasi') is-invalid @enderror" id="koperasi-skala-operasi" name="skala_operasi" required>
|
||||
<option value="">Pilih Skala Operasi</option>
|
||||
@foreach(\App\Enums\Koperasi\SkalaOperasiKoperasi::cases() as $skala)
|
||||
<option value="{{ $skala->value }}" @selected(old('skala_operasi', $pengurus->skala_operasi?->value) === $skala->value)>{{ $skala->value }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('skala_operasi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label d-block">Skala Operasi Koperasi <span class="text-danger">*</span></label>
|
||||
<div class="row g-2">
|
||||
@foreach(['Level Dusun', 'Lintas Dusun', 'Level Desa', 'Lintas Desa', 'Level Kecamatan', 'Lintas Kecamatan', 'Level Kabupaten', 'Lintas Kabupaten'] as $skala)
|
||||
<div class="col-md-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="skala_operasi" id="skala_{{ $loop->index }}" value="{{ $skala }}" {{ old('skala_operasi', $pengurus->skala_operasi ?? '') == $skala ? 'checked' : '' }} required>
|
||||
<label class="form-check-label" for="skala_{{ $loop->index }}">{{ $skala }}</label>
|
||||
<div class="row {{ $isLainnya ? '' : 'd-none' }}" id="koperasi-jenis-lainnya-wrapper">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-jenis-lainnya">Sebutkan Jenis Koperasi</label>
|
||||
<input type="text" class="form-control @error('jenis_koperasi_lainnya') is-invalid @enderror" id="koperasi-jenis-lainnya" name="jenis_koperasi_lainnya" value="{{ $jenisLainnya }}" placeholder="Sebutkan jenis koperasi..." @disabled(!$isLainnya)>
|
||||
@error('jenis_koperasi_lainnya')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-alamat">Alamat Koperasi</label>
|
||||
<textarea class="form-control @error('alamat_koperasi') is-invalid @enderror" id="koperasi-alamat" name="alamat_koperasi" rows="2" placeholder="Masukkan alamat lengkap koperasi">{{ old('alamat_koperasi', $pengurus->alamat_koperasi ?? '') }}</textarea>
|
||||
@error('alamat_koperasi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-sejarah">Sejarah dan Tujuan Pendirian</label>
|
||||
<textarea class="form-control @error('sejarah_lembaga') is-invalid @enderror" id="koperasi-sejarah" name="sejarah_lembaga" rows="3" placeholder="Tuliskan sejarah singkat dan tujuan pendirian koperasi">{{ old('sejarah_lembaga', $pengurus->sejarah_lembaga) }}</textarea>
|
||||
@error('sejarah_lembaga')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-12 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-fokus-komoditas">Fokus Komoditas Pertanian</label>
|
||||
<select class="form-select @error('fokus_komoditas') is-invalid @enderror" id="koperasi-fokus-komoditas" name="fokus_komoditas" data-fokus-ya="{{ \App\Enums\Koperasi\FokusKomoditasKoperasi::YA->value }}">
|
||||
<option value="">Pilih Fokus Komoditas</option>
|
||||
@foreach(\App\Enums\Koperasi\FokusKomoditasKoperasi::cases() as $fokus)
|
||||
<option value="{{ $fokus->value }}" @selected($currentFokus === $fokus->value)>{{ $fokus->value }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('fokus_komoditas')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-12 mb-4 form-control-validation {{ $fokusYa ? '' : 'd-none' }}" id="koperasi-detail-fokus-wrapper">
|
||||
<label class="form-label" for="koperasi-detail-fokus">Komoditas yang Dikembangkan</label>
|
||||
<input type="text" class="form-control @error('detail_fokus_komoditas') is-invalid @enderror" id="koperasi-detail-fokus" name="detail_fokus_komoditas" value="{{ old('detail_fokus_komoditas', $pengurus->detail_fokus_komoditas) }}" placeholder="Contoh: Kopi, Vanili" @disabled(!$fokusYa)>
|
||||
@error('detail_fokus_komoditas')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@foreach([
|
||||
'jumlah_anggota_dewasa' => 'Jumlah Anggota Dewasa (per Desember 2025)',
|
||||
'jumlah_anggota_anak' => 'Jumlah Anggota Anak (per Desember 2025)',
|
||||
'jumlah_pengurus' => 'Jumlah Pengurus Sekarang',
|
||||
] as $field => $label)
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-{{ $field }}">{{ $label }}</label>
|
||||
<div class="input-group">
|
||||
<input type="number" class="form-control @error($field) is-invalid @enderror" id="koperasi-{{ $field }}" name="{{ $field }}" value="{{ old($field, $pengurus?->{$field} ?? '') }}" placeholder="0" min="0">
|
||||
<span class="input-group-text">orang</span>
|
||||
@error($field)<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Tahun Berdiri</label>
|
||||
<input type="number" class="form-control" name="tahun_berdiri" value="{{ old('tahun_berdiri', $pengurus->tahun_berdiri ?? '') }}" placeholder="Contoh: 2015" min="1900" max="{{ date('Y') }}">
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Jumlah Anggota Awal Berdiri</label>
|
||||
<div class="input-group">
|
||||
<input type="number" class="form-control" name="jumlah_anggota_awal" value="{{ old('jumlah_anggota_awal', $pengurus->jumlah_anggota_awal ?? '') }}" placeholder="0" min="0">
|
||||
<span class="input-group-text">orang</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Jumlah Anggota (per Desember 2025)</label>
|
||||
<div class="row g-2">
|
||||
<div class="col-6">
|
||||
<div class="input-group">
|
||||
<input type="number" class="form-control" name="jumlah_anggota_dewasa" value="{{ old('jumlah_anggota_dewasa', $pengurus->jumlah_anggota_dewasa ?? '') }}" placeholder="Dewasa" min="0">
|
||||
<span class="input-group-text">dewasa</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="input-group">
|
||||
<input type="number" class="form-control" name="jumlah_anggota_anak" value="{{ old('jumlah_anggota_anak', $pengurus->jumlah_anggota_anak ?? '') }}" placeholder="Anak-anak" min="0">
|
||||
<span class="input-group-text">anak-anak</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Jumlah Pengurus Sekarang</label>
|
||||
<div class="input-group">
|
||||
<input type="number" class="form-control" name="jumlah_pengurus" value="{{ old('jumlah_pengurus', $pengurus->jumlah_pengurus ?? '') }}" placeholder="0" min="0">
|
||||
<span class="input-group-text">orang</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label d-block fw-semibold">Jumlah Sisa Hasil Usaha (SHU)</label>
|
||||
<div class="row g-3">
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small text-muted">2025:</label>
|
||||
<div class="row">
|
||||
@foreach([2025, 2024, 2023] as $tahun)
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="koperasi-shu-{{ $tahun }}">Sisa Hasil Usaha (SHU) {{ $tahun }}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">Rp.</span>
|
||||
<input type="number" class="form-control" name="shu_2025" value="{{ old('shu_2025', $pengurus->shu_2025 ?? '') }}" placeholder="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small text-muted">2024:</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">Rp.</span>
|
||||
<input type="number" class="form-control" name="shu_2024" value="{{ old('shu_2024', $pengurus->shu_2024 ?? '') }}" placeholder="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small text-muted">2023:</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">Rp.</span>
|
||||
<input type="number" class="form-control" name="shu_2023" value="{{ old('shu_2023', $pengurus->shu_2023 ?? '') }}" placeholder="0">
|
||||
</div>
|
||||
<x-koperasi-rupiah :name="'shu_' . $tahun" :value="old('shu_' . $tahun, $pengurus?->{'shu_' . $tahun})" id="koperasi-shu-{{ $tahun }}" placeholder="0" />
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul class="mb-0">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@include('koperasi.profil.header', ['pengurus' => null])
|
||||
|
||||
<div class="card mb-6">
|
||||
<div class="card-header border-bottom">
|
||||
<h5 class="card-title mb-0">Tambah Profil Dasar Koperasi</h5>
|
||||
</div>
|
||||
<div class="card-body pt-6">
|
||||
<form action="{{ route('koperasi.pengurus.store') }}" method="POST">
|
||||
@csrf
|
||||
|
||||
@include('koperasi.profil._form', ['pengurus' => null])
|
||||
|
||||
<div class="mt-4 text-end">
|
||||
<a href="{{ route('koperasi.pengurus.index') }}" class="btn btn-secondary me-2 wave-effect wave-light">Batal / Kembali</a>
|
||||
<button type="submit" class="btn btn-success data-submit wave-effect wave-light"><i class="ti tabler-device-floppy me-2"></i> Simpan Profil</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,19 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y koperasi-profile-page">
|
||||
@include('koperasi.profil.header', ['pengurus' => null])
|
||||
|
||||
<div class="card mb-6">
|
||||
<div class="card-body pt-6">
|
||||
<form data-koperasi-profile data-jenis-lainnya="{{ \App\Enums\Koperasi\JenisKoperasi::LAINNYA->value }}" action="{{ route('koperasi.pengurus.store') }}" method="POST">
|
||||
@csrf
|
||||
|
||||
@include('koperasi.profil._form', ['pengurus' => $pengurus])
|
||||
|
||||
<x-koperasi-form-actions />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,36 +1,21 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul class="mb-0">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="container-xxl flex-grow-1 container-p-y koperasi-profile-page">
|
||||
@include('koperasi.profil.header', ['pengurus' => $pengurus])
|
||||
|
||||
<div class="card mb-6">
|
||||
<div class="card-header border-bottom">
|
||||
<h5 class="card-title mb-0">Edit Profil Dasar Koperasi</h5>
|
||||
<h5 class="card-title mb-0">Edit Profil Koperasi</h5>
|
||||
</div>
|
||||
<div class="card-body pt-6">
|
||||
<form action="{{ route('koperasi.pengurus.update', $pengurus->id) }}" method="POST">
|
||||
<form data-koperasi-profile data-jenis-lainnya="{{ \App\Enums\Koperasi\JenisKoperasi::LAINNYA->value }}" action="{{ route('koperasi.pengurus.update', $pengurus->id) }}" method="POST">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
@include('koperasi.profil._form', ['pengurus' => $pengurus])
|
||||
|
||||
<div class="mt-4 text-end">
|
||||
<a href="{{ route('koperasi.pengurus.index') }}" class="btn btn-secondary me-2 wave-effect wave-light">Batal / Kembali</a>
|
||||
<button type="submit" class="btn btn-success data-submit wave-effect wave-light">
|
||||
<i class="ti tabler-device-floppy me-2"></i> Simpan Perubahan
|
||||
</button>
|
||||
</div>
|
||||
<x-koperasi-form-actions />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,191 +1,37 @@
|
||||
<style>
|
||||
@media (min-width: 768px) {
|
||||
.nav-pills-custom-spacing {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
gap: 0.5rem;
|
||||
flex-wrap: nowrap !important;
|
||||
overflow-x: auto;
|
||||
}
|
||||
.nav-pills-custom-spacing::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
.nav-pills-custom-spacing .nav-item {
|
||||
margin-right: 0 !important;
|
||||
flex: 1;
|
||||
}
|
||||
.nav-pills-custom-spacing .nav-link {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding-left: 0.5rem !important;
|
||||
padding-right: 0.5rem !important;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
font-size: 0.9375rem !important;
|
||||
}
|
||||
.nav-pills-custom-spacing .nav-link i {
|
||||
margin-right: 0.4rem !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<x-koperasi-notifications />
|
||||
|
||||
@php
|
||||
$namaLengkap = isset($pengurus) ? $pengurus->nama_lengkap : 'Tambah Profil Baru';
|
||||
$namaKoperasi = isset($pengurus) ? $pengurus->nama_koperasi : 'Nama Koperasi';
|
||||
$jabatanLabel = isset($pengurus) ? $pengurus->posisi_dalam_koperasi : 'Posisi/Jabatan';
|
||||
$noHp = isset($pengurus) ? $pengurus->no_hp : 'Belum terisi';
|
||||
$domisili = isset($pengurus) ? $pengurus->alamat_tinggal : 'Alamat Domisili Pengurus';
|
||||
@endphp
|
||||
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-4 mb-2 mb-md-0">
|
||||
<div class="card h-100">
|
||||
<div class="card-body p-3">
|
||||
<h6 class="card-title mb-2">Profil Pengurus Koperasi</h6>
|
||||
<div class="d-flex justify-content-start align-items-center mb-3">
|
||||
<div class="avatar me-2">
|
||||
<span class="avatar-initial rounded bg-label-primary">
|
||||
<i class="icon-base ti tabler-user-check icon-22px"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="d-flex flex-column">
|
||||
<h6 class="mb-0" style="font-size: 0.9rem;">{{ $namaLengkap }}</h6>
|
||||
<span class="text-muted" style="font-size: 0.75rem;">{{ $namaKoperasi }}</span>
|
||||
<span class="text-muted" style="font-size: 0.75rem;">Jabatan: {{ $jabatanLabel }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="my-2">
|
||||
<h6 class="mb-1" style="font-size: 0.85rem;">Kontak & Domisili</h6>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">No. HP: {{ $noHp }}</p>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem; line-height: 1.3;">{{ $domisili }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-8 d-flex flex-column">
|
||||
<div class="card mb-2 flex-grow-1">
|
||||
<div class="card-widget-separator-wrapper h-100">
|
||||
<div class="card-body card-widget-separator py-2 h-100 d-flex flex-column justify-content-center">
|
||||
<div class="row gy-2">
|
||||
<div class="col-sm-6 col-lg-4">
|
||||
<div class="d-flex justify-content-between align-items-center card-widget-1 border-end h-100 pe-3">
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Koperasi</p>
|
||||
<h5 class="mb-0 text-truncate" style="max-width: 120px;" title="{{ $namaKoperasi }}">{{ $namaKoperasi }}</h5>
|
||||
<p class="mb-0" style="font-size: 0.75rem;">
|
||||
<span class="me-1">{{ isset($pengurus) ? $pengurus->jenis_koperasi : 'Belum terisi' }}</span>
|
||||
</p>
|
||||
</div>
|
||||
<span class="avatar">
|
||||
<span class="avatar-initial rounded">
|
||||
<i class="icon-base ti tabler-building-store icon-22px text-heading"></i>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-lg-4">
|
||||
<div class="d-flex justify-content-between align-items-center card-widget-1 border-end h-100 px-3">
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Posisi</p>
|
||||
<h5 class="mb-0">{{ $jabatanLabel }}</h5>
|
||||
<p class="mb-0" style="font-size: 0.75rem;">
|
||||
<span class="me-1">Thn Gabung: {{ isset($pengurus) ? ($pengurus->tahun_bergabung ?: '-') : '-' }}</span>
|
||||
</p>
|
||||
</div>
|
||||
<span class="avatar">
|
||||
<span class="avatar-initial rounded">
|
||||
<i class="icon-base ti tabler-briefcase icon-22px text-heading"></i>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-lg-4">
|
||||
<div class="d-flex justify-content-between align-items-center card-widget-1 h-100 ps-3">
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Skala Operasi</p>
|
||||
<h5 class="mb-0">{{ isset($pengurus) ? $pengurus->skala_operasi : '-' }}</h5>
|
||||
</div>
|
||||
<span class="avatar">
|
||||
<span class="avatar-initial rounded">
|
||||
<i class="icon-base ti tabler-map-pin icon-22px text-heading"></i>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card flex-grow-1">
|
||||
<div class="card-body py-3 d-flex align-items-center">
|
||||
<div class="w-100">
|
||||
<p class="mb-1 text-muted" style="font-size: 0.75rem;">Alamat Koperasi</p>
|
||||
<h6 class="mb-0">{{ isset($pengurus) ? ($pengurus->alamat_koperasi ?: '-') : '-' }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<x-koperasi-profile-summary :summary="$ringkasanProfil" />
|
||||
|
||||
<div class="nav-align-top">
|
||||
<ul class="nav nav-pills flex-column flex-md-row mb-6 row-gap-2 nav-pills-custom-spacing" id="main-tab-nav">
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ request()->routeIs('koperasi.pengurus.create') || request()->routeIs('koperasi.pengurus.edit') ? 'active' : '' }}" href="{{ isset($pengurus) ? route('koperasi.pengurus.edit', $pengurus->id) : route('koperasi.pengurus.create') }}">
|
||||
<i class="icon-base ti tabler-user-check icon-sm"></i>Profil Dasar
|
||||
<i class="icon-base ti tabler-user-check me-1_5 icon-sm"></i>Profil
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@php
|
||||
$currentStep = request()->query('step', 1);
|
||||
$isSurvey = request()->routeIs('koperasi.pengurus.survey');
|
||||
|
||||
$disabledAttr = !isset($pengurus) ? 'disabled data-bs-toggle="tooltip" data-bs-placement="top" title="Simpan profil dasar terlebih dahulu"' : '';
|
||||
$profilLengkap = $pengurus?->profilLengkap() ?? false;
|
||||
@endphp
|
||||
|
||||
@foreach(\App\Enums\Koperasi\TabKoperasi::cases() as $tab)
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ ($isSurvey && $currentStep == 1) ? 'active bg-primary text-white' : 'text-muted' }}"
|
||||
href="{{ isset($pengurus) ? route('koperasi.pengurus.survey', [$pengurus->id, 'step' => 1]) : '#' }}" {!! $disabledAttr !!}>
|
||||
<i class="icon-base ti tabler-building-bank icon-sm"></i>Kelembagaan-Aktor Sistem
|
||||
@if($profilLengkap)
|
||||
<a class="nav-link {{ request()->routeIs($tab->routePrefix().'.*') ? 'active' : '' }}" href="{{ route($tab->routePrefix().'.index', $pengurus->id) }}">
|
||||
<i class="icon-base ti tabler-{{ $tab->icon() }} me-1_5 icon-sm"></i>{{ $tab->label() }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ ($isSurvey && $currentStep == 2) ? 'active bg-primary text-white' : 'text-muted' }}"
|
||||
href="{{ isset($pengurus) ? route('koperasi.pengurus.survey', [$pengurus->id, 'step' => 2]) : '#' }}" {!! $disabledAttr !!}>
|
||||
<i class="icon-base ti tabler-truck-delivery icon-sm"></i>Rantai Nilai-Akses Pasar
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ ($isSurvey && $currentStep == 3) ? 'active bg-primary text-white' : 'text-muted' }}"
|
||||
href="{{ isset($pengurus) ? route('koperasi.pengurus.survey', [$pengurus->id, 'step' => 3]) : '#' }}" {!! $disabledAttr !!}>
|
||||
<i class="icon-base ti tabler-users icon-sm"></i>Sosial Ekonomi
|
||||
@else
|
||||
<a class="nav-link" href="#" data-koperasi-locked-tab aria-disabled="true" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-original-title="Simpan Profil terlebih dahulu">
|
||||
<i class="icon-base ti tabler-{{ $tab->icon() }} me-1_5 icon-sm"></i>{{ $tab->label() }}
|
||||
</a>
|
||||
@endif
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
<script>
|
||||
function jumpToStep(step) {
|
||||
$('.step-content').addClass('d-none');
|
||||
$('#step-' + step).removeClass('d-none');
|
||||
|
||||
$('.survey-tab-link').removeClass('active');
|
||||
$('#tab-step-' + step).addClass('active');
|
||||
|
||||
if (history.pushState) {
|
||||
window.history.replaceState(null, null, '#step-' + step);
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
let hash = window.location.hash;
|
||||
if (hash && hash.startsWith('#step-')) {
|
||||
let stepNum = parseInt(hash.replace('#step-', ''));
|
||||
if (stepNum >= 1 && stepNum <= 4) {
|
||||
jumpToStep(stepNum);
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@push('scripts')
|
||||
<script src="{{ asset('assets/js/koperasi.js') }}?v={{ filemtime(public_path('assets/js/koperasi.js')) }}"></script>
|
||||
<script src="{{ asset('assets/js/koperasi-wilayah.js') }}?v={{ filemtime(public_path('assets/js/koperasi-wilayah.js')) }}"></script>
|
||||
@endpush
|
||||
|
||||
@@ -1,160 +1,195 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="container-fluid flex-grow-1 container-p-y koperasi-list-page">
|
||||
<x-koperasi-notifications />
|
||||
|
||||
<div class="d-flex flex-row gap-3 mb-4">
|
||||
<div class="w-25">
|
||||
<x-summary-card
|
||||
title="Pengurus Koperasi"
|
||||
count="{{ $totalPengurus ?? 0 }}"
|
||||
subtitle="Total responden terdata"
|
||||
icon="user-check"
|
||||
color="primary"
|
||||
/>
|
||||
<div class="row g-3 mb-4" aria-label="Ringkasan data koperasi">
|
||||
<div class="col-12 col-md-4">
|
||||
<x-summary-card title="Total Koperasi" :count="number_format($totalKoperasi, 0, ',', '.')" subtitle="Total koperasi terdata" icon="building-store" color="primary" />
|
||||
</div>
|
||||
<div class="col-12 col-md-4">
|
||||
<x-summary-card title="Jenis Koperasi" :count="number_format($totalJenisKoperasi, 0, ',', '.')" subtitle="Jenis koperasi yang terdata" icon="category" color="info" />
|
||||
</div>
|
||||
<div class="col-12 col-md-4">
|
||||
<x-summary-card title="Koperasi dengan Dokumen Lengkap" :count="number_format($totalDokumenLengkap, 0, ',', '.')" subtitle="AD/ART tersedia dan lengkap" icon="file-check" color="success" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-6 koperasi-filter-row">
|
||||
<div class="col-12">
|
||||
<div class="card card-border-shadow-primary">
|
||||
<div class="card-body py-3">
|
||||
<form method="GET" action="{{ route('koperasi.pengurus.index') }}" id="koperasi-filter-form" aria-label="Filter data koperasi"
|
||||
data-kecamatan-url="{{ route('kecamatan.bykabupatenkota', ':id') }}" data-desa-url="{{ route('desakelurahan.bykecamatan', ':id') }}">
|
||||
<input type="hidden" name="per_page" value="{{ $koperasi->perPage() }}">
|
||||
<div class="koperasi-filter-line">
|
||||
<div class="koperasi-filter-label">
|
||||
<i class="icon-base ti tabler-map-2 me-2"></i><span>Wilayah</span>
|
||||
</div>
|
||||
<div>
|
||||
<input type="hidden" name="kabupaten_kota_id" value="{{ $filters['kabupaten_kota_id'] }}" data-wilayah-kabupaten>
|
||||
<div class="koperasi-filter-static" aria-label="Kabupaten/Kota" role="text">
|
||||
{{ preg_replace('/^(kabupaten|kota)\s+/i', '', $selectedKabupaten?->nama ?? 'Semua Kabupaten/Kota') }}
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<select name="kecamatan_id" class="form-select form-select-sm" aria-label="Filter Kecamatan" data-wilayah-kecamatan @disabled(!$wilayahTersedia || empty($filters['kabupaten_kota_id']))>
|
||||
<option value="">Semua Kecamatan</option>
|
||||
@foreach($kecamatanOptions as $option)
|
||||
<option value="{{ $option->id }}" @selected((string) $filters['kecamatan_id'] === (string) $option->id)>{{ $option->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<select name="desa_kelurahan_id" class="form-select form-select-sm" aria-label="Filter Desa/Kelurahan" data-wilayah-desa @disabled(!$wilayahTersedia || empty($filters['kecamatan_id']))>
|
||||
<option value="">Semua Desa</option>
|
||||
@foreach($desaOptions as $option)
|
||||
<option value="{{ $option->id }}" @selected((string) $filters['desa_kelurahan_id'] === (string) $option->id)>{{ $option->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="my-3">
|
||||
<div class="row g-2 align-items-center">
|
||||
<div class="col-md-auto d-flex align-items-center fw-medium me-md-2">
|
||||
<i class="icon-base ti tabler-adjustments-horizontal me-2"></i><span>Data</span>
|
||||
</div>
|
||||
<div class="col-md">
|
||||
<select name="jenis_koperasi" class="form-select form-select-sm" aria-label="Filter Jenis Koperasi">
|
||||
<option value="">Semua Jenis Koperasi</option>
|
||||
@foreach($jenisKoperasiOptions as $jenis)
|
||||
<option value="{{ $jenis }}" @selected($filters['jenis_koperasi'] === $jenis)>{{ $jenis }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md">
|
||||
<select name="layanan" class="form-select form-select-sm" aria-label="Filter Layanan Utama">
|
||||
<option value="">Semua Layanan</option>
|
||||
@foreach(\App\Enums\Koperasi\LayananKoperasi::cases() as $layanan)
|
||||
<option value="{{ $layanan->value }}" @selected($filters['layanan'] === $layanan->value)>{{ $layanan->label() }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md">
|
||||
<select name="ad_art" class="form-select form-select-sm" aria-label="Filter Dokumen Kelembagaan">
|
||||
<option value="">Semua Dokumen Kelembagaan</option>
|
||||
@foreach(\App\Enums\Koperasi\StatusAdArtKoperasi::cases() as $status)
|
||||
<option value="{{ $status->value }}" @selected($filters['ad_art'] === $status->value)>{{ $status->label() }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md">
|
||||
<select name="sort_by" class="form-select form-select-sm" aria-label="Urutkan Data Koperasi">
|
||||
@foreach(\App\Enums\Koperasi\UrutanKoperasi::cases() as $urutan)
|
||||
<option value="{{ $urutan->value }}" @selected($filters['sort_by'] === $urutan->value)>{{ $urutan->label() }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-column flex-md-row gap-2 mt-3">
|
||||
<div class="input-group input-group-sm flex-grow-1">
|
||||
<input type="text" name="search" class="form-control" placeholder="Cari koperasi / alamat / jenis / responden..." value="{{ $filters['search'] }}" aria-label="Cari nama koperasi, alamat, jenis koperasi, atau responden">
|
||||
<button type="submit" class="btn btn-outline-secondary" aria-label="Cari data koperasi"><i class="icon-base ti tabler-search"></i></button>
|
||||
</div>
|
||||
<div class="d-flex gap-2 flex-shrink-0">
|
||||
<button type="submit" class="btn btn-outline-secondary btn-sm flex-fill"><i class="icon-base ti tabler-filter me-1"></i>Filter</button>
|
||||
<a href="{{ route('koperasi.pengurus.index') }}" class="btn btn-outline-secondary btn-sm flex-fill"><i class="icon-base ti tabler-refresh me-1"></i>Reset</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="w-25">
|
||||
<x-summary-card
|
||||
title="Koperasi Terdata"
|
||||
count="{{ $totalKoperasi ?? 0 }}"
|
||||
subtitle="Unit Koperasi yang terdata"
|
||||
icon="map-pin"
|
||||
color="success"
|
||||
/>
|
||||
</div>
|
||||
<div class="w-25">
|
||||
<x-summary-card
|
||||
title="Jabatan/Peran"
|
||||
count="{{ $totalJabatan ?? 0 }}"
|
||||
subtitle="Jenis jabatan/peran terdata"
|
||||
icon="briefcase"
|
||||
color="info"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom">
|
||||
<h5 class="card-title mb-0">Data Pengurus Koperasi</h5>
|
||||
<h5 class="card-title mb-0">Data Koperasi</h5>
|
||||
</div>
|
||||
|
||||
<div class="card-body border-bottom pt-4">
|
||||
<form method="GET" action="{{ route('koperasi.pengurus.index') }}" class="d-flex justify-content-between align-items-center row gap-3 gap-md-0">
|
||||
<form method="GET" action="{{ route('koperasi.pengurus.index') }}" class="row g-3 align-items-end" id="koperasi-pagination-form">
|
||||
@foreach($filters as $field => $value)
|
||||
<input type="hidden" name="{{ $field }}" value="{{ $value }}">
|
||||
@endforeach
|
||||
<div class="col-md-auto">
|
||||
<div class="d-flex align-items-center">
|
||||
<label class="me-2 text-nowrap">Show</label>
|
||||
<select name="per_page" class="form-select form-select-sm w-auto" onchange="this.form.submit()">
|
||||
<option value="10" {{ request('per_page') == 10 ? 'selected' : '' }}>10</option>
|
||||
<option value="25" {{ request('per_page') == 25 ? 'selected' : '' }}>25</option>
|
||||
<label class="me-2 text-nowrap" for="koperasi-per-page">Tampilkan</label>
|
||||
<select name="per_page" id="koperasi-per-page" class="form-select form-select-sm w-auto">
|
||||
<option value="10" @selected($koperasi->perPage() === 10)>10</option>
|
||||
<option value="25" @selected($koperasi->perPage() === 25)>25</option>
|
||||
</select>
|
||||
<label class="ms-2 text-nowrap">entries</label>
|
||||
<span class="ms-2 text-nowrap">data</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-auto d-flex gap-2">
|
||||
<div class="input-group input-group-sm w-auto">
|
||||
<input type="text" name="search" class="form-control" placeholder="Cari Nama..." value="{{ request('search') }}">
|
||||
<button type="submit" class="btn btn-outline-primary"><i class="ti tabler-search"></i></button>
|
||||
</div>
|
||||
<a href="{{ route('koperasi.pengurus.create') }}" class="btn btn-sm btn-primary">
|
||||
<i class="ti tabler-plus me-1"></i> Tambah
|
||||
</a>
|
||||
<div class="col-md-auto ms-md-auto">
|
||||
<a href="{{ route('koperasi.pengurus.create') }}" class="btn btn-sm btn-primary"><i class="ti tabler-plus me-1"></i>Tambah</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive text-nowrap">
|
||||
<table class="table table-hover">
|
||||
<table class="table table-hover align-middle koperasi-list-table">
|
||||
<thead class="border-top">
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Nama Pengurus</th>
|
||||
<th>Posisi</th>
|
||||
<th>Nama Koperasi</th>
|
||||
<th>Jenis Koperasi</th>
|
||||
<th>Skala Operasi</th>
|
||||
@if($showEnumerator ?? true)
|
||||
<th>Nama Enumerator</th>
|
||||
@endif
|
||||
<th>Aksi</th>
|
||||
<th scope="col">No</th>
|
||||
<th scope="col">Koperasi</th>
|
||||
<th scope="col">Jenis Koperasi</th>
|
||||
<th scope="col">Layanan Utama</th>
|
||||
<th scope="col">Dokumen Kelembagaan</th>
|
||||
<th scope="col">Nama Responden</th>
|
||||
@if($showEnumerator)<th scope="col">Nama Enumerator</th>@endif
|
||||
<th scope="col">Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse($pengurus ?? [] as $item)
|
||||
<tr>
|
||||
<td>{{ (($pengurus->firstItem() ?? 1) - 1) + $loop->iteration }}</td>
|
||||
<td><span class="text-heading">{{ $item->nama_lengkap }}</span></td>
|
||||
<td><span class="text-muted">{{ $item->posisi_dalam_koperasi }}</span></td>
|
||||
<td><span class="text-muted">{{ $item->nama_koperasi }}</span></td>
|
||||
<td><span class="text-muted">{{ $item->jenis_koperasi }}</span></td>
|
||||
<td><span class="text-muted">{{ $item->skala_operasi }}</span></td>
|
||||
|
||||
@if($showEnumerator ?? true)
|
||||
<td><span class="text-muted">{{ $item->creator?->name ?? '-' }}</span></td>
|
||||
@forelse($koperasi as $item)
|
||||
@php($ringkasan = $ringkasanKoperasi[$item->id])
|
||||
<tr data-koperasi-row>
|
||||
<td>{{ $koperasi->firstItem() + $loop->index }}</td>
|
||||
<td class="text-wrap koperasi-list-identity">
|
||||
<a href="{{ route('koperasi.pengurus.edit', $item) }}" class="text-heading d-block fw-medium">{{ $ringkasan['judul'] }}</a>
|
||||
<div class="small text-muted">{{ $ringkasan['alamat'] }}</div>
|
||||
@if(!$item->desa_kelurahan_id)<div class="small text-muted">Wilayah belum terisi</div>@endif
|
||||
</td>
|
||||
<td class="text-wrap koperasi-list-type"><span class="text-muted">{{ $ringkasan['jenis'] }}</span></td>
|
||||
<td class="text-wrap koperasi-list-services">
|
||||
@if(count($ringkasan['layanan']))
|
||||
<div class="small text-muted" title="{{ implode(', ', $ringkasan['layanan']) }}">{{ implode(', ', array_slice($ringkasan['layanan'], 0, 2)) }}</div>
|
||||
@if(count($ringkasan['layanan']) > 2)<span class="small text-muted">+{{ count($ringkasan['layanan']) - 2 }} lainnya</span>@endif
|
||||
@else
|
||||
<span class="small text-muted">Belum terisi</span>
|
||||
@endif
|
||||
|
||||
</td>
|
||||
<td class="text-wrap koperasi-list-documents"><span class="text-muted">{{ $item->ad_art?->label() ?? 'Belum terisi' }}</span></td>
|
||||
<td class="text-wrap"><span class="text-muted">{{ $ringkasan['responden'] }}</span></td>
|
||||
@if($showEnumerator)<td class="text-wrap"><span class="text-muted">{{ $item->creator?->name ?? 'Belum terdata' }}</span></td>@endif
|
||||
<td>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="{{ route('koperasi.pengurus.edit', $item->id) }}" class="btn btn-icon btn-text-secondary rounded-pill edit-record">
|
||||
<i class="ti tabler-edit ti-md"></i>
|
||||
</a>
|
||||
<a href="javascript:;" class="btn btn-icon btn-text-secondary rounded-pill delete-record" data-id="{{ $item->id }}" data-nama="{{ $item->nama_lengkap }}">
|
||||
<i class="ti tabler-trash ti-md"></i>
|
||||
</a>
|
||||
<a href="{{ route('koperasi.pengurus.edit', $item) }}" class="btn btn-icon btn-text-secondary rounded-pill edit-record" aria-label="Ubah {{ $ringkasan['judul'] }}"><i class="ti tabler-edit ti-md"></i></a>
|
||||
<form method="POST" action="{{ route('koperasi.pengurus.destroy', $item) }}" data-koperasi-delete data-nama="{{ $ringkasan['judul'] }}">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-icon btn-text-secondary rounded-pill" aria-label="Hapus {{ $ringkasan['judul'] }}"><i class="ti tabler-trash ti-md"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="{{ ($showEnumerator ?? true) ? 8 : 7 }}" class="text-center py-4">Tidak ada data ditemukan.</td>
|
||||
</tr>
|
||||
<tr><td colspan="{{ $showEnumerator ? 8 : 7 }}" class="text-center py-4">Tidak ada data ditemukan.</td></tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="card-footer d-flex justify-content-center justify-content-md-end border-top">
|
||||
@if(isset($pengurus) && $pengurus instanceof \Illuminate\Pagination\LengthAwarePaginator && $pengurus->hasPages())
|
||||
{{ $pengurus->appends(request()->query())->links('pagination::bootstrap-5') }}
|
||||
@endif
|
||||
{{ $koperasi->links('pagination::bootstrap-5') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
const csrfToken = "{{ csrf_token() }}";
|
||||
|
||||
$(document).ready(function () {
|
||||
$(document).on('click', '.delete-record', function () {
|
||||
const id = $(this).data('id');
|
||||
const name = $(this).data('nama');
|
||||
|
||||
Swal.fire({
|
||||
title: 'Apakah Anda yakin?',
|
||||
text: `Profil "${name}" akan dihapus secara permanen!`,
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'Ya, Hapus!',
|
||||
cancelButtonText: 'Batal',
|
||||
customClass: { confirmButton: 'btn btn-primary me-3', cancelButton: 'btn btn-label-secondary' },
|
||||
buttonsStyling: false
|
||||
}).then(function (result) {
|
||||
if (result.value) {
|
||||
$.ajax({
|
||||
url: '{{ route('koperasi.pengurus.destroy', ':id') }}'.replace(':id', id),
|
||||
type: 'DELETE' ,
|
||||
headers: { 'X-CSRF-TOKEN': csrfToken },
|
||||
success: function (res) {
|
||||
Swal.fire({ icon: 'success', title: 'Terhapus!', text: res.message, showConfirmButton: false, timer: 1500 })
|
||||
.then(() => window.location.reload());
|
||||
},
|
||||
error: () => Swal.fire({ icon: 'error', title: 'Gagal!', text: 'Terjadi kesalahan sistem.' })
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
<script src="{{ asset('assets/js/koperasi-wilayah.js') }}?v={{ filemtime(public_path('assets/js/koperasi-wilayah.js')) }}"></script>
|
||||
<script src="{{ asset('assets/js/koperasi-list.js') }}?v={{ filemtime(public_path('assets/js/koperasi-list.js')) }}"></script>
|
||||
@endpush
|
||||
@@ -1,302 +1,100 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
|
||||
@php
|
||||
$policy = app(\App\Services\Koperasi\RantaiNilaiKoperasiService::class);
|
||||
$periods = \App\Services\Koperasi\RantaiNilaiKoperasiService::PERIODS;
|
||||
@endphp
|
||||
<div class="container-xxl flex-grow-1 container-p-y koperasi-profile-page">
|
||||
@include('koperasi.profil.header', ['pengurus' => $pengurus])
|
||||
|
||||
<div class="card shadow-sm border-0 mb-4">
|
||||
<div class="card-body p-0">
|
||||
<form action="{{ route('koperasi.pengurus.survey.store', ['id' => $pengurus->id ?? 0, 'step' => 2]) }}" method="POST" class="p-4 p-md-5">
|
||||
<section class="card mb-6" id="section-rantai-saluran" data-koperasi-section tabindex="-1">
|
||||
<div class="card-body pt-6">
|
||||
<form action="{{ route('koperasi.pengurus.rantai-nilai-akses-pasar.store', $pengurus->id) }}" method="POST"
|
||||
data-koperasi-rantai-nilai data-koperasi-survey data-koperasi-context="{}"
|
||||
data-koperasi-required="{{ json_encode($policy->requiredFields()) }}">
|
||||
@csrf
|
||||
<input type="hidden" name="pengurus_koperasi_id" value="{{ $pengurus->id ?? '' }}">
|
||||
<input type="hidden" name="section" value="{{ \App\Enums\Koperasi\BagianRantaiNilaiKoperasi::SALURAN->value }}">
|
||||
|
||||
<h5 class="fw-bold border-bottom pb-2 mb-4">RANTAI NILAI & AKSES PASAR</h5>
|
||||
<div class="alert alert-warning mb-4">Ditanyakan khusus untuk Koperasi yang melakukan kegiatan jual beli/agregasi.</div>
|
||||
|
||||
<h6 class="fw-bold text-dark mt-5">K2. Harga di Setiap Titik</h6>
|
||||
|
||||
<h5 class="pb-3 border-bottom mb-10 mt-4">Saluran Pembelian/Sumber Pasokan</h5>
|
||||
<div class="mb-4">
|
||||
<h6 class="form-label fw-semibold mb-2">Dari mana Koperasi biasanya memperoleh pasokan komoditas ini? (Boleh pilih >1)</h6>
|
||||
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="sumber_pasokan[]" value="Anggota" {{ str_contains($pengurus->sumber_pasokan ?? '', 'Anggota') ? 'checked' : '' }}><label class="form-check-label">Anggota kelompok tani langsung</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="sumber_pasokan[]" value="Petani non-anggota" {{ str_contains($pengurus->sumber_pasokan ?? '', 'Petani non-anggota') ? 'checked' : '' }}><label class="form-check-label">Petani non-anggota</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="sumber_pasokan[]" value="Pengumpul/sub-agen" {{ str_contains($pengurus->sumber_pasokan ?? '', 'Pengumpul/sub-agen') ? 'checked' : '' }}><label class="form-check-label">Pengumpul/sub-agen desa</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="sumber_pasokan[]" value="Campuran" {{ str_contains($pengurus->sumber_pasokan ?? '', 'Campuran') ? 'checked' : '' }}><label class="form-check-label">Campuran</label></div>
|
||||
|
||||
<div class="form-check d-flex align-items-center gap-2 mt-2">
|
||||
<input class="form-check-input trigger-toggle-check" type="checkbox" name="sumber_pasokan[]" value="Lainnya" data-target="sumberLainnya" {{ str_contains($pengurus->sumber_pasokan ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya:</label>
|
||||
<input type="text" class="form-control form-control-sm w-auto {{ str_contains($pengurus->sumber_pasokan ?? '', 'Lainnya') ? '' : 'd-none' }}" id="sumberLainnya" name="sumber_pasokan_lainnya" value="{{ old('sumber_pasokan_lainnya', $pengurus->sumber_pasokan_lainnya) }}">
|
||||
</div>
|
||||
<h5 class="pb-4 border-bottom mb-4">Saluran Penjualan/Pembelian</h5>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="sumber_pasokan" label="Sumber Pasokan" :options="\App\Enums\Koperasi\SumberPasokanKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="sumber_pasokan_lainnya" label="Sumber Pasokan Lainnya" class="col-md-12" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="bentuk_pembelian" label="Bentuk Produk yang Dibeli" :options="\App\Enums\Koperasi\BentukProdukKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
@foreach($periods as $period => $label)
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" :name="'volume_beli_'.$period" :label="'Volume Pembelian — '.$label" type="number" unit="kg" class="col-md-4" placeholder="0" />
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label fw-semibold">Bentuk produk yang dibeli:</label>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="bentuk_pembelian[]" value="Buah segar hasil petik" {{ str_contains($pengurus->bentuk_pembelian ?? '', 'Buah segar hasil petik') ? 'checked' : '' }}><label class="form-check-label">Buah segar hasil petik</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="bentuk_pembelian[]" value="Biji basah" {{ str_contains($pengurus->bentuk_pembelian ?? '', 'Biji basah') ? 'checked' : '' }}><label class="form-check-label">Biji basah</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="bentuk_pembelian[]" value="Biji kering/kupas" {{ str_contains($pengurus->bentuk_pembelian ?? '', 'Biji kering/kupas') ? 'checked' : '' }}><label class="form-check-label">Biji kering/biji kupas</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="bentuk_pembelian[]" value="Produk terfermentasi" {{ str_contains($pengurus->bentuk_pembelian ?? '', 'Produk terfermentasi') ? 'checked' : '' }}><label class="form-check-label">Produk terfermentasi</label></div>
|
||||
</div>
|
||||
<div class="col-md-8 mb-3">
|
||||
<label class="form-label fw-semibold">Estimasi volume yang dibeli (Kg):</label>
|
||||
<div class="d-flex gap-2 mb-2">
|
||||
<span class="input-group-text w-50">Panen terakhir</span>
|
||||
<input type="number" class="form-control" name="volume_beli_sekarang" placeholder="kg" value="{{ old('volume_beli_sekarang', $pengurus->volume_beli_sekarang) }}">
|
||||
</div>
|
||||
<div class="d-flex gap-2 mb-2">
|
||||
<span class="input-group-text w-50">Tahun lalu</span>
|
||||
<input type="number" class="form-control" name="volume_beli_1_tahun" placeholder="kg" value="{{ old('volume_beli_1_tahun', $pengurus->volume_beli_1_tahun) }}">
|
||||
</div>
|
||||
<div class="d-flex gap-2">
|
||||
<span class="input-group-text w-50">Dua tahun lalu</span>
|
||||
<input type="number" class="form-control" name="volume_beli_2_tahun" placeholder="kg" value="{{ old('volume_beli_2_tahun', $pengurus->volume_beli_2_tahun) }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="tujuan_penjualan" label="Tujuan Penjualan" :options="\App\Enums\Koperasi\TujuanPenjualanKoperasi::cases()" :multiple="true" class="col-md-12" :exclusive-value="\App\Enums\Koperasi\TujuanPenjualanKoperasi::BELUM_MENJUAL->value" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="tujuan_penjualan_lainnya" label="Tujuan Penjualan Lainnya" class="col-md-12" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="bentuk_penjualan" label="Bentuk Produk yang Dijual" :options="\App\Enums\Koperasi\BentukProdukKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
@foreach($periods as $period => $label)
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" :name="'volume_jual_'.$period" :label="'Volume Penjualan — '.$label" type="number" unit="kg" class="col-md-4" placeholder="0" />
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<h5 class="pb-3 border-bottom mb-10 mt-4">Saluran Penjualan Utama</h5>
|
||||
|
||||
<div class="mb-4">
|
||||
<h6 class="form-label fw-semibold">Kepada siapa Koperasi biasanya menjual hasil yang dikumpulkan? (Boleh pilih >1)</h6>
|
||||
<div class="row g-2">
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="tujuan_penjualan[]" value="Offtaker/Eksportir" {{ str_contains($pengurus->tujuan_penjualan ?? '', 'Offtaker/Eksportir') ? 'checked' : '' }}><label class="form-check-label">Offtaker/eksportir langsung</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="tujuan_penjualan[]" value="Pedagang besar" {{ str_contains($pengurus->tujuan_penjualan ?? '', 'Pedagang besar') ? 'checked' : '' }}><label class="form-check-label">Pedagang besar/pengepul kabupaten</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="tujuan_penjualan[]" value="Koperasi/BUMDes lain" {{ str_contains($pengurus->tujuan_penjualan ?? '', 'Koperasi/BUMDes lain') ? 'checked' : '' }}><label class="form-check-label">Koperasi atau BUMDes lain</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="tujuan_penjualan[]" value="Eceran" {{ str_contains($pengurus->tujuan_penjualan ?? '', 'Eceran') ? 'checked' : '' }}><label class="form-check-label">Dijual eceran/pasar lokal</label></div></div>
|
||||
<div class="col-md-6"><div class="form-check"><input class="form-check-input" type="checkbox" name="tujuan_penjualan[]" value="Belum pernah" {{ str_contains($pengurus->tujuan_penjualan ?? '', 'Belum pernah') ? 'checked' : '' }}><label class="form-check-label">Belum pernah (masih disimpan)</label></div></div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-check d-flex align-items-center gap-2">
|
||||
<input class="form-check-input trigger-toggle-check" type="checkbox" name="tujuan_penjualan[]" value="Lainnya" data-target="jualLainnya" {{ str_contains($pengurus->tujuan_penjualan ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya:</label>
|
||||
<input type="text" class="form-control form-control-sm w-75 {{ str_contains($pengurus->tujuan_penjualan ?? '', 'Lainnya') ? '' : 'd-none' }}" id="jualLainnya" name="tujuan_penjualan_lainnya" value="{{ old('tujuan_penjualan_lainnya', $pengurus->tujuan_penjualan_lainnya) }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="sifat_hubungan_bisnis" label="Hubungan dengan Petani Pemasok" :options="\App\Enums\Koperasi\HubunganPemasokKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="sifat_hubungan_lainnya" label="Hubungan Pemasok Lainnya" class="col-md-12" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="mekanisme_pembayaran" label="Mekanisme Pembayaran kepada Petani" :options="\App\Enums\Koperasi\MekanismePembayaranKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="status_perjanjian_tertulis" label="Perjanjian Sebelum Pembelian" :options="\App\Enums\Koperasi\PerjanjianPetaniKoperasi::cases()" class="col-md-6" />
|
||||
</div>
|
||||
|
||||
<div class="row mb-4 border-bottom pb-4">
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label fw-semibold">Bentuk produk yang dijual:</label>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="bentuk_penjualan[]" value="Buah segar hasil petik" {{ str_contains($pengurus->bentuk_penjualan ?? '', 'Buah segar hasil petik') ? 'checked' : '' }}><label class="form-check-label">Buah segar hasil petik</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="bentuk_penjualan[]" value="Biji basah" {{ str_contains($pengurus->bentuk_penjualan ?? '', 'Biji basah') ? 'checked' : '' }}><label class="form-check-label">Biji basah</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="bentuk_penjualan[]" value="Biji kering/kupas" {{ str_contains($pengurus->bentuk_penjualan ?? '', 'Biji kering/kupas') ? 'checked' : '' }}><label class="form-check-label">Biji kering/biji kupas</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="bentuk_penjualan[]" value="Produk terfermentasi" {{ str_contains($pengurus->bentuk_penjualan ?? '', 'Produk terfermentasi') ? 'checked' : '' }}><label class="form-check-label">Produk terfermentasi</label></div>
|
||||
</div>
|
||||
<div class="col-md-8 mb-3">
|
||||
<label class="form-label fw-semibold">Estimasi volume yang terjual (Kg):</label>
|
||||
<div class="d-flex gap-2 mb-2">
|
||||
<span class="input-group-text w-50">Panen terakhir</span>
|
||||
<input type="number" class="form-control" name="volume_jual_sekarang" placeholder="kg" value="{{ old('volume_jual_sekarang', $pengurus->volume_jual_sekarang) }}">
|
||||
</div>
|
||||
<div class="d-flex gap-2 mb-2">
|
||||
<span class="input-group-text w-50">Tahun lalu</span>
|
||||
<input type="number" class="form-control" name="volume_jual_1_tahun" placeholder="kg" value="{{ old('volume_jual_1_tahun', $pengurus->volume_jual_1_tahun) }}">
|
||||
</div>
|
||||
<div class="d-flex gap-2">
|
||||
<span class="input-group-text w-50">Dua tahun lalu</span>
|
||||
<input type="number" class="form-control" name="volume_jual_2_tahun" placeholder="kg" value="{{ old('volume_jual_2_tahun', $pengurus->volume_jual_2_tahun) }}">
|
||||
</div>
|
||||
</div>
|
||||
<x-koperasi-form-actions />
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<h5 class="pb-3 border-bottom mb-10 mt-4">Sifat Hubungan dengan Petani Pemasok</h5>
|
||||
<section class="card mb-6" id="section-rantai-harga" data-koperasi-section tabindex="-1">
|
||||
<div class="card-body pt-6">
|
||||
<form action="{{ route('koperasi.pengurus.rantai-nilai-akses-pasar.store', $pengurus->id) }}" method="POST"
|
||||
data-koperasi-rantai-nilai data-koperasi-survey data-koperasi-context="{}"
|
||||
data-koperasi-required="{{ json_encode($policy->requiredFields()) }}">
|
||||
@csrf
|
||||
<input type="hidden" name="section" value="{{ \App\Enums\Koperasi\BagianRantaiNilaiKoperasi::HARGA->value }}">
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label fw-semibold">Sifat Hubungan dengan Petani Pemasok (Boleh pilih >1)</label>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="sifat_hubungan_bisnis[]" value="Bebas" {{ str_contains($pengurus->sifat_hubungan_bisnis ?? '', 'Bebas') ? 'checked' : '' }}><label class="form-check-label">Bebas/tidak terikat petani bebas menjual kapan saja tanpa ikatan</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="sifat_hubungan_bisnis[]" value="Langganan tetap" {{ str_contains($pengurus->sifat_hubungan_bisnis ?? '', 'Langganan tetap') ? 'checked' : '' }}><label class="form-check-label">Langganan tetap rutin menjual, tapi tanpa perjanjian formal</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="sifat_hubungan_bisnis[]" value="Berbasis hutang" {{ str_contains($pengurus->sifat_hubungan_bisnis ?? '', 'Berbasis hutang') ? 'checked' : '' }}><label class="form-check-label">Berbasis hutang/pinjaman menjual karena punya pinjaman</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="sifat_hubungan_bisnis[]" value="Titip jual" {{ str_contains($pengurus->sifat_hubungan_bisnis ?? '', 'Titip jual') ? 'checked' : '' }}><label class="form-check-label">Titip jual (konsinyasi) petani dibayar setelah hasil terjual</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="sifat_hubungan_bisnis[]" value="Komitmen volume" {{ str_contains($pengurus->sifat_hubungan_bisnis ?? '', 'Komitmen volume') ? 'checked' : '' }}><label class="form-check-label">Ada komitmen volume kesepakatan volume berkala</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="sifat_hubungan_bisnis[]" value="Semi-kontrak" {{ str_contains($pengurus->sifat_hubungan_bisnis ?? '', 'Semi-kontrak') ? 'checked' : '' }}><label class="form-check-label">Semi-kontrak kesepakatan harga, volume, & waktu</label></div>
|
||||
<div class="form-check d-flex align-items-center gap-2 mt-2">
|
||||
<input class="form-check-input trigger-toggle-check" type="checkbox" name="sifat_hubungan_bisnis[]" value="Lainnya" data-target="sifatLainnya" {{ str_contains($pengurus->sifat_hubungan_bisnis ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya:</label>
|
||||
<input type="text" class="form-control form-control-sm w-50 {{ str_contains($pengurus->sifat_hubungan_bisnis ?? '', 'Lainnya') ? '' : 'd-none' }}" id="sifatLainnya" name="sifat_hubungan_lainnya" value="{{ old('sifat_hubungan_lainnya', $pengurus->sifat_hubungan_lainnya) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row border-bottom mb-4 mt-4">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label fw-semibold">Mekanisme pembayaran ke petani?</label>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="mekanisme_pembayaran" value="Tunai" {{ old('mekanisme_pembayaran', $pengurus->mekanisme_pembayaran) == 'Tunai' ? 'checked' : '' }}><label class="form-check-label">Tunai langsung</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="mekanisme_pembayaran" value="Tempo" {{ old('mekanisme_pembayaran', $pengurus->mekanisme_pembayaran) == 'Tempo' ? 'checked' : '' }}><label class="form-check-label">Sistem tempo/dibayar kemudian</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="mekanisme_pembayaran" value="Campuran" {{ old('mekanisme_pembayaran', $pengurus->mekanisme_pembayaran) == 'Campuran' ? 'checked' : '' }}><label class="form-check-label">Campuran, tergantung situasi</label></div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label fw-semibold">Apakah ada perjanjian/kontrak sebelum pembelian?</label>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="status_perjanjian_tertulis" value="Tertulis" {{ old('status_perjanjian_tertulis', $pengurus->status_perjanjian_tertulis) == 'Tertulis' ? 'checked' : '' }}><label class="form-check-label">Ada, tertulis</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="status_perjanjian_tertulis" value="Lisan" {{ old('status_perjanjian_tertulis', $pengurus->status_perjanjian_tertulis) == 'Lisan' ? 'checked' : '' }}><label class="form-check-label">Ada, kesepakatan lisan saja</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="radio" name="status_perjanjian_tertulis" value="Tidak ada" {{ old('status_perjanjian_tertulis', $pengurus->status_perjanjian_tertulis) == 'Tidak ada' ? 'checked' : '' }}><label class="form-check-label">Tidak ada perjanjian</label></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h6 class="fw-bold text-dark mt-5">K2. Harga di Setiap Titik</h6>
|
||||
<div class="mb-4">
|
||||
<h5 class="pb-3 border-bottom mb-10 mt-4">Harga Beli Koperasi dari Petani (Rp/kg)</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm align-middle">
|
||||
<thead class="table-primary">
|
||||
<h5 class="pb-4 border-bottom mb-4">Harga di Setiap Titik</h5>
|
||||
<h6 class="mb-2">Harga Beli Koperasi dari Petani (Rp/kg)</h6>
|
||||
<p class="form-text mb-4">Harga beli per kilogram untuk setiap bentuk produk dalam tiga musim panen terakhir.</p>
|
||||
<div class="table-responsive mb-4">
|
||||
<table class="table align-middle">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="border-top-left-radius: 8px; border-bottom-left-radius: 8px; border: none;">BENTUK PRODUK</th>
|
||||
<th style="border: none;">PANEN TERAKHIR</th>
|
||||
<th style="border: none;">TAHUN LALU</th>
|
||||
<th style="border-top-right-radius: 8px; border-bottom-right-radius: 8px; border: none;">DUA TAHUN LALU</th>
|
||||
<th scope="col">Bentuk Produk</th>
|
||||
@foreach($periods as $label)<th scope="col">{{ $label }}</th>@endforeach
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach(\App\Enums\Koperasi\BentukProdukKoperasi::cases() as $product)
|
||||
<tr>
|
||||
<td>Buah segar petik</td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_segar_sekarang" value="{{ old('harga_segar_sekarang', $pengurus->harga_segar_sekarang) }}"></div></td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_segar_1_tahun" value="{{ old('harga_segar_1_tahun', $pengurus->harga_segar_1_tahun) }}"></div></td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_segar_2_tahun" value="{{ old('harga_segar_2_tahun', $pengurus->harga_segar_2_tahun) }}"></div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Biji basah</td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_basah_sekarang" value="{{ old('harga_basah_sekarang', $pengurus->harga_basah_sekarang) }}"></div></td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_basah_1_tahun" value="{{ old('harga_basah_1_tahun', $pengurus->harga_basah_1_tahun) }}"></div></td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_basah_2_tahun" value="{{ old('harga_basah_2_tahun', $pengurus->harga_basah_2_tahun) }}"></div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Biji kering/kupas</td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_kering_sekarang" value="{{ old('harga_kering_sekarang', $pengurus->harga_kering_sekarang) }}"></div></td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_kering_1_tahun" value="{{ old('harga_kering_1_tahun', $pengurus->harga_kering_1_tahun) }}"></div></td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_kering_2_tahun" value="{{ old('harga_kering_2_tahun', $pengurus->harga_kering_2_tahun) }}"></div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Terfermentasi</td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_fermentasi_sekarang" value="{{ old('harga_fermentasi_sekarang', $pengurus->harga_fermentasi_sekarang) }}"></div></td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_fermentasi_1_tahun" value="{{ old('harga_fermentasi_1_tahun', $pengurus->harga_fermentasi_1_tahun) }}"></div></td>
|
||||
<td><div class="input-group input-group-sm"><span class="input-group-text">Rp</span><input type="number" class="form-control" name="harga_fermentasi_2_tahun" value="{{ old('harga_fermentasi_2_tahun', $pengurus->harga_fermentasi_2_tahun) }}"></div></td>
|
||||
<th scope="row">{{ $product->label() }}</th>
|
||||
@foreach($periods as $period => $label)
|
||||
@php $field = 'harga_'.$product->pricePrefix().'_'.$period; @endphp
|
||||
<td>
|
||||
<div class="input-group flex-nowrap">
|
||||
<span class="input-group-text">Rp</span>
|
||||
<x-koperasi-rupiah :name="$field" :value="old($field, $pengurus->{$field})" :show-error="false"
|
||||
:id="'koperasi-'.$field" :aria-label="$product->label().', '.$label.' (Rp/kg)'" placeholder="0" />
|
||||
<span class="input-group-text">/kg</span>
|
||||
</div>
|
||||
@error($field)<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
|
||||
</td>
|
||||
@endforeach
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="cara_menetapkan_harga_pasar" label="Penetapan Harga Beli" :options="\App\Enums\Koperasi\PenetapanHargaKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="cara_menetapkan_harga_lainnya" label="Penetapan Harga Lainnya" class="col-md-12" />
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label fw-semibold">Bagaimana cara Koperasi menetapkan harga beli dari petani?</label>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="cara_menetapkan_harga_pasar[]" value="Ikut pasar" {{ str_contains($pengurus->cara_menetapkan_harga_pasar ?? '', 'Ikut pasar') ? 'checked' : '' }}><label class="form-check-label">Mengikuti harga pasar/tengkulak setempat</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="cara_menetapkan_harga_pasar[]" value="Kalkulasi biaya" {{ str_contains($pengurus->cara_menetapkan_harga_pasar ?? '', 'Kalkulasi biaya') ? 'checked' : '' }}><label class="form-check-label">Ditetapkan sendiri berdasarkan kalkulasi biaya</label></div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="cara_menetapkan_harga_pasar[]" value="Harga offtaker" {{ str_contains($pengurus->cara_menetapkan_harga_pasar ?? '', 'Harga offtaker') ? 'checked' : '' }}><label class="form-check-label">Mengikuti harga dari offtaker/mitra</label></div>
|
||||
<div class="form-check d-inline-flex align-items-center gap-2 mt-2">
|
||||
<input class="form-check-input trigger-toggle-check" type="checkbox" name="cara_menetapkan_harga_pasar[]" value="Lainnya" data-target="hargaLainnya" {{ str_contains($pengurus->cara_menetapkan_harga_pasar ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya:</label>
|
||||
<input type="text" class="form-control form-control-sm w-auto {{ str_contains($pengurus->cara_menetapkan_harga_pasar ?? '', 'Lainnya') ? '' : 'd-none' }}" id="hargaLainnya" name="cara_menetapkan_harga_lainnya" value="{{ old('cara_menetapkan_harga_lainnya', $pengurus->cara_menetapkan_harga_lainnya) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="blok-k3" class="mt-5 pt-3 border-top border-primary">
|
||||
<h6 class="fw-bold text-primary mb-4"><i></i>K3. Peluang Nilai Tambah (Pengolahan Pascapanen)</h6>
|
||||
|
||||
<h5 class="pb-3 border-bottom mb-4 mt-4">Sortasi & Pemilihan Kualitas</h5>
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label fw-semibold">Apakah Koperasi melakukan sortasi/pemilihan kualitas hasil panen sebelum dijual?</label> <br>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_sortasi" value="Ya rutin" data-target="sortasiInput" data-action="show" {{ old('praktik_sortasi', $pengurus->praktik_sortasi) == 'Ya rutin' ? 'checked' : '' }}><label class="form-check-label">Ya, rutin berstandar</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_sortasi" value="Ya tidak konsisten" data-target="sortasiInput" data-action="show" {{ old('praktik_sortasi', $pengurus->praktik_sortasi) == 'Ya tidak konsisten' ? 'checked' : '' }}><label class="form-check-label">Ya, tidak konsisten</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_sortasi" value="Belum pernah" data-target="sortasiInput" data-action="hide" {{ old('praktik_sortasi', $pengurus->praktik_sortasi) == 'Belum pernah' ? 'checked' : '' }}><label class="form-check-label">Belum pernah</label></div>
|
||||
|
||||
<!-- Blok ini dinamis hapus d-none jika Ya rutin / Ya tidak konsisten -->
|
||||
<div class="mt-2 {{ in_array(old('praktik_sortasi', $pengurus->praktik_sortasi), ['Ya rutin', 'Ya tidak konsisten']) ? '' : 'd-none' }}" id="sortasiInput">
|
||||
<label class="form-label small text-muted mb-1">Jika ya, standar/kriteria sortasi yang digunakan:</label>
|
||||
<input type="text" class="form-control form-control-sm w-75" name="standar_sortasi" placeholder="Contoh: Ukuran biji, kadar air..." value="{{ old('standar_sortasi', $pengurus->standar_sortasi) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-3 border-bottom mb-4 mt-4">Praktik Pengeringan</h5>
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label fw-semibold">Apakah Koperasi melakukan pengeringan hasil panen?</label> <br>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_pengeringan" value="Ya rutin" data-target="keringInput" data-action="show" {{ old('praktik_pengeringan', $pengurus->praktik_pengeringan) == 'Ya rutin' ? 'checked' : '' }}><label class="form-check-label">Ya, rutin</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_pengeringan" value="Kadang" data-target="keringInput" data-action="show" {{ old('praktik_pengeringan', $pengurus->praktik_pengeringan) == 'Kadang' ? 'checked' : '' }}><label class="form-check-label">Kadang-kadang</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_pengeringan" value="Tidak" data-target="keringInput" data-action="hide" {{ old('praktik_pengeringan', $pengurus->praktik_pengeringan) == 'Tidak' ? 'checked' : '' }}><label class="form-check-label">Tidak pernah</label></div>
|
||||
|
||||
<div class="mt-2 {{ in_array(old('praktik_pengeringan', $pengurus->praktik_pengeringan), ['Ya rutin', 'Kadang']) ? '' : 'd-none' }}" id="keringInput">
|
||||
<label class="form-label small text-muted mb-1">Jika ya, cara dan tempat pengeringan:</label>
|
||||
<input type="text" class="form-control form-control-sm w-75" name="cara_pengeringan" placeholder="Contoh: Jemur matahari di lantai jemur..." value="{{ old('cara_pengeringan', $pengurus->cara_pengeringan) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-3 border-bottom mb-4 mt-4">Praktik Fermentasi</h5>
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label fw-semibold">Apakah Koperasi melakukan/memfasilitasi fermentasi/pengepresan?</label> <br>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_fermentasi" value="Ya rutin" data-target="fermInput" data-action="show" {{ old('praktik_fermentasi', $pengurus->praktik_fermentasi) == 'Ya rutin' ? 'checked' : '' }}><label class="form-check-label">Ya, rutin</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_fermentasi" value="Pernah coba" data-target="fermInput" data-action="show" {{ old('praktik_fermentasi', $pengurus->praktik_fermentasi) == 'Pernah coba' ? 'checked' : '' }}><label class="form-check-label">Pernah mencoba</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_fermentasi" value="Belum, direncakan" data-target="fermInput" data-action="hide" {{ old('praktik_fermentasi', $pengurus->praktik_fermentasi) == 'Belum, direncakan' ? 'checked' : '' }}><label class="form-check-label">Belum pernah (direncanakan)</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="praktik_fermentasi" value="Belum, tidak" data-target="fermInput" data-action="hide" {{ old('praktik_fermentasi', $pengurus->praktik_fermentasi) == 'Belum, tidak' ? 'checked' : '' }}><label class="form-check-label">Belum pernah (tidak direncanakan)</label></div>
|
||||
|
||||
<div class="mt-3 p-3 bg-light rounded {{ in_array(old('praktik_fermentasi', $pengurus->praktik_fermentasi), ['Ya rutin', 'Pernah coba']) ? '' : 'd-none' }}" id="fermInput">
|
||||
<label class="form-label small fw-bold mb-2">Model fermentasi (Boleh pilih >1):</label>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="model_fermentasi[]" value="Individual" {{ str_contains($pengurus->model_fermentasi ?? '', 'Individual') ? 'checked' : '' }}><label class="form-check-label">Individual</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="model_fermentasi[]" value="Kolektif" {{ str_contains($pengurus->model_fermentasi ?? '', 'Kolektif') ? 'checked' : '' }}><label class="form-check-label">Kolektif kelompok</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="model_fermentasi[]" value="Unit desa" {{ str_contains($pengurus->model_fermentasi ?? '', 'Unit desa') ? 'checked' : '' }}><label class="form-check-label">Unit pengolah desa</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input" type="checkbox" name="model_fermentasi[]" value="Campuran" {{ str_contains($pengurus->model_fermentasi ?? '', 'Campuran') ? 'checked' : '' }}><label class="form-check-label">Campuran</label></div>
|
||||
<br>
|
||||
<label class="form-label small fw-bold mt-3 mb-1">Bagaimana prosesnya dilakukan:</label>
|
||||
<textarea class="form-control form-control-sm" name="proses_fermentasi" rows="2">{{ old('proses_fermentasi', $pengurus->proses_fermentasi) }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<h5 class="pb-3 border-bottom mb-4 mt-4">Besaran Premium Harga</h5>
|
||||
<p class="small text-muted mb-2">Menurut pengalaman/pengamatan Koperasi, berapa kenaikan harga yang dapat dicapai jika sortasi/pengeringan/fermentasi standar diterapkan?</p>
|
||||
<div class="d-flex align-items-center gap-3">
|
||||
<div class="input-group input-group-sm w-auto">
|
||||
<span class="input-group-text">Rp</span>
|
||||
<input type="number" class="form-control" name="harga_premium_rupiah" placeholder="0" value="{{ old('harga_premium_rupiah', $pengurus->harga_premium_rupiah) }}">
|
||||
<span class="input-group-text">/kg</span>
|
||||
</div>
|
||||
<span class="fw-bold text-muted">ATAU</span>
|
||||
<div class="input-group input-group-sm w-auto">
|
||||
<input type="number" class="form-control" name="harga_premium_persen" placeholder="0" max="100" value="{{ old('harga_premium_persen', $pengurus->harga_premium_persen) }}">
|
||||
<span class="input-group-text">%</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-between mt-5 border-top pt-4">
|
||||
<a href="{{ route('koperasi.pengurus.survey', ['id' => $pengurus->id ?? 0, 'step' => 1]) }}" class="btn btn-label-secondary">
|
||||
<i class="ti tabler-arrow-left me-1"></i> Sebelumnya
|
||||
</a>
|
||||
|
||||
<div class="ms-auto">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
Simpan & Selanjutnya <i class="ti tabler-arrow-right ms-1"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<x-koperasi-form-actions />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
$('.trigger-toggle-check').change(function() {
|
||||
let target = $(this).data('target');
|
||||
if ($(this).is(':checked')) {
|
||||
$('#' + target).removeClass('d-none').focus();
|
||||
} else {
|
||||
$('#' + target).addClass('d-none').val('');
|
||||
}
|
||||
});
|
||||
|
||||
$('.trigger-toggle').change(function() {
|
||||
let target = $(this).data('target');
|
||||
let action = $(this).data('action');
|
||||
if (action === 'show') {
|
||||
$('#' + target).removeClass('d-none').focus();
|
||||
} else {
|
||||
$('#' + target).addClass('d-none').val('');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -1,153 +1,43 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
|
||||
@php
|
||||
$policy = app(\App\Services\Koperasi\SosialEkonomiKoperasiService::class);
|
||||
$context = $policy->context($pengurus);
|
||||
@endphp
|
||||
<div class="container-xxl flex-grow-1 container-p-y koperasi-profile-page">
|
||||
@include('koperasi.profil.header', ['pengurus' => $pengurus])
|
||||
|
||||
<div class="card shadow-sm border-0 mb-4">
|
||||
<div class="card-body p-0">
|
||||
<form action="{{ route('koperasi.pengurus.survey.store', ['id' => $pengurus->id ?? 0, 'step' => 3]) }}" method="POST" class="p-4 p-md-5">
|
||||
<div class="card mb-6">
|
||||
<div class="card-body pt-6">
|
||||
<form action="{{ route('koperasi.pengurus.sosial-ekonomi.store', $pengurus->id) }}" method="POST"
|
||||
data-koperasi-sosial-ekonomi data-koperasi-survey
|
||||
data-koperasi-context="{{ json_encode($context) }}"
|
||||
data-koperasi-required="{{ json_encode($policy->requiredFields()) }}">
|
||||
@csrf
|
||||
<input type="hidden" name="pengurus_koperasi_id" value="{{ $pengurus->id ?? '' }}">
|
||||
<h5 class="fw-bold text-dark mb-4">SOSIAL-EKONOMI RUMAH TANGGA</h5>
|
||||
|
||||
<div class="border-bottom pb-4 mb-4">
|
||||
<h6 class="text-muted fw-normal mb-1">bagian tentang kendala & tantangan</h6>
|
||||
<p class="text-muted small mb-0">Kuesioner bagian ini ditujukan untuk memetakan kestabilan finansial anggota koperasi yang bersangkutan</p>
|
||||
<h5 class="pb-4 border-bottom mb-4">Kondisi Ekonomi Rumah Tangga</h5>
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="simpanan_terbesar" label="Simpanan Wajib Terbesar per Anggota" type="rupiah" placeholder="0" class="col-md-6" help="Nominal simpanan wajib terbesar yang disetorkan oleh satu anggota." />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="momen_simpanan_terbesar" label="Bulan dan Momen Setoran Lebih Tinggi" placeholder="Contoh: Juni, saat panen kopi" class="col-md-6" help="Bulan atau momen saat rata-rata simpanan wajib lebih tinggi dibandingkan bulan lainnya." />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="alasan_pinjaman" label="Keperluan Utama Pinjaman" :options="\App\Enums\Koperasi\AlasanPinjamanKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="alasan_pinjaman_lainnya" label="Keperluan Pinjaman Lainnya" class="col-md-12" />
|
||||
</div>
|
||||
|
||||
<h6 class="fw-bold text-dark mb-3">K2 KONDISI EKONOMI RUMAH TANGGA</h6>
|
||||
<h6 class="fw-semibold text-dark mb-4">Stabilitas penghasilan sepanjang tahun</h6>
|
||||
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Berapa nominal simpanan wajib terbesar (secara perorangan) yang disetorkan oleh anggota koperasi ini?</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">Rp.</span>
|
||||
<input type="number" class="form-control" name="simpanan_terbesar" placeholder="0" value="{{ old('simpanan_terbesar', $pengurus->simpanan_terbesar) }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Pada bulan dan momen apa, simpanan wajib anggota koperasi secara rata-rata lebih tinggi, daripada setoran pada bulan lainnya?</label>
|
||||
<input type="text" class="form-control" name="momen_simpanan_terbesar" placeholder="..." value="{{ old('momen_simpanan_terbesar', $pengurus->momen_simpanan_terbesar) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="blok-alasan-pinjaman" class="mb-4 p-3 bg-label-warning rounded border border-warning">
|
||||
<label class="form-label fw-semibold text-dark">
|
||||
<i class="ti tabler-bulb text-warning me-1"></i>(Tanyakan jika koperasi merupakan koperasi simpan pinjam) Apa alasan/keperluan utama anggota melakukan pinjaman kepada koperasi?
|
||||
</label>
|
||||
<div class="row g-2 mt-1">
|
||||
<div class="col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="alasan_pinjaman[]" value="Produksi" {{ str_contains($pengurus->alasan_pinjaman ?? '', 'Produksi') ? 'checked' : '' }}><label class="form-check-label">Keperluan produksi</label></div></div>
|
||||
<div class="col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="alasan_pinjaman[]" value="Pendidikan" {{ str_contains($pengurus->alasan_pinjaman ?? '', 'Pendidikan') ? 'checked' : '' }}><label class="form-check-label">Pendidikan</label></div></div>
|
||||
<div class="col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="alasan_pinjaman[]" value="Kesehatan" {{ str_contains($pengurus->alasan_pinjaman ?? '', 'Kesehatan') ? 'checked' : '' }}><label class="form-check-label">Kesehatan</label></div></div>
|
||||
<div class="col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="alasan_pinjaman[]" value="Acara keluarga" {{ str_contains($pengurus->alasan_pinjaman ?? '', 'Acara keluarga') ? 'checked' : '' }}><label class="form-check-label">Acara keluarga/adat/hari besar</label></div></div>
|
||||
<div class="col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="alasan_pinjaman[]" value="Renovasi" {{ str_contains($pengurus->alasan_pinjaman ?? '', 'Renovasi') ? 'checked' : '' }}><label class="form-check-label">Renovasi rumah</label></div></div>
|
||||
<div class="col-md-4"><div class="form-check"><input class="form-check-input" type="checkbox" name="alasan_pinjaman[]" value="Sekunder" {{ str_contains($pengurus->alasan_pinjaman ?? '', 'Sekunder') ? 'checked' : '' }}><label class="form-check-label">Kebutuhan sekunder</label></div></div>
|
||||
<div class="col-12 mt-2">
|
||||
<div class="form-check d-inline-flex align-items-center gap-2">
|
||||
<input class="form-check-input trigger-toggle-check" type="checkbox" name="alasan_pinjaman[]" value="Lainnya" data-target="alasanLainnya" {{ str_contains($pengurus->alasan_pinjaman ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya, sebutkan:</label>
|
||||
<input type="text" class="form-control form-control-sm {{ str_contains($pengurus->alasan_pinjaman ?? '', 'Lainnya') ? '' : 'd-none' }}" id="alasanLainnya" name="alasan_pinjaman_lainnya" value="{{ old('alasan_pinjaman_lainnya', $pengurus->alasan_pinjaman_lainnya) }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="blok-ikatan-keuangan" class="mt-5">
|
||||
<h6 class="fw-bold text-dark mb-3">K6 IKATAN KEUANGAN</h6>
|
||||
<h6 class="fw-semibold text-dark mb-3">Keterlibatan Koperasi Simpan Pinjam dengan Petani Anggota Koperasi</h6>
|
||||
|
||||
<div class="alert alert-outline-warning small py-2 mb-4">
|
||||
<i class="ti tabler-bulb text-warning me-1"></i> Tanyakan jika koperasi merupakan koperasi simpan pinjam<br>
|
||||
<i class="ti tabler-bulb text-warning me-1"></i> Pertanyaan pada bagian ini sensitif untuk sebagian orang, enumerator perlu melakukan strategi penggalian data tertentu kepada responden yang diwawancarai
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label">Apakah terdapat mekanisme pembayaran pinjaman oleh petani anggota koperasi, dalam bentuk selain uang, misalnya hasil bumi?</label>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="pembayaran_selain_uang" value="Ada" data-target="bentukBayarBlok" data-action="show" {{ old('pembayaran_selain_uang', $pengurus->pembayaran_selain_uang) == 'Ada' ? 'checked' : '' }}><label class="form-check-label">Ada</label></div>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="pembayaran_selain_uang" value="Tidak ada" data-target="bentukBayarBlok" data-action="hide" {{ old('pembayaran_selain_uang', $pengurus->pembayaran_selain_uang) == 'Tidak ada' ? 'checked' : '' }}><label class="form-check-label">Tidak ada</label></div>
|
||||
</div>
|
||||
|
||||
<div id="bentukBayarBlok" class="p-3 bg-light rounded {{ old('pembayaran_selain_uang', $pengurus->pembayaran_selain_uang) == 'Ada' ? '' : 'd-none' }}">
|
||||
<div class="mb-4">
|
||||
<label class="form-label">Jika Ada, apa bentuk pembayaran oleh petani anggota, yang dapat diterima koperasi selain dalam bentuk uang?</label>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input trigger-hasil-bumi" type="checkbox" name="bentuk_pembayaran_barang[]" id="chkHasilBumi" value="Hasil bumi" {{ str_contains($pengurus->bentuk_pembayaran_barang ?? '', 'Hasil bumi') ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="chkHasilBumi">Hasil bumi (hasil panen)</label>
|
||||
</div>
|
||||
<div class="form-check"><input class="form-check-input" type="checkbox" name="bentuk_pembayaran_barang[]" value="Ganti jasa" {{ str_contains($pengurus->bentuk_pembayaran_barang ?? '', 'Ganti jasa') ? 'checked' : '' }}><label class="form-check-label">Ganti jasa/tenaga harian</label></div>
|
||||
<div class="form-check d-flex align-items-center gap-2 mt-2">
|
||||
<input class="form-check-input trigger-toggle-check" type="checkbox" name="bentuk_pembayaran_barang[]" value="Lainnya" data-target="bentukBayarLainnya" {{ str_contains($pengurus->bentuk_pembayaran_barang ?? '', 'Lainnya') ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Lainnya, sebutkan:</label>
|
||||
<input type="text" class="form-control form-control-sm w-50 {{ str_contains($pengurus->bentuk_pembayaran_barang ?? '', 'Lainnya') ? '' : 'd-none' }}" id="bentukBayarLainnya" name="bentuk_pembayaran_lainnya" value="{{ old('bentuk_pembayaran_lainnya', $pengurus->bentuk_pembayaran_lainnya) }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-2 {{ str_contains($pengurus->bentuk_pembayaran_barang ?? '', 'Hasil bumi') ? '' : 'd-none' }}" id="blokHitungPasar">
|
||||
<label class="form-label">Jika pembayaran pinjaman dilakukan dalam bentuk penukaran hasil bumi, apakah hasil bumi tersebut dihitung berdasarkan harga yang berlaku di pasaran?</label><br>
|
||||
<div class="form-check form-check-inline"><input class="form-check-input trigger-toggle" type="radio" name="perhitungan_harga_pasar" value="Ya" data-target="alasanPasar" data-action="hide" {{ old('perhitungan_harga_pasar', $pengurus->perhitungan_harga_pasar) == 'Ya' ? 'checked' : '' }}><label class="form-check-label">Ya</label></div>
|
||||
<div class="form-check form-check-inline d-inline-flex align-items-center gap-2">
|
||||
<input class="form-check-input trigger-toggle" type="radio" name="perhitungan_harga_pasar" value="Tidak" data-target="alasanPasar" data-action="show" {{ old('perhitungan_harga_pasar', $pengurus->perhitungan_harga_pasar) == 'Tidak' ? 'checked' : '' }}>
|
||||
<label class="form-check-label text-nowrap">Tidak, sebutkan alasannya:</label>
|
||||
<input type="text" class="form-control form-control-sm {{ old('perhitungan_harga_pasar', $pengurus->perhitungan_harga_pasar) == 'Tidak' ? '' : 'd-none' }}" id="alasanPasar" name="alasan_bukan_harga_pasar" value="{{ old('alasan_bukan_harga_pasar', $pengurus->alasan_bukan_harga_pasar) }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-between mt-5 border-top pt-4">
|
||||
<a href="{{ route('koperasi.pengurus.survey', ['id' => $pengurus->id ?? 0, 'step' => 2]) }}" class="btn btn-label-secondary">
|
||||
<i class="ti tabler-arrow-left me-1"></i> Sebelumnya
|
||||
</a>
|
||||
|
||||
<div class="ms-auto">
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="ti tabler-device-floppy me-1"></i> Selesaikan Survei
|
||||
</button>
|
||||
</div>
|
||||
@if($policy->active('pembayaran_selain_uang', [], $context))
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Ikatan Keuangan</h5>
|
||||
@endif
|
||||
<div class="row">
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="pembayaran_selain_uang" label="Pembayaran Pinjaman Selain Uang" :options="\App\Enums\Koperasi\KetersediaanKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="bentuk_pembayaran_barang" label="Bentuk Pembayaran Selain Uang" :options="\App\Enums\Koperasi\BentukPembayaranKoperasi::cases()" :multiple="true" class="col-md-12" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="bentuk_pembayaran_lainnya" label="Bentuk Pembayaran Lainnya" class="col-md-12" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="perhitungan_harga_pasar" label="Penilaian Hasil Bumi Sesuai Harga Pasar" :options="\App\Enums\Koperasi\JawabanYaTidakKoperasi::cases()" class="col-md-6" />
|
||||
<x-koperasi-survey-field :policy="$policy" :model="$pengurus" name="alasan_bukan_harga_pasar" label="Alasan Tidak Menggunakan Harga Pasar" type="textarea" class="col-md-12" />
|
||||
</div>
|
||||
|
||||
<x-koperasi-form-actions />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
$('.trigger-toggle-check').change(function() {
|
||||
let target = $(this).data('target');
|
||||
if ($(this).is(':checked')) {
|
||||
$('#' + target).removeClass('d-none').focus();
|
||||
} else {
|
||||
$('#' + target).addClass('d-none').val('');
|
||||
}
|
||||
});
|
||||
|
||||
$('.trigger-toggle').change(function() {
|
||||
let target = $(this).data('target');
|
||||
let action = $(this).data('action');
|
||||
if (action === 'show') {
|
||||
$('#' + target).removeClass('d-none').focus();
|
||||
} else {
|
||||
$('#' + target).addClass('d-none').val('');
|
||||
}
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.trigger-hasil-bumi').on('change', function() {
|
||||
if ($(this).is(':checked')) {
|
||||
$('#blokHitungPasar').removeClass('d-none').hide().slideDown();
|
||||
} else {
|
||||
$('#blokHitungPasar').slideUp(function() {
|
||||
$(this).addClass('d-none');
|
||||
$('input[name="perhitungan_harga_pasar"]').prop('checked', false);
|
||||
$('#alasanPasar').addClass('d-none').val('');
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -119,7 +119,7 @@
|
||||
<li class="menu-item {{ request()->routeIs('koperasi.*') ? 'active' : '' }}">
|
||||
<a href="{{ route('koperasi.pengurus.index') }}" class="menu-link">
|
||||
<span class="menu-icon sidebar-icon" aria-hidden="true"><i class="icon-base ti tabler-heart-handshake"></i></span>
|
||||
<div data-i18n="Pengurus Koperasi">Pengurus Koperasi</div>
|
||||
<div data-i18n="Koperasi">Koperasi</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
+11
-5
@@ -290,13 +290,19 @@ Route::middleware('auth')
|
||||
Route::resource('bumdes', App\Http\Controllers\Web\Bumdes\PengurusBumdesController::class)
|
||||
->parameters(['bumdes' => 'pengurusBumdes']);
|
||||
|
||||
Route::delete('/koperasi/pengurus/{id}', [\App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class, 'destroy'])->name('koperasi.pengurus.destroy');
|
||||
|
||||
// --- KOPERASI GROUP ---
|
||||
Route::prefix('koperasi')->name('koperasi.')->group(function () {
|
||||
Route::resource('pengurus', App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class);
|
||||
Route::get('pengurus/{id}/survey', [App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class, 'survey'])->name('pengurus.survey');
|
||||
Route::post('pengurus/{id}/survey', [App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class, 'surveyStore'])->name('pengurus.survey.store');
|
||||
Route::resource('pengurus.kelembagaan-aktor', App\Http\Controllers\Web\Koperasi\KelembagaanKoperasiController::class)
|
||||
->only(['index', 'store'])->parameters(['pengurus' => 'pengurusKoperasi'])->shallow();
|
||||
Route::resource('pengurus.rantai-nilai-akses-pasar', App\Http\Controllers\Web\Koperasi\RantaiNilaiKoperasiController::class)
|
||||
->only(['index', 'store'])->parameters(['pengurus' => 'pengurusKoperasi'])->shallow();
|
||||
Route::resource('pengurus.sosial-ekonomi', App\Http\Controllers\Web\Koperasi\SosialEkonomiKoperasiController::class)
|
||||
->only(['index', 'store'])->parameters(['pengurus' => 'pengurusKoperasi'])->shallow();
|
||||
Route::resource('pengurus.survey', App\Http\Controllers\Web\Koperasi\SurveyKoperasiController::class)
|
||||
->only(['index', 'store'])->parameters(['pengurus' => 'pengurusKoperasi'])
|
||||
->names(['index' => 'pengurus.survey', 'store' => 'pengurus.survey.store']);
|
||||
Route::resource('pengurus', App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class)
|
||||
->except(['show'])->parameters(['pengurus' => 'pengurusKoperasi']);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user