From 7f14cbd04413df37ad4122c0adbdb7e9ceb66d53 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 11 Nov 2025 14:52:45 +0800 Subject: [PATCH 1/7] Added occupancy apis --- backend/main.go | 162 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 148 insertions(+), 14 deletions(-) diff --git a/backend/main.go b/backend/main.go index a3641a0..0753780 100644 --- a/backend/main.go +++ b/backend/main.go @@ -158,6 +158,35 @@ func connect() { "result2": array2, }) + case "get-listopprinting-occupancy": + var result2 string + + array := []string{} + array2 := []string{} + + results, err := db.Query(`SELECT IFNULL(o.controlNo, '') AS result, IF(c.firstName IS NULL OR c.firstName = '', c.lastName, CONCAT(c.firstName, ' ', IF(c.middleInitial IS NULL OR c.middleInitial = '', '', CONCAT(c.middleInitial, '. ')), c.lastName) ) AS result2 + FROM occupancy o JOIN customer c ON o.customerid = c.customerid JOIN ref_occupancy_type rot ON o.ref_occupancy_typeid = rot.ref_occupancy_typeid JOIN ref_occupancy ro ON rot.ref_occupancyid = ro.ref_occupancyid JOIN occupancydocflowtxn od ON o.occupancyid = od.occupancyreceivingid JOIN (SELECT occupancyreceivingid, MAX(occupancydocflowtxnid) AS latest_occupancydocflowtxnid FROM occupancydocflowtxn GROUP BY occupancyreceivingid) latest_doc ON od.occupancyreceivingid = latest_doc.occupancyreceivingid AND od.occupancydocflowtxnid = latest_doc.latest_occupancydocflowtxnid + WHERE remarks = ? AND is_approve = 0 ORDER BY o.controlNo ASC`, "APPROVED FOR PRINTING OF BUREAU OF FIRE AND ORDER OF PAYMENT") + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + c.String(http.StatusBadRequest, err.Error()) + return + } + for results.Next() { + err = results.Scan(&result, &result2) + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + c.String(http.StatusBadRequest, err.Error()) + return + } + array = append(array, result) + array2 = append(array2, result2) + } + c.JSON(http.StatusOK, gin.H{ + "result": array, + "result2": array2, + }) + case "get-listopprinting-electrical": var result2 string @@ -262,7 +291,7 @@ func connect() { }) - router.GET("/api/:method/:data", func(c *gin.Context) { + router.GET("/api/:method/:data/fetch-data", func(c *gin.Context) { var result string method := c.Param("method") data := c.Param("data") @@ -749,6 +778,29 @@ func connect() { "result": result, }) + case "get-printdetails-occupancy": + var result2, result3, result4, result5, result6, result7, result8 string + + err := db.QueryRow(`SELECT DISTINCT IFNULL(o.controlNo, '') AS result, IFNULL(op.opDate, '') AS result2, IFNULL(r.locationofconstruction, '') AS result3, IFNULL(ro.occupancy, '') AS result4, IFNULL(rot.occupancyType, '') AS result5, IFNULL(o.noOfPermitsApplied, '') AS result6, IFNULL(e.employeename, '') AS result7, + IF(cu.firstName IS NULL OR cu.firstName = '', cu.lastName, CONCAT(cu.firstName, ' ', IF(cu.middleInitial IS NULL OR cu.middleInitial = '', '', CONCAT(cu.middleInitial, '. ')), cu.lastName) ) AS result8 + FROM occupancy o LEFT JOIN receiving r on o.bldgApplicationNo = r.applicationNo JOIN occupancy_orderofpayment op ON o.occupancyid = op.occupancyid JOIN ref_occupancy_type rot ON o.ref_occupancy_typeid = rot.ref_occupancy_typeid JOIN ref_occupancy ro ON rot.ref_occupancyid = ro.ref_occupancyid JOIN customer cu ON o.customerid = cu.customerid JOIN employee e ON op.assessedbyid = e.employeeid + WHERE op.is_approve = 1 AND op.for_approval = 1 AND op.is_release = 0 AND is_paid = 0 AND popstransmitted = 0 AND o.occupancyid = ?`, data).Scan(&result, &result2, &result3, &result4, &result5, &result6, &result7, &result8) + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + c.String(http.StatusBadRequest, err.Error()) + return + } + c.JSON(http.StatusOK, gin.H{ + "result": result, + "result2": result2, + "result3": result3, + "result4": result4, + "result5": result5, + "result6": result6, + "result7": result7, + "result8": result8, + }) + case "get-printdetails-electrical": var result2, result3, result4, result5, result6, result7, result8 string @@ -772,15 +824,46 @@ func connect() { "result8": result8, }) + case "get-printdetailsfees-occupancy": + var result2, result3 string + array := []string{} + array2 := []string{} + array3 := []string{} + + results, err := db.Query(`SELECT IFNULL(ref.accountdescription, '') AS result, IFNULL(ref.accountcode, '') AS result2, IFNULL(op.amount, '') AS result3 + FROM occupancy o JOIN occupancy_orderofpayment op ON o.occupancyid = op.occupancyid JOIN ref_bldgcomputationsheet ref ON op.ref_bldgcomputationsheetid = ref.ref_bldgcomputationsheetid + WHERE op.is_approve = 1 AND op.for_approval = 1 AND op.is_release = 0 AND op.is_paid = 0 AND op.popstransmitted = 0 AND op.is_delete <> 1 AND op.occupancyid = ?`, data) + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + c.String(http.StatusBadRequest, err.Error()) + return + } + for results.Next() { + err = results.Scan(&result, &result2, &result3) + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + c.String(http.StatusBadRequest, err.Error()) + return + } + array = append(array, result) + array2 = append(array2, result2) + array3 = append(array3, result3) + } + c.JSON(http.StatusOK, gin.H{ + "result": array, + "result2": array2, + "result3": array3, + }) + case "get-printdetailsfees-electrical": var result2, result3 string array := []string{} array2 := []string{} array3 := []string{} - results, err := db.Query(`SELECT IFNULL(ref.accountdescription, '') AS result, IFNULL(ref.accountcode, '') AS result2, IFNULL(op.amount, '') AS result3 FROM electrical_orderofpayment_new op, ref_bldgcomputationsheet ref, electrical el - WHERE op.is_approve = 1 AND op.for_approval = 1 AND op.is_release = 0 AND op.is_paid = 0 AND op.popstransmitted = 0 AND op.is_delete <> 1 AND op.ref_bldgcomputationsheetid = ref.ref_bldgcomputationsheetid - AND el.electricalid = op.electricalid AND op.electricalid = ?`, data) + results, err := db.Query(`SELECT IFNULL(ref.accountdescription, '') AS result, IFNULL(ref.accountcode, '') AS result2, IFNULL(op.amount, '') AS result3 + FROM electrical el JOIN electrical_orderofpayment_new op ON el.electricalid = op.electricalid JOIN ref_bldgcomputationsheet ref ON op.ref_bldgcomputationsheetid = ref.ref_bldgcomputationsheetid + WHERE op.is_approve = 1 AND op.for_approval = 1 AND op.is_release = 0 AND op.is_paid = 0 AND op.popstransmitted = 0 AND op.is_delete <> 1 AND op.electricalid = ?`, data) if err != nil { c.AbortWithError(http.StatusBadRequest, err) c.String(http.StatusBadRequest, err.Error()) @@ -825,6 +908,17 @@ func connect() { "result": result, }) + case "get-signeddateassessed-occupancy": + err := db.QueryRow(`SELECT IFNULL(txndate, '') AS result FROM occupancydocflowtxn WHERE occupancyreceivingid = ? AND remarks = "FOR OCCUPANCY RECOMMENDING APPROVAL"`, data).Scan(&result) + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + c.String(http.StatusBadRequest, err.Error()) + return + } + c.JSON(http.StatusOK, gin.H{ + "result": result, + }) + case "get-signeddateassessed-electrical": err := db.QueryRow(`SELECT IFNULL(txndate, '') AS result FROM electricaldocflowtxn WHERE electricalid = ? AND remarks = "FOR ELECTRICAL ORDER OF PAYMENT APPROVAL"`, data).Scan(&result) if err != nil { @@ -938,7 +1032,7 @@ func connect() { } }) - router.GET("/api/:method/:data/:data2", func(c *gin.Context) { + router.GET("/api/:method/:data/:data2/fetch-data", func(c *gin.Context) { var result string method := c.Param("method") data := c.Param("data") @@ -1021,7 +1115,7 @@ func connect() { }) - router.POST("/api/post-newstatus-occupancy", func(c *gin.Context) { + router.POST("/api/post-newstatus-occupancy", middleware.TokenChecker(), func(c *gin.Context) { type NewstatusData struct { Data int `json:"data"` //occuapancyid Data2 string `json:"data2"` //date @@ -1069,7 +1163,7 @@ func connect() { }) - router.POST("/api/post-newstatus-electrical", func(c *gin.Context) { + router.POST("/api/post-newstatus-electrical", middleware.TokenChecker(), func(c *gin.Context) { type NewstatusData struct { Data int `json:"data"` Data2 string `json:"data2"` @@ -1117,7 +1211,7 @@ func connect() { }) - router.POST("/api/update-docflow-occupancy", func(c *gin.Context) { + router.POST("/api/update-docflow-occupancy", middleware.TokenChecker(), func(c *gin.Context) { type UpdateDocflowData struct { Data int `json:"data"` Data2 string `json:"data2"` @@ -1164,7 +1258,7 @@ func connect() { } }) - router.POST("/api/update-docflow-electrical", func(c *gin.Context) { + router.POST("/api/update-docflow-electrical", middleware.TokenChecker(), func(c *gin.Context) { type UpdateDocflowData struct { Data int `json:"data"` Data2 string `json:"data2"` @@ -1211,7 +1305,47 @@ func connect() { } }) - router.POST("/api/update-opprinted-electrical", func(c *gin.Context) { + router.POST("/api/update-opprinted-occupancy", middleware.TokenChecker(), func(c *gin.Context) { + type UpdateOpData struct { + Data int `json:"data"` + } + var updateOpData UpdateOpData + if err := c.ShouldBindJSON(&updateOpData); err != nil { + c.String(http.StatusBadRequest, "Invalid request body") + return + } + + c.Writer.Header().Set("X-XSS-Protection", "1; mode=block") + c.Writer.Header().Set("X-Content-Type-Options", "nosniff") + c.Writer.Header().Set("X-DNS-Prefetch-Control", "off") + c.Writer.Header().Set("X-Frame-Options", "DENY") + c.Writer.Header().Set("X-Download-Options", "noopen") + c.Writer.Header().Set("Referrer-Policy", "no-referrer") + + dbpost, err := db.Prepare("UPDATE iips.occupancy_orderofpayment SET popstransmitted = 1, is_release = 1 WHERE occupancyid = ? AND for_approval = 1 AND is_paid = 0 AND is_approve = 1") + if err != nil { + panic(err.Error()) + } + defer dbpost.Close() + + exec, err := dbpost.Exec(updateOpData.Data) + if err != nil { + panic(err.Error()) + } + + affect, err := exec.RowsAffected() + if err != nil { + panic(err.Error()) + } + + if affect > 0 { + c.String(http.StatusOK, "Success on Updating Order of Payment for Printing") + } else { + c.String(http.StatusInternalServerError, "Failed on Updating Order of Payment for Printing") + } + }) + + router.POST("/api/update-opprinted-electrical", middleware.TokenChecker(), func(c *gin.Context) { type UpdateOpData struct { Data int `json:"data"` } @@ -1251,7 +1385,7 @@ func connect() { } }) - router.POST("/api/post-esigntransaction", func(c *gin.Context) { + router.POST("/api/post-esigntransaction", middleware.TokenChecker(), func(c *gin.Context) { type UpdateOpData struct { Data int `json:"data"` Data2 string `json:"data2"` @@ -1293,7 +1427,7 @@ func connect() { } }) - router.POST("/api/post-pops", func(c *gin.Context) { + router.POST("/api/post-pops", middleware.TokenChecker(), func(c *gin.Context) { type PostPopData struct { Data string `json:"data"` //applicationNo Data2 string `json:"data2"` //date @@ -1346,7 +1480,7 @@ func connect() { } }) - router.POST("/api/update-opapproved-occupancy", func(c *gin.Context) { + router.POST("/api/update-opapproved-occupancy", middleware.TokenChecker(), func(c *gin.Context) { type UpdateOpData struct { Data int `json:"data"` } @@ -1393,7 +1527,7 @@ func connect() { } }) - router.POST("/api/update-opapproved-electrical", func(c *gin.Context) { + router.POST("/api/update-opapproved-electrical", middleware.TokenChecker(), func(c *gin.Context) { type UpdateOpData struct { Data int `json:"data"` } From 79407086f3089f7af1f1767f0bde07f78878f747 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 11 Nov 2025 14:54:49 +0800 Subject: [PATCH 2/7] Added parts counting on token checker --- backend/middleware/tokenChecker.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/backend/middleware/tokenChecker.go b/backend/middleware/tokenChecker.go index 012aa8f..2b604cb 100644 --- a/backend/middleware/tokenChecker.go +++ b/backend/middleware/tokenChecker.go @@ -77,21 +77,36 @@ func TokenChecker() gin.HandlerFunc { } parts := strings.Split(decrypted, "-") - requested := parts[2] - requestedNum, _ := strconv.Atoi(requested) - expiration := parts[3] - expirationNum, _ := strconv.Atoi(expiration) + partCount := len(parts) + var finalRequest int + var finalExpiration int + + if partCount == 4 { + requested := parts[2] + requestedNum, _ := strconv.Atoi(requested) + finalRequest = requestedNum + expiration := parts[3] + expirationNum, _ := strconv.Atoi(expiration) + finalExpiration = expirationNum + } else { + requested := parts[3] + requestedNum, _ := strconv.Atoi(requested) + finalRequest = requestedNum + expiration := parts[4] + expirationNum, _ := strconv.Atoi(expiration) + finalExpiration = expirationNum + } unix := strconv.FormatInt(time.Now().UTC().Unix(), 10) unixNum, _ := strconv.Atoi(unix) - if requestedNum > expirationNum { + if finalRequest > finalExpiration { c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid OCBO Token Value"}) c.Abort() return } - if unixNum > expirationNum { + if unixNum > finalExpiration { c.JSON(http.StatusUnauthorized, gin.H{"error": "OCBO Token Expired"}) c.Abort() return From 8176032cb16e5f70a7ea55566316d34bd2a52f53 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 11 Nov 2025 14:55:08 +0800 Subject: [PATCH 3/7] Updated pages --- src/pages/AssessorPage/Assessor.tsx | 254 +++++++++++++++++----------- src/pages/MainPage/Main.tsx | 12 +- 2 files changed, 155 insertions(+), 111 deletions(-) diff --git a/src/pages/AssessorPage/Assessor.tsx b/src/pages/AssessorPage/Assessor.tsx index aa8c9c7..0de383d 100644 --- a/src/pages/AssessorPage/Assessor.tsx +++ b/src/pages/AssessorPage/Assessor.tsx @@ -2,7 +2,6 @@ import './Assessor.sass' import { Logo, Page, Row, Padding, ModalButton, Button, Clickable, Link, Modal, Column, Box, Input } from '../../components' import { FiLogOut } from 'solid-icons/fi' import { Tabs } from '@kobalte/core/tabs' -import { ofetch } from 'ofetch' import { onMount, createSignal, Show, createEffect } from 'solid-js' import dayjs from 'dayjs' import { checkConnection, createPdf } from '../../utils/functions' @@ -11,8 +10,8 @@ import { _employeeName, _employeeId } from '../../stores/employee' import { useNavigate } from '@solidjs/router' import { _applicationNo, _date, _optn, _name, _location, _type, _assessor, _feeList, _codeList, _amountList, _signatureAssessor, _signatureApprover, _assessorid, _approvedDate, _assessedDate } from '../../stores/pdfinfo' import { VsRefresh } from 'solid-icons/vs' +import { getApi, getApiMulti, postApi } from '../../utils/functions' -const API = import.meta.env.VITE_BACKEND const PESO = import.meta.env.VITE_PESO export default () => { @@ -43,18 +42,14 @@ export default () => { const [filter, setFilter] = createSignal('') const checkAccess = async (access: string) => { - try { - const response = await ofetch(`${API}check-access/${access}/${employeeId()}`) - const result = response.result - if (result > 0) return true - else return false - } catch { - return false - } + const response = await getApi('check-access', access, employeeId()) + const result = response + if (result > 0) return true + else return false } - const getPrintDetails = async (id: number) => { - const response = await ofetch(API + 'get-printdetails-electrical/' + id) + const getPrintDetails = async (division: string, id: number) => { + const response = await getApiMulti(`get-printdetails-${division}`, id) const applicationno = response.result const date = response.result2 const location = response.result3 @@ -72,8 +67,8 @@ export default () => { _assessorid.set(employeeId()) } - const getPrintDetailsFees = async (id: number) => { - const response = await ofetch(API + 'get-printdetailsfees-electrical/' + id) + const getPrintDetailsFees = async (division: string, id: number) => { + const response = await getApiMulti(`get-printdetailsfees-${division}`, id) const feeList = response.result const accountCodeList = response.result2 const amountList = response.result3 @@ -111,7 +106,9 @@ export default () => { const closeNotification = async () => { setPrinted(false) await checkDivision() - await getListForPrinting() + if (isBuilding()) await getListForPrinting('building') + if (isOccupancy()) await getListForPrinting('occupancy') + if (isElectrical()) await getListForPrinting('electrical') } const checkDivision = async () => { @@ -125,8 +122,14 @@ export default () => { setIsElectrical(electrical) } - const getopdetails = async (applicationNo: string) => { - const op = await ofetch(API + 'get-opdetails-electrical/' + applicationNo, { parseResponse: JSON.parse }) + const getopdetails = async (division: string, applicationNo: string) => { + // let op = [] + // if (division === 'building') op = await getApiMulti('get-opdetails-building', applicationNo) + // if (division === 'occupancy') op = await getApiMulti('get-opdetails-occupancy', applicationNo) + // if (division === 'electrical') op = await getApiMulti('get-opdetails-electrical', applicationNo) + + const op = await getApiMulti(`get-opdetails-${division}`, applicationNo) + setLocation(op.result[0]) setType(op.result2[0]) setAssessor(op.result3[0]) @@ -140,15 +143,16 @@ export default () => { // setDateOpList(op.result10) // calculateAmounts() - getPrintDetails(op.result6[0]) - getPrintDetailsFees(op.result6[0]) + getPrintDetails(division, op.result6[0]) + getPrintDetailsFees(division, op.result6[0]) + getSignatureImage(employeeId()) const approversignId = await geteSignId(276) getApprovedDate(approversignId, applicationNo) // const assessorId = await getEmployeeId(op.result7[0]) // const assessorsignId = await geteSignId(assessorId) - getAssessedDate(op.result6[0]) + getAssessedDate(division, op.result6[0]) } const calculateTotal = (list: number[]) => { @@ -156,9 +160,9 @@ export default () => { return total } - const getListForPrinting = async () => { + const getListForPrinting = async (division: string) => { try { - const response = await ofetch(API + 'get-listopprinting-electrical', { parseResponse: JSON.parse }) + const response = await getApiMulti(`get-listopprinting-${division}`) if (filter() !== '' && filter().trim().length !== 0) { const filteredApplications = response.result.filter((item: string) => item.includes(filter())) @@ -194,7 +198,7 @@ export default () => { return true } - const printHandler = async (application: string) => { + const printHandler = async (division: string, application: string) => { let signed: boolean = false let forprinting: boolean = false let updateOrderofpayment: boolean = false @@ -205,13 +209,13 @@ export default () => { return } - signed = await setNewStatus('ELECTRICAL ORDER OF PAYMENT PRINTED', '171', 'ELECOPPRINTED', 1) + signed = await setNewStatus(division, 'ELECTRICAL ORDER OF PAYMENT PRINTED', '171', 'ELECOPPRINTED', 1) if (!signed) return - forprinting = await setNewStatus('FOR ELECTRICAL OFFICIAL RECEIPT VALIDATION', '98', 'ELECORVALIDATE', 0) + forprinting = await setNewStatus(division, 'FOR ELECTRICAL OFFICIAL RECEIPT VALIDATION', '98', 'ELECORVALIDATE', 0) if (!forprinting) return - updateOrderofpayment = await updateOp() + updateOrderofpayment = await updateOp(division) if (updateOrderofpayment) { postTransaction(application) @@ -221,42 +225,28 @@ export default () => { } } - const updateOp = async () => { - try { - await ofetch(API + 'update-opprinted-electrical', { - method: 'POST', - body: { data: parseInt(applicationId().toString()) }, - }) - return true - } catch { - return false - } + const updateOp = async (division: string) => { + const post = await postApi(`update-opprinted-${division}`, { data: parseInt(applicationId().toString()) }) + return post } - const setNewStatus = async (status: string, tag: string, tagword: string, approved: number) => { + const setNewStatus = async (division: string, status: string, tag: string, tagword: string, approved: number) => { const today = new Date() const formattedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') const statusid = parseInt(applicationId().toString()) - try { - await ofetch(API + 'post-newstatus-electrical', { - method: 'POST', - body: { data: statusid, data2: formattedDate, data3: status, data4: tag, data5: tagword, data6: parseInt(approved.toString()), data7: parseInt(employeeId().toString()) }, - }) - return true - } catch { - return false - } + const post = await postApi(`post-newstatus-${division}`, { data: statusid, data2: formattedDate, data3: status, data4: tag, data5: tagword, data6: parseInt(approved.toString()), data7: parseInt(employeeId().toString()) }) + return post } const getSignatureImage = async (id: number) => { try { - const response = await ofetch(API + 'get-signatureimage/' + id, { parseResponse: JSON.parse }) - const image = response.result + const response = await getApi('get-signatureimage', id) + const image = response _signatureAssessor.set(image) - const response2 = await ofetch(API + 'get-signatureimage/' + 276, { parseResponse: JSON.parse }) - const image2 = response2.result + const response2 = await getApi('get-signatureimage', 276) + const image2 = response2 _signatureApprover.set(image2) return true } catch { @@ -266,8 +256,8 @@ export default () => { const geteSignId = async (id: number) => { try { - const response = await ofetch(API + 'get-esignid/' + id, { parseResponse: JSON.parse }) - const result = response.result + const response = await getApi('get-esignid', id) + const result = response return result } catch { return 0 @@ -279,31 +269,17 @@ export default () => { const today = new Date() const formatedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') - await ofetch(API + 'post-esigntransaction', { - method: 'POST', - body: { data: parseInt(id), data2: application, data3: formatedDate }, - }) + await postApi('post-esigntransaction', { data: parseInt(id), data2: application, data3: formatedDate }) } const getApprovedDate = async (id: number, application: string) => { - try { - const response = await ofetch(API + `get-signeddate/${id}/${application}`, { parseResponse: JSON.parse }) - const result = response.result - _approvedDate.set(result) - } catch (error) { - _approvedDate.set('') - } + const response = await getApi('get-signeddate', id, application) + _approvedDate.set(response) } - const getAssessedDate = async (electricalid: number) => { - try { - const response = await ofetch(API + 'get-signeddateassessed-electrical/' + electricalid, { parseResponse: JSON.parse }) - const result = response.result - console.log('date', result) - _assessedDate.set(result) - } catch (error) { - _assessedDate.set('') - } + const getAssessedDate = async (division: string, id: number) => { + const response = await getApi(`get-signeddateassessed-${division}`, id) + _assessedDate.set(response) } // const getEmployeeId = async (name: string) => { @@ -317,7 +293,9 @@ export default () => { // } const refresh = async () => { - await getListForPrinting() + if (isBuilding()) await getListForPrinting('building') + if (isOccupancy()) await getListForPrinting('occupancy') + if (isElectrical()) await getListForPrinting('electrical') } const logout = async () => { @@ -335,15 +313,21 @@ export default () => { if (logged) { await checkDivision() - await getListForPrinting() + if (isBuilding()) await getListForPrinting('building') + if (isOccupancy()) await getListForPrinting('occupancy') + if (isElectrical()) await getListForPrinting('electrical') } }) createEffect(async () => { if (filter() !== '') { - await getListForPrinting() + if (isBuilding()) await getListForPrinting('building') + if (isOccupancy()) await getListForPrinting('occupancy') + if (isElectrical()) await getListForPrinting('electrical') } else if (filter() === '') { - await getListForPrinting() + if (isBuilding()) await getListForPrinting('building') + if (isOccupancy()) await getListForPrinting('occupancy') + if (isElectrical()) await getListForPrinting('electrical') } }) @@ -420,30 +404,10 @@ export default () => { - {/*

List of Ready to Approve and Sign Occupancy Order of Payments

*/} - + {/*

Under Development

-
-
- - - - - {/* - - - - */} - - -
Application NumberNameShow Details
-
-
- - - createPdf()}> -

List of Ready to Print in Electrical Order of Payments

-
+ */}{' '} +

List of Ready to Print in Occupancy Order of Payments

@@ -476,7 +440,7 @@ export default () => { background="#121e2acc" color="#ffffffec" function={async () => { - await getopdetails(item) + await getopdetails('occupancy', item) }} > @@ -517,7 +481,95 @@ export default () => { - + + Click anywhere to cancel + + + + + + ))} + + + +
+ + +

List of Ready to Print in Electrical Order of Payments

+
+ + + + + + + + + + + + + + + + + + + {applicationList().map((item, index) => ( + + + + +
Application NumberNameShow Details
{item}{nameList()[index]} + { + await getopdetails('electrical', item) + }} + > + + {item} + + + + + + + + + + + + + + + + + Click anywhere to cancel diff --git a/src/pages/MainPage/Main.tsx b/src/pages/MainPage/Main.tsx index 8f2722a..cb55ecf 100644 --- a/src/pages/MainPage/Main.tsx +++ b/src/pages/MainPage/Main.tsx @@ -2,7 +2,6 @@ import './Main.sass' import { Logo, Link, Page, Row, Padding, ModalButton, Box, Button, Modal, Column, Clickable } from '../../components/' import { FiLogOut } from 'solid-icons/fi' import { Tabs } from '@kobalte/core/tabs' -import { ofetch } from 'ofetch' import { onMount, createSignal } from 'solid-js' import dayjs from 'dayjs' import { checkConnection, getApi, getApiMulti, postApi } from '../../utils/functions' @@ -13,7 +12,6 @@ import { _applicationNo, _date, _optn, _name, _location, _type, _assessor, _feeL import { VsRefresh } from 'solid-icons/vs' import { BiRegularErrorAlt } from 'solid-icons/bi' -const API = import.meta.env.VITE_BACKEND const PESO = import.meta.env.VITE_PESO const ID = import.meta.env.VITE_HEADID // const NAME = import.meta.env.VITE_HEAD @@ -265,10 +263,7 @@ export default () => { const formattedDatewithTime = dayjs(today).format('YYYY-MM-DD HH:mm:ss') for (let i = 0; i < response.result.length; i++) { - await ofetch(API + 'post-pops', { - method: 'POST', - body: { data: application, data2: formattedDate, data3: customerid, data4: customerName, data5: location, data6: codeList[i], data7: amountList[i], data8: assessor(), data9: formattedDatewithTime, data10: lguList[i], data11: dpwhList[i], data12: boList[i], data13: PUBLICIP }, - }) + await postApi('post-pops', { data: application, data2: formattedDate, data3: customerid, data4: customerName, data5: location, data6: codeList[i], data7: amountList[i], data8: assessor(), data9: formattedDatewithTime, data10: lguList[i], data11: dpwhList[i], data12: boList[i], data13: PUBLICIP }) } } @@ -335,10 +330,7 @@ export default () => { const today = new Date() const formatedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') - await ofetch(API + 'post-esigntransaction', { - method: 'POST', - body: { data: parseInt(id), data2: approvedApplication(), data3: formatedDate }, - }) + await postApi('post-esigntransaction', { data: parseInt(id), data2: approvedApplication(), data3: formatedDate }) } const updateDocflow = async (division: string, applicationid: number, status: string) => { From fd4a1df6b34a99d3d32520f72402a25bb5eab855 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 11 Nov 2025 14:55:51 +0800 Subject: [PATCH 4/7] Added /fetch-data to api requests --- src/utils/functions/getApi.ts | 31 ++++++++++++++++++++++++++---- src/utils/functions/getApiMulti.ts | 2 +- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/utils/functions/getApi.ts b/src/utils/functions/getApi.ts index c902370..9677087 100644 --- a/src/utils/functions/getApi.ts +++ b/src/utils/functions/getApi.ts @@ -1,14 +1,37 @@ +// import { ofetch } from 'ofetch' + +// const API = import.meta.env.VITE_BACKEND + +// export default async (api: string, value?: any) => { +// try { +// let fetch +// if (!value) { +// fetch = await ofetch(API + api, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) +// } else { +// fetch = await ofetch(API + `${api}/${value}`, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) +// } +// const result = fetch.result +// return result +// } catch { +// return [] +// } +// } + import { ofetch } from 'ofetch' const API = import.meta.env.VITE_BACKEND -export default async (api: string, value?: any) => { +export default async (api: string, value?: any, value2?: any) => { try { let fetch - if (!value) { - fetch = await ofetch(API + api, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) + if (!value2) { + if (!value) { + fetch = await ofetch(API + api, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) + } else { + fetch = await ofetch(API + `${api}/${value}/fetch-data`, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) + } } else { - fetch = await ofetch(API + `${api}/${value}`, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) + fetch = await ofetch(API + `${api}/${value}/${value2}/fetch-data`, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) } const result = fetch.result return result diff --git a/src/utils/functions/getApiMulti.ts b/src/utils/functions/getApiMulti.ts index c595379..7b9d70e 100644 --- a/src/utils/functions/getApiMulti.ts +++ b/src/utils/functions/getApiMulti.ts @@ -8,7 +8,7 @@ export default async (api: string, value?: any) => { if (!value) { fetch = await ofetch(API + api, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) } else { - fetch = await ofetch(API + `${api}/${value}`, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) + fetch = await ofetch(API + `${api}/${value}/fetch-data`, { parseResponse: JSON.parse, retry: 3, retryDelay: 500, retryStatusCodes: [400, 404, 405, 500, 502] }) } return fetch From 541c66b4bd0772c0cca33ed45521256526f8db03 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 11 Nov 2025 14:56:12 +0800 Subject: [PATCH 5/7] Redefined encryption on posting --- src/utils/functions/postApi.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/utils/functions/postApi.ts b/src/utils/functions/postApi.ts index 7195db6..87bb1e2 100644 --- a/src/utils/functions/postApi.ts +++ b/src/utils/functions/postApi.ts @@ -1,6 +1,6 @@ import { ofetch } from 'ofetch' -import encryptAes from './encryptAes' import dayjs from 'dayjs' +import encryptRsa from './encryptRsa' const API = import.meta.env.VITE_BACKEND @@ -8,9 +8,9 @@ export default async (api: string, body: Object) => { const today = new Date() const todayUnix = dayjs(today).unix() const expiration = todayUnix + 9 - const aes = await encryptAes(`${todayUnix.toString()}-${expiration.toString()}`) + const aes = await encryptRsa(`${api.toString()}-${todayUnix.toString()}-${expiration.toString()}`) - const hash = `ocbo-${aes}-token` + const hash = `ocbo=${aes}token` try { await ofetch(API + api, { headers: { @@ -18,6 +18,9 @@ export default async (api: string, body: Object) => { 'Cache-Control': 'no-cache', 'OCBO-Token': hash, }, + retry: 3, + retryDelay: 500, + retryStatusCodes: [400, 404, 405, 500, 502], method: 'POST', body: body, }) From 213fca2050e8f4980005cd14a2d49ace9e239822 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 11 Nov 2025 14:58:42 +0800 Subject: [PATCH 6/7] Cleanup index --- src/utils/functions/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/functions/index.ts b/src/utils/functions/index.ts index d78b458..65794fc 100644 --- a/src/utils/functions/index.ts +++ b/src/utils/functions/index.ts @@ -3,4 +3,3 @@ export { default as createPdf } from './createPdf' export { default as postApi } from './postApi' export { default as getApi } from './getApi' export { default as getApiMulti } from './getApiMulti' -// export { default as generateFavicon } from './generateFavicon' From a5a49e478f4f3f364c14632f1e7b6206d91038ef Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 11 Nov 2025 15:00:04 +0800 Subject: [PATCH 7/7] Updated gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e752e65..3cb4c70 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ dist-ssr # environment variables .env.local /backend/.env +/backend/tmp # jetbrains setting folder .idea/