VAT number validation in settings
This commit is contained in:
parent
7d9ab322c9
commit
99e70d95c4
3 changed files with 54 additions and 13 deletions
|
@ -131,7 +131,22 @@ def check_otp(name, realm, token):
|
||||||
return response.status_code
|
return response.status_code
|
||||||
|
|
||||||
|
|
||||||
def validate_vat_number(stripe_customer_id, billing_address_id):
|
def validate_vat_number(stripe_customer_id, billing_address_id,
|
||||||
|
is_user_ba=False):
|
||||||
|
if is_user_ba:
|
||||||
|
try:
|
||||||
|
billing_address = UserBillingAddress.objects.get(
|
||||||
|
id=billing_address_id)
|
||||||
|
except UserBillingAddress.DoesNotExist as dne:
|
||||||
|
billing_address = None
|
||||||
|
logger.debug(
|
||||||
|
"UserBillingAddress does not exist for %s" % billing_address_id)
|
||||||
|
except UserBillingAddress.MultipleObjectsReturned as mor:
|
||||||
|
logger.debug(
|
||||||
|
"Multiple UserBillingAddress exist for %s" % billing_address_id)
|
||||||
|
billing_address = UserBillingAddress.objects.filter(
|
||||||
|
id=billing_address_id).order_by('-id').first()
|
||||||
|
else:
|
||||||
try:
|
try:
|
||||||
billing_address = BillingAddress.objects.get(id=billing_address_id)
|
billing_address = BillingAddress.objects.get(id=billing_address_id)
|
||||||
except BillingAddress.DoesNotExist as dne:
|
except BillingAddress.DoesNotExist as dne:
|
||||||
|
@ -139,7 +154,7 @@ def validate_vat_number(stripe_customer_id, billing_address_id):
|
||||||
logger.debug("BillingAddress does not exist for %s" % billing_address_id)
|
logger.debug("BillingAddress does not exist for %s" % billing_address_id)
|
||||||
except BillingAddress.MultipleObjectsReturned as mor:
|
except BillingAddress.MultipleObjectsReturned as mor:
|
||||||
logger.debug("Multiple BillingAddress exist for %s" % billing_address_id)
|
logger.debug("Multiple BillingAddress exist for %s" % billing_address_id)
|
||||||
billing_address = BillingAddress.objects.filter(billing_address_id).order_by('-id').first()
|
billing_address = BillingAddress.objects.filter(id=billing_address_id).order_by('-id').first()
|
||||||
if billing_address is not None:
|
if billing_address is not None:
|
||||||
if billing_address.vat_number_validated_on:
|
if billing_address.vat_number_validated_on:
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -26,6 +26,13 @@
|
||||||
{% for field in form %}
|
{% for field in form %}
|
||||||
{% bootstrap_field field show_label=False type='fields' bound_css_class='' %}
|
{% bootstrap_field field show_label=False type='fields' bound_css_class='' %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% if form.instance.vat_number %}
|
||||||
|
{% if form.instance.vat_validation_status == "verified" %}
|
||||||
|
<span class="fa fa-fw fa-check-circle" aria-hidden="true" title='{% trans "Your VAT number has been verified" %}'></span>
|
||||||
|
{% else %}
|
||||||
|
<span class="fa fa-fw fa-info-circle" aria-hidden="true" title='{% trans "Your VAT number is under validation. VAT will be adjusted, once the validation is complete." %}'></span>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
<div class="form-group text-right">
|
<div class="form-group text-right">
|
||||||
<button type="submit" class="btn btn-vm-contact btn-wide" name="billing-form">{% trans "UPDATE" %}</button>
|
<button type="submit" class="btn btn-vm-contact btn-wide" name="billing-form">{% trans "UPDATE" %}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -37,7 +37,9 @@ from stored_messages.settings import stored_messages_settings
|
||||||
|
|
||||||
from datacenterlight.cms_models import DCLCalculatorPluginModel
|
from datacenterlight.cms_models import DCLCalculatorPluginModel
|
||||||
from datacenterlight.models import VMTemplate, VMPricing
|
from datacenterlight.models import VMTemplate, VMPricing
|
||||||
from datacenterlight.utils import create_vm, get_cms_integration, check_otp
|
from datacenterlight.utils import (
|
||||||
|
create_vm, get_cms_integration, check_otp, validate_vat_number
|
||||||
|
)
|
||||||
from hosting.models import UserCardDetail
|
from hosting.models import UserCardDetail
|
||||||
from membership.models import CustomUser, StripeCustomer
|
from membership.models import CustomUser, StripeCustomer
|
||||||
from opennebula_api.models import OpenNebulaManager
|
from opennebula_api.models import OpenNebulaManager
|
||||||
|
@ -626,7 +628,24 @@ class SettingsView(LoginRequiredMixin, FormView):
|
||||||
billing_address_user_form = UserBillingAddressForm(
|
billing_address_user_form = UserBillingAddressForm(
|
||||||
instance=self.request.user.billing_addresses.first(),
|
instance=self.request.user.billing_addresses.first(),
|
||||||
data=billing_address_data)
|
data=billing_address_data)
|
||||||
billing_address_user_form.save()
|
billing_address = billing_address_user_form.save()
|
||||||
|
vat_number = billing_address_user_form.cleaned_data.get(
|
||||||
|
'vat_number').strip()
|
||||||
|
if vat_number:
|
||||||
|
validate_result = validate_vat_number(
|
||||||
|
stripe_customer_id=request.user.stripecustomer.stripe_id,
|
||||||
|
billing_address_id=billing_address.id,
|
||||||
|
is_user_ba=True
|
||||||
|
)
|
||||||
|
if 'error' in validate_result and validate_result['error']:
|
||||||
|
messages.add_message(
|
||||||
|
request, messages.ERROR, validate_result["error"],
|
||||||
|
extra_tags='vat_error'
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
msg = _("Billing address updated successfully")
|
||||||
|
messages.add_message(request, messages.SUCCESS, msg)
|
||||||
|
else:
|
||||||
msg = _("Billing address updated successfully")
|
msg = _("Billing address updated successfully")
|
||||||
messages.add_message(request, messages.SUCCESS, msg)
|
messages.add_message(request, messages.SUCCESS, msg)
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in a new issue