Compare commits

...

6 Commits

Author SHA1 Message Date
c074e2bc0a upd : update pengajuan surat
deskripsi:
- update type form pada tambah dan update pengajuan surat
- tampilan klo tidak ada data yg dicari pada update pengajuan surat
- update seeder category pengajuan surat

No Issues
2025-12-24 17:29:25 +08:00
bab832b87f Merge pull request 'amalia/23-des-25' (#94) from amalia/23-des-25 into main
Reviewed-on: http://wibugit.wibudev.com/wibu/jenna-mcp/pulls/94
2025-12-23 17:51:17 +08:00
8bafb88086 upd: template surat 2025-12-23 17:50:01 +08:00
777f2c04f1 upd: update kategori pelayanan surat
Deskripsi:
- update data seeder kategori pelayanan
- view more pada riwayat pengajuan surat dan pengaduan
- sort data pada api detail riwayat pengajuan surat dan pengaduan

No Issues
2025-12-23 14:33:38 +08:00
a81f6c4255 upd : setting kategori pelayanan surat
Deskripsi:
- disable tambah kategori pengajuan surat
- disable edit kategori pengajuan surat
- update json permission

No Issues
2025-12-23 11:42:30 +08:00
0f1b0196e7 Merge pull request 'amalia/22-des-25' (#93) from amalia/22-des-25 into main
Reviewed-on: http://wibugit.wibudev.com/wibu/jenna-mcp/pulls/93
2025-12-22 17:39:31 +08:00
26 changed files with 1102 additions and 401 deletions

310
bak/listPermission.json.txt Normal file
View File

@@ -0,0 +1,310 @@
{
"menus": [
{
"key": "dashboard",
"label": "Dashboard",
"default": true,
"children": [
{
"key": "dashboard.view",
"label": "Melihat Dashboard",
"default": true
}
]
},
{
"key": "pengaduan",
"label": "Pengaduan",
"default": true,
"children": [
{
"key": "pengaduan.view",
"label": "Melihat List & Detail",
"default": true
},
{
"key": "pengaduan.antrian",
"label": "Detail pengaduan dengan status antrian",
"default": true,
"children": [
{
"key": "pengaduan.antrian.tolak",
"label": "Menolak pengaduan",
"default": true
},
{
"key": "pengaduan.antrian.terima",
"label": "Menerima pengaduan",
"default": true
}
]
},
{
"key": "pengaduan.diterima",
"label": "Detail pengaduan dengan status diterima",
"default": true,
"children": [
{
"key": "pengaduan.diterima.dikerjakan",
"label": "Menegerjakan pengaduan",
"default": true
}
]
},
{
"key": "pengaduan.dikerjakan",
"label": "Detail pengaduan dengan status dikerjakan",
"default": true,
"children": [
{
"key": "pengaduan.dikerjakan.selesai",
"label": "Menyelesaikan pengaduan",
"default": true
}
]
}
]
},
{
"key": "pelayanan",
"label": "Pelayanan",
"default": true,
"children": [
{
"key": "pelayanan.view",
"label": "Melihat List & Detail",
"default": true
},
{
"key": "pelayanan.antrian",
"label": "Detail pelayanan dengan status antrian",
"default": true,
"children": [
{
"key": "pelayanan.antrian.tolak",
"label": "Menolak pelayanan",
"default": true
},
{
"key": "pelayanan.antrian.terima",
"label": "Menerima pelayanan",
"default": true
}
]
},
{
"key": "pelayanan.diterima",
"label": "Detail pelayanan dengan status diterima",
"default": true,
"children": [
{
"key": "pelayanan.diterima.tolak",
"label": "Menolak pelayanan",
"default": true
},
{
"key": "pelayanan.diterima.setujui",
"label": "Menyetujui pelayanan",
"default": true
}
]
}
]
},
{
"key": "warga",
"label": "Warga",
"default": true,
"children": [
{
"key": "warga.view",
"label": "Melihat List & Detail",
"default": true
}
]
},
{
"key": "setting",
"label": "Setting",
"default": true,
"children": [
{
"key": "setting.profile",
"label": "Profile",
"default": true,
"children": [
{
"key": "setting.profile.view",
"label": "View",
"default": true
},
{
"key": "setting.profile.edit",
"label": "Edit",
"default": true
},
{
"key": "setting.profile.password",
"label": "Ubah Password",
"default": true
}
]
},
{
"key": "setting.user",
"label": "User",
"default": true,
"children": [
{
"key": "setting.user.view",
"label": "View List",
"default": true
},
{
"key": "setting.user.tambah",
"label": "Tambah",
"default": true
},
{
"key": "setting.user.edit",
"label": "Edit",
"default": true
},
{
"key": "setting.user.delete",
"label": "Delete",
"default": true
}
]
},
{
"key": "setting.user_role",
"label": "User Role",
"default": true,
"children": [
{
"key": "setting.user_role.view",
"label": "View List",
"default": true
},
{
"key": "setting.user_role.tambah",
"label": "Tambah",
"default": true
},
{
"key": "setting.user_role.edit",
"label": "Edit",
"default": true
},
{
"key": "setting.user_role.delete",
"label": "Delete",
"default": true
}
]
},
{
"key": "setting.kategori_pengaduan",
"label": "Kategori Pengaduan",
"default": true,
"children": [
{
"key": "setting.kategori_pengaduan.view",
"label": "View List",
"default": true
},
{
"key": "setting.kategori_pengaduan.tambah",
"label": "Tambah",
"default": true
},
{
"key": "setting.kategori_pengaduan.edit",
"label": "Edit",
"default": true
},
{
"key": "setting.kategori_pengaduan.delete",
"label": "Delete",
"default": true
}
]
},
{
"key": "setting.kategori_pelayanan",
"label": "Kategori Pelayanan Surat",
"default": true,
"children": [
{
"key": "setting.kategori_pelayanan.view",
"label": "View List",
"default": true
},
{
"key": "setting.kategori_pelayanan.detail",
"label": "View Detail",
"default": true
},
{
"key": "setting.kategori_pelayanan.tambah",
"label": "Tambah",
"default": true
},
{
"key": "setting.kategori_pelayanan.edit",
"label": "Edit",
"default": true
},
{
"key": "setting.kategori_pelayanan.delete",
"label": "Delete",
"default": true
}
]
},
{
"key": "setting.desa",
"label": "Desa",
"default": true,
"children": [
{
"key": "setting.desa.view",
"label": "View List",
"default": true
},
{
"key": "setting.desa.edit",
"label": "Edit",
"default": true
}
]
}
]
},
{
"key": "api_key",
"label": "API Key",
"default": true,
"children": [
{
"key": "api_key.view",
"label": "View List",
"default": true
}
]
},
{
"key": "credential",
"label": "Credential",
"default": true,
"children": [
{
"key": "credential.view",
"label": "View List",
"default": true
}
]
}
]
}

View File

@@ -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",

View File

@@ -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",

View File

@@ -216,7 +216,7 @@ export default function KategoriPelayananSurat({
return (
<>
{/* Modal Edit */}
<Modal
{/* <Modal
opened={opened}
onClose={close}
title={"Edit"}
@@ -232,15 +232,85 @@ export default function KategoriPelayananSurat({
}
/>
</Input.Wrapper>
{/* <TagsInput
label="Data Pelengkap"
placeholder="Tambah data pelengkap"
splitChars={[","]}
value={dataChoose.dataPelengkap}
onChange={(value) =>
setDataChoose({ ...dataChoose, dataPelengkap: value })
}
/> */}
<Flex direction={"column"} gap={"md"}>
<Group>
<Text size="sm" c={"white"}>
Data Pelengkap
</Text>
<Tooltip label="Tambah Data Pelengkap">
<ActionIcon
variant="light"
size="sm"
color="blue"
style={{ boxShadow: "0 0 8px rgba(0,255,200,0.2)" }}
onClick={handleAddSyarat}
>
<IconPlus size={20} />
</ActionIcon>
</Tooltip>
</Group>
{dataChoose?.dataPelengkap?.map((v: any, i: number) => (
<Grid
key={i}
style={{
borderBottom: "1px solid gray",
paddingBottom: "10px",
}}
>
<Grid.Col
span={1}
style={{
display: "flex",
alignItems: "center",
justifyContent: "center",
}}
>
<Tooltip label="Delete Syarat Dokumen">
<ActionIcon
variant="light"
size="sm"
color="red"
style={{ boxShadow: "0 0 8px rgba(0,255,200,0.2)" }}
onClick={() => {
handleDeleteSyarat(i);
}}
>
<IconTrash size={20} />
</ActionIcon>
</Tooltip>
</Grid.Col>
<Grid.Col span={5}>
<Input.Wrapper label="Label">
<Input
value={v.name}
onChange={(e) =>
handleEditSyarat(i, {
key: v.key,
name: e.target.value,
desc: v.desc,
})
}
/>
</Input.Wrapper>
</Grid.Col>
<Grid.Col span={6}>
<Input.Wrapper label="Deskripsi">
<Input
value={v.desc}
onChange={(e) =>
handleEditSyarat(i, {
key: v.key,
name: v.name,
desc: e.target.value,
})
}
/>
</Input.Wrapper>
</Grid.Col>
</Grid>
))}
</Flex>
<Flex direction={"column"} gap={"md"}>
<Group>
<Text size="sm" c={"white"}>
@@ -289,7 +359,7 @@ export default function KategoriPelayananSurat({
</Tooltip>
</Grid.Col>
<Grid.Col span={5}>
<Input.Wrapper label="Nama">
<Input.Wrapper label="Label">
<Input
value={v.name}
onChange={(e) =>
@@ -329,10 +399,10 @@ export default function KategoriPelayananSurat({
</Button>
</Group>
</Stack>
</Modal>
</Modal> */}
{/* Modal Tambah */}
<Modal
{/* <Modal
opened={openedTambah}
onClose={closeTambah}
title={"Tambah"}
@@ -348,15 +418,6 @@ export default function KategoriPelayananSurat({
}
/>
</Input.Wrapper>
{/* <TagsInput
label="Data Pelengkap"
placeholder="Tambah data pelengkap"
splitChars={[","]}
value={dataTambah.dataText}
onChange={(value) =>
setDataTambah({ ...dataTambah, dataText: value })
}
/> */}
<Flex direction={"column"} gap={"md"}>
<Group>
<Text size="sm" c={"white"}>
@@ -466,7 +527,7 @@ export default function KategoriPelayananSurat({
</Button>
</Group>
</Stack>
</Modal>
</Modal> */}
{/* Modal Delete */}
<Modal
@@ -539,7 +600,7 @@ export default function KategoriPelayananSurat({
<Title order={4} c="gray.2">
Kategori Pelayanan Surat
</Title>
{permissions.includes("setting.kategori_pelayanan.tambah") && (
{/* {permissions.includes("setting.kategori_pelayanan.tambah") && (
<Tooltip label="Tambah Kategori Pelayanan Surat">
<Button
variant="light"
@@ -549,7 +610,7 @@ export default function KategoriPelayananSurat({
Tambah
</Button>
</Tooltip>
)}
)} */}
</Flex>
<Divider my={0} />
<Stack gap={"md"}>
@@ -580,7 +641,7 @@ export default function KategoriPelayananSurat({
<IconEye size={20} />
</ActionIcon>
</Tooltip>
<Tooltip
{/* <Tooltip
label={
permissions.includes(
"setting.kategori_pelayanan.edit",
@@ -605,7 +666,7 @@ export default function KategoriPelayananSurat({
>
<IconEdit size={20} />
</ActionIcon>
</Tooltip>
</Tooltip> */}
<Tooltip
label={
permissions.includes(

View File

@@ -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 (
<Center mih={320}>
<Stack align="center" gap="sm">
<IconSearch size={64} opacity={0.5} />
<Title order={4}>Data Pengajuan Tidak Ditemukan</Title>
<Text size="sm" c="dimmed" ta="center" maw={380}>
Kami tidak dapat menemukan data pengajuan dengan nomor pengajuan yg diinputkan. Silakan periksa kembali data Anda.
</Text>
<Group mt="md">
{/* {onRetry && (
<Button
variant="light"
leftSection={<IconSearch size={16} />}
onClick={onRetry}
>
Cari Ulang
</Button>
)} */}
<Button
variant="outline"
// leftSection={<IconArrowLeft size={16} />}
onClick={backTo}
>
Cari Kembali
</Button>
</Group>
</Stack>
</Center>
)
}

View File

@@ -7,7 +7,7 @@ export default function SKBedaBiodataDiri({ data }: { data: any }) {
const getValue = (jenis: string) =>
_.upperFirst(
data.surat.dataText.find((item: any) => item.jenis === jenis)?.value ||
"",
"",
);
const loadImage = async () => {
@@ -108,12 +108,12 @@ export default function SKBedaBiodataDiri({ data }: { data: any }) {
<tr>
<td>Tempat/Tanggal Lahir</td>
<td>:</td>
<td>{getValue("tempat tanggal lahir")}</td>
<td>{`${getValue("tempat_lahir")}, ${getValue("tanggal_lahir")}`}</td>
</tr>
<tr>
<td>Jenis Kelamin</td>
<td>:</td>
<td>{getValue("jenis kelamin")}</td>
<td>{getValue("jenis_kelamin")}</td>
</tr>
<tr>
<td>Alamat</td>
@@ -144,36 +144,38 @@ export default function SKBedaBiodataDiri({ data }: { data: any }) {
<table style={{ width: "100%", marginTop: "5px" }}>
<tbody>
<tr>
<td style={{ width: "160px" }}>1. Nama</td>
<td style={{ width: "10px" }}>:</td>
<td>{getValue("nama")}</td>
<td style={{ width: "160px" }}>1. {getValue("data_dokumen")}</td>
<td style={{ width: "10px" }}></td>
<td>
{/* {getValue("nama")} */}
</td>
</tr>
<tr>
<td>Tertulis pada dokumen A</td>
<td>:</td>
<td>{getValue("tertulis pada dokumen a")}</td>
<td>{getValue("dokumen_a")}</td>
</tr>
<tr>
<td>Tertulis pada dokumen B</td>
<td>:</td>
<td>{getValue("tertulis pada dokumen b")}</td>
<td>{getValue("dokumen_b")}</td>
</tr>
</tbody>
</table>
</div>
<div style={{ marginTop: "15px" }}>
{/* <div style={{ marginTop: "15px" }}>
<table style={{ width: "100%", marginTop: "5px" }}>
<tbody>
<tr>
<td style={{ width: "160px" }}>2. Tempat/Tanggal Lahir</td>
<td style={{ width: "10px" }}>:</td>
<td>{getValue("tempat tanggal lahir")}</td>
<td>{getValue("tempat_lahir")}</td>
</tr>
<tr>
<td>Tertulis pada dokumen A</td>
<td>:</td>
<td>{getValue("tertulis pada dokumen a")}</td>
<td>{getValue("dokumen_a")}</td>
</tr>
<tr>
<td>Tertulis pada dokumen B</td>
@@ -204,7 +206,7 @@ export default function SKBedaBiodataDiri({ data }: { data: any }) {
</tr>
</tbody>
</table>
</div>
</div> */}
<div style={{ marginTop: "15px" }}>
Perbedaan tersebut terjadi karena{" "}

View File

@@ -7,7 +7,7 @@ export default function SKBelumKawin({ data }: { data: any }) {
const getValue = (jenis: string) =>
_.upperFirst(
data.surat.dataText.find((item: any) => item.jenis === jenis)?.value ||
"",
"",
);
const loadImage = async () => {
@@ -87,12 +87,12 @@ export default function SKBelumKawin({ data }: { data: any }) {
<tr>
<td>Tempat/Tanggal Lahir</td>
<td>:</td>
<td>{getValue("tempat tanggal lahir")}</td>
<td>{`${getValue("tempat_lahir")}, ${getValue("tanggal_lahir")}`}</td>
</tr>
<tr>
<td>Jenis Kelamin</td>
<td>:</td>
<td>{getValue("jenis kelamin")}</td>
<td>{getValue("jenis_kelamin")}</td>
</tr>
<tr>
<td>Agama</td>

View File

@@ -95,27 +95,27 @@ export default function SKDomisiliOrganisasi({ data }: { data: any }) {
<tr>
<td style={{ width: "160px" }}>Nama Organisasi</td>
<td style={{ width: "10px" }}>:</td>
<td>{getValue("nama")}</td>
<td>{getValue("nama_organisasi")}</td>
</tr>
<tr>
<td>Jenis Organisasi</td>
<td>:</td>
<td>{getValue("jenis kelamin")}</td>
<td>{getValue("jenis_organisasi")}</td>
</tr>
<tr>
<td>Alamat</td>
<td>:</td>
<td>{getValue("tempat tanggal lahir")}</td>
<td>{getValue("alamat_organisasi")}</td>
</tr>
<tr>
<td>Nomor Telepon</td>
<td>:</td>
<td>{getValue("negara")}</td>
<td>{getValue("no_telepon")}</td>
</tr>
<tr>
<td>Nama Pimpinan</td>
<td>:</td>
<td>{getValue("agama")}</td>
<td>{getValue("nama_pimpinan")}</td>
</tr>
</tbody>
</table>

View File

@@ -78,32 +78,32 @@ export default function SKKelahiran({ data }: { data: any }) {
<tr>
<td style={{ width: "200px" }}>Tanggal Lahir</td>
<td>:</td>
<td>{getValue("tanggal lahir anak")}</td>
<td>{getValue("tanggal_lahir_anak")}</td>
</tr>
<tr>
<td>Pukul</td>
<td>:</td>
<td>{getValue("pukul lahir anak")}</td>
<td>{getValue("pukul_lahir")}</td>
</tr>
<tr>
<td>Tempat Kelahiran</td>
<td>:</td>
<td>{getValue("tempat lahir anak")}</td>
<td>{getValue("tempat_lahir")}</td>
</tr>
<tr>
<td>Jenis Kelamin</td>
<td>:</td>
<td>{getValue("jenis kelamin anak")}</td>
<td>{getValue("jenis_kelamin")}</td>
</tr>
<tr>
<td>Anak ke</td>
<td>:</td>
<td>{getValue("anak ke")}</td>
<td>{getValue("anak_ke")}</td>
</tr>
<tr>
<td>Nama Anak</td>
<td>:</td>
<td>{getValue("nama anak")}</td>
<td>{getValue("nama_anak")}</td>
</tr>
</tbody>
</table>
@@ -117,27 +117,27 @@ export default function SKKelahiran({ data }: { data: any }) {
<tr>
<td style={{ width: "200px" }}>Nama Lengkap Ibu</td>
<td>:</td>
<td>{getValue("nama ibu")}</td>
<td>{getValue("nama_ibu")}</td>
</tr>
<tr>
<td>NIK</td>
<td>:</td>
<td>{getValue("nik ibu")}</td>
<td>{getValue("nik_ibu")}</td>
</tr>
<tr>
<td>Tempat & Tanggal Lahir</td>
<td>:</td>
<td>{getValue("tempat tanggal lahir ibu")}</td>
<td>{`${getValue("tempat_lahir_ibu")}, ${getValue("tanggal_lahir_ibu")}`}</td>
</tr>
<tr>
<td>Pekerjaan</td>
<td>:</td>
<td>{getValue("pekerjaan ibu")}</td>
<td>{getValue("pekerjaan_ibu")}</td>
</tr>
<tr>
<td>Alamat</td>
<td>:</td>
<td>{getValue("alamat ibu")}</td>
<td>{getValue("alamat_ibu")}</td>
</tr>
</tbody>
</table>
@@ -151,27 +151,27 @@ export default function SKKelahiran({ data }: { data: any }) {
<tr>
<td style={{ width: "200px" }}>Nama Lengkap Ayah</td>
<td>:</td>
<td>{getValue("nama ayah")}</td>
<td>{getValue("nama_ayah")}</td>
</tr>
<tr>
<td>NIK</td>
<td>:</td>
<td>{getValue("nik ayah")}</td>
<td>{getValue("nik_ayah")}</td>
</tr>
<tr>
<td>Tempat & Tanggal Lahir</td>
<td>:</td>
<td>{getValue("tempat tanggal lahir ayah")}</td>
<td>{`${getValue("tempat_lahir_ayah")}, ${"tanggal_lahir_ayah"}`}</td>
</tr>
<tr>
<td>Pekerjaan</td>
<td>:</td>
<td>{getValue("pekerjaan ayah")}</td>
<td>{getValue("pekerjaan_ayah")}</td>
</tr>
<tr>
<td>Alamat</td>
<td>:</td>
<td>{getValue("alamat ayah")}</td>
<td>{getValue("alamat_ayah")}</td>
</tr>
</tbody>
</table>
@@ -185,17 +185,17 @@ export default function SKKelahiran({ data }: { data: any }) {
<tr>
<td style={{ width: "200px" }}>Nama Pelapor</td>
<td>:</td>
<td>{getValue("nama pelapor")}</td>
<td>{getValue("nama_pelapor")}</td>
</tr>
<tr>
<td>Hubungan dengan Anak</td>
<td>:</td>
<td>{getValue("hubungan pelapor")}</td>
<td>{getValue("hubungan_pelapor")}</td>
</tr>
<tr>
<td>Alamat</td>
<td>:</td>
<td>{getValue("alamat pelapor")}</td>
<td>{getValue("alamat_pelapor")}</td>
</tr>
</tbody>
</table>

View File

@@ -71,12 +71,12 @@ export default function SKKelakuanBaik({ data }: { data: any }) {
<tr>
<td>Tempat/Tgl Lahir</td>
<td>:</td>
<td>{getValue("tempat tanggal lahir")}</td>
<td>{`${getValue("tempat_lahir")}, ${getValue("tanggal_lahir")}`}</td>
</tr>
<tr>
<td>Jenis Kelamin</td>
<td>:</td>
<td>{getValue("jenis kelamin")}</td>
<td>{getValue("jenis_kelamin")}</td>
</tr>
<tr>
<td>Agama</td>

View File

@@ -7,7 +7,7 @@ export default function SKKematian({ data }: { data: any }) {
const getValue = (jenis: string) =>
_.upperFirst(
data.surat.dataText.find((item: any) => item.jenis === jenis)?.value ||
"",
"",
);
const loadImage = async () => {
@@ -71,27 +71,27 @@ export default function SKKematian({ data }: { data: any }) {
<tr>
<td style={{ width: "160px" }}>Nama</td>
<td style={{ width: "10px" }}>:</td>
<td>{getValue("nama")}</td>
<td>{getValue("nama_pelapor")}</td>
</tr>
<tr>
<td>NIK</td>
<td>:</td>
<td>{getValue("nik")}</td>
<td>{getValue("nik_pelapor")}</td>
</tr>
<tr>
<td>Pekerjaan</td>
<td>:</td>
<td>{getValue("pekerjaan")}</td>
<td>{getValue("pekerjaan_pelapor")}</td>
</tr>
<tr>
<td>Alamat</td>
<td>:</td>
<td>{getValue("alamat")}</td>
<td>{getValue("alamat_pelapor")}</td>
</tr>
<tr>
<td>Hubungan dengan almarhum/almarhumah</td>
<td>:</td>
<td>{getValue("hubungan dengan almarhum")}</td>
<td>{getValue("hubungan_pelapor")}</td>
</tr>
</tbody>
</table>
@@ -104,32 +104,32 @@ export default function SKKematian({ data }: { data: any }) {
<tr>
<td style={{ width: "160px" }}>Nama</td>
<td style={{ width: "10px" }}>:</td>
<td>{getValue("nama")}</td>
<td>{getValue("nama_almarhum")}</td>
</tr>
<tr>
<td>NIK</td>
<td>:</td>
<td>{getValue("nik")}</td>
<td>{getValue("nik_almarhum")}</td>
</tr>
<tr>
<td>Jenis Kelamin</td>
<td>:</td>
<td>{getValue("jenis kelamin")}</td>
<td>{getValue("jenis_kelamin_almarhum")}</td>
</tr>
<tr>
<td>Tempat/Tanggal Lahir</td>
<td>:</td>
<td>{getValue("tempat tanggal lahir")}</td>
<td>{`${getValue("tempat_lahir_almarhum")}, ${getValue("tanggal_lahir_almarhum")}`}</td>
</tr>
<tr>
<td>Agama</td>
<td>:</td>
<td>{getValue("agama")}</td>
<td>{getValue("agama_almarhum")}</td>
</tr>
<tr>
<td>Alamat</td>
<td>:</td>
<td>{getValue("alamat")}</td>
<td>{getValue("alamat_almarhum")}</td>
</tr>
</tbody>
</table>
@@ -142,22 +142,22 @@ export default function SKKematian({ data }: { data: any }) {
<tr>
<td style={{ width: "160px" }}>Tanggal Kematian</td>
<td style={{ width: "10px" }}>:</td>
<td>{getValue("tanggal kematian")}</td>
<td>{getValue("tanggal_kematian")}</td>
</tr>
<tr>
<td>Waktu Kematian</td>
<td>:</td>
<td>{getValue("waktu kematian")}</td>
<td>{getValue("waktu_kematian")}</td>
</tr>
<tr>
<td>Tempat Kematian</td>
<td>:</td>
<td>{getValue("tempat kematian")}</td>
<td>{getValue("tempat_kematian")}</td>
</tr>
<tr>
<td>Penyebab Kematian</td>
<td>:</td>
<td>{getValue("penyebab kematian")}</td>
<td>{getValue("penyebab_kematian")}</td>
</tr>
</tbody>
</table>
@@ -185,7 +185,7 @@ export default function SKKematian({ data }: { data: any }) {
<br />
<br />
<br /> <br />
<u>{getValue("nama")}</u> <br />
<u>{getValue("nama_pelapor")}</u> <br />
</div>
<div style={{ textAlign: "center" }}>
<br />

View File

@@ -105,12 +105,12 @@ export default function SKPenghasilan({ data }: { data: any }) {
<tr>
<td>Jenis Kelamin</td>
<td>:</td>
<td>{getValue("jenis kelamin")}</td>
<td>{getValue("jenis_kelamin")}</td>
</tr>
<tr>
<td>Tempat / Tanggal Lahir</td>
<td>:</td>
<td>{getValue("tempat tanggal lahir")}</td>
<td>{`${getValue("tempat_lahir")}, ${getValue("tanggal_lahir")}`}</td>
</tr>
<tr>
<td>Pekerjaan</td>
@@ -136,8 +136,7 @@ export default function SKPenghasilan({ data }: { data: any }) {
<td style={{ width: "160px" }}>Penghasilan</td>
<td style={{ width: "10px" }}>:</td>
<td>
Rp {getValue("penghasilan")} (
{getValue("penghasilan terbilang")}) per bulan
Rp. {getValue("penghasilan")} per bulan
</td>
</tr>
</tbody>
@@ -147,7 +146,7 @@ export default function SKPenghasilan({ data }: { data: any }) {
{/* KEPERLUAN */}
<div style={{ marginTop: "20px" }}>
Surat keterangan ini dibuat untuk keperluan:{" "}
<b>{getValue("alasan permohonan")}</b>.
<b>{getValue("alasan")}</b>.
</div>
<div style={{ marginTop: "20px" }}>

View File

@@ -66,12 +66,12 @@ export default function SKTempatUsaha({ data }: { data: any }) {
{/* DATA WARGA */}
<div>
<Row label="Nama Pemilik Usaha" value={getValue("nama")} />
<Row label="Nama Pemilik Usaha" value={getValue("nama_pemilik")} />
<Row
label="Tempat/Tanggal Lahir"
value={getValue("tempat tanggal lahir")}
value={`${getValue("tempat_lahir")}, ${getValue("tanggal_lahir")}`}
/>
<Row label="Alamat Pemilik Usaha" value={getValue("alamat")} />
<Row label="Alamat Pemilik Usaha" value={getValue("alamat_pemilik")} />
<Row label="Nomor KTP" value={getValue("nik")} />
</div>
@@ -83,23 +83,23 @@ export default function SKTempatUsaha({ data }: { data: any }) {
</div>
<div>
<Row label="Nama Usaha" value={getValue("nama usaha")} />
<Row label="Bidang Usaha" value={getValue("bidang usaha")} />
<Row label="Alamat Usaha" value={getValue("alamat usaha")} />
<Row label="Nama Usaha" value={getValue("nama_usaha")} />
<Row label="Bidang Usaha" value={getValue("bidang_usaha")} />
<Row label="Alamat Usaha" value={getValue("alamat_usaha")} />
<Row
label="Status Tempat Usaha"
value={getValue("status tempat usaha")}
value={getValue("status_tempat")}
/>
<Row
label="Luas Tempat Usaha"
value={getValue("luas tempat usaha")}
value={getValue("luas_usaha")}
/>
<Row label="Jumlah Karyawan" value={getValue("jumlah karyawan")} />
<Row label="Jumlah Karyawan" value={getValue("jumlah_karyawan")} />
</div>
<p style={{ textAlign: "justify" }}>
Surat keterangan ini dibuat untuk keperluan{" "}
<b>{getValue("alasan permohonan")}.</b>
<b>{getValue("tujuan")}.</b>
</p>
<p style={{ textAlign: "justify" }}>

View File

@@ -66,13 +66,13 @@ export default function SKTidakMampu({ data }: { data: any }) {
{/* DATA WARGA */}
<div>
<Row label="NIK" value={getValue("nik")} />
<Row label="Nama" value={getValue("nama")} />
<Row
label="Tempat Tgl Lahir"
value={getValue("tempat tanggal lahir")}
value={`${getValue("tempat_lahir")}, ${getValue("tanggal_lahir")}`}
/>
<Row label="Alamat" value={getValue("alamat")} />
<Row label="NIK" value={getValue("nik")} />
</div>
<br />
@@ -80,7 +80,7 @@ export default function SKTidakMampu({ data }: { data: any }) {
<p style={{ textAlign: "justify" }}>
Orang tersebut benar-benar penduduk desa {data.setting.desaNama} dan
termasuk keluarga tidak mampu. Surat keterangan ini dipergunakan untuk
<b>{getValue("alasan permohonan")}.</b>
<b>{getValue("alasan")}.</b>
</p>
<p style={{ textAlign: "justify" }}>

View File

@@ -7,7 +7,7 @@ export default function SKUsaha({ data }: { data: any }) {
const getValue = (jenis: string) =>
_.upperFirst(
data.surat.dataText.find((item: any) => item.jenis === jenis)?.value ||
"",
"",
);
const loadImage = async () => {
@@ -105,12 +105,12 @@ export default function SKUsaha({ data }: { data: any }) {
<tr>
<td>Jenis Kelamin</td>
<td>:</td>
<td>{getValue("jenis kelamin")}</td>
<td>{getValue("jenis_kelamin")}</td>
</tr>
<tr>
<td>Tempat / Tanggal Lahir</td>
<td>:</td>
<td>{getValue("tempat tanggal lahir")}</td>
<td>{`${getValue("tempat_lahir")}, ${getValue("tanggal_lahir")}`}</td>
</tr>
<tr>
<td>Warga Negara</td>
@@ -125,7 +125,7 @@ export default function SKUsaha({ data }: { data: any }) {
<tr>
<td>Status</td>
<td>:</td>
<td>{getValue("status perkawinan")}</td>
<td>{getValue("status_perkawinan")}</td>
</tr>
<tr>
<td>Pekerjaan</td>
@@ -173,12 +173,12 @@ export default function SKUsaha({ data }: { data: any }) {
<tr>
<td style={{ width: "160px" }}>Jenis Usaha</td>
<td style={{ width: "10px" }}>:</td>
<td>{getValue("jenis usaha")}</td>
<td>{getValue("jenis_usaha")}</td>
</tr>
<tr>
<td>Alamat Usaha</td>
<td>:</td>
<td>{getValue("alamat usaha")}</td>
<td>{getValue("alamat_usaha")}</td>
</tr>
</tbody>
</table>

View File

@@ -88,26 +88,26 @@ export default function SKYatim({ data }: { data: any }) {
<table style={{ width: "100%", marginTop: "5px" }}>
<tbody>
<tr>
<td>NIK</td>
<td>: {getValue("nik")}</td>
</tr>
<tr>
<td style={{ width: "180px" }}>Nama</td>
<td>: {getValue("nama")}</td>
</tr>
<tr>
<td>Tempat/Tanggal Lahir</td>
<td>: {getValue("tempat tanggal lahir")}</td>
<td>: {`${getValue("tempat_lahir")}, ${getValue("tanggal_lahir")}`}</td>
</tr>
<tr>
<td>Jenis Kelamin</td>
<td>: {getValue("jenis kelamin")}</td>
<td>: {getValue("jenis_kelamin")}</td>
</tr>
<tr>
<td>Alamat</td>
<td>: {getValue("alamat")}</td>
</tr>
<tr>
<td>NIK</td>
<td>: {getValue("nik")}</td>
</tr>
<tr>
<td>Pekerjaan</td>
<td>: {getValue("pekerjaan")}</td>
@@ -133,11 +133,11 @@ export default function SKYatim({ data }: { data: any }) {
<tbody>
<tr>
<td style={{ width: "180px" }}>Nama Ayah</td>
<td>: {getValue("nama ayah")}</td>
<td>: {getValue("nama_ayah")}</td>
</tr>
<tr>
<td>Status</td>
<td>: {getValue("status ayah")}</td>
<td>: {getValue("status_ayah")}</td>
</tr>
</tbody>
</table>
@@ -151,11 +151,11 @@ export default function SKYatim({ data }: { data: any }) {
<tbody>
<tr>
<td style={{ width: "180px" }}>Nama Ibu</td>
<td>: {getValue("nama ibu")}</td>
<td>: {getValue("nama_ibu")}</td>
</tr>
<tr>
<td>Status</td>
<td>: {getValue("status ibu")}</td>
<td>: {getValue("status_ibu")}</td>
</tr>
</tbody>
</table>

View File

@@ -1,3 +1,5 @@
import { enumAgama, enumJenisKelamin, enumStatusHidup, enumStatusPerkawinan } from "./valueEnum";
export const categoryPelayananSurat = [
{
id: "skbedabiodata",
@@ -21,15 +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: "ttl", name: "Tempat & Tanggal Lahir", desc: "Tempat dan 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" },
{ 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"
}
]
},
{
@@ -54,13 +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: "ttl", name: "Tempat & Tanggal Lahir", desc: "Tempat dan tanggal lahir" },
{ 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" }
]
},
{
@@ -85,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" }
]
},
{
@@ -110,20 +153,35 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
{ key: "nama_ayah", name: "Nama Ayah", desc: "Nama lengkap ayah" },
{ key: "nama_ibu", name: "Nama Ibu", desc: "Nama lengkap ibu" },
{ 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: "nik_ayah", name: "NIK Ayah", desc: "NIK 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",
@@ -142,15 +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: "ttl", name: "Tempat & Tanggal Lahir", desc: "Tempat dan 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",
@@ -174,20 +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: "ttl_almarhum", name: "Tempat & Tanggal Lahir Almarhum", desc: "Tempat dan 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" }
]
},
{
@@ -212,13 +291,20 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
{ key: "nama", name: "Nama Lengkap", desc: "Nama pemohon" },
{ key: "ttl", name: "Tempat & Tanggal Lahir", desc: "Tempat dan 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" }
]
},
{
@@ -248,17 +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: "ttl", name: "Tempat & Tanggal Lahir", desc: "Tempat dan 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" }
]
},
{
@@ -278,31 +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: "ttl",
name: "Tempat & Tanggal Lahir",
desc: "Tempat dan 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" }
]
},
{
@@ -327,16 +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: "ttl", name: "Tempat & Tanggal Lahir", desc: "Tempat dan 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" }
]
},
{
@@ -356,16 +443,37 @@ export const categoryPelayananSurat = [
],
dataText: [],
dataPelengkap: [
{ key: "nik", name: "NIK", desc: "Nomor Induk Kependudukan" },
{ key: "nama", name: "Nama Lengkap", desc: "Nama anak" },
{ key: "ttl", name: "Tempat & Tanggal Lahir", desc: "Tempat dan 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
}
]
}
];

View File

@@ -246,16 +246,6 @@
"label": "View Detail",
"default": true
},
{
"key": "setting.kategori_pelayanan.tambah",
"label": "Tambah",
"default": true
},
{
"key": "setting.kategori_pelayanan.edit",
"label": "Edit",
"default": true
},
{
"key": "setting.kategori_pelayanan.delete",
"label": "Delete",

25
src/lib/valueEnum.ts Normal file
View File

@@ -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" }
];

View File

@@ -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() {
</div>
</Group>
<Group>
<Badge radius="sm">Form Length: 3 Sections</Badge>
<Badge radius="sm">Form Length: 4 Sections</Badge>
</Group>
</Group>
<Stack gap="lg">
{/* Header Section */}
<FormSection
title="Pemohon"
icon={<IconUser size={16} />}
description="Informasi identitas pemohon"
title="Jenis Surat Pengajuan"
icon={<IconCategory size={16} />}
>
<Grid>
<Grid.Col span={6}>
<TextInput
label={<FieldLabel label="Nama" hint="Nama pemohon" />}
placeholder="Budi Setiawan"
value={formSurat.nama}
onChange={(e) =>
validationForm({ key: "nama", value: e.target.value })
}
/>
</Grid.Col>
<Grid.Col span={6}>
<TextInput
label={
<FieldLabel
label="Nomor Telephone"
hint="Nomor telephone yang dapat dihubungi / terhubung dengan whatsapp"
/>
}
placeholder="08123456789"
value={formSurat.phone}
onChange={(e) =>
validationForm({ key: "phone", value: e.target.value })
}
/>
</Grid.Col>
<Grid.Col span={12}>
<Select
label={
@@ -371,32 +348,110 @@ export default function FormSurat() {
</Grid>
</FormSection>
{/* Kontak Section */}
<FormSection
title="Kontak"
icon={<IconPhone size={16} />}
description="Informasi kontak yg dapat dihubungi"
>
<Grid>
<Grid.Col span={6}>
<TextInput
label={<FieldLabel label="Nama" hint="Nama kontak" />}
placeholder="Budi Setiawan"
value={formSurat.nama}
onChange={(e) =>
validationForm({ key: "nama", value: e.target.value })
}
/>
</Grid.Col>
<Grid.Col span={6}>
<TextInput
label={
<FieldLabel
label="Nomor Telephone"
hint="Nomor telephone yang dapat dihubungi / terhubung dengan whatsapp"
/>
}
placeholder="08123456789"
value={formSurat.phone}
onChange={(e) =>
validationForm({ key: "phone", value: e.target.value })
}
/>
</Grid.Col>
</Grid>
</FormSection>
{jenisSuratFix.id != "" && dataSurat && dataSurat.dataPelengkap && (
<>
<FormSection
title="Data Pelengkap"
description="Data pelengkap yang diperlukan"
title="Data Yang Diperlukan"
description="Data yang diperlukan untuk mengajukan surat"
icon={<IconNotes size={16} />}
>
<Grid>
{dataSurat.dataPelengkap.map((item: any, index: number) => (
<Grid.Col span={6} key={index}>
<TextInput
label={
<FieldLabel label={item.name} hint={item.desc} />
}
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"
?
<Select
label={
<FieldLabel label={item.name} hint={item.desc} />
}
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"
?
<DateInput
locale="id"
valueFormat="DD MMMM YYYY"
label={
<FieldLabel label={item.name} hint={item.desc} />
}
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 },
})
}}
/>
:
<TextInput
type={item.type}
label={
<FieldLabel label={item.name} hint={item.desc} />
}
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
}
/>
}
</Grid.Col>
))}
</Grid>
@@ -405,6 +460,7 @@ export default function FormSurat() {
<FormSection
title="Syarat Dokumen"
description="Syarat dokumen yang diperlukan"
icon={<IconFiles size={16} />}
>
<Grid>
{dataSurat.syaratDokumen.map((item: any, index: number) => (

View File

@@ -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 (
<Container size="md" w={"100%"}>
<Box>
<Stack gap="lg">
<Group justify="space-between" align="center" mt={"lg"}>
<Group align="center">
<IconBuildingCommunity size={28} />
<div>
<Text fw={800} size="xl">
Update Data Pengajuan Surat Administrasi
</Text>
<Text size="sm" c="dimmed">
Formulir ini digunakan untuk memperbarui data pengajuan surat administrasi yang telah diajukan sebelumnya.
</Text>
</div>
{
found &&
<Group justify="space-between" align="center" mt={"lg"}>
<Group align="center">
<IconBuildingCommunity size={28} />
<div>
<Text fw={800} size="xl">
Update Data Pengajuan Surat Administrasi
</Text>
<Text size="sm" c="dimmed">
Formulir ini digunakan untuk memperbarui data pengajuan surat administrasi yang telah diajukan sebelumnya.
</Text>
</div>
</Group>
</Group>
</Group>
}
<Stack gap="lg" mb="lg">
{
!noPengajuan ? (
<SearchData />
)
:
<DataUpdate noPengajuan={noPengajuan} />
found ? (
<DataUpdate noPengajuan={noPengajuan} onValidate={(e) => { setFound(e) }} />
) : (
<DataNotFound backTo={() => navigate("/darmasaba/update-data-surat")} />
)
}
</Stack>
</Stack>
</Box>
@@ -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 }) {
&& <Alert variant="light" color="yellow" radius="lg" title={`Data pengajuan surat ini tidak dapat diupdate karena berstatus ${status}.`} icon={<span style={{ fontSize: '1.2rem' }}></span>} />
}
<FormSection
title="Data Pelengkap"
description="Data pelengkap yang diperlukan"
title="Data Yang Diperlukan"
description="Data yang diperlukan"
icon={<IconNotes size={16} />}
>
<Grid>
{dataPelengkap.map((item: any, index: number) => (
<Grid.Col span={6} key={index}>
<TextInput
label={
<FieldLabel label={item.name} hint={item.desc} />
}
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"
?
<Select
label={
<FieldLabel label={item.name} hint={item.desc} />
}
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"
?
<DateInput
locale="id"
valueFormat="DD MMMM YYYY"
label={
<FieldLabel label={item.name} hint={item.desc} />
}
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
)
}
/>
: <TextInput
label={
<FieldLabel label={item.name} hint={item.desc} />
}
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"}
/>
}
</Grid.Col>
))}
</Grid>
@@ -587,6 +652,7 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
<FormSection
title="Syarat Dokumen"
description="Syarat dokumen yang diperlukan"
icon={<IconFiles size={16} />}
>
<Grid>
{dataSyaratDokumen.map((item: any, index: number) => (
@@ -611,7 +677,7 @@ function DataUpdate({ noPengajuan }: { noPengajuan: string }) {
</FormSection>
<Group justify="right" mt="md">
<Button onClick={() => { onChecking() }}>Kirim</Button>
<Button onClick={() => { onChecking() }} disabled={status != "ditolak" && status != "antrian"}>Kirim</Button>
</Group>
</>
}

View File

@@ -14,6 +14,7 @@ import {
Group,
List,
Modal,
Spoiler,
Stack,
Table,
Text,
@@ -432,41 +433,43 @@ function DetailDataHistori({ data }: { data: any }) {
<Stack gap="md">
<Flex align="center" justify="space-between">
<Title order={4} c="gray.2">
Histori Pengajuan Surat
Riwayat Pengajuan Surat
</Title>
</Flex>
<Divider my={0} />
<Table>
<Table.Thead>
<Table.Tr>
<Table.Th>Tanggal</Table.Th>
<Table.Th>Deskripsi</Table.Th>
<Table.Th>Status</Table.Th>
<Table.Th>User</Table.Th>
</Table.Tr>
</Table.Thead>
<Table.Tbody>
{data?.map((item: any) => (
<Table.Tr key={item.id}>
<Table.Td style={{ whiteSpace: "nowrap" }}>
{item.createdAt.toLocaleString("id-ID", {
day: "2-digit",
month: "short",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
hour12: false,
})}
</Table.Td>
<Table.Td>{item.deskripsi}</Table.Td>
<Table.Td>{item.status}</Table.Td>
<Table.Td style={{ whiteSpace: "nowrap" }}>
{item.nameUser ? item.nameUser : "-"}
</Table.Td>
<Spoiler maxHeight={200} showLabel="Show more" hideLabel="Hide" transitionDuration={1000}>
<Table>
<Table.Thead>
<Table.Tr>
<Table.Th>Tanggal</Table.Th>
<Table.Th>Deskripsi</Table.Th>
<Table.Th>Status</Table.Th>
<Table.Th>User</Table.Th>
</Table.Tr>
))}
</Table.Tbody>
</Table>
</Table.Thead>
<Table.Tbody>
{data?.map((item: any) => (
<Table.Tr key={item.id}>
<Table.Td style={{ whiteSpace: "nowrap" }}>
{item.createdAt.toLocaleString("id-ID", {
day: "2-digit",
month: "short",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
hour12: false,
})}
</Table.Td>
<Table.Td>{item.deskripsi}</Table.Td>
<Table.Td>{item.status}</Table.Td>
<Table.Td style={{ whiteSpace: "nowrap" }}>
{item.nameUser ? item.nameUser : "-"}
</Table.Td>
</Table.Tr>
))}
</Table.Tbody>
</Table>
</Spoiler>
</Stack>
</Card>
);

View File

@@ -12,6 +12,7 @@ import {
Grid,
Group,
Modal,
Spoiler,
Stack,
Table,
Text,
@@ -420,41 +421,43 @@ function DetailDataHistori({ data }: { data: any }) {
<Stack gap="md">
<Flex align="center" justify="space-between">
<Title order={4} c="gray.2">
Histori Pengaduan
Riwayat Pengaduan
</Title>
</Flex>
<Divider my={0} />
<Table>
<Table.Thead>
<Table.Tr>
<Table.Th>Tanggal</Table.Th>
<Table.Th>Deskripsi</Table.Th>
<Table.Th>Status</Table.Th>
<Table.Th>User</Table.Th>
</Table.Tr>
</Table.Thead>
<Table.Tbody>
{data?.map((item: any) => (
<Table.Tr key={item.id}>
<Table.Td style={{ whiteSpace: "nowrap" }}>
{item.createdAt.toLocaleString("id-ID", {
day: "2-digit",
month: "short",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
hour12: false,
})}
</Table.Td>
<Table.Td>{item.deskripsi}</Table.Td>
<Table.Td>{item.status}</Table.Td>
<Table.Td style={{ whiteSpace: "nowrap" }}>
{item.nameUser ? item.nameUser : "-"}
</Table.Td>
<Spoiler maxHeight={200} showLabel="Show more" hideLabel="Hide" transitionDuration={1000}>
<Table>
<Table.Thead>
<Table.Tr>
<Table.Th>Tanggal</Table.Th>
<Table.Th>Deskripsi</Table.Th>
<Table.Th>Status</Table.Th>
<Table.Th>User</Table.Th>
</Table.Tr>
))}
</Table.Tbody>
</Table>
</Table.Thead>
<Table.Tbody>
{data?.map((item: any) => (
<Table.Tr key={item.id}>
<Table.Td style={{ whiteSpace: "nowrap" }}>
{item.createdAt.toLocaleString("id-ID", {
day: "2-digit",
month: "short",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
hour12: false,
})}
</Table.Td>
<Table.Td>{item.deskripsi}</Table.Td>
<Table.Td>{item.status}</Table.Td>
<Table.Td style={{ whiteSpace: "nowrap" }}>
{item.nameUser ? item.nameUser : "-"}
</Table.Td>
</Table.Tr>
))}
</Table.Tbody>
</Table>
</Spoiler>
</Stack>
</Card>
);

View File

@@ -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;
}

View File

@@ -333,6 +333,7 @@ const PelayananRoute = new Elysia({
.sort((a, b) => a.order - b.order)
.map(({ order, ...rest }) => rest); // hapus order
const dataHistory = await prisma.historyPelayanan.findMany({
where: {
idPengajuanLayanan: data?.id,
@@ -348,6 +349,9 @@ const PelayananRoute = new Elysia({
name: true,
}
}
},
orderBy: {
createdAt: "desc"
}
})
@@ -684,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;
@@ -706,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,
};
})

View File

@@ -436,6 +436,9 @@ const PengaduanRoute = new Elysia({
name: true,
}
}
},
orderBy: {
createdAt: "desc"
}
})