From 7fd6b9e742731729f70c912b023d072cac257b34 Mon Sep 17 00:00:00 2001 From: richardtekula Date: Mon, 24 Nov 2025 10:18:28 +0100 Subject: [PATCH] excel preview & file handling --- DOKUMENTACIA.md | 255 +++++- package-lock.json | 808 +++++++++++++++++- package.json | 1 + src/controllers/time-tracking.controller.js | 26 + src/controllers/timesheet.controller.js | 4 + .../0005_add_is_generated_timesheets.sql | 3 + src/db/migrations/add_crm_tables.sql | 11 + src/db/schema.js | 1 + src/routes/time-tracking.routes.js | 12 + src/services/time-tracking.service.js | 233 ++++- ...ard-Tekula (1)-1763707607012-681244677.pdf | Bin 158730 -> 0 bytes .../11/timesheet-2025-11-1763975803413.xlsx | Bin 0 -> 7152 bytes 12 files changed, 1336 insertions(+), 18 deletions(-) create mode 100644 src/db/migrations/0005_add_is_generated_timesheets.sql delete mode 100644 uploads/timesheets/68927352-725c-4e95-adb6-d4002b22bef5/2024/12/Richard-Tekula (1)-1763707607012-681244677.pdf create mode 100644 uploads/timesheets/ae65f40f-e22a-45c6-9647-36005c6d31e8/2025/11/timesheet-2025-11-1763975803413.xlsx diff --git a/DOKUMENTACIA.md b/DOKUMENTACIA.md index 9c9e30c..46adf08 100644 --- a/DOKUMENTACIA.md +++ b/DOKUMENTACIA.md @@ -1,7 +1,7 @@ # 📚 CRM SERVER - KOMPLETNÁ DOKUMENTÁCIA > Vytvorené: 2025-11-21 -> Verzia: 1.0 +> Verzia: 1.1 > Backend: Node.js + Express + Drizzle ORM + PostgreSQL > Frontend: React @@ -30,6 +30,7 @@ - **Email:** JMAP protocol (Truemail.sk) - **Encryption:** AES-256-GCM (email passwords) - **File Upload:** Multer +- **Time Tracking:** Real-time timer s automatickým stop/start ### Databázové Tabuľky ``` @@ -42,6 +43,8 @@ users → userEmailAccounts ← emailAccounts companies → projects → todos → notes ↓ timesheets + +users → timeEntries → projects/todos/companies ``` **Vzťahy:** @@ -49,6 +52,8 @@ companies → projects → todos → notes - `companies` → `projects`: One-to-many (company môže mať viac projektov) - `projects` → `todos`, `notes`, `timesheets`: One-to-many - `users` → `todos.assignedTo`: One-to-many (user má assigned úlohy) +- `users` → `timeEntries`: One-to-many (user má záznamy času) +- `timeEntries` → `projects`, `todos`, `companies`: Optional Many-to-one --- @@ -497,7 +502,81 @@ validateJmapCredentials(email, password) --- -### 11. audit.service.js +### 11. time-tracking.service.js +**Účel:** Sledovanie odpracovaného času + +**Databáza:** `timeEntries`, `projects`, `todos`, `companies`, `users` + +**Metódy:** +```javascript +startTimeEntry(userId, data) + → Validate: project/todo/company exists (ak sú poskytnuté) + → Check: existujúci bežiaci časovač + → Ak beží → automaticky ho zastaví + → INSERT INTO timeEntries + → isRunning = true, startTime = NOW() + +stopTimeEntry(entryId, userId, data) + → Validate: ownership, isRunning = true + → Počíta duration v minútach + → UPDATE timeEntries SET endTime, duration, isRunning = false + → Optional: update projectId, todoId, companyId, description + +getRunningTimeEntry(userId) + → SELECT * WHERE userId AND isRunning = true + → Vráti aktuálny bežiaci časovač (alebo null) + +getAllTimeEntries(userId, filters) + → Filter: projectId, todoId, companyId, startDate, endDate + → SELECT * FROM timeEntries WHERE userId + → ORDER BY startTime DESC + +getMonthlyTimeEntries(userId, year, month) + → SELECT * WHERE userId AND startTime BETWEEN month range + → Používa sa pre mesačný prehľad + +getTimeEntryById(entryId) + → SELECT * WHERE id + → Throw NotFoundError ak neexistuje + +getTimeEntryWithRelations(entryId) + → LEFT JOIN project, todo, company + → Vráti všetko v jednom objekte + +updateTimeEntry(entryId, userId, data) + → Validate: ownership, NOT isRunning (nemožno upraviť bežiaci) + → Update: startTime, endTime, projectId, todoId, companyId, description + → Prepočíta duration ak sa zmení čas + → Set isEdited = true + +deleteTimeEntry(entryId, userId) + → Validate: ownership, NOT isRunning + → DELETE FROM timeEntries + +getMonthlyStats(userId, year, month) + → Volá getMonthlyTimeEntries() + → Počíta štatistiky: + - totalMinutes / totalHours + - daysWorked (unique days) + - averagePerDay + - byProject (čas per projekt) + - byCompany (čas per firma) +``` + +**Volá:** +- Databázu (timeEntries, projects, todos, companies) +- `utils/errors.NotFoundError` +- `utils/errors.BadRequestError` + +**Dôležité poznámky:** +- **Auto-stop:** Pri štarte nového časovača sa automaticky zastaví predchádzajúci +- **Duration:** Ukladá sa v minútach (Math.round) +- **isEdited flag:** Označuje manuálne upravené záznamy +- **isRunning:** Iba jeden časovač môže byť aktívny pre usera + +--- + +### 12. audit.service.js **Účel:** Audit logging pre compliance **Databáza:** `auditLogs` @@ -1375,6 +1454,114 @@ Volá: jmap.service.sendEmail() --- +### ⏱️ TIME TRACKING + +#### POST /api/time-tracking/start +``` +Účel: Spustiť nový časovač +Body: { projectId?, todoId?, companyId?, description? } +Auth: Áno +Response: { entry with isRunning: true } +Efekt: + - Automaticky zastaví predchádzajúci bežiaci časovač (ak existuje) + - Vytvorí nový time entry s startTime = NOW() +``` + +#### POST /api/time-tracking/:entryId/stop +``` +Účel: Zastaviť bežiaci časovač +Params: entryId (UUID) +Body: { projectId?, todoId?, companyId?, description? } +Auth: Áno +Response: { entry with endTime, duration, isRunning: false } +Efekt: + - Nastaví endTime = NOW() + - Vypočíta duration v minútach + - Optional: update projektId/todoId/companyId/description +``` + +#### GET /api/time-tracking/running +``` +Účel: Získať aktuálny bežiaci časovač +Auth: Áno +Response: { entry } alebo null +``` + +#### GET /api/time-tracking?projectId=&todoId=&companyId=&startDate=&endDate= +``` +Účel: Zoznam všetkých time entries s filtrami +Query: projectId, todoId, companyId, startDate, endDate (all optional) +Auth: Áno +Response: Array of time entries +Order: DESC by startTime +``` + +#### GET /api/time-tracking/month/:year/:month +``` +Účel: Mesačný prehľad time entries +Params: year (YYYY), month (1-12) +Auth: Áno +Response: Array of entries pre daný mesiac +``` + +#### GET /api/time-tracking/stats/monthly/:year/:month +``` +Účel: Mesačné štatistiky +Params: year (YYYY), month (1-12) +Auth: Áno +Response: { + totalMinutes, + totalHours, + remainingMinutes, + daysWorked, + averagePerDay, + entriesCount, + byProject: { projectId: minutes }, + byCompany: { companyId: minutes } +} +``` + +#### GET /api/time-tracking/:entryId +``` +Účel: Detail time entry +Params: entryId (UUID) +Auth: Áno +Response: Single time entry +``` + +#### GET /api/time-tracking/:entryId/details +``` +Účel: Detail time entry s reláciami +Params: entryId (UUID) +Auth: Áno +Response: { ...entry, project, todo, company } +``` + +#### PATCH /api/time-tracking/:entryId +``` +Účel: Upraviť time entry +Params: entryId (UUID) +Body: { startTime?, endTime?, projectId?, todoId?, companyId?, description? } +Auth: Áno +Validation: + - Entry nesmie byť isRunning (nemožno upraviť bežiaci časovač) + - User musí byť owner + - Pri zmene času sa prepočíta duration +Response: Updated entry with isEdited: true +``` + +#### DELETE /api/time-tracking/:entryId +``` +Účel: Zmazať time entry +Params: entryId (UUID) +Auth: Áno +Validation: + - Entry nesmie byť isRunning + - User musí byť owner +``` + +--- + ### 📊 TIMESHEETS #### POST /api/timesheets/upload @@ -1455,6 +1642,18 @@ email.controller → jmapRequest() → JMAP Server → INSERT email to DB (sent) +TIME TRACKING: +time-tracking.controller + → time-tracking.service.startTimeEntry() + → Check running entry (auto-stop if exists) + → Validate project/todo/company + → INSERT timeEntries + → time-tracking.service.stopTimeEntry() + → Calculate duration + → UPDATE timeEntries (set endTime, isRunning = false) + → time-tracking.service.getMonthlyStats() + → Aggregate statistics by project/company + AUDIT: Rôzne controllers → audit.service.logAuditEvent() @@ -1478,6 +1677,7 @@ Rôzne controllers - `company.service` → database, errors - `todo.service` → database, errors - `note.service` → database, errors +- `time-tracking.service` → database, errors **Tier 4 (Multiple services):** - `contact.service` → company.service, jmap.service @@ -1509,12 +1709,14 @@ Rôzne controllers ### Možné zlepšenia 1. Pagination na všetkých list endpointoch -2. WebSocket pre real-time notifications +2. WebSocket pre real-time notifications (time tracking updates, email sync) 3. Background jobs pre email sync (Bull/Redis) 4. Cache layer (Redis) pre často čítané dáta 5. API versioning (/api/v1/) 6. GraphQL ako alternatíva k REST 7. Implement standalone Notes UI alebo vymazať routes +8. Time tracking export do CSV/Excel pre reporting +9. Team time tracking dashboard (admin view všetkých userov) --- @@ -1697,6 +1899,51 @@ req.userRole // 'admin' | 'member' --- +### 7. Time Tracking - Auto-stop Behavior + +**PROBLÉM:** User môže mať spustený iba jeden časovač naraz. + +**RIEŠENIE - Automatický stop:** +```javascript +// Pri štarte nového časovača +if (existingRunning) { + // Automaticky zastaví predchádzajúci časovač + const endTime = new Date(); + const duration = Math.round((endTime - startTime) / 60000); // minúty + await db.update(timeEntries) + .set({ endTime, duration, isRunning: false }) + .where(eq(timeEntries.id, existingRunning.id)); +} +``` + +**Validačné pravidlá:** +```javascript +// ✅ POVOLENÉ +- Spustiť nový časovač (auto-stop predchádzajúceho) +- Upraviť zastavený časovač +- Zmazať zastavený časovač + +// ❌ ZAKÁZANÉ +- Upraviť bežiaci časovač (musí sa najprv zastaviť) +- Zmazať bežiaci časovač (musí sa najprv zastaviť) +- Zastaviť časovač iného usera +``` + +**Duration calculation:** +- Ukladá sa v **minútach** (Math.round) +- Počíta sa z rozdelu: `(endTime - startTime) / 60000` +- Frontend zobrazuje: hodiny + minúty (napr. "2h 35m") + +**isEdited flag:** +- Automaticky nastavený pri manuálnej úprave +- Indikuje, že čas bol zmenený používateľom (nie auto-tracked) + +**Kde sa používa:** +- `time-tracking.service.js`: `startTimeEntry()`, `updateTimeEntry()` +- Frontend: Time tracking komponenty s real-time countdown + +--- + ## 🔍 DEBUGGING TIPS ### 1. Server beží starý kód @@ -1732,6 +1979,6 @@ console.log('[DEBUG] JMAP validation:', valid); --- **Vytvorené:** 2025-11-21 -**Posledná aktualizácia:** 2025-11-21 +**Posledná aktualizácia:** 2025-11-24 **Autor:** CRM Server Team **Kontakt:** crm-server documentation diff --git a/package-lock.json b/package-lock.json index e98e451..e060db6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "cors": "^2.8.5", "dotenv": "^16.4.5", "drizzle-orm": "^0.44.7", + "exceljs": "^4.4.0", "express": "^4.21.1", "express-rate-limit": "^8.2.1", "helmet": "^8.0.0", @@ -1611,6 +1612,47 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/format/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/@fast-csv/parse/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, "node_modules/@hexagon/base64": { "version": "1.1.28", "resolved": "https://registry.npmjs.org/@hexagon/base64/-/base64-1.1.28.tgz", @@ -2662,6 +2704,75 @@ "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", "license": "MIT" }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2696,6 +2807,12 @@ "node": ">=12.0.0" } }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2833,7 +2950,26 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, "node_modules/baseline-browser-mapping": { @@ -2945,6 +3081,28 @@ "uncrypto": "^0.1.3" } }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -2958,6 +3116,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -3001,7 +3176,6 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3065,6 +3239,39 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -3077,6 +3284,23 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -3167,6 +3391,18 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3330,11 +3566,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, "license": "MIT" }, "node_modules/concat-stream": { @@ -3424,6 +3674,12 @@ "dev": true, "license": "MIT" }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -3437,6 +3693,31 @@ "node": ">= 0.10" } }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -3474,6 +3755,12 @@ "node": ">= 8" } }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -3756,6 +4043,45 @@ "node": ">= 0.4" } }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3807,6 +4133,15 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", @@ -4123,6 +4458,35 @@ "node": ">= 0.6" } }, + "node_modules/exceljs": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.4.0.tgz", + "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==", + "license": "MIT", + "dependencies": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/exceljs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -4252,6 +4616,19 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/fast-csv": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4457,11 +4834,16 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, "license": "ISC" }, "node_modules/fsevents": { @@ -4479,6 +4861,22 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4586,7 +4984,6 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -4645,7 +5042,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/has-flag": { @@ -4751,6 +5147,26 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4768,6 +5184,12 @@ "dev": true, "license": "ISC" }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -4820,7 +5242,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -4953,6 +5374,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -5757,6 +6184,48 @@ "node": ">=10" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/jwa": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", @@ -5807,6 +6276,48 @@ "node": ">=20.0.0" } }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -5831,6 +6342,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -5838,6 +6358,12 @@ "dev": true, "license": "MIT" }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "license": "ISC" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -5854,6 +6380,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==", + "license": "MIT" + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -5866,12 +6422,31 @@ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", "license": "MIT" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "license": "MIT" + }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", "license": "MIT" }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", + "license": "MIT" + }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", @@ -5890,6 +6465,12 @@ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", "license": "MIT" }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -5903,6 +6484,18 @@ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "license": "MIT" }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -6056,7 +6649,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -6267,7 +6859,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6332,7 +6923,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -6414,6 +7004,12 @@ "node": ">=6" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6469,7 +7065,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6763,6 +7358,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -6908,6 +7509,36 @@ "node": ">= 6" } }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7011,6 +7642,19 @@ "node": ">=10" } }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/rou3": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/rou3/-/rou3-0.5.1.tgz", @@ -7043,6 +7687,18 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -7122,6 +7778,12 @@ "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", "license": "MIT" }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -7524,6 +8186,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -7539,6 +8217,15 @@ "node": ">=8" } }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -7578,6 +8265,15 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -7686,6 +8382,54 @@ "node": ">= 0.8" } }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", @@ -7837,7 +8581,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -7854,6 +8597,12 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, "node_modules/xss-clean": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/xss-clean/-/xss-clean-0.1.4.tgz", @@ -7937,6 +8686,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/zod": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", diff --git a/package.json b/package.json index bfd74fd..791f899 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "cors": "^2.8.5", "dotenv": "^16.4.5", "drizzle-orm": "^0.44.7", + "exceljs": "^4.4.0", "express": "^4.21.1", "express-rate-limit": "^8.2.1", "helmet": "^8.0.0", diff --git a/src/controllers/time-tracking.controller.js b/src/controllers/time-tracking.controller.js index 306253f..a41689c 100644 --- a/src/controllers/time-tracking.controller.js +++ b/src/controllers/time-tracking.controller.js @@ -132,6 +132,32 @@ export const getMonthlyTimeEntries = async (req, res) => { } }; +/** + * Generate timesheet file for a month + * POST /api/time-tracking/month/:year/:month/generate + */ +export const generateMonthlyTimesheet = async (req, res) => { + try { + const userId = req.userId; + const { year, month } = req.params; + + const result = await timeTrackingService.generateMonthlyTimesheet( + userId, + parseInt(year), + parseInt(month) + ); + + res.status(201).json({ + success: true, + data: result, + message: 'Timesheet bol vygenerovaný', + }); + } catch (error) { + const errorResponse = formatErrorResponse(error, process.env.NODE_ENV === 'development'); + res.status(error.statusCode || 500).json(errorResponse); + } +}; + /** * Get time entry by ID * GET /api/time-tracking/:entryId diff --git a/src/controllers/timesheet.controller.js b/src/controllers/timesheet.controller.js index f78b04a..6946d4d 100644 --- a/src/controllers/timesheet.controller.js +++ b/src/controllers/timesheet.controller.js @@ -63,6 +63,7 @@ export const uploadTimesheet = async (req, res) => { fileSize: file.size, year: parseInt(year), month: parseInt(month), + isGenerated: false, }) .returning(); @@ -76,6 +77,7 @@ export const uploadTimesheet = async (req, res) => { fileSize: newTimesheet.fileSize, year: newTimesheet.year, month: newTimesheet.month, + isGenerated: newTimesheet.isGenerated, uploadedAt: newTimesheet.uploadedAt, }, }, @@ -122,6 +124,7 @@ export const getMyTimesheets = async (req, res) => { fileSize: timesheets.fileSize, year: timesheets.year, month: timesheets.month, + isGenerated: timesheets.isGenerated, uploadedAt: timesheets.uploadedAt, }) .from(timesheets) @@ -171,6 +174,7 @@ export const getAllTimesheets = async (req, res) => { fileSize: timesheets.fileSize, year: timesheets.year, month: timesheets.month, + isGenerated: timesheets.isGenerated, uploadedAt: timesheets.uploadedAt, userId: timesheets.userId, username: users.username, diff --git a/src/db/migrations/0005_add_is_generated_timesheets.sql b/src/db/migrations/0005_add_is_generated_timesheets.sql new file mode 100644 index 0000000..ea0af16 --- /dev/null +++ b/src/db/migrations/0005_add_is_generated_timesheets.sql @@ -0,0 +1,3 @@ +-- Add flag to mark system-generated timesheets +ALTER TABLE timesheets +ADD COLUMN IF NOT EXISTS is_generated BOOLEAN NOT NULL DEFAULT FALSE; diff --git a/src/db/migrations/add_crm_tables.sql b/src/db/migrations/add_crm_tables.sql index 8d836ee..ff82ee9 100644 --- a/src/db/migrations/add_crm_tables.sql +++ b/src/db/migrations/add_crm_tables.sql @@ -89,6 +89,17 @@ BEGIN END IF; END $$; +-- Add is_generated flag to timesheets if not exists +DO $$ +BEGIN + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_name='timesheets' AND column_name='is_generated' + ) THEN + ALTER TABLE timesheets ADD COLUMN is_generated BOOLEAN NOT NULL DEFAULT FALSE; + END IF; +END $$; + -- Create indexes for better query performance CREATE INDEX IF NOT EXISTS idx_companies_created_at ON companies(created_at); CREATE INDEX IF NOT EXISTS idx_projects_company_id ON projects(company_id); diff --git a/src/db/schema.js b/src/db/schema.js index 541ecf6..ad90cf5 100644 --- a/src/db/schema.js +++ b/src/db/schema.js @@ -186,6 +186,7 @@ export const timesheets = pgTable('timesheets', { fileSize: integer('file_size').notNull(), // veľkosť súboru v bytoch year: integer('year').notNull(), // rok (napr. 2024) month: integer('month').notNull(), // mesiac (1-12) + isGenerated: boolean('is_generated').default(false).notNull(), // či bol súbor vygenerovaný systémom uploadedAt: timestamp('uploaded_at').defaultNow().notNull(), createdAt: timestamp('created_at').defaultNow().notNull(), updatedAt: timestamp('updated_at').defaultNow().notNull(), diff --git a/src/routes/time-tracking.routes.js b/src/routes/time-tracking.routes.js index b831b84..f9a4864 100644 --- a/src/routes/time-tracking.routes.js +++ b/src/routes/time-tracking.routes.js @@ -47,6 +47,18 @@ router.get( timeTrackingController.getMonthlyTimeEntries ); +// Generate monthly timesheet (XLSX) +router.post( + '/month/:year/:month/generate', + validateParams( + z.object({ + year: z.string().regex(/^\d{4}$/, 'Rok musí byť 4-ciferné číslo'), + month: z.string().regex(/^(0?[1-9]|1[0-2])$/, 'Mesiac musí byť číslo 1-12'), + }) + ), + timeTrackingController.generateMonthlyTimesheet +); + // Get monthly statistics router.get( '/stats/monthly/:year/:month', diff --git a/src/services/time-tracking.service.js b/src/services/time-tracking.service.js index b3c5dd2..bba0338 100644 --- a/src/services/time-tracking.service.js +++ b/src/services/time-tracking.service.js @@ -1,7 +1,10 @@ import { db } from '../config/database.js'; -import { timeEntries, projects, todos, companies, users } from '../db/schema.js'; -import { eq, and, gte, lte, desc, sql } from 'drizzle-orm'; +import { timeEntries, projects, todos, companies, users, timesheets } from '../db/schema.js'; +import { eq, and, gte, lte, desc } from 'drizzle-orm'; import { NotFoundError, BadRequestError } from '../utils/errors.js'; +import ExcelJS from 'exceljs'; +import fs from 'fs/promises'; +import path from 'path'; // Helpers to normalize optional payload fields const normalizeOptionalId = (value) => { @@ -18,6 +21,28 @@ const normalizeOptionalText = (value) => { return trimmed.length ? trimmed : null; }; +const formatDate = (value) => { + const date = new Date(value); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; +}; + +const formatTime = (value) => { + const date = new Date(value); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + return `${hours}:${minutes}`; +}; + +const formatDuration = (minutes) => { + if (!Number.isFinite(minutes)) return ''; + const hours = Math.floor(minutes / 60); + const mins = Math.abs(minutes % 60); + return `${hours}:${String(mins).padStart(2, '0')}`; +}; + /** * Start a new time entry */ @@ -274,6 +299,210 @@ export const getMonthlyTimeEntries = async (userId, year, month) => { .orderBy(desc(timeEntries.startTime)); }; +/** + * Generate an XLSX timesheet for a given month and user. + */ +export const generateMonthlyTimesheet = async (userId, year, month) => { + const startDate = new Date(year, month - 1, 1); + const endDate = new Date(year, month, 0, 23, 59, 59, 999); + + const [user] = await db + .select({ + username: users.username, + firstName: users.firstName, + lastName: users.lastName, + }) + .from(users) + .where(eq(users.id, userId)) + .limit(1); + + if (!user) { + throw new NotFoundError('Používateľ nenájdený'); + } + + const entries = await db + .select({ + id: timeEntries.id, + startTime: timeEntries.startTime, + endTime: timeEntries.endTime, + duration: timeEntries.duration, + description: timeEntries.description, + projectName: projects.name, + todoTitle: todos.title, + companyName: companies.name, + }) + .from(timeEntries) + .leftJoin(projects, eq(timeEntries.projectId, projects.id)) + .leftJoin(todos, eq(timeEntries.todoId, todos.id)) + .leftJoin(companies, eq(timeEntries.companyId, companies.id)) + .where( + and( + eq(timeEntries.userId, userId), + gte(timeEntries.startTime, startDate), + lte(timeEntries.startTime, endDate) + ) + ) + .orderBy(timeEntries.startTime); + + const completedEntries = entries.filter((entry) => entry.endTime && entry.duration !== null); + if (completedEntries.length === 0) { + throw new NotFoundError('Žiadne dokončené záznamy pre daný mesiac'); + } + + let totalMinutes = 0; + const dailyTotals = {}; + + completedEntries.forEach((entry) => { + const minutes = entry.duration || 0; + totalMinutes += minutes; + const day = formatDate(entry.startTime); + dailyTotals[day] = (dailyTotals[day] || 0) + minutes; + }); + + const workbook = new ExcelJS.Workbook(); + workbook.creator = 'crm-server'; + const worksheet = workbook.addWorksheet('Timesheet', { + views: [{ state: 'frozen', ySplit: 6 }], + }); + + const fullName = [user.firstName, user.lastName].filter(Boolean).join(' ') || user.username; + const periodLabel = `${year}-${String(month).padStart(2, '0')}`; + + worksheet.getCell('A1').value = 'Timesheet'; + worksheet.getCell('A1').font = { name: 'Calibri', size: 16, bold: true }; + worksheet.mergeCells('A1:D1'); + + worksheet.getCell('A2').value = `Name: ${fullName}`; + worksheet.getCell('A3').value = `Period: ${periodLabel}`; + worksheet.getCell('A4').value = `Generated: ${new Date().toLocaleString()}`; + + worksheet.columns = [ + { key: 'date', width: 12 }, + { key: 'project', width: 28 }, + { key: 'todo', width: 28 }, + { key: 'company', width: 24 }, + { key: 'description', width: 40 }, + { key: 'start', width: 12 }, + { key: 'end', width: 12 }, + { key: 'duration', width: 16 }, + ]; + + const headerRowNumber = 6; + const headerRow = worksheet.getRow(headerRowNumber); + headerRow.values = [ + 'Date', + 'Project', + 'Todo', + 'Company', + 'Description', + 'Start', + 'End', + 'Duration (h:mm)', + ]; + headerRow.font = { name: 'Calibri', size: 11, bold: true }; + headerRow.alignment = { vertical: 'middle', horizontal: 'center', wrapText: true }; + headerRow.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFE8EEF5' } }; + headerRow.height = 20; + + completedEntries.forEach((entry) => { + worksheet.addRow({ + date: formatDate(entry.startTime), + project: entry.projectName || '', + todo: entry.todoTitle || '', + company: entry.companyName || '', + description: entry.description || '', + start: formatTime(entry.startTime), + end: formatTime(entry.endTime), + duration: formatDuration(entry.duration), + }); + }); + + // Style body rows + worksheet.eachRow((row, rowNumber) => { + if (rowNumber >= headerRowNumber) { + row.alignment = { vertical: 'middle', wrapText: true }; + } + }); + + let summaryStart = worksheet.lastRow.number + 2; + worksheet.getCell(`A${summaryStart}`).value = 'Daily totals'; + worksheet.getCell(`A${summaryStart}`).font = { name: 'Calibri', size: 12, bold: true }; + worksheet.mergeCells(`A${summaryStart}:B${summaryStart}`); + + const dailyHeaderRowNumber = summaryStart + 1; + const dailyHeaderRow = worksheet.getRow(dailyHeaderRowNumber); + dailyHeaderRow.values = ['Date', 'Total (h:mm)']; + dailyHeaderRow.font = { name: 'Calibri', size: 11, bold: true }; + dailyHeaderRow.alignment = { vertical: 'middle', horizontal: 'center' }; + dailyHeaderRow.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFE8EEF5' } }; + + Object.keys(dailyTotals) + .sort() + .forEach((day) => { + worksheet.addRow([day, formatDuration(dailyTotals[day])]); + }); + + const overallRow = worksheet.addRow(['Overall total', formatDuration(totalMinutes)]); + overallRow.font = { name: 'Calibri', size: 11, bold: true }; + + const uploadsDir = path.join( + process.cwd(), + 'uploads', + 'timesheets', + userId.toString(), + year.toString(), + month.toString() + ); + await fs.mkdir(uploadsDir, { recursive: true }); + + const filename = `timesheet-${periodLabel}-${Date.now()}.xlsx`; + const filePath = path.join(uploadsDir, filename); + let savedFilePath = null; + + try { + await workbook.xlsx.writeFile(filePath); + savedFilePath = filePath; + const { size: fileSize } = await fs.stat(filePath); + + const [newTimesheet] = await db + .insert(timesheets) + .values({ + userId, + fileName: filename, + filePath, + fileType: 'xlsx', + fileSize, + year, + month, + isGenerated: true, + }) + .returning(); + + return { + timesheet: { + id: newTimesheet.id, + fileName: newTimesheet.fileName, + fileType: newTimesheet.fileType, + fileSize: newTimesheet.fileSize, + year: newTimesheet.year, + month: newTimesheet.month, + isGenerated: newTimesheet.isGenerated, + uploadedAt: newTimesheet.uploadedAt, + }, + totals: { + totalMinutes, + totalFormatted: formatDuration(totalMinutes), + daily: dailyTotals, + }, + }; + } catch (error) { + if (savedFilePath) { + await fs.unlink(savedFilePath).catch(() => {}); + } + throw error; + } +}; + /** * Update time entry */ diff --git a/uploads/timesheets/68927352-725c-4e95-adb6-d4002b22bef5/2024/12/Richard-Tekula (1)-1763707607012-681244677.pdf b/uploads/timesheets/68927352-725c-4e95-adb6-d4002b22bef5/2024/12/Richard-Tekula (1)-1763707607012-681244677.pdf deleted file mode 100644 index a272e437bcf4a28fa0e6849a10be6e998595d5b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158730 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 ^%=S(;5>zJubCdqg<)<3x0CB_reJ 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 z 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 bIt`ExHBi#T+|&Ztc|r8SEldr~p?z=w1VVS* diff --git a/uploads/timesheets/ae65f40f-e22a-45c6-9647-36005c6d31e8/2025/11/timesheet-2025-11-1763975803413.xlsx b/uploads/timesheets/ae65f40f-e22a-45c6-9647-36005c6d31e8/2025/11/timesheet-2025-11-1763975803413.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..79154cb97460dc0ecd1f49fb000c5aac37032e33 GIT binary patch literal 7152 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 literal 0 HcmV?d00001