Compare commits

...

9 commits

10 changed files with 612 additions and 240 deletions

View file

@ -15,12 +15,12 @@ import (
) )
// DEV // DEV
var connection string = "root:superuser@tcp(localhost:3306)/iips" // var connection string = "root:superuser@tcp(localhost:3306)/iips"
var connectionPops string = "root:superuser@tcp(localhost:3306)/pops" // var connectionPops string = "root:superuser@tcp(localhost:3306)/pops"
// SERVER // SERVER
// var connection string = "iips:iipsuser@tcp(192.168.7.100:3306)/iips" 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 connectionPops string = "pops:Pops2023!@tcp(192.168.76.10:3306)/pops"
func main() { func main() {
err := godotenv.Load() err := godotenv.Load()
@ -46,13 +46,13 @@ func connect() {
router.Use(cors.Default()) router.Use(cors.Default())
//DEV //DEV
router.Use(cors.New(cors.Config{ // router.Use(cors.New(cors.Config{
AllowOrigins: []string{"http://localhost:5173"}, // AllowOrigins: []string{"http://localhost:5173"},
AllowMethods: []string{"GET", "POST"}, // AllowMethods: []string{"GET", "POST"},
AllowHeaders: []string{"Origin", "OCBO-Token"}, // AllowHeaders: []string{"Origin", "OCBO-Token"},
ExposeHeaders: []string{"Content-Length"}, // ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true, // AllowCredentials: true,
})) // }))
//SERVER //SERVER
// router.Use(cors.New(cors.Config{ // router.Use(cors.New(cors.Config{
@ -856,6 +856,40 @@ func connect() {
"result3": array3, "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": case "get-printdetailsfees-electrical":
var result2, result3 string var result2, result3 string
array := []string{} array := []string{}
@ -1052,6 +1086,7 @@ func connect() {
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"result": result, "result": result,
}) })
} }
}) })
@ -1091,6 +1126,16 @@ func connect() {
"result": result, "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 +1326,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) { router.POST("/api/update-docflow-electrical", middleware.TokenChecker(), func(c *gin.Context) {
type UpdateDocflowData struct { type UpdateDocflowData struct {
Data string `json:"data"` Data string `json:"data"`

22
biome.jsonc Normal file
View file

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

View file

@ -12,7 +12,7 @@
"@fontsource-variable/roboto": "^5.2.8", "@fontsource-variable/roboto": "^5.2.8",
"@kobalte/core": "^0.13.11", "@kobalte/core": "^0.13.11",
"@solidjs-use/integrations": "^2.3.0", "@solidjs-use/integrations": "^2.3.0",
"@solidjs/router": "^0.15.3", "@solidjs/router": "^0.15.4",
"consola": "^3.4.2", "consola": "^3.4.2",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"dayjs": "^1.11.19", "dayjs": "^1.11.19",
@ -26,18 +26,19 @@
"openssl-nodejs": "^1.0.5", "openssl-nodejs": "^1.0.5",
"pica": "^9.0.1", "pica": "^9.0.1",
"qrcode": "^1.5.4", "qrcode": "^1.5.4",
"sharp": "^0.34.4", "sharp": "^0.34.5",
"solid-icons": "^1.1.0", "solid-icons": "^1.1.0",
"solid-js": "^1.9.10", "solid-js": "^1.9.10",
"solidjs-use": "^2.3.0" "solidjs-use": "^2.3.0"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "2.3.5",
"@nanostores/solid": "^1.1.1", "@nanostores/solid": "^1.1.1",
"@types/crypto-js": "^4.2.2", "@types/crypto-js": "^4.2.2",
"@types/node": "^24.10.0", "@types/node": "^24.10.1",
"sass-embedded": "^1.93.3", "sass-embedded": "^1.93.3",
"typescript": "~5.8.3", "typescript": "~5.8.3",
"vite": "^7.2.0", "vite": "^7.2.2",
"vite-plugin-compression2": "^2.3.1", "vite-plugin-compression2": "^2.3.1",
"vite-plugin-solid": "^2.11.10" "vite-plugin-solid": "^2.11.10"
} }

384
pnpm-lock.yaml generated
View file

@ -18,8 +18,8 @@ importers:
specifier: ^2.3.0 specifier: ^2.3.0
version: 2.3.0(qrcode@1.5.4)(sortablejs@1.15.6) version: 2.3.0(qrcode@1.5.4)(sortablejs@1.15.6)
'@solidjs/router': '@solidjs/router':
specifier: ^0.15.3 specifier: ^0.15.4
version: 0.15.3(solid-js@1.9.10) version: 0.15.4(solid-js@1.9.10)
consola: consola:
specifier: ^3.4.2 specifier: ^3.4.2
version: 3.4.2 version: 3.4.2
@ -60,8 +60,8 @@ importers:
specifier: ^1.5.4 specifier: ^1.5.4
version: 1.5.4 version: 1.5.4
sharp: sharp:
specifier: ^0.34.4 specifier: ^0.34.5
version: 0.34.4 version: 0.34.5
solid-icons: solid-icons:
specifier: ^1.1.0 specifier: ^1.1.0
version: 1.1.0(solid-js@1.9.10) version: 1.1.0(solid-js@1.9.10)
@ -72,6 +72,9 @@ importers:
specifier: ^2.3.0 specifier: ^2.3.0
version: 2.3.0 version: 2.3.0
devDependencies: devDependencies:
'@biomejs/biome':
specifier: 2.3.5
version: 2.3.5
'@nanostores/solid': '@nanostores/solid':
specifier: ^1.1.1 specifier: ^1.1.1
version: 1.1.1(nanostores@1.0.1)(solid-js@1.9.10) version: 1.1.1(nanostores@1.0.1)(solid-js@1.9.10)
@ -79,8 +82,8 @@ importers:
specifier: ^4.2.2 specifier: ^4.2.2
version: 4.2.2 version: 4.2.2
'@types/node': '@types/node':
specifier: ^24.10.0 specifier: ^24.10.1
version: 24.10.0 version: 24.10.1
sass-embedded: sass-embedded:
specifier: ^1.93.3 specifier: ^1.93.3
version: 1.93.3 version: 1.93.3
@ -88,14 +91,14 @@ importers:
specifier: ~5.8.3 specifier: ~5.8.3
version: 5.8.3 version: 5.8.3
vite: vite:
specifier: ^7.2.0 specifier: ^7.2.2
version: 7.2.0(@types/node@24.10.0)(sass-embedded@1.93.3)(sass@1.93.3) version: 7.2.2(@types/node@24.10.1)(sass-embedded@1.93.3)(sass@1.93.3)
vite-plugin-compression2: vite-plugin-compression2:
specifier: ^2.3.1 specifier: ^2.3.1
version: 2.3.1(rollup@4.52.1) version: 2.3.1(rollup@4.52.1)
vite-plugin-solid: vite-plugin-solid:
specifier: ^2.11.10 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: packages:
@ -184,6 +187,59 @@ packages:
resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
engines: {node: '>=6.9.0'} 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': '@bufbuild/protobuf@2.9.0':
resolution: {integrity: sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==} resolution: {integrity: sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==}
@ -192,8 +248,8 @@ packages:
peerDependencies: peerDependencies:
solid-js: ^1.8 solid-js: ^1.8
'@emnapi/runtime@1.5.0': '@emnapi/runtime@1.7.0':
resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==}
'@esbuild/aix-ppc64@0.25.10': '@esbuild/aix-ppc64@0.25.10':
resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
@ -367,124 +423,135 @@ packages:
resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
engines: {node: '>=18'} engines: {node: '>=18'}
'@img/sharp-darwin-arm64@0.34.4': '@img/sharp-darwin-arm64@0.34.5':
resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@img/sharp-darwin-x64@0.34.4': '@img/sharp-darwin-x64@0.34.5':
resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@img/sharp-libvips-darwin-arm64@1.2.3': '@img/sharp-libvips-darwin-arm64@1.2.4':
resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@img/sharp-libvips-darwin-x64@1.2.3': '@img/sharp-libvips-darwin-x64@1.2.4':
resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@img/sharp-libvips-linux-arm64@1.2.3': '@img/sharp-libvips-linux-arm64@1.2.4':
resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-arm@1.2.3': '@img/sharp-libvips-linux-arm@1.2.4':
resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-ppc64@1.2.3': '@img/sharp-libvips-linux-ppc64@1.2.4':
resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-s390x@1.2.3': '@img/sharp-libvips-linux-riscv64@1.2.4':
resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} 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] cpu: [s390x]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-x64@1.2.3': '@img/sharp-libvips-linux-x64@1.2.4':
resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-libvips-linuxmusl-arm64@1.2.3': '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-libvips-linuxmusl-x64@1.2.3': '@img/sharp-libvips-linuxmusl-x64@1.2.4':
resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-linux-arm64@0.34.4': '@img/sharp-linux-arm64@0.34.5':
resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-linux-arm@0.34.4': '@img/sharp-linux-arm@0.34.5':
resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@img/sharp-linux-ppc64@0.34.4': '@img/sharp-linux-ppc64@0.34.5':
resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@img/sharp-linux-s390x@0.34.4': '@img/sharp-linux-riscv64@0.34.5':
resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} 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} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@img/sharp-linux-x64@0.34.4': '@img/sharp-linux-x64@0.34.5':
resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-linuxmusl-arm64@0.34.4': '@img/sharp-linuxmusl-arm64@0.34.5':
resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-linuxmusl-x64@0.34.4': '@img/sharp-linuxmusl-x64@0.34.5':
resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-wasm32@0.34.4': '@img/sharp-wasm32@0.34.5':
resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32] cpu: [wasm32]
'@img/sharp-win32-arm64@0.34.4': '@img/sharp-win32-arm64@0.34.5':
resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@img/sharp-win32-ia32@0.34.4': '@img/sharp-win32-ia32@0.34.5':
resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@img/sharp-win32-x64@0.34.4': '@img/sharp-win32-x64@0.34.5':
resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -940,8 +1007,8 @@ packages:
'@solidjs-use/solid-to-vue@2.3.0': '@solidjs-use/solid-to-vue@2.3.0':
resolution: {integrity: sha512-I2onRwzdYl2eq20M3hcTkVIeYq4hNoBpHvRJB9yzoyXRDSyp7R2glIbvdBzpsXqnTvX7HJhB2KePfxYXFvyJxw==} resolution: {integrity: sha512-I2onRwzdYl2eq20M3hcTkVIeYq4hNoBpHvRJB9yzoyXRDSyp7R2glIbvdBzpsXqnTvX7HJhB2KePfxYXFvyJxw==}
'@solidjs/router@0.15.3': '@solidjs/router@0.15.4':
resolution: {integrity: sha512-iEbW8UKok2Oio7o6Y4VTzLj+KFCmQPGEpm1fS3xixwFBdclFVBvaQVeibl1jys4cujfAK5Kn6+uG2uBm3lxOMw==} resolution: {integrity: sha512-WOpgg9a9T638cR+5FGbFi/IV4l2FpmBs1GpIMSPa0Ce9vyJN7Wts+X2PqMf9IYn0zUj2MlSJtm1gp7/HI/n5TQ==}
peerDependencies: peerDependencies:
solid-js: ^1.8.6 solid-js: ^1.8.6
@ -972,8 +1039,8 @@ packages:
'@types/node@16.9.1': '@types/node@16.9.1':
resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==}
'@types/node@24.10.0': '@types/node@24.10.1':
resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
'@types/pako@2.0.4': '@types/pako@2.0.4':
resolution: {integrity: sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==} resolution: {integrity: sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==}
@ -1120,8 +1187,8 @@ packages:
engines: {node: '>=0.10'} engines: {node: '>=0.10'}
hasBin: true hasBin: true
detect-libc@2.1.0: detect-libc@2.1.2:
resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==} resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
dijkstrajs@1.0.3: dijkstrajs@1.0.3:
@ -1588,8 +1655,8 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true hasBin: true
semver@7.7.2: semver@7.7.3:
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
@ -1606,8 +1673,8 @@ packages:
set-blocking@2.0.0: set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
sharp@0.34.4: sharp@0.34.5:
resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
simple-xml-to-json@1.2.3: simple-xml-to-json@1.2.3:
@ -1748,8 +1815,8 @@ packages:
'@testing-library/jest-dom': '@testing-library/jest-dom':
optional: true optional: true
vite@7.2.0: vite@7.2.2:
resolution: {integrity: sha512-C/Naxf8H0pBx1PA4BdpT+c/5wdqI9ILMdwjSMILw7tVIh3JsxzZqdeTLmmdaoh5MYUEOyBnM9K3o0DzoZ/fe+w==} resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -1949,6 +2016,41 @@ snapshots:
'@babel/helper-string-parser': 7.27.1 '@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 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': {} '@bufbuild/protobuf@2.9.0': {}
'@corvu/utils@0.4.2(solid-js@1.9.10)': '@corvu/utils@0.4.2(solid-js@1.9.10)':
@ -1956,7 +2058,7 @@ snapshots:
'@floating-ui/dom': 1.7.4 '@floating-ui/dom': 1.7.4
solid-js: 1.9.10 solid-js: 1.9.10
'@emnapi/runtime@1.5.0': '@emnapi/runtime@1.7.0':
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
optional: true optional: true
@ -2054,90 +2156,98 @@ snapshots:
'@img/colour@1.0.0': {} '@img/colour@1.0.0': {}
'@img/sharp-darwin-arm64@0.34.4': '@img/sharp-darwin-arm64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.2.3 '@img/sharp-libvips-darwin-arm64': 1.2.4
optional: true optional: true
'@img/sharp-darwin-x64@0.34.4': '@img/sharp-darwin-x64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.2.3 '@img/sharp-libvips-darwin-x64': 1.2.4
optional: true optional: true
'@img/sharp-libvips-darwin-arm64@1.2.3': '@img/sharp-libvips-darwin-arm64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-darwin-x64@1.2.3': '@img/sharp-libvips-darwin-x64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-arm64@1.2.3': '@img/sharp-libvips-linux-arm64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-arm@1.2.3': '@img/sharp-libvips-linux-arm@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-ppc64@1.2.3': '@img/sharp-libvips-linux-ppc64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-s390x@1.2.3': '@img/sharp-libvips-linux-riscv64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-x64@1.2.3': '@img/sharp-libvips-linux-s390x@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linuxmusl-arm64@1.2.3': '@img/sharp-libvips-linux-x64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linuxmusl-x64@1.2.3': '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
optional: true 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: optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.2.3 '@img/sharp-libvips-linux-arm64': 1.2.4
optional: true optional: true
'@img/sharp-linux-arm@0.34.4': '@img/sharp-linux-arm@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.2.3 '@img/sharp-libvips-linux-arm': 1.2.4
optional: true optional: true
'@img/sharp-linux-ppc64@0.34.4': '@img/sharp-linux-ppc64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-ppc64': 1.2.3 '@img/sharp-libvips-linux-ppc64': 1.2.4
optional: true optional: true
'@img/sharp-linux-s390x@0.34.4': '@img/sharp-linux-riscv64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.2.3 '@img/sharp-libvips-linux-riscv64': 1.2.4
optional: true optional: true
'@img/sharp-linux-x64@0.34.4': '@img/sharp-linux-s390x@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.2.3 '@img/sharp-libvips-linux-s390x': 1.2.4
optional: true optional: true
'@img/sharp-linuxmusl-arm64@0.34.4': '@img/sharp-linux-x64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.2.3 '@img/sharp-libvips-linux-x64': 1.2.4
optional: true optional: true
'@img/sharp-linuxmusl-x64@0.34.4': '@img/sharp-linuxmusl-arm64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.2.3 '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
optional: true 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: dependencies:
'@emnapi/runtime': 1.5.0 '@emnapi/runtime': 1.7.0
optional: true optional: true
'@img/sharp-win32-arm64@0.34.4': '@img/sharp-win32-arm64@0.34.5':
optional: true optional: true
'@img/sharp-win32-ia32@0.34.4': '@img/sharp-win32-ia32@0.34.5':
optional: true optional: true
'@img/sharp-win32-x64@0.34.4': '@img/sharp-win32-x64@0.34.5':
optional: true optional: true
'@internationalized/date@3.9.0': '@internationalized/date@3.9.0':
@ -2590,7 +2700,7 @@ snapshots:
'@solidjs-use/solid-to-vue@2.3.0': {} '@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: dependencies:
solid-js: 1.9.10 solid-js: 1.9.10
@ -2627,7 +2737,7 @@ snapshots:
'@types/node@16.9.1': {} '@types/node@16.9.1': {}
'@types/node@24.10.0': '@types/node@24.10.1':
dependencies: dependencies:
undici-types: 7.16.0 undici-types: 7.16.0
@ -2765,7 +2875,7 @@ snapshots:
detect-libc@1.0.3: detect-libc@1.0.3:
optional: true optional: true
detect-libc@2.1.0: {} detect-libc@2.1.2: {}
dijkstrajs@1.0.3: {} dijkstrajs@1.0.3: {}
@ -3240,7 +3350,7 @@ snapshots:
semver@6.3.1: {} semver@6.3.1: {}
semver@7.7.2: {} semver@7.7.3: {}
seroval-plugins@1.3.3(seroval@1.3.2): seroval-plugins@1.3.3(seroval@1.3.2):
dependencies: dependencies:
@ -3250,34 +3360,36 @@ snapshots:
set-blocking@2.0.0: {} set-blocking@2.0.0: {}
sharp@0.34.4: sharp@0.34.5:
dependencies: dependencies:
'@img/colour': 1.0.0 '@img/colour': 1.0.0
detect-libc: 2.1.0 detect-libc: 2.1.2
semver: 7.7.2 semver: 7.7.3
optionalDependencies: optionalDependencies:
'@img/sharp-darwin-arm64': 0.34.4 '@img/sharp-darwin-arm64': 0.34.5
'@img/sharp-darwin-x64': 0.34.4 '@img/sharp-darwin-x64': 0.34.5
'@img/sharp-libvips-darwin-arm64': 1.2.3 '@img/sharp-libvips-darwin-arm64': 1.2.4
'@img/sharp-libvips-darwin-x64': 1.2.3 '@img/sharp-libvips-darwin-x64': 1.2.4
'@img/sharp-libvips-linux-arm': 1.2.3 '@img/sharp-libvips-linux-arm': 1.2.4
'@img/sharp-libvips-linux-arm64': 1.2.3 '@img/sharp-libvips-linux-arm64': 1.2.4
'@img/sharp-libvips-linux-ppc64': 1.2.3 '@img/sharp-libvips-linux-ppc64': 1.2.4
'@img/sharp-libvips-linux-s390x': 1.2.3 '@img/sharp-libvips-linux-riscv64': 1.2.4
'@img/sharp-libvips-linux-x64': 1.2.3 '@img/sharp-libvips-linux-s390x': 1.2.4
'@img/sharp-libvips-linuxmusl-arm64': 1.2.3 '@img/sharp-libvips-linux-x64': 1.2.4
'@img/sharp-libvips-linuxmusl-x64': 1.2.3 '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
'@img/sharp-linux-arm': 0.34.4 '@img/sharp-libvips-linuxmusl-x64': 1.2.4
'@img/sharp-linux-arm64': 0.34.4 '@img/sharp-linux-arm': 0.34.5
'@img/sharp-linux-ppc64': 0.34.4 '@img/sharp-linux-arm64': 0.34.5
'@img/sharp-linux-s390x': 0.34.4 '@img/sharp-linux-ppc64': 0.34.5
'@img/sharp-linux-x64': 0.34.4 '@img/sharp-linux-riscv64': 0.34.5
'@img/sharp-linuxmusl-arm64': 0.34.4 '@img/sharp-linux-s390x': 0.34.5
'@img/sharp-linuxmusl-x64': 0.34.4 '@img/sharp-linux-x64': 0.34.5
'@img/sharp-wasm32': 0.34.4 '@img/sharp-linuxmusl-arm64': 0.34.5
'@img/sharp-win32-arm64': 0.34.4 '@img/sharp-linuxmusl-x64': 0.34.5
'@img/sharp-win32-ia32': 0.34.4 '@img/sharp-wasm32': 0.34.5
'@img/sharp-win32-x64': 0.34.4 '@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: {} simple-xml-to-json@1.2.3: {}
@ -3412,7 +3524,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- rollup - 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: dependencies:
'@babel/core': 7.28.4 '@babel/core': 7.28.4
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
@ -3420,12 +3532,12 @@ snapshots:
merge-anything: 5.1.7 merge-anything: 5.1.7
solid-js: 1.9.10 solid-js: 1.9.10
solid-refresh: 0.6.3(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) 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.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))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - 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: dependencies:
esbuild: 0.25.10 esbuild: 0.25.10
fdir: 6.5.0(picomatch@4.0.3) fdir: 6.5.0(picomatch@4.0.3)
@ -3434,14 +3546,14 @@ snapshots:
rollup: 4.52.1 rollup: 4.52.1
tinyglobby: 0.2.15 tinyglobby: 0.2.15
optionalDependencies: optionalDependencies:
'@types/node': 24.10.0 '@types/node': 24.10.1
fsevents: 2.3.3 fsevents: 2.3.3
sass: 1.93.3 sass: 1.93.3
sass-embedded: 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: 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: {} webworkify@1.5.0: {}

