github-actions[bot]
|
6ee30a357d
|
chore(beta): release 3.60.2-beta.0
|
2026-06-04 19:40:36 +00:00 |
|
github-actions[bot]
|
3361a8bb51
|
chore(beta): release 3.60.1-beta.0
|
2026-06-02 07:17:10 +00:00 |
|
github-actions[bot]
|
987911a03b
|
chore(beta): release 3.60.0-beta.0
|
2026-06-02 07:11:30 +00:00 |
|
github-actions[bot]
|
b646dab493
|
chore(beta): release 3.59.1-beta.0
|
2026-05-31 21:10:15 +00:00 |
|
github-actions[bot]
|
714f7647fc
|
chore(beta): release 3.59.0-beta.0
|
2026-05-29 20:54:16 +00:00 |
|
github-actions[bot]
|
d50edcc427
|
chore(beta): release 3.58.0-beta.0
|
2026-05-29 20:05:46 +00:00 |
|
github-actions[bot]
|
4989c468a8
|
chore(beta): release 3.57.2-beta.0
|
2026-05-29 20:04:53 +00:00 |
|
github-actions[bot]
|
7be484eb8e
|
chore(beta): release 3.57.1-beta.0
|
2026-05-29 20:03:02 +00:00 |
|
github-actions[bot]
|
463ef4d0fd
|
chore(beta): release 3.57.0-beta.0
|
2026-05-29 14:25:27 +00:00 |
|
github-actions[bot]
|
84486c65f1
|
chore(beta): release 3.56.0-beta.0
|
2026-05-29 09:27:47 +00:00 |
|
Paul Nothaft
|
5f0fcc225c
|
Merge pull request #555 from Luca-Timo/feat/crm-pr
feat: CRM module — quotes, contracts, invoices, hours, calendar, tax
|
2026-05-29 11:27:23 +02:00 |
|
github-actions[bot]
|
fd8ee5d52c
|
chore(beta): release 3.55.0-beta.0
|
2026-05-27 13:53:11 +00:00 |
|
github-actions[bot]
|
54b185db47
|
chore(beta): release 3.54.7-beta.0
|
2026-05-26 20:54:29 +00:00 |
|
Luca
|
d543949188
|
feat(crm): backend code — services + routes + utilities + tests
Brings in the full backend CRM stack on top of the consolidated
migration (60abe8c).
Services (CRM)
- quoteService — full lifecycle (draft → sent → accepted → converted
to event/invoice), Skonto + Storno + reissue paths
- invoiceService — spawnInstallmentInvoices, updateInstallmentPlan,
monthly-billing accumulator, payment-check tokens, dunning ladder
- contractService — block-composable contract editor, in-browser
signature flow, wet-PDF upload path, integrity check, audit trail
- customerHoursService — per-entry locking, billing integration
- dealsService — cross-document lineage (deal_uuid)
- taxReportService — quarterly aggregates + CSV/PDF export
- eventReminderService — pre-event customer reminder cron pass
- _renderContext — shared issuer/recipient blocks across PDF types
- pdfService extensions — custom-font registration, font picker
Routes (admin + public)
- adminQuotes, adminInvoices, adminContracts, adminCalendar,
adminDeals, adminTaxReport, adminDev, adminBusinessProfile
- publicQuotes (accept/decline), publicContracts (sign),
publicPaymentCheck
- Extensions on adminEvents, adminCustomers, adminSettings,
adminEmail, adminFeatureFlags, adminThumbnails, adminPhotos,
adminCategories, adminUsers, adminArchives, adminDashboard
- server.js wires the new mounts (kept upstream's noStoreCache on
customer routes per 3-way merge)
Utilities
- schemaCache (cached hasColumn lookups across services)
- documentSequences (atomic gap-free numbering — §14 UStG)
- safePath (path-containment guards at fs stream boundaries)
- clientIp (sanctioned XFF reader for audit logs)
- publicTokenGuards (pre-multer token validation + attempt counters)
- numericHelpers (ensureInt / ensureNumber consolidation)
- dateFormatter (formatShortDate + dateInputLang)
- dbCompat extensions, iban + pdfFilename helpers, resolveLogoFile
Infrastructure
- Bundled PDF fonts (Comic-Neue / IBM-Plex-Sans / Inter / Jost /
Montserrat / Noto-Sans / Playfair-Display / Poppins)
- Backend package.json + lock updates (pdfkit, signature_pad,
qrcode, et al.)
- Sample storage layout under storage/business-docs/quote/
Tests
- 14 new test files covering quote/invoice/contract lifecycle,
installment plan reshape, line-item hierarchy, customer hours,
payment check, tax report PDF, IBAN parsing, filename sanitiser
|
2026-05-26 18:18:51 +02:00 |
|
github-actions[bot]
|
08fa2e9b63
|
chore(beta): release 3.54.6-beta.0
|
2026-05-25 20:19:09 +00:00 |
|
github-actions[bot]
|
793aa1247e
|
chore(beta): release 3.54.5-beta.0
|
2026-05-22 12:41:21 +00:00 |
|
github-actions[bot]
|
955ada4945
|
chore(beta): release 3.54.4-beta.0
|
2026-05-21 08:24:22 +00:00 |
|
github-actions[bot]
|
c1e8e0d73a
|
chore(beta): release 3.54.3-beta.0
|
2026-05-21 08:22:26 +00:00 |
|
github-actions[bot]
|
03cf09a7bf
|
chore(beta): release 3.54.2-beta.0
|
2026-05-20 14:49:19 +00:00 |
|
github-actions[bot]
|
baf5f27fb4
|
chore(beta): release 3.54.1-beta.0
|
2026-05-20 06:53:31 +00:00 |
|
github-actions[bot]
|
085a2e5fed
|
chore(beta): release 3.54.0-beta.0
|
2026-05-20 06:24:22 +00:00 |
|
github-actions[bot]
|
c042a33431
|
chore(beta): release 3.53.0-beta.0
|
2026-05-19 05:27:14 +00:00 |
|
github-actions[bot]
|
b2b46d311d
|
chore(beta): release 3.52.1-beta.0
|
2026-05-18 18:59:57 +00:00 |
|
github-actions[bot]
|
db3f1b83ce
|
chore(beta): release 3.52.0-beta.0
|
2026-05-18 18:56:50 +00:00 |
|
github-actions[bot]
|
acb387f69c
|
chore(beta): release 3.51.5-beta.0
|
2026-05-17 07:28:47 +00:00 |
|
github-actions[bot]
|
4da6726e57
|
chore(beta): release 3.51.4-beta.0
|
2026-05-17 07:26:57 +00:00 |
|
github-actions[bot]
|
941453fd7f
|
chore(beta): release 3.51.3-beta.0
|
2026-05-16 23:19:50 +00:00 |
|
github-actions[bot]
|
5a9ca4ad57
|
chore(beta): release 3.51.2-beta.0
|
2026-05-16 23:02:10 +00:00 |
|
github-actions[bot]
|
2e828fcf9f
|
chore(beta): release 3.51.1-beta.0
|
2026-05-16 22:53:14 +00:00 |
|
github-actions[bot]
|
72c2b5c796
|
chore(beta): release 3.51.0-beta.0
|
2026-05-14 21:25:07 +00:00 |
|
github-actions[bot]
|
365582e678
|
chore(beta): release 3.50.0-beta.0
|
2026-05-14 20:44:57 +00:00 |
|
github-actions[bot]
|
d4198e1bbc
|
chore(beta): release 3.49.6-beta.0
|
2026-05-14 19:37:31 +00:00 |
|
github-actions[bot]
|
1e4f762871
|
chore(beta): release 3.49.5-beta.0
|
2026-05-14 19:02:43 +00:00 |
|
github-actions[bot]
|
57ea08e1ed
|
chore(beta): release 3.49.4-beta.0
|
2026-05-14 18:49:31 +00:00 |
|
github-actions[bot]
|
bc58520cd2
|
chore(beta): release 3.49.3-beta.0
|
2026-05-14 18:18:43 +00:00 |
|
github-actions[bot]
|
1cbb0c4cff
|
chore(beta): release 3.49.2-beta.0
|
2026-05-13 16:46:19 +00:00 |
|
github-actions[bot]
|
e5ef893395
|
chore(beta): release 3.49.1-beta.0
|
2026-05-13 16:31:12 +00:00 |
|
github-actions[bot]
|
b3c6508712
|
chore(beta): release 3.49.0-beta.0
|
2026-05-13 16:18:38 +00:00 |
|
github-actions[bot]
|
fa71e7ea1e
|
chore(beta): release 3.48.1-beta.0
|
2026-05-12 20:57:36 +00:00 |
|
github-actions[bot]
|
dafc8d041a
|
chore(beta): release 3.48.0-beta.0
|
2026-05-12 20:48:26 +00:00 |
|
github-actions[bot]
|
a5e58d085e
|
chore(beta): release 3.47.2-beta.0
|
2026-05-11 20:15:57 +00:00 |
|
github-actions[bot]
|
d9d52ec8ab
|
chore(beta): release 3.47.1-beta.0
|
2026-05-11 19:57:31 +00:00 |
|
github-actions[bot]
|
1c23ec51ec
|
chore(beta): release 3.47.0-beta.0
|
2026-05-11 19:44:45 +00:00 |
|
github-actions[bot]
|
b31fc2140b
|
chore(beta): release 3.46.3-beta.0
|
2026-05-11 18:18:34 +00:00 |
|
github-actions[bot]
|
eddcdbf4d8
|
chore(beta): release 3.46.2-beta.0
|
2026-05-11 18:07:41 +00:00 |
|
github-actions[bot]
|
3ea7eea4b7
|
chore(beta): release 3.46.1-beta.0
|
2026-05-11 08:07:45 +00:00 |
|
github-actions[bot]
|
87dfae0074
|
chore(beta): release 3.46.0-beta.0
|
2026-05-11 07:57:50 +00:00 |
|
github-actions[bot]
|
55e6395e9e
|
chore(beta): release 3.45.1-beta.0
|
2026-05-10 20:09:09 +00:00 |
|
github-actions[bot]
|
421354bc5a
|
chore(beta): release 3.45.0-beta.0
|
2026-05-10 19:57:54 +00:00 |
|
github-actions[bot]
|
d2864854e7
|
chore(beta): release 3.44.2-beta.0
|
2026-05-10 19:51:03 +00:00 |
|