From d63f096aaa0afe90080754b766f13d0a7f5f3d50 Mon Sep 17 00:00:00 2001 From: Patrick Date: Sat, 12 Apr 2025 22:49:53 +0200 Subject: [PATCH] fixed some bugs and maybe prod ready --- bun.lockb | Bin 59776 -> 81110 bytes package.json | 18 +++++++++++------ populate.py => scripts/populate.py | 0 src/lib/server/PDFGen.ts | 2 ++ src/lib/server/docstore.ts | 13 ++++++++++-- src/routes/+page.server.ts | 2 -- src/routes/+page.svelte | 8 ++++---- src/routes/record_input_row.svelte | 28 +++++++++++++++++++++++++- src/routes/schaetzung/+page.server.ts | 6 +++--- src/routes/schaetzung/+page.svelte | 4 ++-- svelte.config.js | 2 +- 11 files changed, 62 insertions(+), 21 deletions(-) rename populate.py => scripts/populate.py (100%) diff --git a/bun.lockb b/bun.lockb index 800ba349da1f9127d9bcbec405ded5d17f12c520..2bac1435c945157f042f7486eaefcc39fcbd965e 100755 GIT binary patch delta 21217 zcmeHvd0b81_y0Y&+iflR~Cs>M`?}{nkGBo{D;&&-e5De4g)L-}CCd*WPQbz4khLKIgVi!ZoSiKXFn_ zd#$*ASXuRuU|gU~xmQqN4C}ivV_Z!aWAD{rM`Fgs?;h#qNU_LOl`7O1b-ql;B|&Ev zD6(u~;F|!EwPeVxnh8M#oH!j%FpY zSu7srTZmL1>5QNmk)cyqtl;QLv7zBpSn<*VcA?+fJwfmoPA`fm9tS z2Psi}$zie7klsN`3|v4;^zxAsy-Z0u5vc~Iqa^%^NJ)M#iQEn;$=_X)RzfNw2EIy( z6(1ud1zkf*3MfWOsL1f}*qJO=ZzUE>7t=~eb&$UA#A0b7y@{0YOOR?J z%|@z+bOF+CNd1u-B6aMx;s z%SH4Jo)O0~K{mY#&Jv&cbN{z zGy_wuOfCLedsxkMEi<*m)FM->OszA`B&l6dOFRDB&P=ucTHQ?hGwsfdjK3WLctafz z08#4*_$PY)zwG#Z(X(HBegHN>59Ch?o)kM3TP-3Q1H48WfGfvZRAC`*P&cGxV>ML+yO{QnrX@ZzY1!tAIS_M`bVaSe_2s@BjS3(7GtJ}=(yl;GEFi=Dc4dw zlx%`hY2r^61-luvJTFD?B@s9b~c*({UPnwF#h5A zI|&N;9@27@C^0I%=bgkMJf#OU=6$|i{JPjHGwk_Z`JuY;-qfS{HxdTO`h-L!UYIhn zp(K07yG2^-7U_̼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 L-F_xj+%)_XCC(Jc diff --git a/package.json b/package.json index 2285bc0..f5c8dfb 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,14 @@ "devDependencies": { "@sveltejs/adapter-auto": "^3.3.1", "@sveltejs/adapter-node": "^5.2.12", - "@sveltejs/kit": "^2.16.1", + "@sveltejs/kit": "^2.20.4", "@sveltejs/vite-plugin-svelte": "^5.0.3", "@types/sqlite3": "^3.1.11", - "svelte": "^5.19.6", + "svelte": "^5.25.6", "svelte-adapter-bun": "^0.5.2", - "svelte-check": "^4.1.4", - "typescript": "^5.7.3", - "vite": "^6.0.11" + "svelte-check": "^4.1.5", + "typescript": "^5.8.2", + "vite": "^6.2.5" }, "private": true, "scripts": { @@ -21,5 +21,11 @@ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" }, - "type": "module" + "type": "module", + "dependencies": { + "clsx": "^2.1.1", + "cookie": "^1.0.2", + "devalue": "^5.1.1", + "set-cookie-parser": "^2.7.1" + } } diff --git a/populate.py b/scripts/populate.py similarity index 100% rename from populate.py rename to scripts/populate.py diff --git a/src/lib/server/PDFGen.ts b/src/lib/server/PDFGen.ts index 6360341..d975e37 100644 --- a/src/lib/server/PDFGen.ts +++ b/src/lib/server/PDFGen.ts @@ -84,6 +84,8 @@ export async function generateEstimatePDF(user: User, year: number, quarter: num const estimates = user.get_estimate(year, quarter); + console.log(estimates); + let exitCode = 0; ({ exitCode: exitCode } = await b.$`mkdir -p ${dir}`.nothrow().quiet()); diff --git a/src/lib/server/docstore.ts b/src/lib/server/docstore.ts index c76379c..68864d5 100644 --- a/src/lib/server/docstore.ts +++ b/src/lib/server/docstore.ts @@ -203,7 +203,7 @@ async function _genLatexRec(user: User, file_pref: string, year: number, month: } const records = user.get_entries_by_month(year, month); - const estimate = user.get_estimate_by_month(year, month); + const estimate = user.get_estimate_by_month(year, month-1); const hr_sum = (() => { let s = 0; records.forEach((r) => { s += calculateDuration(r.start, r.end) }); return s; })() if (estimate == null || isNaN(estimate)) { @@ -213,6 +213,10 @@ async function _genLatexRec(user: User, file_pref: string, year: number, month: // TODO: escape semicolon in comment const csvfile = Bun.file(`${dir}/${file_pref}.csv`) + if (await csvfile.exists()) { + await csvfile.delete(); + } + const csvfilewriter = csvfile.writer() csvfilewriter.write(`${user.name};${MONTHS[month - 1]} ${year};${hr_sum.toFixed(2)};${estimate.toFixed(2)};${padInt(hr_sum - estimate, 2, 2, ' ')}\n`) @@ -252,7 +256,12 @@ async function _genLatexEst(user: User, file_pref: string, year: number, quarter } const csvfile = Bun.file(`${dir}/estimate.csv`) - const csvfilewriter = csvfile.writer() + + if (await csvfile.exists()) { + await csvfile.delete(); + } + + const csvfilewriter = csvfile.writer(); csvfilewriter.write(`${SALUTATION[user.gender]} ${user.name};${user.address};Arbeitnehmer${GENDER_END[user.gender]};Teilzeitmitarbeiter${GENDER_END[user.gender]};${isoToLocalDate(new Date().toISOString())}\n`) diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index f71e98e..8e9f330 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -49,8 +49,6 @@ export const load: PageServerLoad = async ({ locals }) => { map.set(key, m); }) - console.log(documents_grouped) - return { records: records_grouped, estimates: estimates_grouped, diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index b9b1d02..6d18dc1 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -143,7 +143,7 @@ - +