lead page ui fix and vat rate validation
This commit is contained in:
parent
d3a36aab7b
commit
e355953c9b
@ -8,7 +8,7 @@ from django import forms
|
|||||||
from plans.models import PlanPricing
|
from plans.models import PlanPricing
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
from inventory.validators import SaudiPhoneNumberValidator
|
from inventory.validators import SaudiPhoneNumberValidator, vat_rate_validator
|
||||||
from .models import CustomGroup, Status, Stage
|
from .models import CustomGroup, Status, Stage
|
||||||
from .mixins import AddClassMixin
|
from .mixins import AddClassMixin
|
||||||
from django_ledger.forms.invoice import (
|
from django_ledger.forms.invoice import (
|
||||||
@ -2120,11 +2120,17 @@ class AdditionalFinancesForm(forms.Form):
|
|||||||
|
|
||||||
|
|
||||||
class VatRateForm(forms.ModelForm):
|
class VatRateForm(forms.ModelForm):
|
||||||
|
rate = forms.DecimalField(
|
||||||
|
label="VAT Rate",
|
||||||
|
max_digits=5,
|
||||||
|
decimal_places=2,
|
||||||
|
validators=[vat_rate_validator]
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VatRate
|
model = VatRate
|
||||||
fields = ["rate"]
|
fields = ["rate"]
|
||||||
|
|
||||||
|
|
||||||
class CustomSetPasswordForm(SetPasswordForm):
|
class CustomSetPasswordForm(SetPasswordForm):
|
||||||
new_password1 = forms.CharField(
|
new_password1 = forms.CharField(
|
||||||
label="New Password",
|
label="New Password",
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import uuid
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import Permission
|
from django.contrib.auth.models import Permission
|
||||||
from inventory.validators import SaudiPhoneNumberValidator
|
from inventory.validators import SaudiPhoneNumberValidator, vat_rate_validator
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
@ -206,7 +206,7 @@ class UnitOfMeasure(models.TextChoices):
|
|||||||
|
|
||||||
class VatRate(models.Model):
|
class VatRate(models.Model):
|
||||||
dealer = models.ForeignKey("Dealer", on_delete=models.CASCADE)
|
dealer = models.ForeignKey("Dealer", on_delete=models.CASCADE)
|
||||||
rate = models.DecimalField(max_digits=5, decimal_places=2, default=Decimal("0.15"))
|
rate = models.DecimalField(max_digits=5, decimal_places=2, default=Decimal("0.15"),validators=[vat_rate_validator])
|
||||||
is_active = models.BooleanField(default=True)
|
is_active = models.BooleanField(default=True)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
from django.core.validators import RegexValidator
|
from django.core.validators import RegexValidator
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
@ -14,3 +15,10 @@ class SaudiPhoneNumberValidator(RegexValidator):
|
|||||||
# Remove any whitespace, dashes, or other separators
|
# Remove any whitespace, dashes, or other separators
|
||||||
cleaned_value = re.sub(r"[\s\-\(\)\.]", "", str(value))
|
cleaned_value = re.sub(r"[\s\-\(\)\.]", "", str(value))
|
||||||
super().__call__(cleaned_value)
|
super().__call__(cleaned_value)
|
||||||
|
|
||||||
|
def vat_rate_validator(value):
|
||||||
|
if value < 0 or value > 1:
|
||||||
|
raise ValidationError(
|
||||||
|
_('%(value)s is not a valid VAT rate. It must be between 0 and 1.'),
|
||||||
|
params={'value': value},
|
||||||
|
)
|
||||||
@ -2336,11 +2336,28 @@ class DealerDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
from .forms import VatRateForm
|
||||||
|
@login_required
|
||||||
def dealer_vat_rate_update(request, slug):
|
def dealer_vat_rate_update(request, slug):
|
||||||
dealer = get_object_or_404(models.Dealer, slug=slug)
|
dealer = get_object_or_404(models.Dealer, slug=slug)
|
||||||
models.VatRate.objects.filter(dealer=dealer).update(rate=request.POST.get("rate"))
|
|
||||||
messages.success(request, _("VAT rate updated successfully"))
|
vat_rate_instance, created = models.VatRate.objects.get_or_create(dealer=dealer)
|
||||||
return redirect("dealer_detail", slug=slug)
|
|
||||||
|
if request.method == "POST":
|
||||||
|
|
||||||
|
form = VatRateForm(request.POST, instance=vat_rate_instance)
|
||||||
|
|
||||||
|
if form.is_valid():
|
||||||
|
form.save()
|
||||||
|
messages.success(request, _("VAT rate updated successfully"))
|
||||||
|
return redirect("dealer_detail", slug=slug)
|
||||||
|
else:
|
||||||
|
|
||||||
|
messages.error(request, _("Please enter valid vat rate between 0 and 1."))
|
||||||
|
redirect("dealer_detail", slug=slug)
|
||||||
|
|
||||||
|
return redirect("dealer_detail", slug=slug)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DealerUpdateView(
|
class DealerUpdateView(
|
||||||
@ -2399,11 +2416,6 @@ class StaffDetailView(LoginRequiredMixin, DetailView):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def dealer_vat_rate_update(request, slug):
|
|
||||||
dealer = get_object_or_404(models.Dealer, slug=slug)
|
|
||||||
models.VatRate.objects.filter(dealer=dealer).update(rate=request.POST.get("rate"))
|
|
||||||
messages.success(request, _("VAT rate updated successfully"))
|
|
||||||
return redirect("dealer_detail", slug=slug)
|
|
||||||
|
|
||||||
|
|
||||||
class CustomerListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
class CustomerListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 435 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 435 KiB |
@ -804,6 +804,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{% include 'modal/delete_modal.html' %}
|
{% include 'modal/delete_modal.html' %}
|
||||||
<!-- add update Modal -->
|
<!-- add update Modal -->
|
||||||
{% include "components/email_modal.html" %}
|
{% include "components/email_modal.html" %}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user