change21
This commit is contained in:
parent
066a111def
commit
b15b95317d
Binary file not shown.
Binary file not shown.
@ -66,7 +66,7 @@ class TruckForm(forms.ModelForm):
|
|||||||
fields = [
|
fields = [
|
||||||
'truck_type_link', 'model', 'model_ar', 'year', 'plate_no',
|
'truck_type_link', 'model', 'model_ar', 'year', 'plate_no',
|
||||||
'load_capacity', 'load_capacity_ar', 'color', 'color_ar', 'registration_expiry_date',
|
'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 = {
|
widgets = {
|
||||||
'truck_type_link': forms.Select(attrs={'class': 'form-select'}),
|
'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'}),
|
'truck_picture': forms.FileInput(attrs={'class': 'form-control'}),
|
||||||
'registration_front': forms.FileInput(attrs={'class': 'form-control'}),
|
'registration_front': forms.FileInput(attrs={'class': 'form-control'}),
|
||||||
'registration_back': 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):
|
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'}))
|
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'}))
|
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}))
|
||||||
27
core/migrations/0012_remove_truck_driver_license_and_more.py
Normal file
27
core/migrations/0012_remove_truck_driver_license_and_more.py
Normal 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)'),
|
||||||
|
),
|
||||||
|
]
|
||||||
Binary file not shown.
@ -109,7 +109,8 @@ class Truck(models.Model):
|
|||||||
truck_picture = models.ImageField(_('Truck Picture'), upload_to='trucks/', blank=True, null=True)
|
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_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)
|
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)
|
is_approved = models.BooleanField(_('Is Approved'), default=False)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
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)
|
instance.user.groups.remove(*other_groups)
|
||||||
|
|
||||||
# Add user to the correct group
|
# Add user to the correct group
|
||||||
instance.user.groups.add(group)
|
instance.user.groups.add(group)
|
||||||
|
|||||||
@ -87,7 +87,8 @@
|
|||||||
data-truck-picture="{% if truck.truck_picture %}{{ truck.truck_picture.url }}{% endif %}"
|
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-front="{% if truck.registration_front %}{{ truck.registration_front.url }}{% endif %}"
|
||||||
data-reg-back="{% if truck.registration_back %}{{ truck.registration_back.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" %}
|
<i class="fa-solid fa-eye me-1"></i> {% trans "View" %}
|
||||||
</button>
|
</button>
|
||||||
<a href="{% url 'approve_truck' truck.id %}" class="btn btn-success btn-sm">
|
<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-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-front="{% if truck.registration_front %}{{ truck.registration_front.url }}{% endif %}"
|
||||||
data-reg-back="{% if truck.registration_back %}{{ truck.registration_back.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" %}
|
<i class="fa-solid fa-eye me-1"></i> {% trans "View" %}
|
||||||
</button>
|
</button>
|
||||||
<a href="{% url 'suspend_truck' truck.id %}" class="btn btn-outline-danger btn-sm">
|
<a href="{% url 'suspend_truck' truck.id %}" class="btn btn-outline-danger btn-sm">
|
||||||
@ -166,7 +168,7 @@
|
|||||||
|
|
||||||
<!-- Truck Details Modal -->
|
<!-- Truck Details Modal -->
|
||||||
<div class="modal fade" id="truckDetailsModal" tabindex="-1" aria-labelledby="truckDetailsModalLabel" aria-hidden="true">
|
<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-content border-0 shadow">
|
||||||
<div class="modal-header bg-primary text-white">
|
<div class="modal-header bg-primary text-white">
|
||||||
<h5 class="modal-title fw-bold" id="truckDetailsModalLabel">{% trans "Truck Details" %}</h5>
|
<h5 class="modal-title fw-bold" id="truckDetailsModalLabel">{% trans "Truck Details" %}</h5>
|
||||||
@ -222,7 +224,7 @@
|
|||||||
<hr class="my-4">
|
<hr class="my-4">
|
||||||
<h6 class="fw-bold text-primary mb-3">{% trans "Documents & Registration" %}</h6>
|
<h6 class="fw-bold text-primary mb-3">{% trans "Documents & Registration" %}</h6>
|
||||||
<div class="row g-3">
|
<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>
|
<p class="small text-muted mb-1">{% trans "Registration Front" %}</p>
|
||||||
<div class="bg-light rounded text-center p-2">
|
<div class="bg-light rounded text-center p-2">
|
||||||
<a id="modal-reg-front-link" href="#" target="_blank">
|
<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>
|
<p id="no-reg-front" class="text-muted py-3 mb-0" style="display: none;">{% trans "Not available" %}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-3">
|
||||||
<p class="small text-muted mb-1">{% trans "Registration Back" %}</p>
|
<p class="small text-muted mb-1">{% trans "Registration Back" %}</p>
|
||||||
<div class="bg-light rounded text-center p-2">
|
<div class="bg-light rounded text-center p-2">
|
||||||
<a id="modal-reg-back-link" href="#" target="_blank">
|
<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>
|
<p id="no-reg-back" class="text-muted py-3 mb-0" style="display: none;">{% trans "Not available" %}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-3">
|
||||||
<p class="small text-muted mb-1">{% trans "Driver License" %}</p>
|
<p class="small text-muted mb-1">{% trans "License Front" %}</p>
|
||||||
<div class="bg-light rounded text-center p-2">
|
<div class="bg-light rounded text-center p-2">
|
||||||
<a id="modal-license-link" href="#" target="_blank">
|
<a id="modal-license-front-link" href="#" target="_blank">
|
||||||
<img id="modal-license-img" src="" alt="License" class="img-fluid rounded" style="max-height: 120px; display: none;">
|
<img id="modal-license-front-img" src="" alt="License Front" class="img-fluid rounded" style="max-height: 120px; display: none;">
|
||||||
</a>
|
</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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -326,7 +337,8 @@
|
|||||||
{ id: 'modal-truck-img', noId: 'no-truck-img', src: data.truckPicture },
|
{ 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-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-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 => {
|
imgFields.forEach(field => {
|
||||||
@ -366,4 +378,4 @@
|
|||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@ -101,7 +101,7 @@
|
|||||||
<h5>{% trans "Documents & Photos" %}</h5>
|
<h5>{% trans "Documents & Photos" %}</h5>
|
||||||
|
|
||||||
<div class="row {% if CURRENT_LANGUAGE == "ar" %}flex-row-reverse{% endif %}">
|
<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>
|
<label class="form-label">{% trans "Truck Picture" %}</label>
|
||||||
{% if truck.truck_picture %}
|
{% if truck.truck_picture %}
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
@ -111,17 +111,31 @@
|
|||||||
{{ form.truck_picture }}
|
{{ form.truck_picture }}
|
||||||
{{ form.truck_picture.errors }}
|
{{ form.truck_picture.errors }}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row {% if CURRENT_LANGUAGE == "ar" %}flex-row-reverse{% endif %}">
|
||||||
<div class="col-md-6 mb-3">
|
<div class="col-md-6 mb-3">
|
||||||
<label class="form-label">{% trans "Driver License" %}</label>
|
<label class="form-label">{% trans "Driver License (Front Face)" %}</label>
|
||||||
{% if truck.driver_license %}
|
{% if truck.driver_license_front %}
|
||||||
<div class="mb-2">
|
<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>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{{ form.driver_license }}
|
{{ form.driver_license_front }}
|
||||||
{{ form.driver_license.errors }}
|
{{ 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>
|
</div>
|
||||||
|
|
||||||
<div class="row {% if CURRENT_LANGUAGE == "ar" %}flex-row-reverse{% endif %}">
|
<div class="row {% if CURRENT_LANGUAGE == "ar" %}flex-row-reverse{% endif %}">
|
||||||
<div class="col-md-6 mb-3">
|
<div class="col-md-6 mb-3">
|
||||||
<label class="form-label">{% trans "Registration (Front Face)" %}</label>
|
<label class="form-label">{% trans "Registration (Front Face)" %}</label>
|
||||||
@ -158,4 +172,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
Loading…
x
Reference in New Issue
Block a user