ee280fdaae
Feat: Automatische Zahlungsmahnung (Tag 21) + fristlose Kündigung (Tag 35) per Scheduler (§314 BGB)
2026-05-15 16:10:53 +02:00
e714580d77
Feat: Cashflow auf paid_amount, Differenz-Badge, Kulanz-Abschreibung im Bezahlt-Modal (SW by-v984)
2026-05-15 16:06:08 +02:00
0f6b5afd6a
Fix: Syntaxfehler in invoices.py — fehlende schließende Klammer bei _s()
2026-05-15 15:56:25 +02:00
d0b0e2c671
Fix: SW-Install-Fehler — PRIORITY_PAGES nicht-blockierend cachen, kein addAll() (SW by-v983)
2026-05-15 15:53:13 +02:00
68fd9c0e38
Fix: En-Dash in PDF durch Bindestrich ersetzen + _s() Sanitizer für alle Texteingaben (SW by-v982)
2026-05-15 15:50:02 +02:00
1a8716b0b2
Perf: Prioritäts-Seiten pre-cache + Stale-While-Revalidate + Background-Warm-up (SW by-v981)
2026-05-15 15:41:55 +02:00
78f3077317
UX: Freischalten zeigt Rechnungsentwurf-Nummer im Toast + Confirm-Hinweis (SW by-v980)
2026-05-15 14:01:45 +02:00
04d8ed153b
UX: Neue Rechnung — Hinweis 'nicht für Abos', neutraler Placeholder, passender Notiz-Default (SW by-v979)
2026-05-15 13:56:13 +02:00
49e01683ad
Fix: 'Fällig bis' Umlaut korrigiert im PDF-Info-Block
2026-05-15 13:51:26 +02:00
f0f767e466
Fix: iOS Tastatur — modal-body maxHeight begrenzen + manueller scroll statt scrollIntoView (SW by-v978)
2026-05-15 13:43:17 +02:00
ed6dd8da13
Fix: Quartalssumme korrekt (alle inkl. Storno), Netto ausgeblendet (SW by-v977)
2026-05-15 13:38:08 +02:00
6104132714
Feat: Quartalsbericht — Stornozeilen mit Minusbeträgen, nach Datum sortiert, Summen netten sich heraus (SW by-v976)
2026-05-15 13:27:05 +02:00
b10b3140eb
Fix: Stornorechnung referenziert Originalnummer + Datum (§14 UStG Pflicht)
2026-05-15 13:18:32 +02:00
cabb2fd6f7
Fix: iOS Modal scrollIntoView bei Tastatur; CSV Stornierte mit 0€ + Stornonummer (SW by-v975)
2026-05-15 13:15:49 +02:00
2bbf3bc3f6
Fix: CSV-Spalten korrigiert — Netto/Brutto getrennt, Zahlungseingang statt Erstellt (SW by-v974)
2026-05-15 12:53:26 +02:00
8f3d639e34
Fix: Stornierte/Entwurfs-Rechnungen aus Quartalsbericht und Cashflow-Summen ausgeschlossen
2026-05-15 12:49:04 +02:00
5fd86dac4b
UX: Admin-Panel Desktop — Sidebar-Navigation, 1200px Breite, keine abgeschnittenen Tabs (SW by-v973)
2026-05-15 12:42:04 +02:00
af039efe82
Fix: Date-Header in ausgehenden Mails (formatdate UTC, Container hat keine lokale TZ)
2026-05-15 12:37:41 +02:00
865407d428
Feat: Alle ausgehenden Mails landen im IMAP-Gesendet-Ordner (SMTP + Brevo)
2026-05-15 12:32:52 +02:00
aea5f04bc1
Fix: Von-Gründer-eingeladen → 100% dauerhaft (statt 50%); SW by-v972
2026-05-15 12:25:41 +02:00
810c78ae8b
Feat: Referral/Gründer-Rabatt vollständig integriert (SW by-v971)
2026-05-15 12:22:31 +02:00
63a1fc585c
Feat: Referral/Gründer-Rabatt in Rechnungssystem integriert (Discount-Badge, Auto-Vorausfüllung)
2026-05-15 12:22:15 +02:00
2163169b73
Feat: Rabattsystem in Rechnungserstellung integriert (Gründer/Referral)
...
- _get_discount_info() Hilfsfunktion in admin.py (Gründer 100%, Referral-Stufen 20/30/50%, von Gründer eingeladen 50%)
- list_upgrade_requests liefert discount_pct + discount_reason pro User
- GET /admin/users/{user_id}/discount Endpoint
- _handle_upgrade_invoices nutzt Rabatt für amount_net/discount_pct/after_disc + passende Notiz
- scheduler.py _create_renewal_invoice_draft: inline Rabattberechnung + korrekte Beträge
- admin.js: Discount-Badge in Upgrade-Card, data-Attribute am Invoice-Button, _discountNote(), discount_pct + notes im Modal vorbelegt
2026-05-15 12:21:33 +02:00
db4d5cb1b6
Legal: Widerrufs-Checkbox, AGB-Abschnitt, Rechnungsnotiz (SW by-v970)
2026-05-15 12:07:13 +02:00
9a7f100855
Legal: Widerrufs-Checkbox im Upgrade-Modal + AGB-Abschnitt in Datenschutz
...
- Upgrade-Modal: Checkbox §356 Abs.4 BGB muss aktiv bestätigt werden,
"Anfrage senden" bleibt bis dahin deaktiviert
- Akzeptanz-Zeitstempel wird mit der upgradeRequest-Message mitgeschickt
- datenschutz.js: neuer Abschnitt "Abonnement & Kündigung" mit Laufzeit,
Verlängerung, Zahlung, Kündigung, Erstattung und Widerrufsrecht
2026-05-15 12:06:14 +02:00
699926cd76
Fix: Rechnung-Hinweistext auf AGB-konforme Jahresbeitrags-Notiz umgestellt
...
Alle drei Rechnungs-Einstiegspunkte (Admin-Upgrade-Button, automatische
Verlängerung via Scheduler, manuelles Upgrade via admin.py) erhalten jetzt
den einheitlichen Hinweis zum Jahresbeitrag gem. AGB ohne Rückerstattung.
2026-05-15 12:06:05 +02:00
a9f7923716
Feat: Kündigung blockt Erneuerungsentwurf; Upgrade storniert alte Rechnungen + legt neuen Entwurf an
2026-05-15 12:00:27 +02:00
b1dbde332f
Feat: Erneuerungsrechnung-Entwurf 30 Tage vor Abo-Ablauf + 7-Tage-Erinnerung an Admin
2026-05-15 11:53:29 +02:00
96030304d4
Fix: Leistungszeitraum als konkreter Datumszeitraum (Rechnungsdatum bis +12 Monate)
2026-05-15 11:49:48 +02:00
24a1aecda4
Fix: Leistungszeitraum '12 Monate ab Rechnungsdatum' statt festem Datum (SW by-v969)
2026-05-15 11:45:13 +02:00
b14a251bdc
Feat: Entwurf bearbeiten (PATCH), erneut senden; SW by-v968
2026-05-15 11:33:48 +02:00
a2d089bce4
Fix: SMTP_SUPPORT_PASS Fallback in mailer, scaninput Logging
2026-05-15 11:29:16 +02:00
41a4808ad5
Fix: Storno sendet PDF+Mail+Scaninput; /scaninput Volume in staging ergänzt
2026-05-15 11:18:48 +02:00
8e36eb0611
Fix: PDF — breiter Header-Balken mit Logo, eine Seite, Hinweis-Prefix, Footer fix
2026-05-15 11:13:28 +02:00
0a466ef6ce
Feat: Rechnungsadresse — Profil, Upgrade-Modal Hinweis, Rechnung-erstellen-Button in Upgrade-Cards (SW by-v967)
2026-05-15 10:59:12 +02:00
95b70d5119
Fix: Rechnungs-PDF komplett neu — DIN-5008-Layout, Überlagerung behoben, Bankverbindung, Footer, Deutsche Formatierung
2026-05-15 10:45:49 +02:00
fa513be7f5
Release v1.6.0 — Rechnungs-System (SW by-v966)
...
- Rechnungserstellung mit fortlaufender Nr. RG-YYYY-NNNN
- PDF-Generierung (fpdf2) mit §14-UStG-Pflichtangaben
- Kleinunternehmer-Modus (§19 UStG) via ENV
- Mail-Versand mit PDF-Anhang (Brevo/SMTP)
- Speicherung in /scaninput + Paperless-ngx REST-API
- Admin-Panel: Invoice-Tab, Pay/Cancel-Modals, Cashflow
- Quartalsbericht als CSV-Download + Mail-Versand
- Action-Items: offene Rechnungen im To-Do-Band
- Stornonummern ST-YYYY-NNNN
- docker-compose: /volume1/scaninput:/scaninput
2026-05-15 10:07:10 +02:00
5dddacff96
Feat: Admin action-items invoices_unpaid, CSV-Download, Quartalsbericht-Versand
2026-05-15 10:06:04 +02:00
77093774f9
Feat: Admin-Rechnungs-Endpoints — invoices_unpaid, CSV-Download, Quartalsbericht-Versand
...
- action_items(): invoices_unpaid (status='sent') zum Return-Dict hinzugefügt
- GET /api/admin/invoices/quarterly/{year}/{q}/csv — CSV-Download (Semikolon-getrennt, UTF-8-BOM für Excel)
- POST /api/admin/invoices/send-quarterly-report — sendet CSV-Anhang an Steuerberater + Zusammenfassung an René (SMTP_FROM); graceful fallback wenn attachments noch nicht von mailer.py unterstützt
2026-05-15 10:04:46 +02:00
b68a12587a
Feature: Rechnungs-System (invoices) — Backend komplett
...
- DB-Migration: invoices + invoice_items Tabellen inkl. Indizes
- routes/invoices.py: vollständiger Admin-Router (prefix /api/admin/invoices)
- CRUD: Liste, Detail, Erstellen, Senden, Bezahlen, Stornieren
- PDF-Generierung via fpdf2 mit §14-UStG-Pflichtangaben (Kleinunternehmer-Hinweis)
- Cashflow-Übersicht und Quartalsbericht
- PDF-Download-Endpunkt
- Speicherung in /scaninput + optionaler Paperless-Upload
- mailer.py: send_email() + Backends um optionale PDF-Anhänge erweitert
(Brevo: base64, SMTP: MIMEApplication)
- main.py: invoices_router registriert
- docker-compose.yml: /volume1/scaninput:/scaninput Volume hinzugefügt
2026-05-15 10:04:23 +02:00
9c359bb07e
Feat: Rechnungs-Management Tab in Admin-Oberfläche
...
Neuer 'Rechnungen'-Tab mit vollständiger Invoice-Verwaltung:
- Invoice-Liste mit Status-Badges (draft/sent/paid/cancelled) und kontextuellen Aktionen
- Modal: Neue Rechnung erstellen (dynamische Positionen, Live-Vorschau Netto/Brutto)
- Modal: Als bezahlt markieren (Datum + Betrag)
- Modal: Stornieren mit Pflichtgrund
- Modal: Detail-Ansicht mit Positionen-Tabelle
- Cashflow-View: Übersichtskacheln + Monatstabelle + Quartalsbericht-CSV-Download
- Action-Items Badge für offene Rechnungen (invoices_unpaid aus action-items API)
2026-05-15 09:56:42 +02:00
c032b9a3fb
Fix: Stats-Kotbeutel → waste_basket Typ in osm_pois (zeigt echte Mülleimer-Zahl)
2026-05-14 22:47:14 +02:00
6495a5ff6b
Fix: Stats-Kotbeutel aus osm_pois statt user_map_pois (zeigt 125.750 statt 2)
2026-05-14 22:45:50 +02:00
129badf010
Fix: Hero-Stats zeigt vollständigen Text 'Mülleimer für Kotbeutel' (SW by-v965)
2026-05-14 22:37:29 +02:00
cf6e5920ae
Fix: APP_VER-Mismatch (Dauer-Aktualisieren-Bug), Mülleimer-Zahl im Hero (SW by-v964)
2026-05-14 22:15:17 +02:00
58046ce0c7
Fix: Kotbeutel-Stationen → Mülleimer für Kotbeutel in Stats-Band (SW by-v963)
2026-05-14 22:07:17 +02:00
07db68aea2
Fix: Geburtstag aller Hunde + Kotbeutel-Stationen in Stats (SW by-v962)
...
- worlds.js: bdayDog = _dogs.find(...) — Geburtstag gilt für alle Hunde, nicht nur den aktiven
- Banner, KI-Call, "Was hat sich X gewünscht?" nutzen bdayDog.name
- stats.py: kotbeutel-Count aus user_map_pois WHERE type='kotbeutel'
- landing: Stats-Band 5. Kachel "Kotbeutel-Stationen"
2026-05-14 22:00:52 +02:00
ebff9d820d
Merge branch 'develop'
2026-05-14 19:59:30 +02:00
be87930e5b
Fix: Foto-Strip + Ban-Yaro-Bild mit Inline-Styles (SW by-v961)
2026-05-14 19:55:34 +02:00
6f8644c70f
Landing: Ban Yaro persönlich — Foto + Geschichte als Split-Section (SW by-v960)
2026-05-14 19:50:12 +02:00