diff --git a/core/__pycache__/forms.cpython-311.pyc b/core/__pycache__/forms.cpython-311.pyc index d73f1af..3413c54 100644 Binary files a/core/__pycache__/forms.cpython-311.pyc and b/core/__pycache__/forms.cpython-311.pyc differ diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index cab1269..bd7f79b 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/forms.py b/core/forms.py index f03e4b7..cf0410e 100644 --- a/core/forms.py +++ b/core/forms.py @@ -34,17 +34,21 @@ class TruckForm(forms.ModelForm): class Meta: model = Truck fields = [ - 'truck_type', 'model', 'year', 'plate_no', - 'load_capacity', 'color', 'truck_picture', + 'truck_type', 'truck_type_ar', 'model', 'model_ar', 'year', 'plate_no', + 'load_capacity', 'load_capacity_ar', 'color', 'color_ar', 'truck_picture', 'registration_front', 'registration_back', 'driver_license' ] widgets = { - 'truck_type': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('e.g. Flatbed, Trailer')}), + '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'}), 'truck_picture': forms.FileInput(attrs={'class': 'form-control'}), 'registration_front': forms.FileInput(attrs={'class': 'form-control'}), 'registration_back': forms.FileInput(attrs={'class': 'form-control'}), @@ -80,4 +84,4 @@ class BidForm(forms.ModelForm): # 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.") + self.fields['truck'].help_text = _("You must have an approved truck to place a bid.") \ No newline at end of file diff --git a/core/migrations/0004_truck_color_ar_truck_load_capacity_ar_truck_model_ar_and_more.py b/core/migrations/0004_truck_color_ar_truck_load_capacity_ar_truck_model_ar_and_more.py new file mode 100644 index 0000000..a3a6343 --- /dev/null +++ b/core/migrations/0004_truck_color_ar_truck_load_capacity_ar_truck_model_ar_and_more.py @@ -0,0 +1,53 @@ +# Generated by Django 5.2.7 on 2026-01-23 10:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0003_truck_is_approved'), + ] + + operations = [ + migrations.AddField( + model_name='truck', + name='color_ar', + field=models.CharField(blank=True, max_length=50, verbose_name='Color (AR)'), + ), + migrations.AddField( + model_name='truck', + name='load_capacity_ar', + field=models.CharField(blank=True, max_length=100, verbose_name='Load Capacity (AR)'), + ), + migrations.AddField( + model_name='truck', + name='model_ar', + field=models.CharField(blank=True, max_length=100, verbose_name='Model (AR)'), + ), + migrations.AddField( + model_name='truck', + name='truck_type_ar', + field=models.CharField(blank=True, max_length=100, verbose_name='Truck Type (AR)'), + ), + migrations.AlterField( + model_name='truck', + name='color', + field=models.CharField(max_length=50, verbose_name='Color (EN)'), + ), + migrations.AlterField( + model_name='truck', + name='load_capacity', + field=models.CharField(max_length=100, verbose_name='Load Capacity (EN)'), + ), + migrations.AlterField( + model_name='truck', + name='model', + field=models.CharField(max_length=100, verbose_name='Model (EN)'), + ), + migrations.AlterField( + model_name='truck', + name='truck_type', + field=models.CharField(max_length=100, verbose_name='Truck Type (EN)'), + ), + ] diff --git a/core/migrations/__pycache__/0004_truck_color_ar_truck_load_capacity_ar_truck_model_ar_and_more.cpython-311.pyc b/core/migrations/__pycache__/0004_truck_color_ar_truck_load_capacity_ar_truck_model_ar_and_more.cpython-311.pyc new file mode 100644 index 0000000..da4c22d Binary files /dev/null and b/core/migrations/__pycache__/0004_truck_color_ar_truck_load_capacity_ar_truck_model_ar_and_more.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index f1f1ddc..303973b 100644 --- a/core/models.py +++ b/core/models.py @@ -3,6 +3,7 @@ from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver from django.utils.translation import gettext_lazy as _ +from django.utils.translation import get_language class Profile(models.Model): ROLE_CHOICES = ( @@ -19,12 +20,21 @@ class Profile(models.Model): class Truck(models.Model): owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='trucks') - truck_type = models.CharField(_('Truck Type'), max_length=100) - model = models.CharField(_('Model'), max_length=100) + + # English fields + truck_type = models.CharField(_('Truck Type (EN)'), max_length=100) + model = models.CharField(_('Model (EN)'), max_length=100) + load_capacity = models.CharField(_('Load Capacity (EN)'), max_length=100) + color = models.CharField(_('Color (EN)'), max_length=50) + + # Arabic fields + truck_type_ar = models.CharField(_('Truck Type (AR)'), max_length=100, blank=True) + model_ar = models.CharField(_('Model (AR)'), max_length=100, blank=True) + load_capacity_ar = models.CharField(_('Load Capacity (AR)'), max_length=100, blank=True) + color_ar = models.CharField(_('Color (AR)'), max_length=50, blank=True) + year = models.PositiveIntegerField(_('Year')) plate_no = models.CharField(_('Plate No'), max_length=50) - load_capacity = models.CharField(_('Load Capacity'), max_length=100) - color = models.CharField(_('Color'), max_length=50) # Pictures truck_picture = models.ImageField(_('Truck Picture'), upload_to='trucks/', blank=True, null=True) @@ -36,7 +46,31 @@ class Truck(models.Model): created_at = models.DateTimeField(auto_now_add=True) def __str__(self): - return f"{self.truck_type} - {self.plate_no}" + return f"{self.display_truck_type} - {self.plate_no}" + + @property + def display_truck_type(self): + if get_language() == 'ar' and self.truck_type_ar: + return self.truck_type_ar + return self.truck_type + + @property + def display_model(self): + if get_language() == 'ar' and self.model_ar: + return self.model_ar + return self.model + + @property + def display_load_capacity(self): + if get_language() == 'ar' and self.load_capacity_ar: + return self.load_capacity_ar + return self.load_capacity + + @property + def display_color(self): + if get_language() == 'ar' and self.color_ar: + return self.color_ar + return self.color class Shipment(models.Model): STATUS_CHOICES = ( @@ -97,4 +131,4 @@ def save_user_profile(sender, instance, **kwargs): if hasattr(instance, 'profile'): instance.profile.save() else: - Profile.objects.create(user=instance) \ No newline at end of file + Profile.objects.create(user=instance) diff --git a/core/templates/core/admin_dashboard.html b/core/templates/core/admin_dashboard.html index 3635a52..995f10a 100644 --- a/core/templates/core/admin_dashboard.html +++ b/core/templates/core/admin_dashboard.html @@ -69,19 +69,19 @@ {{ truck.owner.username }}
{{ truck.owner.email }} - {{ truck.truck_type }}
- {{ truck.model }} ({{ truck.year }}) - {{ truck.color }} + {{ truck.display_truck_type }}
+ {{ truck.display_model }} ({{ truck.year }}) - {{ truck.display_color }} {{ truck.plate_no }}