From b31c1b762f9fdcc3d385c0b51c22bef5d787d604 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Thu, 13 Nov 2025 13:29:13 +0800 Subject: [PATCH 1/9] Renamed createPdf --- backend/main.go | 64 ++++--------------- src/pages/AssessorPage/Assessor.tsx | 8 ++- src/pages/MainPage/Main.tsx | 42 ++++++------ .../{createPdf.ts => createPdfElectrical.ts} | 0 4 files changed, 41 insertions(+), 73 deletions(-) rename src/utils/functions/{createPdf.ts => createPdfElectrical.ts} (100%) diff --git a/backend/main.go b/backend/main.go index b8f7248..5526075 100644 --- a/backend/main.go +++ b/backend/main.go @@ -1031,7 +1031,7 @@ func connect() { "result9": array9, }) - case "check-bldgadditional-approval": + case "check-bldgadditional-approval": err := db.QueryRow("SELECT COUNT(building_orderofpaymentid) AS result FROM building_orderofpayment WHERE occupancyid = (SELECT occupancyid FROM occupancy WHERE controlNo = ?) AND for_approval = 1 AND is_approve = 0 AND popstransmitted = 0 AND is_paid = 0 AND is_delete = 0", data).Scan(&result) if err != nil { c.AbortWithError(http.StatusBadRequest, err) @@ -1042,7 +1042,7 @@ func connect() { "result": result, }) - case "check-bldgadditional-printing": + case "check-bldgadditional-printing": err := db.QueryRow("SELECT COUNT(building_orderofpaymentid) AS result FROM building_orderofpayment WHERE occupancyid = (SELECT occupancyid FROM occupancy WHERE controlNo = ?) AND for_approval = 1 AND is_approve = 1 AND popstransmitted = 0 AND is_paid = 0 AND is_delete = 0", data).Scan(&result) if err != nil { c.AbortWithError(http.StatusBadRequest, err) @@ -1052,6 +1052,7 @@ func connect() { c.JSON(http.StatusOK, gin.H{ "result": result, }) + } }) @@ -1091,6 +1092,16 @@ func connect() { "result": result, }) + case "check-approval": + err := db.QueryRow("SELECT IFNULL(is_approve, 0) AS result FROM occupancydocflowtxn WHERE remarks = ? AND occupancyreceivingid = (SELECT occupancyid FROM occupancy WHERE controlNo = ?)", 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, + }) } }) @@ -1281,53 +1292,6 @@ func connect() { } }) - // router.POST("/api/update-docflow-bldgadditional", middleware.TokenChecker(), func(c *gin.Context) { - // type UpdateDocflowData struct { - // Data string `json:"data"` - // Data2 string `json:"data2"` - // } - // var updateDocflowData UpdateDocflowData - // if err := c.ShouldBindJSON(&updateDocflowData); 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 occupancydocflowtxn SET is_approve = 1 WHERE remarks = ? AND occupancyreceivingid = (SELECT occupancyid FROM occupancy WHERE controlNo = ?)") - // if err != nil { - // c.AbortWithError(http.StatusInternalServerError, err) - // c.String(http.StatusInternalServerError, "Internal Server Error") - // return - // } - // defer dbpost.Close() - - // exec, err := dbpost.Exec(updateDocflowData.Data, updateDocflowData.Data2) - // if err != nil { - // c.AbortWithError(http.StatusInternalServerError, err) - // c.String(http.StatusInternalServerError, "Internal Server Error") - // return - // } - - // affect, err := exec.RowsAffected() - // if err != nil { - // c.AbortWithError(http.StatusInternalServerError, err) - // c.String(http.StatusInternalServerError, "Internal Server Error") - // return - // } - - // if affect > 0 { - // c.String(http.StatusOK, "Success on Updating Docflow on Electrical") - // } else { - // c.String(http.StatusInternalServerError, "Failed on Updating Docflow on Electrical") - // } - // }) - router.POST("/api/update-docflow-electrical", middleware.TokenChecker(), func(c *gin.Context) { type UpdateDocflowData struct { Data string `json:"data"` @@ -1597,7 +1561,7 @@ func connect() { } }) - router.POST("/api/update-opapproved-bldgadditional", middleware.TokenChecker(), func(c *gin.Context) { + router.POST("/api/update-opapproved-bldgadditional", middleware.TokenChecker(), func(c *gin.Context) { type UpdateOpData struct { Data int `json:"data"` } diff --git a/src/pages/AssessorPage/Assessor.tsx b/src/pages/AssessorPage/Assessor.tsx index b96efb1..2c84053 100644 --- a/src/pages/AssessorPage/Assessor.tsx +++ b/src/pages/AssessorPage/Assessor.tsx @@ -411,9 +411,11 @@ export default () => { {/*

List of Ready to Approve and Sign Building Order of Payments

*/} - -

Under Development

-
+ + +

Under Development

