- {{ getJenisBarangLabel(barang.jenisBarangDetail) }}
+ {{
+ barang.jenisBarangDetailLabel
+ ? barang.jenisBarangDetailLabel
+ : barang.jenisBarangDetail
+ }}
|
{{ barang.kuantitiBarang }}
@@ -406,9 +410,19 @@ const cancelBarangModal = () => {
const saveBarangModal = () => {
if (editingBarangIndex.value === null) {
- barangList.value.push({ ...currentBarang.value });
+ barangList.value.push({
+ ...currentBarang.value,
+ jenisBarangDetailLabel: getJenisBarangLabel(
+ currentBarang.value.jenisBarangDetail
+ ),
+ });
} else {
- barangList.value[editingBarangIndex.value] = { ...currentBarang.value };
+ barangList.value[editingBarangIndex.value] = {
+ ...currentBarang.value,
+ jenisBarangDetailLabel: getJenisBarangLabel(
+ currentBarang.value.jenisBarangDetail
+ ),
+ };
}
isBarangModalOpen.value = false;
};
diff --git a/pages/permohonan-temujanji/senarai/index.vue b/pages/permohonan-temujanji/senarai/index.vue
index 6fe4c12..19c8dab 100644
--- a/pages/permohonan-temujanji/senarai/index.vue
+++ b/pages/permohonan-temujanji/senarai/index.vue
@@ -20,7 +20,6 @@
}"
:options-advanced="{
sortable: true,
- responsive: true,
filterable: false,
}"
advanced
@@ -62,10 +61,7 @@
{
+ const { noSiri } = event.context.params; // Extract the noSiri from the URL
+ const body = await readBody(event); // Read the request body
+
+ const { ringkasanKenyataanKes, noKertasSiasatan, noLaporanPolis } = body;
+
+ // 1. Validate the input fields (all three fields must be provided)
+ if (!ringkasanKenyataanKes || !noKertasSiasatan || !noLaporanPolis) {
+ return {
+ statusCode: 400,
+ message:
+ "Setiap medan mandatori yang bertanda * telah diisi. (Ralat CMN-E001)",
+ };
+ }
+
+ try {
+ // 2. Check if the permohonan exists by its `no_siri`
+ const existingPermohonan = await prisma.permohonan.findUnique({
+ where: { no_siri: noSiri },
+ });
+
+ // If no `permohonan` is found, return a 404 error
+ if (!existingPermohonan) {
+ return {
+ statusCode: 404,
+ message: `Permohonan with noSiri ${noSiri} not found.`,
+ };
+ }
+
+ // 3. Proceed to update only the allowed fields (ringkasanKenyataanKes, noKertasSiasatan, noLaporanPolis)
+ const updatedPermohonan = await prisma.permohonan.update({
+ where: { no_siri: noSiri },
+ data: {
+ ringkasan_kenyataan_kes: ringkasanKenyataanKes,
+ no_kertas_siasatan: noKertasSiasatan,
+ no_laporan_polis: noLaporanPolis,
+ modified_at: new Date(), // Update the modified_at timestamp
+ },
+ });
+
+ // 4. Return success response
+ return {
+ statusCode: 200,
+ message: "Permohonan telah berjaya dikemaskini.",
+ data: updatedPermohonan,
+ };
+ } catch (error) {
+ console.error("Error updating permohonan:", error);
+ return {
+ statusCode: 500,
+ message: "Gagal mengemaskini permohonan. Sila cuba lagi.",
+ };
+ }
+});
diff --git a/server/api/laporan/[reportID].get.js b/server/api/laporan/[reportID].get.js
new file mode 100644
index 0000000..852273a
--- /dev/null
+++ b/server/api/laporan/[reportID].get.js
@@ -0,0 +1,103 @@
+// Path: /api/report/[reportID].get.js
+
+export default defineEventHandler(async (event) => {
+ const { reportID } = event.context.params;
+
+ try {
+ const report = await prisma.report.findUnique({
+ where: { reportID: parseInt(reportID) },
+ include: {
+ permohonan: {
+ include: {
+ penghantar: true,
+ pemohon: {
+ include: {
+ user: true,
+ },
+ },
+ },
+ },
+ lookup_report_jenis_barangTolookup: true,
+ lookup_report_dapatanTolookup: {
+ select: {
+ lookupID: true,
+ lookupValue: true,
+ },
+ },
+ report_doc_support: {
+ include: {
+ document: true,
+ },
+ },
+ },
+ });
+
+ console.log(report);
+
+ if (!report) {
+ return { statusCode: 404, message: "Report not found" };
+ }
+
+ // Format the data for the frontend
+ const reportData = {
+ kesId: report.permohonan.no_siri,
+ tagNo: report.tanda_barang,
+ jenisBrg: report.lookup_report_jenis_barangTolookup.lookupValue,
+ jenisPemeriksaan: "Forensik", // Assuming it's static for now
+ pegawai: {
+ PENYIASAT: {
+ nama: report.permohonan.pemohon?.user?.userFullName || "",
+ pangkat: report.permohonan.pemohon?.pangkat_pemohon || "",
+ noPegawai: report.permohonan.pemohon?.no_pegawai_pemohon || "",
+ },
+ PENGHANTAR: {
+ nama: report.permohonan.penghantar_sama_dengan_pemohon
+ ? report.permohonan.pemohon?.user?.userFullName || ""
+ : report.permohonan.penghantar?.nama_penghantar || "",
+ pangkat: report.permohonan.penghantar_sama_dengan_pemohon
+ ? report.permohonan.pemohon?.pangkat_pemohon || ""
+ : report.permohonan.penghantar?.pangkat_penghantar || "",
+ noPegawai: report.permohonan.penghantar_sama_dengan_pemohon
+ ? report.permohonan.pemohon?.no_pegawai_pemohon || ""
+ : report.permohonan.penghantar?.no_pegawai_penghantar || "",
+ },
+ PEMERIKSA: {
+ nama: report.permohonan.pemerikasa?.user?.userFullName || "",
+ pangkat: report.permohonan.pemerikasa?.pangkat_pemerikasa || "",
+ noPegawai: report.permohonan.pemerikasa?.no_pegawai_pemerikasa || "",
+ },
+ PENERIMA: {
+ nama: report.permohonan.penerima?.user?.userFullName || "",
+ pangkat: report.permohonan.penerima?.pangkat_penerima || "",
+ noPegawai: report.permohonan.penerima?.no_pegawai_penerima || "",
+ },
+
+ // Fill in other roles accordingly
+ },
+ peralatan: report.peralatan,
+ langkah2: report.langkah_langkah,
+ dapatan: {
+ value: report.lookup_report_dapatanTolookup?.lookupID,
+ label: report.lookup_report_dapatanTolookup?.lookupValue,
+ },
+ documentTambahan: report.report_doc_support
+ ? [
+ {
+ nama: report.report_doc_support[0].document.documentName,
+ file: report.report_doc_support[0].document.documentURL,
+ },
+ ]
+ : [
+ {
+ nama: "",
+ file: "",
+ }
+ ],
+ };
+
+ return { statusCode: 200, data: reportData };
+ } catch (error) {
+ console.log(error);
+ return { statusCode: 500, message: error.message };
+ }
+});
diff --git a/server/api/laporan/[reportID].post.js b/server/api/laporan/[reportID].post.js
new file mode 100644
index 0000000..b34e2c0
--- /dev/null
+++ b/server/api/laporan/[reportID].post.js
@@ -0,0 +1,63 @@
+// Path: /api/report/[reportID].post.js
+export default defineEventHandler(async (event) => {
+ const { reportID } = event.context.params;
+ const body = await readBody(event);
+
+ const {
+ peralatan,
+ langkah2,
+ dapatan, // This should correspond to lookupID in the `lookup` table
+ documentTambahan, // Array of documents
+ } = body;
+
+ console.log(body);
+
+ try {
+ // Update the report in the database
+ const updatedReport = await prisma.report.update({
+ where: { reportID: parseInt(reportID) },
+ data: {
+ peralatan,
+ langkah_langkah: langkah2,
+ dapatan: parseInt(dapatan), // Assuming this is a lookupID from the `lookup` table
+ },
+ });
+
+ // Handle document uploads (if necessary)
+ if (documentTambahan && documentTambahan.length > 0) {
+ // Create documents first
+ const createdDocuments = await prisma.document.createMany({
+ data: documentTambahan.map((doc) => ({
+ documentName: doc.nama,
+ })),
+ skipDuplicates: true,
+ });
+
+ // Get the IDs of the newly created documents
+ const newDocumentIds = await prisma.document.findMany({
+ where: {
+ documentName: {
+ in: documentTambahan.map((doc) => doc.nama),
+ },
+ },
+ select: {
+ documentID: true,
+ documentName: true,
+ },
+ });
+
+ // Update report_doc_support table
+ await prisma.report_doc_support.createMany({
+ data: newDocumentIds.map((doc) => ({
+ reportID: updatedReport.reportID,
+ documentID: doc.documentID,
+ })),
+ });
+ }
+
+ return { statusCode: 200, message: "Report updated successfully" };
+ } catch (error) {
+ console.log(error);
+ return { statusCode: 500, message: "Failed to update report" };
+ }
+});
diff --git a/server/api/lookup/index.js b/server/api/lookup/index.js
index a9363b3..58c0d3b 100644
--- a/server/api/lookup/index.js
+++ b/server/api/lookup/index.js
@@ -1,3 +1,4 @@
+// path: /api/lookup?type=jenis_barang
export default defineEventHandler(async (event) => {
const { type } = getQuery(event); // Get lookup type from query params, e.g., jenis_barang, dapatan
@@ -20,10 +21,22 @@ export default defineEventHandler(async (event) => {
lookupValue: true,
},
});
+ if (!lookups) {
+ return {
+ statusCode: 404,
+ message: "Lookup data not found",
+ };
+ }
+
+ // Convert snake_case to Title Case: e.g., jenis_barang_siber -> Jenis Barang Siber
+ const defaultTitle = type
+ .split("_")
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
+ .join(" ");
// Transform the lookups data to the required format
const transformedLookups = [
- { label: "", value: null }, // Add an empty option as the first item
+ { label: `Sila Pilih ${defaultTitle}`, value: null }, // Add an empty option as the first item
...lookups.map((lookup) => ({
label: lookup.lookupValue,
value: lookup.lookupID,
diff --git a/server/api/permohonan/[noSiri].get.js b/server/api/permohonan/[noSiri].get.js
index 152f900..b2f98c4 100644
--- a/server/api/permohonan/[noSiri].get.js
+++ b/server/api/permohonan/[noSiri].get.js
@@ -22,7 +22,20 @@ export default defineEventHandler(async (event) => {
},
},
penghantar: true,
- report: true, // Assuming 'report' is where the `barang` (items) are stored
+ report: {
+ select: {
+ jenis_barang: true,
+ lookup_report_jenis_barangTolookup: {
+ select: {
+ lookupID: true,
+ lookupValue: true,
+ },
+ },
+ tanda_barang: true,
+ keadaan_barang: true,
+ kuantiti_barang: true,
+ },
+ },
},
});
@@ -47,7 +60,10 @@ export default defineEventHandler(async (event) => {
ringkasanKenyataanKes: permohonan.ringkasan_kenyataan_kes || "",
bilangan: permohonan.bilangan || 0,
barangList: permohonan.report.map((barang) => ({
- jenisBarangDetail: barang.jenis_barang || "",
+ jenisBarangDetail:
+ barang.lookup_report_jenis_barangTolookup.lookupID || "",
+ jenisBarangDetailLabel:
+ barang.lookup_report_jenis_barangTolookup.lookupValue || "",
tandaBarang: barang.tanda_barang || "",
keadaanBarang: barang.keadaan_barang || "",
kuantitiBarang: barang.kuantiti_barang || 0,
diff --git a/server/api/permohonan/[noSiri].put.js b/server/api/permohonan/[noSiri].put.js
index 7977a8f..419512c 100644
--- a/server/api/permohonan/[noSiri].put.js
+++ b/server/api/permohonan/[noSiri].put.js
@@ -127,21 +127,13 @@ export default defineEventHandler(async (event) => {
});
for (const barang of barangList) {
- // await prisma.report.create({
- // data: {
- // permohonanID: updatedPermohonan.id,
- // jenis_barang: barang.jenisBarangDetail,
- // kuantiti_barang: barang.kuantitiBarang,
- // tanda_barang: barang.tandaBarang,
- // keadaan_barang: barang.keadaanBarang,
- // create_by: userID,
- // create_at: new Date(),
- // },
- // });
await prisma.report.create({
data: {
permohonanID: updatedPermohonan.id,
jenis_barang: barang.jenisBarangDetail,
+ kuantiti_barang: parseInt(barang.kuantitiBarang),
+ tanda_barang: barang.tandaBarang,
+ keadaan_barang: barang.keadaanBarang,
create_by: userID,
create_at: new Date(),
},
diff --git a/server/api/permohonan/[noSiri]/forensik/add.post.js b/server/api/permohonan/[noSiri]/forensik/add.post.js
new file mode 100644
index 0000000..593bdcc
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/forensik/add.post.js
@@ -0,0 +1,42 @@
+export default defineEventHandler(async (event) => {
+ const { noSiri } = event.context.params;
+ const body = await readBody(event);
+ const { pegawaiID } = body;
+
+ try {
+ // Ensure that the permohonan exists
+ const permohonan = await prisma.permohonan.findUnique({
+ where: { no_siri: noSiri },
+ });
+
+ if (!permohonan) {
+ return { statusCode: 404, message: "Permohonan tidak dijumpai." };
+ }
+
+ // Ensure that the pegawai is not already assigned
+ const existingAssignment =
+ await prisma.permohonan_assign_forensik.findFirst({
+ where: {
+ permohonanID: permohonan.id,
+ pegawai_forensikID: pegawaiID,
+ },
+ });
+
+ if (existingAssignment) {
+ return { statusCode: 400, message: "Pegawai sudah ditugaskan." };
+ }
+
+ // Assign the pegawai to this permohonan
+ await prisma.permohonan_assign_forensik.create({
+ data: {
+ permohonanID: permohonan.id,
+ pegawai_forensikID: pegawaiID,
+ },
+ });
+
+ return { statusCode: 200, message: "Pegawai berjaya ditambah." };
+ } catch (error) {
+ console.error(error);
+ return { statusCode: 500, message: "Error adding forensic officer." };
+ }
+});
diff --git a/server/api/permohonan/[noSiri]/forensik/available.get.js b/server/api/permohonan/[noSiri]/forensik/available.get.js
new file mode 100644
index 0000000..6b116ab
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/forensik/available.get.js
@@ -0,0 +1,51 @@
+export default defineEventHandler(async (event) => {
+ const { noSiri } = event.context.params;
+
+ try {
+ // Fetch the list of assigned officers
+ const assignedOfficers = await prisma.permohonan_assign_forensik.findMany({
+ where: { permohonan: { no_siri: noSiri } },
+ select: { pegawai_forensikID: true },
+ });
+
+ const assignedOfficerIDs = assignedOfficers.map(
+ (officer) => officer.pegawai_forensikID
+ );
+
+ // Fetch all pegawai forensik that are not assigned to this permohonan
+ const availablePegawai = await prisma.user.findMany({
+ where: {
+ userID: { notIn: assignedOfficerIDs },
+ userStatus: "ACTIVE",
+ userrole: {
+ some: {
+ role: {
+ roleName: "Pegawai Forensik",
+ },
+ },
+ },
+ },
+ select: {
+ userID: true,
+ userFullName: true,
+ userUsername: true,
+ },
+ });
+
+ return {
+ statusCode: 200,
+ data: [
+ { value: "", label: "Sila Pilih Pegawai" },
+ ...availablePegawai.map((pegawai) => ({
+ value: pegawai.userID,
+ label: `${pegawai.userFullName}`,
+ })),
+ ],
+ };
+ } catch (error) {
+ return {
+ statusCode: 500,
+ message: "Error fetching available forensic officers.",
+ };
+ }
+});
diff --git a/server/api/permohonan/[noSiri]/forensik/delete.delete.js b/server/api/permohonan/[noSiri]/forensik/delete.delete.js
new file mode 100644
index 0000000..d58633f
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/forensik/delete.delete.js
@@ -0,0 +1,27 @@
+export default defineEventHandler(async (event) => {
+ const { noSiri } = event.context.params;
+ const body = await readBody(event);
+ const { assignID } = body;
+
+ try {
+ // Fetch the existing permohonan
+ const permohonan = await prisma.permohonan.findUnique({
+ where: { no_siri: noSiri },
+ });
+
+ if (!permohonan) {
+ return { statusCode: 404, message: "Permohonan tidak dijumpai." };
+ }
+
+ // Delete the pegawai assignment
+ await prisma.permohonan_assign_forensik.delete({
+ where: {
+ assignID: assignID,
+ },
+ });
+
+ return { statusCode: 200, message: "Pegawai berjaya dipadamkan." };
+ } catch (error) {
+ return { statusCode: 500, message: "Error deleting forensic officer." };
+ }
+});
diff --git a/server/api/permohonan/[noSiri]/forensik/edit.put.js b/server/api/permohonan/[noSiri]/forensik/edit.put.js
new file mode 100644
index 0000000..ecff5ee
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/forensik/edit.put.js
@@ -0,0 +1,46 @@
+export default defineEventHandler(async (event) => {
+ const { noSiri } = event.context.params;
+ const body = await readBody(event);
+ const { oldPegawaiID, newPegawaiID, assignID } = body;
+
+ try {
+ // Fetch the existing permohonan
+ const permohonan = await prisma.permohonan.findUnique({
+ where: { no_siri: noSiri },
+ });
+
+ if (!permohonan) {
+ return { statusCode: 404, message: "Permohonan tidak dijumpai." };
+ }
+
+ // Check if the new pegawai is already assigned
+ const existingAssignment =
+ await prisma.permohonan_assign_forensik.findFirst({
+ where: {
+ permohonanID: permohonan.id,
+ pegawai_forensikID: newPegawaiID,
+ },
+ });
+
+ console.log("existingAssignment", existingAssignment);
+
+ if (existingAssignment) {
+ return { statusCode: 400, message: "Pegawai baru sudah ditugaskan." };
+ }
+
+ // Update the old pegawai with the new pegawai
+ await prisma.permohonan_assign_forensik.update({
+ where: {
+ assignID: assignID,
+ },
+ data: {
+ pegawai_forensikID: newPegawaiID,
+ },
+ });
+
+ return { statusCode: 200, message: "Pegawai berjaya dikemaskini." };
+ } catch (error) {
+ console.log(error);
+ return { statusCode: 500, message: "Error updating forensic officer." };
+ }
+});
diff --git a/server/api/permohonan/[noSiri]/forensik/list.get.js b/server/api/permohonan/[noSiri]/forensik/list.get.js
new file mode 100644
index 0000000..d433b41
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/forensik/list.get.js
@@ -0,0 +1,45 @@
+export default defineEventHandler(async (event) => {
+ const { noSiri } = event.context.params;
+
+ try {
+ // Fetch the permohonan by noSiri
+ const permohonan = await prisma.permohonan.findUnique({
+ where: { no_siri: noSiri },
+ select: {
+ permohonan_assign_forensik: {
+ include: {
+ user: {
+ select: {
+ userID: true,
+ userFullName: true,
+ userUsername: true,
+ },
+ },
+ },
+ },
+ },
+ });
+
+ if (!permohonan) {
+ return { statusCode: 404, message: "Permohonan tidak dijumpai." };
+ }
+
+ // Return the list of assigned forensic officers
+ const forensicOfficers = permohonan.permohonan_assign_forensik.map(
+ (assignment) => ({
+ nama: assignment.user.userFullName,
+ tindakan: {
+ userID: assignment.user.userID,
+ assignID: assignment.assignID,
+ },
+ })
+ );
+
+ return {
+ statusCode: 200,
+ data: forensicOfficers,
+ };
+ } catch (error) {
+ return { statusCode: 500, message: "Error fetching forensic officers." };
+ }
+});
diff --git a/server/api/permohonan/[noSiri]/reports.get.js b/server/api/permohonan/[noSiri]/reports.get.js
new file mode 100644
index 0000000..32691fa
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/reports.get.js
@@ -0,0 +1,38 @@
+// File: /api/permohonan/[noSiri]/reports.get.js
+
+export default defineEventHandler(async (event) => {
+ const { noSiri } = event.context.params;
+
+ try {
+ const permohonan = await prisma.permohonan.findUnique({
+ where: { no_siri: noSiri },
+ select: {
+ report: {
+ include: {
+ lookup_report_jenis_barangTolookup: true, // To get the jenis barang lookup data
+ },
+ },
+ },
+ });
+
+ if (!permohonan) {
+ return { statusCode: 404, message: "Permohonan tidak dijumpai." };
+ }
+
+ // Map reports to the frontend format
+ const reports = permohonan.report.map((report) => ({
+ jenisBarang: report.lookup_report_jenis_barangTolookup.lookupValue,
+ tagNo: report.tanda_barang,
+ keadaan: report.keadaan_barang,
+ kuantiti: report.kuantiti_barang,
+ tindakan: report.reportID,
+ }));
+
+ return {
+ statusCode: 200,
+ data: reports,
+ };
+ } catch (error) {
+ return { statusCode: 500, message: "Error fetching reports." };
+ }
+});
diff --git a/server/api/permohonan/[noSiri]/semak.post.js b/server/api/permohonan/[noSiri]/semak.post.js
new file mode 100644
index 0000000..03db61f
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/semak.post.js
@@ -0,0 +1,61 @@
+// File: /api/permohonan/[noSiri]/semak.put.js
+export default defineEventHandler(async (event) => {
+ const { noSiri } = event.context.params;
+ const body = await readBody(event); // Get form data from frontend
+
+ try {
+ // Get the current user (assuming user authentication is handled)
+ const user = event.context.user;
+
+ // Find the permohonan by its noSiri
+ const permohonan = await prisma.permohonan.findUnique({
+ where: { no_siri: noSiri },
+ });
+
+ if (!permohonan) {
+ return { statusCode: 404, message: "Permohonan tidak dijumpai." };
+ }
+
+ // Update or create the permohonan semakan entry
+ await prisma.permohonan_semakan.upsert({
+ where: {
+ permohonanID: permohonan.id,
+ },
+ update: {
+ peralatan_keadaan_baik: body.peralatanBaik === "Ya" ? 1 : 0,
+ pegawai_berkelayakan: body.pegawaiBerkelayakan === "Ya" ? 1 : 0,
+ kaedah_dpt_dilakukan: body.kaedahDapatDilakukan === "Ya" ? 1 : 0,
+ subkontrak_diperlukan: body.subkontrakDiperlukan === "Ya" ? 1 : 0,
+ tugasan_diterima: body.tugasanDiterima === "Ya" ? 1 : 0,
+ ulasan_pegawai: body.ulasanPegawaiKaunter,
+ disemak_oleh: user.userID, // Use the authenticated user ID
+ create_at: new Date(),
+ },
+ create: {
+ permohonanID: permohonan.id,
+ peralatan_keadaan_baik: body.peralatanBaik === "Ya" ? 1 : 0,
+ pegawai_berkelayakan: body.pegawaiBerkelayakan === "Ya" ? 1 : 0,
+ kaedah_dpt_dilakukan: body.kaedahDapatDilakukan === "Ya" ? 1 : 0,
+ subkontrak_diperlukan: body.subkontrakDiperlukan === "Ya" ? 1 : 0,
+ tugasan_diterima: body.tugasanDiterima === "Ya" ? 1 : 0,
+ ulasan_pegawai: body.ulasanPegawaiKaunter,
+ disemak_oleh: user.userID,
+ create_at: new Date(),
+ },
+ });
+
+ // Update the status of the permohonan to "Permohonan Disemak"
+ await prisma.permohonan.update({
+ where: { no_siri: noSiri },
+ data: { status_permohonan: "Permohonan Disemak" },
+ });
+
+ return {
+ statusCode: 200,
+ message: "Maklumat semakan berjaya dikemaskini.",
+ };
+ } catch (error) {
+ console.error(error);
+ return { statusCode: 500, message: "Gagal mengemaskini maklumat semakan." };
+ }
+});
diff --git a/server/api/permohonan/[noSiri]/status.get.js b/server/api/permohonan/[noSiri]/status.get.js
new file mode 100644
index 0000000..d07ba8b
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/status.get.js
@@ -0,0 +1,49 @@
+export default defineEventHandler(async (event) => {
+ // Extract the `noSiri` from the URL params
+ const { noSiri } = event.context.params;
+
+ try {
+ // Fetch the Semakan status
+ const semakan = await prisma.permohonan_semakan.findFirst({
+ where: {
+ permohonan: {
+ no_siri: noSiri,
+ },
+ },
+ select: {
+ semakanID: true, // Checking if semakan exists
+ },
+ });
+
+ // Fetch the Penerimaan status
+ const penerimaan = await prisma.permohonan_penerimaan.findFirst({
+ where: {
+ permohonan: {
+ no_siri: noSiri,
+ },
+ },
+ select: {
+ penerimaanID: true, // Checking if penerimaan exists
+ },
+ });
+
+ // Determine statuses based on existence
+ const statusSemakan = semakan ? "Selesai" : "Belum Disemak";
+ const statusPenerimaan = penerimaan ? "Diterima" : "Belum Diterima";
+
+ // Return the statuses
+ return {
+ statusCode: 200,
+ data: {
+ statusSemakan,
+ statusPenerimaan,
+ },
+ };
+ } catch (error) {
+ // Return an error if something goes wrong
+ return {
+ statusCode: 500,
+ message: "Gagal mendapatkan status",
+ };
+ }
+});
diff --git a/server/api/permohonan/[noSiri]/terima.post.js b/server/api/permohonan/[noSiri]/terima.post.js
new file mode 100644
index 0000000..b3754f9
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/terima.post.js
@@ -0,0 +1,64 @@
+// File: /api/permohonan/[noSiri]/terima.put.js
+export default defineEventHandler(async (event) => {
+ const { noSiri } = event.context.params;
+ const body = await readBody(event); // Get form data from frontend
+
+ try {
+ // Get the current user (assuming user authentication is handled)
+ const user = event.context.user;
+
+ // Find the permohonan by its noSiri
+ const permohonan = await prisma.permohonan.findUnique({
+ where: { no_siri: noSiri },
+ });
+
+ if (!permohonan) {
+ return { statusCode: 404, message: "Permohonan tidak dijumpai." };
+ }
+
+ // Create or update the permohonan penerimaan entry
+ await prisma.permohonan_penerimaan.upsert({
+ where: {
+ permohonanID: permohonan.id,
+ },
+ update: {
+ peralatan_keadaan_baik: body.peralatanBaik === "Ya" ? 1 : 0,
+ pegawai_berkelayakan: body.pegawaiBerkelayakan === "Ya" ? 1 : 0,
+ kaedah_dpt_dilakukan: body.kaedahDapatDilakukan === "Ya" ? 1 : 0,
+ subkontrak_diperlukan: body.subkontrakDiperlukan === "Ya" ? 1 : 0,
+ tugasan_diterima: body.tugasanDiterima === "Ya" ? 1 : 0,
+ ulasan_pegawai: body.ulasanPegawaiKaunter,
+ diterima_oleh: user.userID,
+ create_at: new Date(), // Store current date
+ },
+ create: {
+ permohonanID: permohonan.id,
+ peralatan_keadaan_baik: body.peralatanBaik === "Ya" ? 1 : 0,
+ pegawai_berkelayakan: body.pegawaiBerkelayakan === "Ya" ? 1 : 0,
+ kaedah_dpt_dilakukan: body.kaedahDapatDilakukan === "Ya" ? 1 : 0,
+ subkontrak_diperlukan: body.subkontrakDiperlukan === "Ya" ? 1 : 0,
+ tugasan_diterima: body.tugasanDiterima === "Ya" ? 1 : 0,
+ ulasan_pegawai: body.ulasanPegawaiKaunter,
+ diterima_oleh: user.userID,
+ create_at: new Date(),
+ },
+ });
+
+ // Update the status of the permohonan to "Diterima"
+ await prisma.permohonan.update({
+ where: { no_siri: noSiri },
+ data: { status_permohonan: "Permohonan Diterima" },
+ });
+
+ return {
+ statusCode: 200,
+ message: "Maklumat penerimaan berjaya dikemaskini.",
+ };
+ } catch (error) {
+ console.error(error);
+ return {
+ statusCode: 500,
+ message: "Gagal mengemaskini maklumat penerimaan.",
+ };
+ }
+});
diff --git a/server/api/permohonan/[noSiri]/tolak.post.js b/server/api/permohonan/[noSiri]/tolak.post.js
new file mode 100644
index 0000000..428087a
--- /dev/null
+++ b/server/api/permohonan/[noSiri]/tolak.post.js
@@ -0,0 +1,56 @@
+// File: /api/permohonan/[noSiri]/tolak.put.js
+export default defineEventHandler(async (event) => {
+ const { noSiri } = event.context.params;
+ const body = await readBody(event); // Get form data from frontend
+
+ try {
+ // Get the current user (assuming user authentication is handled)
+ const user = event.context.user;
+
+ // Find the permohonan by its noSiri
+ const permohonan = await prisma.permohonan.findUnique({
+ where: { no_siri: noSiri },
+ });
+
+ if (!permohonan) {
+ return { statusCode: 404, message: "Permohonan tidak dijumpai." };
+ }
+
+ // Create or update the permohonan penolakan entry
+ await prisma.permohonan_penolakan.upsert({
+ where: {
+ permohonanID: permohonan.id,
+ },
+ update: {
+ sebab_penolakan: parseInt(body.sebabPenolakan), // Assuming lookupID is passed
+ lain_sebab: body.lainLainSebab || null,
+ ditolak_oleh: user.userID,
+ create_at: new Date(),
+ },
+ create: {
+ permohonanID: permohonan.id,
+ sebab_penolakan: parseInt(body.sebabPenolakan),
+ lain_sebab: body.lainLainSebab || null,
+ ditolak_oleh: user.userID,
+ create_at: new Date(),
+ },
+ });
+
+ // Update the status of the permohonan to "Permohonan Ditolak"
+ await prisma.permohonan.update({
+ where: { no_siri: noSiri },
+ data: { status_permohonan: "Permohonan Ditolak" },
+ });
+
+ return {
+ statusCode: 200,
+ message: "Maklumat penolakan berjaya dikemaskini.",
+ };
+ } catch (error) {
+ console.error(error);
+ return {
+ statusCode: 500,
+ message: "Gagal mengemaskini maklumat penolakan.",
+ };
+ }
+});
diff --git a/server/api/permohonan/create.js b/server/api/permohonan/create.js
index c2f4d11..b117ee7 100644
--- a/server/api/permohonan/create.js
+++ b/server/api/permohonan/create.js
@@ -119,22 +119,13 @@ export default defineEventHandler(async (event) => {
// Insert related `report` and `document` data
for (const barang of barangList) {
- // await prisma.report.create({
- // data: {
- // permohonanID: newPermohonan.id,
- // jenis_barang: barang.jenisBarangDetail,
- // kuantiti_barang: barang.kuantitiBarang,
- // tanda_barang: barang.tandaBarang,
- // keadaan_barang: barang.keadaanBarang,
- // create_by: userID,
- // create_at: new Date(),
- // },
- // });
-
await prisma.report.create({
data: {
permohonanID: newPermohonan.id,
jenis_barang: barang.jenisBarangDetail,
+ kuantiti_barang: parseInt(barang.kuantitiBarang),
+ tanda_barang: barang.tandaBarang,
+ keadaan_barang: barang.keadaanBarang,
create_by: userID,
create_at: new Date(),
},
diff --git a/server/api/permohonan/index.js b/server/api/permohonan/index.js
index 0092020..393e352 100644
--- a/server/api/permohonan/index.js
+++ b/server/api/permohonan/index.js
@@ -2,24 +2,38 @@
export default defineEventHandler(async () => {
try {
const permohonan = await prisma.permohonan.findMany({
+ where: {
+ status_permohonan: {
+ notIn: ["Permohonan Ditolak"],
+ },
+ },
select: {
id: true,
no_siri: true,
create_at: true,
status_permohonan: true,
},
+ orderBy: {
+ create_at: "desc",
+ },
});
return {
statusCode: 200,
message: "Success",
- data: permohonan.map((item, index) => ({
- no: index + 1,
- noSiri: item.no_siri,
- tarikhMasa: item.create_at.toISOString().replace("T", " ").slice(0, 19),
- status: item.status_permohonan,
- butiran: item.id,
- })),
+ data: permohonan.map((item, index) => {
+ // Convert UTC to GMT+8
+ const gmt8Date = new Date(
+ item.create_at.getTime() + 8 * 60 * 60 * 1000
+ );
+ return {
+ no: index + 1,
+ noSiri: item.no_siri,
+ tarikhMasa: gmt8Date.toISOString().replace("T", " ").slice(0, 19),
+ status: item.status_permohonan,
+ butiran: item.id,
+ };
+ }),
};
} catch (error) {
return {
|