diff --git a/bun.lock b/bun.lock
index 2640de7..543e7e9 100644
--- a/bun.lock
+++ b/bun.lock
@@ -22,6 +22,7 @@
"@types/lodash": "^4.17.20",
"@types/uuid": "^11.0.0",
"add": "^2.0.6",
+ "dayjs": "^1.11.19",
"echarts": "^6.0.0",
"echarts-for-react": "^3.0.5",
"elysia": "^1.4.15",
diff --git a/package.json b/package.json
index 1cb8768..eeba8ad 100644
--- a/package.json
+++ b/package.json
@@ -28,6 +28,7 @@
"@types/lodash": "^4.17.20",
"@types/uuid": "^11.0.0",
"add": "^2.0.6",
+ "dayjs": "^1.11.19",
"echarts": "^6.0.0",
"echarts-for-react": "^3.0.5",
"elysia": "^1.4.15",
diff --git a/src/components/NotFoundPengajuanSurat.tsx b/src/components/NotFoundPengajuanSurat.tsx
new file mode 100644
index 0000000..e63ea48
--- /dev/null
+++ b/src/components/NotFoundPengajuanSurat.tsx
@@ -0,0 +1,51 @@
+import {
+ Button,
+ Center,
+ Group,
+ Stack,
+ Text,
+ Title
+} from "@mantine/core"
+import { IconSearch } from "@tabler/icons-react"
+
+export function DataNotFound({
+ onRetry,
+ backTo
+}: {
+ onRetry?: () => void
+ backTo?: () => void
+}) {
+ return (
+
+
+
+
+ Data Pengajuan Tidak Ditemukan
+
+
+ Kami tidak dapat menemukan data pengajuan dengan nomor pengajuan yg diinputkan. Silakan periksa kembali data Anda.
+
+
+
+ {/* {onRetry && (
+ }
+ onClick={onRetry}
+ >
+ Cari Ulang
+
+ )} */}
+
+ }
+ onClick={backTo}
+ >
+ Cari Kembali
+
+
+
+
+ )
+}
diff --git a/src/lib/categoryPelayananSurat.ts b/src/lib/categoryPelayananSurat.ts
index 914c8ef..e771614 100644
--- a/src/lib/categoryPelayananSurat.ts
+++ b/src/lib/categoryPelayananSurat.ts
@@ -1,3 +1,5 @@
+import { enumAgama, enumJenisKelamin, enumStatusHidup, enumStatusPerkawinan } from "./valueEnum";
+
export const categoryPelayananSurat = [
{
id: "skbedabiodata",
@@ -21,17 +23,43 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
- { key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP" },
- { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon" },
- { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon" },
- { key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemohon" },
- { key: "alamat", name: "Alamat", desc: "Alamat lengkap tempat tinggal" },
- { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon" },
- { key: "dokumen", name: "Nama Dokumen", desc: "Jenis dokumen yang mengalami perbedaan biodata (cth : ijazah, sertifikat, dll)" },
- { key: "data_dokumen", name: "Data Dokumen", desc: "Data dokumen yg berbeda (cth : nama, tempat lahir, tanggal lahir, jenis kelamin, alamat, pekerjaan)" },
- { key: "dokumen_a", name: "Data pada Dokumen A", desc: "Data biodata yang tertulis pada dokumen pertama" },
- { key: "dokumen_b", name: "Data pada Dokumen B", desc: "Data biodata yang tertulis pada dokumen kedua" }
+ { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
+ { key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP", type: "text" },
+ { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon", type: "text" },
+ { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon", type: "date" },
+ {
+ key: "jenis_kelamin",
+ name: "Jenis Kelamin",
+ desc: "Jenis kelamin pemohon",
+ type: "enum",
+ options: enumJenisKelamin
+ },
+ { key: "alamat", name: "Alamat", desc: "Alamat lengkap tempat tinggal", type: "text" },
+ { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon", type: "text" },
+ {
+ key: "dokumen",
+ name: "Nama Dokumen",
+ desc: "Jenis dokumen yang mengalami perbedaan biodata (cth : ijazah, sertifikat, dll)",
+ type: "text"
+ },
+ {
+ key: "data_dokumen",
+ name: "Data Dokumen",
+ desc: "Data dokumen yg berbeda (cth : nama, tempat lahir, tanggal lahir, jenis kelamin, alamat, pekerjaan)",
+ type: "text"
+ },
+ {
+ key: "dokumen_a",
+ name: "Data pada Dokumen A",
+ desc: "Data biodata yang tertulis pada dokumen pertama",
+ type: "text"
+ },
+ {
+ key: "dokumen_b",
+ name: "Data pada Dokumen B",
+ desc: "Data biodata yang tertulis pada dokumen kedua",
+ type: "text"
+ }
]
},
{
@@ -56,14 +84,26 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
- { key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP" },
- { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon" },
- { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon" },
- { key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemohon" },
- { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
- { key: "agama", name: "Agama", desc: "Agama pemohon" },
- { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon" }
+ { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
+ { key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP", type: "text" },
+ { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon", type: "text" },
+ { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon", type: "date" },
+ {
+ key: "jenis_kelamin",
+ name: "Jenis Kelamin",
+ desc: "Jenis kelamin pemohon",
+ type: "enum",
+ options: enumJenisKelamin
+ },
+ { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
+ {
+ key: "agama",
+ name: "Agama",
+ desc: "Agama pemohon",
+ type: "enum",
+ options: enumAgama
+ },
+ { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon", type: "text" }
]
},
{
@@ -88,12 +128,12 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nama_organisasi", name: "Nama Organisasi", desc: "Nama resmi organisasi" },
- { key: "jenis_organisasi", name: "Jenis Organisasi", desc: "Jenis atau bentuk organisasi" },
- { key: "alamat_organisasi", name: "Alamat Organisasi", desc: "Alamat sekretariat organisasi" },
- { key: "no_telepon", name: "Nomor Telepon", desc: "Nomor telepon organisasi" },
- { key: "nama_pimpinan", name: "Nama Pimpinan", desc: "Nama pimpinan organisasi" },
- { key: "keperluan", name: "Keperluan", desc: "Keperluan pembuatan surat" }
+ { key: "nama_organisasi", name: "Nama Organisasi", desc: "Nama resmi organisasi", type: "text" },
+ { key: "jenis_organisasi", name: "Jenis Organisasi", desc: "Jenis atau bentuk organisasi", type: "text" },
+ { key: "alamat_organisasi", name: "Alamat Organisasi", desc: "Alamat sekretariat organisasi", type: "text" },
+ { key: "no_telepon", name: "Nomor Telepon", desc: "Nomor telepon organisasi", type: "text" },
+ { key: "nama_pimpinan", name: "Nama Pimpinan", desc: "Nama pimpinan organisasi", type: "text" },
+ { key: "keperluan", name: "Keperluan", desc: "Keperluan pembuatan surat", type: "text" }
]
},
{
@@ -113,28 +153,35 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nama_anak", name: "Nama Anak", desc: "Nama bayi/anak" },
- { key: "tanggal_lahir_anak", name: "Tanggal Lahir Anak", desc: "Tanggal lahir anak" },
- { key: "pukul_lahir", name: "Pukul Lahir", desc: "Waktu kelahiran anak" },
- { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat kelahiran anak" },
- { key: "jenis_kelamin", name: "Jenis Kelamin Anak", desc: "Jenis kelamin anak" },
- { key: "anak_ke", name: "Anak Ke-", desc: "Urutan kelahiran anak" },
- { key: "nik_ibu", name: "NIK Ibu", desc: "NIK ibu kandung" },
- { key: "nama_ibu", name: "Nama Ibu", desc: "Nama lengkap ibu" },
- { key: "tempat_lahir_ibu", name: "Tempat Lahir Ibu", desc: "Tempat lahir ibu kandung" },
- { key: "tanggal_lahir_ibu", name: "Tanggal Lahir Ibu", desc: "Tanggal lahir ibu kandung" },
- { key: "pekerjaan_ibu", name: "Pekerjaan Ibu", desc: "Pekerjaan ibu kandung" },
- { key: "alamat_ibu", name: "Alamat Ibu", desc: "Alamat ibu kandung" },
- { key: "nama_ayah", name: "Nama Ayah", desc: "Nama lengkap ayah" },
- { key: "nik_ayah", name: "NIK Ayah", desc: "NIK ayah kandung" },
- { key: "tempat_lahir_ayah", name: "Tempat Lahir Ayah", desc: "Tempat lahir ayah kandung" },
- { key: "tanggal_lahir_ayah", name: "Tanggal Lahir Ayah", desc: "Tanggal lahir ayah kandung" },
- { key: "pekerjaan_ayah", name: "Pekerjaan Ayah", desc: "Pekerjaan ayah kandung" },
- { key: "alamat_ayah", name: "Alamat Ayah", desc: "Alamat ayah kandung" },
- { key: "nama_pelapor", name: "Nama Pelapor", desc: "Nama pihak yang melaporkan" },
- { key: "hubungan_pelapor", name: "Hubungan Pelapor", desc: "Hubungan pelapor dengan anak" },
- { key: "alamat_pelapor", name: "Alamat Pelapor", desc: "Alamat pelapor" }
+ { key: "nama_anak", name: "Nama Anak", desc: "Nama bayi/anak", type: "text" },
+ { key: "tanggal_lahir_anak", name: "Tanggal Lahir Anak", desc: "Tanggal lahir anak", type: "date" },
+ { key: "pukul_lahir", name: "Pukul Lahir", desc: "Waktu kelahiran anak", type: "text" },
+ { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat kelahiran anak", type: "text" },
+ {
+ key: "jenis_kelamin",
+ name: "Jenis Kelamin Anak",
+ desc: "Jenis kelamin anak",
+ type: "enum",
+ options: enumJenisKelamin
+ },
+ { key: "anak_ke", name: "Anak Ke-", desc: "Urutan kelahiran anak", type: "number" },
+ { key: "nik_ibu", name: "NIK Ibu", desc: "NIK ibu kandung", type: "number" },
+ { key: "nama_ibu", name: "Nama Ibu", desc: "Nama lengkap ibu", type: "text" },
+ { key: "tempat_lahir_ibu", name: "Tempat Lahir Ibu", desc: "Tempat lahir ibu kandung", type: "text" },
+ { key: "tanggal_lahir_ibu", name: "Tanggal Lahir Ibu", desc: "Tanggal lahir ibu kandung", type: "date" },
+ { key: "pekerjaan_ibu", name: "Pekerjaan Ibu", desc: "Pekerjaan ibu kandung", type: "text" },
+ { key: "alamat_ibu", name: "Alamat Ibu", desc: "Alamat ibu kandung", type: "text" },
+ { key: "nama_ayah", name: "Nama Ayah", desc: "Nama lengkap ayah", type: "text" },
+ { key: "nik_ayah", name: "NIK Ayah", desc: "NIK ayah kandung", type: "number" },
+ { key: "tempat_lahir_ayah", name: "Tempat Lahir Ayah", desc: "Tempat lahir ayah kandung", type: "text" },
+ { key: "tanggal_lahir_ayah", name: "Tanggal Lahir Ayah", desc: "Tanggal lahir ayah kandung", type: "date" },
+ { key: "pekerjaan_ayah", name: "Pekerjaan Ayah", desc: "Pekerjaan ayah kandung", type: "text" },
+ { key: "alamat_ayah", name: "Alamat Ayah", desc: "Alamat ayah kandung", type: "text" },
+ { key: "nama_pelapor", name: "Nama Pelapor", desc: "Nama pihak yang melaporkan", type: "text" },
+ { key: "hubungan_pelapor", name: "Hubungan Pelapor", desc: "Hubungan pelapor dengan anak", type: "text" },
+ { key: "alamat_pelapor", name: "Alamat Pelapor", desc: "Alamat pelapor", type: "text" }
]
+
},
{
id: "skkelakuanbaik",
@@ -153,16 +200,29 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
- { key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP" },
- { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir" },
- { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir" },
- { key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemohon" },
- { key: "agama", name: "Agama", desc: "Agama pemohon" },
- { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
- { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon" },
- { key: "polsek", name: "Polsek Tujuan", desc: "Polsek tujuan pembuatan SKCK" }
+ { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
+ { key: "nama", name: "Nama Lengkap", desc: "Nama sesuai KTP", type: "text" },
+ { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir", type: "text" },
+ { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir", type: "date" },
+ {
+ key: "jenis_kelamin",
+ name: "Jenis Kelamin",
+ desc: "Jenis kelamin pemohon",
+ type: "enum",
+ options: enumJenisKelamin
+ },
+ {
+ key: "agama",
+ name: "Agama",
+ desc: "Agama pemohon",
+ type: "enum",
+ options: enumAgama
+ },
+ { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
+ { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon", type: "text" },
+ { key: "polsek", name: "Polsek Tujuan", desc: "Polsek tujuan pembuatan SKCK", type: "text" }
]
+
},
{
id: "skkematian",
@@ -186,21 +246,27 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nik_pelapor", name: "NIK Pelapor", desc: "Nomor Induk Kependudukan pelapor" },
- { key: "nama_pelapor", name: "Nama Pelapor", desc: "Nama lengkap pelapor" },
- { key: "pekerjaan_pelapor", name: "Pekerjaan Pelapor", desc: "Pekerjaan pelapor" },
- { key: "alamat_pelapor", name: "Alamat Pelapor", desc: "Alamat tempat tinggal pelapor" },
- { key: "hubungan_pelapor", name: "Hubungan dengan Almarhum", desc: "Hubungan pelapor dengan almarhum" },
- { key: "nama_almarhum", name: "Nama Almarhum", desc: "Nama lengkap almarhum" },
- { key: "nik_almarhum", name: "NIK Almarhum", desc: "Nomor Induk Kependudukan almarhum" },
- { key: "tempat_lahir_almarhum", name: "Tempat Lahir Almarhum", desc: "Tempat lahir almarhum" },
- { key: "tanggal_lahir_almarhum", name: "Tanggal Lahir Almarhum", desc: "Tanggal lahir almarhum" },
- { key: "alamat_almarhum", name: "Alamat Almarhum", desc: "Alamat terakhir almarhum" },
- { key: "agama_almarhum", name: "Agama Almarhum", desc: "Agama almarhum" },
- { key: "tanggal_kematian", name: "Tanggal Kematian", desc: "Tanggal meninggal dunia" },
- { key: "waktu_kematian", name: "Waktu Kematian", desc: "Waktu meninggal dunia" },
- { key: "tempat_kematian", name: "Tempat Kematian", desc: "Tempat meninggal dunia" },
- { key: "penyebab_kematian", name: "Penyebab Kematian", desc: "Penyebab meninggal dunia" }
+ { key: "nik_pelapor", name: "NIK Pelapor", desc: "Nomor Induk Kependudukan pelapor", type: "number" },
+ { key: "nama_pelapor", name: "Nama Pelapor", desc: "Nama lengkap pelapor", type: "text" },
+ { key: "pekerjaan_pelapor", name: "Pekerjaan Pelapor", desc: "Pekerjaan pelapor", type: "text" },
+ { key: "alamat_pelapor", name: "Alamat Pelapor", desc: "Alamat tempat tinggal pelapor", type: "text" },
+ { key: "hubungan_pelapor", name: "Hubungan dengan Almarhum", desc: "Hubungan pelapor dengan almarhum", type: "text" },
+ { key: "nama_almarhum", name: "Nama Almarhum", desc: "Nama lengkap almarhum", type: "text" },
+ { key: "nik_almarhum", name: "NIK Almarhum", desc: "Nomor Induk Kependudukan almarhum", type: "number" },
+ { key: "tempat_lahir_almarhum", name: "Tempat Lahir Almarhum", desc: "Tempat lahir almarhum", type: "text" },
+ { key: "tanggal_lahir_almarhum", name: "Tanggal Lahir Almarhum", desc: "Tanggal lahir almarhum", type: "date" },
+ { key: "alamat_almarhum", name: "Alamat Almarhum", desc: "Alamat terakhir almarhum", type: "text" },
+ {
+ key: "agama_almarhum",
+ name: "Agama Almarhum",
+ desc: "Agama almarhum",
+ type: "enum",
+ options: enumAgama
+ },
+ { key: "tanggal_kematian", name: "Tanggal Kematian", desc: "Tanggal meninggal dunia", type: "date" },
+ { key: "waktu_kematian", name: "Waktu Kematian", desc: "Waktu meninggal dunia", type: "text" },
+ { key: "tempat_kematian", name: "Tempat Kematian", desc: "Tempat meninggal dunia", type: "text" },
+ { key: "penyebab_kematian", name: "Penyebab Kematian", desc: "Penyebab meninggal dunia", type: "text" }
]
},
{
@@ -225,14 +291,20 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nama", name: "Nama Lengkap", desc: "Nama pemohon" },
- { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir" },
- { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir" },
- { key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemohon" },
- { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
- { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon/orang tua" },
- { key: "penghasilan", name: "Penghasilan", desc: "Jumlah penghasilan per bulan" },
- { key: "alasan", name: "Alasan Permohonan", desc: "Alasan pengajuan surat penghasilan" }
+ { key: "nama", name: "Nama Lengkap", desc: "Nama pemohon", type: "text" },
+ { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir", type: "text" },
+ { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir", type: "date" },
+ {
+ key: "jenis_kelamin",
+ name: "Jenis Kelamin",
+ desc: "Jenis kelamin pemohon",
+ type: "enum",
+ options: enumJenisKelamin
+ },
+ { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
+ { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemohon/orang tua", type: "text" },
+ { key: "penghasilan", name: "Penghasilan", desc: "Jumlah penghasilan per bulan", type: "number" },
+ { key: "alasan", name: "Alasan Permohonan", desc: "Alasan pengajuan surat penghasilan", type: "text" }
]
},
{
@@ -262,18 +334,18 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
- { key: "nama_pemilik", name: "Nama Pemilik", desc: "Nama pemilik usaha" },
- { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir" },
- { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir" },
- { key: "alamat_pemilik", name: "Alamat Pemilik", desc: "Alamat pemilik usaha" },
- { key: "nama_usaha", name: "Nama Usaha", desc: "Nama usaha" },
- { key: "bidang_usaha", name: "Bidang Usaha", desc: "Bidang atau jenis usaha" },
- { key: "alamat_usaha", name: "Alamat Usaha", desc: "Alamat lokasi usaha" },
- { key: "status_tempat", name: "Status Tempat Usaha", desc: "Status kepemilikan tempat usaha" },
- { key: "luas_usaha", name: "Luas Tempat Usaha", desc: "Luas tempat usaha (m²)" },
- { key: "jumlah_karyawan", name: "Jumlah Karyawan", desc: "Jumlah tenaga kerja" },
- { key: "tujuan", name: "Tujuan Pembuatan Surat", desc: "Tujuan pembuatan surat keterangan" }
+ { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
+ { key: "nama_pemilik", name: "Nama Pemilik", desc: "Nama pemilik usaha", type: "text" },
+ { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir", type: "text" },
+ { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir", type: "date" },
+ { key: "alamat_pemilik", name: "Alamat Pemilik", desc: "Alamat pemilik usaha", type: "text" },
+ { key: "nama_usaha", name: "Nama Usaha", desc: "Nama usaha", type: "text" },
+ { key: "bidang_usaha", name: "Bidang Usaha", desc: "Bidang atau jenis usaha", type: "text" },
+ { key: "alamat_usaha", name: "Alamat Usaha", desc: "Alamat lokasi usaha", type: "text" },
+ { key: "status_tempat", name: "Status Tempat Usaha", desc: "Status kepemilikan tempat usaha", type: "text" },
+ { key: "luas_usaha", name: "Luas Tempat Usaha", desc: "Luas tempat usaha (m²)", type: "number" },
+ { key: "jumlah_karyawan", name: "Jumlah Karyawan", desc: "Jumlah tenaga kerja", type: "number" },
+ { key: "tujuan", name: "Tujuan Pembuatan Surat", desc: "Tujuan pembuatan surat keterangan", type: "text" }
]
},
{
@@ -293,36 +365,12 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- {
- key: "nik",
- name: "NIK",
- desc: "Nomor Induk Kependudukan pemohon"
- },
- {
- key: "nama",
- name: "Nama Lengkap",
- desc: "Nama lengkap pemohon"
- },
- {
- key: "tempat_lahir",
- name: "Tempat Lahir",
- desc: "Tempat lahir pemohon"
- },
- {
- key: "tanggal_lahir",
- name: "Tanggal Lahir",
- desc: "Tanggal lahir pemohon"
- },
- {
- key: "alamat",
- name: "Alamat",
- desc: "Alamat tempat tinggal pemohon"
- },
- {
- key: "alasan",
- name: "Alasan Permohonan",
- desc: "Alasan pengajuan Surat Keterangan Tidak Mampu"
- }
+ { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan pemohon", type: "number" },
+ { key: "nama", name: "Nama Lengkap", desc: "Nama lengkap pemohon", type: "text" },
+ { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir pemohon", type: "text" },
+ { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir pemohon", type: "date" },
+ { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal pemohon", type: "text" },
+ { key: "alasan", name: "Alasan Permohonan", desc: "Alasan pengajuan Surat Keterangan Tidak Mampu", type: "text" }
]
},
{
@@ -347,17 +395,35 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nama", name: "Nama Lengkap", desc: "Nama pemilik usaha" },
- { key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin pemilik usaha" },
- { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir" },
- { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir" },
- { key: "negara", name: "Kewarganegaraan", desc: "Kewarganegaraan pemilik usaha" },
- { key: "agama", name: "Agama", desc: "Agama pemilik usaha" },
- { key: "status_perkawinan", name: "Status Perkawinan", desc: "Status perkawinan" },
- { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
- { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemilik usaha" },
- { key: "jenis_usaha", name: "Jenis Usaha", desc: "Jenis usaha yang dijalankan" },
- { key: "alamat_usaha", name: "Alamat Usaha", desc: "Alamat lokasi usaha" }
+ { key: "nama", name: "Nama Lengkap", desc: "Nama pemilik usaha", type: "text" },
+ {
+ key: "jenis_kelamin",
+ name: "Jenis Kelamin",
+ desc: "Jenis kelamin pemilik usaha",
+ type: "enum",
+ options: enumJenisKelamin
+ },
+ { key: "tempat_lahir", name: "Tempat Lahir", desc: "Tempat lahir", type: "text" },
+ { key: "tanggal_lahir", name: "Tanggal Lahir", desc: "Tanggal lahir", type: "date" },
+ { key: "negara", name: "Kewarganegaraan", desc: "Kewarganegaraan pemilik usaha", type: "text" },
+ {
+ key: "agama",
+ name: "Agama",
+ desc: "Agama pemilik usaha",
+ type: "enum",
+ options: enumAgama
+ },
+ {
+ key: "status_perkawinan",
+ name: "Status Perkawinan",
+ desc: "Status perkawinan",
+ type: "enum",
+ options: enumStatusPerkawinan
+ },
+ { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
+ { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan pemilik usaha", type: "text" },
+ { key: "jenis_usaha", name: "Jenis Usaha", desc: "Jenis usaha yang dijalankan", type: "text" },
+ { key: "alamat_usaha", name: "Alamat Usaha", desc: "Alamat lokasi usaha", type: "text" }
]
},
{
@@ -377,17 +443,37 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
- { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
- { key: "nama", name: "Nama Lengkap", desc: "Nama anak" },
- { key: "tempat_lahir", name: "Tempat Lahir Anak", desc: "Tempat lahir anak" },
- { key: "tanggal_lahir", name: "Tanggal Lahir Anak", desc: "Tanggal lahir anak" },
- { key: "jenis_kelamin", name: "Jenis Kelamin", desc: "Jenis kelamin anak" },
- { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal" },
- { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan (jika ada)" },
- { key: "nama_ayah", name: "Nama Ayah", desc: "Nama ayah kandung" },
- { key: "status_ayah", name: "Status Ayah", desc: "Status ayah (hidup / meninggal)" },
- { key: "nama_ibu", name: "Nama Ibu", desc: "Nama ibu kandung" },
- { key: "status_ibu", name: "Status Ibu", desc: "Status ibu (hidup / meninggal)" }
+ { key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan", type: "number" },
+ { key: "nama", name: "Nama Lengkap", desc: "Nama anak", type: "text" },
+ { key: "tempat_lahir", name: "Tempat Lahir Anak", desc: "Tempat lahir anak", type: "text" },
+ { key: "tanggal_lahir", name: "Tanggal Lahir Anak", desc: "Tanggal lahir anak", type: "date" },
+ {
+ key: "jenis_kelamin",
+ name: "Jenis Kelamin",
+ desc: "Jenis kelamin anak",
+ type: "enum",
+ options: enumJenisKelamin
+ },
+ { key: "alamat", name: "Alamat", desc: "Alamat tempat tinggal", type: "text" },
+ { key: "pekerjaan", name: "Pekerjaan", desc: "Pekerjaan (jika ada)", type: "text" },
+
+ { key: "nama_ayah", name: "Nama Ayah", desc: "Nama ayah kandung", type: "text" },
+ {
+ key: "status_ayah",
+ name: "Status Ayah",
+ desc: "Status ayah (hidup / meninggal)",
+ type: "enum",
+ options: enumStatusHidup
+ },
+ { key: "nama_ibu", name: "Nama Ibu", desc: "Nama ibu kandung", type: "text" },
+ {
+ key: "status_ibu",
+ name: "Status Ibu",
+ desc: "Status ibu (hidup / meninggal)",
+ type: "enum",
+ options: enumStatusHidup
+ }
]
+
}
];
diff --git a/src/lib/valueEnum.ts b/src/lib/valueEnum.ts
new file mode 100644
index 0000000..01c84ca
--- /dev/null
+++ b/src/lib/valueEnum.ts
@@ -0,0 +1,25 @@
+export const enumJenisKelamin = [
+ { label: "Laki-laki", value: "Laki-laki" },
+ { label: "Perempuan", value: "Perempuan" }
+];
+
+export const enumAgama = [
+ { label: "Islam", value: "Islam" },
+ { label: "Kristen", value: "Kristen" },
+ { label: "Katolik", value: "Katolik" },
+ { label: "Hindu", value: "Hindu" },
+ { label: "Buddha", value: "Buddha" },
+ { label: "Konghucu", value: "Konghucu" }
+];
+
+export const enumStatusHidup = [
+ { label: "Hidup", value: "Hidup" },
+ { label: "Meninggal", value: "Meninggal" }
+];
+
+export const enumStatusPerkawinan = [
+ { label: "Belum Kawin", value: "Belum Kawin" },
+ { label: "Kawin", value: "Kawin" },
+ { label: "Cerai Hidup", value: "Cerai Hidup" },
+ { label: "Cerai Mati", value: "Cerai Mati" }
+];
diff --git a/src/pages/darmasaba/surat.tsx b/src/pages/darmasaba/surat.tsx
index 167dda6..0b6d33b 100644
--- a/src/pages/darmasaba/surat.tsx
+++ b/src/pages/darmasaba/surat.tsx
@@ -22,13 +22,19 @@ import {
TextInput,
Tooltip,
} from "@mantine/core";
+import { DateInput } from "@mantine/dates";
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import {
IconBuildingCommunity,
+ IconCategory,
+ IconFiles,
IconInfoCircle,
- IconUpload,
- IconUser,
+ IconNotes,
+ IconPhone,
+ IconUpload
} from "@tabler/icons-react";
+import dayjs from "dayjs";
+import "dayjs/locale/id";
import React, { useState } from "react";
import { useLocation, useNavigate } from "react-router-dom";
import useSWR from "swr";
@@ -310,44 +316,15 @@ export default function FormSurat() {
- Form Length: 3 Sections
+ Form Length: 4 Sections
- {/* Header Section */}
}
- description="Informasi identitas pemohon"
+ title="Jenis Surat Pengajuan"
+ icon={ }
>
-
- }
- placeholder="Budi Setiawan"
- value={formSurat.nama}
- onChange={(e) =>
- validationForm({ key: "nama", value: e.target.value })
- }
- />
-
-
-
-
- }
- placeholder="08123456789"
- value={formSurat.phone}
- onChange={(e) =>
- validationForm({ key: "phone", value: e.target.value })
- }
- />
-
-
+
+ {/* Kontak Section */}
+ }
+ description="Informasi kontak yg dapat dihubungi"
+ >
+
+
+ }
+ placeholder="Budi Setiawan"
+ value={formSurat.nama}
+ onChange={(e) =>
+ validationForm({ key: "nama", value: e.target.value })
+ }
+ />
+
+
+
+
+ }
+ placeholder="08123456789"
+ value={formSurat.phone}
+ onChange={(e) =>
+ validationForm({ key: "phone", value: e.target.value })
+ }
+ />
+
+
+
+
{jenisSuratFix.id != "" && dataSurat && dataSurat.dataPelengkap && (
<>
}
>
{dataSurat.dataPelengkap.map((item: any, index: number) => (
-
- }
- placeholder={item.name}
- onChange={(e) =>
- validationForm({
- key: "dataPelengkap",
- value: { key: item.key, value: e.target.value },
- })
- }
- value={
- formSurat.dataPelengkap.find(
- (n: any) => n.key == item.key,
- )?.value
- }
- />
+ {
+ item.type == "enum"
+ ?
+
+ }
+ data={item.options ?? []}
+ placeholder={item.name}
+ onChange={(e) => {
+ validationForm({
+ key: "dataPelengkap",
+ value: { key: item.key, value: e }
+ })
+ }}
+ value={formSurat.dataPelengkap.find((n: any) => n.key == item.key)?.value}
+ />
+ : item.type == "date"
+ ?
+
+ }
+ placeholder={item.name}
+ onChange={(e) => {
+ const formatted = e
+ ? dayjs(e).locale("id").format("DD MMMM YYYY")
+ : "";
+ validationForm({
+ key: "dataPelengkap",
+ value: { key: item.key, value: formatted },
+ })
+ }}
+ />
+ :
+
+ }
+ placeholder={item.name}
+ onChange={(e) =>
+ validationForm({
+ key: "dataPelengkap",
+ value: { key: item.key, value: e.target.value },
+ })
+ }
+ value={
+ formSurat.dataPelengkap.find(
+ (n: any) => n.key == item.key,
+ )?.value
+ }
+ />
+ }
+
))}
@@ -405,6 +460,7 @@ export default function FormSurat() {
}
>
{dataSurat.syaratDokumen.map((item: any, index: number) => (
diff --git a/src/pages/darmasaba/update_data_surat.tsx b/src/pages/darmasaba/update_data_surat.tsx
index ee135a9..43b4aae 100644
--- a/src/pages/darmasaba/update_data_surat.tsx
+++ b/src/pages/darmasaba/update_data_surat.tsx
@@ -1,8 +1,10 @@
import FullScreenLoading from "@/components/FullScreenLoading";
import ModalFile from "@/components/ModalFile";
+import { DataNotFound } from "@/components/NotFoundPengajuanSurat";
import notification from "@/components/notificationGlobal";
import SuccessPengajuan from "@/components/SuccessPengajuanSurat";
import apiFetch from "@/lib/apiFetch";
+import { parseTanggalID } from "@/server/lib/stringToDate";
import {
ActionIcon,
Alert,
@@ -18,17 +20,23 @@ import {
Grid,
Group,
Modal,
+ Select,
Stack,
Text,
TextInput,
Tooltip
} from "@mantine/core";
+import { DateInput } from "@mantine/dates";
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import {
IconBuildingCommunity,
+ IconFiles,
IconInfoCircle,
+ IconNotes,
IconUpload
} from "@tabler/icons-react";
+import dayjs from "dayjs";
+import "dayjs/locale/id";
import _ from "lodash";
import React, { useState } from "react";
import { useLocation, useNavigate } from "react-router-dom";
@@ -72,34 +80,41 @@ export default function UpdateDataSurat() {
const { search } = useLocation();
const query = new URLSearchParams(search);
const noPengajuan = query.get("pengajuan");
+ const [found, setFound] = useState(true);
return (
-
-
-
-
-
- Update Data Pengajuan Surat Administrasi
-
-
- Formulir ini digunakan untuk memperbarui data pengajuan surat administrasi yang telah diajukan sebelumnya.
-
-
+ {
+ found &&
+
+
+
+
+
+ Update Data Pengajuan Surat Administrasi
+
+
+ Formulir ini digunakan untuk memperbarui data pengajuan surat administrasi yang telah diajukan sebelumnya.
+
+
+
-
+ }
{
!noPengajuan ? (
)
:
-
+ found ? (
+ { setFound(e) }} />
+ ) : (
+ navigate("/darmasaba/update-data-surat")} />
+ )
}
-
@@ -338,7 +353,7 @@ function SearchData() {
}
-function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
+function DataUpdate({ noPengajuan, onValidate }: { noPengajuan: string, onValidate: (e: boolean) => void }) {
const [opened, { open, close }] = useDisclosure(false)
const navigate = useNavigate()
const [sukses, setSukses] = useState(false)
@@ -356,20 +371,23 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
try {
const res = await apiFetch.api.pelayanan["detail-data"].post({ nomerPengajuan: noPengajuan });
if (res.data && res.data.success === true) {
+ onValidate(true)
setDataPelengkap(res.data.dataPelengkap || []);
setDataSyaratDokumen(res.data.syaratDokumen || []);
setDataPengajuan(res.data.pengajuan || {});
setStatus(res.data.pengajuan && 'status' in res.data.pengajuan ? res.data.pengajuan.status : "");
} else {
- notification({
- title: "Error",
- message: res.data?.message || "Gagal memuat data",
- type: "error",
- });
+ // notification({
+ // title: "Error",
+ // message: res.data?.message || "Gagal memuat data",
+ // type: "error",
+ // });
+ onValidate(false)
setDataPelengkap([]);
setDataSyaratDokumen([]);
setDataPengajuan({});
+
}
} catch (error) {
console.error('Error fetching data:', error);
@@ -559,26 +577,73 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
&& ⚠} />
}
}
>
{dataPelengkap.map((item: any, index: number) => (
-
- }
- placeholder={item.name}
- onChange={(e) =>
- validationForm({
- kategori: "dataPelengkap",
- value: { id: item.id, key: item.key, value: e.target.value },
- })
- }
- value={formSurat.dataPelengkap.find((n) => n.id === item.id)?.value ?? dataPelengkap.find((n: any) => n.key == item.key,)?.value}
- disabled={status != "ditolak" && status != "antrian"}
- />
+ {
+ item.type == "enum"
+ ?
+
+ }
+ data={item.options ?? []}
+ placeholder={item.name}
+ onChange={(e) => {
+ validationForm({
+ kategori: "dataPelengkap",
+ value: { id: item.id, key: item.key, value: e }
+ })
+ }}
+ value={formSurat.dataPelengkap.find((n: any) => n.key == item.key)?.value || dataPelengkap.find((n: any) => n.key == item.key)?.value}
+ />
+ : item.type == "date"
+ ?
+
+ }
+ placeholder={item.name}
+ onChange={(e) => {
+ const formatted = e
+ ? dayjs(e).locale("id").format("DD MMMM YYYY")
+ : "";
+ validationForm({
+ kategori: "dataPelengkap",
+ value: { id: item.id, key: item.key, value: formatted },
+ })
+ }}
+ value={
+ formSurat.dataPelengkap.find((n: any) => n.key === item.key)?.value ?
+ parseTanggalID(
+ formSurat.dataPelengkap.find((n: any) => n.key === item.key)?.value
+ ) :
+ parseTanggalID(
+ item.value
+ )
+ }
+ />
+ :
+ }
+ placeholder={item.name}
+ onChange={(e) =>
+ validationForm({
+ kategori: "dataPelengkap",
+ value: { id: item.id, key: item.key, value: e.target.value },
+ })
+ }
+ value={formSurat.dataPelengkap.find((n) => n.id === item.id)?.value ?? dataPelengkap.find((n: any) => n.key == item.key,)?.value}
+ disabled={status != "ditolak" && status != "antrian"}
+ />
+ }
))}
@@ -587,6 +652,7 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
}
>
{dataSyaratDokumen.map((item: any, index: number) => (
@@ -611,7 +677,7 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
- { onChecking() }}>Kirim
+ { onChecking() }} disabled={status != "ditolak" && status != "antrian"}>Kirim
>
}
diff --git a/src/server/lib/stringToDate.ts b/src/server/lib/stringToDate.ts
new file mode 100644
index 0000000..d83d696
--- /dev/null
+++ b/src/server/lib/stringToDate.ts
@@ -0,0 +1,11 @@
+import dayjs from "dayjs";
+import customParseFormat from "dayjs/plugin/customParseFormat";
+import "dayjs/locale/id";
+dayjs.extend(customParseFormat);
+
+export function parseTanggalID( value: string ): Date | null {
+ if (!value) return null;
+
+ const parsed = dayjs(value, "DD MMMM YYYY", "id", true);
+ return parsed.isValid() ? parsed.toDate() : null;
+}
diff --git a/src/server/routes/pelayanan_surat_route.ts b/src/server/routes/pelayanan_surat_route.ts
index 13a2038..b3f9e09 100644
--- a/src/server/routes/pelayanan_surat_route.ts
+++ b/src/server/routes/pelayanan_surat_route.ts
@@ -334,7 +334,6 @@ const PelayananRoute = new Elysia({
.map(({ order, ...rest }) => rest); // hapus order
- console.log(dataTextFix)
const dataHistory = await prisma.historyPelayanan.findMany({
where: {
idPengajuanLayanan: data?.id,
@@ -689,6 +688,11 @@ const PelayananRoute = new Elysia({
})
const dataPelengkapList = (data?.CategoryPelayanan?.dataPelengkap ?? []) as {
+ type: string;
+ options?: {
+ label: string,
+ value: string
+ }[];
name: string;
desc: string;
key: string;
@@ -711,6 +715,8 @@ const PelayananRoute = new Elysia({
value: item.value,
desc: ref?.desc ?? "",
name: ref?.name ?? "",
+ type: ref?.type ?? "",
+ options: ref?.options ?? [],
order: ref?.order ?? Infinity,
};
})