lead page ui fix and vat rate validation

This commit is contained in:
Faheed 2025-09-10 01:15:43 +03:00
parent d3a36aab7b
commit e355953c9b
7 changed files with 40 additions and 12 deletions

View File

@ -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",

View File

@ -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)

View File

@ -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},
)

View File

@ -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

View File

@ -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" %}