From 490ceec47d3db8198909e24ee1f9e6f1c376670d Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 21:34:17 +0530 Subject: [PATCH 001/409] Add france metropolitan vat rate --- vat_rates.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/vat_rates.csv b/vat_rates.csv index 74422f48..38655f38 100644 --- a/vat_rates.csv +++ b/vat_rates.csv @@ -319,3 +319,4 @@ IM",GBP,0.1,standard, 2019-12-17,,AD,EUR,0.045,standard,Andorra standard VAT (added manually) 2019-12-17,,TK,EUR,0.18,standard,Turkey standard VAT (added manually) 2019-12-17,,IS,EUR,0.24,standard,Iceland standard VAT (added manually) +2019-12-17,,FX,EUR,0.20,standard,France metropolitan standard VAT (added manually) From 33120d14f3391bf18d8979c104a0ea16031f23ce Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 21:35:02 +0530 Subject: [PATCH 002/409] Modify billing address form and signup forms to include vat_number --- utils/forms.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/utils/forms.py b/utils/forms.py index fdc67d26..b7c8c6b1 100644 --- a/utils/forms.py +++ b/utils/forms.py @@ -120,17 +120,19 @@ class EditCreditCardForm(forms.Form): class BillingAddressForm(forms.ModelForm): token = forms.CharField(widget=forms.HiddenInput(), required=False) card = forms.CharField(widget=forms.HiddenInput(), required=False) + vat_number = forms.CharField(max_length=100, default="") class Meta: model = BillingAddress fields = ['cardholder_name', 'street_address', - 'city', 'postal_code', 'country'] + 'city', 'postal_code', 'country', 'vat_number'] labels = { 'cardholder_name': _('Cardholder Name'), 'street_address': _('Street Address'), 'city': _('City'), 'postal_code': _('Postal Code'), 'Country': _('Country'), + 'VAT Number': _('VAT Number') } @@ -142,7 +144,7 @@ class BillingAddressFormSignup(BillingAddressForm): class Meta: model = BillingAddress fields = ['name', 'email', 'cardholder_name', 'street_address', - 'city', 'postal_code', 'country'] + 'city', 'postal_code', 'country', 'vat_number'] labels = { 'name': 'Name', 'email': _('Email'), @@ -151,6 +153,7 @@ class BillingAddressFormSignup(BillingAddressForm): 'city': _('City'), 'postal_code': _('Postal Code'), 'Country': _('Country'), + 'vat_number': _('VAT Number') } def clean_email(self): From e11882685fd2760809151da06d13e582fd8a77f6 Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 22:07:57 +0530 Subject: [PATCH 003/409] Add vat_number field to CustomUser --- membership/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/membership/models.py b/membership/models.py index df5a5326..28b5951d 100644 --- a/membership/models.py +++ b/membership/models.py @@ -68,6 +68,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): site = models.ForeignKey(Site, default=1) name = models.CharField(max_length=50) email = models.EmailField(unique=True) + vat_number = models.CharField(max_length=100, default="") validated = models.IntegerField(choices=VALIDATED_CHOICES, default=0) # By default, we initialize the validation_slug with appropriate value From 3efd6087e25e7a729647c25c3c557980baafa126 Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 22:08:55 +0530 Subject: [PATCH 004/409] Add vat_number migration file --- .../migrations/0011_customuser_vat_number.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 membership/migrations/0011_customuser_vat_number.py diff --git a/membership/migrations/0011_customuser_vat_number.py b/membership/migrations/0011_customuser_vat_number.py new file mode 100644 index 00000000..f814d84f --- /dev/null +++ b/membership/migrations/0011_customuser_vat_number.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2019-12-17 16:37 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('membership', '0010_customuser_import_stripe_bill_remark'), + ] + + operations = [ + migrations.AddField( + model_name='customuser', + name='vat_number', + field=models.CharField(default='', max_length=100), + ), + ] From cdaf498487c6978e1a7e2a0280248101e3ba8c96 Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 22:09:34 +0530 Subject: [PATCH 005/409] Remove default for CharField (introduced unwantedly) --- utils/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/forms.py b/utils/forms.py index b7c8c6b1..9855e367 100644 --- a/utils/forms.py +++ b/utils/forms.py @@ -120,7 +120,7 @@ class EditCreditCardForm(forms.Form): class BillingAddressForm(forms.ModelForm): token = forms.CharField(widget=forms.HiddenInput(), required=False) card = forms.CharField(widget=forms.HiddenInput(), required=False) - vat_number = forms.CharField(max_length=100, default="") + vat_number = forms.CharField(max_length=100) class Meta: model = BillingAddress From 0f3acf5db435ec0b2dc4d9ea5fa096185db5dfe0 Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 22:51:54 +0530 Subject: [PATCH 006/409] Change order_detail and invoice_detail templates to show VAT number --- datacenterlight/templates/datacenterlight/order_detail.html | 4 ++++ hosting/templates/hosting/invoice_detail.html | 3 +++ hosting/templates/hosting/order_detail.html | 3 +++ 3 files changed, 10 insertions(+) diff --git a/datacenterlight/templates/datacenterlight/order_detail.html b/datacenterlight/templates/datacenterlight/order_detail.html index bd2edcb2..87ff3bd3 100644 --- a/datacenterlight/templates/datacenterlight/order_detail.html +++ b/datacenterlight/templates/datacenterlight/order_detail.html @@ -32,7 +32,11 @@ {{billing_address.cardholder_name}}
{{billing_address.street_address}}, {{billing_address.postal_code}}
{{billing_address.city}}, {{billing_address.country}} + {% if request.user.vat_number %} +
{% trans "VAT Number" %} {{request.user.vat_number}} + {% endif %} {% endwith %} +

diff --git a/hosting/templates/hosting/invoice_detail.html b/hosting/templates/hosting/invoice_detail.html index 67fa06e4..3463e505 100644 --- a/hosting/templates/hosting/invoice_detail.html +++ b/hosting/templates/hosting/invoice_detail.html @@ -70,6 +70,9 @@ {{invoice.order.billing_address.postal_code}}
{{invoice.order.billing_address.city}}, {{invoice.order.billing_address.country}} + {% if invoice.customer.user.vat_number %} +
{% trans "VAT Number" %} {{invoice.customer.user.vat_number}} + {% endif %} {% endif %}

