summaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@vespa.ai>2023-10-27 12:35:13 +0200
committerBjørn Christian Seime <bjorncs@vespa.ai>2023-10-27 12:35:13 +0200
commit3e9a01e465e65e2130c6b4c4b8b7f9e490e777f1 (patch)
tree6aac818f0bc66f933274b1c646d00df4e61f87db /controller-server/src/main/java
parent1dd0634447a9ee626e3cad02762ab628d4dd1d6d (diff)
Split `TaxId` into type and code
Diffstat (limited to 'controller-server/src/main/java')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java18
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java23
2 files changed, 34 insertions, 7 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java
index eae8f86f289..85b7acd603a 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java
@@ -96,6 +96,8 @@ public class TenantSerializer {
private static final String accountField = "account";
private static final String templateVersionField = "templateVersion";
private static final String taxIdField = "taxId";
+ private static final String taxIdTypeField = "type";
+ private static final String taxIdCodeField = "code";
private static final String purchaseOrderField = "purchaseOrder";
private static final String invoiceEmailField = "invoiceEmail";
@@ -287,7 +289,17 @@ public class TenantSerializer {
}
private TenantBilling tenantInfoBillingContactFromSlime(Inspector billingObject) {
- var taxId = new TaxId(billingObject.field(taxIdField).asString());
+ var taxIdInspector = billingObject.field(taxIdField);
+ var taxId = switch (taxIdInspector.type()) {
+ case STRING -> TaxId.legacy(taxIdInspector.asString());
+ case OBJECT -> {
+ var taxIdType = taxIdInspector.field(taxIdTypeField).asString();
+ var taxIdCode = taxIdInspector.field(taxIdCodeField).asString();
+ yield new TaxId(new TaxId.Type(taxIdType), new TaxId.Code(taxIdCode));
+ }
+ case NIX -> TaxId.empty();
+ default -> throw new IllegalStateException(taxIdInspector.type().name());
+ };
var purchaseOrder = new PurchaseOrder(billingObject.field(purchaseOrderField).asString());
var invoiceEmail = new Email(billingObject.field(invoiceEmailField).asString(), false);
@@ -361,7 +373,9 @@ public class TenantSerializer {
billingCursor.setString("email", billingContact.contact().email().getEmailAddress());
billingCursor.setBool("emailVerified", billingContact.contact().email().isVerified());
billingCursor.setString("phone", billingContact.contact().phone());
- billingCursor.setString(taxIdField, billingContact.getTaxId().value());
+ var taxIdCursor = billingCursor.setObject(taxIdField);
+ taxIdCursor.setString(taxIdTypeField, billingContact.getTaxId().type().value());
+ taxIdCursor.setString(taxIdCodeField, billingContact.getTaxId().code().value());
billingCursor.setString(purchaseOrderField, billingContact.getPurchaseOrder().value());
billingCursor.setString(invoiceEmailField, billingContact.getInvoiceEmail().getEmailAddress());
toSlime(billingContact.address(), billingCursor);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index 5548928b9d0..e4da2e4e92b 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -696,7 +696,9 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
contact.setString("email", billingContact.contact().email().getEmailAddress());
contact.setBool("emailVerified", billingContact.contact().email().isVerified());
contact.setString("phone", billingContact.contact().phone());
- root.setString("taxId", billingContact.getTaxId().value());
+ var taxIdCursor = root.setObject("taxId");
+ taxIdCursor.setString("type", billingContact.getTaxId().type().value());
+ taxIdCursor.setString("code", billingContact.getTaxId().code().value());
root.setString("purchaseOrder", billingContact.getPurchaseOrder().value());
root.setString("invoiceEmail", billingContact.getInvoiceEmail().getEmailAddress());
@@ -714,10 +716,14 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
var mergedContact = updateBillingContact(inspector.field("contact"), cloudTenant.name(), contact);
var mergedAddress = updateTenantInfoAddress(inspector.field("address"), billing.address());
- var mergedTaxId = optional("taxId", inspector).map(TaxId::new).orElse(billing.getTaxId());
+ var mergedTaxId = updateTaxId(inspector.field("taxId"), billing.getTaxId());
var mergedPurchaseOrder = optional("purchaseOrder", inspector).map(PurchaseOrder::new).orElse(billing.getPurchaseOrder());
var mergedInvoiceEmail = optional("invoiceEmail", inspector).map(mail -> new Email(mail, false)).orElse(billing.getInvoiceEmail());
+ if (!inspector.field("taxId").valid() && inspector.field("address").valid()) {
+ throw new IllegalArgumentException("Tax ID information is mandatory for setting up billing");
+ }
+
var mergedBilling = info.billingContact()
.withContact(mergedContact)
.withAddress(mergedAddress)
@@ -802,7 +808,9 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
billingCursor.setString("email", billingContact.contact().email().getEmailAddress());
billingCursor.setBool("emailVerified", billingContact.contact().email().isVerified());
billingCursor.setString("phone", billingContact.contact().phone());
- billingCursor.setString("taxId", billingContact.getTaxId().value());
+ var taxIdCursor = billingCursor.setObject("taxId");
+ taxIdCursor.setString("type", billingContact.getTaxId().type().value());
+ taxIdCursor.setString("code", billingContact.getTaxId().code().value());
billingCursor.setString("purchaseOrder", billingContact.getPurchaseOrder().value());
billingCursor.setString("invoiceEmail", billingContact.getInvoiceEmail().getEmailAddress());
toSlime(billingContact.address(), billingCursor);
@@ -914,6 +922,12 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
throw new IllegalArgumentException("All address fields must be set");
}
+ private TaxId updateTaxId(Inspector insp, TaxId old) {
+ if (!insp.valid()) return old;
+ return new TaxId(getString(insp.field("type"), old.type().value()),
+ getString(insp.field("code"), old.code().value()));
+ }
+
private TenantContact updateBillingContact(Inspector insp, TenantName tenantName, TenantContact oldContact) {
if (!insp.valid()) return oldContact;
@@ -934,13 +948,12 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
private TenantBilling updateTenantInfoBillingContact(Inspector insp, TenantName tenantName, TenantBilling oldContact) {
if (!insp.valid()) return oldContact;
- var taxId = optional("taxId", insp).map(TaxId::new).orElse(oldContact.getTaxId());
var purchaseOrder = optional("purchaseOrder", insp).map(PurchaseOrder::new).orElse(oldContact.getPurchaseOrder());
var invoiceEmail = optional("invoiceEmail", insp).map(mail -> new Email(mail, false)).orElse(oldContact.getInvoiceEmail());
return TenantBilling.empty()
.withContact(updateBillingContact(insp, tenantName, oldContact.contact()))
.withAddress(updateTenantInfoAddress(insp.field("address"), oldContact.address()))
- .withTaxId(taxId)
+ .withTaxId(updateTaxId(insp.field("taxId"), oldContact.getTaxId()))
.withPurchaseOrder(purchaseOrder)
.withInvoiceEmail(invoiceEmail);
}