234 Commits
Author SHA1 Message Date
Syaharani 12aa655ba4 Update BUMDes 2026-11-05 21:42:00 +07:00
Syaharani ddd07b1397 Update BUMDes 2026-11-05 21:33:10 +07:00
Syaharani 291ebf919c Update Kelompok Tani 2026-11-05 21:30:38 +07:00
Syaharani c55ff109a0 Update BUMDes 2026-11-05 19:20:05 +07:00
afriadirahman 9cdd178297 Update Spatie versi 4 2026-11-05 17:06:11 +07:00
afriadirahman b76fa9e59b Update composer json untuk spatie 2026-11-05 16:39:08 +07:00
afriadirahman 7a279ad5d2 Update Log aktivitas 2026-11-05 16:34:33 +07:00
afriadirahman a3ec431d49 Update Monitoring dan Verifikasi Petani 2026-11-05 11:01:12 +07:00
afriadirahman fd93e0d265 Update Dinamis header dan form input 2026-11-04 20:25:31 +07:00
afriadirahman 8ef4ae1f15 Update Status kelengkapan data 2026-11-04 17:31:22 +07:00
afriadirahman 89c5a1371a Update Alert Profil Petani 2026-11-04 16:20:33 +07:00
afriadirahman 41da3a71ee Update Role fasilitator, kordinator 2026-11-04 14:24:51 +07:00
afriadirahman b5b046ed86 Update Pendidikan dan Pelatihan 2026-11-04 13:17:36 +07:00
afriadirahman aa91c3fe3f Update Praktik Budidaya 2026-11-04 13:09:30 +07:00
Syaharani 53913bebe9 update kelompok tani 2026-11-03 17:53:53 +07:00
Althaf f455f8b878 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-11-03 14:47:04 +07:00
Althaf f1112e3b68 update controller 2026-11-03 10:51:50 +07:00
afriadirahman c1370a26ca Update Harga Internasional 2026-11-03 09:37:59 +07:00
Syaharani 013cb7b728 dashboard pasar 2026-10-21 10:14:49 +07:00
Althaf 4ab745cfe5 sumber informasi harga 2026-10-19 10:03:05 +07:00
Althaf c66eed56e2 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-10-16 15:11:49 +07:00
Syaharani 8be0906a2e Update profil petani 2026-10-16 15:48:42 +07:00
afriadirahman fcd79b7cfe Update dashboard Profil Detail Petani 2026-10-16 15:25:21 +07:00
Althaf bea9be8a39 resolve aksespasar 2026-10-16 15:11:39 +07:00
afriadirahman 5220b10de7 Update Config js 2026-10-16 10:38:30 +07:00
Syaharani 24725e3df1 update chart dashboard 2026-10-16 10:29:42 +07:00
Syaharani 60d32a88e9 update dashboard produksi 2026-10-16 10:04:56 +07:00
Althaf 4370d3c3d0 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-10-15 15:14:57 +07:00
Althaf 7699430301 new field akses pasar 2026-10-15 15:10:18 +07:00
fir2be df2b5a1312 hover and scroll on map 2026-10-15 14:12:03 +07:00
fir2be 2e8271d27a cars 2026-10-15 14:05:01 +07:00
fir2be 9b5c0a7309 perubahan query 2026-10-15 13:02:42 +07:00
fir2be 9d56b67998 sroll untuk 2026-10-15 11:31:57 +07:00
fir2be f95f43999a peta sebaran dan praktek budaya 2026-10-15 11:25:38 +07:00
Syaharani 3e172cf915 card dashboard produksi 2026-10-14 20:18:15 +07:00
Syaharani 3a9b3dbd7b dashboard produksi 2026-10-14 19:43:39 +07:00
Syaharani 80f0056efe dashboard produksi & ganti warna chart 2026-10-13 15:55:18 +07:00
afriadirahman aef27704f2 Update Karakteristik Petani 2026-10-12 10:22:01 +07:00
Syaharani f49bb0c2db dashboard produksi 2026-10-09 13:22:51 +07:00
afriadirahman 8a2c0292ac Update Header 2026-10-08 09:58:56 +07:00
afriadirahman 9ea324e553 Update Dashboard & Sidebar 2026-10-08 09:48:00 +07:00
afriadirahman 94c3288ea7 Update Dashboard Karakteristik Petani 2026-10-07 13:53:55 +07:00
Syaharani 8539bdcec4 update profil petani 2026-10-07 12:03:02 +07:00
Syaharani 77de648ded dashboard karakteristik petani 2026-10-07 10:20:20 +07:00
Syaharani 393cf0d0d1 karakteristik petani 2026-10-06 17:52:34 +07:00
Syaharani 7fdf9b400d solve jumlah lahan dan tanaman 2026-09-23 17:01:19 +07:00
Syaharani be4d46004e solve jumlah lahan dan tanaman 2026-09-23 16:36:14 +07:00
Syaharani fef5358402 solve filter jumlah lahan dan tanaman 2026-09-23 14:52:30 +07:00
Syaharani 02eed6da34 solve jumlah lahan dan tanaman 2026-09-23 14:37:08 +07:00
Syaharani 94d3f2a582 lower filter profil petani 2026-09-23 10:19:30 +07:00
Syaharani 471ca5ac0e filter profil petani 2026-09-23 10:13:13 +07:00
Althaf 8ec8f0c9d6 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-09-22 15:21:25 +07:00
Althaf 4d7d16e9f6 add migration riwayat petani 2026-09-22 15:20:45 +07:00
afriadirahman 1155b9b95b Update Header Pertanian 2026-09-22 15:12:32 +07:00
Syaharani 607533a327 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	app/Http/Controllers/Web/Produktivitas/PetaniController.php
2026-09-22 11:02:02 +07:00
Syaharani 6b25bff2c4 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-09-22 10:59:55 +07:00
Syaharani 71b4d42ea2 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-09-22 10:58:41 +07:00
Syaharani c42a2571f5 solve profil petani 2026-09-22 10:57:21 +07:00
Althaf 16903b21e3 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-09-18 16:22:57 +07:00
Althaf 1d4a44b8ac update destroy 2026-09-18 16:22:48 +07:00
Syaharani 539239b507 bumdes 2026-09-16 11:09:08 +07:00
afriadirahman a76b014056 Update Kelompok Tani & APP AGERA 2026-09-06 19:09:37 +07:00
Althaf d50c292cf7 instrumen koperasi 2026-09-03 13:17:16 +07:00
Althaf dacaec7a86 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-08-27 11:48:55 +07:00
Althaf 6967eafe98 add instrumen koperasi 2026-08-27 11:48:42 +07:00
Syaharani 118cda625a filter dashboard indikator pertanian 2026-08-20 17:24:31 +07:00
irwan.l.cahyono a3f7cb4669 filter segmen 2026-08-20 01:52:05 +07:00
irwan.l.cahyono ec009a2c55 indeks petani dan ajax 2026-08-20 01:10:56 +07:00
afriadirahman b63dafdaee Update Profile Petani 2026-08-20 01:01:27 +07:00
Althaf b97f682cd3 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-08-19 16:42:31 +07:00
Althaf 404019bab6 Added Score 2026-08-19 16:42:03 +07:00
Syaharani 609919ba30 solve dashboard survey petani 2026-08-19 16:21:42 +07:00
irwan.l.cahyono 047cb4a779 link ke profil 2026-08-19 10:37:17 +07:00
irwan.l.cahyono 530c297b53 revisi jumlahpetani 2026-08-19 01:57:52 +07:00
Syaharani 8fbf68e6ef solve keanggotaan kelompok tani 2026-08-18 14:05:46 +07:00
Syaharani ac8b370248 update dashboard indikator pertanian 2026-08-18 14:04:44 +07:00
Syaharani 88762f7afb update dashboard indikator pertanian 2026-08-13 17:00:00 +07:00
Syaharani b96de514e3 solve dashboard indikator pertanian 2026-08-13 16:31:11 +07:00
Syaharani 6830142a82 solve dashboard indikator pertanian 2026-08-13 16:07:55 +07:00
afriadirahman 4b26e82afb Optimize Demografi & Update Profil Petani 2026-08-13 15:31:04 +07:00
Syaharani b855a857b2 solve dashboard indikator pertanian 2026-08-13 13:07:03 +07:00
afriadirahman ba7520a23c Update Demografi Petani 2026-08-12 17:49:24 +07:00
afriadirahman 0b333ab4e9 Update Profil Detail Petani 2026-08-12 17:33:53 +07:00
Althaf 3b1f15d5b3 fixed aksespasar 2026-08-11 16:19:10 +07:00
Althaf 605506bba8 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-08-11 15:40:27 +07:00
afriadirahman c960ba14b1 Update Demografi Petani 2026-08-11 15:13:28 +07:00
Syaharani a4f38998d5 dashboard indikator pertanian 2026-08-07 16:09:24 +07:00
Syaharani 0d9f6c0b64 indikator pertanian 2026-08-07 15:56:37 +07:00
irwan.l.cahyono 81775b0c13 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-08-07 15:00:32 +07:00
irwan.l.cahyono ba1a318d09 soft deleted petani 2026-08-07 15:00:30 +07:00
afriadirahman 0761d64254 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-08-07 14:32:48 +07:00
afriadirahman 67c3c6c809 Update demografi dashboard 2026-08-07 14:32:40 +07:00
irwan.l.cahyono 04387268cd indeks petani 2026-08-07 14:31:16 +07:00
irwan.l.cahyono 946fabb9a5 lahan skor has petani 2026-08-07 14:17:06 +07:00
irwan.l.cahyono 0a0c86d648 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-08-07 12:59:26 +07:00
irwan.l.cahyono 8b21fab8b8 dashboard indeks petani 2026-08-07 12:59:25 +07:00
afriadirahman 16a0a3c56c Update Icon Demografi Dashboard 2026-08-07 11:33:08 +07:00
afriadirahman d4c6b64ba6 Update Sidebar Demografi Petani 2026-08-07 11:20:05 +07:00
afriadirahman b4089d72b3 Update Dashboard Demografi Petani 2026-08-07 11:17:53 +07:00
afriadirahman 01990ccec1 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-08-06 13:29:42 +07:00
irwan.l.cahyono 8aed88a31f dashboard indeks petani 2026-08-05 01:20:19 +07:00
irwan.l.cahyono 4aa0780802 dashboard profil petani komp 4 2026-08-03 13:08:01 +07:00
afriadirahman 4e41246382 Update Profile Petani Dashboard 2026-08-03 12:53:20 +07:00
Althaf 43fe9e5f7f Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-08-03 09:22:47 +07:00
irwan.l.cahyono c8d1994d3b dashboard profil petani 2026-07-30 15:23:34 +07:00
Althaf cf0f4b47b4 update akses pasar 2026-07-30 11:14:31 +07:00
irwan.l.cahyono 24a8016710 petani booted skor 2026-07-29 16:52:51 +07:00
irwan.l.cahyono 20e1eee6ff skor petani domain komponen hitung 2026-07-29 16:27:33 +07:00
afriadirahman c0432cd5f8 Update Sidebar Filter Fasilitator 2026-07-29 16:12:31 +07:00
irwan.l.cahyono 0ce0936a80 skor petani update 2026-07-29 16:05:43 +07:00
Syaharani 502c932f21 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-28 16:54:37 +07:00
Syaharani e60a66eeb7 bumdes: profil & add pengurus bumdes 2026-07-28 16:54:27 +07:00
afriadirahman 4475cd0098 Update Logo Sidebar 2026-07-28 16:18:41 +07:00
afriadirahman 67c111a2b3 Update Logo Agromonev & Agropro 2026-07-28 16:10:47 +07:00
Syaharani 3bcaa3ea50 solve survey produktivitas 2026-07-27 10:14:36 +07:00
Syaharani bed9a6f620 solve 2026-07-23 18:26:24 +07:00
Althaf 712b10e405 Merge branches 'main' and 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-22 17:06:45 +07:00
Althaf 6cfcf46ba6 use assets avatars 2026-07-22 17:06:31 +07:00
Syaharani b1b9828514 update jumlah tanaman 2026-07-22 16:54:57 +07:00
Syaharani 7af7e1bdaf update jumlah lahan 2026-07-22 16:40:24 +07:00
Syaharani bd05fc7f0f update hama dan penyakit 2026-07-22 16:23:32 +07:00
Syaharani 17b5687db8 update user profile 2026-07-22 15:55:07 +07:00
Syaharani e7f48b6500 solve lahan & tanaman 2026-07-22 15:49:25 +07:00
Syaharani a5884d0f8c solve akses pasar 2026-07-22 15:22:56 +07:00
Syaharani 9576c6295e solve sosial ekonomi 2026-07-22 14:41:05 +07:00
irwan.l.cahyono 079e300d5d Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-22 14:39:10 +07:00
irwan.l.cahyono 2c94316439 petani lahan hapus 2026-07-22 14:38:10 +07:00
Syaharani 690b53e5a2 Merge origin/main 2026-07-22 14:08:34 +07:00
irwan.l.cahyono 50c9adfdc7 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-22 13:56:56 +07:00
irwan.l.cahyono 696c7dede8 hama dan penyakit lahan 2026-07-22 13:56:55 +07:00
Syaharani 5967e7d6f3 solve pendidikan & pelatihan 2026-07-22 13:28:58 +07:00
Syaharani 4c66d72dc5 solve praktik budidaya 2026-07-22 13:27:35 +07:00
Althaf c43483a9f8 default profile-iconize & fixed overlapping tab 2026-07-22 13:24:39 +07:00
Syaharani e02a34a527 solve lahan & tanaman 2026-07-22 11:58:51 +07:00
Althaf 713355ce0a add text-heading to adjust icon color theme 2026-07-22 10:35:36 +07:00
Althaf 12f8d0bbda integrate image cropper for avatar upload/delete option/retouch 2026-07-22 10:10:06 +07:00
Althaf 8afe7f9b38 solve view-controller dropzone 2026-07-21 11:49:32 +07:00
Althaf fbf84eb4cb enhance UX alerts 2026-07-20 16:45:00 +07:00
Althaf e04093ad3f Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-20 16:36:29 +07:00
Althaf 3e1d3a33ee fix: resolve existing photos preview in Dropzone Lahan&Tanaman 2026-07-20 16:36:12 +07:00
irwan.l.cahyono e316d064ef auth dan user profile 2026-07-17 11:19:09 +07:00
irwan.l.cahyono 0c289ec244 dashboard indeks 2026-07-17 01:19:12 +07:00
irwan.l.cahyono 089f1b515d tanaman penaung di lahan 2026-07-16 15:22:42 +07:00
irwan.l.cahyono 4c647ea8ce Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-16 13:46:45 +07:00
irwan.l.cahyono 419404e273 null jumlah tanaman 2026-07-16 13:46:43 +07:00
Althaf 837e542851 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-16 11:42:40 +07:00
Althaf 9378d15d71 edit foto tambah lahan 2026-07-16 11:41:35 +07:00
irwan.l.cahyono 0381e9bf0e Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-15 15:00:14 +07:00
irwan.l.cahyono 3a70445e9a petani lahan required not 2026-07-15 15:00:13 +07:00
afriadirahman d2ed2c58fd Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-15 14:37:48 +07:00
afriadirahman 9b201efa06 update Praktik budidaya migration 2026-07-15 14:37:39 +07:00
irwan.l.cahyono 2b3a0b7c58 tanggal jqueryvalidation 2026-07-15 14:05:25 +07:00
irwan.l.cahyono a187fb1095 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-15 11:44:39 +07:00
irwan.l.cahyono 6b44c11181 header dan index 2026-07-15 11:44:38 +07:00
afriadirahman 090153e53a Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-15 11:30:37 +07:00
afriadirahman a79a93d291 Update komoditas Utama 2026-07-15 11:30:10 +07:00
irwan.l.cahyono 62f0f1bdbc tgl lahir edit 2026-07-15 10:55:11 +07:00
irwan.l.cahyono f0acd8c7ed dashboard komoditas 2026-07-15 10:41:27 +07:00
irwan.l.cahyono 3908b0be71 komoditas utama 2026-07-15 10:37:38 +07:00
irwan.l.cahyono 05cc3be9d3 enum pendidikan 2026-07-15 01:34:47 +07:00
irwan.l.cahyono f4c83d348a filter fasil 2026-07-15 01:19:12 +07:00
irwan.l.cahyono 61bd8dc388 redirect web 2026-07-15 01:11:19 +07:00
irwan.l.cahyono 002d6044b4 profil petani dashboard 2026-07-15 01:06:10 +07:00
irwan.l.cahyono 30196278d7 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-15 00:18:55 +07:00
irwan.l.cahyono 08c19c0714 skor petani 2026-07-15 00:18:00 +07:00
afriadirahman d6c036e19a Update Header Survey Petani 2026-07-14 23:35:15 +07:00
afriadirahman 981bc0d494 Update Master Komoditas 2026-07-14 23:05:16 +07:00
afriadirahman 857da1e900 Update Master Komoditas & Varietas 2026-07-14 22:34:38 +07:00
irwan.l.cahyono 66fc7227e6 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-14 17:13:55 +07:00
irwan.l.cahyono 3edfc57ba7 skor petani praktik budidaya 2026-07-14 17:13:52 +07:00
Althaf 4a560ebc4e Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-14 15:41:40 +07:00
Althaf d4eb27e583 foto tambah lahan 2026-07-14 15:41:16 +07:00
irwan.l.cahyono d1c0f90afd sidebar 2026-07-14 15:39:22 +07:00
irwan.l.cahyono a1dadd1b1b petani lahan tanaman edit 2026-07-14 14:50:33 +07:00
irwan.l.cahyono 2c28bb06db asset avatar 2026-07-14 11:15:23 +07:00
irwan.l.cahyono 96a53c8754 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-14 10:49:08 +07:00
irwan.l.cahyono fcc5d7dcc5 header skor 2026-07-14 10:44:35 +07:00
afriadirahman e383aacbeb Update Dashboard Survey Petani 2026-07-14 10:34:46 +07:00
irwan.l.cahyono 5b776b2ae8 header 2026-07-14 09:20:46 +07:00
irwan.l.cahyono c4e3e460b1 hidden show 2026-07-13 16:45:23 +07:00
irwan.l.cahyono a7dc1dc58b dashboard survey 2026-07-13 16:43:27 +07:00
irwan.l.cahyono d01c737364 web fasil 2026-07-13 16:39:46 +07:00
irwan.l.cahyono 8d50757b51 foto petani 2026-07-13 16:29:00 +07:00
irwan.l.cahyono f146cb2608 sideba petani profil 2026-07-13 16:22:00 +07:00
irwan.l.cahyono 095d84ec7f sidebar env 2026-07-13 16:13:54 +07:00
irwan.l.cahyono f259c6728a register 2026-07-13 15:53:50 +07:00
irwan.l.cahyono a241a62136 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-13 14:03:24 +07:00
irwan.l.cahyono 4755c8a482 dashboard profil petani 2026-07-13 14:03:19 +07:00
afriadirahman 7672877299 update Model Petani 2026-07-13 10:19:04 +07:00
irwan.l.cahyono 92e8efb247 skor petani 2026-07-13 10:18:32 +07:00
irwan.l.cahyono 599269410b foto lahan 2026-07-13 01:04:55 +07:00
irwan.l.cahyono c5b5721b31 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-12 23:37:37 +07:00
irwan.l.cahyono 2bf2a68a3a perbaikan petani dan lahan 2026-07-12 23:37:36 +07:00
afriadirahman b445392e9f Update Pendidikan & Pelatihan 2026-07-12 23:00:58 +07:00
afriadirahman bcc15d5240 Update Create User Register 2026-07-12 22:51:23 +07:00
afriadirahman d33bc8a42b Update Pendidikan Pelatihan 2026-07-11 15:19:44 +07:00
Syaharani df5bfeb67f update user profile 2026-07-10 17:53:28 +07:00
Syaharani b0e1f3f131 update menu fasilitator 2026-07-10 17:47:59 +07:00
irwan.l.cahyono a19871366a skorpetani 2026-07-10 14:18:55 +07:00
afriadirahman b4b851c7a9 Update enums kebutuhan Air 2026-07-10 13:53:40 +07:00
afriadirahman e6f6257434 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-10 13:49:24 +07:00
afriadirahman 469e57ba28 Kebutuhan air Permusim enums 2026-07-10 13:49:09 +07:00
Syaharani d06da22ae5 update kondisi tanaman 2026-07-10 13:43:29 +07:00
Syaharani 350df6adcf update kondisi tanaman 2026-07-10 13:39:28 +07:00
irwan.l.cahyono 1788efaed5 skor petani 2026-07-10 09:47:13 +07:00
irwan.l.cahyono d49bd4953c petani lahan dan skor 2026-07-10 08:47:48 +07:00
afriadirahman 26f6e83328 Update Praktik Budidaya 2026-07-10 02:48:23 +07:00
Althaf 79f6426125 bring to final akses pasar 2026-07-09 22:30:31 +07:00
Althaf 9557d1ec64 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-09 18:15:19 +07:00
Althaf 7bab43df71 resolve user create 2026-07-09 18:15:12 +07:00
Syaharani 316b256ae0 update login & register 2026-07-09 18:14:12 +07:00
Syaharani bfabab96c5 update field sosial ekonomi 2026-07-09 18:13:53 +07:00
Althaf bd9b0873a3 refinement registrasi-verifikasi role & rbac 2026-07-09 17:42:55 +07:00
Syaharani 3464a802e2 update skoring 2026-07-09 17:30:19 +07:00
afriadirahman 6c95c462cb Update Praktik Budidaya 2026-07-09 16:29:18 +07:00
Syaharani 626fdba065 update sosial ekonomi 2026-07-09 14:37:53 +07:00
afriadirahman 2152079b26 Update Praktik Budidaya 2026-07-08 22:24:23 +07:00
afriadirahman 6559a97f43 Update add Praktik Budidaya 2026-07-08 21:10:50 +07:00
afriadirahman 05c2e53378 Update Migration Input Update Praktik Budidaya 2026-07-08 20:57:27 +07:00
Syaharani 3df381a66c register fasilitator 2026-07-08 17:00:50 +07:00
Syaharani 6fac76127d skoring prtani 2026-07-08 17:00:34 +07:00
irwan.l.cahyono a1d9b34d93 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-08 01:37:17 +07:00
irwan.l.cahyono c01ba6a906 perbaikan add header conflict 2026-07-08 01:37:15 +07:00
afriadirahman 4976948bc6 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-07 23:24:54 +07:00
afriadirahman 734c3fba65 Update Praktik Budidaya 2026-07-07 23:24:48 +07:00
irwan.l.cahyono 457288b325 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-07 21:35:59 +07:00
Althaf 9220cf23c2 Restore UI akses pasar dan header 2026-07-07 16:52:35 +07:00
Althaf 884b911767 Selesai merge data 2026-07-07 16:35:29 +07:00
Althaf e1fde05ba0 Resolve merge conflict di controller dan routes 2026-07-07 16:16:53 +07:00
Syaharani 74572fe586 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-07 15:41:21 +07:00
Syaharani 2eb40f8a1a enums sosial ekonomi 2026-07-07 15:41:02 +07:00
irwan.l.cahyono 34865b34be Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-07 05:17:42 +07:00
irwan.l.cahyono f448257980 header summary 2026-07-06 16:07:20 +07:00
irwan.l.cahyono f9f507a115 Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web 2026-07-06 15:45:56 +07:00
402 changed files with 54003 additions and 2889 deletions
+6
View File
@@ -63,3 +63,9 @@ AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
VITE_APP_NAME="${APP_NAME}"
# Optional CA bundle path for Yahoo Finance when PHP has no system CA configured.
YAHOO_FINANCE_CA_BUNDLE=
ALPHA_VANTAGE_API_KEY=
+715
View File
@@ -0,0 +1,715 @@
# AISTANDAR — Standar Pengembangan Aplikasi database-pertani-web
Dokumen ini adalah **aturan wajib** bagi AI (dan developer) yang bekerja di repo ini.
Baca seluruhnya sebelum membuat, mengubah, atau merefaktor kode.
## 0. Cara memakai dokumen ini
- Aturan di sini **mengalahkan** kebiasaan umum atau contoh dari luar. Jika ada konflik antara kode lama dan dokumen ini, ikuti dokumen ini **untuk kode baru**, dan ikuti Bagian 13 (Prosedur Refaktor) untuk kode lama.
- Jika sesuatu **tidak diatur** di sini: lihat dulu bagaimana modul yang sudah sesuai standar melakukannya, lalu tiru polanya. Jika tetap tidak jelas, **tanya**, jangan mengarang pola baru.
- **Jangan** menambah package/library baru, mengubah struktur database yang sudah ada, atau mengubah kontrak API tanpa izin eksplisit.
- Bahasa: teks yang tampil ke pengguna (label, pesan, validasi) memakai **Bahasa Indonesia**. Nama domain (petani, lahan, komoditas) tetap Bahasa Indonesia; kata kerja teknis Laravel (`index`, `store`, `show`) tetap bahasa Inggris.
---
## 1. Stack
| Bagian | Teknologi |
|---|---|
| Framework | Laravel 12 |
| Frontend web | Blade (tanpa Livewire/Inertia) |
| UI template | Vuexy (Bootstrap 5), ikon Tabler |
| Grafik | ApexCharts |
| Peta | Leaflet |
| Auth web | Session |
| Auth API | Laravel Sanctum (token) |
| Dokumentasi API | dedoc/scramble |
| Role | `app/Enums/Role.php`: `super_admin`, `admin` (admin program), `koordinator` (per komoditas), `enumerator` (penginput data petani), `fasilitator` (pemateri workshop), `petani`, `offtaker` |
---
## 2. Struktur folder & penamaan
### 2.1 Pengelompokan per domain
Controller, Model, Request, dan View **dikelompokkan per domain yang sama**:
```
Domain yang ada: Dashboard, Laporan, Produktivitas, Ekosistem, Program, Master,
Bumdes, Koperasi, Konfigurasi
```
| Lapisan | Lokasi |
|---|---|
| Controller web | `app/Http/Controllers/Web/{Domain}/{Model}Controller.php` |
| Controller API | `app/Http/Controllers/Api/{Domain}/{Model}Controller.php` |
| Form Request | `app/Http/Requests/{Domain}/Store{Model}Request.php`, `Update{Model}Request.php` |
| Model | `app/Models/{DomainModel}/{Model}.php` (ikuti folder model yang ada: `Pertanian/`, `Wilayah/`, `Program/`, `Master/`, dst.) |
| Enum | `app/Enums/` |
| Service / Query | `app/Services/{Domain}/` |
| View | `resources/views/{domain}/{modul}/` (huruf kecil, kebab-case) |
Controller baru **tidak boleh** ditaruh di root `app/Http/Controllers/`. Controller root yang sudah ada (`ProgramController`, `ProgramKomoditasController`, `ProgramLokasiController`) dipindahkan ke domain `Program/` saat direfaktor.
### 2.2 Konvensi nama
| Objek | Aturan | Contoh |
|---|---|---|
| Model | Singular, PascalCase | `Petani`, `JenisKomoditas` |
| Tabel | snake_case, **selalu ditulis eksplisit** di model | `protected $table = 'petani';` |
| Controller | `{Model}Controller` | `PetaniController` |
| Route name | `{modul}.{aksi}`, kebab-case | `jenis-komoditas.index` |
| URL | kebab-case | `/jenis-komoditas` |
| View | `{domain}/{modul}/{aksi}.blade.php` | `master/provinsi/index.blade.php` |
| Method tambahan | camelCase | `byProvinsi()`, `list()` |
> Karena nama domain berbahasa Indonesia, pluralisasi otomatis Laravel salah (`petanis`). **Wajib** set `$table` di setiap model, dan set parameter route bila perlu (`->parameters(['jenis-komoditas' => 'jenisKomoditas'])`).
---
## 3. Controller
> **Cakupan:** Bagian 3 berlaku untuk **modul CRUD** (pengelolaan data: tambah, ubah, hapus).
> Controller **Dashboard** dan **Laporan/Reporting** tidak terikat aturan 7 method dan mengikuti aturan yang lebih fleksibel di **Bagian 11**.
### 3.1 Tujuh method resmi
Untuk modul CRUD, gunakan **hanya** nama method resource Laravel:
| Method | HTTP | URL | Route name | Fungsi |
|---|---|---|---|---|
| `index` | GET | `/items` | `items.index` | Daftar data |
| `create` | GET | `/items/create` | `items.create` | Form tambah |
| `store` | POST | `/items` | `items.store` | Simpan baru |
| `show` | GET | `/items/{item}` | `items.show` | Detail |
| `edit` | GET | `/items/{item}/edit` | `items.edit` | Form ubah |
| `update` | PUT/PATCH | `/items/{item}` | `items.update` | Simpan perubahan |
| `destroy` | DELETE | `/items/{item}` | `items.destroy` | Hapus (soft delete) |
**Dilarang** memakai nama `add`, `view`, `save`, `delete`, `remove`, `detail`, atau sejenisnya untuk aksi CRUD. (Larangan ini tidak berlaku untuk Dashboard dan Laporan, lihat Bagian 11.)
### 3.2 Prinsip controller tipis
- Validasi **selalu** di Form Request, tidak pernah `$request->validate()` di controller.
- Controller hanya: terima request → panggil model/service → kembalikan respons.
- Logika bisnis yang lebih dari ±15 baris, dipakai di lebih dari satu tempat, atau melibatkan banyak tabel → pindahkan ke `app/Services/{Domain}/`.
- Operasi yang menulis ke lebih dari satu tabel → bungkus dengan `DB::transaction()`.
- Pakai route model binding (`Petani $petani`), bukan `find($id)`.
### 3.3 Tiga pola resmi
Pilih **satu** pola per modul berdasarkan tabel ini:
| Pola | Kapan dipakai | Contoh |
|---|---|---|
| **A. Offcanvas (AJAX)** | Data referensi/sederhana: sedikit field, tanpa halaman detail yang kaya | Provinsi, Kabupaten, Komoditas, Varietas, Adat |
| **B. Resource halaman** | Entitas utama: banyak field, ada relasi, perlu halaman detail | Lahan, Produksi, Workshop, BUMDes, Koperasi |
| **C. Detail multi-tab** | Entitas induk dengan banyak bagian data yang diisi bertahap | Petani, Survey Kelompok Tani |
---
#### Pola A — Offcanvas (AJAX)
- `index` mengembalikan **view**; `store`, `show`, `update`, `destroy` mengembalikan **JSON**.
- Tidak ada halaman `create`/`edit`; form ada di offcanvas di `index.blade.php`.
- `show` dipakai JS untuk mengisi form edit di offcanvas.
```php
// routes/web.php
// Route tambahan WAJIB didaftarkan SEBELUM Route::resource agar tidak tertangkap {provinsi}
Route::get('provinsi/list', [ProvinsiController::class, 'list'])->name('provinsi.list');
Route::resource('provinsi', ProvinsiController::class)->except(['create', 'edit']);
```
```php
namespace App\Http\Controllers\Web\Master;
class ProvinsiController extends Controller
{
public function index(Request $request)
{
$provinsi = Provinsi::query()
->when($request->search, fn ($q, $s) => $q->where('nama', 'like', "%{$s}%"))
->latest()
->paginate(15)
->withQueryString();
return view('master.provinsi.index', compact('provinsi'));
}
public function store(StoreProvinsiRequest $request)
{
$provinsi = Provinsi::create($request->validated());
return response()->json([
'success' => true,
'message' => 'Provinsi berhasil ditambahkan.',
'data' => $provinsi,
], 201);
}
public function show(Provinsi $provinsi)
{
return response()->json(['success' => true, 'data' => $provinsi]);
}
public function update(UpdateProvinsiRequest $request, Provinsi $provinsi)
{
$provinsi->update($request->validated());
return response()->json([
'success' => true,
'message' => 'Provinsi berhasil diperbarui.',
'data' => $provinsi,
]);
}
public function destroy(Provinsi $provinsi)
{
DB::transaction(fn () => $provinsi->delete());
return response()->json([
'success' => true,
'message' => 'Provinsi berhasil dihapus.',
]);
}
}
```
**Dropdown berantai** (provinsi → kabupaten → kecamatan → desa): method `by{Induk}` di controller anak, mengembalikan JSON `[{id, nama}]`.
```php
Route::get('kabupaten/by-provinsi/{provinsi}', [KabupatenController::class, 'byProvinsi'])
->name('kabupaten.by-provinsi');
```
---
#### Pola B — Resource halaman
- Semua 7 method; view `index`, `create`, `edit`, `show` + partial `_form`.
- Setelah `store`/`update`/`destroy` → **redirect** dengan flash message.
```php
Route::resource('lahan', LahanController::class);
```
```php
namespace App\Http\Controllers\Web\Produktivitas;
class LahanController extends Controller
{
public function index(Request $request)
{
$lahan = Lahan::query()
->with(['petani', 'desa'])
->when($request->search, fn ($q, $s) => $q->where('nama', 'like', "%{$s}%"))
->latest()
->paginate(15)
->withQueryString();
return view('produktivitas.lahan.index', compact('lahan'));
}
public function create()
{
return view('produktivitas.lahan.create', ['lahan' => new Lahan()]);
}
public function store(StoreLahanRequest $request)
{
$lahan = Lahan::create($request->validated());
return redirect()->route('lahan.show', $lahan)
->with('success', 'Lahan berhasil ditambahkan.');
}
public function show(Lahan $lahan)
{
$lahan->load(['petani', 'tanaman']);
return view('produktivitas.lahan.show', compact('lahan'));
}
public function edit(Lahan $lahan)
{
return view('produktivitas.lahan.edit', compact('lahan'));
}
public function update(UpdateLahanRequest $request, Lahan $lahan)
{
$lahan->update($request->validated());
return redirect()->route('lahan.show', $lahan)
->with('success', 'Lahan berhasil diperbarui.');
}
public function destroy(Lahan $lahan)
{
DB::transaction(fn () => $lahan->delete());
return redirect()->route('lahan.index')
->with('success', 'Lahan berhasil dihapus.');
}
}
```
---
#### Pola C — Detail multi-tab
- Controller induk (mis. `PetaniController`) memakai Pola B.
- Setiap tab punya **controller sendiri** (`PetaniLahanController`, `PraktikBudidayaController`, …) yang tetap memakai nama method resmi.
- Tab dirangkai sebagai **nested shallow resource** di bawah induk.
- View: `header.blade.php` berisi kartu profil + navigasi tab; setiap tab punya subfolder.
- Tab selain Profil **terkunci** sampai profil induk lengkap. Logika penguncian ditaruh di satu tempat (method di model induk, mis. `$petani->profilLengkap()`), bukan diulang di tiap view.
```
resources/views/produktivitas/petani/
├── index.blade.php
├── create.blade.php
├── edit.blade.php
├── show.blade.php ← tab Profil
├── header.blade.php ← kartu profil + navigasi tab
├── _form.blade.php
├── lahan-tanaman/
│ ├── index.blade.php
│ └── ...
├── praktik-budidaya/
└── ...
```
```php
Route::resource('petani', PetaniController::class);
Route::resource('petani.praktik-budidaya', PraktikBudidayaController::class)->shallow();
```
### 3.4 Batas resource
- Jika modul tidak butuh semua aksi, batasi dengan `->only([...])` / `->except([...])`. Jangan biarkan route yang tidak punya method terdaftar.
- Method di luar 7 aksi resmi hanya boleh untuk: dropdown/list (`list`, `by{Induk}`), aksi status yang jelas (`verify`, `approve`), dan export (`export`). Daftarkan sebelum `Route::resource`.
---
## 4. Validasi
- Setiap `store` dan `update` memakai Form Request: `Store{Model}Request`, `Update{Model}Request`.
- Pesan dan atribut dalam Bahasa Indonesia (`messages()` / `attributes()`, atau file `lang/id/validation.php`).
- Form Request yang sama boleh dipakai controller Web dan API.
- Untuk Pola A, Form Request otomatis mengembalikan JSON 422 karena request AJAX mengirim header `Accept: application/json`. **Jangan** menangkap error validasi secara manual.
- **Unique wajib mengabaikan data yang sudah di-soft delete** (lihat 5.3).
```php
public function rules(): array
{
return [
'kode' => [
'required', 'string', 'max:10',
Rule::unique('provinsi', 'kode')
->ignore($this->route('provinsi'))
->withoutTrashed(),
],
'nama' => ['required', 'string', 'max:100'],
];
}
```
---
## 5. Model, migration, dan soft delete
### 5.1 Model
```php
class Lahan extends Model
{
use SoftDeletes;
protected $table = 'lahan';
protected $fillable = ['petani_id', 'desa_id', 'nama', 'luas'];
protected function casts(): array
{
return [
'luas' => 'decimal:2',
'status_milik' => StatusKepemilikan::class, // Enum
];
}
}
```
- Pakai `$fillable`, bukan `$guarded = []`.
- Pilihan tetap (jawaban survei, status) disimpan sebagai **PHP Enum** di `app/Enums/` dan di-cast di model. Jangan menulis daftar pilihan langsung di Blade.
- **Jejak aktivitas:** setiap model memakai trait `App\Models\Concerns\CatatAktivitas` (spatie/laravel-activitylog). Tambah/ubah/hapus otomatis tercatat di `activity_log` dan tampil di menu Konfigurasi > Log Aktivitas. Kolom audit, `$hidden`, file/foto, dan polygon (`path`) tidak dicatat. Jika domain model baru belum ada, tambahkan labelnya di `LogAktivitasController::JENIS`. Aksi bisnis yang bukan sekadar simpan model (verifikasi, ganti status) dicatat manual dengan `activity('nama_log')->performedOn($model)->log('...')`. Perubahan lewat query massal (`->update()` pada query builder) **tidak** tercatat.
### 5.2 Migration
Setiap tabel baru **wajib** memiliki:
```php
$table->id();
// ... kolom
$table->foreignId('created_by')->nullable()->constrained('users'); // ikuti kolom audit yang sudah ada
$table->foreignId('updated_by')->nullable()->constrained('users');
$table->timestamps();
$table->softDeletes();
$table->foreignId('deleted_by')->nullable()->constrained('users');
```
- Jangan mengubah migration yang sudah dijalankan di production; buat migration baru.
- **Jangan** memakai unique index di database untuk kolom pada tabel ber-soft delete (data terhapus akan menghalangi input ulang). Keunikan dijaga di Form Request.
### 5.3 Soft delete (aturan utama)
1. **Semua penghapusan adalah soft delete.** `forceDelete()` dilarang di kode aplikasi.
2. **`deleted_by` wajib terisi** dengan user yang menghapus. Gunakan mekanisme yang sudah ada di project (trait/observer). Jika belum ada, gunakan trait berikut dan pasang di semua model:
```php
namespace App\Models\Concerns;
trait HasDeletedBy
{
protected static function bootHasDeletedBy(): void
{
static::deleting(function ($model) {
if (! $model->isForceDeleting()) {
$model->deleted_by = auth()->id();
$model->saveQuietly();
}
});
}
}
```
3. **Hapus berantai (cascade soft delete).** Jika induk dihapus, **semua data anaknya ikut di-soft delete**, termasuk cucu dan seterusnya. Tulis di model induk:
```php
protected static function booted(): void
{
static::deleting(function (Petani $petani) {
if ($petani->isForceDeleting()) {
return;
}
// ->each->delete() memicu event per anak, sehingga deleted_by
// terisi dan cascade berlanjut ke cucu
$petani->lahan()->each->delete();
$petani->praktikBudidaya()->each->delete();
// ... semua relasi hasMany/hasOne milik petani
});
}
```
- **Jangan** memakai `$petani->lahan()->delete()` (query massal), karena tidak memicu event, sehingga `deleted_by` kosong dan cascade terputus.
- Setiap kali menambah relasi anak baru, **tambahkan juga** ke blok `deleting` induknya.
- Pemanggilan `delete()` di controller selalu dibungkus `DB::transaction()`.
- Relasi `belongsTo` ke data master (Provinsi, Komoditas, dll.) **bukan** anak dan tidak ikut terhapus.
4. **Restore** belum disediakan di aplikasi; dilakukan langsung di database oleh admin. Jangan membuat halaman sampah/restore tanpa diminta.
### 5.4 Global scope
- `KomoditasProgramScope` otomatis membatasi data ke komoditas milik program aktif (`SystemProgram`). Jika data "tidak muncul", periksa scope ini dulu.
- Melewati scope hanya dengan `withoutGlobalScope(KomoditasProgramScope::class)` secara eksplisit, dengan komentar alasannya.
- Jangan menambah global scope baru tanpa izin.
---
## 6. Routing
### 6.1 Route CRUD wajib memakai `Route::resource`
Semua modul CRUD (Pola A, B, C) **wajib** didaftarkan dengan `Route::resource`. **Dilarang** menulis route CRUD satu per satu secara manual.
```php
// ❌ SALAH — route CRUD manual
Route::get('provinsi', [ProvinsiController::class, 'index'])->name('provinsi.index');
Route::post('provinsi/store', [ProvinsiController::class, 'store'])->name('provinsi.store');
Route::get('provinsi/view/{id}', [ProvinsiController::class, 'view'])->name('provinsi.view');
Route::post('provinsi/update/{id}', [ProvinsiController::class, 'update'])->name('provinsi.update');
Route::get('provinsi/delete/{id}', [ProvinsiController::class, 'destroy'])->name('provinsi.destroy');
// ✅ BENAR
Route::resource('provinsi', ProvinsiController::class)->except(['create', 'edit']);
```
Aturan turunannya:
| Kebutuhan | Cara |
|---|---|
| Tidak semua aksi dipakai | `->only([...])` atau `->except([...])` |
| Pola A (offcanvas) | `->except(['create', 'edit'])` |
| Pola B (resource halaman) | `Route::resource(...)` penuh |
| Pola C (multi-tab) | Induk `Route::resource`, tab `Route::resource('induk.tab', ...)->shallow()` |
| Beberapa modul sekaligus | `Route::resources([...])` boleh dipakai dalam satu grup domain |
| Nama parameter tidak sesuai model | `->parameters(['jenis-komoditas' => 'jenisKomoditas'])` |
| Method tambahan (`list`, `by{Induk}`, `verify`, `export`) | `Route::get/post/patch` biasa, **ditulis sebelum** `Route::resource` modul yang sama |
- Form hapus/ubah memakai method spoofing Blade (`@method('DELETE')`, `@method('PUT')`), dan AJAX mengirim method HTTP yang sesuai. Jangan memakai `GET` untuk menghapus.
- **Pengecualian:** Dashboard dan Laporan tidak memakai `Route::resource` (lihat Bagian 11). Halaman tunggal seperti Profil akun boleh memakai `Route::singleton('profil', ...)` atau route manual `edit`/`update`.
### 6.2 Aturan routing lainnya
- Semua route web di `routes/web.php`, API di `routes/api.php`.
- Kelompokkan per domain dengan `Route::middleware(...)->group()` dan komentar judul domain.
- Nested resource memakai `->shallow()`. Maksimal **dua tingkat** di URL (`/framework/{framework}/transformasi`). Hierarki lebih dalam (Framework → Transformasi → Aktivitas → Target) dipecah menjadi beberapa nested shallow resource berpasangan.
- **Satu route hanya didaftarkan satu kali.** Sebelum menambah route, cari dulu apakah sudah ada (`php artisan route:list --name=...`).
- Setelah login: `enumerator` → Dashboard Survei Petani; `fasilitator` → Profil akun (belum ada menu khusus); role lain → Dashboard Karakteristik Petani. Jangan mengubah logika ini tanpa izin.
---
## 7. Blade & Vuexy
### 7.1 Layout
- Semua halaman admin: `@extends('layout.main')` dan mengisi `@section('content')`.
- Halaman auth memakai `auth/layout.blade.php`.
- Jangan membuat layout baru; jangan menyalin `<head>`/sidebar ke halaman.
### 7.2 File view per pola
| File | Pola | Isi |
|---|---|---|
| `index.blade.php` | A, B, C | Tabel, pencarian, pagination (+ offcanvas form untuk Pola A) |
| `create.blade.php` | B, C | Form tambah, `@include('..._form')` |
| `edit.blade.php` | B, C | Form ubah, `@include('..._form')` |
| `show.blade.php` | B, C | Detail |
| `_form.blade.php` | A, B, C | Field form bersama untuk tambah dan ubah |
| `header.blade.php` | C | Kartu profil + navigasi tab |
- File `add.blade.php` dan `view.blade.php` **tidak boleh** dibuat lagi (ganti dengan `create` dan `show`).
- `_form.blade.php` menerima model (kosong saat tambah) dan memakai `old('field', $model->field)`.
### 7.3 Tampilan error validasi
```blade
<input type="text" name="nama"
class="form-control @error('nama') is-invalid @enderror"
value="{{ old('nama', $lahan->nama) }}">
@error('nama')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
```
Untuk Pola A, JS menampilkan error dari respons 422 dengan class yang sama (`is-invalid` + `invalid-feedback`).
### 7.4 Komponen
- Elemen yang muncul di lebih dari dua halaman dijadikan Blade component di `resources/views/components/` (contoh yang ada: `summary-card`, `wilayah-card`, `wilayah-dashboard`).
- Utamakan komponen yang sudah ada sebelum membuat yang baru.
### 7.5 JavaScript & plugin
- JS halaman ditulis di **file terpisah per modul** (ikuti lokasi JS yang sudah dipakai project), dimuat lewat section/stack script di layout. Hindari blok `<script>` panjang di Blade.
- Semua request AJAX mengirim header `X-CSRF-TOKEN` dan `Accept: application/json`.
- URL di JS diambil dari `route()` yang dicetak Blade (mis. atribut `data-url`), **bukan** di-hardcode.
- Pakai plugin yang sudah tersedia di template Vuexy. Jangan menambah library baru tanpa izin. Pembagian peran:
| Kebutuhan | Plugin |
|---|---|
| Konfirmasi hapus | SweetAlert2 (jika terpasang) |
| Notifikasi sukses/gagal | Sesuai yang dipakai modul lain |
| Select dengan pencarian / dropdown berantai | Select2 (jika terpasang) |
| Input tanggal | Flatpickr (jika terpasang) |
| Grafik | ApexCharts |
| Peta | Leaflet |
| Ikon | Tabler Icons (`ti ti-*`) |
---
## 8. Respons & pesan
### 8.1 Web (Pola B/C)
```php
return redirect()->route('lahan.index')->with('success', 'Lahan berhasil dihapus.');
return back()->withInput()->with('error', 'Data gagal disimpan.');
```
Kunci flash: `success`, `error`, `warning`, `info`.
### 8.2 JSON (Pola A dan AJAX web)
```json
{ "success": true, "message": "Provinsi berhasil ditambahkan.", "data": { } }
```
- Error validasi: format 422 bawaan Laravel (`message` + `errors`).
- Error lain: `{ "success": false, "message": "..." }` dengan kode HTTP yang sesuai.
### 8.3 Pola kalimat pesan
`{Nama data} berhasil ditambahkan.` / `diperbarui.` / `dihapus.`
---
## 9. Otorisasi
- Hak akses berdasarkan role pada `Role` yang sudah ada. Ikuti mekanisme pembatasan role yang sudah dipakai (middleware/policy/gate yang ada); jangan membuat sistem permission baru.
- Penginput data petani adalah role `enumerator` (bukan `fasilitator`). `fasilitator` khusus pemateri workshop.
- Semua route `petani/...` dibungkus middleware `akses.petani` (`BatasiAksesPetani`): hanya `super_admin`, `admin`, `koordinator`, `enumerator`; koordinator hanya boleh mengakses petani dengan komoditas utama yang ditugaskan (`koordinator_komoditas`, cek lewat `User::bolehAksesPetani()`). Route tab petani baru wajib diletakkan di dalam grup ini.
- Menu sidebar hanya menampilkan item yang boleh diakses role pengguna, dan route-nya juga dilindungi di sisi server. Menyembunyikan menu saja tidak cukup.
---
## 10. API (`app/Http/Controllers/Api/`)
- API dipakai aplikasi mobile/lapangan. **Kontrak API (URL, nama field, format respons) tidak boleh diubah** tanpa izin eksplisit, termasuk saat refaktor.
- Endpoint baru mengikuti pola dan format respons API yang sudah ada di folder `Api/`.
- Auth memakai Sanctum; login dibatasi rate limit (5/menit). Jangan longgarkan.
- Setiap endpoint baru harus terbaca rapi di dokumentasi Scramble (type-hint Form Request dan tipe return yang jelas).
---
## 11. Pengecualian
### 11.0 Prinsip umum Dashboard & Laporan
Dashboard dan laporan **bersifat baca (read-only)** dan bentuknya beragam, sehingga controller-nya **fleksibel**:
- **Nama method bebas**, asalkan deskriptif dan camelCase (`index`, `chartProduktivitas`, `petaSebaran`, `rekapPerDesa`, `exportExcel`).
- Boleh satu controller dengan banyak method, atau controller satu aksi (`__invoke`) jika halamannya sederhana.
- Route ditulis manual (`Route::get(...)`), **tidak** memakai `Route::resource`.
- Tidak ada `create/store/edit/update/destroy`. Jika sebuah dashboard butuh input data, input itu dibuat sebagai modul CRUD terpisah.
Yang **tetap berlaku** walau fleksibel:
- Lokasi folder per domain (Bagian 2), penamaan route kebab-case dengan prefix (`dashboard.*`, `laporan.*`).
- Validasi filter memakai Form Request jika filternya lebih dari 2–3 parameter.
- Query sederhana boleh di controller. Query agregat yang panjang, berat, atau dipakai di lebih dari satu tempat dipindah ke `app/Services/{Dashboard|Laporan}/`.
- Data yang ditampilkan tetap menghormati soft delete (data terhapus tidak ikut dihitung) dan global scope program.
- Pembatasan akses per role (Bagian 9).
### 11.1 Dashboard
- Controller: `app/Http/Controllers/Web/Dashboard/{Nama}Controller.php`.
- Pola yang disarankan: `index` mengembalikan halaman; data grafik/peta yang dimuat via AJAX memakai method bernama jelas yang mengembalikan JSON.
- Filter umum diterima lewat query string: program, wilayah (provinsi → desa), periode.
- Query berat di-cache (`Cache::remember`) dengan kunci yang memuat nilai filter.
- View: satu file per dashboard di `resources/views/dashboard/`. Grafik ApexCharts, peta Leaflet.
- Data eksternal (AlphaVantage di `InternationalMarketController`) wajib di-cache dan punya penanganan gagal (tampilkan pesan, jangan error 500).
```php
// routes/web.php
Route::prefix('dashboard')->name('dashboard.')->group(function () {
Route::get('produktivitas', [ProduktivitasController::class, 'index'])->name('produktivitas');
Route::get('produktivitas/chart-panen', [ProduktivitasController::class, 'chartPanen'])
->name('produktivitas.chart-panen');
});
```
### 11.2 Laporan / reporting
- Controller: `app/Http/Controllers/Web/Laporan/{Nama}Controller.php`; view di `resources/views/laporan/{nama}/`.
- Pola yang disarankan per laporan: halaman filter + pratinjau (`index`), lalu method export per format (`exportExcel`, `exportPdf`). Semua menerima **filter yang sama** dengan pratinjau.
- Export kecil yang menempel pada satu modul CRUD atau dashboard boleh berupa method `export` di controller modul tersebut.
- Laporan yang lambat (data besar) boleh diproses di queue, lalu file diunduh setelah siap.
- Gunakan package export yang sudah terpasang di project. Jika belum ada, tanyakan dulu.
```php
Route::prefix('laporan')->name('laporan.')->group(function () {
Route::get('rekap-panen', [RekapPanenController::class, 'index'])->name('rekap-panen');
Route::get('rekap-panen/excel', [RekapPanenController::class, 'exportExcel'])->name('rekap-panen.excel');
Route::get('rekap-panen/pdf', [RekapPanenController::class, 'exportPdf'])->name('rekap-panen.pdf');
});
```
### 11.3 Ekosistem (form builder dinamis)
- Modul `Ekosistem/` (Group, Tabel, Kolom, Formulir, Ringkasan, Value) memiliki struktur dinamis dan **dikecualikan** dari pola CRUD standar.
- Jangan direfaktor ke pola standar kecuali diminta secara eksplisit. Perubahan kecil tetap mengikuti aturan validasi, soft delete, dan kebersihan.
---
## 12. Kebersihan repo
- **Dilarang** menyimpan file salinan/cadangan: `* copy.php`, `*Backup*`, `*01.php`, `*_old*`, dll. Riwayat disimpan di Git.
- Tidak ada kode yang dikomentari dalam jumlah besar ("kode mati"); hapus saja.
- Tidak ada route ganda (lihat Bagian 6).
- Satu commit = satu perubahan logis (satu modul/fitur). Pesan commit Bahasa Indonesia, singkat, diawali jenis: `feat:`, `fix:`, `refactor:`, `chore:`.
Masalah kebersihan yang **sudah diketahui** (selesaikan saat menyentuh area terkait):
- File duplikat/backup: `* copy.php`, `IndikatorPertanianBackupController`, `PanenController01`, `SummaryDashboardController copy.php`, file `composerlock` yang tidak semestinya.
- Route ganda: `users` (resource + manual), `users.verify` (dua kali), `jenis-komoditas.by-komoditas`, `varietas.by-jenis-komoditas`.
---
## 13. Prosedur refaktor modul lama
Modul lama **wajib** disesuaikan dengan standar ini secara bertahap.
### 13.1 Aturan
1. **Satu modul per sesi/commit.** Jangan merefaktor beberapa modul sekaligus.
2. Jangan merefaktor modul yang sedang dikerjakan (ada perubahan belum di-commit) tanpa konfirmasi.
3. API **tidak** ikut diubah (Bagian 10).
4. Perilaku untuk pengguna harus tetap sama; refaktor bukan tempat menambah fitur.
### 13.2 Langkah
1. Simpan daftar route modul: `php artisan route:list --name={modul} > /tmp/before.txt`.
2. Tentukan pola target (A/B/C) sesuai 3.3.
3. Cari **semua** pemakaian nama route, URL, dan view lama di seluruh repo (Blade, JS, controller lain, sidebar), mis. `grep -rn "provinsi.view\|provinsi/add\|master.provinsi.add" app resources routes`.
4. Ubah:
- method `add` → `create`, `view` → `show`;
- file `add.blade.php` → `create.blade.php`, `view.blade.php` → `show.blade.php`;
- route manual → `Route::resource` (+ `only/except`, route tambahan di atasnya);
- validasi inline → Form Request (dengan `withoutTrashed()` pada unique);
- pastikan model memakai `SoftDeletes`, `deleted_by` terisi, dan cascade ke anak sudah ditulis;
- semua referensi yang ditemukan di langkah 3.
5. Bandingkan `route:list` sesudah dengan `/tmp/before.txt`; pastikan tidak ada route yang hilang tanpa sengaja.
6. Uji manual alur lengkap: index → tambah → detail → ubah → hapus (cek `deleted_at`, `deleted_by`, dan data anak).
7. Perbarui tabel status di 13.3.
### 13.3 Status migrasi modul
Status: `Belum` / `Proses` / `Selesai` / `Dikecualikan`
| Domain | Modul | Pola target | Status | Catatan |
|---|---|---|---|---|
| Master | Provinsi | A | Belum | Ada `list` + dropdown berantai |
| Master | Kabupaten/Kota | A | Belum | `by-provinsi` |
| Master | Kecamatan | A | Belum | `by-kabupaten` |
| Master | Desa/Kelurahan | A | Belum | `by-kecamatan` |
| Master | Komoditas | A | Belum | |
| Master | Jenis Komoditas | A | Belum | Route `by-komoditas` dobel |
| Master | Varietas | A | Belum | Route `by-jenis-komoditas` dobel |
| Master | Adat | A | Belum | |
| Master | Keluarga | ? | Belum | Tentukan pola saat refaktor |
| Produktivitas | Petani (+ semua tab) | C | Belum | |
| Produktivitas | Lahan | B | Belum | |
| Produktivitas | Tanaman | B | Belum | |
| Produktivitas | MapTanaman | ? | Belum | |
| Produktivitas | Produksi | B | Belum | |
| Produktivitas | Survey Kelompok Tani (+ tab) | C | Proses | Daftar: Form Request filter, service query, dan JS terpisah; ringkasan profil disiapkan service; form/tab lama belum direfaktor |
| Produktivitas | Sebaran Petani | ? | Belum | Sedang dikerjakan, konfirmasi dulu |
| Program | Program, Program Komoditas, Program Lokasi | B | Belum | Pindah dari root ke `Program/` |
| Program | Framework → Transformasi → Aktivitas → Target | B | Belum | Nested shallow |
| Program | Realisasi | B | Belum | |
| Program | Verifikasi | ? | Belum | Sedang dikerjakan, konfirmasi dulu |
| 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 | |
| Konfigurasi | User | B | Belum | Route `users` & `users.verify` dobel |
| Konfigurasi | Profil akun | — | Belum | Hanya `edit`/`update` |
| Ekosistem | Semua | — | Dikecualikan | Lihat 11.3 |
| Dashboard | Semua | — | Dikecualikan | Ikuti 11.1 |
---
## 14. Checklist modul baru
- [ ] Pola ditentukan (A/B/C) sesuai 3.3
- [ ] Migration: `id`, kolom audit, `timestamps`, `softDeletes`, `deleted_by`; tanpa unique index
- [ ] Model: `$table` eksplisit, `$fillable`, `SoftDeletes`, `deleted_by` terisi, casts/Enum, trait `CatatAktivitas`
- [ ] Relasi anak ditambahkan ke cascade `deleting` di model induk
- [ ] Form Request `Store`/`Update` dengan pesan Bahasa Indonesia dan unique `withoutTrashed()`
- [ ] Controller di `Web/{Domain}/` dengan nama method resmi saja
- [ ] Route: `Route::resource` (+ `only/except`, `shallow`), tidak dobel, route tambahan di atas resource
- [ ] View di `{domain}/{modul}/`: `index`, `create`, `edit`, `show`, `_form` sesuai pola
- [ ] JS di file terpisah, URL dari `route()`, CSRF terpasang
- [ ] Menu sidebar ditambahkan dan dibatasi per role; route dilindungi di server
- [ ] Respons/flash mengikuti Bagian 8
- [ ] Diuji manual: tambah, ubah, detail, hapus (cek `deleted_at`, `deleted_by`, data anak)
- [ ] Tidak ada file salinan/backup tertinggal
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\AksesPasar;
enum PraktikFermentasi: string
{
case RUTIN_SENDIRI = 'Ya, rutin — dilakukan sendiri/individual';
case RUTIN_KELOMPOK = 'Ya, rutin — bersama kelompok tani/kolektif';
case PERNAH_SENDIRI = 'Pernah mencoba — sendiri';
case PERNAH_KELOMPOK = 'Pernah mencoba — bersama kelompok';
case BELUM_PERNAH = 'Belum pernah';
public static function options(): array
{
return [
['value' => self::RUTIN_SENDIRI->value, 'label' => 'Ya, rutin — dilakukan sendiri/individual'],
['value' => self::RUTIN_KELOMPOK->value, 'label' => 'Ya, rutin — bersama kelompok tani/kolektif'],
['value' => self::PERNAH_SENDIRI->value, 'label' => 'Pernah mencoba — sendiri'],
['value' => self::PERNAH_KELOMPOK->value, 'label' => 'Pernah mencoba — bersama kelompok'],
['value' => self::BELUM_PERNAH->value, 'label' => 'Belum pernah'],
];
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\AksesPasar;
enum SaluranTerdahulu: string
{
case TENGKULAK = 'Tengkulak–pedagang lokal';
case KOPERASI = 'Koperasi';
case BUMDES = 'BUMDes';
case LANGSUNG_PEMBELI = 'Langsung ke pembeli–eksportir';
case LAINNYA = 'Lainnya';
public static function options(): array
{
return [
['value' => self::TENGKULAK->value, 'label' => 'Tengkulak–pedagang lokal'],
['value' => self::KOPERASI->value, 'label' => 'Koperasi'],
['value' => self::BUMDES->value, 'label' => 'BUMDes'],
['value' => self::LANGSUNG_PEMBELI->value, 'label' => 'Langsung ke pembeli–eksportir'],
['value' => self::LAINNYA->value, 'label' => 'Lainnya'],
];
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\AksesPasar;
enum SkorKesadaranPremium: int
{
case BELUM_PERNAH_DENGAR = 1;
case PERNAH_BELUM_PAHAM = 2;
case PERNAH_SEDIKIT_PAHAM = 3;
case SANGAT_PAHAM_BELUM_AKSES = 4;
case SUDAH_AKSES_KONSISTEN = 5;
public static function options(): array
{
return [
['value' => self::BELUM_PERNAH_DENGAR->value, 'label' => 'Belum pernah dengar'],
['value' => self::PERNAH_BELUM_PAHAM->value, 'label' => 'Pernah dengar tapi belum paham syarat'],
['value' => self::PERNAH_SEDIKIT_PAHAM->value, 'label' => 'Pernah dengar & sedikit paham syarat'],
['value' => self::SANGAT_PAHAM_BELUM_AKSES->value, 'label' => 'Sangat paham syarat tapi belum pernah akses'],
['value' => self::SUDAH_AKSES_KONSISTEN->value, 'label' => 'Sudah akses & dapat harga premium konsisten'],
];
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\AksesPasar;
enum SkorPengalaman: int
{
case BELUM_PERNAH = 1;
case PERNAH_BERHENTI_TIDAK_ADA_AKSES = 2;
case PERNAH_BERHENTI_MUNGKIN_KEMBALI = 3;
case PERNAH_SESEKALI_JUAL = 4;
case PERNAH_MASIH_AKTIF = 5;
public static function options(): array
{
return [
['value' => self::BELUM_PERNAH->value, 'label' => 'Belum pernah coba saluran lain'],
['value' => self::PERNAH_BERHENTI_TIDAK_ADA_AKSES->value, 'label' => 'Pernah, sudah berhenti & tidak ada akses'],
['value' => self::PERNAH_BERHENTI_MUNGKIN_KEMBALI->value, 'label' => 'Pernah, berhenti tapi masih mungkin kembali'],
['value' => self::PERNAH_SESEKALI_JUAL->value, 'label' => 'Pernah & sesekali masih jual ke sana'],
['value' => self::PERNAH_MASIH_AKTIF->value, 'label' => 'Pernah & masih punya akses aktif'],
];
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\AksesPasar;
enum TingkatKepercayaanPembeli: int
{
case SANGAT_PERCAYA = 1;
case CUKUP_PERCAYA = 2;
case RAGU_RAGU = 3;
case TIDAK_PERCAYA = 4;
public static function options(): array
{
return [
['value' => self::SANGAT_PERCAYA->value, 'label' => 'Sangat percaya, berani langsung coba'],
['value' => self::CUKUP_PERCAYA->value, 'label' => 'Cukup percaya, tapi hati hati'],
['value' => self::RAGU_RAGU->value, 'label' => 'Ragu ragu'],
['value' => self::TIDAK_PERCAYA->value, 'label' => 'Tidak percaya, enggan mencoba'],
];
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
+30
View File
@@ -0,0 +1,30 @@
<?php
namespace App\Enums\Bumdes;
enum AsetProduktifBumdes: string
{
case BANGUNAN_KANTOR = 'bangunan_kantor';
case GUDANG_PENYIMPANAN = 'gudang_penyimpanan';
case KENDARAAN_OPERASIONAL_ANGKUT = 'kendaraan_operasional_angkut';
case LAHAN_USAHA = 'lahan_usaha';
case ALAT_PENGOLAHAN_KOMODITAS = 'alat_pengolahan_komoditas';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::BANGUNAN_KANTOR => 'Bangunan / kantor',
self::GUDANG_PENYIMPANAN => 'Gudang penyimpanan',
self::KENDARAAN_OPERASIONAL_ANGKUT => 'Kendaraan operasional/angkut',
self::LAHAN_USAHA => 'Lahan usaha',
self::ALAT_PENGOLAHAN_KOMODITAS => 'Alat pengolahan komoditas',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum BentukProdukBumdes: string
{
case BUAH_SEGAR = 'buah_segar';
case BIJI_BASAH = 'biji_basah';
case BIJI_KERING = 'biji_kering';
case TERFERMENTASI = 'terfermentasi';
public function label(): string
{
return match ($this) {
self::BUAH_SEGAR => 'Buah segar hasil petik',
self::BIJI_BASAH => 'Biji basah',
self::BIJI_KERING => 'Biji kering/biji kupas',
self::TERFERMENTASI => 'Terfermentasi',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+22
View File
@@ -0,0 +1,22 @@
<?php
namespace App\Enums\Bumdes;
enum CakupanLayananBumdes: string
{
case DESA_SENDIRI = 'desa_sendiri';
case DESA_LAIN = 'desa_sendiri_dan_lain';
public function label(): string
{
return match ($this) {
self::DESA_SENDIRI => 'Hanya melayani desa sendiri',
self::DESA_LAIN => 'Melayani desa sendiri dan desa lain',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\Bumdes;
enum DukunganDesaBumdes: string
{
case PENDAMPINGAN_TEKNIS = 'pendampingan_teknis';
case REGULASI_PERDES = 'regulasi_perdes';
case FASILITASI_JEJARING = 'fasilitasi_jejaring';
case TIDAK_ADA = 'tidak_ada';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::PENDAMPINGAN_TEKNIS => 'Pendampingan teknis',
self::REGULASI_PERDES => 'Regulasi/Perdes pendukung',
self::FASILITASI_JEJARING => 'Fasilitasi jejaring/kemitraan',
self::TIDAK_ADA => 'Tidak ada dukungan khusus',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum FormatPembukuanBumdes: string
{
case MANUAL = 'manual';
case DIGITAL_EXCEL = 'digital_excel';
case APLIKASI = 'aplikasi';
case TIDAK_ADA = 'tidak_ada';
public function label(): string
{
return match ($this) {
self::MANUAL => 'Manual/buku kas',
self::DIGITAL_EXCEL => 'Digital/file Excel',
self::APLIKASI => 'Aplikasi keuangan khusus',
self::TIDAK_ADA => 'Tidak ada',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Enums\Bumdes;
enum HambatanUsahaBumdes: string
{
case MODAL = 'modal';
case SDM = 'sdm';
case INFRASTRUKTUR = 'infrastruktur';
case PASOKAN = 'pasokan';
case PERSAINGAN = 'persaingan';
case AKSES_PASAR = 'akses_pasar';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::MODAL => 'Keterbatasan modal',
self::SDM => 'Keterbatasan SDM/kapasitas pengurus',
self::INFRASTRUKTUR => 'Keterbatasan infrastruktur/alat',
self::PASOKAN => 'Kesulitan mendapat pasokan konsisten dari produsen',
self::PERSAINGAN => 'Persaingan dengan tengkulak/pedagang',
self::AKSES_PASAR => 'Belum ada akses ke offtaker/pasar premium',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Enums\Bumdes;
enum HubunganPemasokBumdes: string
{
case BEBAS = 'bebas';
case LANGGANAN = 'langganan';
case PINJAMAN = 'pinjaman';
case KONSINYASI = 'konsinyasi';
case KOMITMEN_VOLUME = 'komitmen_volume';
case SEMI_KONTRAK = 'semi_kontrak';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::BEBAS => 'Bebas/tidak terikat: petani bebas menjual ke BUMDes atau pihak lain kapan saja, tanpa ikatan apa pun',
self::LANGGANAN => 'Langganan tetap: petani rutin menjual ke BUMDes tanpa perjanjian formal',
self::PINJAMAN => 'Berbasis hutang/pinjaman: petani menjual ke BUMDes karena memiliki pinjaman kepada BUMDes',
self::KONSINYASI => 'Titip jual (konsinyasi): petani dibayar setelah hasil panen terjual',
self::KOMITMEN_VOLUME => 'Ada komitmen volume: kesepakatan volume tertentu yang dipenuhi secara berkala',
self::SEMI_KONTRAK => 'Semi-kontrak: kesepakatan tertulis/lisan mengenai harga, volume, dan waktu penyerahan',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Enums\Bumdes;
enum InfrastrukturPascapanenBumdes: string
{
case GUDANG_PENYIMPANAN_HASIL_PANEN = 'gudang_penyimpanan_hasil_panen';
case ALAT_MESIN_PENGERING = 'alat_mesin_pengering';
case MESIN_PULPER_HULLER = 'mesin_pulper_huller';
case TIMBANGAN = 'timbangan';
case ALAT_SORTASI = 'alat_sortasi';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::GUDANG_PENYIMPANAN_HASIL_PANEN => 'Gudang penyimpanan hasil panen',
self::ALAT_MESIN_PENGERING => 'Alat/mesin pengering',
self::MESIN_PULPER_HULLER => 'Mesin pulper/huller',
self::TIMBANGAN => 'Timbangan',
self::ALAT_SORTASI => 'Alat sortasi',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+46
View File
@@ -0,0 +1,46 @@
<?php
namespace App\Enums\Bumdes;
enum JabatanBumdes: string
{
case DIREKTUR = 'direktur';
case DIREKTUR_KETUA = 'direktur_ketua';
case SEKRETARIS = 'sekretaris';
case BENDAHARA = 'bendahara';
case KEPALA_UNIT_USAHA = 'kepala_unit_usaha';
case PENGAWAS = 'pengawas';
case PENASIHAT = 'penasihat';
case ANGGOTA = 'anggota';
case STAF_OPERASIONAL = 'staf_operasional';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::DIREKTUR => 'Direktur/Ketua',
self::DIREKTUR_KETUA => 'Direktur/Ketua',
self::SEKRETARIS => 'Sekretaris',
self::BENDAHARA => 'Bendahara',
self::KEPALA_UNIT_USAHA => 'Kepala Unit Usaha',
self::PENGAWAS => 'Pengawas',
self::PENASIHAT => 'Penasihat',
self::ANGGOTA => 'Anggota',
self::STAF_OPERASIONAL => 'Staf Operasional',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect([
self::DIREKTUR_KETUA,
self::SEKRETARIS,
self::BENDAHARA,
self::LAINNYA,
])->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Enums\Bumdes;
enum JabatanPengurusIntiBumdes: string
{
case PENASIHAT_KEPALA_DESA = 'penasihat_kepala_desa';
case KETUA_PENGAWAS = 'ketua_pengawas';
case DIREKTUR_KETUA_BUMDES = 'direktur_ketua_bumdes';
case SEKRETARIS = 'sekretaris';
case BENDAHARA = 'bendahara';
case KEPALA_UNIT_USAHA_KOMODITAS = 'kepala_unit_usaha_komoditas';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::PENASIHAT_KEPALA_DESA => 'Penasihat (Kepala Desa)',
self::KETUA_PENGAWAS => 'Ketua Pengawas',
self::DIREKTUR_KETUA_BUMDES => 'Direktur/Ketua BUMDes',
self::SEKRETARIS => 'Sekretaris',
self::BENDAHARA => 'Bendahara',
self::KEPALA_UNIT_USAHA_KOMODITAS => 'Kepala Unit Usaha Komoditas',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Enums\Bumdes;
enum KemitraanEksternalBumdes: string
{
case NGO = 'ngo';
case PEMERINTAH_KABUPATEN = 'pemerintah_kabupaten';
case SWASTA_OFFTAKER = 'swasta_offtaker';
case PROGRAM_PEMERINTAH_LAIN = 'program_pemerintah_lain';
case BELUM_ADA = 'belum_ada';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::NGO => 'NGO/lembaga pemberdayaan',
self::PEMERINTAH_KABUPATEN => 'Dinas/pemerintah kabupaten',
self::SWASTA_OFFTAKER => 'Perusahaan swasta/offtaker',
self::PROGRAM_PEMERINTAH_LAIN => 'Program pemerintah lain',
self::BELUM_ADA => 'Belum ada kemitraan eksternal',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum KeterlibatanKoordinasiBumdes: string
{
case SELALU = 'selalu';
case KADANG = 'kadang';
case TIDAK_PERNAH = 'tidak_pernah';
public function label(): string
{
return match ($this) {
self::SELALU => 'Selalu dilibatkan',
self::KADANG => 'Kadang dilibatkan',
self::TIDAK_PERNAH => 'Tidak pernah dilibatkan',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Enums\Bumdes;
enum KondisiAsetProduktifBumdes: string
{
case BERFUNGSI = 'berfungsi';
case PERLU_PERBAIKAN = 'perlu_perbaikan_evaluasi';
case RUSAK = 'rusak_tidak_bisa_dipakai';
case MANGKRAK = 'mangkrak';
public function label(): string
{
return match ($this) {
self::BERFUNGSI => 'Berfungsi',
self::PERLU_PERBAIKAN => 'Perlu perbaikan/evaluasi',
self::RUSAK => 'Rusak/tidak bisa dipakai',
self::MANGKRAK => 'Mangkrak',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
public static function normalizeLegacy(mixed $value): ?string
{
if (! is_scalar($value) || trim((string) $value) === '') {
return null;
}
$value = trim((string) $value);
return match (mb_strtolower($value)) {
'baik', 'berfungsi', 'baik dan berfungsi', 'baik_berfungsi' => self::BERFUNGSI->value,
'rusak ringan', 'perlu perbaikan', 'perlu perbaikan/evaluasi' => self::PERLU_PERBAIKAN->value,
'rusak', 'rusak/tidak terpakai', 'rusak_tidak_terpakai', 'rusak/tidak bisa dipakai' => self::RUSAK->value,
'mangkrak' => self::MANGKRAK->value,
default => $value,
};
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Enums\Bumdes;
enum KondisiInfrastrukturBumdes: string
{
case BAIK_BERFUNGSI = 'baik_berfungsi';
case RUSAK_TIDAK_TERPAKAI = 'rusak_tidak_terpakai';
public function label(): string
{
return match ($this) {
self::BAIK_BERFUNGSI => 'Baik dan berfungsi',
self::RUSAK_TIDAK_TERPAKAI => 'Rusak/tidak terpakai',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum KondisiKeuanganBumdes: string
{
case UNTUNG_SURPLUS = 'untung_surplus';
case IMPAS = 'impas';
case RUGI_DEFISIT = 'rugi_defisit';
case TIDAK_MENJAWAB = 'tidak_menjawab';
public function label(): string
{
return match ($this) {
self::UNTUNG_SURPLUS => 'Untung/surplus',
self::IMPAS => 'Impas',
self::RUGI_DEFISIT => 'Rugi/defisit',
self::TIDAK_MENJAWAB => 'Tidak tahu/tidak mau menjawab',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum KontribusiPadesBumdes: string
{
case RUTIN = 'rutin';
case TIDAK_RUTIN = 'tidak_rutin';
case BELUM_PERNAH = 'belum_pernah';
public function label(): string
{
return match ($this) {
self::RUTIN => 'Ya, rutin',
self::TIDAK_RUTIN => 'Ya, tapi tidak rutin',
self::BELUM_PERNAH => 'Belum pernah',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+34
View File
@@ -0,0 +1,34 @@
<?php
namespace App\Enums\Bumdes;
enum LayananPetaniBumdes: string
{
case SIMPAN_PINJAM = 'simpan_pinjam';
case PENGADAAN_INPUT = 'pengadaan_input';
case PEMASARAN_PANEN = 'pemasaran_panen';
case PENYEWAAN_ALAT = 'penyewaan_alat';
case JASA_PENGOLAHAN = 'jasa_pengolahan';
case PELATIHAN = 'pelatihan';
case BELUM_ADA = 'belum_ada';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::SIMPAN_PINJAM => 'Simpan pinjam',
self::PENGADAAN_INPUT => 'Pengadaan input (pupuk, bibit, dll)',
self::PEMASARAN_PANEN => 'Pembelian/pemasaran hasil panen',
self::PENYEWAAN_ALAT => 'Penyewaan alat pengolahan',
self::JASA_PENGOLAHAN => 'Jasa pengolahan/fermentasi',
self::PELATIHAN => 'Pelatihan/pendampingan',
self::BELUM_ADA => 'Belum ada layanan terkait komoditas ini',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\Bumdes;
enum MekanismePembayaranBumdes: string
{
case TUNAI = 'tunai';
case TEMPO = 'tempo';
case CAMPURAN = 'campuran';
case IJON = 'ijon';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::TUNAI => 'Tunai langsung',
self::TEMPO => 'Sistem tempo/dibayar kemudian',
self::CAMPURAN => 'Campuran, tergantung situasi',
self::IJON => 'BUMDes membayar di muka sebelum panen, sebagai bagian dari ikatan pinjaman kepada petani (ijon)',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum ModelFermentasiBumdes: string
{
case INDIVIDUAL = 'individual';
case KOLEKTIF_KELOMPOK = 'kolektif_kelompok';
case UNIT_BUMDES = 'unit_bumdes';
case CAMPURAN = 'campuran';
public function label(): string
{
return match ($this) {
self::INDIVIDUAL => 'Individual (masing-masing petani)',
self::KOLEKTIF_KELOMPOK => 'Kolektif kelompok tani',
self::UNIT_BUMDES => 'Unit pengolah BUMDes/desa',
self::CAMPURAN => 'Campuran',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum PencatatanPetaniBumdes: string
{
case RAPI = 'rapi';
case TIDAK_RAPI = 'tidak_rapi';
case TIDAK_ADA = 'tidak_ada';
public function label(): string
{
return match ($this) {
self::RAPI => 'Ada, tercatat rapi',
self::TIDAK_RAPI => 'Ada tapi tidak rapi',
self::TIDAK_ADA => 'Tidak ada pencatatan',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum PenetapanHargaBeliBumdes: string
{
case PASAR_SETEMPAT = 'pasar_setempat';
case KALKULASI_BIAYA = 'kalkulasi_biaya';
case HARGA_MITRA = 'harga_mitra';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::PASAR_SETEMPAT => 'Mengikuti harga pasar/tengkulak setempat',
self::KALKULASI_BIAYA => 'Ditetapkan sendiri berdasarkan kalkulasi biaya',
self::HARGA_MITRA => 'Mengikuti harga dari offtaker/mitra',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum PengalamanOfftakerBumdes: string
{
case BERJALAN = 'berjalan';
case BERHENTI = 'berhenti';
case BELUM_PERNAH = 'belum_pernah';
public function label(): string
{
return match ($this) {
self::BERJALAN => 'Sedang berjalan',
self::BERHENTI => 'Pernah, tapi sudah berhenti',
self::BELUM_PERNAH => 'Belum pernah',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum PeranRantaiNilaiBumdes: string
{
case MEMBELI_LANGSUNG = 'membeli_langsung';
case PERANTARA = 'perantara';
case MENGOLAH_SENDIRI = 'mengolah_sendiri';
case BELUM_BERPERAN = 'belum_berperan';
public function label(): string
{
return match ($this) {
self::MEMBELI_LANGSUNG => 'Membeli langsung dari petani',
self::PERANTARA => 'Menjadi perantara/mengumpulkan untuk dijual ke pihak lain',
self::MENGOLAH_SENDIRI => 'Mengolah sendiri (sortasi/fermentasi/dll) sebelum dijual',
self::BELUM_BERPERAN => 'Belum berperan dalam rantai nilai komoditas ini',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum PeriodePanenBumdes: string
{
case TERAKHIR = 'panen_terakhir';
case TAHUN_LALU = 'tahun_lalu';
case DUA_TAHUN_LALU = 'dua_tahun_lalu';
public function label(): string
{
return match ($this) {
self::TERAKHIR => 'Panen Terakhir',
self::TAHUN_LALU => 'Tahun Lalu',
self::DUA_TAHUN_LALU => 'Dua Tahun Lalu',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum PerjanjianPetaniBumdes: 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 saja',
self::TIDAK_ADA => 'Tidak ada perjanjian',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum PertanggungjawabanMusdesBumdes: string
{
case TAHUNAN = 'tahunan';
case TIDAK_RUTIN = 'tidak_rutin';
case BELUM_PERNAH = 'belum_pernah';
public function label(): string
{
return match ($this) {
self::TAHUNAN => 'Ya, setiap tahun',
self::TIDAK_RUTIN => 'Tidak rutin',
self::BELUM_PERNAH => 'Belum pernah',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Enums\Bumdes;
enum SaluranPenjualanBumdes: string
{
case OFFTAKER_EKSPORTIR = 'offtaker_eksportir';
case PEDAGANG_KABUPATEN = 'pedagang_kabupaten';
case KOPERASI_BUMDES = 'koperasi_bumdes';
case PASAR_LOKAL = 'pasar_lokal';
case BELUM_MENJUAL = 'belum_menjual';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::OFFTAKER_EKSPORTIR => 'Offtaker/eksportir langsung',
self::PEDAGANG_KABUPATEN => 'Pedagang besar/pengepul kabupaten',
self::KOPERASI_BUMDES => 'Koperasi atau BUMDes lain',
self::PASAR_LOKAL => 'Dijual eceran/pasar lokal',
self::BELUM_MENJUAL => 'Belum pernah menjual (masih disimpan/diproses)',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+22
View File
@@ -0,0 +1,22 @@
<?php
namespace App\Enums\Bumdes;
enum SifatAuditBumdes: string
{
case INTERNAL = 'internal';
case EKSTERNAL = 'eksternal';
public function label(): string
{
return match ($this) {
self::INTERNAL => 'Internal (pengurus/pengawas BUMDes sendiri)',
self::EKSTERNAL => 'Eksternal (Inspektorat, Dinas PMD, akuntan publik/auditor independen)',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum StatusAdArtBumdes: string
{
case ADA_LENGKAP = 'ada_lengkap';
case ADA_TIDAK_LENGKAP = 'ada_tidak_lengkap';
case TIDAK_ADA = 'tidak_ada';
case TIDAK_TAHU = 'tidak_tahu';
public function label(): string
{
return match ($this) {
self::ADA_LENGKAP => 'Ada, lengkap',
self::ADA_TIDAK_LENGKAP => 'Ada tapi tidak lengkap',
self::TIDAK_ADA => 'Tidak ada',
self::TIDAK_TAHU => 'Tidak tahu',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum StatusBadanHukumBumdes: string
{
case SUDAH_BERBADAN_HUKUM = 'sudah_berbadan_hukum';
case PROSES_PENDAFTARAN = 'proses_pendaftaran';
case BELUM_BERBADAN_HUKUM = 'belum_berbadan_hukum';
case TIDAK_TAHU = 'tidak_tahu';
public function label(): string
{
return match ($this) {
self::SUDAH_BERBADAN_HUKUM => 'Sudah berbadan hukum (terdaftar Kemenkumham)',
self::PROSES_PENDAFTARAN => 'Proses pendaftaran',
self::BELUM_BERBADAN_HUKUM => 'Belum berbadan hukum',
self::TIDAK_TAHU => 'Tidak tahu',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum StatusFermentasiBumdes: string
{
case RUTIN = 'rutin';
case PERNAH_MENCOBA = 'pernah_mencoba';
case DIRENCANAKAN = 'direncanakan';
case TIDAK_DIRENCANAKAN = 'tidak_direncanakan';
public function label(): string
{
return match ($this) {
self::RUTIN => 'Ya, rutin',
self::PERNAH_MENCOBA => 'Pernah mencoba',
self::DIRENCANAKAN => 'Belum pernah, direncanakan',
self::TIDAK_DIRENCANAKAN => 'Belum pernah, tidak direncanakan',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Enums\Bumdes;
enum StatusKeaktifanBumdes: string
{
case AKTIF_PENUH = 'aktif_penuh';
case AKTIF_TERBATAS = 'aktif_terbatas';
case TIDAK_AKTIF_VAKUM = 'tidak_aktif_vakum';
case BERDIRI_BELUM_BEROPERASI = 'berdiri_belum_beroperasi';
public function label(): string
{
return match ($this) {
self::AKTIF_PENUH => 'Aktif beroperasi penuh',
self::AKTIF_TERBATAS => 'Aktif tapi terbatas (sebagian unit usaha berjalan)',
self::TIDAK_AKTIF_VAKUM => 'Tidak aktif/vakum',
self::BERDIRI_BELUM_BEROPERASI => 'Sudah berdiri tapi belum pernah beroperasi',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum StatusKepemilikanAsetBumdes: string
{
case MILIK_BUMDES_SENDIRI = 'milik_bumdes_sendiri';
case MILIK_DESA_DIPINJAMKAN_DIKELOLA = 'milik_desa_dipinjamkan_dikelola';
case SEWA_PINJAM_PIHAK_LAIN = 'sewa_pinjam_pihak_lain';
public function label(): string
{
return match ($this) {
self::MILIK_BUMDES_SENDIRI => 'Milik BUMDes sendiri',
self::MILIK_DESA_DIPINJAMKAN_DIKELOLA => 'Milik desa (dipinjamkan/dikelola)',
self::SEWA_PINJAM_PIHAK_LAIN => 'Sewa/pinjam pihak lain',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum StatusPembukuanBumdes: string
{
case RUTIN_TERTIB = 'rutin_tertib';
case TIDAK_RUTIN = 'tidak_rutin';
case TIDAK_ADA = 'tidak_ada';
public function label(): string
{
return match ($this) {
self::RUTIN_TERTIB => 'Ya, rutin dan tertib',
self::TIDAK_RUTIN => 'Ada tapi tidak rutin/tidak rapi',
self::TIDAK_ADA => 'Tidak ada pembukuan',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum StatusPengeringanBumdes: string
{
case RUTIN = 'rutin';
case KADANG = 'kadang';
case TIDAK_PERNAH = 'tidak_pernah';
public function label(): string
{
return match ($this) {
self::RUTIN => 'Ya, rutin',
self::KADANG => 'Kadang-kadang',
self::TIDAK_PERNAH => 'Tidak pernah, produk dijual dalam kondisi diterima',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum StatusSortasiBumdes: string
{
case RUTIN_STANDAR = 'rutin_standar';
case TIDAK_KONSISTEN = 'tidak_konsisten';
case BELUM_PERNAH = 'belum_pernah';
public function label(): string
{
return match ($this) {
self::RUTIN_STANDAR => 'Ya, rutin dengan standar tertentu',
self::TIDAK_KONSISTEN => 'Ya, tapi tidak konsisten',
self::BELUM_PERNAH => 'Belum pernah dilakukan',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Enums\Bumdes;
enum StatusUnitKomoditasBumdes: string
{
case YA = 'ya';
case DITANGANI_PENGURUS_INTI = 'ditangani_pengurus_inti';
case DIRENCANAKAN = 'direncanakan';
public function label(): string
{
return match ($this) {
self::YA => 'Ya, ada unit khusus',
self::DITANGANI_PENGURUS_INTI => 'Tidak ada unit khusus, ditangani langsung pengurus inti',
self::DIRENCANAKAN => 'Belum ada, masih direncanakan',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\Bumdes;
enum SumberPasokanBumdes: string
{
case ANGGOTA_KELOMPOK = 'anggota_kelompok';
case PETANI_NON_ANGGOTA = 'petani_non_anggota';
case PENGUMPUL_DESA = 'pengumpul_desa';
case CAMPURAN = 'campuran';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::ANGGOTA_KELOMPOK => 'Anggota kelompok tani langsung',
self::PETANI_NON_ANGGOTA => 'Petani non-anggota',
self::PENGUMPUL_DESA => 'Pengumpul/sub-agen desa',
self::CAMPURAN => 'Campuran',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Enums\Bumdes;
enum UnitUsahaBumdes: string
{
case SIMPAN_PINJAM = 'simpan_pinjam';
case PERDAGANGAN_TOKO_DESA = 'perdagangan_toko_desa';
case PENGELOLAAN_AIR_BERSIH = 'pengelolaan_air_bersih';
case WISATA_DESA_AGROWISATA = 'wisata_desa_agrowisata';
case PENGELOLAAN_HASIL_PERTANIAN_KOMODITAS = 'pengelolaan_hasil_pertanian_komoditas';
case PENYEWAAN_ALAT_ASET = 'penyewaan_alat_aset';
case JASA_LAINNYA = 'jasa_lainnya';
public function label(): string
{
return match ($this) {
self::SIMPAN_PINJAM => 'Simpan pinjam',
self::PERDAGANGAN_TOKO_DESA => 'Perdagangan/toko desa',
self::PENGELOLAAN_AIR_BERSIH => 'Pengelolaan air bersih',
self::WISATA_DESA_AGROWISATA => 'Wisata desa/agrowisata',
self::PENGELOLAAN_HASIL_PERTANIAN_KOMODITAS => 'Pengelolaan hasil pertanian/komoditas',
self::PENYEWAAN_ALAT_ASET => 'Penyewaan alat/aset',
self::JASA_LAINNYA => 'Jasa lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $value) => [$value->value => $value->label()])->all();
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Enums;
enum JenisKelompokTani: string
{
case POKTAN = 'Kelompok Tani (Poktan)';
case KWT = 'Kelompok Wanita Tani (KWT)';
case GAPOKTAN = 'Gabungan Kelompok Tani (Gapoktan)';
case PEMUDA_TANI = 'Kelompok Pemuda Tani';
case ASOSIASI = 'Asosiasi Petani';
case LAINNYA = 'Lainnya';
public static function options(): array
{
return collect(self::cases())->mapWithKeys(fn (self $jenis) => [$jenis->value => $jenis->value])->all();
}
}
+17
View File
@@ -7,4 +7,21 @@ enum KeparahanSerangan: string
case RINGAN = 'ringan';
case SEDANG = 'sedang';
case BERAT = 'berat';
public function label(): string
{
return match($this) {
self::RINGAN => 'Ringan, hanya beberapa tanaman',
self::SEDANG => 'Sedang, sebagian tanaman terdampak',
self::BERAT => 'Parah, sebagian besar tanaman terdampak',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
+19 -1
View File
@@ -7,6 +7,24 @@ enum KondisiTanaman: string
case BAIK = 'baik';
case SEDANG = 'sedang';
case BURUK = 'buruk';
case SAKIT= 'sakit';
//case SAKIT= 'sakit';
case MATI = 'mati';
public function label(): string
{
return match($this) {
self::BAIK => 'Baik, tumbuh lebat, banyak buah',
self::SEDANG => 'Sedang, cukup tumbuh, ada masalah',
self::BURUK => 'Buruk, banyak tanaman tua dan lemah/tidak berbuah',
self::MATI => 'Mati, tanaman telah mati, tidak dapat tumbuh maupun berbuah',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Enums\Koperasi;
enum PosisiKoperasi: string
{
case PENGURUS = 'Pengurus koperasi';
case ANGGOTA = 'Anggota koperasi';
case PENDAMPING = 'Pendamping koperasi';
}
+6 -6
View File
@@ -19,13 +19,13 @@ enum Pendidikan: string
{
return match($this) {
self::TIDAK_SEKOLAH => 'Tidak Sekolah',
self::SD => 'SD atau Sederajat',
self::SMP => 'SMP atau Sederajat',
self::SMA => 'SMA atau Sederajat',
self::SD => 'SD',
self::SMP => 'SMP',
self::SMA => 'SMA/SMK',
self::DIPLOMA => 'Diploma 1-3 (D1-D3)',
self::SARJANA => 'Sarjana (S1) atau sederajat',
self::MAGISTER => 'Magister (S2) atau sederajat',
self::DOKTOR => 'Doktor (S3) atau sederajat',
self::SARJANA => 'Sarjana (S1)',
self::MAGISTER => 'Magister (S2)',
self::DOKTOR => 'Doktor (S3)',
self::PESANTREN => 'Pesantren, Semiari, Wihara, atau Pendidikan Keagamaan Formal',
self::LAINNYA => 'Lainnya',
};
@@ -0,0 +1,27 @@
<?php
namespace App\Enums\PendidikanPelatihan;
enum PelatihanGAP: string
{
case PEMANGKASAN = 'Pemangkasan/perawatan tanaman';
case PEMUPUKAN = 'Pemupukan/nutrisi';
case PENGENDALIAN = 'Pengendalian hama & penyakit';
case PRAKTIK = 'Praktik Berkebun yang Baik (GAP)';
case PENGOLAHAN = 'Pengolahan/pascapanen';
case PENYERBUKAN = 'Penyerbukan Manual (Vanili)';
case LAINNYA = 'Lainnya';
public function label(): string
{
return $this->value;
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
+18
View File
@@ -8,4 +8,22 @@ enum PenyakitTanaman: string
case DAUN_MENGUNING = 'daun_menguning';
case DAUN_BERCAK = 'daun_bercak';
case TANAMAN_LAYU = 'tanaman_layu';
public function label(): string
{
return match ($this) {
self::BUSUK_BUAH => 'Busuk Buah',
self::DAUN_MENGUNING => 'Daun Menguning',
self::DAUN_BERCAK => 'Daun Bercak',
self::TANAMAN_LAYU => 'Tanaman Layu',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum Bulan: string
{
case JANUARI = 'Januari';
case FEBRUARI = 'Februari';
case MARET = 'Maret';
case APRIL = 'April';
case MEI = 'Mei';
case JUNI = 'Juni';
case JULI = 'Juli';
case AGUSTUS = 'Agustus';
case SEPTEMBER = 'September';
case OKTOBER = 'Oktober';
case NOVEMBER = 'November';
case DESEMBER = 'Desember';
public function label(): string
{
return $this->value;
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
+31
View File
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum CaraSortasi: string
{
case DIPILAH = 'Dipilah manual dengan tangan (memilih satu per satu buah/biji yang bagus dan membuang yang rusak)';
case ALAT_BANTU = 'Menggunakan alat bantu sederhana (tampah, ayakan, atau bak untuk memisahkan kotoran ringan)';
case PERENDAMAN = 'Metode perendaman/tenggelam (memisahkan buah mengapung dan tenggelam)';
case GRADING_KRITERIA = 'Grading berdasarkan kriteria (ukuran, warna, atau tingkat kematangan)';
case PEMBERSIHAN = 'Hanya pembersihan kotoran kasar (membuang dahan atau sampah besar)';
public function label(): string
{
return match($this) {
self::DIPILAH => 'Dipilah manual dengan tangan (memilih satu per satu buah/biji yang bagus dan membuang yang rusak)',
self::ALAT_BANTU => 'Menggunakan alat bantu sederhana (tampah, ayakan, atau bak untuk memisahkan kotoran ringan)',
self::PERENDAMAN => 'Metode perendaman/tenggelam (memisahkan buah mengapung dan tenggelam)',
self::GRADING_KRITERIA => 'Grading berdasarkan kriteria (ukuran, warna, atau tingkat kematangan)',
self::PEMBERSIHAN => 'Hanya pembersihan kotoran kasar (membuang dahan atau sampah besar)',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum DasarPenentuanPanen: int
{
case KEBUTUHAN_UANG = 1;
case UMUR_TANPA_KONDISI_BUAH = 2;
case BUAH_JATUH = 3;
case TINGKAT_KEPADATAN = 4;
case WARNA_KULIT_BUAH = 5;
public function label(): string
{
return match($this) {
self::KEBUTUHAN_UANG => 'Kebutuhan uang mendesak, tanpa mempertimbangkan kematangan',
self::UMUR_TANPA_KONDISI_BUAH => 'Umur/jadwal tetap, tanpa melihat kondisi buah langsung',
self::BUAH_JATUH => 'Buah jatuh/matang pohon (sudah terlalu matang saat dipetik)',
self::TINGKAT_KEPADATAN => 'Bersuara saat diketuk atau tingkat kepadatan buah',
self::WARNA_KULIT_BUAH => 'Warna kulit buah (indikator paling akurat dan konsisten untuk menentukan kematangan optimal)',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum EstimasiKehilanganHasil: string
{
case TIDAK_ADA = 'Tidak ada kehilangan';
case SEDIKIT = 'Sedikit, sekitar 25 % dari total panen';
case LUMAYAN = 'Lumayan, sekitar 50% dari total panen';
case BANYAK = 'Banyak, sekitar 75% dari total panen';
case HAMPIR_SEMUA = 'Hampir semua rusak, lebih dari 75%';
case TIDAK_TAHU = 'Hanya pembersihan kotoran kasar (membuang dahan atau sampah besar)';
public function label(): string
{
return match($this) {
self::TIDAK_ADA => 'Tidak ada kehilangan',
self::SEDIKIT => 'Sedikit, sekitar 25 % dari total panen',
self::LUMAYAN => 'Lumayan, sekitar 50% dari total panen',
self::BANYAK => 'Banyak, sekitar 75% dari total panen',
self::HAMPIR_SEMUA => 'Hampir semua rusak, lebih dari 75%',
self::TIDAK_TAHU => 'Tidak tahu/sulit memperkirakan',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -8,7 +8,7 @@ enum FrekuensiPemangkasanPendamping: string
case TIDAK_RUTIN = 'Memangkas, tapi tidak rutin dan tidak tahu tekniknya';
case SATU_KALI_TAHUN = 'Memangkas 1 kali/tahun, tahu jenis tekniknya';
case DUA_KALI_TAHUN = 'Memangkas 2 kali/tahun, tahu jenis tekniknya';
case LEBIH_DUA_KALI_TAHUN = 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin';
case LEBIH_DUA_KALI_TAHUN = 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat, dan pohon penaung juga dipangkas rutin';
public function label(): string
{
@@ -17,7 +17,7 @@ enum FrekuensiPemangkasanPendamping: string
self::TIDAK_RUTIN => 'Memangkas, tapi tidak rutin dan tidak tahu tekniknya',
self::SATU_KALI_TAHUN => 'Memangkas 1 kali/tahun, tahu jenis tekniknya',
self::DUA_KALI_TAHUN => 'Memangkas 2 kali/tahun, tahu jenis tekniknya',
self::LEBIH_DUA_KALI_TAHUN => 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin',
self::LEBIH_DUA_KALI_TAHUN => 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat, dan pohon penaung juga dipangkas rutin',
};
}
@@ -17,7 +17,7 @@ enum FrekuensiPemangkasanUtama: int
self::TIDAK_RUTIN => 'Memangkas, tapi tidak rutin dan tidak tahu tekniknya',
self::SATU_KALI_TAHUN => 'Memangkas 1 kali/tahun, tahu jenis tekniknya',
self::DUA_KALI_TAHUN => 'Memangkas 2 kali/tahun, tahu jenis tekniknya',
self::LEBIH_DUA_KALI_TAHUN => 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin',
self::LEBIH_DUA_KALI_TAHUN => 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat, dan pohon penaung juga dipangkas rutin',
};
}
@@ -16,7 +16,7 @@ enum MetodePenangananHamaPenyakit: int
self::TIDAK_ADA => 'Tidak ada penanganan',
self::CARA_TRADISIONAL => 'Cara tradisional (doa/ritual)',
self::PESTISIDA_SANITASI => 'Pestisida atau sanitasi',
self::KOMBINASI => 'Kombinasi pestisada dan sanitasi',
self::KOMBINASI => 'Kombinasi pestisida dan sanitasi',
self::PHT => 'Pengendalian hama terpadu (PHT)',
};
}
@@ -13,11 +13,11 @@ enum PenangananGulma: int
public function label(): string
{
return match($this) {
self::DIBIARKAN => 'Dibiarkan di kebun',
self::DICABUT => 'Dikumpulkan dan dibuang',
self::DISEMPROT => 'Dijadikan kompos',
self::RUTIN_DICABUT_TANPA_JADWAL => 'Dikumpulkan dan dibuang',
self::RUTIN_TERJADWAL => 'Dijadikan kompos',
self::DIBIARKAN => 'Dibiarkan saja, tidak pernah ditangani',
self::DICABUT => 'Dicabut/dibersihkan sesekali, tidak terjadwal',
self::DISEMPROT => 'Disemprot herbisida sesekali, tidak terjadwal',
self::RUTIN_DICABUT_TANPA_JADWAL => 'Rutin dicabut/dipangkas, tapi tanpa jadwal yang jelas',
self::RUTIN_TERJADWAL => 'Rutin terjadwal dengan metode yang konsisten (dicabut/dipangkas/dikelola sebagai mulsa)',
};
}
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum PraktikSortasi: int
{
case TIDAK_PERNAH = 1;
case SANGAT_SEDERHANA = 2;
case TIDAK_SETIAP_PANEN = 3;
case SETIAP_PANEN = 4;
case KETAT = 5;
public function label(): string
{
return match($this) {
self::TIDAK_PERNAH => 'Tidak pernah melakukan sortasi sama sekali',
self::SANGAT_SEDERHANA => 'Sortasi sangat sederhana, hanya membuang yang jelas-jelas rusak/busuk',
self::TIDAK_SETIAP_PANEN => 'Sortasi dilakukan tapi tidak setiap panen (kadang dilakukan, kadang tidak)',
self::SETIAP_PANEN => 'Sortasi dilakukan setiap panen, tapi standarnya belum konsisten',
self::KETAT => 'Sortasi ketat dengan standar yang jelas dan konsisten setiap panen',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,25 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum TindakanPanenReject: string
{
case BUANG = 'Dibuang';
case JUAL = 'Dijual ke tempat lain';
public function label(): string
{
return match($this) {
self::BUANG => 'Dibuang',
self::JUAL => 'Dijual ke tempat lain',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum TingkatPanenReject: int
{
case SERING = 1;
case CUKUP_SERING = 2;
case KADANG = 3;
case JARANG = 4;
case TIDAK_ADA = 5;
public function label(): string
{
return match($this) {
self::SERING => 'Sering ditolak, lebih dari 50% hasil panen biasanya ditolak/tidak laku karena mutu',
self::CUKUP_SERING => 'Cukup sering, sekitar 25–50% hasil panen ditolak/tidak laku',
self::KADANG => 'Kadang ditolak, sekitar 10–25% hasil panen',
self::JARANG => 'Jarang ditolak, kurang dari 10% hasil panen',
self::TIDAK_ADA => 'Tidak ada yang ditolak, semua hasil panen sesuai standar pasar utama',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
+16 -1
View File
@@ -6,7 +6,22 @@ enum Role: string
{
case SUPER_ADMIN = 'super_admin';
case ADMIN = 'admin'; // admin program
case FASILITATOR = 'fasilitator';
case KOORDINATOR = 'koordinator'; // koordinator per komoditas
case ENUMERATOR = 'enumerator'; // penginput data petani di lapangan
case FASILITATOR = 'fasilitator'; // pemateri workshop
case PETANI = 'petani';
case OFFTAKER = 'offtaker';
public function label(): string
{
return match ($this) {
self::SUPER_ADMIN => 'Super Admin',
self::ADMIN => 'Admin',
self::KOORDINATOR => 'Koordinator',
self::ENUMERATOR => 'Enumerator',
self::FASILITATOR => 'Fasilitator',
self::PETANI => 'Petani',
self::OFFTAKER => 'Offtaker',
};
}
}
+17
View File
@@ -7,4 +7,21 @@ enum SeranganHama: string
case ULAT = 'ulat';
case BELALANG = 'belalang';
case KUTU = 'kutu';
public function label(): string
{
return match ($this) {
self::ULAT => 'Ulat',
self::BELALANG => 'Belalang',
self::KUTU => 'Kutu',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum AlasanKreditDitolak: string
{
case TIDAK_PUNYA_JAMINAN_AGUNAN = 'tidak_punya_jaminan_agunan';
case PROSES_TERLALU_RUMIT = 'proses_terlalu_rumit';
case TAKUT_TIDAK_BISA_BAYAR = 'takut_tidak_bisa_bayar';
case TIDAK_TAHU_CARANYA = 'tidak_tahu_caranya';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::TIDAK_PUNYA_JAMINAN_AGUNAN => 'Tidak punya jaminan-agunan',
self::PROSES_TERLALU_RUMIT => 'Proses terlalu rumit',
self::TAKUT_TIDAK_BISA_BAYAR => 'Takut tidak bisa bayar',
self::TIDAK_TAHU_CARANYA => 'Tidak tahu caranya',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Enums\SosialEkonomi;
enum BisaBeliPupukBersubsidi: string
{
case YA = 'ya';
case TIDAK = 'tidak';
public function label(): string
{
return match ($this) {
self::YA => 'Ya',
self::TIDAK => 'Tidak',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Enums\SosialEkonomi;
enum JenisAsetProduktif: string
{
case TERNAK = 'ternak';
case KENDARAAN = 'kendaraan';
case ALAT_PERTANIAN = 'alat_pertanian';
case LAINNYA = 'lainnya';
public function label(): string
{
return match ($this) {
self::TERNAK => 'Ternak',
self::KENDARAAN => 'Kendaraan',
self::ALAT_PERTANIAN => 'Alat pertanian',
self::LAINNYA => 'Lainnya',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Enums\SosialEkonomi;
enum KategoriPendapatanKomoditas: string
{
case UTAMA = 'utama';
case LAINNYA = 'lainnya';
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum KeaktifanPertemuanKelompok: int
{
case TIDAK_PERNAH_HADIR = 1;
case JARANG_HADIR = 2;
case SERING_HADIR_LEBIH_BANYAK_DIAM = 3;
case HAMPIR_SELALU_HADIR_KADANG_DISKUSI = 4;
case SELALU_HADIR_AKTIF_DISKUSI = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_PERNAH_HADIR => 'Tidak pernah hadir',
self::JARANG_HADIR => 'Jarang hadir',
self::SERING_HADIR_LEBIH_BANYAK_DIAM => 'Sering hadir tapi lebih banyak diam',
self::HAMPIR_SELALU_HADIR_KADANG_DISKUSI => 'Hampir selalu hadir & kadang diskusi',
self::SELALU_HADIR_AKTIF_DISKUSI => 'Selalu hadir & aktif diskusi',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum KebebasanMemilihPembeli: int
{
case TIDAK_BEBAS_TERIKAT_SATU_PEMBELI = 1;
case AGAK_TERIKAT_ADA_TEKANAN = 2;
case AGAK_BEBAS_CENDERUNG_PEMBELI_SAMA = 3;
case CUKUP_BEBAS_SESEKALI_PINDAH = 4;
case SANGAT_BEBAS_PINDAH_KAPAN_SAJA = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_BEBAS_TERIKAT_SATU_PEMBELI => 'Tidak bebas, terikat satu pembeli',
self::AGAK_TERIKAT_ADA_TEKANAN => 'Agak terikat, ada tekanan',
self::AGAK_BEBAS_CENDERUNG_PEMBELI_SAMA => 'Agak bebas, cenderung pembeli sama',
self::CUKUP_BEBAS_SESEKALI_PINDAH => 'Cukup bebas, sesekali pindah',
self::SANGAT_BEBAS_PINDAH_KAPAN_SAJA => 'Sangat bebas, pindah kapan saja',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Enums\SosialEkonomi;
enum KedekatanSesamaAnggota: string
{
case SANGAT_DEKAT = 'sangat_dekat';
case CUKUP_DEKAT = 'cukup_dekat';
case SEBATAS_KENAL = 'sebatas_kenal';
case TIDAK_BEGITU_KENAL = 'tidak_begitu_kenal';
public function label(): string
{
return match ($this) {
self::SANGAT_DEKAT => 'Sangat dekat',
self::CUKUP_DEKAT => 'Cukup dekat',
self::SEBATAS_KENAL => 'Sebatas kenal',
self::TIDAK_BEGITU_KENAL => 'Tidak begitu kenal',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum KemauanIkutProgram: int
{
case TIDAK_MAU = 1;
case RAGU_RAGU = 2;
case MAU_PERLU_DIPASTIKAN_MANFAAT = 3;
case MAU_LIHAT_PROGRAM_DULU = 4;
case MAU_LANGSUNG_IKUT = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_MAU => 'Tidak mau',
self::RAGU_RAGU => 'Ragu-ragu',
self::MAU_PERLU_DIPASTIKAN_MANFAAT => 'Mau, perlu dipastikan manfaatnya',
self::MAU_LIHAT_PROGRAM_DULU => 'Mau, ingin lihat programnya dulu',
self::MAU_LANGSUNG_IKUT => 'Mau, langsung ikut',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum KemauanMencobaPraktikBaru: int
{
case TIDAK_MAU = 1;
case RAGU_RAGU = 2;
case MAU_LIHAT_HASIL_DULU = 3;
case MAU_LANGSUNG_COBA = 4;
case MAU_COBA_SAMPAI_BERHASIL = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_MAU => 'Tidak mau',
self::RAGU_RAGU => 'Ragu-ragu',
self::MAU_LIHAT_HASIL_DULU => 'Mau, lihat hasil dulu',
self::MAU_LANGSUNG_COBA => 'Mau langsung coba',
self::MAU_COBA_SAMPAI_BERHASIL => 'Mau coba sampai berhasil',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,38 @@
<?php
namespace App\Enums\SosialEkonomi;
enum KeterikatanHutangPanen: int
{
case TIDAK_BERSEDIA_MENJAWAB = 0;
case HUTANG_BESAR_HAMPIR_SELURUH_PANEN_TERIKAT = 1;
case HUTANG_LEBIH_DARI_SEPARUH_PANEN_TERIKAT = 2;
case HUTANG_SEBAGIAN_KECIL_TERIKAT = 3;
case HUTANG_KECIL_TIDAK_MENGIKAT_PANEN = 4;
case TIDAK_ADA = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_BERSEDIA_MENJAWAB => 'Tidak bersedia menjawab',
self::HUTANG_BESAR_HAMPIR_SELURUH_PANEN_TERIKAT => 'Ada hutang besar, hampir seluruh panen terikat',
self::HUTANG_LEBIH_DARI_SEPARUH_PANEN_TERIKAT => 'Ada hutang, >separuh panen terikat',
self::HUTANG_SEBAGIAN_KECIL_TERIKAT => 'Ada hutang, sebagian kecil terikat',
self::HUTANG_KECIL_TIDAK_MENGIKAT_PANEN => 'Ada hutang kecil, tidak mengikat panen',
self::TIDAK_ADA => 'Tidak ada',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum KeterlibatanProgramKeuanganFormal: int
{
case TIDAK_PERNAH_MENERIMA = 1;
case PERNAH_SATU_TIDAK_BERMANFAAT = 2;
case SEDANG_MENERIMA_SATU = 3;
case SEDANG_MENERIMA_LEBIH_DARI_SATU = 4;
case AKTIF_BEBERAPA_PROGRAM_BERMANFAAT = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_PERNAH_MENERIMA => 'Tidak pernah menerima',
self::PERNAH_SATU_TIDAK_BERMANFAAT => 'Pernah 1 program, tidak lagi & tidak bermanfaat',
self::SEDANG_MENERIMA_SATU => 'Sedang menerima 1 program',
self::SEDANG_MENERIMA_LEBIH_DARI_SATU => 'Sedang menerima >1 program',
self::AKTIF_BEBERAPA_PROGRAM_BERMANFAAT => 'Aktif beberapa program & merasakan manfaat nyata',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum KondisiAsetProduktif: int
{
case TIDAK_ADA = 1;
case ADA_SATU_KURANG_BAIK = 2;
case ADA_SATU_BAIK = 3;
case ADA_DUA_LEBIH_SEBAGIAN_KURANG_BAIK = 4;
case ADA_DUA_LEBIH_SEMUA_BAIK = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_ADA => 'Tidak ada',
self::ADA_SATU_KURANG_BAIK => 'Ada 1 jenis, kondisi kurang baik',
self::ADA_SATU_BAIK => 'Ada 1 jenis, kondisi baik',
self::ADA_DUA_LEBIH_SEBAGIAN_KURANG_BAIK => 'Ada 2+ jenis, sebagian kurang baik',
self::ADA_DUA_LEBIH_SEMUA_BAIK => 'Ada 2+ jenis, semua kondisi baik',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum ManfaatKelompokTani: int
{
case TIDAK_ADA_MANFAAT = 1;
case MANFAAT_SOSIAL_SAJA = 2;
case SEDIKIT_MANFAAT_PRODUKSI_PEMASARAN = 3;
case MANFAAT_CUKUP_TERASA = 4;
case MANFAAT_NYATA_SIGNIFIKAN = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_ADA_MANFAAT => 'Tidak ada manfaat',
self::MANFAAT_SOSIAL_SAJA => 'Manfaat sosial saja',
self::SEDIKIT_MANFAAT_PRODUKSI_PEMASARAN => 'Sedikit manfaat produksi-pemasaran',
self::MANFAAT_CUKUP_TERASA => 'Manfaat cukup terasa',
self::MANFAAT_NYATA_SIGNIFIKAN => 'Manfaat nyata & signifikan',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Enums\SosialEkonomi;
enum MinatPembeliHargaStabil: string
{
case MAU_HARGA_STABIL_LEBIH_PENTING = 'mau_harga_stabil_lebih_penting';
case MAU_TAPI_INGIN_BANDINGKAN_DULU = 'mau_tapi_ingin_bandingkan_dulu';
case RAGU_RAGU = 'ragu_ragu';
case TIDAK_MAU_CARI_HARGA_TERBAIK = 'tidak_mau_cari_harga_terbaik';
public function label(): string
{
return match ($this) {
self::MAU_HARGA_STABIL_LEBIH_PENTING => 'Mau-harga stabil lebih penting',
self::MAU_TAPI_INGIN_BANDINGKAN_DULU => 'Mau tapi ingin bandingkan dulu',
self::RAGU_RAGU => 'Ragu-ragu',
self::TIDAK_MAU_CARI_HARGA_TERBAIK => 'Tidak mau-cari harga terbaik tiap jual',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum OrientasiRencanaJangkaPanjang: int
{
case BELUM_KEPIKIRAN = 1;
case INGIN_TETAP_SEPERTI_SEKARANG = 2;
case INGIN_BERUBAH_BELUM_TAHU_CARANYA = 3;
case INGIN_SUDAH_MULAI_DIPIKIRKAN = 4;
case PUNYA_RENCANA_KONKRET = 5;
public function label(): string
{
return match ($this) {
self::BELUM_KEPIKIRAN => 'Belum kepikiran',
self::INGIN_TETAP_SEPERTI_SEKARANG => 'Ingin tetap seperti sekarang',
self::INGIN_BERUBAH_BELUM_TAHU_CARANYA => 'Ada keinginan berubah tapi belum tahu caranya',
self::INGIN_SUDAH_MULAI_DIPIKIRKAN => 'Ada keinginan & sudah mulai dipikirkan',
self::PUNYA_RENCANA_KONKRET => 'Sudah punya rencana konkret',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PanutanPetaniSukses: int
{
case TIDAK_ADA = 1;
case ADA_DENGAR_DARI_ORANG_LAIN = 2;
case TAHU_SIAPA_TIDAK_KENAL = 3;
case KENAL_BELUM_DISKUSI = 4;
case KENAL_PERNAH_DISKUSI_LANGSUNG = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_ADA => 'Tidak ada',
self::ADA_DENGAR_DARI_ORANG_LAIN => 'Ada, dengar dari orang lain saja',
self::TAHU_SIAPA_TIDAK_KENAL => 'Tahu siapa, tapi tidak kenal',
self::KENAL_BELUM_DISKUSI => 'Kenal, belum pernah diskusi',
self::KENAL_PERNAH_DISKUSI_LANGSUNG => 'Kenal & pernah diskusi langsung',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PemahamanMutuHarga: int
{
case TIDAK_TAHU = 1;
case PERNAH_DENGAR_TIDAK_YAKIN = 2;
case TAHU_BEDA_BELUM_BUKTIKAN = 3;
case TAHU_PERNAH_HARGA_LEBIH_TINGGI = 4;
case TAHU_BETUL_BISA_JELASKAN_RINCI = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_TAHU => 'Tidak tahu',
self::PERNAH_DENGAR_TIDAK_YAKIN => 'Pernah dengar, tidak yakin',
self::TAHU_BEDA_BELUM_BUKTIKAN => 'Tahu ada beda, belum buktikan',
self::TAHU_PERNAH_HARGA_LEBIH_TINGGI => 'Tahu & pernah dapat harga lebih tinggi',
self::TAHU_BETUL_BISA_JELASKAN_RINCI => 'Tahu betul & bisa jelaskan rinci',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PengalamanKreditKebun: int
{
case TIDAK_PERNAH_MENCOBA = 1;
case PERNAH_COBA_DITOLAK = 2;
case SEDANG_PROSES = 3;
case BERHASIL_MASIH_PELUNASAN = 4;
case BERHASIL_SUDAH_LUNAS = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_PERNAH_MENCOBA => 'Tidak pernah mencoba',
self::PERNAH_COBA_DITOLAK => 'Pernah coba tapi ditolak',
self::SEDANG_PROSES => 'Sedang dalam proses',
self::BERHASIL_MASIH_PELUNASAN => 'Berhasil, masih proses pelunasan',
self::BERHASIL_SUDAH_LUNAS => 'Berhasil & sudah lunas',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PengetahuanHargaHasilOlah: string
{
case TIDAK_TAHU = 'tidak_tahu';
case PERNAH_DENGAR_TIDAK_TAHU_PENGARUH = 'pernah_dengar_tidak_tahu_pengaruh';
case TAHU_BEDA_HARGA_BELUM_COBA = 'tahu_beda_harga_belum_coba';
case PERNAH_JUAL_HASIL_OLAH_HARGA_LEBIH_TINGGI = 'pernah_jual_hasil_olah_harga_lebih_tinggi';
public function label(): string
{
return match ($this) {
self::TIDAK_TAHU => 'Tidak tahu',
self::PERNAH_DENGAR_TIDAK_TAHU_PENGARUH => 'Pernah dengar tapi tidak tahu pengaruh ke harga',
self::TAHU_BEDA_HARGA_BELUM_COBA => 'Tahu ada beda harga tapi belum coba',
self::PERNAH_JUAL_HASIL_OLAH_HARGA_LEBIH_TINGGI => 'Sudah pernah jual hasil olah dengan harga lebih tinggi',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PeranDalamKelompok: int
{
case ANGGOTA_PASIF = 1;
case ANGGOTA_BIASA_KADANG_DILIBATKAN = 2;
case ANGGOTA_BIASA_CUKUP_AKTIF = 3;
case PENGURUS_BELUM_BANYAK_TANGGUNG_JAWAB = 4;
case KETUA_PENGURUS_AKTIF = 5;
public function label(): string
{
return match ($this) {
self::ANGGOTA_PASIF => 'Anggota pasif',
self::ANGGOTA_BIASA_KADANG_DILIBATKAN => 'Anggota biasa, kadang dilibatkan',
self::ANGGOTA_BIASA_CUKUP_AKTIF => 'Anggota biasa, cukup aktif',
self::PENGURUS_BELUM_BANYAK_TANGGUNG_JAWAB => 'Pengurus, belum banyak menjalankan tanggung jawab',
self::KETUA_PENGURUS_AKTIF => 'Ketua-pengurus aktif & menjalankan tanggung jawab nyata',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PeriodePendapatan: string
{
case MUSIM = 'musim';
case TAHUN = 'tahun';
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PernahBantuanNgoPerusahaan: string
{
case PERNAH = 'pernah';
case TIDAK_PERNAH = 'tidak_pernah';
public function label(): string
{
return match ($this) {
self::PERNAH => 'Pernah',
self::TIDAK_PERNAH => 'Tidak pernah',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PernahJualHargaLebihTinggi: string
{
case BELUM_PERNAH = 'belum_pernah';
case PERNAH = 'pernah';
public function label(): string
{
return match ($this) {
self::BELUM_PERNAH => 'Belum pernah',
self::PERNAH => 'Pernah',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PihakMembantuKonflik: string
{
case TIDAK_ADA_SELESAIKAN_SENDIRI = 'Tidak ada-selesaikan sendiri';
case ADA = 'Ada';
public function label(): string
{
return $this->value;
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PinjamanTokohAdatPanen: string
{
case TIDAK_ADA = 'tidak_ada';
case ADA = 'ada';
case TIDAK_BERSEDIA_MENJAWAB = 'tidak_bersedia_menjawab';
public function label(): string
{
return match ($this) {
self::TIDAK_ADA => 'Tidak ada',
self::ADA => 'Ada',
self::TIDAK_BERSEDIA_MENJAWAB => 'Tidak bersedia menjawab',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
+38
View File
@@ -0,0 +1,38 @@
<?php
namespace App\Enums\SosialEkonomi;
enum PraktikIjon: int
{
case TIDAK_BERSEDIA_MENJAWAB = 0;
case HAMPIR_SELURUH_PANEN_TERIKAT = 1;
case SEBAGIAN_BESAR_TERIKAT = 2;
case SESEKALI_SEBAGIAN_KECIL = 3;
case PERNAH_SUDAH_LAMA_TIDAK_LAGI = 4;
case TIDAK_PERNAH = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_BERSEDIA_MENJAWAB => 'Tidak bersedia menjawab',
self::HAMPIR_SELURUH_PANEN_TERIKAT => 'Hampir seluruh panen terikat ijon',
self::SEBAGIAN_BESAR_TERIKAT => 'Sebagian besar terikat',
self::SESEKALI_SEBAGIAN_KECIL => 'Sesekali-sebagian kecil',
self::PERNAH_SUDAH_LAMA_TIDAK_LAGI => 'Pernah, sudah lama tidak lagi',
self::TIDAK_PERNAH => 'Tidak pernah',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum SkorKecukupanPenghasilan: int
{
case SANGAT_TIDAK_CUKUP = 1;
case KURANG_SERING_BERHUTANG = 2;
case CUKUP_PAS_PASAN = 3;
case CUKUP_ADA_SISA = 4;
case LEBIH_DARI_CUKUP = 5;
public function label(): string
{
return match ($this) {
self::SANGAT_TIDAK_CUKUP => 'Sangat tidak cukup',
self::KURANG_SERING_BERHUTANG => 'Kurang, sering berhutang',
self::CUKUP_PAS_PASAN => 'Cukup pas-pasan',
self::CUKUP_ADA_SISA => 'Cukup, kadang ada sisa',
self::LEBIH_DARI_CUKUP => 'Lebih dari cukup',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum SkorKejelasanStatusLahan: int
{
case TIDAK_ADA_DOKUMEN_ADA_SENGKETA = 1;
case ADA_DOKUMEN_MASIH_SENGKETA = 2;
case PERNAH_SENGKETA_SELESAI = 3;
case LAHAN_ADAT_TANPA_SENGKETA = 4;
case BERSERTIFIKAT_TANPA_SENGKETA = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_ADA_DOKUMEN_ADA_SENGKETA => 'Tidak ada dokumen & ada sengketa',
self::ADA_DOKUMEN_MASIH_SENGKETA => 'Ada dokumen tapi masih sengketa',
self::PERNAH_SENGKETA_SELESAI => 'Pernah sengketa, sudah selesai',
self::LAHAN_ADAT_TANPA_SENGKETA => 'Lahan adat/keluarga/perhutanan sosial tanpa sengketa',
self::BERSERTIFIKAT_TANPA_SENGKETA => 'Bersertifikat & tidak ada sengketa',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum SkorKemampuanMenabung: int
{
case TIDAK_BISA = 1;
case PERNAH_TERPAKAI = 2;
case KADANG_KADANG = 3;
case BISA_TIDAK_TETAP = 4;
case RUTIN_TETAP = 5;
public function label(): string
{
return match ($this) {
self::TIDAK_BISA => 'Tidak bisa sama sekali',
self::PERNAH_TERPAKAI => 'Pernah tapi selalu terpakai',
self::KADANG_KADANG => 'Kadang-kadang',
self::BISA_TIDAK_TETAP => 'Bisa tapi tidak tetap',
self::RUTIN_TETAP => 'Rutin & jumlah tetap',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\SosialEkonomi;
enum SkorPeriodePaceklik: int
{
case LEBIH_DARI_EMPAT_BULAN = 1;
case TIGA_SAMPAI_EMPAT_BULAN = 2;
case SATU_SAMPAI_DUA_BULAN = 3;
case SEBENTAR_TIDAK_MENENTU = 4;
case TIDAK_ADA_STABIL = 5;
public function label(): string
{
return match ($this) {
self::LEBIH_DARI_EMPAT_BULAN => '>4 bulan',
self::TIGA_SAMPAI_EMPAT_BULAN => '3-4 bulan',
self::SATU_SAMPAI_DUA_BULAN => '1-2 bulan',
self::SEBENTAR_TIDAK_MENENTU => 'Sebentar & tidak menentu',
self::TIDAK_ADA_STABIL => 'Tidak ada, stabil',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Enums\SosialEkonomi;
enum StatusKartuTani: string
{
case BELUM_PUNYA = 'belum_punya';
case SUDAH_PUNYA_BELUM_AKTIF = 'sudah_punya_belum_aktif';
case SUDAH_PUNYA_AKTIF_DIGUNAKAN = 'sudah_punya_aktif_digunakan';
public function label(): string
{
return match ($this) {
self::BELUM_PUNYA => 'Belum punya',
self::SUDAH_PUNYA_BELUM_AKTIF => 'Sudah punya tapi belum aktif',
self::SUDAH_PUNYA_AKTIF_DIGUNAKAN => 'Sudah punya & aktif digunakan',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Enums\SosialEkonomi;
enum StatusKepemilikanLahanSosialEkonomi: string
{
case MILIK_PRIBADI = 'Milik pribadi';
case MILIK_ORANG_TUA_KELUARGA = 'Milik orang tua-keluarga';
case SEWA_BAGI_HASIL = 'Sewa-bagi hasil';
case LAHAN_ADAT = 'Lahan adat';
case PERHUTANAN_SOSIAL = 'Perhutanan sosial';
public function label(): string
{
return $this->value;
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace App\Enums\SosialEkonomi;
enum StatusKonflik: string
{
case SUDAH_SELESAI = 'Sudah selesai';
case BELUM_MASIH_BERLANJUT = 'Belum, masih berlanjut';
public function label(): string
{
return $this->value;
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Enums\SosialEkonomi;
enum StatusProgramKeuanganFormal: string
{
case SEDANG_MENERIMA = 'sedang_menerima';
case PERNAH_TAPI_TIDAK_LAGI = 'pernah_tapi_tidak_lagi';
case BELUM_PERNAH = 'belum_pernah';
public function label(): string
{
return match ($this) {
self::SEDANG_MENERIMA => 'Sedang Menerima',
self::PERNAH_TAPI_TIDAK_LAGI => 'Pernah tapi Tidak Lagi',
self::BELUM_PERNAH => 'Belum Pernah',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}

Some files were not shown because too many files have changed in this diff Show More