diff --git a/hosting/templates/hosting/order_detail.html b/hosting/templates/hosting/order_detail.html index b725a645..0ce72fa3 100644 --- a/hosting/templates/hosting/order_detail.html +++ b/hosting/templates/hosting/order_detail.html @@ -67,6 +67,9 @@ {{billing_address.cardholder_name}}
{{billing_address.street_address}}, {{billing_address.postal_code}}
{{billing_address.city}}, {{billing_address.country}} + {% if user.vat_number %} +
{% trans "VAT Number" %} {{user.vat_number}} + {% endif %} {% endwith %} {% endif %}

From 5e97d70a5e6d6403304e0599ca8917fa6bad8750 Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 22:52:22 +0530 Subject: [PATCH 007/409] Save VAT number --- datacenterlight/views.py | 5 +++++ hosting/views.py | 3 +++ 2 files changed, 8 insertions(+) diff --git a/datacenterlight/views.py b/datacenterlight/views.py index 8ed0b794..d93fcc2d 100644 --- a/datacenterlight/views.py +++ b/datacenterlight/views.py @@ -942,6 +942,11 @@ class OrderConfirmationView(DetailView, FormView): 'user': custom_user.id }) + # Customer is created, we save his VAT Number + custom_user.vat_number = request.session.get( + 'billing_address_data').get("vat_number") + custom_user.save() + if 'generic_payment_type' in request.session: stripe_cus = StripeCustomer.objects.filter( stripe_id=stripe_api_cus_id diff --git a/hosting/views.py b/hosting/views.py index 21ede03e..b81c5ea3 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -616,6 +616,9 @@ class SettingsView(LoginRequiredMixin, FormView): instance=self.request.user.billing_addresses.first(), data=billing_address_data) billing_address_user_form.save() + self.request.user.vat_number = billing_address_data.get( + "vat_number") + self.request.user.save() msg = _("Billing address updated successfully") messages.add_message(request, messages.SUCCESS, msg) else: From 568d8744768dd9f3e7989b04c1c4f43750801e57 Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 23:32:49 +0530 Subject: [PATCH 008/409] Add initial value for the vat_number field in the settings --- hosting/views.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hosting/views.py b/hosting/views.py index b81c5ea3..c2a6cb0a 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -538,9 +538,12 @@ class SettingsView(LoginRequiredMixin, FormView): Check if the user already saved contact details. If so, then show the form populated with those details, to let user change them. """ - return form_class( + + bill_form = form_class( instance=self.request.user.billing_addresses.first(), **self.get_form_kwargs()) + bill_form.fields['vat_number'].initial = self.request.user.vat_number + return bill_form def get_context_data(self, **kwargs): context = super(SettingsView, self).get_context_data(**kwargs) From 6ea486b5276e14a5d4c166a0e1c1fda3319d2394 Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 23:48:05 +0530 Subject: [PATCH 009/409] Initialize vat number in payment forms --- datacenterlight/views.py | 3 +++ hosting/views.py | 1 + 2 files changed, 4 insertions(+) diff --git a/datacenterlight/views.py b/datacenterlight/views.py index d93fcc2d..76abd9b3 100644 --- a/datacenterlight/views.py +++ b/datacenterlight/views.py @@ -254,6 +254,9 @@ class PaymentOrderView(FormView): billing_address_form = BillingAddressForm( instance=self.request.user.billing_addresses.first() ) + billing_address_form.fields['vat_number'].initial = ( + self.request.user.vat_number + ) user = self.request.user if hasattr(user, 'stripecustomer'): stripe_customer = user.stripecustomer diff --git a/hosting/views.py b/hosting/views.py index c2a6cb0a..8acd0d28 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -694,6 +694,7 @@ class PaymentVMView(LoginRequiredMixin, FormView): 'city': current_billing_address.city, 'postal_code': current_billing_address.postal_code, 'country': current_billing_address.country, + 'vat_number': self.request.user.vat_number } }) return form_kwargs From 24edf05e7ac8d8c51e5d3313b4bd0bab92be842a Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 17 Dec 2019 23:57:15 +0530 Subject: [PATCH 010/409] Save vat_number after payment is submitted --- datacenterlight/views.py | 3 +++ hosting/views.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/datacenterlight/views.py b/datacenterlight/views.py index 76abd9b3..51466d93 100644 --- a/datacenterlight/views.py +++ b/datacenterlight/views.py @@ -491,6 +491,9 @@ class PaymentOrderView(FormView): customer = StripeCustomer.get_or_create( email=this_user.get('email'), token=token ) + request.user.vat_number = address_form.cleaned_data.get( + "vat_number") + request.user.save() else: user_email = address_form.cleaned_data.get('email') user_name = address_form.cleaned_data.get('name') diff --git a/hosting/views.py b/hosting/views.py index 8acd0d28..0c7077e5 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -779,6 +779,8 @@ class PaymentVMView(LoginRequiredMixin, FormView): reverse('hosting:payment') + '#payment_error') request.session['token'] = token request.session['billing_address_data'] = billing_address_data + owner.vat_number = billing_address_data.get("vat_number") + owner.save() self.request.session['order_confirm_url'] = "{url}?{query_params}".format( url=reverse('hosting:order-confirmation'), query_params='page=payment') From e46729ee04b3a6ff1d2a0d76220bc9d3d5602e94 Mon Sep 17 00:00:00 2001 From: PCoder Date: Wed, 18 Dec 2019 22:40:33 +0530 Subject: [PATCH 011/409] Add name validators to all signup forms --- digitalglarus/forms.py | 4 +++- hosting/forms.py | 11 ++++++++++- utils/forms.py | 12 +++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/digitalglarus/forms.py b/digitalglarus/forms.py index a0e685f8..d50b9cc1 100644 --- a/digitalglarus/forms.py +++ b/digitalglarus/forms.py @@ -8,6 +8,7 @@ from utils.forms import LoginFormMixin, SignupFormMixin, BillingAddressForm from .models import MembershipType, MembershipOrder from .models import Booking, BookingOrder +from membership.models import validate_name class LoginForm(LoginFormMixin): @@ -19,7 +20,8 @@ class SignupForm(SignupFormMixin): confirm_password = forms.CharField(widget=forms.PasswordInput()) password = forms.CharField(widget=forms.PasswordInput()) name = forms.CharField(label='name', - widget=forms.TextInput(attrs={'placeholder': 'Full name'})) + widget=forms.TextInput(attrs={'placeholder': 'Full name'}), + validators=[validate_name]) class MembershipBillingForm(BillingAddressForm): diff --git a/hosting/forms.py b/hosting/forms.py index 947cee44..757fe811 100644 --- a/hosting/forms.py +++ b/hosting/forms.py @@ -6,9 +6,10 @@ import tempfile from django import forms from django.conf import settings from django.contrib.auth import authenticate +from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ -from membership.models import CustomUser +from membership.models import CustomUser, validate_name from .models import UserHostingKey, GenericProduct logger = logging.getLogger(__name__) @@ -164,6 +165,14 @@ class HostingUserSignupForm(forms.ModelForm): raise forms.ValidationError("Passwords don't match") return confirm_password + def clean_name(self): + name = self.cleaned_data.get('name') + try: + validate_name(name) + except ValidationError as ve: + raise forms.ValidationError(_("Improper Name")) + return name + class UserHostingKeyForm(forms.ModelForm): private_key = forms.CharField(widget=forms.HiddenInput(), required=False) diff --git a/utils/forms.py b/utils/forms.py index fdc67d26..f4588654 100644 --- a/utils/forms.py +++ b/utils/forms.py @@ -3,8 +3,9 @@ from django.contrib.auth import authenticate from django.core.mail import EmailMultiAlternatives from django.template.loader import render_to_string from django.utils.translation import ugettext_lazy as _ +from django.core.exceptions import ValidationError -from membership.models import CustomUser +from membership.models import CustomUser, validate_name from .models import ContactMessage, BillingAddress, UserBillingAddress @@ -30,6 +31,15 @@ class SignupFormMixin(forms.ModelForm): raise forms.ValidationError("Passwords don't match") return confirm_password + def clean_name(self): + name = self.cleaned_data.get('name') + try: + validate_name(name) + except ValidationError as ve: + raise forms.ValidationError(_("Improper Name")) + return name + + class LoginFormMixin(forms.Form): email = forms.CharField(widget=forms.EmailInput()) From ddd90e650b253208629c54101ae301be706cc28d Mon Sep 17 00:00:00 2001 From: PCoder Date: Wed, 18 Dec 2019 22:54:10 +0530 Subject: [PATCH 012/409] Add clean_name method for BillingAddressFormSignup --- utils/forms.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/utils/forms.py b/utils/forms.py index f4588654..1559b325 100644 --- a/utils/forms.py +++ b/utils/forms.py @@ -175,6 +175,14 @@ class BillingAddressFormSignup(BillingAddressForm): except CustomUser.DoesNotExist: return email + def clean_name(self): + name = self.cleaned_data.get('name') + try: + validate_name(name) + except ValidationError as ve: + raise forms.ValidationError(_("Improper Name")) + return name + class UserBillingAddressForm(forms.ModelForm): user = forms.ModelChoiceField(queryset=CustomUser.objects.all(), From ed22a2261e4a2ed9cad2e27115254ad1e5a893d4 Mon Sep 17 00:00:00 2001 From: meow Date: Thu, 19 Dec 2019 14:03:25 +0500 Subject: [PATCH 013/409] Extend ModelBackend instead of rolling our own --- utils/backend.py | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/utils/backend.py b/utils/backend.py index cbf38d6c..2b5c86e5 100644 --- a/utils/backend.py +++ b/utils/backend.py @@ -1,26 +1,13 @@ import logging -from membership.models import CustomUser +from django.contrib.auth.backends import ModelBackend logger = logging.getLogger(__name__) -class MyLDAPBackend(object): - def authenticate(self, email, password): - try: - user = CustomUser.objects.get(email=email) - except CustomUser.DoesNotExist: - # User does not exists in Database - return None - else: +class MyLDAPBackend(ModelBackend): + def authenticate(self, username=None, password=None, **kwargs): + user = super().authenticate(username, password, **kwargs) + if user: user.create_ldap_account(password) - if user.check_password(password): - return user - else: - return None - - def get_user(self, user_id): - try: - return CustomUser.objects.get(pk=user_id) - except CustomUser.DoesNotExist: - return None + return user From 0c82525b7f852245c34a110b5a323c3ae10f398f Mon Sep 17 00:00:00 2001 From: PCoder Date: Fri, 20 Dec 2019 09:44:36 +0530 Subject: [PATCH 014/409] Update Changelog for 2.8 --- Changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Changelog b/Changelog index f5a42e09..45c650be 100644 --- a/Changelog +++ b/Changelog @@ -1,5 +1,5 @@ -Next: - * ldap_migration +2.8: 2019-12-20 + * ldap_migration: Migrate django users to Ldap Notes for deployment: ``` 1. Git Pull From f566aa8a2e3c91e88d43b1e343b15007b3817533 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 21 Dec 2019 08:43:34 +0530 Subject: [PATCH 015/409] Make VAT number a part of billing address --- .../templates/datacenterlight/order_detail.html | 7 +++---- datacenterlight/views.py | 12 +----------- hosting/templates/hosting/invoice_detail.html | 4 ++-- hosting/templates/hosting/order_detail.html | 4 ++-- hosting/views.py | 12 ++---------- membership/models.py | 2 -- utils/forms.py | 1 - utils/models.py | 1 + 8 files changed, 11 insertions(+), 32 deletions(-) diff --git a/datacenterlight/templates/datacenterlight/order_detail.html b/datacenterlight/templates/datacenterlight/order_detail.html index 87ff3bd3..b7e28e62 100644 --- a/datacenterlight/templates/datacenterlight/order_detail.html +++ b/datacenterlight/templates/datacenterlight/order_detail.html @@ -32,11 +32,10 @@ {{billing_address.cardholder_name}}
{{billing_address.street_address}}, {{billing_address.postal_code}}
{{billing_address.city}}, {{billing_address.country}} - {% if request.user.vat_number %} -
{% trans "VAT Number" %} {{request.user.vat_number}} + {% if billing_address.vat_number %} +
{% trans "VAT Number" %} {{billing_address.vat_number}} {% endif %} {% endwith %} -

