From db5a30a9bf57d7e44239e8c2792c07c0cc7f798c Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 14 Oct 2025 10:12:08 +0800 Subject: [PATCH 1/5] Added qr code on pdf --- package.json | 1 + pnpm-lock.yaml | 64 +++++++++++++++----------------------------------- 2 files changed, 20 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 1b1ae89..41c894b 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "ofetch": "^1.4.1", "openssl-nodejs": "^1.0.5", "pica": "^9.0.1", + "qrcode": "^1.5.4", "sharp": "^0.34.4", "solid-icons": "^1.1.0", "solid-js": "^1.9.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3938916..50c3ce6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,6 +50,9 @@ importers: pica: specifier: ^9.0.1 version: 9.0.1 + qrcode: + specifier: ^1.5.4 + version: 1.5.4 sharp: specifier: ^0.34.4 version: 0.34.4 @@ -2628,13 +2631,11 @@ snapshots: dependencies: event-target-shim: 5.0.1 - ansi-regex@5.0.1: - optional: true + ansi-regex@5.0.1: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - optional: true any-base@1.1.0: {} @@ -2686,8 +2687,7 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - camelcase@5.3.1: - optional: true + camelcase@5.3.1: {} caniuse-lite@1.0.30001743: {} @@ -2713,15 +2713,12 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - optional: true color-convert@2.0.1: dependencies: color-name: 1.1.4 - optional: true - color-name@1.1.4: - optional: true + color-name@1.1.4: {} colorjs.io@0.5.2: {} @@ -2747,8 +2744,7 @@ snapshots: dependencies: ms: 2.1.3 - decamelize@1.2.0: - optional: true + decamelize@1.2.0: {} destr@2.0.5: {} @@ -2757,8 +2753,7 @@ snapshots: detect-libc@2.1.0: {} - dijkstrajs@1.0.3: - optional: true + dijkstrajs@1.0.3: {} dompurify@3.2.7: optionalDependencies: @@ -2767,8 +2762,7 @@ snapshots: electron-to-chromium@1.5.222: {} - emoji-regex@8.0.0: - optional: true + emoji-regex@8.0.0: {} entities@6.0.1: {} @@ -2838,15 +2832,13 @@ snapshots: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - optional: true fsevents@2.3.3: optional: true gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: - optional: true + get-caller-file@2.0.5: {} gifwrap@0.10.1: dependencies: @@ -2880,8 +2872,7 @@ snapshots: is-extglob@2.1.1: optional: true - is-fullwidth-code-point@3.0.0: - optional: true + is-fullwidth-code-point@3.0.0: {} is-glob@4.0.3: dependencies: @@ -2949,7 +2940,6 @@ snapshots: locate-path@5.0.0: dependencies: p-locate: 4.1.0 - optional: true lru-cache@5.1.1: dependencies: @@ -3000,15 +2990,12 @@ snapshots: p-limit@2.3.0: dependencies: p-try: 2.2.0 - optional: true p-locate@4.1.0: dependencies: p-limit: 2.3.0 - optional: true - p-try@2.2.0: - optional: true + p-try@2.2.0: {} pako@1.0.11: {} @@ -3027,8 +3014,7 @@ snapshots: dependencies: entities: 6.0.1 - path-exists@4.0.0: - optional: true + path-exists@4.0.0: {} peek-readable@4.1.0: {} @@ -3053,8 +3039,7 @@ snapshots: dependencies: pngjs: 6.0.0 - pngjs@5.0.0: - optional: true + pngjs@5.0.0: {} pngjs@6.0.0: {} @@ -3073,7 +3058,6 @@ snapshots: dijkstrajs: 1.0.3 pngjs: 5.0.0 yargs: 15.4.1 - optional: true raf@3.4.1: dependencies: @@ -3098,11 +3082,9 @@ snapshots: regenerator-runtime@0.13.11: optional: true - require-directory@2.1.1: - optional: true + require-directory@2.1.1: {} - require-main-filename@2.0.0: - optional: true + require-main-filename@2.0.0: {} rgbcolor@1.0.1: optional: true @@ -3250,8 +3232,7 @@ snapshots: seroval@1.3.2: {} - set-blocking@2.0.0: - optional: true + set-blocking@2.0.0: {} sharp@0.34.4: dependencies: @@ -3330,7 +3311,6 @@ snapshots: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - optional: true string_decoder@1.3.0: dependencies: @@ -3339,7 +3319,6 @@ snapshots: strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - optional: true strtok3@6.3.0: dependencies: @@ -3450,15 +3429,13 @@ snapshots: webworkify@1.5.0: {} - which-module@2.0.1: - optional: true + which-module@2.0.1: {} wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - optional: true xml-parse-from-string@1.0.1: {} @@ -3469,8 +3446,7 @@ snapshots: xmlbuilder@11.0.1: {} - y18n@4.0.3: - optional: true + y18n@4.0.3: {} yallist@3.1.1: {} @@ -3478,7 +3454,6 @@ snapshots: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - optional: true yargs@15.4.1: dependencies: @@ -3493,6 +3468,5 @@ snapshots: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - optional: true zod@3.25.76: {} From 2ee72c8ae1e89b651cddb3bcba1c19c4856ba567 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 14 Oct 2025 10:13:48 +0800 Subject: [PATCH 2/5] Updated gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 198a888..eddba5f 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,7 @@ dist-ssr /blob-report/ /playwright/.cache/ +# backend +/backend/bin + From f55447a116a179790d8e868e9f8cbe348f1c9ee7 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 14 Oct 2025 10:13:57 +0800 Subject: [PATCH 3/5] Updated assessor page --- src/pages/AssessorPage/Assessor.tsx | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/pages/AssessorPage/Assessor.tsx b/src/pages/AssessorPage/Assessor.tsx index aa76a63..aa183ba 100644 --- a/src/pages/AssessorPage/Assessor.tsx +++ b/src/pages/AssessorPage/Assessor.tsx @@ -9,7 +9,7 @@ import { checkConnection, createPdf } from '../../utils/functions' import { FaSolidThumbsUp } from 'solid-icons/fa' import { _employeeName, _employeeId } from '../../stores/employee' import { useNavigate } from '@solidjs/router' -import { _applicationNo, _date, _optn, _name, _location, _type, _assessor, _feeList, _codeList, _amountList } from '../../stores/pdfinfo' +import { _applicationNo, _date, _optn, _name, _location, _type, _assessor, _feeList, _codeList, _amountList, _signature, _assessorid } from '../../stores/pdfinfo' const API = import.meta.env.VITE_BACKEND const PESO = import.meta.env.VITE_PESO @@ -48,6 +48,8 @@ export default () => { const [employeeId, setEmployeeId] = createSignal(0) const [employeeName, setEmployeeName] = createSignal('') + const [sign, setSign] = createSignal('') + // const [docApplicationNo, setDocApplicationNo] = createSignal('') // const [docDate, setDocDate] = createSignal('') // const [docLocation, setDocLocation] = createSignal('') @@ -79,6 +81,7 @@ export default () => { _location.set(location) _type.set(type) _assessor.set(assessor) + _assessorid.set(employeeId()) } const getPrintDetailsFees = async (id: number) => { @@ -151,6 +154,7 @@ export default () => { getPrintDetails(op.result11[0]) getPrintDetailsFees(op.result11[0]) + getSignatureImage(employeeId()) } const calculateTotal = (list: number[]) => { @@ -207,14 +211,14 @@ export default () => { // updateOrderofpayment = await updateOp() // if (updateOrderofpayment) { - // setPrintedApplication(application) - // setPrinted(true) - // getPrintDetails(applicationId()) + // setPrintedApplication(application) + // setPrinted(true) createPdf() // } } const updateOp = async () => { + console.log(applicationId()) try { await ofetch(API + 'update-opprinted-electrical', { method: 'POST', @@ -242,6 +246,17 @@ export default () => { } } + const getSignatureImage = async (id: number) => { + try { + const response = await ofetch(API + 'get-signatureimage/' + id, { parseResponse: JSON.parse }) + const image = response.result + _signature.set(image) + return true + } catch { + return false + } + } + const logout = async () => { removeEmployee() navigate('/') From b0d40edab3405d786692c5571baea94af36f565d Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 14 Oct 2025 10:14:05 +0800 Subject: [PATCH 4/5] Updated register page --- src/pages/RegisterPage/Register.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/RegisterPage/Register.tsx b/src/pages/RegisterPage/Register.tsx index bf2aba8..7463158 100644 --- a/src/pages/RegisterPage/Register.tsx +++ b/src/pages/RegisterPage/Register.tsx @@ -44,7 +44,7 @@ export default () => { setName(APPROVERNAME) } const hash = SHA3(id().toString()) - setSignature(`Scan this using OCBO e-Sign Validator - scanid=${hash.toString()}`) + setSignature(`Use OCBO e-Sign Validator - scanid=${hash.toString()}`) try { register() From 8b575d2926358b5a01bf5555490ce6528df5e902 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 14 Oct 2025 10:14:22 +0800 Subject: [PATCH 5/5] Updated backend --- backend/main.go | 96 ++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 50 deletions(-) diff --git a/backend/main.go b/backend/main.go index 51b2349..751706c 100644 --- a/backend/main.go +++ b/backend/main.go @@ -41,7 +41,8 @@ func connect() { //DEV router.Use(cors.New(cors.Config{ - AllowOrigins: []string{"http://localhost:5173"}, + AllowOrigins: []string{"http://localhost:5173"}, + // AllowAllOrigins: true, AllowMethods: []string{"GET", "POST"}, AllowHeaders: []string{"Origin", "OCBO-ShieldConnection"}, ExposeHeaders: []string{"Content-Length"}, @@ -662,31 +663,15 @@ func connect() { // array7 := []string{} // array8 := []string{} - err := db.QueryRow(`SELECT DISTINCT IFNULL(el.electricalNo, '') AS result, IFNULL(op.opDate, '') AS result2, IFNULL(el.locationofinstallation, '') AS result3, IFNULL(occ.occupancy, '') AS result4, IFNULL(u.occupancyoruse, '') AS result5, IFNULL(el.noofUnits, '') 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 electrical el, electrical_orderofpayment_new op, ref_occupancy occ, ref_elec_occupancy u, customer cu, employee e - WHERE el.customerid = cu.customerid AND el.ref_elec_occupancyid = u.ref_elec_occupancyid AND u.ref_occupancyid = occ.ref_occupancyid AND op.assessedbyid = e.employeeid - AND el.electricalid = op.electricalid AND op.is_approve = 0 AND op.for_approval = 1 AND op.is_release = 0 AND is_paid = 0 AND popstransmitted = 0 AND el.electricalid = ?`, data).Scan(&result, &result2, &result3, &result4, &result5, &result6, &result7, &result8) + err := db.QueryRow(`SELECT DISTINCT IFNULL(el.electricalNo, '') AS result, IFNULL(op.opDate, '') AS result2, IFNULL(el.locationofinstallation, '') AS result3, IFNULL(occ.occupancy, '') AS result4, IFNULL(u.occupancyoruse, '') AS result5, IFNULL(el.noofUnits, '') 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 electrical el, electrical_orderofpayment_new op, ref_occupancy occ, ref_elec_occupancy u, customer cu, employee e + WHERE el.customerid = cu.customerid AND el.ref_elec_occupancyid = u.ref_elec_occupancyid AND u.ref_occupancyid = occ.ref_occupancyid AND op.assessedbyid = e.employeeid + AND el.electricalid = op.electricalid AND op.is_approve = 1 AND op.for_approval = 1 AND op.is_release = 0 AND is_paid = 0 AND popstransmitted = 0 AND el.electricalid = ?`, 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 } - // for results.Next() { - // err = results.Scan(&result, &result2, &result3, &result4, &result5, &result6, &result7, &result8) - // 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) - // array4 = append(array4, result4) - // array5 = append(array5, result5) - // array6 = append(array6, result6) - // array7 = append(array7, result7) - // array8 = append(array8, result8) - // } c.JSON(http.StatusOK, gin.H{ "result": result, "result2": result2, @@ -705,7 +690,7 @@ func connect() { 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 = 0 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 + 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) if err != nil { c.AbortWithError(http.StatusBadRequest, err) @@ -729,6 +714,44 @@ func connect() { "result3": array3, }) + case "get-signatureimage": + err := db.QueryRow("SELECT IFNULL(image, '') AS result FROM esign WHERE employeeid = ?", 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, + }) + + } + }) + + router.GET("/api/:method/:data/:data2", func(c *gin.Context) { + var result string + method := c.Param("method") + data := c.Param("data") + data2 := c.Param("data2") + + 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") + + switch method { + case "check-access": + err = db.QueryRow("SELECT COUNT(accessid) AS result FROM access a JOIN ref_access ra ON a.ref_accessid = ra.ref_accessid AND ra.access = ? and employeeid = ?", data, data2).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, + }) } }) @@ -776,33 +799,6 @@ func connect() { }) - router.GET("/api/:method/:data/:data2", func(c *gin.Context) { - var result string - method := c.Param("method") - data := c.Param("data") - data2 := c.Param("data2") - - 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") - - switch method { - case "check-access": - err = db.QueryRow("SELECT COUNT(accessid) AS result FROM access a JOIN ref_access ra ON a.ref_accessid = ra.ref_accessid AND ra.access = ? and employeeid = ?", data, data2).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, - }) - } - }) - router.POST("/api/post-newstatus-electrical", func(c *gin.Context) { type RegistrationData struct { Data int `json:"data"` @@ -907,7 +903,7 @@ func connect() { c.Writer.Header().Set("X-Download-Options", "noopen") c.Writer.Header().Set("Referrer-Policy", "no-referrer") - dbpost, err := db.Prepare("UPDATE electrical_orderofpayment_new SET popstransmitted = 1 WHERE electricalid = ? AND for_approval = 1 AND is_release = 0 AND is_paid = 0 AND is_approve = 1") + dbpost, err := db.Prepare("UPDATE electrical_orderofpayment_new SET popstransmitted = 1, is_release = 1 WHERE electricalid = ? AND for_approval = 1 AND is_paid = 0 AND is_approve = 1") if err != nil { panic(err.Error()) }