Files
customerTicket/apps/accounts/forms.py
T
2026-09-10 11:34:19 +03:30

36 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from django import forms
from django.contrib.auth import authenticate
from .models import normalize_mobile
from apps.customers.models import CustomerProfile
from apps.core.iran_locations import validate_location
class MobileForm(forms.Form):
mobile = forms.CharField(label="شماره موبایل")
def clean_mobile(self):
try: return normalize_mobile(self.cleaned_data["mobile"])
except ValueError as exc: raise forms.ValidationError(str(exc))
class OTPForm(forms.Form): code = forms.CharField(label="کد تایید", min_length=4, max_length=8, widget=forms.TextInput(attrs={"autocomplete":"one-time-code","inputmode":"numeric","pattern":"[0-9۰-۹]*","data-webotp":""}))
class CustomerPasswordLoginForm(forms.Form):
mobile=forms.CharField(label="شماره موبایل")
password=forms.CharField(label="رمز عبور",widget=forms.PasswordInput)
def clean_mobile(self):
try:return normalize_mobile(self.cleaned_data["mobile"])
except ValueError as exc:raise forms.ValidationError(str(exc))
def authenticate(self,request):
from .models import User
user=User.objects.filter(mobile=self.cleaned_data["mobile"],account_type=User.AccountType.CUSTOMER).first()
return authenticate(request,username=user.username,password=self.cleaned_data["password"]) if user else None
class CustomerProfileForm(forms.ModelForm):
password=forms.CharField(label="رمز عبور جدید",required=False,min_length=8,widget=forms.PasswordInput,help_text="برای حفظ رمز فعلی خالی بگذارید.")
class Meta:
model=CustomerProfile; fields=["first_name","last_name","customer_type","province","city"]; labels={"first_name":"نام","last_name":"نام خانوادگی","customer_type":"نوع مشتری","province":"استان","city":"شهر"}
widgets={"province":forms.TextInput(attrs={"list":"profile-province-options","autocomplete":"off","data-province-input":""}),"city":forms.TextInput(attrs={"list":"profile-city-options","autocomplete":"off","data-city-input":""})}
def clean(self):
data=super().clean(); province,city,error=validate_location(data.get("province"),data.get("city")); data["province"],data["city"]=province,city
if error: self.add_error("city" if city else "province",error)
return data
class StaffLoginForm(forms.Form):
username = forms.CharField(label="نام کاربری")
password = forms.CharField(label="رمز عبور", widget=forms.PasswordInput)
def authenticate(self, request): return authenticate(request, username=self.cleaned_data["username"], password=self.cleaned_data["password"])