@@ -211,4 +210,4 @@ {% trans "Some problem encountered. Please try again later." as err_msg %} var create_vm_error_message = '{{err_msg|safe}}'; -{%endblock%} \ No newline at end of file +{%endblock%} diff --git a/datacenterlight/views.py b/datacenterlight/views.py index 301049aa..078f64ac 100644 --- a/datacenterlight/views.py +++ b/datacenterlight/views.py @@ -254,9 +254,6 @@ class PaymentOrderView(FormView): billing_address_form = BillingAddressForm( instance=self.request.user.billing_addresses.first() ) - billing_address_form.fields['vat_number'].initial = ( - self.request.user.vat_number - ) user = self.request.user if hasattr(user, 'stripecustomer'): stripe_customer = user.stripecustomer @@ -491,9 +488,6 @@ class PaymentOrderView(FormView): customer = StripeCustomer.get_or_create( email=this_user.get('email'), token=token ) - request.user.vat_number = address_form.cleaned_data.get( - "vat_number") - request.user.save() else: user_email = address_form.cleaned_data.get('email') user_name = address_form.cleaned_data.get('name') @@ -949,11 +943,6 @@ class OrderConfirmationView(DetailView, FormView): 'user': custom_user.id }) - # Customer is created, we save his VAT Number - custom_user.vat_number = request.session.get( - 'billing_address_data').get("vat_number") - custom_user.save() - if 'generic_payment_type' in request.session: stripe_cus = StripeCustomer.objects.filter( stripe_id=stripe_api_cus_id @@ -964,6 +953,7 @@ class OrderConfirmationView(DetailView, FormView): city=billing_address_data['city'], postal_code=billing_address_data['postal_code'], country=billing_address_data['country'] + vat_number=billing_address_data['vat_number'] ) billing_address.save() diff --git a/hosting/templates/hosting/invoice_detail.html b/hosting/templates/hosting/invoice_detail.html index 3463e505..e5714b82 100644 --- a/hosting/templates/hosting/invoice_detail.html +++ b/hosting/templates/hosting/invoice_detail.html @@ -70,8 +70,8 @@ {{invoice.order.billing_address.postal_code}}
{{invoice.order.billing_address.city}}, {{invoice.order.billing_address.country}} - {% if invoice.customer.user.vat_number %} -
{% trans "VAT Number" %} {{invoice.customer.user.vat_number}} + {% if invoice.order.billing_address.vat_number %} +
{% trans "VAT Number" %} {{invoice.order.billing_address.vat_number}} {% endif %} {% endif %}

