diff --git a/datacenterlight/utils.py b/datacenterlight/utils.py index af49d1ba..4ebdc4ab 100644 --- a/datacenterlight/utils.py +++ b/datacenterlight/utils.py @@ -226,7 +226,7 @@ def create_tax_id(stripe_customer_id, billing_address_id, type, logger.debug("Multiple BillingAddress exist for %s" % billing_address_id) billing_address = BillingAddress.objects.filter(billing_address_id).order_by('-id').first() stripe_utils = StripeUtils() - tax_id_response = stripe_utils.create_tax_id_for_user( + tax_id_response = stripe_utils.get_or_create_tax_id_for_user( stripe_customer_id, vat_number=billing_address.vat_number, type=type diff --git a/utils/stripe_utils.py b/utils/stripe_utils.py index 72f04352..20b5c19a 100644 --- a/utils/stripe_utils.py +++ b/utils/stripe_utils.py @@ -436,14 +436,19 @@ class StripeUtils(object): subscription.save() @handleStripeError - def create_tax_id_for_user(self, stripe_customer_id, vat_number, type="eu_vat"): - tax_id_obj = stripe.Customer.retrieve( - stripe_customer_id,type=type, value=vat_number + def get_or_create_tax_id_for_user(self, stripe_customer_id, vat_number, type="eu_vat"): + tax_ids_list = stripe.Customer.list_tax_ids( + stripe_customer_id, + limit=100, + ) + for tax_id_obj in tax_ids_list.data: + if tax_id_obj.value == vat_number: + logger.debug("tax id obj exists already") + return tax_id_obj + logger.debug("tax id obj does not exist. Creating a new one") + tax_id_obj = stripe.Customer.create_tax_id( + stripe_customer_id, + type=type, + value=vat_number, ) - if tax_id_obj["response_object"]["error"]: - tax_id_obj = stripe.Customer.create_tax_id( - stripe_customer_id, - type=type, - value=vat_number, - ) return tax_id_obj