37733-vm/core/forms.py
Flatlogic Bot 53e281bd22 dem13
2026-01-23 12:24:32 +00:00

102 lines
5.2 KiB
Python

from django import forms
from .models import Truck, Shipment, Bid, Profile, Country
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class UserRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True, widget=forms.EmailInput(attrs={'class': 'form-control'}))
confirm_email = forms.EmailField(required=True, widget=forms.EmailInput(attrs={'class': 'form-control'}), label=_("Confirm Email"))
role = forms.ChoiceField(choices=Profile.ROLE_CHOICES, widget=forms.Select(attrs={'class': 'form-select'}))
country_code = forms.ChoiceField(choices=[], widget=forms.Select(attrs={'class': 'form-select'}))
phone_number = forms.CharField(max_length=20, required=False, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': '123456789'}))
class Meta(UserCreationForm.Meta):
model = User
fields = UserCreationForm.Meta.fields + ('email',)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Dynamic country codes from the database
countries = Country.objects.all()
if countries.exists():
self.fields['country_code'].choices = [(c.code, str(c)) for c in countries]
default_country = countries.filter(is_default=True).first()
if default_country:
self.fields['country_code'].initial = default_country.code
else:
# Fallback if no countries are defined yet
self.fields['country_code'].choices = [('966', 'Saudi Arabia (+966)')]
self.fields['country_code'].initial = '966'
for field in self.fields.values():
if not isinstance(field.widget, (forms.CheckboxInput, forms.Select)):
field.widget.attrs.update({'class': 'form-control'})
def clean(self):
cleaned_data = super().clean()
email = cleaned_data.get("email")
confirm_email = cleaned_data.get("confirm_email")
if email and confirm_email and email != confirm_email:
self.add_error('confirm_email', _("The two email fields didn't match."))
return cleaned_data
class TruckForm(forms.ModelForm):
class Meta:
model = Truck
fields = [
'truck_type', 'truck_type_ar', 'model', 'model_ar', 'year', 'plate_no',
'load_capacity', 'load_capacity_ar', 'color', 'color_ar', 'registration_expiry_date',
'truck_picture', 'registration_front', 'registration_back', 'driver_license'
]
widgets = {
'truck_type': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('e.g. Flatbed')}),
'truck_type_ar': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('مثلا سطحة')}),
'model': forms.TextInput(attrs={'class': 'form-control'}),
'model_ar': forms.TextInput(attrs={'class': 'form-control'}),
'year': forms.NumberInput(attrs={'class': 'form-control'}),
'plate_no': forms.TextInput(attrs={'class': 'form-control'}),
'load_capacity': forms.TextInput(attrs={'class': 'form-control'}),
'load_capacity_ar': forms.TextInput(attrs={'class': 'form-control'}),
'color': forms.TextInput(attrs={'class': 'form-control'}),
'color_ar': forms.TextInput(attrs={'class': 'form-control'}),
'registration_expiry_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
'truck_picture': forms.FileInput(attrs={'class': 'form-control'}),
'registration_front': forms.FileInput(attrs={'class': 'form-control'}),
'registration_back': forms.FileInput(attrs={'class': 'form-control'}),
'driver_license': forms.FileInput(attrs={'class': 'form-control'}),
}
class ShipmentForm(forms.ModelForm):
class Meta:
model = Shipment
fields = ['description', 'weight', 'origin', 'destination', 'delivery_date']
widgets = {
'description': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
'weight': forms.TextInput(attrs={'class': 'form-control'}),
'origin': forms.TextInput(attrs={'class': 'form-control'}),
'destination': forms.TextInput(attrs={'class': 'form-control'}),
'delivery_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
}
class BidForm(forms.ModelForm):
class Meta:
model = Bid
fields = ['truck', 'amount', 'comments']
widgets = {
'truck': forms.Select(attrs={'class': 'form-select'}),
'amount': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01'}),
'comments': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
}
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super().__init__(*args, **kwargs)
if user:
# Only allow bidding with approved trucks
self.fields['truck'].queryset = Truck.objects.filter(owner=user, is_approved=True)
if not self.fields['truck'].queryset.exists():
self.fields['truck'].help_text = _("You must have an approved truck to place a bid.")