This commit is contained in:
Flatlogic Bot 2026-01-23 16:20:16 +00:00
parent 066a111def
commit b15b95317d
8 changed files with 79 additions and 24 deletions

View File

@ -66,7 +66,7 @@ class TruckForm(forms.ModelForm):
fields = [
'truck_type_link', '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'
'truck_picture', 'registration_front', 'registration_back', 'driver_license_front', 'driver_license_back'
]
widgets = {
'truck_type_link': forms.Select(attrs={'class': 'form-select'}),
@ -82,7 +82,8 @@ class TruckForm(forms.ModelForm):
'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'}),
'driver_license_front': forms.FileInput(attrs={'class': 'form-control'}),
'driver_license_back': forms.FileInput(attrs={'class': 'form-control'}),
}
def __init__(self, *args, **kwargs):
@ -144,4 +145,4 @@ class ShipperOfferForm(forms.Form):
delivery_date = forms.DateField(label=_('Requested Delivery Date'), widget=forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}))
amount = forms.DecimalField(label=_('Offer Amount'), max_digits=10, decimal_places=2, widget=forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01'}))
comments = forms.CharField(label=_('Comments'), required=False, widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 2}))
comments = forms.CharField(label=_('Comments'), required=False, widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 2}))

View File

@ -0,0 +1,27 @@
# Generated by Django 5.2.7 on 2026-01-23 16:15
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0011_trucktype_alter_truck_truck_type_and_more'),
]
operations = [
migrations.RemoveField(
model_name='truck',
name='driver_license',
),
migrations.AddField(
model_name='truck',
name='driver_license_back',
field=models.ImageField(blank=True, null=True, upload_to='docs/', verbose_name='Driver License (Back Face)'),
),
migrations.AddField(
model_name='truck',
name='driver_license_front',
field=models.ImageField(blank=True, null=True, upload_to='docs/', verbose_name='Driver License (Front Face)'),
),
]

View File

@ -109,7 +109,8 @@ class Truck(models.Model):
truck_picture = models.ImageField(_('Truck Picture'), upload_to='trucks/', blank=True, null=True)
registration_front = models.ImageField(_('Registration Front'), upload_to='docs/', blank=True, null=True)
registration_back = models.ImageField(_('Registration Back'), upload_to='docs/', blank=True, null=True)
driver_license = models.ImageField(_('Driver License'), upload_to='docs/', blank=True, null=True)
driver_license_front = models.ImageField(_('Driver License (Front Face)'), upload_to='docs/', blank=True, null=True)
driver_license_back = models.ImageField(_('Driver License (Back Face)'), upload_to='docs/', blank=True, null=True)
is_approved = models.BooleanField(_('Is Approved'), default=False)
created_at = models.DateTimeField(auto_now_add=True)
@ -256,4 +257,4 @@ def sync_user_groups(sender, instance, **kwargs):
instance.user.groups.remove(*other_groups)
# Add user to the correct group
instance.user.groups.add(group)
instance.user.groups.add(group)

View File

