Compare commits

...

17 Commits

Author SHA1 Message Date
75758bcbe6 upd: pengajuan surat
Deskripsi:
- send wa penolakan + lik update
- send wa diterima
- upload ke seafile
- blm selesai ngirim link surat ke wa

No Issues
2026-01-05 17:24:53 +08:00
2d336ea467 Merge pull request 'amalia/02-jan-26' (#99) from amalia/02-jan-26 into main
Reviewed-on: http://wibugit.wibudev.com/wibu/jenna-mcp/pulls/99
2026-01-02 17:32:32 +08:00
112e931bad upd: form update pengajuan surat
Deskripsi:
- tampilan saat ada status ditolak

NO Issues
2026-01-02 17:31:56 +08:00
487395bdb3 upd: notif warga
Deskripsi:
- tolak pengaduan
- terima pengaduan
- kerjakan pengaduan
- pengaduan selesai

NO Issues
2026-01-02 14:52:00 +08:00
3944e1ee82 Merge pull request 'upd: seeder' (#98) from amalia/29-des-25 into main
Reviewed-on: http://wibugit.wibudev.com/wibu/jenna-mcp/pulls/98
2025-12-29 11:33:00 +08:00
a9b34547f0 upd: seeder 2025-12-29 11:30:50 +08:00
211aac3d5f Merge pull request 'upd dskripsi kategori surat' (#97) from amalia/29-des-25 into main
Reviewed-on: http://wibugit.wibudev.com/wibu/jenna-mcp/pulls/97
2025-12-29 11:19:09 +08:00
73a2a4367c upd dskripsi kategori surat 2025-12-29 11:18:01 +08:00
a01f394e43 Merge pull request 'upd: link update pengajuan surat pada api' (#96) from amalia/29-des-25 into main
Reviewed-on: http://wibugit.wibudev.com/wibu/jenna-mcp/pulls/96
2025-12-29 10:56:30 +08:00
7dde0a4eb9 upd: link update pengajuan surat pada api 2025-12-29 10:55:23 +08:00
6debbf8c64 Merge pull request 'upd : update pengajuan surat' (#95) from amalia/24-des-25 into main
Reviewed-on: http://wibugit.wibudev.com/wibu/jenna-mcp/pulls/95
2025-12-24 17:30:14 +08:00
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
32 changed files with 2293 additions and 1027 deletions

146
bak/ModalSurat.tsx.txt Normal file
View File

@@ -0,0 +1,146 @@
import apiFetch from "@/lib/apiFetch";
import { ActionIcon, Flex, Modal } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
import { IconDownload, IconX } from "@tabler/icons-react";
import html2canvas from "html2canvas";
import jsPDF from "jspdf";
import { useRef } from "react";
import useSWR from "swr";
import SKBedaBiodataDiri from "./surat/SKBedaBiodataDiri";
import SKBelumKawin from "./surat/SKBelumKawin";
import SKDomisiliOrganisasi from "./surat/SKDomisiliOrganisasi";
import SKKelahiran from "./surat/SKKelahiran";
import SKKelakuanBaik from "./surat/SKKelakuanBaik";
import SKKematian from "./surat/SKKematian";
import SKPenghasilan from "./surat/SKPenghasilan";
import SKTempatUsaha from "./surat/SKTempatUsaha";
import SKTidakMampu from "./surat/SKTidakMampu";
import SKUsaha from "./surat/SKUsaha";
import SKYatim from "./surat/SKYatimPiatu";
export default function ModalSurat({
open,
onClose,
surat,
}: {
open: boolean;
onClose: () => void;
surat: string;
}) {
const A4Style = {
width: "210mm",
height: "297mm",
padding: "20mm",
background: "#fff",
color: "#000",
fontSize: "14px",
fontFamily: "Times New Roman",
};
const hiddenRef = useRef<any>(null);
const { data, mutate, isLoading } = useSWR("surat", () =>
apiFetch.api.surat.detail.get({
query: {
id: surat,
},
}),
);
useShallowEffect(() => {
mutate();
}, []);
const downloadPDF = async () => {
const element = hiddenRef.current;
const canvas = await html2canvas(element, {
scale: 2,
useCORS: true,
allowTaint: true,
width: element.offsetWidth,
height: element.offsetHeight,
});
const imgData = canvas.toDataURL("image/jpeg", 1.0);
const pdf = new jsPDF("p", "mm", "a4");
const pageWidth = 210; // A4 width mm
const pageHeight = 297; // A4 height mm
const imgWidth = pageWidth;
const imgHeight = (canvas.height * pageWidth) / canvas.width;
pdf.addImage(imgData, "JPEG", 0, 0, imgWidth, imgHeight);
pdf.save(`${data?.data?.surat?.nameCategory}.pdf`);
};
return (
<>
<Modal
opened={open}
onClose={() => onClose()}
overlayProps={{ backgroundOpacity: 0.55, blur: 3 }}
size="auto"
withCloseButton={false}
removeScrollProps={{ allowPinchZoom: true }}
styles={{
header: {
display: "flex",
justifyContent: "space-between",
alignItems: "center",
padding: "12px 16px",
},
title: {
width: "100%",
},
}}
title={
<Flex justify="space-between" align="center" w="100%">
<div style={{ fontSize: 18, fontWeight: 600 }}>Preview Surat</div>
<Flex gap={8}>
<ActionIcon size={32} variant="default">
<IconDownload size={20} onClick={downloadPDF} />
</ActionIcon>
<ActionIcon size={32} variant="default" onClick={onClose}>
<IconX size={20} />
</ActionIcon>
</Flex>
</Flex>
}
>
<div ref={hiddenRef} style={A4Style}>
{data && data.data ? (
data.data.surat.idCategory == "skusaha" ? (
<SKUsaha data={data.data} />
) : data.data.surat.idCategory == "skkelahiran" ? (
<SKKelahiran data={data.data} />
) : data.data.surat.idCategory == "skkelakuanbaik" ? (
<SKKelakuanBaik data={data.data} />
) : data.data.surat.idCategory == "skpenghasilan" ? (
<SKPenghasilan data={data.data} />
) : data.data.surat.idCategory == "sktidakmampu" ? (
<SKTidakMampu data={data.data} />
) : data.data.surat.idCategory == "skyatimpiatu" ? (
<SKYatim data={data.data} />
) : data.data.surat.idCategory == "skdomisiliorganisasi" ? (
<SKDomisiliOrganisasi data={data.data} />
) : data.data.surat.idCategory == "skbedabiodata" ? (
<SKBedaBiodataDiri data={data.data} />
) : data.data.surat.idCategory == "sktempatusaha" ? (
<SKTempatUsaha data={data.data} />
) : data.data.surat.idCategory == "skbelumkawin" ? (
<SKBelumKawin data={data.data} />
) : data.data.surat.idCategory == "skkematian" ? (
<SKKematian data={data.data} />
) : (
<></>
)
) : (
<></>
)}
</div>
</Modal>
</>
);
}

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

@@ -13,7 +13,7 @@ import {
Table,
Text,
Title,
Tooltip
Tooltip,
} from "@mantine/core";
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import { IconEdit, IconEye, IconPlus, IconTrash } from "@tabler/icons-react";
@@ -190,7 +190,10 @@ export default function KategoriPelayananSurat({
function handleAddSyarat() {
setDataChoose({
...dataChoose,
syaratDokumen: [...dataChoose.syaratDokumen, { key: "", name: "", desc: "" }],
syaratDokumen: [
...dataChoose.syaratDokumen,
{ key: "", name: "", desc: "" },
],
});
}
@@ -216,7 +219,7 @@ export default function KategoriPelayananSurat({
return (
<>
{/* Modal Edit */}
<Modal
{/* <Modal
opened={opened}
onClose={close}
title={"Edit"}
@@ -232,15 +235,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 +362,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 +402,10 @@ export default function KategoriPelayananSurat({
</Button>
</Group>
</Stack>
</Modal>
</Modal> */}
{/* Modal Tambah */}
<Modal
{/* <Modal
opened={openedTambah}
onClose={closeTambah}
title={"Tambah"}
@@ -348,15 +421,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 +530,7 @@ export default function KategoriPelayananSurat({
</Button>
</Group>
</Stack>
</Modal>
</Modal> */}
{/* Modal Delete */}
<Modal
@@ -539,7 +603,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 +613,7 @@ export default function KategoriPelayananSurat({
Tambah
</Button>
</Tooltip>
)}
)} */}
</Flex>
<Divider my={0} />
<Stack gap={"md"}>
@@ -580,7 +644,7 @@ export default function KategoriPelayananSurat({
<IconEye size={20} />
</ActionIcon>
</Tooltip>
<Tooltip
{/* <Tooltip
label={
permissions.includes(
"setting.kategori_pelayanan.edit",
@@ -605,7 +669,7 @@ export default function KategoriPelayananSurat({
>
<IconEdit size={20} />
</ActionIcon>
</Tooltip>
</Tooltip> */}
<Tooltip
label={
permissions.includes(

View File

@@ -1,10 +1,9 @@
import apiFetch from "@/lib/apiFetch";
import { ActionIcon, Flex, Modal } from "@mantine/core";
import { Flex, Loader, Modal, Text } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
import { IconDownload, IconX } from "@tabler/icons-react";
import html2canvas from "html2canvas";
import jsPDF from "jspdf";
import { useRef } from "react";
import { useRef, useState } from "react";
import useSWR from "swr";
import SKBedaBiodataDiri from "./surat/SKBedaBiodataDiri";
import SKBelumKawin from "./surat/SKBelumKawin";
@@ -36,6 +35,7 @@ export default function ModalSurat({
fontSize: "14px",
fontFamily: "Times New Roman",
};
const [uploading, setUploading] = useState<"Menyiapkan" | "Mengupload" | "Selesai">("Menyiapkan")
const hiddenRef = useRef<any>(null);
const { data, mutate, isLoading } = useSWR("surat", () =>
apiFetch.api.surat.detail.get({
@@ -49,29 +49,62 @@ export default function ModalSurat({
mutate();
}, []);
const downloadPDF = async () => {
const element = hiddenRef.current;
const canvas = await html2canvas(element, {
scale: 2,
useCORS: true,
allowTaint: true,
width: element.offsetWidth,
height: element.offsetHeight,
});
const uploadPdf = async () => {
try {
setUploading("Mengupload");
const element = hiddenRef.current;
const canvas = await html2canvas(element, {
scale: 2,
useCORS: true,
allowTaint: true,
width: element.offsetWidth,
height: element.offsetHeight,
});
const imgData = canvas.toDataURL("image/jpeg", 1.0);
const imgData = canvas.toDataURL("image/jpeg", 1.0);
const pdf = new jsPDF("p", "mm", "a4");
const pageWidth = 210; // A4 width mm
const pageHeight = 297; // A4 height mm
const pdf = new jsPDF("p", "mm", "a4");
const pageWidth = 210; // A4 width mm
const pageHeight = 297; // A4 height mm
const imgWidth = pageWidth;
const imgHeight = (canvas.height * pageWidth) / canvas.width;
const imgWidth = pageWidth;
const imgHeight = (canvas.height * pageWidth) / canvas.width;
pdf.addImage(imgData, "JPEG", 0, 0, imgWidth, imgHeight);
pdf.addImage(imgData, "JPEG", 0, 0, imgWidth, imgHeight);
pdf.save(`${data?.data?.surat?.nameCategory}.pdf`);
};
// ⬇️ ambil sebagai Blob
const pdfBlob = pdf.output("blob");
const pdfFile = new File(
[pdfBlob],
`${data?.data?.surat?.nameCategory}.pdf`,
{
type: "application/pdf",
lastModified: Date.now(),
}
);
const resImg = await apiFetch.api.pengaduan.upload.post({
file: pdfFile,
folder: "surat",
});
console.log(resImg.data)
} catch (error) {
console.error("Error uploading PDF:", error);
} finally {
setUploading("Selesai");
setTimeout(() => {
onClose();
}, 1000)
}
}
useShallowEffect(() => {
setTimeout(() => {
uploadPdf();
}, 5000);
}, [surat]);
return (
<>
@@ -97,14 +130,9 @@ export default function ModalSurat({
<Flex justify="space-between" align="center" w="100%">
<div style={{ fontSize: 18, fontWeight: 600 }}>Preview Surat</div>
<Flex gap={8}>
<ActionIcon size={32} variant="default">
<IconDownload size={20} onClick={downloadPDF} />
</ActionIcon>
<ActionIcon size={32} variant="default" onClick={onClose}>
<IconX size={20} />
</ActionIcon>
<Flex gap={8} align="center">
<Loader color="blue" size="xs" />
<Text size="sm">{uploading}</Text>
</Flex>
</Flex>
}

View File

@@ -0,0 +1,45 @@
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

@@ -4,13 +4,13 @@ import { IconCheck } from "@tabler/icons-react";
type SuccessPengajuanProps = {
noPengajuan: string;
onClose?: () => void;
category?: 'create' | 'update';
category?: "create" | "update";
};
export default function SuccessPengajuan({
noPengajuan,
onClose,
category
category,
}: SuccessPengajuanProps) {
return (
<Center h="100vh">
@@ -19,11 +19,15 @@ export default function SuccessPengajuan({
<IconCheck size={56} color="green" />
<Title order={3} ta="center">
{category == 'create' ? 'Pengajuan Berhasil Dibuat' : 'Pengajuan Berhasil Diupdate'}
{category == "create"
? "Pengajuan Berhasil Dibuat"
: "Pengajuan Berhasil Diupdate"}
</Title>
<Text ta="center" size="sm" c="dimmed">
{category == 'create' ? 'Pengajuan layanan surat sudah dibuat dengan nomor:' : 'Pengajuan layanan surat sudah diupdate dengan nomor:'}
{category == "create"
? "Pengajuan layanan surat sudah dibuat dengan nomor:"
: "Pengajuan layanan surat sudah diupdate dengan nomor:"}
</Text>
<Badge size="xl" variant="light" color="green">

View File

@@ -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,36 @@ 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 +204,7 @@ export default function SKBedaBiodataDiri({ data }: { data: any }) {
</tr>
</tbody>
</table>
</div>
</div> */}
<div style={{ marginTop: "15px" }}>
Perbedaan tersebut terjadi karena{" "}

View File

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

@@ -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>
@@ -135,10 +135,7 @@ export default function SKPenghasilan({ data }: { data: any }) {
<tr>
<td style={{ width: "160px" }}>Penghasilan</td>
<td style={{ width: "10px" }}>:</td>
<td>
Rp {getValue("penghasilan")} (
{getValue("penghasilan terbilang")}) per bulan
</td>
<td>Rp. {getValue("penghasilan")} per bulan</td>
</tr>
</tbody>
</table>
@@ -146,8 +143,8 @@ export default function SKPenghasilan({ data }: { data: any }) {
{/* KEPERLUAN */}
<div style={{ marginTop: "20px" }}>
Surat keterangan ini dibuat untuk keperluan:{" "}
<b>{getValue("alasan permohonan")}</b>.
Surat keterangan ini dibuat untuk keperluan: <b>{getValue("alasan")}</b>
.
</div>
<div style={{ marginTop: "20px" }}>

View File

@@ -66,12 +66,15 @@ 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_pemilik")}
/>
<Row label="Alamat Pemilik Usaha" value={getValue("alamat")} />
<Row label="Nomor KTP" value={getValue("nik")} />
</div>
@@ -83,23 +86,17 @@ 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="Status Tempat Usaha"
value={getValue("status tempat usaha")}
/>
<Row
label="Luas Tempat Usaha"
value={getValue("luas tempat usaha")}
/>
<Row label="Jumlah Karyawan" value={getValue("jumlah karyawan")} />
<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")} />
<Row label="Luas Tempat Usaha" value={getValue("luas_usaha")} />
<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

@@ -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,28 @@ 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 +135,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 +153,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

@@ -15,6 +15,7 @@ import LayananRoute from "./server/routes/layanan_route";
import { MCPRoute } from "./server/routes/mcp_route";
import PelayananRoute from "./server/routes/pelayanan_surat_route";
import PengaduanRoute from "./server/routes/pengaduan_route";
import SendWaRoute from "./server/routes/send_wa_route";
import SuratRoute from "./server/routes/surat_route";
import TestPengaduanRoute from "./server/routes/test_pengaduan";
import UserRoute from "./server/routes/user_route";
@@ -45,7 +46,8 @@ const Api = new Elysia({
.use(CredentialRoute)
.use(UserRoute)
.use(LayananRoute)
.use(AduanRoute);
.use(AduanRoute)
.use(SendWaRoute);
const app = new Elysia()
.use(Api)

View File

@@ -1,3 +1,5 @@
import { enumAgama, enumJenisKelamin, enumStatusHidup, enumStatusPerkawinan, enumStatusTempatUsaha } 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: "enum", options: enumStatusTempatUsaha },
{ 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",

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

@@ -0,0 +1,31 @@
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" }
];
export const enumStatusTempatUsaha = [
{ label: "Milik Sendiri", value: "Milik Sendiri" },
{ label: "Sewa", value: "Sewa" },
{ label: "Pinjam", value: "Pinjam" }
];

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,
IconNotes,
IconPhone,
IconUpload,
IconUser,
} 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";
@@ -262,9 +268,7 @@ export default function FormSurat() {
overlayProps={{ backgroundOpacity: 0.55, blur: 3 }}
>
<Stack gap="sm">
<Text>
Apakah anda yakin ingin mengirim pengajuan surat ini?
</Text>
<Text>Apakah anda yakin ingin mengirim pengajuan surat ini?</Text>
<Group justify="center" grow>
<Button variant="light" onClick={close}>
Tidak
@@ -292,8 +296,7 @@ export default function FormSurat() {
}}
category="create"
/>
)
:
) : (
<Box>
<Stack gap="lg">
<Group justify="space-between" align="center">
@@ -310,44 +313,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,75 +345,175 @@ export default function FormSurat() {
</Grid>
</FormSection>
{jenisSuratFix.id != "" && dataSurat && dataSurat.dataPelengkap && (
<>
<FormSection
title="Data Pelengkap"
description="Data pelengkap yang diperlukan"
>
<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
}
/>
</Grid.Col>
))}
</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>
<FormSection
title="Syarat Dokumen"
description="Syarat dokumen yang diperlukan"
>
<Grid>
{dataSurat.syaratDokumen.map((item: any, index: number) => (
<Grid.Col span={6} key={index}>
<FileInputWrapper
label={item.desc}
placeholder={"Upload file "}
accept="image/*,application/pdf"
onChange={(file) =>
validationForm({
key: "syaratDokumen",
value: { key: item.key, value: file },
})
}
name={item.name}
/>
</Grid.Col>
))}
</Grid>
</FormSection>
<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>
{/* Actions */}
<Group justify="right" mt="md">
{/* <Button variant="default" onClick={() => { }}>
{jenisSuratFix.id != "" &&
dataSurat &&
dataSurat.dataPelengkap && (
<>
<FormSection
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}>
{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>
</FormSection>
<FormSection
title="Syarat Dokumen"
description="Syarat dokumen yang diperlukan"
icon={<IconFiles size={16} />}
>
<Grid>
{dataSurat.syaratDokumen.map(
(item: any, index: number) => (
<Grid.Col span={6} key={index}>
<FileInputWrapper
label={item.desc}
placeholder={"Upload file "}
accept="image/*,application/pdf"
onChange={(file) =>
validationForm({
key: "syaratDokumen",
value: { key: item.key, value: file },
})
}
name={item.name}
/>
</Grid.Col>
),
)}
</Grid>
</FormSection>
{/* Actions */}
<Group justify="right" mt="md">
{/* <Button variant="default" onClick={() => { }}>
Reset
</Button> */}
<Button onClick={onChecking}>Kirim</Button>
</Group>
</>
)}
<Button onClick={onChecking}>Kirim</Button>
</Group>
</>
)}
</Stack>
</Stack>
</Box>
}
)}
</Container>
);
}

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,7 @@ import {
Group,
List,
Modal,
Spoiler,
Stack,
Table,
Text,
@@ -61,6 +62,7 @@ export default function DetailPengajuanPage() {
<Stack gap={"xl"}>
<DetailDataPengajuan
data={data?.data?.pengajuan}
warga={data && data.data && data.data.warga ? data.data.warga : undefined}
syaratDokumen={data?.data?.syaratDokumen}
dataText={data?.data?.dataText}
onAction={() => {
@@ -80,11 +82,13 @@ export default function DetailPengajuanPage() {
function DetailDataPengajuan({
data,
warga,
syaratDokumen,
dataText,
onAction,
}: {
data: any;
warga?: { phone?: string | null } | null;
syaratDokumen: any;
dataText: any;
onAction: () => void;
@@ -98,6 +102,7 @@ function DetailDataPengajuan({
const [openedPreviewFile, setOpenedPreviewFile] = useState(false);
const [permissions, setPermissions] = useState<JsonValue[]>([]);
const [viewImg, setViewImg] = useState("");
const [uploading, setUploading] = useState(false)
useEffect(() => {
async function fetchHost() {
@@ -114,22 +119,78 @@ function DetailDataPengajuan({
fetchHost();
}, []);
async function sendWA({ status, linkSurat, linkUpdate }: { status: string, linkSurat: string, linkUpdate: string }) {
try {
const resWA = await apiFetch.api["send-wa"]["pengajuan-surat"].post({
noPengajuan: data?.noPengajuan ?? "",
jenisSurat: data?.category ?? "",
alasan: keterangan,
status,
linkSurat,
linkUpdate,
tlp: warga?.phone ?? "",
})
if (resWA?.status === 200) {
if (resWA.data?.success) {
notification({
title: "Success",
message: "Success send message to warga",
type: "success",
});
} else {
notification({
title: "Failed",
message: "Failed send message to warga",
type: "error",
});
}
} else {
notification({
title: "Failed",
message: "Failed send message to warga",
type: "error",
});
}
} catch (error) {
notification({
title: "Failed",
message: "Failed send message to warga",
type: "error",
});
}
}
const handleKonfirmasi = async (cat: "terima" | "tolak") => {
try {
const statusFix = cat == "tolak"
? "ditolak"
: data.status == "antrian"
? "diterima"
: "selesai"
const res = await apiFetch.api.pelayanan["update-status"].post({
id: data?.id,
status:
cat == "tolak"
? "ditolak"
: data.status == "antrian"
? "diterima"
: "selesai",
status: statusFix,
keterangan: keterangan,
idUser: host?.id ?? "",
noSurat: noSurat,
});
if (res?.status === 200) {
if (statusFix == "selesai") {
setTimeout(() => {
setOpenedPreview(true)
}, 1000)
} else {
sendWA({
status: statusFix,
linkSurat: "",
linkUpdate: statusFix == "ditolak" ? res.data?.linkUpdate ?? '' : '',
});
}
onAction();
close();
notification({
@@ -160,6 +221,17 @@ function DetailDataPengajuan({
}
}, [viewImg]);
useShallowEffect(() => {
if (uploading) {
sendWA({
status: "selesai",
linkSurat: "",
linkUpdate: "",
});
}
}, [uploading]);
return (
<>
<ModalFile
@@ -243,7 +315,10 @@ function DetailDataPengajuan({
{data?.status == "selesai" && (
<ModalSurat
open={openedPreview}
onClose={() => setOpenedPreview(false)}
onClose={() => {
setOpenedPreview(false)
setUploading(true)
}}
surat={data?.idSurat}
/>
)}
@@ -398,12 +473,12 @@ function DetailDataPengajuan({
</Group>
) : data?.status === "selesai" ? (
<Group justify="center" grow>
<Button
{/* <Button
variant="light"
onClick={() => setOpenedPreview(!openedPreview)}
>
Surat
</Button>
</Button> */}
</Group>
) : (
<></>
@@ -432,41 +507,48 @@ 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,
@@ -37,6 +38,7 @@ import { useEffect, useState } from "react";
import { useLocation } from "react-router-dom";
import useSwr from "swr";
export default function DetailPengaduanPage() {
const { search } = useLocation();
const query = new URLSearchParams(search);
@@ -60,6 +62,7 @@ export default function DetailPengaduanPage() {
<Stack gap={"xl"}>
<DetailDataPengaduan
data={data?.data?.pengaduan}
phone={data && data.data && data.data.warga ? data.data.warga.phone : null}
onAction={() => {
mutate();
}}
@@ -77,9 +80,11 @@ export default function DetailPengaduanPage() {
function DetailDataPengaduan({
data,
phone,
onAction,
}: {
data: any | null;
phone?: string | null;
onAction: () => void;
}) {
const [opened, { open, close }] = useDisclosure(false);
@@ -121,6 +126,21 @@ function DetailDataPengaduan({
});
if (res?.status === 200) {
const resWA = await apiFetch.api["send-wa"].pengaduan.post({
noPengaduan: data?.noPengaduan,
judulPengaduan: data?.title,
status:
cat == "tolak"
? "ditolak"
: data.status == "antrian"
? "diterima"
: data.status == "diterima"
? "dikerjakan"
: "selesai",
alasan: keterangan,
tlp: String(phone),
})
onAction();
close();
notification({
@@ -128,6 +148,28 @@ function DetailDataPengaduan({
message: "Success update pengaduan",
type: "success",
});
if (resWA?.status === 200) {
if (resWA.data?.success) {
notification({
title: "Success",
message: "Success send message to warga",
type: "success",
});
} else {
notification({
title: "Failed",
message: "Failed send message to warga",
type: "error",
});
}
} else {
notification({
title: "Failed",
message: "Failed send message to warga",
type: "error",
});
}
} else {
notification({
title: "Error",
@@ -420,41 +462,48 @@ 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

@@ -8,16 +8,19 @@ export async function createSurat({ idPengajuan, idCategory, idWarga, noSurat }:
idCategory,
idWarga,
noSurat,
},
select: {
id: true
}
})
if (!surat.id) {
return { success: false, message: 'gagal membuat surat' }
return { success: false, message: 'gagal membuat surat', idSurat: '' }
}
return { success: true, message: 'surat sudah dibuat' }
return { success: true, message: 'surat sudah dibuat', idSurat: surat.id }
} catch (error) {
console.log(error)
console.error(error)
return { success: false, message: 'gagal membuat surat' }
}

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

@@ -39,7 +39,7 @@ const PelayananRoute = new Elysia({
}, {
detail: {
summary: "List Kategori Pelayanan Surat",
description: `tool untuk mendapatkan list kategori pelayanan surat beserta syaratnya untuk memenuhi syarat dokumen sesuai kategori yg dipilih saat melakukan pengajuan surat`,
description: `tool untuk mendapatkan list kategori pelayanan surat dan juga berisi link form pengajuan surat`,
tags: ["mcp"]
}
})
@@ -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"
}
})
@@ -589,7 +593,10 @@ const PelayananRoute = new Elysia({
const { nomerPengajuan } = body
const data = await prisma.pelayananAjuan.findFirst({
where: {
noPengajuan: nomerPengajuan
noPengajuan: {
equals: nomerPengajuan,
mode: "insensitive"
}
},
select: {
id: true,
@@ -684,6 +691,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 +718,8 @@ const PelayananRoute = new Elysia({
value: item.value,
desc: ref?.desc ?? "",
name: ref?.name ?? "",
type: ref?.type ?? "",
options: ref?.options ?? [],
order: ref?.order ?? Infinity,
};
})
@@ -731,6 +745,19 @@ const PelayananRoute = new Elysia({
}
})
const alasanDitolak = await prisma.historyPelayanan.findFirst({
where: {
idPengajuanLayanan: data?.id,
status: "ditolak"
},
select: {
keteranganAlasan: true,
},
orderBy: {
createdAt: "desc"
}
})
const dataHistoryFix = dataHistory.map((item) => {
return {
id: item.id,
@@ -757,12 +784,14 @@ const PelayananRoute = new Elysia({
createdAt: data?.createdAt,
updatedAt: data?.updatedAt,
idSurat: dataSurat?.id,
alasan: alasanDitolak?.keteranganAlasan,
}
const datafix = {
success: true,
message: 'sukses',
pengajuan: dataPengajuan,
linkUpdate: `${process.env.BUN_PUBLIC_BASE_URL}/darmasaba/update-data-surat?pengajuan=${data.noPengajuan}`,
history: dataHistoryFix,
warga: warga,
syaratDokumen: dataSyaratFix,
@@ -805,9 +834,14 @@ const PelayananRoute = new Elysia({
})
if (!pengajuan) {
return { success: false, message: 'gagal update status pengajuan surat' }
return { success: false, message: 'gagal update status pengajuan surat', linkUpdate: '', idSurat: '' }
}
const dataPengajuan = await prisma.pelayananAjuan.findUnique({
where: { id: pengajuan.id },
select: { noPengajuan: true }
});
if (status === "diterima") {
deskripsi = "Pengajuan surat diterima"
} else if (status === "ditolak") {
@@ -826,11 +860,19 @@ const PelayananRoute = new Elysia({
}
})
let idSurat = "";
if (status === "selesai") {
await createSurat({ idPengajuan: pengajuan.id, idCategory: pengajuan.idCategory, idWarga: pengajuan.idWarga, noSurat })
const result = await createSurat({ idPengajuan: pengajuan.id, idCategory: pengajuan.idCategory, idWarga: pengajuan.idWarga, noSurat })
idSurat = result.idSurat ?? "";
}
return { success: true, message: 'pengajuan surat sudah diperbarui' }
return {
success: true,
message: 'pengajuan surat sudah diperbarui',
linkUpdate: status == "ditolak" ? `${process.env.BUN_PUBLIC_BASE_URL}/darmasaba/update-data-surat?pengajuan=${dataPengajuan?.noPengajuan}` : '',
idSurat: idSurat,
}
}, {
body: t.Object({
id: t.String({ minLength: 1, error: "id harus diisi" }),

View File

@@ -415,7 +415,7 @@ const PengaduanRoute = new Elysia({
const datafix = {
pengaduan: {},
history: [],
warga: {},
warga: null,
}
return datafix
@@ -436,6 +436,9 @@ const PengaduanRoute = new Elysia({
name: true,
}
}
},
orderBy: {
createdAt: "desc"
}
})

View File

@@ -0,0 +1,153 @@
import Elysia, { t } from "elysia";
const SendWaRoute = new Elysia({
prefix: "send-wa",
tags: ["send-wa"],
})
// --- KATEGORI PENGADUAN ---
.post("/pengaduan", async ({ body }) => {
const { noPengaduan, judulPengaduan, status, alasan, tlp } = body
let text = ""
if (status === "ditolak") {
text = `Pemberitahuan Aduan
Aduan dengan Nomor Pengaduan: ${noPengaduan}
Judul Pengaduan: ${judulPengaduan}
Kami informasikan bahwa aduan tersebut tidak dapat ditindaklanjuti (ditolak).
Alasan penolakan:${alasan}
Terima kasih atas pengertian Bapak/Ibu.`
} else if (status == "diterima") {
text = `Pemberitahuan Aduan
Aduan dengan Nomor Pengaduan: ${noPengaduan}
Judul Pengaduan: ${judulPengaduan}
Telah kami terima dan akan segera diproses sesuai ketentuan yang berlaku.
Terima kasih atas laporan Bapak/Ibu.`
} else if (status == "dikerjakan") {
text = `Pemberitahuan Aduan
Aduan dengan Nomor Pengaduan: ${noPengaduan}
Judul Pengaduan: ${judulPengaduan}
Saat ini sedang dalam proses penanganan oleh petugas terkait.
Mohon menunggu informasi selanjutnya.`
} else if (status == "selesai") {
text = `Pemberitahuan Aduan
Aduan dengan Nomor Pengaduan: ${noPengaduan}
Judul Pengaduan: ${judulPengaduan}
Telah selesai ditindaklanjuti.
Terima kasih atas partisipasi dan kepercayaan Bapak/Ibu.`
}
const textFix = encodeURIComponent(text)
const res = await fetch(
`https://cld-dkr-prod-wajs-server.wibudev.com/api/wa/code?nom=${tlp}&text=${textFix}`,
{
cache: "no-cache",
headers: {
Authorization: `Bearer ${process.env.WA_SERVER_TOKEN}`,
},
}
);
if (res.status !== 200)
return { success: false, message: "Nomor Whatsapp Tidak Aktif" }
return { success: true, message: 'Pemberitahuan berhasil dikirim ke warga' }
}, {
body: t.Object({
noPengaduan: t.String({ minLength: 1, error: "nomer pengaduan harus diisi" }),
judulPengaduan: t.String({ minLength: 1, error: "judul pengaduan harus diisi" }),
status: t.String({ minLength: 1, error: "status harus diisi" }),
alasan: t.String({ optional: true }),
tlp: t.String({ minLength: 1, error: "nomor telepon harus diisi" }),
}),
detail: {
summary: "Send pemberitahuan pengaduan lewat WA",
description: `tool untuk send pemberitahuan pengaduan lewat WA`
}
})
.post("/pengajuan-surat", async ({ body }) => {
const { noPengajuan, jenisSurat, status, alasan, tlp, linkSurat, linkUpdate } = body
let text = ""
if (status === "ditolak") {
text = `Pemberitahuan Pengajuan Surat
Nomor Pengajuan: ${noPengajuan}
Surat: ${jenisSurat}
Kami informasikan bahwa pengajuan surat tersebut tidak dapat diproses (ditolak).
Alasan penolakan: ${alasan}
Bapak/Ibu dapat melakukan perbaikan atau pembaruan data melalui tautan berikut:
👉 ${linkUpdate}
Setelah data diperbarui, pengajuan akan diproses kembali sesuai ketentuan yang berlaku.
Terima kasih atas pengertian Bapak/Ibu.`
} else if (status == "diterima") {
text = `Pemberitahuan Pengajuan Surat
Nomor Pengajuan: ${noPengajuan}
Surat: ${jenisSurat}
Kami informasikan bahwa pengajuan surat yang Bapak/Ibu ajukan telah kami terima dan sedang menunggu proses verifikasi serta penanganan lebih lanjut.
Terima kasih atas kesabaran Bapak/Ibu.`
} else if (status == "selesai") {
text = `Pemberitahuan Pengajuan Surat
Nomor Pengajuan: ${noPengajuan}
Surat: ${jenisSurat}
Kami informasikan bahwa pengajuan surat tersebut telah selesai diproses.
Bapak/Ibu dapat mengunduh surat melalui tautan berikut:
👉 ${linkSurat}
Terima kasih atas kepercayaan Bapak/Ibu.`
}
const textFix = encodeURIComponent(text)
const res = await fetch(
`https://cld-dkr-prod-wajs-server.wibudev.com/api/wa/code?nom=${tlp}&text=${textFix}`,
{
cache: "no-cache",
headers: {
Authorization: `Bearer ${process.env.WA_SERVER_TOKEN}`,
},
}
);
if (res.status !== 200)
return { success: false, message: "Nomor Whatsapp Tidak Aktif" }
return { success: true, message: 'Pemberitahuan berhasil dikirim ke warga' }
}, {
body: t.Object({
noPengajuan: t.String({ minLength: 1, error: "nomer pengajuan harus diisi" }),
jenisSurat: t.String({ minLength: 1, error: "jenis surat harus diisi" }),
status: t.String({ minLength: 1, error: "status harus diisi" }),
alasan: t.String({ optional: true }),
linkSurat: t.String({ optional: true }),
linkUpdate: t.String({ optional: true }),
tlp: t.String({ minLength: 1, error: "nomor telepon harus diisi" }),
}),
detail: {
summary: "Send pemberitahuan pengajuan surat lewat WA",
description: `tool untuk send pemberitahuan pengajuan surat lewat WA`
}
})
;
export default SendWaRoute