();for(var r:rules){var f=lookup.get(r.field());String v=wipe(row.get(f.key()));
diff --git a/backend/src/main/java/de/stadtbote/votian/CustomerInvoiceAddress.java b/backend/src/main/java/de/stadtbote/votian/CustomerInvoiceAddress.java
index e8e706c..fa0492d 100644
--- a/backend/src/main/java/de/stadtbote/votian/CustomerInvoiceAddress.java
+++ b/backend/src/main/java/de/stadtbote/votian/CustomerInvoiceAddress.java
@@ -3,7 +3,7 @@ import de.stadtbote.votian.database.DatabaseService;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;
import java.util.*;
-import static de.stadtbote.votian.AdminSupport.*;
+
import static de.stadtbote.votian.LegacyMapping.*;
import static de.stadtbote.votian.OrderEntryService.fields;
/** Read-only root invoice address comparison from customer_special.php. */
diff --git a/backend/src/main/java/de/stadtbote/votian/CustomerOrderDocument.java b/backend/src/main/java/de/stadtbote/votian/CustomerOrderDocument.java
index 46b007b..8fcb0d6 100644
--- a/backend/src/main/java/de/stadtbote/votian/CustomerOrderDocument.java
+++ b/backend/src/main/java/de/stadtbote/votian/CustomerOrderDocument.java
@@ -13,7 +13,7 @@ final class CustomerOrderDocument {
for(Object warning:(List>)evidence.getOrDefault("warnings",List.of()))out.append("").append(escape(warning)).append("
");out.append("Leistungen
| Kostenstelle | Leistung | Betrag ").append(escape(evidence.get("serviceBasis"))).append(" |
");for(var s:rows(evidence,"services"))out.append("| ").append(escape(s.get("center"))).append(" | ").append(escape(s.get("name"))).append(" | ").append(escape(pending?"Preis in Prüfung":money(decimal(s,"price")))).append(" |
");out.append("
Leistungssumme: ").append(escape(pending?"Preis in Prüfung":money(decimal(evidence,"serviceTotal")))).append("
");
if(evidence.get("toll")!=null)out.append("Maut: ").append(escape(money(decimal(evidence,"toll")))).append(" · Gesamt einschließlich Maut: ").append(escape(pending?"Preis in Prüfung":money(decimal(evidence,"totalWithToll")))).append("
");
var stations=rows(evidence,"stations");var stops=rows(detail,"stops");for(int i=0;iStation").append(Boolean.TRUE.equals(evidence.get("stationNumbers"))?" "+id(s,"sequence"):"").append("").append(row("Firma",text(s,"company"))).append(row("Zusatz",text(s,"additional"))).append(row("Person",text(s,"person"))).append(row("Adresse",text(s,"street")+" "+text(s,"houseNumber")+", "+text(s,"zip")+" "+text(s,"city")+" "+text(s,"country"))).append(row("Telefon",text(s,"phone"))).append(row("Kommissionsnummer",text(s,"commission"))).append(row("Bemerkung",text(s,"remark"))).append(row("Erledigung",time(s,"finished"))).append(row("Quittungsgeber",text(s,"recipient")));
- if(i| Unterschrift | .append(escape(text(e,"signature"))).append("\") | ");for(Object w:(List>)e.get("warnings"))out.append(row("Hinweis",Objects.toString(w,"")));}out.append("
");if(i a)articleTable(out,(Map)a);}
+ if(iUnterschrift | .append(escape(text(e,"signature"))).append("\") | ");for(Object w:(List>)e.get("warnings"))out.append(row("Hinweis",Objects.toString(w,"")));}out.append("");if(i a)articleTable(out,TypedValues.map(a, String.class, Object.class));}
if(!text(detail,"invoiceText").isBlank())out.append("Rechnungstext
").append(escape(text(detail,"invoiceText")).replace("\n","
")).append("
");return out.append("