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 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 .mixins import AddClassMixin
from django_ledger.forms.invoice import (
@ -2120,11 +2120,17 @@ class AdditionalFinancesForm(forms.Form):
class VatRateForm(forms.ModelForm):
rate = forms.DecimalField(
label="VAT Rate",
max_digits=5,
decimal_places=2,
validators=[vat_rate_validator]
)
class Meta:
model = VatRate
fields = ["rate"]
class CustomSetPasswordForm(SetPasswordForm):
new_password1 = forms.CharField(
label="New Password",

View File

@ -3,7 +3,7 @@ import uuid
from datetime import datetime
from django.conf import settings
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 django.urls import reverse
from django.utils.text import slugify
@ -206,7 +206,7 @@ class UnitOfMeasure(models.TextChoices):
class VatRate(models.Model):
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)
created_at = models.DateTimeField(auto_now_add=True)

View File

@ -1,5 +1,6 @@
from django.core.validators import RegexValidator
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
import re
@ -14,3 +15,10 @@ class SaudiPhoneNumberValidator(RegexValidator):
# Remove any whitespace, dashes, or other separators
cleaned_value = re.sub(r"[\s\-\(\)\.]", "", str(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,12 +2336,29 @@ class DealerDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
return context
from .forms import VatRateForm
@login_required
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)
vat_rate_instance, created = models.VatRate.objects.get_or_create(dealer=dealer)
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(
LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageMixin, UpdateView
@ -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):

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>
{% include 'modal/delete_modal.html' %}
<!-- add update Modal -->
{% include "components/email_modal.html" %}