@ -87,7 +87,8 @@
data-truck-picture="{% if truck.truck_picture %}{{ truck.truck_picture.url }}{% endif %}"
data-reg-front="{% if truck.registration_front %}{{ truck.registration_front.url }}{% endif %}"
data-reg-back="{% if truck.registration_back %}{{ truck.registration_back.url }}{% endif %}"
data-license="{% if truck.driver_license %}{{ truck.driver_license.url }}{% endif %}">
data-license-front="{% if truck.driver_license_front %}{{ truck.driver_license_front.url }}{% endif %}"
data-license-back="{% if truck.driver_license_back %}{{ truck.driver_license_back.url }}{% endif %}">
<i class="fa-solid fa-eye me-1"></i> {% trans "View" %}
</button>
<a href="{% url 'approve_truck' truck.id %}" class="btn btn-success btn-sm">
@ -145,7 +146,8 @@
data-truck-picture="{% if truck.truck_picture %}{{ truck.truck_picture.url }}{% endif %}"
data-reg-front="{% if truck.registration_front %}{{ truck.registration_front.url }}{% endif %}"
data-reg-back="{% if truck.registration_back %}{{ truck.registration_back.url }}{% endif %}"
data-license="{% if truck.driver_license %}{{ truck.driver_license.url }}{% endif %}">
data-license-front="{% if truck.driver_license_front %}{{ truck.driver_license_front.url }}{% endif %}"
data-license-back="{% if truck.driver_license_back %}{{ truck.driver_license_back.url }}{% endif %}">
<i class="fa-solid fa-eye me-1"></i> {% trans "View" %}
</button>
<a href="{% url 'suspend_truck' truck.id %}" class="btn btn-outline-danger btn-sm">
@ -166,7 +168,7 @@
<!-- Truck Details Modal -->
<div class="modal fade" id="truckDetailsModal" tabindex="-1" aria-labelledby="truckDetailsModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-dialog modal-xl">
<div class="modal-content border-0 shadow">
<div class="modal-header bg-primary text-white">
<h5 class="modal-title fw-bold" id="truckDetailsModalLabel">{% trans "Truck Details" %}</h5>
@ -222,7 +224,7 @@
<hr class="my-4">
<h6 class="fw-bold text-primary mb-3">{% trans "Documents & Registration" %}</h6>
<div class="row g-3">
<div class="col-md-4">
<div class="col-md-3">
<p class="small text-muted mb-1">{% trans "Registration Front" %}</p>
<div class="bg-light rounded text-center p-2">
<a id="modal-reg-front-link" href="#" target="_blank">
@ -231,7 +233,7 @@
<p id="no-reg-front" class="text-muted py-3 mb-0" style="display: none;">{% trans "Not available" %}</p>
</div>
</div>
<div class="col-md-4">
<div class="col-md-3">
<p class="small text-muted mb-1">{% trans "Registration Back" %}</p>
<div class="bg-light rounded text-center p-2">
<a id="modal-reg-back-link" href="#" target="_blank">
@ -240,13 +242,22 @@
<p id="no-reg-back" class="text-muted py-3 mb-0" style="display: none;">{% trans "Not available" %}</p>
</div>
</div>
<div class="col-md-4">
<p class="small text-muted mb-1">{% trans "Driver License" %}</p>
<div class="col-md-3">
<p class="small text-muted mb-1">{% trans "License Front" %}</p>
<div class="bg-light rounded text-center p-2">
<a id="modal-license-link" href="#" target="_blank">
<img id="modal-license-img" src="" alt="License" class="img-fluid rounded" style="max-height: 120px; display: none;">
<a id="modal-license-front-link" href="#" target="_blank">
<img id="modal-license-front-img" src="" alt="License Front" class="img-fluid rounded" style="max-height: 120px; display: none;">
</a>
<p id="no-license" class="text-muted py-3 mb-0" style="display: none;">{% trans "Not available" %}</p>
<p id="no-license-front" class="text-muted py-3 mb-0" style="display: none;">{% trans "Not available" %}</p>
</div>
</div>
<div class="col-md-3">
<p class="small text-muted mb-1">{% trans "License Back" %}</p>
<div class="bg-light rounded text-center p-2">
<a id="modal-license-back-link" href="#" target="_blank">
<img id="modal-license-back-img" src="" alt="License Back" class="img-fluid rounded" style="max-height: 120px; display: none;">
</a>
<p id="no-license-back" class="text-muted py-3 mb-0" style="display: none;">{% trans "Not available" %}</p>
</div>
</div>
</div>
@ -326,7 +337,8 @@
{ id: 'modal-truck-img', noId: 'no-truck-img', src: data.truckPicture },
{ id: 'modal-reg-front-img', noId: 'no-reg-front', src: data.regFront, linkId: 'modal-reg-front-link' },
{ id: 'modal-reg-back-img', noId: 'no-reg-back', src: data.regBack, linkId: 'modal-reg-back-link' },
{ id: 'modal-license-img', noId: 'no-license', src: data.license, linkId: 'modal-license-link' }
{ id: 'modal-license-front-img', noId: 'no-license-front', src: data.licenseFront, linkId: 'modal-license-front-link' },
{ id: 'modal-license-back-img', noId: 'no-license-back', src: data.licenseBack, linkId: 'modal-license-back-link' }
];
imgFields.forEach(field => {
@ -366,4 +378,4 @@
border-bottom: none;
}
</style>
{% endblock %}
{% endblock %}

View File

@ -101,7 +101,7 @@
<h5>{% trans "Documents & Photos" %}</h5>
<div class="row {% if CURRENT_LANGUAGE == "ar" %}flex-row-reverse{% endif %}">
<div class="col-md-6 mb-3">
<div class="col-md-12 mb-3">
<label class="form-label">{% trans "Truck Picture" %}</label>
{% if truck.truck_picture %}
<div class="mb-2">
@ -111,17 +111,31 @@
{{ form.truck_picture }}
{{ form.truck_picture.errors }}
</div>
</div>
<div class="row {% if CURRENT_LANGUAGE == "ar" %}flex-row-reverse{% endif %}">
<div class="col-md-6 mb-3">
<label class="form-label">{% trans "Driver License" %}</label>
{% if truck.driver_license %}
<label class="form-label">{% trans "Driver License (Front Face)" %}</label>
{% if truck.driver_license_front %}
<div class="mb-2">
<img src="{{ truck.driver_license.url }}" class="img-thumbnail" style="height: 100px;">
<img src="{{ truck.driver_license_front.url }}" class="img-thumbnail" style="height: 100px;">
</div>
{% endif %}
{{ form.driver_license }}
{{ form.driver_license.errors }}
{{ form.driver_license_front }}
{{ form.driver_license_front.errors }}
</div>
<div class="col-md-6 mb-3">
<label class="form-label">{% trans "Driver License (Back Face)" %}</label>
{% if truck.driver_license_back %}
<div class="mb-2">
<img src="{{ truck.driver_license_back.url }}" class="img-thumbnail" style="height: 100px;">
</div>
{% endif %}
{{ form.driver_license_back }}
{{ form.driver_license_back.errors }}
</div>
</div>
<div class="row {% if CURRENT_LANGUAGE == "ar" %}flex-row-reverse{% endif %}">
<div class="col-md-6 mb-3">
<label class="form-label">{% trans "Registration (Front Face)" %}</label>
@ -158,4 +172,4 @@
</div>
</div>
</div>
{% endblock %}
{% endblock %}