View file

@ -8,7 +8,7 @@ import { checkConnection, createPdfOccupancy, createPdfElectrical } from '../../
import { FaSolidThumbsUp } from 'solid-icons/fa' import { FaSolidThumbsUp } from 'solid-icons/fa'
import { _employeeName, _employeeId } from '../../stores/employee' import { _employeeName, _employeeId } from '../../stores/employee'
import { useNavigate } from '@solidjs/router' 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 { VsRefresh } from 'solid-icons/vs'
import { getApi, getApiMulti, postApi } from '../../utils/functions' import { getApi, getApiMulti, postApi } from '../../utils/functions'
@ -90,6 +90,22 @@ export default () => {
_feeList.set(feeList) _feeList.set(feeList)
_codeList.set(accountCodeList) _codeList.set(accountCodeList)
_amountList.set(amountList) _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 = () => { // const calculateAmounts = () => {
@ -142,6 +158,10 @@ export default () => {
// if (division === 'occupancy') op = await getApiMulti('get-opdetails-occupancy', applicationNo) // if (division === 'occupancy') op = await getApiMulti('get-opdetails-occupancy', applicationNo)
// if (division === 'electrical') op = await getApiMulti('get-opdetails-electrical', 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) const op = await getApiMulti(`get-opdetails-${division}`, applicationNo)
setLocation(op.result[0]) setLocation(op.result[0])
@ -227,9 +247,6 @@ export default () => {
await setNewStatus(division, 'FOR ELECTRICAL OFFICIAL RECEIPT VALIDATION', '98', 'ELECORVALIDATE', 0) await setNewStatus(division, 'FOR ELECTRICAL OFFICIAL RECEIPT VALIDATION', '98', 'ELECORVALIDATE', 0)
await updateDocflow(division, application, 'FOR ELECTRICAL ORDER OF PAYMENT PRINTING') await updateDocflow(division, application, 'FOR ELECTRICAL ORDER OF PAYMENT PRINTING')
} else if (division === 'occupancy') { } 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 PRINTED', '173', 'OCCOPPRINTED', 1)
await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT RELEASED', '174', 'OCCOPRELEASED', 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) await setNewStatus(division, 'ORDER OF PAYMENT RELEASE FOR BUREAU OF FIRE', '24', 'OCOOPRELEASE', 0)
@ -242,14 +259,19 @@ export default () => {
postTransaction(application) postTransaction(application)
setPrintedApplication(application) setPrintedApplication(application)
setPrinted(true) setPrinted(true)
if (division === 'electrical') { if (division === 'electrical') {
createPdfElectrical() createPdfElectrical()
} else createPdfOccupancy() } else if (division === 'occupancy') {
createPdfOccupancy()
} else console.log('building')
} }
} }
const updateOp = async (division: string) => { 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 return post
} }
@ -258,12 +280,23 @@ export default () => {
const formattedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') const formattedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss')
const statusid = parseInt(applicationId().toString()) 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 return post
} }
const updateDocflow = async (division: string, application: string, status: string) => { 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) => { const getSignatureImage = async (id: number) => {
@ -296,7 +329,11 @@ export default () => {
const today = new Date() const today = new Date()
const formatedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss') 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) => { const getApprovedDate = async (id: number, application: string) => {
@ -348,6 +385,7 @@ export default () => {
createEffect(async () => { createEffect(async () => {
if (filter() !== '') { if (filter() !== '') {
console.log('empty')
if (isBuilding()) await getListForPrinting('building') if (isBuilding()) await getListForPrinting('building')
if (isOccupancy()) await getListForPrinting('occupancy') if (isOccupancy()) await getListForPrinting('occupancy')
if (isElectrical()) await getListForPrinting('electrical') if (isElectrical()) await getListForPrinting('electrical')
@ -411,9 +449,11 @@ export default () => {
<Tabs.Content class="tabs__content" value="building"> <Tabs.Content class="tabs__content" value="building">
<Row> <Row>
{/* <h2>List of Ready to Approve and Sign Building Order of Payments</h2> */} {/* <h2>List of Ready to Approve and Sign Building Order of Payments</h2> */}
<Padding top={2} bottom={0} left={0} right={0}>
<Box curved thickness={0} background="#602a2abf" padding="1rem 2rem"> <Box curved thickness={0} background="#602a2abf" padding="1rem 2rem">
<h2>Under Development</h2> <h2>Under Development</h2>
</Box> </Box>
</Padding>
</Row> </Row>
<Row> <Row>
@ -502,7 +542,10 @@ export default () => {
<section class="modal__row"> <section class="modal__row">
<span class="modal__row__label">Total Fee:</span> <span class="modal__row__label">Total Fee:</span>
<span class="modal__row__detail__price"> <span class="modal__row__detail__price">
{PESO} {totalOp().toLocaleString('en-US', { minimumFractionDigits: 2 })} {PESO}{' '}
{totalOp().toLocaleString('en-US', {
minimumFractionDigits: 2,
})}
</span> </span>
</section> </section>
</Padding> </Padding>
@ -590,7 +633,10 @@ export default () => {
<section class="modal__row"> <section class="modal__row">
<span class="modal__row__label">Total Fee:</span> <span class="modal__row__label">Total Fee:</span>
<span class="modal__row__detail__price"> <span class="modal__row__detail__price">
{PESO} {totalOp().toLocaleString('en-US', { minimumFractionDigits: 2 })} {PESO}{' '}
{totalOp().toLocaleString('en-US', {
minimumFractionDigits: 2,
})}
</span> </span>
</section> </section>
</Padding> </Padding>

View file

@ -64,23 +64,15 @@ export default () => {
} }
const getListForApprovalElectrical = async () => { const getListForApprovalElectrical = async () => {
try {
const responseE = await getApiMulti('get-listopapproval-electrical') const responseE = await getApiMulti('get-listopapproval-electrical')
setApplicationListElectrical(responseE.result) setApplicationListElectrical(responseE.result)
setNameListElectrical(responseE.result2) setNameListElectrical(responseE.result2)
} catch (error) {
console.error(error)
}
} }
const getListForApprovalOccupancy = async () => { const getListForApprovalOccupancy = async () => {
try {
const responseO = await getApiMulti('get-listopapproval-occupancy') const responseO = await getApiMulti('get-listopapproval-occupancy')
setApplicationListOccupancy(responseO.result) setApplicationListOccupancy(responseO.result)
setNameListOccupancy(responseO.result2) setNameListOccupancy(responseO.result2)
} catch (error) {
console.error(error)
}
} }
const load = async (division: string) => { const load = async (division: string) => {
@ -114,7 +106,7 @@ export default () => {
const total = calculateTotal(op.result4) const total = calculateTotal(op.result4)
const formattedTotal = new Intl.NumberFormat('en-US', { const formattedTotal = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2, minimumFractionDigits: 2,
// maximumFractionDigits: 2, maximumFractionDigits: 2,
}).format(total) }).format(total)
setTotalOp(formattedTotal) setTotalOp(formattedTotal)
setDateOp(dayjs(op.result5[0]).format('MMMM DD, YYYY')) 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) signed = await setNewStatus(division, 'OCCUPANCY ORDER OF PAYMENT APPROVED AND SIGNED', '172', 'OCCOPAPPROVEDSIGNED', 1)
updateDocflow(division, application, 'FOR OCCUPANCY RECOMMENDING APPROVAL') 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 if (!signed) return
forprinting = await setNewStatus(division, 'APPROVED FOR PRINTING OF BUREAU OF FIRE AND ORDER OF PAYMENT', '23', 'OCORDEROFPAYMENT', 0) 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 () => { const logout = async () => {
removeEmployee() removeEmployee()
navigate('/') navigate('/')
@ -362,9 +362,11 @@ export default () => {
<Tabs.Content class="tabs__content" value="building"> <Tabs.Content class="tabs__content" value="building">
<Row> <Row>
{/* <h2>List of Ready to Approve and Sign Building Order of Payments</h2> */} {/* <h2>List of Ready to Approve and Sign Building Order of Payments</h2> */}
<Padding top={2} bottom={0} left={0} right={0}>
<Box curved thickness={0} background="#602a2abf" padding="1rem 2rem"> <Box curved thickness={0} background="#602a2abf" padding="1rem 2rem">
<h2>Under Development</h2> <h2>Under Development</h2>
</Box> </Box>
</Padding>
</Row> </Row>
<Row> <Row>
@ -382,7 +384,7 @@ export default () => {
</Tabs.Content> </Tabs.Content>
<Tabs.Content class="tabs__content" value="occupancy"> <Tabs.Content class="tabs__content" value="occupancy">
<Row> <Row>
<h2>List of Ready to Approve and Sign Occupancy Order of Payments</h2> <h2>List of Ready to Approve and Sign in Occupancy Order of Payments</h2>
</Row> </Row>
<Padding top={0} bottom={0} right={10} left={0}> <Padding top={0} bottom={0} right={10} left={0}>

View file

@ -25,3 +25,7 @@ export const _totalUnits = atom(0)
export const _floorArea = atom(0) export const _floorArea = atom(0)
export const _additional = atom(false) export const _additional = atom(false)
export const _additionalFeeList = atom<string[]>([])
export const _additionalCodeList = atom<string[]>([])
export const _additionalAmountList = atom<string[]>([])
export const _additionalUnitList = atom<number[]>([])

View file

@ -27,7 +27,7 @@ export default async () => {
const doc = new jsPDF({ const doc = new jsPDF({
orientation: 'p', orientation: 'p',
unit: 'mm', unit: 'mm',
format: [215.9, 279.4], format: 'letter',
}) })
const arial = const arial =
@ -215,10 +215,13 @@ export default async () => {
doc.line(156, newYPosition, 170, newYPosition) doc.line(156, newYPosition, 170, newYPosition)
doc.setFont('arial', 'normal')
doc.text(`${PESO}`, 156, newYPosition + 4)
doc.setFont('arial-bold', 'bold') doc.setFont('arial-bold', 'bold')
doc.text('Total :', 146, newYPosition + 4) doc.text('Total :', 146, newYPosition + 4)
const totalAmount = AMOUNTS.reduce((sum, amount) => sum + parseFloat(amount), 0) 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('Assessed By :', 16, newYPosition + 12)
doc.text('Approved By :', 142, newYPosition + 12) doc.text('Approved By :', 142, newYPosition + 12)

View file

@ -1,7 +1,7 @@
import jsPDF from 'jspdf' import jsPDF from 'jspdf'
// @ts-ignore // @ts-ignore
import jspdfBarcode from 'jspdf-barcode' 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' import dayjs from 'dayjs'
// @ts-ignore // @ts-ignore
import QRCode from 'qrcode' import QRCode from 'qrcode'
@ -29,10 +29,17 @@ export default async () => {
const MULTIPLIED = AMOUNTS.map((amount) => parseInt(amount) * UNITS) 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({ const doc = new jsPDF({
orientation: 'p', orientation: 'p',
unit: 'mm', unit: 'mm',
format: [215.9, 279.4], format: 'letter',
}) })
const arial = const arial =
@ -265,5 +272,181 @@ export default async () => {
doc.setFontSize(6) doc.setFontSize(6)
doc.text('Officer-in-Charge', 154, newYPosition + 37) 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`) doc.save(`OP-${APPLICATION}.pdf`)
} }

View file

@ -1,5 +1,6 @@
export { default as checkConnection } from './checkConnection' 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 postApi } from './postApi'
export { default as getApi } from './getApi' export { default as getApi } from './getApi'
export { default as getApiMulti } from './getApiMulti' export { default as getApiMulti } from './getApiMulti'