diff --git a/hosting/templates/hosting/order_detail.html b/hosting/templates/hosting/order_detail.html index 0ce72fa3..2ad17276 100644 --- a/hosting/templates/hosting/order_detail.html +++ b/hosting/templates/hosting/order_detail.html @@ -67,8 +67,8 @@ {{billing_address.cardholder_name}}
{{billing_address.street_address}}, {{billing_address.postal_code}}
{{billing_address.city}}, {{billing_address.country}} - {% if user.vat_number %} -
{% trans "VAT Number" %} {{user.vat_number}} + {% if billing_address.vat_number %} +
{% trans "VAT Number" %} {{billing_address.vat_number}} {% endif %} {% endwith %} {% endif %} diff --git a/hosting/views.py b/hosting/views.py index 39b43ad8..3f89496b 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -549,12 +549,9 @@ class SettingsView(LoginRequiredMixin, FormView): Check if the user already saved contact details. If so, then show the form populated with those details, to let user change them. """ - - bill_form = form_class( + return form_class( instance=self.request.user.billing_addresses.first(), **self.get_form_kwargs()) - bill_form.fields['vat_number'].initial = self.request.user.vat_number - return bill_form def get_context_data(self, **kwargs): context = super(SettingsView, self).get_context_data(**kwargs) @@ -630,9 +627,6 @@ class SettingsView(LoginRequiredMixin, FormView): instance=self.request.user.billing_addresses.first(), data=billing_address_data) billing_address_user_form.save() - self.request.user.vat_number = billing_address_data.get( - "vat_number") - self.request.user.save() msg = _("Billing address updated successfully") messages.add_message(request, messages.SUCCESS, msg) else: @@ -705,7 +699,7 @@ class PaymentVMView(LoginRequiredMixin, FormView): 'city': current_billing_address.city, 'postal_code': current_billing_address.postal_code, 'country': current_billing_address.country, - 'vat_number': self.request.user.vat_number + 'vat_number': current_billing_address.vat_number } }) return form_kwargs @@ -790,8 +784,6 @@ class PaymentVMView(LoginRequiredMixin, FormView): reverse('hosting:payment') + '#payment_error') request.session['token'] = token request.session['billing_address_data'] = billing_address_data - owner.vat_number = billing_address_data.get("vat_number") - owner.save() self.request.session['order_confirm_url'] = "{url}?{query_params}".format( url=reverse('hosting:order-confirmation'), query_params='page=payment') diff --git a/membership/models.py b/membership/models.py index 34ef73cc..80aaf408 100644 --- a/membership/models.py +++ b/membership/models.py @@ -117,8 +117,6 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): name = models.CharField(max_length=50, validators=[validate_name]) email = models.EmailField(unique=True) username = models.CharField(max_length=60, unique=True, null=True) - vat_number = models.CharField(max_length=100, default="") - validated = models.IntegerField(choices=VALIDATED_CHOICES, default=0) in_ldap = models.BooleanField(default=False) # By default, we initialize the validation_slug with appropriate value diff --git a/utils/forms.py b/utils/forms.py index 9855e367..71a675bc 100644 --- a/utils/forms.py +++ b/utils/forms.py @@ -120,7 +120,6 @@ class EditCreditCardForm(forms.Form): class BillingAddressForm(forms.ModelForm): token = forms.CharField(widget=forms.HiddenInput(), required=False) card = forms.CharField(widget=forms.HiddenInput(), required=False) - vat_number = forms.CharField(max_length=100) class Meta: model = BillingAddress diff --git a/utils/models.py b/utils/models.py index 8cd529e0..e70dea5c 100644 --- a/utils/models.py +++ b/utils/models.py @@ -13,6 +13,7 @@ class BaseBillingAddress(models.Model): city = models.CharField(max_length=50) postal_code = models.CharField(max_length=50) country = CountryField() + vat_number = models.CharField(max_length=100) class Meta: abstract = True From b919b6cfbdca142da5a5fd01ad7e99e7646d4842 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 21 Dec 2019 08:51:11 +0530 Subject: [PATCH 016/409] Fix wrong indentation --- datacenterlight/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datacenterlight/views.py b/datacenterlight/views.py index 078f64ac..0763e259 100644 --- a/datacenterlight/views.py +++ b/datacenterlight/views.py @@ -952,8 +952,8 @@ class OrderConfirmationView(DetailView, FormView): street_address=billing_address_data['street_address'], city=billing_address_data['city'], postal_code=billing_address_data['postal_code'], - country=billing_address_data['country'] - vat_number=billing_address_data['vat_number'] + country=billing_address_data['country'], + vat_number=billing_address_data['vat_number'] ) billing_address.save() From 202a514b1b00e90eda63b51df614585ea07aa201 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 21 Dec 2019 08:51:43 +0530 Subject: [PATCH 017/409] Set empty default value for vat_number --- utils/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/models.py b/utils/models.py index e70dea5c..3bf5020f 100644 --- a/utils/models.py +++ b/utils/models.py @@ -13,7 +13,7 @@ class BaseBillingAddress(models.Model): city = models.CharField(max_length=50) postal_code = models.CharField(max_length=50) country = CountryField() - vat_number = models.CharField(max_length=100) + vat_number = models.CharField(max_length=100, default="") class Meta: abstract = True From 2d66ae6783eb208898d47d43d627310b2272302c Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 21 Dec 2019 08:52:06 +0530 Subject: [PATCH 018/409] Improve BillingAddress string representation Include VAT number if available --- utils/models.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/utils/models.py b/utils/models.py index 3bf5020f..b6c0ef88 100644 --- a/utils/models.py +++ b/utils/models.py @@ -21,10 +21,16 @@ class BaseBillingAddress(models.Model): class BillingAddress(BaseBillingAddress): def __str__(self): - return "%s, %s, %s, %s, %s" % ( - self.cardholder_name, self.street_address, self.city, - self.postal_code, self.country - ) + if self.vat_number: + return "%s, %s, %s, %s, %s, %s" % ( + self.cardholder_name, self.street_address, self.city, + self.postal_code, self.country, self.vat_number + ) + else: + return "%s, %s, %s, %s, %s" % ( + self.cardholder_name, self.street_address, self.city, + self.postal_code, self.country + ) class UserBillingAddress(BaseBillingAddress): From e3078f3ea9c14d0c98bb9b9a0a9f668d8a000c2f Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 21 Dec 2019 08:52:43 +0530 Subject: [PATCH 019/409] Add migration --- utils/migrations/0007_auto_20191221_0319.py | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 utils/migrations/0007_auto_20191221_0319.py diff --git a/utils/migrations/0007_auto_20191221_0319.py b/utils/migrations/0007_auto_20191221_0319.py new file mode 100644 index 00000000..b9fe9b6d --- /dev/null +++ b/utils/migrations/0007_auto_20191221_0319.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2019-12-21 03:19 +from __future__ import unicode_literals + +from django.db import migrations, models +import utils.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('utils', '0006_auto_20170810_1742'), + ] + + operations = [ + migrations.AddField( + model_name='billingaddress', + name='vat_number', + field=models.CharField(default='', max_length=100), + ), + migrations.AddField( + model_name='userbillingaddress', + name='vat_number', + field=models.CharField(default='', max_length=100), + ), + migrations.AlterField( + model_name='billingaddress', + name='country', + field=utils.fields.CountryField(choices=[('AD', 'Andorra'), ('AE', 'United Arab Emirates'), ('AF', 'Afghanistan'), ('AG', 'Antigua & Barbuda'), ('AI', 'Anguilla'), ('AL', 'Albania'), ('AM', 'Armenia'), ('AN', 'Netherlands Antilles'), ('AO', 'Angola'), ('AQ', 'Antarctica'), ('AR', 'Argentina'), ('AS', 'American Samoa'), ('AT', 'Austria'), ('AU', 'Australia'), ('AW', 'Aruba'), ('AZ', 'Azerbaijan'), ('BA', 'Bosnia and Herzegovina'), ('BB', 'Barbados'), ('BD', 'Bangladesh'), ('BE', 'Belgium'), ('BF', 'Burkina Faso'), ('BG', 'Bulgaria'), ('BH', 'Bahrain'), ('BI', 'Burundi'), ('BJ', 'Benin'), ('BM', 'Bermuda'), ('BN', 'Brunei Darussalam'), ('BO', 'Bolivia'), ('BR', 'Brazil'), ('BS', 'Bahama'), ('BT', 'Bhutan'), ('BV', 'Bouvet Island'), ('BW', 'Botswana'), ('BY', 'Belarus'), ('BZ', 'Belize'), ('CA', 'Canada'), ('CC', 'Cocos (Keeling) Islands'), ('CF', 'Central African Republic'), ('CG', 'Congo'), ('CH', 'Switzerland'), ('CI', 'Ivory Coast'), ('CK', 'Cook Iislands'), ('CL', 'Chile'), ('CM', 'Cameroon'), ('CN', 'China'), ('CO', 'Colombia'), ('CR', 'Costa Rica'), ('CU', 'Cuba'), ('CV', 'Cape Verde'), ('CX', 'Christmas Island'), ('CY', 'Cyprus'), ('CZ', 'Czech Republic'), ('DE', 'Germany'), ('DJ', 'Djibouti'), ('DK', 'Denmark'), ('DM', 'Dominica'), ('DO', 'Dominican Republic'), ('DZ', 'Algeria'), ('EC', 'Ecuador'), ('EE', 'Estonia'), ('EG', 'Egypt'), ('EH', 'Western Sahara'), ('ER', 'Eritrea'), ('ES', 'Spain'), ('ET', 'Ethiopia'), ('FI', 'Finland'), ('FJ', 'Fiji'), ('FK', 'Falkland Islands (Malvinas)'), ('FM', 'Micronesia'), ('FO', 'Faroe Islands'), ('FR', 'France'), ('FX', 'France, Metropolitan'), ('GA', 'Gabon'), ('GB', 'United Kingdom (Great Britain)'), ('GD', 'Grenada'), ('GE', 'Georgia'), ('GF', 'French Guiana'), ('GH', 'Ghana'), ('GI', 'Gibraltar'), ('GL', 'Greenland'), ('GM', 'Gambia'), ('GN', 'Guinea'), ('GP', 'Guadeloupe'), ('GQ', 'Equatorial Guinea'), ('GR', 'Greece'), ('GS', 'South Georgia and the South Sandwich Islands'), ('GT', 'Guatemala'), ('GU', 'Guam'), ('GW', 'Guinea-Bissau'), ('GY', 'Guyana'), ('HK', 'Hong Kong'), ('HM', 'Heard & McDonald Islands'), ('HN', 'Honduras'), ('HR', 'Croatia'), ('HT', 'Haiti'), ('HU', 'Hungary'), ('ID', 'Indonesia'), ('IE', 'Ireland'), ('IL', 'Israel'), ('IN', 'India'), ('IO', 'British Indian Ocean Territory'), ('IQ', 'Iraq'), ('IR', 'Islamic Republic of Iran'), ('IS', 'Iceland'), ('IT', 'Italy'), ('JM', 'Jamaica'), ('JO', 'Jordan'), ('JP', 'Japan'), ('KE', 'Kenya'), ('KG', 'Kyrgyzstan'), ('KH', 'Cambodia'), ('KI', 'Kiribati'), ('KM', 'Comoros'), ('KN', 'St. Kitts and Nevis'), ('KP', "Korea, Democratic People's Republic of"), ('KR', 'Korea, Republic of'), ('KW', 'Kuwait'), ('KY', 'Cayman Islands'), ('KZ', 'Kazakhstan'), ('LA', "Lao People's Democratic Republic"), ('LB', 'Lebanon'), ('LC', 'Saint Lucia'), ('LI', 'Liechtenstein'), ('LK', 'Sri Lanka'), ('LR', 'Liberia'), ('LS', 'Lesotho'), ('LT', 'Lithuania'), ('LU', 'Luxembourg'), ('LV', 'Latvia'), ('LY', 'Libyan Arab Jamahiriya'), ('MA', 'Morocco'), ('MC', 'Monaco'), ('MD', 'Moldova, Republic of'), ('MG', 'Madagascar'), ('MH', 'Marshall Islands'), ('ML', 'Mali'), ('MN', 'Mongolia'), ('MM', 'Myanmar'), ('MO', 'Macau'), ('MP', 'Northern Mariana Islands'), ('MQ', 'Martinique'), ('MR', 'Mauritania'), ('MS', 'Monserrat'), ('MT', 'Malta'), ('MU', 'Mauritius'), ('MV', 'Maldives'), ('MW', 'Malawi'), ('MX', 'Mexico'), ('MY', 'Malaysia'), ('MZ', 'Mozambique'), ('NA', 'Namibia'), ('NC', 'New Caledonia'), ('NE', 'Niger'), ('NF', 'Norfolk Island'), ('NG', 'Nigeria'), ('NI', 'Nicaragua'), ('NL', 'Netherlands'), ('NO', 'Norway'), ('NP', 'Nepal'), ('NR', 'Nauru'), ('NU', 'Niue'), ('NZ', 'New Zealand'), ('OM', 'Oman'), ('PA', 'Panama'), ('PE', 'Peru'), ('PF', 'French Polynesia'), ('PG', 'Papua New Guinea'), ('PH', 'Philippines'), ('PK', 'Pakistan'), ('PL', 'Poland'), ('PM', 'St. Pierre & Miquelon'), ('PN', 'Pitcairn'), ('PR', 'Puerto Rico'), ('PT', 'Portugal'), ('PW', 'Palau'), ('PY', 'Paraguay'), ('QA', 'Qatar'), ('RE', 'Reunion'), ('RO', 'Romania'), ('RU', 'Russian Federation'), ('RW', 'Rwanda'), ('SA', 'Saudi Arabia'), ('SB', 'Solomon Islands'), ('SC', 'Seychelles'), ('SD', 'Sudan'), ('SE', 'Sweden'), ('SG', 'Singapore'), ('SH', 'St. Helena'), ('SI', 'Slovenia'), ('SJ', 'Svalbard & Jan Mayen Islands'), ('SK', 'Slovakia'), ('SL', 'Sierra Leone'), ('SM', 'San Marino'), ('SN', 'Senegal'), ('SO', 'Somalia'), ('SR', 'Suriname'), ('ST', 'Sao Tome & Principe'), ('SV', 'El Salvador'), ('SY', 'Syrian Arab Republic'), ('SZ', 'Swaziland'), ('TC', 'Turks & Caicos Islands'), ('TD', 'Chad'), ('TF', 'French Southern Territories'), ('TG', 'Togo'), ('TH', 'Thailand'), ('TJ', 'Tajikistan'), ('TK', 'Tokelau'), ('TM', 'Turkmenistan'), ('TN', 'Tunisia'), ('TO', 'Tonga'), ('TP', 'East Timor'), ('TR', 'Turkey'), ('TT', 'Trinidad & Tobago'), ('TV', 'Tuvalu'), ('TW', 'Taiwan, Province of China'), ('TZ', 'Tanzania, United Republic of'), ('UA', 'Ukraine'), ('UG', 'Uganda'), ('UM', 'United States Minor Outlying Islands'), ('US', 'United States of America'), ('UY', 'Uruguay'), ('UZ', 'Uzbekistan'), ('VA', 'Vatican City State (Holy See)'), ('VC', 'St. Vincent & the Grenadines'), ('VE', 'Venezuela'), ('VG', 'British Virgin Islands'), ('VI', 'United States Virgin Islands'), ('VN', 'Viet Nam'), ('VU', 'Vanuatu'), ('WF', 'Wallis & Futuna Islands'), ('WS', 'Samoa'), ('YE', 'Yemen'), ('YT', 'Mayotte'), ('YU', 'Yugoslavia'), ('ZA', 'South Africa'), ('ZM', 'Zambia'), ('ZR', 'Zaire'), ('ZW', 'Zimbabwe')], default='CH', max_length=2), + ), + migrations.AlterField( + model_name='userbillingaddress', + name='country', + field=utils.fields.CountryField(choices=[('AD', 'Andorra'), ('AE', 'United Arab Emirates'), ('AF', 'Afghanistan'), ('AG', 'Antigua & Barbuda'), ('AI', 'Anguilla'), ('AL', 'Albania'), ('AM', 'Armenia'), ('AN', 'Netherlands Antilles'), ('AO', 'Angola'), ('AQ', 'Antarctica'), ('AR', 'Argentina'), ('AS', 'American Samoa'), ('AT', 'Austria'), ('AU', 'Australia'), ('AW', 'Aruba'), ('AZ', 'Azerbaijan'), ('BA', 'Bosnia and Herzegovina'), ('BB', 'Barbados'), ('BD', 'Bangladesh'), ('BE', 'Belgium'), ('BF', 'Burkina Faso'), ('BG', 'Bulgaria'), ('BH', 'Bahrain'), ('BI', 'Burundi'), ('BJ', 'Benin'), ('BM', 'Bermuda'), ('BN', 'Brunei Darussalam'), ('BO', 'Bolivia'), ('BR', 'Brazil'), ('BS', 'Bahama'), ('BT', 'Bhutan'), ('BV', 'Bouvet Island'), ('BW', 'Botswana'), ('BY', 'Belarus'), ('BZ', 'Belize'), ('CA', 'Canada'), ('CC', 'Cocos (Keeling) Islands'), ('CF', 'Central African Republic'), ('CG', 'Congo'), ('CH', 'Switzerland'), ('CI', 'Ivory Coast'), ('CK', 'Cook Iislands'), ('CL', 'Chile'), ('CM', 'Cameroon'), ('CN', 'China'), ('CO', 'Colombia'), ('CR', 'Costa Rica'), ('CU', 'Cuba'), ('CV', 'Cape Verde'), ('CX', 'Christmas Island'), ('CY', 'Cyprus'), ('CZ', 'Czech Republic'), ('DE', 'Germany'), ('DJ', 'Djibouti'), ('DK', 'Denmark'), ('DM', 'Dominica'), ('DO', 'Dominican Republic'), ('DZ', 'Algeria'), ('EC', 'Ecuador'), ('EE', 'Estonia'), ('EG', 'Egypt'), ('EH', 'Western Sahara'), ('ER', 'Eritrea'), ('ES', 'Spain'), ('ET', 'Ethiopia'), ('FI', 'Finland'), ('FJ', 'Fiji'), ('FK', 'Falkland Islands (Malvinas)'), ('FM', 'Micronesia'), ('FO', 'Faroe Islands'), ('FR', 'France'), ('FX', 'France, Metropolitan'), ('GA', 'Gabon'), ('GB', 'United Kingdom (Great Britain)'), ('GD', 'Grenada'), ('GE', 'Georgia'), ('GF', 'French Guiana'), ('GH', 'Ghana'), ('GI', 'Gibraltar'), ('GL', 'Greenland'), ('GM', 'Gambia'), ('GN', 'Guinea'), ('GP', 'Guadeloupe'), ('GQ', 'Equatorial Guinea'), ('GR', 'Greece'), ('GS', 'South Georgia and the South Sandwich Islands'), ('GT', 'Guatemala'), ('GU', 'Guam'), ('GW', 'Guinea-Bissau'), ('GY', 'Guyana'), ('HK', 'Hong Kong'), ('HM', 'Heard & McDonald Islands'), ('HN', 'Honduras'), ('HR', 'Croatia'), ('HT', 'Haiti'), ('HU', 'Hungary'), ('ID', 'Indonesia'), ('IE', 'Ireland'), ('IL', 'Israel'), ('IN', 'India'), ('IO', 'British Indian Ocean Territory'), ('IQ', 'Iraq'), ('IR', 'Islamic Republic of Iran'), ('IS', 'Iceland'), ('IT', 'Italy'), ('JM', 'Jamaica'), ('JO', 'Jordan'), ('JP', 'Japan'), ('KE', 'Kenya'), ('KG', 'Kyrgyzstan'), ('KH', 'Cambodia'), ('KI', 'Kiribati'), ('KM', 'Comoros'), ('KN', 'St. Kitts and Nevis'), ('KP', "Korea, Democratic People's Republic of"), ('KR', 'Korea, Republic of'), ('KW', 'Kuwait'), ('KY', 'Cayman Islands'), ('KZ', 'Kazakhstan'), ('LA', "Lao People's Democratic Republic"), ('LB', 'Lebanon'), ('LC', 'Saint Lucia'), ('LI', 'Liechtenstein'), ('LK', 'Sri Lanka'), ('LR', 'Liberia'), ('LS', 'Lesotho'), ('LT', 'Lithuania'), ('LU', 'Luxembourg'), ('LV', 'Latvia'), ('LY', 'Libyan Arab Jamahiriya'), ('MA', 'Morocco'), ('MC', 'Monaco'), ('MD', 'Moldova, Republic of'), ('MG', 'Madagascar'), ('MH', 'Marshall Islands'), ('ML', 'Mali'), ('MN', 'Mongolia'), ('MM', 'Myanmar'), ('MO', 'Macau'), ('MP', 'Northern Mariana Islands'), ('MQ', 'Martinique'), ('MR', 'Mauritania'), ('MS', 'Monserrat'), ('MT', 'Malta'), ('MU', 'Mauritius'), ('MV', 'Maldives'), ('MW', 'Malawi'), ('MX', 'Mexico'), ('MY', 'Malaysia'), ('MZ', 'Mozambique'), ('NA', 'Namibia'), ('NC', 'New Caledonia'), ('NE', 'Niger'), ('NF', 'Norfolk Island'), ('NG', 'Nigeria'), ('NI', 'Nicaragua'), ('NL', 'Netherlands'), ('NO', 'Norway'), ('NP', 'Nepal'), ('NR', 'Nauru'), ('NU', 'Niue'), ('NZ', 'New Zealand'), ('OM', 'Oman'), ('PA', 'Panama'), ('PE', 'Peru'), ('PF', 'French Polynesia'), ('PG', 'Papua New Guinea'), ('PH', 'Philippines'), ('PK', 'Pakistan'), ('PL', 'Poland'), ('PM', 'St. Pierre & Miquelon'), ('PN', 'Pitcairn'), ('PR', 'Puerto Rico'), ('PT', 'Portugal'), ('PW', 'Palau'), ('PY', 'Paraguay'), ('QA', 'Qatar'), ('RE', 'Reunion'), ('RO', 'Romania'), ('RU', 'Russian Federation'), ('RW', 'Rwanda'), ('SA', 'Saudi Arabia'), ('SB', 'Solomon Islands'), ('SC', 'Seychelles'), ('SD', 'Sudan'), ('SE', 'Sweden'), ('SG', 'Singapore'), ('SH', 'St. Helena'), ('SI', 'Slovenia'), ('SJ', 'Svalbard & Jan Mayen Islands'), ('SK', 'Slovakia'), ('SL', 'Sierra Leone'), ('SM', 'San Marino'), ('SN', 'Senegal'), ('SO', 'Somalia'), ('SR', 'Suriname'), ('ST', 'Sao Tome & Principe'), ('SV', 'El Salvador'), ('SY', 'Syrian Arab Republic'), ('SZ', 'Swaziland'), ('TC', 'Turks & Caicos Islands'), ('TD', 'Chad'), ('TF', 'French Southern Territories'), ('TG', 'Togo'), ('TH', 'Thailand'), ('TJ', 'Tajikistan'), ('TK', 'Tokelau'), ('TM', 'Turkmenistan'), ('TN', 'Tunisia'), ('TO', 'Tonga'), ('TP', 'East Timor'), ('TR', 'Turkey'), ('TT', 'Trinidad & Tobago'), ('TV', 'Tuvalu'), ('TW', 'Taiwan, Province of China'), ('TZ', 'Tanzania, United Republic of'), ('UA', 'Ukraine'), ('UG', 'Uganda'), ('UM', 'United States Minor Outlying Islands'), ('US', 'United States of America'), ('UY', 'Uruguay'), ('UZ', 'Uzbekistan'), ('VA', 'Vatican City State (Holy See)'), ('VC', 'St. Vincent & the Grenadines'), ('VE', 'Venezuela'), ('VG', 'British Virgin Islands'), ('VI', 'United States Virgin Islands'), ('VN', 'Viet Nam'), ('VU', 'Vanuatu'), ('WF', 'Wallis & Futuna Islands'), ('WS', 'Samoa'), ('YE', 'Yemen'), ('YT', 'Mayotte'), ('YU', 'Yugoslavia'), ('ZA', 'South Africa'), ('ZM', 'Zambia'), ('ZR', 'Zaire'), ('ZW', 'Zimbabwe')], default='CH', max_length=2), + ), + ] From 32cfdea68c9c744068d23247c75c68b820d05dc5 Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 21 Dec 2019 10:05:58 +0530 Subject: [PATCH 020/409] Add missing vat_number field to user billing address --- utils/forms.py | 1 + utils/models.py | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/utils/forms.py b/utils/forms.py index 71a675bc..6e8f4606 100644 --- a/utils/forms.py +++ b/utils/forms.py @@ -182,6 +182,7 @@ class UserBillingAddressForm(forms.ModelForm): 'city': _('City'), 'postal_code': _('Postal Code'), 'Country': _('Country'), + 'vat_number': _('VAT Number'), } diff --git a/utils/models.py b/utils/models.py index b6c0ef88..0084ddd4 100644 --- a/utils/models.py +++ b/utils/models.py @@ -38,10 +38,16 @@ class UserBillingAddress(BaseBillingAddress): current = models.BooleanField(default=True) def __str__(self): - return "%s, %s, %s, %s, %s" % ( - self.cardholder_name, self.street_address, self.city, - self.postal_code, self.country - ) + if self.vat_number: + return "%s, %s, %s, %s, %s, %s" % ( + self.cardholder_name, self.street_address, self.city, + self.postal_code, self.country, self.vat_number + ) + else: + return "%s, %s, %s, %s, %s" % ( + self.cardholder_name, self.street_address, self.city, + self.postal_code, self.country + ) def to_dict(self): return { @@ -50,6 +56,7 @@ class UserBillingAddress(BaseBillingAddress): 'City': self.city, 'Postal Code': self.postal_code, 'Country': self.country, + 'VAT Number': self.vat_number } From 8409acf02dfe06c3499a319888c368cf8ac37d3a Mon Sep 17 00:00:00 2001 From: PCoder Date: Sat, 21 Dec 2019 10:10:32 +0530 Subject: [PATCH 021/409] Add missing vat_number field --- utils/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/forms.py b/utils/forms.py index 6e8f4606..f35c90f4 100644 --- a/utils/forms.py +++ b/utils/forms.py @@ -175,7 +175,7 @@ class UserBillingAddressForm(forms.ModelForm): class Meta: model = UserBillingAddress fields = ['cardholder_name', 'street_address', - 'city', 'postal_code', 'country', 'user'] + 'city', 'postal_code', 'country', 'user', 'vat_number'] labels = { 'cardholder_name': _('Cardholder Name'), 'street_address': _('Street Building'), From 3b6e5d448b62f89e65ab762d9b4d2ba959169690 Mon Sep 17 00:00:00 2001 From: PCoder Date: Tue, 24 Dec 2019 09:06:17 +0530 Subject: [PATCH 022/409] Add show non transparent navbar always option --- datacenterlight/cms_models.py | 5 +++++ ...odel_show_non_transparent_navbar_always.py | 20 +++++++++++++++++++ .../templates/datacenterlight/cms/navbar.html | 2 +- .../datacenterlight/includes/_navbar.html | 2 +- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 datacenterlight/migrations/0030_dclnavbarpluginmodel_show_non_transparent_navbar_always.py diff --git a/datacenterlight/cms_models.py b/datacenterlight/cms_models.py index 2d1a98b5..d1c5c259 100644 --- a/datacenterlight/cms_models.py +++ b/datacenterlight/cms_models.py @@ -184,6 +184,11 @@ class DCLNavbarPluginModel(CMSPlugin): default=True, help_text='Uncheck this if you do not want to show login/dashboard.' ) + show_non_transparent_navbar_always = models.BooleanField( + default=False, + help_text='Check this if you want to show non transparent navbar only.' + '(Useful when we want to setup a simple page)' + ) def get_logo_dark(self): # used only if atleast one logo exists diff --git a/datacenterlight/migrations/0030_dclnavbarpluginmodel_show_non_transparent_navbar_always.py b/datacenterlight/migrations/0030_dclnavbarpluginmodel_show_non_transparent_navbar_always.py new file mode 100644 index 00000000..f3e3ec09 --- /dev/null +++ b/datacenterlight/migrations/0030_dclnavbarpluginmodel_show_non_transparent_navbar_always.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2019-12-24 03:34 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('datacenterlight', '0029_auto_20190420_1022'), + ] + + operations = [ + migrations.AddField( + model_name='dclnavbarpluginmodel', + name='show_non_transparent_navbar_always', + field=models.BooleanField(default=False, help_text='Check this if you want to show non transparent navbar only.(Useful when we want to setup a simple page)'), + ), + ] diff --git a/datacenterlight/templates/datacenterlight/cms/navbar.html b/datacenterlight/templates/datacenterlight/cms/navbar.html index 886a5009..8000ec54 100644 --- a/datacenterlight/templates/datacenterlight/cms/navbar.html +++ b/datacenterlight/templates/datacenterlight/cms/navbar.html @@ -1,7 +1,7 @@ {% load static i18n custom_tags cms_tags %} {% get_current_language as LANGUAGE_CODE %} -