+
+
diff --git a/src/pages/MainPage/Main.tsx b/src/pages/MainPage/Main.tsx index f327c6d..727e2c4 100644 --- a/src/pages/MainPage/Main.tsx +++ b/src/pages/MainPage/Main.tsx @@ -64,23 +64,15 @@ export default () => { } const getListForApprovalElectrical = async () => { - try { - const responseE = await getApiMulti('get-listopapproval-electrical') - setApplicationListElectrical(responseE.result) - setNameListElectrical(responseE.result2) - } catch (error) { - console.error(error) - } + const responseE = await getApiMulti('get-listopapproval-electrical') + setApplicationListElectrical(responseE.result) + setNameListElectrical(responseE.result2) } const getListForApprovalOccupancy = async () => { - try { - const responseO = await getApiMulti('get-listopapproval-occupancy') - setApplicationListOccupancy(responseO.result) - setNameListOccupancy(responseO.result2) - } catch (error) { - console.error(error) - } + const responseO = await getApiMulti('get-listopapproval-occupancy') + setApplicationListOccupancy(responseO.result) + setNameListOccupancy(responseO.result2) } const load = async (division: string) => { @@ -114,7 +106,7 @@ export default () => { const total = calculateTotal(op.result4) const formattedTotal = new Intl.NumberFormat('en-US', { minimumFractionDigits: 2, - // maximumFractionDigits: 2, + maximumFractionDigits: 2, }).format(total) setTotalOp(formattedTotal) setDateOp(dayjs(op.result5[0]).format('MMMM DD, YYYY')) @@ -159,7 +151,10 @@ export default () => { signed = await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT APPROVED AND SIGNED', '172', 'OCCOPAPPROVEDSIGNED', 1) updateDocflow(division, application, 'FOR OCCUPANCY RECOMMENDING APPROVAL') - if (bldgadditional) updateDocflow(division, application, 'FOR ADDITIONAL ORDER OF PAYMENT RECOMMENDING APPROVAL') + if (bldgadditional) { + const neededToUpdate = await checkApproval(application, 'FOR ADDITIONAL ORDER OF PAYMENT RECOMMENDING APPROVAL') + if (!neededToUpdate) updateDocflow(division, application, 'FOR ADDITIONAL ORDER OF PAYMENT RECOMMENDING APPROVAL') + } if (!signed) return forprinting = await setNewStatus(division, 'APPROVED FOR PRINTING OF BUREAU OF FIRE AND ORDER OF PAYMENT', '23', 'OCORDEROFPAYMENT', 0) @@ -305,6 +300,11 @@ export default () => { } } + const checkApproval = async (application: string, status: string) => { + const response = await getApi('check-approval', status, application) + return response + } + const logout = async () => { removeEmployee() navigate('/') @@ -362,9 +362,11 @@ export default () => { {/*

List of Ready to Approve and Sign Building Order of Payments

*/} - -

Under Development

-
+ + +

Under Development

+
+
@@ -382,7 +384,7 @@ export default () => {
-

List of Ready to Approve and Sign Occupancy Order of Payments

+

List of Ready to Approve and Sign in Occupancy Order of Payments

diff --git a/src/utils/functions/createPdf.ts b/src/utils/functions/createPdfElectrical.ts similarity index 100% rename from src/utils/functions/createPdf.ts rename to src/utils/functions/createPdfElectrical.ts From e179a165aee0ad47f5df6f5b7daa594ee094a18c Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Thu, 13 Nov 2025 17:01:08 +0800 Subject: [PATCH 2/9] Updated dependencies --- package.json | 9 +- pnpm-lock.yaml | 384 +++++++++++++++++++++++++++++++------------------ 2 files changed, 253 insertions(+), 140 deletions(-) diff --git a/package.json b/package.json index 6675e54..19a5b49 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "@fontsource-variable/roboto": "^5.2.8", "@kobalte/core": "^0.13.11", "@solidjs-use/integrations": "^2.3.0", - "@solidjs/router": "^0.15.3", + "@solidjs/router": "^0.15.4", "consola": "^3.4.2", "crypto-js": "^4.2.0", "dayjs": "^1.11.19", @@ -26,18 +26,19 @@ "openssl-nodejs": "^1.0.5", "pica": "^9.0.1", "qrcode": "^1.5.4", - "sharp": "^0.34.4", + "sharp": "^0.34.5", "solid-icons": "^1.1.0", "solid-js": "^1.9.10", "solidjs-use": "^2.3.0" }, "devDependencies": { + "@biomejs/biome": "2.3.5", "@nanostores/solid": "^1.1.1", "@types/crypto-js": "^4.2.2", - "@types/node": "^24.10.0", + "@types/node": "^24.10.1", "sass-embedded": "^1.93.3", "typescript": "~5.8.3", - "vite": "^7.2.0", + "vite": "^7.2.2", "vite-plugin-compression2": "^2.3.1", "vite-plugin-solid": "^2.11.10" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f106bf..abb431b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: ^2.3.0 version: 2.3.0(qrcode@1.5.4)(sortablejs@1.15.6) '@solidjs/router': - specifier: ^0.15.3 - version: 0.15.3(solid-js@1.9.10) + specifier: ^0.15.4 + version: 0.15.4(solid-js@1.9.10) consola: specifier: ^3.4.2 version: 3.4.2 @@ -60,8 +60,8 @@ importers: specifier: ^1.5.4 version: 1.5.4 sharp: - specifier: ^0.34.4 - version: 0.34.4 + specifier: ^0.34.5 + version: 0.34.5 solid-icons: specifier: ^1.1.0 version: 1.1.0(solid-js@1.9.10) @@ -72,6 +72,9 @@ importers: specifier: ^2.3.0 version: 2.3.0 devDependencies: + '@biomejs/biome': + specifier: 2.3.5 + version: 2.3.5 '@nanostores/solid': specifier: ^1.1.1 version: 1.1.1(nanostores@1.0.1)(solid-js@1.9.10) @@ -79,8 +82,8 @@ importers: specifier: ^4.2.2 version: 4.2.2 '@types/node': - specifier: ^24.10.0 - version: 24.10.0 + specifier: ^24.10.1 + version: 24.10.1 sass-embedded: specifier: ^1.93.3 version: 1.93.3 @@ -88,14 +91,14 @@ importers: specifier: ~5.8.3 version: 5.8.3 vite: - specifier: ^7.2.0 - version: 7.2.0(@types/node@24.10.0)(sass-embedded@1.93.3)(sass@1.93.3) + specifier: ^7.2.2 + version: 7.2.2(@types/node@24.10.1)(sass-embedded@1.93.3)(sass@1.93.3) vite-plugin-compression2: specifier: ^2.3.1 version: 2.3.1(rollup@4.52.1) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.10)(vite@7.2.0(@types/node@24.10.0)(sass-embedded@1.93.3)(sass@1.93.3)) + version: 2.11.10(solid-js@1.9.10)(vite@7.2.2(@types/node@24.10.1)(sass-embedded@1.93.3)(sass@1.93.3)) packages: @@ -184,6 +187,59 @@ packages: resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} + '@biomejs/biome@2.3.5': + resolution: {integrity: sha512-HvLhNlIlBIbAV77VysRIBEwp55oM/QAjQEin74QQX9Xb259/XP/D5AGGnZMOyF1el4zcvlNYYR3AyTMUV3ILhg==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.3.5': + resolution: {integrity: sha512-fLdTur8cJU33HxHUUsii3GLx/TR0BsfQx8FkeqIiW33cGMtUD56fAtrh+2Fx1uhiCsVZlFh6iLKUU3pniZREQw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.3.5': + resolution: {integrity: sha512-qpT8XDqeUlzrOW8zb4k3tjhT7rmvVRumhi2657I2aGcY4B+Ft5fNwDdZGACzn8zj7/K1fdWjgwYE3i2mSZ+vOA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.3.5': + resolution: {integrity: sha512-eGUG7+hcLgGnMNl1KHVZUYxahYAhC462jF/wQolqu4qso2MSk32Q+QrpN7eN4jAHAg7FUMIo897muIhK4hXhqg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@2.3.5': + resolution: {integrity: sha512-u/pybjTBPGBHB66ku4pK1gj+Dxgx7/+Z0jAriZISPX1ocTO8aHh8x8e7Kb1rB4Ms0nA/SzjtNOVJ4exVavQBCw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@2.3.5': + resolution: {integrity: sha512-awVuycTPpVTH/+WDVnEEYSf6nbCBHf/4wB3lquwT7puhNg8R4XvonWNZzUsfHZrCkjkLhFH/vCZK5jHatD9FEg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@2.3.5': + resolution: {integrity: sha512-XrIVi9YAW6ye0CGQ+yax0gLfx+BFOtKaNX74n+xHWla6Cl6huUmcKNO7HPx7BiKnJUzrxXY1qYlm7xMvi08X4g==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@2.3.5': + resolution: {integrity: sha512-DlBiMlBZZ9eIq4H7RimDSGsYcOtfOIfZOaI5CqsWiSlbTfqbPVfWtCf92wNzx8GNMbu1s7/g3ZZESr6+GwM/SA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.3.5': + resolution: {integrity: sha512-nUmR8gb6yvrKhtRgzwo/gDimPwnO5a4sCydf8ZS2kHIJhEmSmk+STsusr1LHTuM//wXppBawvSQi2xFXJCdgKQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@bufbuild/protobuf@2.9.0': resolution: {integrity: sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==} @@ -192,8 +248,8 @@ packages: peerDependencies: solid-js: ^1.8 - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/runtime@1.7.0': + resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} '@esbuild/aix-ppc64@0.25.10': resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} @@ -367,124 +423,135 @@ packages: resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.34.4': - resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.4': - resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.3': - resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.3': - resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.3': - resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.2.3': - resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.2.3': - resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.2.3': - resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.2.3': - resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': - resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.2.3': - resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.4': - resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.4': - resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-ppc64@0.34.4': - resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - '@img/sharp-linux-s390x@0.34.4': - resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.4': - resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.4': - resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.4': - resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.4': - resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.4': - resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.4': - resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.4': - resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -940,8 +1007,8 @@ packages: '@solidjs-use/solid-to-vue@2.3.0': resolution: {integrity: sha512-I2onRwzdYl2eq20M3hcTkVIeYq4hNoBpHvRJB9yzoyXRDSyp7R2glIbvdBzpsXqnTvX7HJhB2KePfxYXFvyJxw==} - '@solidjs/router@0.15.3': - resolution: {integrity: sha512-iEbW8UKok2Oio7o6Y4VTzLj+KFCmQPGEpm1fS3xixwFBdclFVBvaQVeibl1jys4cujfAK5Kn6+uG2uBm3lxOMw==} + '@solidjs/router@0.15.4': + resolution: {integrity: sha512-WOpgg9a9T638cR+5FGbFi/IV4l2FpmBs1GpIMSPa0Ce9vyJN7Wts+X2PqMf9IYn0zUj2MlSJtm1gp7/HI/n5TQ==} peerDependencies: solid-js: ^1.8.6 @@ -972,8 +1039,8 @@ packages: '@types/node@16.9.1': resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} - '@types/node@24.10.0': - resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} '@types/pako@2.0.4': resolution: {integrity: sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==} @@ -1120,8 +1187,8 @@ packages: engines: {node: '>=0.10'} hasBin: true - detect-libc@2.1.0: - resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} dijkstrajs@1.0.3: @@ -1588,8 +1655,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true @@ -1606,8 +1673,8 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - sharp@0.34.4: - resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} simple-xml-to-json@1.2.3: @@ -1748,8 +1815,8 @@ packages: '@testing-library/jest-dom': optional: true - vite@7.2.0: - resolution: {integrity: sha512-C/Naxf8H0pBx1PA4BdpT+c/5wdqI9ILMdwjSMILw7tVIh3JsxzZqdeTLmmdaoh5MYUEOyBnM9K3o0DzoZ/fe+w==} + vite@7.2.2: + resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -1949,6 +2016,41 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@biomejs/biome@2.3.5': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.3.5 + '@biomejs/cli-darwin-x64': 2.3.5 + '@biomejs/cli-linux-arm64': 2.3.5 + '@biomejs/cli-linux-arm64-musl': 2.3.5 + '@biomejs/cli-linux-x64': 2.3.5 + '@biomejs/cli-linux-x64-musl': 2.3.5 + '@biomejs/cli-win32-arm64': 2.3.5 + '@biomejs/cli-win32-x64': 2.3.5 + + '@biomejs/cli-darwin-arm64@2.3.5': + optional: true + + '@biomejs/cli-darwin-x64@2.3.5': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.3.5': + optional: true + + '@biomejs/cli-linux-arm64@2.3.5': + optional: true + + '@biomejs/cli-linux-x64-musl@2.3.5': + optional: true + + '@biomejs/cli-linux-x64@2.3.5': + optional: true + + '@biomejs/cli-win32-arm64@2.3.5': + optional: true + + '@biomejs/cli-win32-x64@2.3.5': + optional: true + '@bufbuild/protobuf@2.9.0': {} '@corvu/utils@0.4.2(solid-js@1.9.10)': @@ -1956,7 +2058,7 @@ snapshots: '@floating-ui/dom': 1.7.4 solid-js: 1.9.10 - '@emnapi/runtime@1.5.0': + '@emnapi/runtime@1.7.0': dependencies: tslib: 2.8.1 optional: true @@ -2054,90 +2156,98 @@ snapshots: '@img/colour@1.0.0': {} - '@img/sharp-darwin-arm64@0.34.4': + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.3 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - '@img/sharp-darwin-x64@0.34.4': + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.3 + '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.3': + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - '@img/sharp-libvips-darwin-x64@1.2.3': + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm64@1.2.3': + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm@1.2.3': + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.3': + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.2.3': + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.2.3': + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.3': + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-linux-arm64@0.34.4': + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - '@img/sharp-linux-arm@0.34.4': + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - '@img/sharp-linux-ppc64@0.34.4': + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.34.4': + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - '@img/sharp-linux-x64@0.34.4': + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.4': + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.4': + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - '@img/sharp-wasm32@0.34.4': + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.5.0 + '@emnapi/runtime': 1.7.0 optional: true - '@img/sharp-win32-arm64@0.34.4': + '@img/sharp-win32-arm64@0.34.5': optional: true - '@img/sharp-win32-ia32@0.34.4': + '@img/sharp-win32-ia32@0.34.5': optional: true - '@img/sharp-win32-x64@0.34.4': + '@img/sharp-win32-x64@0.34.5': optional: true '@internationalized/date@3.9.0': @@ -2590,7 +2700,7 @@ snapshots: '@solidjs-use/solid-to-vue@2.3.0': {} - '@solidjs/router@0.15.3(solid-js@1.9.10)': + '@solidjs/router@0.15.4(solid-js@1.9.10)': dependencies: solid-js: 1.9.10 @@ -2627,7 +2737,7 @@ snapshots: '@types/node@16.9.1': {} - '@types/node@24.10.0': + '@types/node@24.10.1': dependencies: undici-types: 7.16.0 @@ -2765,7 +2875,7 @@ snapshots: detect-libc@1.0.3: optional: true - detect-libc@2.1.0: {} + detect-libc@2.1.2: {} dijkstrajs@1.0.3: {} @@ -3240,7 +3350,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.2: {} + semver@7.7.3: {} seroval-plugins@1.3.3(seroval@1.3.2): dependencies: @@ -3250,34 +3360,36 @@ snapshots: set-blocking@2.0.0: {} - sharp@0.34.4: + sharp@0.34.5: dependencies: '@img/colour': 1.0.0 - detect-libc: 2.1.0 - semver: 7.7.2 + detect-libc: 2.1.2 + semver: 7.7.3 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.4 - '@img/sharp-darwin-x64': 0.34.4 - '@img/sharp-libvips-darwin-arm64': 1.2.3 - '@img/sharp-libvips-darwin-x64': 1.2.3 - '@img/sharp-libvips-linux-arm': 1.2.3 - '@img/sharp-libvips-linux-arm64': 1.2.3 - '@img/sharp-libvips-linux-ppc64': 1.2.3 - '@img/sharp-libvips-linux-s390x': 1.2.3 - '@img/sharp-libvips-linux-x64': 1.2.3 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 - '@img/sharp-linux-arm': 0.34.4 - '@img/sharp-linux-arm64': 0.34.4 - '@img/sharp-linux-ppc64': 0.34.4 - '@img/sharp-linux-s390x': 0.34.4 - '@img/sharp-linux-x64': 0.34.4 - '@img/sharp-linuxmusl-arm64': 0.34.4 - '@img/sharp-linuxmusl-x64': 0.34.4 - '@img/sharp-wasm32': 0.34.4 - '@img/sharp-win32-arm64': 0.34.4 - '@img/sharp-win32-ia32': 0.34.4 - '@img/sharp-win32-x64': 0.34.4 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 simple-xml-to-json@1.2.3: {} @@ -3412,7 +3524,7 @@ snapshots: transitivePeerDependencies: - rollup - vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@7.2.0(@types/node@24.10.0)(sass-embedded@1.93.3)(sass@1.93.3)): + vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@7.2.2(@types/node@24.10.1)(sass-embedded@1.93.3)(sass@1.93.3)): dependencies: '@babel/core': 7.28.4 '@types/babel__core': 7.20.5 @@ -3420,12 +3532,12 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.10 solid-refresh: 0.6.3(solid-js@1.9.10) - vite: 7.2.0(@types/node@24.10.0)(sass-embedded@1.93.3)(sass@1.93.3) - vitefu: 1.1.1(vite@7.2.0(@types/node@24.10.0)(sass-embedded@1.93.3)(sass@1.93.3)) + vite: 7.2.2(@types/node@24.10.1)(sass-embedded@1.93.3)(sass@1.93.3) + vitefu: 1.1.1(vite@7.2.2(@types/node@24.10.1)(sass-embedded@1.93.3)(sass@1.93.3)) transitivePeerDependencies: - supports-color - vite@7.2.0(@types/node@24.10.0)(sass-embedded@1.93.3)(sass@1.93.3): + vite@7.2.2(@types/node@24.10.1)(sass-embedded@1.93.3)(sass@1.93.3): dependencies: esbuild: 0.25.10 fdir: 6.5.0(picomatch@4.0.3) @@ -3434,14 +3546,14 @@ snapshots: rollup: 4.52.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.0 + '@types/node': 24.10.1 fsevents: 2.3.3 sass: 1.93.3 sass-embedded: 1.93.3 - vitefu@1.1.1(vite@7.2.0(@types/node@24.10.0)(sass-embedded@1.93.3)(sass@1.93.3)): + vitefu@1.1.1(vite@7.2.2(@types/node@24.10.1)(sass-embedded@1.93.3)(sass@1.93.3)): optionalDependencies: - vite: 7.2.0(@types/node@24.10.0)(sass-embedded@1.93.3)(sass@1.93.3) + vite: 7.2.2(@types/node@24.10.1)(sass-embedded@1.93.3)(sass@1.93.3) webworkify@1.5.0: {} From d2eff357913dce26ae5b1d816a153b0b323130c1 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Thu, 13 Nov 2025 17:01:38 +0800 Subject: [PATCH 3/9] Added createPdf as a indexed function --- src/utils/functions/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/functions/index.ts b/src/utils/functions/index.ts index 65794fc..090badd 100644 --- a/src/utils/functions/index.ts +++ b/src/utils/functions/index.ts @@ -1,5 +1,6 @@ export { default as checkConnection } from './checkConnection' -export { default as createPdf } from './createPdf' +export { default as createPdfElectrical } from './createPdfElectrical' +export { default as createPdfOccupancy } from './createPdfOccupancy' export { default as postApi } from './postApi' export { default as getApi } from './getApi' export { default as getApiMulti } from './getApiMulti' From f029c4a6518a2d22c115cc696901a16050e6c53c Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Thu, 13 Nov 2025 17:36:45 +0800 Subject: [PATCH 4/9] Updated backend --- backend/main.go | 56 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/backend/main.go b/backend/main.go index 5526075..b68d0b4 100644 --- a/backend/main.go +++ b/backend/main.go @@ -15,12 +15,12 @@ import ( ) // DEV -var connection string = "root:superuser@tcp(localhost:3306)/iips" -var connectionPops string = "root:superuser@tcp(localhost:3306)/pops" +// var connection string = "root:superuser@tcp(localhost:3306)/iips" +// var connectionPops string = "root:superuser@tcp(localhost:3306)/pops" // SERVER -// var connection string = "iips:iipsuser@tcp(192.168.7.100:3306)/iips" -// var connectionPops string = "pops:Pops2023!@tcp(192.168.76.10:3306)/pops" +var connection string = "iips:iipsuser@tcp(192.168.7.100:3306)/iips" +var connectionPops string = "pops:Pops2023!@tcp(192.168.76.10:3306)/pops" func main() { err := godotenv.Load() @@ -46,13 +46,13 @@ func connect() { router.Use(cors.Default()) //DEV - router.Use(cors.New(cors.Config{ - AllowOrigins: []string{"http://localhost:5173"}, - AllowMethods: []string{"GET", "POST"}, - AllowHeaders: []string{"Origin", "OCBO-Token"}, - ExposeHeaders: []string{"Content-Length"}, - AllowCredentials: true, - })) + // router.Use(cors.New(cors.Config{ + // AllowOrigins: []string{"http://localhost:5173"}, + // AllowMethods: []string{"GET", "POST"}, + // AllowHeaders: []string{"Origin", "OCBO-Token"}, + // ExposeHeaders: []string{"Content-Length"}, + // AllowCredentials: true, + // })) //SERVER // router.Use(cors.New(cors.Config{ @@ -856,6 +856,40 @@ func connect() { "result3": array3, }) + case "get-printdetailsfees-bldgadditional": + var result2, result3, result4 string + array := []string{} + array2 := []string{} + array3 := []string{} + array4 := []string{} + + results, err := db.Query(`SELECT IFNULL(ref.accountdescription, '') AS result, IFNULL(ref.accountcode, '') AS result2, IFNULL(op.amount, '') AS result3, IFNULL(op.numUnits, 0) AS result4 + FROM occupancy o JOIN building_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_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, &result4) + 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) + } + c.JSON(http.StatusOK, gin.H{ + "result": array, + "result2": array2, + "result3": array3, + "result4": array4, + }) + case "get-printdetailsfees-electrical": var result2, result3 string array := []string{} From 291876985cf6e139889a168e68d592212843d118 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Thu, 13 Nov 2025 17:36:54 +0800 Subject: [PATCH 5/9] Setup biome --- biome.jsonc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 biome.jsonc diff --git a/biome.jsonc b/biome.jsonc new file mode 100644 index 0000000..dc21802 --- /dev/null +++ b/biome.jsonc @@ -0,0 +1,22 @@ +{ + "formatter": { + "semicolons": "asNeeded", + "indentStyle": "space", + "lineWidth": 500, + "bracketSpacing": true, + "quoteStyle": "single", + "trailingCommas": "es5", + "quoteProperties": "preserve" + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "lineWidth": 500 + } + }, + "json": { + "formatter": { + "enabled": false + } + } +} \ No newline at end of file From e82a2c14f57c3fa9b386949943cb9935f2de49a1 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Thu, 13 Nov 2025 17:42:30 +0800 Subject: [PATCH 6/9] Added detection for bldg additional --- src/pages/AssessorPage/Assessor.tsx | 66 ++++++++++++++++++++++++----- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/src/pages/AssessorPage/Assessor.tsx b/src/pages/AssessorPage/Assessor.tsx index 2c84053..bea34cc 100644 --- a/src/pages/AssessorPage/Assessor.tsx +++ b/src/pages/AssessorPage/Assessor.tsx @@ -8,7 +8,7 @@ import { checkConnection, createPdfOccupancy, createPdfElectrical } from '../../ 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, _signatureAssessor, _signatureApprover, _assessorid, _approvedDate, _assessedDate, _units, _totalUnits, _floorArea } from '../../stores/pdfinfo' +import { _applicationNo, _date, _optn, _name, _location, _type, _assessor, _feeList, _codeList, _amountList, _signatureAssessor, _signatureApprover, _assessorid, _approvedDate, _assessedDate, _units, _totalUnits, _floorArea, _additional, _additionalFeeList, _additionalAmountList, _additionalCodeList, _additionalUnitList } from '../../stores/pdfinfo' import { VsRefresh } from 'solid-icons/vs' import { getApi, getApiMulti, postApi } from '../../utils/functions' @@ -90,6 +90,22 @@ export default () => { _feeList.set(feeList) _codeList.set(accountCodeList) _amountList.set(amountList) + + _additional.set(false) + + if (division === 'occupancy' && bldgadditional) { + const response = await getApiMulti('get-printdetailsfees-bldgadditional', id) + const feeList = response.result + const accountCodeList = response.result2 + const amountList = response.result3 + const unitList = response.result4 + + _additional.set(true) + _additionalFeeList.set(feeList) + _additionalCodeList.set(accountCodeList) + _additionalAmountList.set(amountList) + _additionalUnitList.set(unitList) + } } // const calculateAmounts = () => { @@ -142,6 +158,10 @@ export default () => { // if (division === 'occupancy') op = await getApiMulti('get-opdetails-occupancy', applicationNo) // if (division === 'electrical') op = await getApiMulti('get-opdetails-electrical', applicationNo) + const additionalResult = await getApi('check-bldgadditional-printing', applicationNo) + bldgadditional = additionalResult > 0 + console.log('additionalResult', additionalResult) + const op = await getApiMulti(`get-opdetails-${division}`, applicationNo) setLocation(op.result[0]) @@ -227,9 +247,6 @@ export default () => { await setNewStatus(division, 'FOR ELECTRICAL OFFICIAL RECEIPT VALIDATION', '98', 'ELECORVALIDATE', 0) await updateDocflow(division, application, 'FOR ELECTRICAL ORDER OF PAYMENT PRINTING') } else if (division === 'occupancy') { - const additionalResult = await getApi('check-bldgadditional-approval', application) - bldgadditional = additionalResult > 0 - await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT PRINTED', '173', 'OCCOPPRINTED', 1) await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT RELEASED', '174', 'OCCOPRELEASED', 1) await setNewStatus(division, 'ORDER OF PAYMENT RELEASE FOR BUREAU OF FIRE', '24', 'OCOOPRELEASE', 0) @@ -242,14 +259,19 @@ export default () => { postTransaction(application) setPrintedApplication(application) setPrinted(true) + if (division === 'electrical') { createPdfElectrical() - } else createPdfOccupancy() + } else if (division === 'occupancy') { + createPdfOccupancy() + } else console.log('building') } } const updateOp = async (division: string) => { - const post = await postApi(`update-opprinted-${division}`, { data: parseInt(applicationId().toString()) }) + const post = await postApi(`update-opprinted-${division}`, { + data: parseInt(applicationId().toString()), + }) return post } @@ -258,12 +280,23 @@ export default () => { const formattedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') const statusid = parseInt(applicationId().toString()) - 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()) }) + 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 updateDocflow = async (division: string, application: string, status: string) => { - await postApi(`update-docflow-${division}`, { data: status, data2: application }) + await postApi(`update-docflow-${division}`, { + data: status, + data2: application, + }) } const getSignatureImage = async (id: number) => { @@ -296,7 +329,11 @@ export default () => { const today = new Date() const formatedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') - await postApi('post-esigntransaction', { 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) => { @@ -348,6 +385,7 @@ export default () => { createEffect(async () => { if (filter() !== '') { + console.log('empty') if (isBuilding()) await getListForPrinting('building') if (isOccupancy()) await getListForPrinting('occupancy') if (isElectrical()) await getListForPrinting('electrical') @@ -504,7 +542,10 @@ export default () => { @@ -592,7 +633,10 @@ export default () => { From 56ab2692300172b9b86af9d923e57a575c2a1512 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Thu, 13 Nov 2025 17:42:44 +0800 Subject: [PATCH 7/9] Fixed peso sign --- src/utils/functions/createPdfElectrical.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/utils/functions/createPdfElectrical.ts b/src/utils/functions/createPdfElectrical.ts index bbcc978..e511453 100644 --- a/src/utils/functions/createPdfElectrical.ts +++ b/src/utils/functions/createPdfElectrical.ts @@ -27,7 +27,7 @@ export default async () => { const doc = new jsPDF({ orientation: 'p', unit: 'mm', - format: [215.9, 279.4], + format: 'letter', }) const arial = @@ -215,10 +215,13 @@ export default async () => { doc.line(156, newYPosition, 170, newYPosition) + doc.setFont('arial', 'normal') + doc.text(`${PESO}`, 156, newYPosition + 4) + doc.setFont('arial-bold', 'bold') doc.text('Total :', 146, newYPosition + 4) const totalAmount = AMOUNTS.reduce((sum, amount) => sum + parseFloat(amount), 0) - doc.text(`${PESO} ${totalAmount.toLocaleString('en-US', { minimumFractionDigits: 2 })}`, 156, newYPosition + 4) + doc.text(`${totalAmount.toLocaleString('en-US', { minimumFractionDigits: 2 })}`, 159, newYPosition + 4) doc.text('Assessed By :', 16, newYPosition + 12) doc.text('Approved By :', 142, newYPosition + 12) From 5c5651b87e3c35e0da67dfc90e1b8d26f4a96d08 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Thu, 13 Nov 2025 17:43:01 +0800 Subject: [PATCH 8/9] Display of bldg additional on pdf --- src/utils/functions/createPdfOccupancy.ts | 187 +++++++++++++++++++++- 1 file changed, 185 insertions(+), 2 deletions(-) diff --git a/src/utils/functions/createPdfOccupancy.ts b/src/utils/functions/createPdfOccupancy.ts index b9d057c..384d728 100644 --- a/src/utils/functions/createPdfOccupancy.ts +++ b/src/utils/functions/createPdfOccupancy.ts @@ -1,7 +1,7 @@ import jsPDF from 'jspdf' // @ts-ignore import jspdfBarcode from 'jspdf-barcode' -import { _optn, _applicationNo, _date, _name, _type, _location, _assessor, _feeList, _codeList, _amountList, _signatureAssessor, _signatureApprover, _assessorid, _approvedDate, _assessedDate, _units, _totalUnits, _floorArea } from '../../stores/pdfinfo' +import { _optn, _applicationNo, _date, _name, _type, _location, _assessor, _feeList, _codeList, _amountList, _signatureAssessor, _signatureApprover, _assessorid, _approvedDate, _assessedDate, _units, _totalUnits, _floorArea, _additional, _additionalAmountList, _additionalCodeList, _additionalFeeList, _additionalUnitList } from '../../stores/pdfinfo' import dayjs from 'dayjs' // @ts-ignore import QRCode from 'qrcode' @@ -29,10 +29,17 @@ export default async () => { const MULTIPLIED = AMOUNTS.map((amount) => parseInt(amount) * UNITS) + const ADDTLFEES = _additionalFeeList.get() + const ADDTLAMOUNTS = _additionalAmountList.get() + const ADDTLCODES = _additionalCodeList.get() + const ADDTLUNITS = _additionalUnitList.get() + + const ADDTLMULTIPLIED = ADDTLAMOUNTS.map((amount, index) => parseInt(amount) * ADDTLUNITS[index]) + const doc = new jsPDF({ orientation: 'p', unit: 'mm', - format: [215.9, 279.4], + format: 'letter', }) const arial = @@ -265,5 +272,181 @@ export default async () => { doc.setFontSize(6) doc.text('Officer-in-Charge', 154, newYPosition + 37) + if (_additional.get()) { + doc.addPage('letter') + + jspdfBarcode(doc, APPLICATION, { + fontSize: 32, + textColor: '#000000', + x: pageWidth - 35, + y: 38, + textOptions: { align: 'center' }, + }) + + doc.setFont('arial', 'normal') + doc.setFontSize(9) + doc.text(republicText, republicTextX, 14) + doc.setFont('arial-bold', 'bold') + doc.setFontSize(10) + doc.text(officeText, officeTextX, 19) + doc.setFont('arial', 'normal') + doc.setFontSize(9) + doc.text(cityText, cityTextX, 24) + + doc.addImage(lungsod, 'PNG', 14, 8, 18, 18, 'lungsod', 'NONE', 0) + doc.addImage(ocbo, 'PNG', pageWidth - 34, 8, 18, 18, 'ocbo', 'NONE', 0) + + const opText = 'ORDER OF PAYMENT' + const opTextWidth = getTextWidth(opText, 8.75) + const opTextX = (pageWidth - opTextWidth) / 2 + doc.setFont('arial-bold', 'bold') + doc.setFontSize(9) + doc.text(opText, opTextX, 34) + + const divisionText = 'BUILDING ADDITIONAL PERMIT' + const divisionTextWidth = getTextWidth(divisionText, 7.25) + const divisionTextX = (pageWidth - divisionTextWidth) / 2 + doc.setFont('arial', 'normal') + doc.setFontSize(8) + doc.text(divisionText, divisionTextX, 38) + + const optnText = 'OPTN:' + const optnTextX = 16 + doc.setFont('arial-bold', 'bold') + doc.setFontSize(8) + doc.text(optnText, optnTextX, 38) + + const optnContentX = 25 + doc.setFontSize(8) + doc.text(OPTN, optnContentX, 38) + + const toText = `TO: The City Treasurer's Office` + const toTextX = 16 + doc.setFont('arial', 'normal') + doc.setFontSize(8) + doc.text(toText, toTextX, 46) + + doc.text('Please accept payment for fee specified herunder', 16, 50) + + doc.text('Application No. :', pageWidth - 60, 46) + + doc.setFont('arial-bold', 'bold') + doc.text(APPLICATION, pageWidth - 38, 46) + + doc.setFont('arial', 'normal') + doc.text('Approved Date :', pageWidth - 60, 50) + + doc.setFont('arial-bold', 'bold') + doc.text(DATE, pageWidth - 38, 50) + + doc.setFont('arial', 'normal') + doc.text('Name of Applicant :', 23.4, 58) + + doc.setFont('arial-bold', 'bold') + doc.text(NAME, 50, 58) + + doc.setFont('arial', 'normal') + doc.text('Location of Construction :', 16, 62) + + doc.setFont('arial-bold', 'bold') + doc.text(LOCATION, 50, 62) + + doc.setFont('arial', 'normal') + doc.text('Type of Use :', 31.2, 66) + + doc.setFont('arial-bold', 'bold') + doc.text(TYPE, 50, 66) + + doc.text('ACCOUNT DESCRIPTION', 16, 74) + doc.text('ACCOUNT CODE', getTextWidth('ACCOUNT DESCRIPTION', 8) + 40, 74) + doc.text('AMOUNT', getTextWidth('ACCOUNT DESCRIPTION', 8) + getTextWidth('ACCOUNT CODE', 8) + 65, 74) + doc.text('UNIT', getTextWidth('ACCOUNT DESCRIPTION', 8) + getTextWidth('ACCOUNT CODE', 8) + 82, 74) + + doc.setFont('arial', 'normal') + + let yPosition = 82 + ADDTLFEES.forEach((fee) => { + doc.text(fee, 16, yPosition) + yPosition += 4 + }) + + yPosition = 82 + ADDTLCODES.forEach((code) => { + doc.text(code, 76, yPosition) + yPosition += 4 + }) + + yPosition = 82 + ADDTLAMOUNTS.forEach((amount) => { + doc.text(`${PESO} ${parseInt(amount).toLocaleString('en-US', { minimumFractionDigits: 2 })}`, 122, yPosition) + yPosition += 4 + }) + + yPosition = 82 + ADDTLAMOUNTS.forEach(() => { + doc.text(`x${UNITS}`, 140, yPosition) + yPosition += 4 + }) + + yPosition = 82 + ADDTLAMOUNTS.forEach(() => { + doc.text('=', 148, yPosition) + yPosition += 4 + }) + + yPosition = 82 + ADDTLMULTIPLIED.forEach((amount) => { + doc.text(`${PESO} ${parseInt(amount.toString()).toLocaleString('en-US', { minimumFractionDigits: 2 })}`, 156, yPosition) + yPosition += 4 + }) + + let newYPosition = yPosition + + doc.line(156, newYPosition, 170, newYPosition) + + doc.setFont('arial', 'normal') + doc.text(`${PESO}`, 156, newYPosition + 4) + + doc.setFont('arial-bold', 'bold') + doc.text('Total :', 146, newYPosition + 4) + const totalAmount = ADDTLMULTIPLIED.reduce((sum, amount) => sum + parseFloat(amount.toString()), 0) + doc.text(`${totalAmount.toLocaleString('en-US', { minimumFractionDigits: 2 })}`, 159, newYPosition + 4) + + doc.text('No. of Units:', 16, newYPosition + 4) + doc.text(TOTALUNITS.toString(), 34, newYPosition + 4) + doc.text('Actual Floor Area:', 16, newYPosition + 8) + doc.text(FLOORAREA.toLocaleString('en-US', { minimumFractionDigits: 2 }), 42, newYPosition + 8) + + doc.text('Assessed By :', 16, newYPosition + 16) + doc.text('Approved By :', 142, newYPosition + 16) + + doc.text(ASSESSOR, 16, newYPosition + 34) + doc.text(APPROVER, 142, newYPosition + 34) + + doc.addImage(assessorQr, 'PNG', 16, newYPosition + 18, 14, 14, 'assessorQr', 'NONE', 0) + doc.addImage(_signatureAssessor.get(), 'PNG', 30, newYPosition + 18, 10, 5.9, 'signatureAssessor', 'NONE', 0) + doc.setFont('arial', 'normal') + doc.setFontSize(4) + doc.text('Digitally signed by :', 30, newYPosition + 26) + doc.text(ASSESSOR, 30, newYPosition + 28) + doc.text('Date: ' + dayjs(_assessedDate.get()).format('YYYY-MM-DD HH:mm:ss'), 30, newYPosition + 30) + + doc.addImage(approverQr, 'PNG', 142, newYPosition + 18, 14, 14, 'approverQr', 'NONE', 0) + doc.addImage(_signatureApprover.get(), 'PNG', 156, newYPosition + 18, 41.4, 5.9, 'signatureApprover', 'NONE', 0) + doc.text('Digitally signed by :', 156, newYPosition + 26) + doc.text(APPROVER, 156, newYPosition + 28) + doc.text('Date: ' + dayjs(_approvedDate.get()).format('YYYY-MM-DD HH:mm:ss'), 156, newYPosition + 30) + + doc.setFont('arial-bold', 'bold') + doc.setFontSize(7) + doc.text('Please use the OPTN when paying online.', 16, newYPosition + 44) + const note = doc.splitTextToSize('Note: The 72 Hours Transaction Policy of the City Mayor, shall commence upon submission of the Bureau of Fire Protection clearance/certificate and other requirement stated in the notice to comply to be issued by this office.', newYPosition + 50) + doc.text(note, 16, newYPosition + 48) + + doc.setFont('arial', 'normal') + doc.setFontSize(6) + doc.text('Officer-in-Charge', 154, newYPosition + 37) + } + doc.save(`OP-${APPLICATION}.pdf`) } From b65cc72040858423c502c188fbee009ba58f971a Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Thu, 13 Nov 2025 17:43:15 +0800 Subject: [PATCH 9/9] Added storage for bldg additional --- src/stores/pdfinfo.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/stores/pdfinfo.ts b/src/stores/pdfinfo.ts index fcd7360..85842fc 100644 --- a/src/stores/pdfinfo.ts +++ b/src/stores/pdfinfo.ts @@ -25,3 +25,7 @@ export const _totalUnits = atom(0) export const _floorArea = atom(0) export const _additional = atom(false) +export const _additionalFeeList = atom([]) +export const _additionalCodeList = atom([]) +export const _additionalAmountList = atom([]) +export const _additionalUnitList = atom([])