feat: Rechnungsfilter (offen/gesendet), Rabatt-Dialog, Adress-Labels mit voller Adresse und Duplikatsschutz im Adressbuch

- Rechnungen erstellen: Filter Alle/Offene/Gesendete pro Abrechnungsmonat; Versand wird in system_invoice_dispatch protokolliert
- Rabatt pro Kunde jetzt über Icon-Dialog mit Prozentwert und Grund; Grund erscheint auf der Rechnungsposition
- MessageController: stille catch-Blöcke durch Logging ersetzt, offene Pflicht-Tasks werden bei station_completed geloggt
- Auftragserstellung: Abhol- und Lieferadresslisten zeigen die komplette Adresse, Auftraggeber nur den Firmennamen; (2)-Zähler entfernt
- Adressbuch: komplett identische Einträge werden beim Anlegen übersprungen bzw. mit Hinweis abgelehnt
- App: Versionsanzeige liest zur Laufzeit aus dem Build (package_info_plus), pubspec auf 0.9.20+1; Versionspflege dokumentiert (pom.xml fürs Web, pubspec.yaml für die App)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 17:41:21 +02:00
co-authored by Claude Fable 5
parent ef019eecee
commit f4c2fa6ba3
25 changed files with 290 additions and 35 deletions
@@ -353,6 +353,7 @@ addcustomer.title=Neue Adresse anlegen
addcustomer.button.submit=Adresse anlegen
addcustomer.notification.validation=Bitte füllen Sie alle Pflichtfelder aus
addcustomer.notification.success=Kunde erfolgreich angelegt
addcustomer.notification.duplicate=Ein identischer Adressbucheintrag existiert bereits
addcustomer.notification.check=Bitte überprüfen Sie Ihre Eingaben
addcustomer.notification.error=Fehler: {0}
addcustomer.validation.required=Dieses Feld ist erforderlich
@@ -1131,6 +1132,10 @@ admincreateinvoices.notification.notemplate=Kein Rechnungstemplate vorhanden. Bi
admincreateinvoices.notification.error=Fehler beim Erstellen der Rechnung: {0}
admincreateinvoices.button.createselected=Rechnungen erstellen ({0})
admincreateinvoices.field.month=Abrechnungsmonat
admincreateinvoices.filter.label=Anzeigen
admincreateinvoices.filter.all=Alle Rechnungen
admincreateinvoices.filter.open=Nur offene
admincreateinvoices.filter.sent=Nur gesendete
admincreateinvoices.dialog.title=Rechnungen prüfen
admincreateinvoices.dialog.position=Rechnung {0} von {1}
admincreateinvoices.dialog.button.previous=Zurück
@@ -313,6 +313,7 @@ addcustomer.title=Uue aadressi loomine
addcustomer.button.submit=Loo aadress
addcustomer.notification.validation=Palun t\u00e4itke k\u00f5ik kohustuslikud v\u00e4ljad
addcustomer.notification.success=Klient edukalt loodud
addcustomer.notification.duplicate=Identne aadressiraamatu kirje on juba olemas
addcustomer.notification.check=Palun kontrollige oma sisestusi
addcustomer.notification.error=Viga: {0}
addcustomer.validation.required=See v\u00e4li on kohustuslik
@@ -961,6 +962,10 @@ admincreateinvoices.notification.notemplate=Arve mall puudub. Palun salvestage k
admincreateinvoices.notification.error=Viga arve koostamisel: {0}
admincreateinvoices.button.createselected=Koosta arved ({0})
admincreateinvoices.field.month=Arveldusperiood
admincreateinvoices.filter.label=Kuva
admincreateinvoices.filter.all=Kõik arved
admincreateinvoices.filter.open=Ainult avatud
admincreateinvoices.filter.sent=Ainult saadetud
admincreateinvoices.dialog.title=Arvete ülevaatus
admincreateinvoices.dialog.position=Arve {0} / {1}
admincreateinvoices.dialog.button.previous=Tagasi
@@ -353,6 +353,7 @@ addcustomer.title=Create New Address
addcustomer.button.submit=Create Address
addcustomer.notification.validation=Please fill in all required fields
addcustomer.notification.success=Customer created successfully
addcustomer.notification.duplicate=An identical address book entry already exists
addcustomer.notification.check=Please check your input
addcustomer.notification.error=Error: {0}
addcustomer.validation.required=This field is required
@@ -1131,6 +1132,10 @@ admincreateinvoices.notification.notemplate=No invoice template available. Pleas
admincreateinvoices.notification.error=Error creating the invoice: {0}
admincreateinvoices.button.createselected=Create invoices ({0})
admincreateinvoices.field.month=Billing month
admincreateinvoices.filter.label=Show
admincreateinvoices.filter.all=All invoices
admincreateinvoices.filter.open=Only open
admincreateinvoices.filter.sent=Only sent
admincreateinvoices.dialog.title=Review invoices
admincreateinvoices.dialog.position=Invoice {0} of {1}
admincreateinvoices.dialog.button.previous=Back
@@ -352,6 +352,7 @@ addcustomer.title=Crear nueva dirección
addcustomer.button.submit=Crear dirección
addcustomer.notification.validation=Por favor, complete todos los campos obligatorios
addcustomer.notification.success=Cliente creado correctamente
addcustomer.notification.duplicate=Ya existe una entrada idéntica en la libreta de direcciones
addcustomer.notification.check=Por favor, revise sus datos
addcustomer.notification.error=Error: {0}
addcustomer.validation.required=Este campo es obligatorio
@@ -1062,6 +1063,10 @@ admincreateinvoices.notification.notemplate=No hay plantilla de factura. Guarde
admincreateinvoices.notification.error=Error al crear la factura: {0}
admincreateinvoices.button.createselected=Crear facturas ({0})
admincreateinvoices.field.month=Mes de facturación
admincreateinvoices.filter.label=Mostrar
admincreateinvoices.filter.all=Todas las facturas
admincreateinvoices.filter.open=Solo abiertas
admincreateinvoices.filter.sent=Solo enviadas
admincreateinvoices.dialog.title=Revisar facturas
admincreateinvoices.dialog.position=Factura {0} de {1}
admincreateinvoices.dialog.button.previous=Atrás
@@ -352,6 +352,7 @@ addcustomer.title=Cr\u00e9er une nouvelle adresse
addcustomer.button.submit=Cr\u00e9er l'adresse
addcustomer.notification.validation=Veuillez remplir tous les champs obligatoires
addcustomer.notification.success=Client cr\u00e9\u00e9 avec succ\u00e8s
addcustomer.notification.duplicate=Une entr\u00e9e identique existe d\u00e9j\u00e0 dans le carnet d'adresses
addcustomer.notification.check=Veuillez v\u00e9rifier vos saisies
addcustomer.notification.error=Erreur : {0}
addcustomer.validation.required=Ce champ est obligatoire
@@ -1062,6 +1063,10 @@ admincreateinvoices.notification.notemplate=Aucun modèle de facture disponible.
admincreateinvoices.notification.error=Erreur lors de la création de la facture : {0}
admincreateinvoices.button.createselected=Créer les factures ({0})
admincreateinvoices.field.month=Mois de facturation
admincreateinvoices.filter.label=Afficher
admincreateinvoices.filter.all=Toutes les factures
admincreateinvoices.filter.open=Uniquement ouvertes
admincreateinvoices.filter.sent=Uniquement envoyées
admincreateinvoices.dialog.title=Vérifier les factures
admincreateinvoices.dialog.position=Facture {0} sur {1}
admincreateinvoices.dialog.button.previous=Retour
@@ -352,6 +352,7 @@ addcustomer.title=Sukurti naują adresą
addcustomer.button.submit=Sukurti adresą
addcustomer.notification.validation=Prašome užpildyti visus privalomus laukus
addcustomer.notification.success=Klientas sėkmingai sukurtas
addcustomer.notification.duplicate=Identiškas adresų knygos įrašas jau egzistuoja
addcustomer.notification.check=Prašome patikrinti savo įvestį
addcustomer.notification.error=Klaida: {0}
addcustomer.validation.required=Šis laukas yra privalomas
@@ -1064,6 +1065,10 @@ admincreateinvoices.notification.notemplate=Nėra sąskaitos šablono. Pirmiausi
admincreateinvoices.notification.error=Klaida kuriant sąskaitą: {0}
admincreateinvoices.button.createselected=Sukurti sąskaitas ({0})
admincreateinvoices.field.month=Atsiskaitymo mėnuo
admincreateinvoices.filter.label=Rodyti
admincreateinvoices.filter.all=Visos sąskaitos
admincreateinvoices.filter.open=Tik atviros
admincreateinvoices.filter.sent=Tik išsiųstos
admincreateinvoices.dialog.title=Peržiūrėti sąskaitas
admincreateinvoices.dialog.position=Sąskaita {0} iš {1}
admincreateinvoices.dialog.button.previous=Atgal
@@ -352,6 +352,7 @@ addcustomer.title=Izveidot jaunu adresi
addcustomer.button.submit=Izveidot adresi
addcustomer.notification.validation=Lūdzu, aizpildiet visus obligātos laukus
addcustomer.notification.success=Klients veiksmīgi izveidots
addcustomer.notification.duplicate=Identisks adrešu grāmatas ieraksts jau pastāv
addcustomer.notification.check=Lūdzu, pārbaudiet savus ievadītos datus
addcustomer.notification.error=Kļūda: {0}
addcustomer.validation.required=Šis lauks ir obligāts
@@ -1062,6 +1063,10 @@ admincreateinvoices.notification.notemplate=Nav rēķina veidnes. Lūdzu, vispir
admincreateinvoices.notification.error=Kļūda, veidojot rēķinu: {0}
admincreateinvoices.button.createselected=Izveidot rēķinus ({0})
admincreateinvoices.field.month=Norēķinu mēnesis
admincreateinvoices.filter.label=Rādīt
admincreateinvoices.filter.all=Visi rēķini
admincreateinvoices.filter.open=Tikai atvērtie
admincreateinvoices.filter.sent=Tikai nosūtītie
admincreateinvoices.dialog.title=Pārskatīt rēķinus
admincreateinvoices.dialog.position=Rēķins {0} no {1}
admincreateinvoices.dialog.button.previous=Atpakaļ
@@ -352,6 +352,7 @@ addcustomer.title=Dodaj nowy adres
addcustomer.button.submit=Dodaj adres
addcustomer.notification.validation=Prosz\u0119 wype\u0142ni\u0107 wszystkie wymagane pola
addcustomer.notification.success=Klient zosta\u0142 pomy\u015blnie dodany
addcustomer.notification.duplicate=Identyczny wpis w ksi\u0105\u017cce adresowej ju\u017c istnieje
addcustomer.notification.check=Prosz\u0119 sprawdzi\u0107 wprowadzone dane
addcustomer.notification.error=B\u0142\u0105d: {0}
addcustomer.validation.required=To pole jest wymagane
@@ -1062,6 +1063,10 @@ admincreateinvoices.notification.notemplate=Brak szablonu faktury. Najpierw zapi
admincreateinvoices.notification.error=Błąd podczas tworzenia faktury: {0}
admincreateinvoices.button.createselected=Utwórz faktury ({0})
admincreateinvoices.field.month=Miesiąc rozliczeniowy
admincreateinvoices.filter.label=Pokaż
admincreateinvoices.filter.all=Wszystkie faktury
admincreateinvoices.filter.open=Tylko otwarte
admincreateinvoices.filter.sent=Tylko wysłane
admincreateinvoices.dialog.title=Przegląd faktur
admincreateinvoices.dialog.position=Faktura {0} z {1}
admincreateinvoices.dialog.button.previous=Wstecz
@@ -352,6 +352,7 @@ addcustomer.title=Создать новый адрес
addcustomer.button.submit=Создать адрес
addcustomer.notification.validation=Пожалуйста, заполните все обязательные поля
addcustomer.notification.success=Клиент успешно создан
addcustomer.notification.duplicate=Идентичная запись в адресной книге уже существует
addcustomer.notification.check=Пожалуйста, проверьте ваши данные
addcustomer.notification.error=Ошибка: {0}
addcustomer.validation.required=Это поле обязательно для заполнения
@@ -1062,6 +1063,10 @@ admincreateinvoices.notification.notemplate=Шаблон счета отсутс
admincreateinvoices.notification.error=Ошибка при создании счета: {0}
admincreateinvoices.button.createselected=Создать счета ({0})
admincreateinvoices.field.month=Расчетный месяц
admincreateinvoices.filter.label=Показать
admincreateinvoices.filter.all=Все счета
admincreateinvoices.filter.open=Только открытые
admincreateinvoices.filter.sent=Только отправленные
admincreateinvoices.dialog.title=Проверка счетов
admincreateinvoices.dialog.position=Счет {0} из {1}
admincreateinvoices.dialog.button.previous=Назад
@@ -352,6 +352,7 @@ addcustomer.title=Yeni Adres Olu\u015ftur
addcustomer.button.submit=Adres Olu\u015ftur
addcustomer.notification.validation=L\u00fctfen t\u00fcm zorunlu alanlar\u0131 doldurun
addcustomer.notification.success=M\u00fc\u015fteri ba\u015far\u0131yla olu\u015fturuldu
addcustomer.notification.duplicate=Adres defterinde ayn\u0131 kay\u0131t zaten mevcut
addcustomer.notification.check=L\u00fctfen giri\u015flerinizi kontrol edin
addcustomer.notification.error=Hata: {0}
addcustomer.validation.required=Bu alan gereklidir
@@ -1062,6 +1063,10 @@ admincreateinvoices.notification.notemplate=Fatura şablonu yok. Lütfen önce f
admincreateinvoices.notification.error=Fatura oluşturulurken hata: {0}
admincreateinvoices.button.createselected=Fatura oluştur ({0})
admincreateinvoices.field.month=Fatura ayı
admincreateinvoices.filter.label=Göster
admincreateinvoices.filter.all=Tüm faturalar
admincreateinvoices.filter.open=Yalnızca açık
admincreateinvoices.filter.sent=Yalnızca gönderilen
admincreateinvoices.dialog.title=Faturaları incele
admincreateinvoices.dialog.position=Fatura {0} / {1}
admincreateinvoices.dialog.button.previous=Geri