From dc0b381aba6062ba17709a535d3cc1bcfe924bed Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Fri, 31 Oct 2025 19:56:58 +0100 Subject: [PATCH] =?UTF-8?q?bugfix:=20it=20was=20not=20possible=20to=20crea?= =?UTF-8?q?te=20documents=20with=20customers=20not=20havin=20a=20tax=20ID.?= =?UTF-8?q?=20But=20the=20customer=20tax=20id=20should=20not=20be=20requir?= =?UTF-8?q?ed!=20=E2=80=A6altered=20some=20code=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stephan Richter --- .../umbrella/core/model/Customer.java | 20 +++++------ .../src/Components/ContactSelector.svelte | 36 ++++++++++--------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Customer.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Customer.java index d921c7b..b2b1e2b 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Customer.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Customer.java @@ -1,16 +1,14 @@ /* © SRSoftware 2025 */ package de.srsoftware.umbrella.core.model; +import static de.srsoftware.tools.Optionals.emptyIfNull; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.Field.*; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException; import de.srsoftware.tools.Mappable; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; -import java.util.HashSet; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; import org.json.JSONObject; public final class Customer implements Mappable { @@ -73,7 +71,7 @@ public final class Customer implements Mappable { if (!json.has(ID) || !(json.get(ID) instanceof String id)) throw missingFieldException(ID); if (!json.has(NAME) || !(json.get(NAME) instanceof String name)) throw missingFieldException(NAME); if (!json.has(EMAIL) || !(json.get(EMAIL) instanceof String email)) throw missingFieldException(EMAIL); - if (!json.has(TAX_ID) || !(json.get(TAX_ID) instanceof String taxId)) throw missingFieldException(TAX_ID); + var taxId = json.has(TAX_ID) && json.get(TAX_ID) instanceof String tid ? tid : null; var lang = json.has(LANGUAGE) && json.get(LANGUAGE) instanceof String l ? l : FALLBACK_LANG; return new Customer(id,name,email,taxId,lang); } @@ -104,11 +102,11 @@ public final class Customer implements Mappable { @Override public Map toMap() { - return Map.of( - "id", id, - "name", name, - "email", email, - "tax_id", taxNumber - ); + var map = new HashMap(); + map.put("id", id); + map.put("name", name); + map.put("email", email); + map.put("tax_id", emptyIfNull(taxNumber)); + return map; } } diff --git a/frontend/src/Components/ContactSelector.svelte b/frontend/src/Components/ContactSelector.svelte index 598a858..b71d82e 100644 --- a/frontend/src/Components/ContactSelector.svelte +++ b/frontend/src/Components/ContactSelector.svelte @@ -26,23 +26,25 @@ contact.FN = fn(contact.vcard); contact.ORG = org(contact.vcard); const extras = contact.vcard.match(/^X-.*:.+/gm); - for (let ex of extras){ - ex = extra(ex); - switch (ex.name){ - case 'CUSTOMER-NUMBER': - contact.customer_number = ex.value; - break; - case 'TAX-NUMBER': - contact.tax_id = ex.value; - break; - case 'BANK-ACCOUNT': - contact.bank_account = ex.value; - break; - case 'COURT': - contact.local_court = ex.value; - break; - default: - console.log(ex); + if (extras) { + for (let ex of extras){ + ex = extra(ex); + switch (ex.name){ + case 'CUSTOMER-NUMBER': + contact.customer_number = ex.value; + break; + case 'TAX-NUMBER': + contact.tax_id = ex.value; + break; + case 'BANK-ACCOUNT': + contact.bank_account = ex.value; + break; + case 'COURT': + contact.local_court = ex.value; + break; + default: + console.log(ex); + } } } delete contact.vcard;