adding thwani gateway
This commit is contained in:
parent
f69cb03bdb
commit
0e850fd80b
Binary file not shown.
@ -189,3 +189,5 @@ if EMAIL_USE_SSL:
|
|||||||
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
|
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
|
||||||
|
|
||||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||||
|
LOGIN_REDIRECT_URL = 'dashboard'
|
||||||
|
LOGOUT_REDIRECT_URL = 'index'
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from .models import Profile
|
from .models import Profile, Parcel
|
||||||
|
|
||||||
class UserRegistrationForm(forms.ModelForm):
|
class UserRegistrationForm(forms.ModelForm):
|
||||||
password = forms.CharField(widget=forms.PasswordInput, label=_("Password"))
|
password = forms.CharField(widget=forms.PasswordInput, label=_("Password"))
|
||||||
@ -37,3 +37,24 @@ class UserRegistrationForm(forms.ModelForm):
|
|||||||
phone_number=self.cleaned_data['phone_number']
|
phone_number=self.cleaned_data['phone_number']
|
||||||
)
|
)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
class ParcelForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Parcel
|
||||||
|
fields = ['description', 'weight', 'pickup_address', 'delivery_address', 'receiver_name', 'receiver_phone']
|
||||||
|
widgets = {
|
||||||
|
'description': forms.Textarea(attrs={'rows': 3, 'class': 'form-control', 'placeholder': _('What are you sending?')}),
|
||||||
|
'weight': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.1'}),
|
||||||
|
'pickup_address': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('123 Street, City')}),
|
||||||
|
'delivery_address': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('456 Avenue, City')}),
|
||||||
|
'receiver_name': forms.TextInput(attrs={'class': 'form-control'}),
|
||||||
|
'receiver_phone': forms.TextInput(attrs={'class': 'form-control'}),
|
||||||
|
}
|
||||||
|
labels = {
|
||||||
|
'description': _('Package Description'),
|
||||||
|
'weight': _('Weight (kg)'),
|
||||||
|
'pickup_address': _('Pickup Address'),
|
||||||
|
'delivery_address': _('Delivery Address'),
|
||||||
|
'receiver_name': _('Receiver Name'),
|
||||||
|
'receiver_phone': _('Receiver Phone'),
|
||||||
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
{% load i18n static %}
|
{% load i18n static i18n_urls %}
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
{% get_language_info for LANGUAGE_CODE as lang %}
|
{% get_language_info for LANGUAGE_CODE as lang %}
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
@ -39,6 +39,10 @@
|
|||||||
margin-left: auto !important;
|
margin-left: auto !important;
|
||||||
margin-right: 0 !important;
|
margin-right: 0 !important;
|
||||||
}
|
}
|
||||||
|
.dropdown-menu-end {
|
||||||
|
left: 0 !important;
|
||||||
|
right: auto !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@ -58,6 +62,9 @@
|
|||||||
<a class="nav-link px-3" href="{% url 'index' %}#how-it-works">{% trans "How it Works" %}</a>
|
<a class="nav-link px-3" href="{% url 'index' %}#how-it-works">{% trans "How it Works" %}</a>
|
||||||
</li>
|
</li>
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link px-3" href="{% url 'dashboard' %}">{% trans "Dashboard" %}</a>
|
||||||
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<span class="nav-link text-white-50">{% trans "Hello" %}, {{ user.username }}</span>
|
<span class="nav-link text-white-50">{% trans "Hello" %}, {{ user.username }}</span>
|
||||||
</li>
|
</li>
|
||||||
@ -84,9 +91,10 @@
|
|||||||
{% get_available_languages as LANGUAGES %}
|
{% get_available_languages as LANGUAGES %}
|
||||||
{% for lang_code, lang_name in LANGUAGES %}
|
{% for lang_code, lang_name in LANGUAGES %}
|
||||||
<li>
|
<li>
|
||||||
|
{% translate_url lang_code as the_redirect_url %}
|
||||||
<form action="{% url 'set_language' %}" method="post">
|
<form action="{% url 'set_language' %}" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input name="next" type="hidden" value="{{ request.path }}">
|
<input name="next" type="hidden" value="{{ the_redirect_url|default:'/' }}">
|
||||||
<input name="language" type="hidden" value="{{ lang_code }}">
|
<input name="language" type="hidden" value="{{ lang_code }}">
|
||||||
<button type="submit" class="dropdown-item {% if LANGUAGE_CODE == lang_code %}active{% endif %}">
|
<button type="submit" class="dropdown-item {% if LANGUAGE_CODE == lang_code %}active{% endif %}">
|
||||||
{{ lang_name }}
|
{{ lang_name }}
|
||||||
@ -98,13 +106,28 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="nav-item ms-lg-3">
|
<li class="nav-item ms-lg-3">
|
||||||
|
{% if user.is_authenticated and user.profile.role == 'car_owner' %}
|
||||||
|
<a href="{% url 'dashboard' %}" class="btn btn-masarx-primary btn-sm">{% trans "Find Loads" %}</a>
|
||||||
|
{% else %}
|
||||||
<a href="{% url 'shipment_request' %}" class="btn btn-masarx-primary btn-sm">{% trans "Start Shipping" %}</a>
|
<a href="{% url 'shipment_request' %}" class="btn btn-masarx-primary btn-sm">{% trans "Start Shipping" %}</a>
|
||||||
|
{% endif %}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
<div class="container mt-3">
|
||||||
|
{% if messages %}
|
||||||
|
{% for message in messages %}
|
||||||
|
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
|
||||||
|
{{ message }}
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
82
core/templates/core/driver_dashboard.html
Normal file
82
core/templates/core/driver_dashboard.html
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container py-5">
|
||||||
|
<h1 class="mb-4">{% trans "Driver Dashboard" %}</h1>
|
||||||
|
|
||||||
|
<ul class="nav nav-pills mb-4" id="pills-tab" role="tablist">
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link active" id="pills-available-tab" data-bs-toggle="pill" data-bs-target="#pills-available" type="button" role="tab">{% trans "Available Shipments" %}</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link" id="pills-my-tab" data-bs-toggle="pill" data-bs-target="#pills-my" type="button" role="tab">{% trans "My Deliveries" %}</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content" id="pills-tabContent">
|
||||||
|
<!-- Available Shipments -->
|
||||||
|
<div class="tab-pane fade show active" id="pills-available" role="tabpanel">
|
||||||
|
{% if available_parcels %}
|
||||||
|
<div class="row g-4">
|
||||||
|
{% for parcel in available_parcels %}
|
||||||
|
<div class="col-md-6 col-lg-4">
|
||||||
|
<div class="card border-0 shadow-sm h-100" style="border-radius: 15px;">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">{{ parcel.description|truncatechars:30 }}</h5>
|
||||||
|
<p class="card-text mb-1 small"><strong>{% trans "Pickup" %}:</strong> {{ parcel.pickup_address }}</p>
|
||||||
|
<p class="card-text mb-3 small"><strong>{% trans "Delivery" %}:</strong> {{ parcel.delivery_address }}</p>
|
||||||
|
<p class="card-text mb-3 small text-muted"><strong>{% trans "Weight" %}:</strong> {{ parcel.weight }} kg</p>
|
||||||
|
<form action="{% url 'accept_parcel' parcel.id %}" method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
<button type="submit" class="btn btn-masarx-primary w-100">{% trans "Accept Shipment" %}</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<p class="text-center py-5">{% trans "No shipments available at the moment." %}</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- My Deliveries -->
|
||||||
|
<div class="tab-pane fade" id="pills-my" role="tabpanel">
|
||||||
|
{% if my_parcels %}
|
||||||
|
<div class="row g-4">
|
||||||
|
{% for parcel in my_parcels %}
|
||||||
|
<div class="col-md-6 col-lg-4">
|
||||||
|
<div class="card border-0 shadow-sm h-100" style="border-radius: 15px;">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="d-flex justify-content-between mb-2">
|
||||||
|
<span class="badge bg-light text-dark">#{{ parcel.tracking_number }}</span>
|
||||||
|
<span class="badge bg-primary">{{ parcel.get_status_display }}</span>
|
||||||
|
</div>
|
||||||
|
<h5 class="card-title">{{ parcel.description|truncatechars:30 }}</h5>
|
||||||
|
<p class="card-text mb-1 small"><strong>{% trans "To" %}:</strong> {{ parcel.delivery_address }}</p>
|
||||||
|
<p class="card-text mb-3 small"><strong>{% trans "Receiver" %}:</strong> {{ parcel.receiver_name }}</p>
|
||||||
|
|
||||||
|
<form action="{% url 'update_status' parcel.id %}" method="POST" class="d-flex gap-2">
|
||||||
|
{% csrf_token %}
|
||||||
|
<select name="status" class="form-select form-select-sm">
|
||||||
|
{% for code, label in parcel.STATUS_CHOICES %}
|
||||||
|
{% if code != 'pending' and code != 'cancelled' %}
|
||||||
|
<option value="{{ code }}" {% if parcel.status == code %}selected{% endif %}>{{ label }}</option>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
<button type="submit" class="btn btn-sm btn-outline-primary">{% trans "Update" %}</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<p class="text-center py-5">{% trans "You haven't accepted any shipments yet." %}</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
@ -1,37 +1,27 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container py-5">
|
<div class="container py-5">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<div class="card border-0 shadow-sm p-4" style="border-radius: 20px;">
|
<div class="card border-0 shadow-sm p-4" style="border-radius: 20px;">
|
||||||
<h2 class="mb-4">Request a Shipment</h2>
|
<h2 class="mb-4">{% trans "Request a Shipment" %}</h2>
|
||||||
<form method="POST">
|
<form method="POST">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="row g-3">
|
<div class="row g-3">
|
||||||
<div class="col-md-6">
|
{% for field in form %}
|
||||||
<label class="form-label">Pickup Address</label>
|
<div class="{% if field.name == 'description' %}col-12{% else %}col-md-6{% endif %}">
|
||||||
<input type="text" class="form-control" placeholder="123 Street, City" required>
|
<label class="form-label">{{ field.label }}</label>
|
||||||
|
{{ field }}
|
||||||
|
{% if field.errors %}
|
||||||
|
<div class="text-danger small">{{ field.errors }}</div>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
{% endfor %}
|
||||||
<label class="form-label">Delivery Address</label>
|
<div class="col-12 mt-4">
|
||||||
<input type="text" class="form-control" placeholder="456 Avenue, City" required>
|
<button type="submit" class="btn btn-masarx-primary w-100 py-3">{% trans "Submit Request" %}</button>
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
<label class="form-label">Package Description</label>
|
|
||||||
<textarea class="form-control" rows="3" placeholder="What are you sending?"></textarea>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<label class="form-label">Weight (kg)</label>
|
|
||||||
<input type="number" step="0.1" class="form-control" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-8">
|
|
||||||
<label class="form-label">Receiver Name</label>
|
|
||||||
<input type="text" class="form-control" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
<button type="submit" class="btn btn-masarx-primary w-100">Submit Request</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
41
core/templates/core/shipper_dashboard.html
Normal file
41
core/templates/core/shipper_dashboard.html
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container py-5">
|
||||||
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
|
<h1>{% trans "My Shipments" %}</h1>
|
||||||
|
<a href="{% url 'shipment_request' %}" class="btn btn-masarx-primary">{% trans "New Shipment" %}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if parcels %}
|
||||||
|
<div class="row g-4">
|
||||||
|
{% for parcel in parcels %}
|
||||||
|
<div class="col-md-6 col-lg-4">
|
||||||
|
<div class="card border-0 shadow-sm h-100" style="border-radius: 15px;">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="d-flex justify-content-between mb-2">
|
||||||
|
<span class="badge bg-light text-dark">#{{ parcel.tracking_number }}</span>
|
||||||
|
<span class="badge {% if parcel.status == 'delivered' %}bg-success{% elif parcel.status == 'cancelled' %}bg-danger{% else %}bg-warning{% endif %}">
|
||||||
|
{{ parcel.get_status_display }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<h5 class="card-title">{{ parcel.description|truncatechars:30 }}</h5>
|
||||||
|
<p class="card-text mb-1 small text-muted"><i class="fas fa-map-marker-alt"></i> <strong>{% trans "From" %}:</strong> {{ parcel.pickup_address }}</p>
|
||||||
|
<p class="card-text mb-3 small text-muted"><i class="fas fa-flag-checkered"></i> <strong>{% trans "To" %}:</strong> {{ parcel.delivery_address }}</p>
|
||||||
|
<hr>
|
||||||
|
<p class="card-text small mb-0"><strong>{% trans "Receiver" %}:</strong> {{ parcel.receiver_name }}</p>
|
||||||
|
<p class="card-text small"><strong>{% trans "Carrier" %}:</strong> {% if parcel.carrier %}{{ parcel.carrier.get_full_name|default:parcel.carrier.username }}{% else %}{% trans "Waiting for pickup" %}{% endif %}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="text-center py-5">
|
||||||
|
<p class="lead">{% trans "You haven't sent any shipments yet." %}</p>
|
||||||
|
<a href="{% url 'shipment_request' %}" class="btn btn-masarx-primary">{% trans "Send your first shipment" %}</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
0
core/templatetags/__init__.py
Normal file
0
core/templatetags/__init__.py
Normal file
BIN
core/templatetags/__pycache__/__init__.cpython-311.pyc
Normal file
BIN
core/templatetags/__pycache__/__init__.cpython-311.pyc
Normal file
Binary file not shown.
BIN
core/templatetags/__pycache__/i18n_urls.cpython-311.pyc
Normal file
BIN
core/templatetags/__pycache__/i18n_urls.cpython-311.pyc
Normal file
Binary file not shown.
12
core/templatetags/i18n_urls.py
Normal file
12
core/templatetags/i18n_urls.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from django import template
|
||||||
|
from django.urls import translate_url as django_translate_url
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
@register.simple_tag(takes_context=True)
|
||||||
|
def translate_url(context, lang_code):
|
||||||
|
request = context.get('request')
|
||||||
|
if not request:
|
||||||
|
return ''
|
||||||
|
path = request.get_full_path()
|
||||||
|
return django_translate_url(path, lang_code)
|
||||||
@ -7,6 +7,9 @@ urlpatterns = [
|
|||||||
path('register/', views.register, name='register'),
|
path('register/', views.register, name='register'),
|
||||||
path('login/', auth_views.LoginView.as_view(template_name='core/login.html'), name='login'),
|
path('login/', auth_views.LoginView.as_view(template_name='core/login.html'), name='login'),
|
||||||
path('logout/', auth_views.LogoutView.as_view(next_page='index'), name='logout'),
|
path('logout/', auth_views.LogoutView.as_view(next_page='index'), name='logout'),
|
||||||
|
path('dashboard/', views.dashboard, name='dashboard'),
|
||||||
path('shipment-request/', views.shipment_request, name='shipment_request'),
|
path('shipment-request/', views.shipment_request, name='shipment_request'),
|
||||||
path('article-detail/', views.article_detail, name='article_detail'),
|
path('accept-parcel/<int:parcel_id>/', views.accept_parcel, name='accept_parcel'),
|
||||||
|
path('update-status/<int:parcel_id>/', views.update_status, name='update_status'),
|
||||||
|
path('article/', views.article_detail, name='article_detail'),
|
||||||
]
|
]
|
||||||
@ -1,10 +1,11 @@
|
|||||||
from django.shortcuts import render, redirect
|
from django.shortcuts import render, redirect, get_object_or_404
|
||||||
from django.contrib.auth import login, authenticate
|
from django.contrib.auth import login, authenticate, logout
|
||||||
from django.contrib.auth.forms import AuthenticationForm
|
from django.contrib.auth.forms import AuthenticationForm
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from .models import Parcel, Profile
|
from .models import Parcel, Profile
|
||||||
from .forms import UserRegistrationForm
|
from .forms import UserRegistrationForm, ParcelForm
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.contrib import messages
|
||||||
|
|
||||||
def index(request):
|
def index(request):
|
||||||
tracking_id = request.GET.get('tracking_id')
|
tracking_id = request.GET.get('tracking_id')
|
||||||
@ -28,17 +29,67 @@ def register(request):
|
|||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
user = form.save()
|
user = form.save()
|
||||||
login(request, user)
|
login(request, user)
|
||||||
return redirect('index')
|
return redirect('dashboard')
|
||||||
else:
|
else:
|
||||||
form = UserRegistrationForm()
|
form = UserRegistrationForm()
|
||||||
return render(request, 'core/register.html', {'form': form})
|
return render(request, 'core/register.html', {'form': form})
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def dashboard(request):
|
||||||
|
profile = request.user.profile
|
||||||
|
if profile.role == 'shipper':
|
||||||
|
parcels = Parcel.objects.filter(shipper=request.user).order_by('-created_at')
|
||||||
|
return render(request, 'core/shipper_dashboard.html', {'parcels': parcels})
|
||||||
|
else:
|
||||||
|
# Car Owner view
|
||||||
|
available_parcels = Parcel.objects.filter(status='pending').order_by('-created_at')
|
||||||
|
my_parcels = Parcel.objects.filter(carrier=request.user).exclude(status='delivered').order_by('-created_at')
|
||||||
|
return render(request, 'core/driver_dashboard.html', {
|
||||||
|
'available_parcels': available_parcels,
|
||||||
|
'my_parcels': my_parcels
|
||||||
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def shipment_request(request):
|
def shipment_request(request):
|
||||||
|
if request.user.profile.role != 'shipper':
|
||||||
|
messages.error(request, _("Only shippers can request shipments."))
|
||||||
|
return redirect('dashboard')
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
# Logic for creating shipment will go here
|
form = ParcelForm(request.POST)
|
||||||
pass
|
if form.is_valid():
|
||||||
return render(request, 'core/shipment_request.html')
|
parcel = form.save(commit=False)
|
||||||
|
parcel.shipper = request.user
|
||||||
|
parcel.save()
|
||||||
|
messages.success(request, _("Shipment requested successfully! Tracking ID: ") + parcel.tracking_number)
|
||||||
|
return redirect('dashboard')
|
||||||
|
else:
|
||||||
|
form = ParcelForm()
|
||||||
|
return render(request, 'core/shipment_request.html', {'form': form})
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def accept_parcel(request, parcel_id):
|
||||||
|
if request.user.profile.role != 'car_owner':
|
||||||
|
messages.error(request, _("Only car owners can accept shipments."))
|
||||||
|
return redirect('dashboard')
|
||||||
|
|
||||||
|
parcel = get_object_or_404(Parcel, id=parcel_id, status='pending')
|
||||||
|
parcel.carrier = request.user
|
||||||
|
parcel.status = 'picked_up'
|
||||||
|
parcel.save()
|
||||||
|
messages.success(request, _("You have accepted the shipment!"))
|
||||||
|
return redirect('dashboard')
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def update_status(request, parcel_id):
|
||||||
|
parcel = get_object_or_404(Parcel, id=parcel_id, carrier=request.user)
|
||||||
|
if request.method == 'POST':
|
||||||
|
new_status = request.POST.get('status')
|
||||||
|
if new_status in dict(Parcel.STATUS_CHOICES):
|
||||||
|
parcel.status = new_status
|
||||||
|
parcel.save()
|
||||||
|
messages.success(request, _("Status updated successfully!"))
|
||||||
|
return redirect('dashboard')
|
||||||
|
|
||||||
def article_detail(request):
|
def article_detail(request):
|
||||||
return render(request, 'core/article_detail.html')
|
return render(request, 'core/article_detail.html')
|
||||||
Binary file not shown.
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-01-25 07:13+0000\n"
|
"POT-Creation-Date: 2026-01-25 07:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-01-25 07:13+0000\n"
|
"PO-Revision-Date: 2026-01-25 07:13+0000\n"
|
||||||
"Last-Translator: Gemini\n"
|
"Last-Translator: Gemini\n"
|
||||||
"Language-Team: Arabic\n"
|
"Language-Team: Arabic\n"
|
||||||
@ -54,6 +54,42 @@ msgstr "اسم العائلة"
|
|||||||
msgid "Passwords don't match"
|
msgid "Passwords don't match"
|
||||||
msgstr "كلمات المرور غير متطابقة"
|
msgstr "كلمات المرور غير متطابقة"
|
||||||
|
|
||||||
|
#: core/forms.py:46
|
||||||
|
msgid "What are you sending?"
|
||||||
|
msgstr "ماذا سترسل؟"
|
||||||
|
|
||||||
|
#: core/forms.py:48
|
||||||
|
msgid "123 Street, City"
|
||||||
|
msgstr "123 شارع، مدينة"
|
||||||
|
|
||||||
|
#: core/forms.py:49
|
||||||
|
msgid "456 Avenue, City"
|
||||||
|
msgstr "456 جادة، مدينة"
|
||||||
|
|
||||||
|
#: core/forms.py:54
|
||||||
|
msgid "Package Description"
|
||||||
|
msgstr "وصف الطرد"
|
||||||
|
|
||||||
|
#: core/forms.py:55 core/models.py:36
|
||||||
|
msgid "Weight (kg)"
|
||||||
|
msgstr "الوزن (كجم)"
|
||||||
|
|
||||||
|
#: core/forms.py:56 core/models.py:38
|
||||||
|
msgid "Pickup Address"
|
||||||
|
msgstr "عنوان الاستلام"
|
||||||
|
|
||||||
|
#: core/forms.py:57 core/models.py:39
|
||||||
|
msgid "Delivery Address"
|
||||||
|
msgstr "عنوان التوصيل"
|
||||||
|
|
||||||
|
#: core/forms.py:58 core/models.py:41
|
||||||
|
msgid "Receiver Name"
|
||||||
|
msgstr "اسم المستلم"
|
||||||
|
|
||||||
|
#: core/forms.py:59 core/models.py:42
|
||||||
|
msgid "Receiver Phone"
|
||||||
|
msgstr "هاتف المستلم"
|
||||||
|
|
||||||
#: core/models.py:8 core/models.py:32
|
#: core/models.py:8 core/models.py:32
|
||||||
msgid "Shipper"
|
msgid "Shipper"
|
||||||
msgstr "شاحن"
|
msgstr "شاحن"
|
||||||
@ -102,7 +138,7 @@ msgstr "ملغي"
|
|||||||
msgid "Tracking Number"
|
msgid "Tracking Number"
|
||||||
msgstr "رقم التتبع"
|
msgstr "رقم التتبع"
|
||||||
|
|
||||||
#: core/models.py:33
|
#: core/models.py:33 core/templates/core/shipper_dashboard.html:28
|
||||||
msgid "Carrier"
|
msgid "Carrier"
|
||||||
msgstr "الناقل"
|
msgstr "الناقل"
|
||||||
|
|
||||||
@ -110,30 +146,10 @@ msgstr "الناقل"
|
|||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "الوصف"
|
msgstr "الوصف"
|
||||||
|
|
||||||
#: core/models.py:36
|
|
||||||
msgid "Weight (kg)"
|
|
||||||
msgstr "الوزن (كجم)"
|
|
||||||
|
|
||||||
#: core/models.py:36
|
#: core/models.py:36
|
||||||
msgid "Weight in kg"
|
msgid "Weight in kg"
|
||||||
msgstr "الوزن بالكيلوجرام"
|
msgstr "الوزن بالكيلوجرام"
|
||||||
|
|
||||||
#: core/models.py:38
|
|
||||||
msgid "Pickup Address"
|
|
||||||
msgstr "عنوان الاستلام"
|
|
||||||
|
|
||||||
#: core/models.py:39
|
|
||||||
msgid "Delivery Address"
|
|
||||||
msgstr "عنوان التوصيل"
|
|
||||||
|
|
||||||
#: core/models.py:41
|
|
||||||
msgid "Receiver Name"
|
|
||||||
msgstr "اسم المستلم"
|
|
||||||
|
|
||||||
#: core/models.py:42
|
|
||||||
msgid "Receiver Phone"
|
|
||||||
msgstr "هاتف المستلم"
|
|
||||||
|
|
||||||
#: core/models.py:44 core/templates/core/index.html:30
|
#: core/models.py:44 core/templates/core/index.html:30
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr "الحالة"
|
msgstr "الحالة"
|
||||||
@ -158,35 +174,94 @@ msgstr "طرود"
|
|||||||
msgid "Small Shipments, Smart Delivery"
|
msgid "Small Shipments, Smart Delivery"
|
||||||
msgstr "شحنات صغيرة، توصيل ذكي"
|
msgstr "شحنات صغيرة، توصيل ذكي"
|
||||||
|
|
||||||
#: core/templates/base.html:58
|
#: core/templates/base.html:62
|
||||||
msgid "How it Works"
|
msgid "How it Works"
|
||||||
msgstr "كيف يعمل"
|
msgstr "كيف يعمل"
|
||||||
|
|
||||||
#: core/templates/base.html:62
|
#: core/templates/base.html:66
|
||||||
|
msgid "Dashboard"
|
||||||
|
msgstr "لوحة التحكم"
|
||||||
|
|
||||||
|
#: core/templates/base.html:69
|
||||||
msgid "Hello"
|
msgid "Hello"
|
||||||
msgstr "مرحباً"
|
msgstr "مرحباً"
|
||||||
|
|
||||||
#: core/templates/base.html:67
|
#: core/templates/base.html:74
|
||||||
msgid "Logout"
|
msgid "Logout"
|
||||||
msgstr "تسجيل الخروج"
|
msgstr "تسجيل الخروج"
|
||||||
|
|
||||||
#: core/templates/base.html:72 core/templates/core/login.html:4
|
#: core/templates/base.html:79 core/templates/core/login.html:4
|
||||||
#: core/templates/core/login.html:25
|
#: core/templates/core/login.html:25
|
||||||
msgid "Login"
|
msgid "Login"
|
||||||
msgstr "تسجيل الدخول"
|
msgstr "تسجيل الدخول"
|
||||||
|
|
||||||
#: core/templates/base.html:75 core/templates/core/register.html:4
|
#: core/templates/base.html:82 core/templates/core/register.html:4
|
||||||
msgid "Register"
|
msgid "Register"
|
||||||
msgstr "تسجيل"
|
msgstr "تسجيل"
|
||||||
|
|
||||||
#: core/templates/base.html:101 core/templates/core/index.html:13
|
#: core/templates/base.html:110
|
||||||
|
msgid "Find Loads"
|
||||||
|
msgstr "البحث عن شحنات"
|
||||||
|
|
||||||
|
#: core/templates/base.html:112 core/templates/core/index.html:13
|
||||||
msgid "Start Shipping"
|
msgid "Start Shipping"
|
||||||
msgstr "ابدأ الشحن"
|
msgstr "ابدأ الشحن"
|
||||||
|
|
||||||
#: core/templates/base.html:114
|
#: core/templates/base.html:137
|
||||||
msgid "All rights reserved."
|
msgid "All rights reserved."
|
||||||
msgstr "جميع الحقوق محفوظة."
|
msgstr "جميع الحقوق محفوظة."
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:6
|
||||||
|
msgid "Driver Dashboard"
|
||||||
|
msgstr "لوحة تحكم السائق"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:10
|
||||||
|
msgid "Available Shipments"
|
||||||
|
msgstr "الشحنات المتوفرة"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:13
|
||||||
|
msgid "My Deliveries"
|
||||||
|
msgstr "توصيلاتي"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:27
|
||||||
|
msgid "Pickup"
|
||||||
|
msgstr "الاستلام"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:28
|
||||||
|
msgid "Delivery"
|
||||||
|
msgstr "التوصيل"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:29
|
||||||
|
msgid "Weight"
|
||||||
|
msgstr "الوزن"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:32
|
||||||
|
msgid "Accept Shipment"
|
||||||
|
msgstr "قبول الشحنة"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:40
|
||||||
|
msgid "No shipments available at the moment."
|
||||||
|
msgstr "لا توجد شحنات متوفرة حالياً."
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:57
|
||||||
|
#: core/templates/core/index.html:35
|
||||||
|
#: core/templates/core/shipper_dashboard.html:25
|
||||||
|
msgid "To"
|
||||||
|
msgstr "إلى"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:58
|
||||||
|
#: core/templates/core/shipper_dashboard.html:27
|
||||||
|
msgid "Receiver"
|
||||||
|
msgstr "المستلم"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:69
|
||||||
|
msgid "Update"
|
||||||
|
msgstr "تحديث"
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:77
|
||||||
|
msgid "You haven't accepted any shipments yet."
|
||||||
|
msgstr "لم تقبل أي شحنات بعد."
|
||||||
|
|
||||||
#: core/templates/core/index.html:10
|
#: core/templates/core/index.html:10
|
||||||
msgid "Small Shipments,"
|
msgid "Small Shipments,"
|
||||||
msgstr "شحنات صغيرة،"
|
msgstr "شحنات صغيرة،"
|
||||||
@ -199,7 +274,9 @@ msgstr "توصيل ذكي."
|
|||||||
msgid ""
|
msgid ""
|
||||||
"masarX connects shippers with local car owners for fast, reliable, and "
|
"masarX connects shippers with local car owners for fast, reliable, and "
|
||||||
"trackable deliveries. Your cargo, our priority."
|
"trackable deliveries. Your cargo, our priority."
|
||||||
msgstr "يربط مسارX بين الشاحنين وأصحاب السيارات المحليين لتوصيل سريع وموثوق وقابل للتتبع. شحنتك هي أولويتنا."
|
msgstr ""
|
||||||
|
"يربط مسارX بين الشاحنين وأصحاب السيارات المحليين لتوصيل سريع وموثوق وقابل "
|
||||||
|
"للتتبع. شحنتك هي أولويتنا."
|
||||||
|
|
||||||
#: core/templates/core/index.html:14
|
#: core/templates/core/index.html:14
|
||||||
msgid "Learn More"
|
msgid "Learn More"
|
||||||
@ -218,13 +295,10 @@ msgid "Track"
|
|||||||
msgstr "تتبع"
|
msgstr "تتبع"
|
||||||
|
|
||||||
#: core/templates/core/index.html:34
|
#: core/templates/core/index.html:34
|
||||||
|
#: core/templates/core/shipper_dashboard.html:24
|
||||||
msgid "From"
|
msgid "From"
|
||||||
msgstr "من"
|
msgstr "من"
|
||||||
|
|
||||||
#: core/templates/core/index.html:35
|
|
||||||
msgid "To"
|
|
||||||
msgstr "إلى"
|
|
||||||
|
|
||||||
#: core/templates/core/index.html:42
|
#: core/templates/core/index.html:42
|
||||||
msgid "Enter your 10-character tracking ID to see live updates."
|
msgid "Enter your 10-character tracking ID to see live updates."
|
||||||
msgstr "أدخل رقم التتبع المكون من 10 أرقام لرؤية التحديثات المباشرة."
|
msgstr "أدخل رقم التتبع المكون من 10 أرقام لرؤية التحديثات المباشرة."
|
||||||
@ -311,6 +385,54 @@ msgstr "لديك حساب بالفعل؟"
|
|||||||
msgid "Login here"
|
msgid "Login here"
|
||||||
msgstr "سجل دخولك هنا"
|
msgstr "سجل دخولك هنا"
|
||||||
|
|
||||||
#: core/views.py:17
|
#: core/templates/core/shipment_request.html:10
|
||||||
|
msgid "Request a Shipment"
|
||||||
|
msgstr "طلب شحنة"
|
||||||
|
|
||||||
|
#: core/templates/core/shipment_request.html:24
|
||||||
|
msgid "Submit Request"
|
||||||
|
msgstr "إرسال الطلب"
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:7
|
||||||
|
msgid "My Shipments"
|
||||||
|
msgstr "شحناتي"
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:8
|
||||||
|
msgid "New Shipment"
|
||||||
|
msgstr "شحنة جديدة"
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:28
|
||||||
|
msgid "Waiting for pickup"
|
||||||
|
msgstr "في انتظار الاستلام"
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:36
|
||||||
|
msgid "You haven't sent any shipments yet."
|
||||||
|
msgstr "لم ترسل أي شحنات بعد."
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:37
|
||||||
|
msgid "Send your first shipment"
|
||||||
|
msgstr "أرسل أول شحنة لك"
|
||||||
|
|
||||||
|
#: core/views.py:18
|
||||||
msgid "Parcel not found."
|
msgid "Parcel not found."
|
||||||
msgstr "الطرد غير موجود."
|
msgstr "الطرد غير موجود."
|
||||||
|
|
||||||
|
#: core/views.py:55
|
||||||
|
msgid "Only shippers can request shipments."
|
||||||
|
msgstr "فقط الشاحنين يمكنهم طلب شحنات."
|
||||||
|
|
||||||
|
#: core/views.py:64
|
||||||
|
msgid "Shipment requested successfully! Tracking ID: "
|
||||||
|
msgstr "تم طلب الشحنة بنجاح! رقم التتبع: "
|
||||||
|
|
||||||
|
#: core/views.py:73
|
||||||
|
msgid "Only car owners can accept shipments."
|
||||||
|
msgstr "فقط أصحاب السيارات يمكنهم قبول الشحنات."
|
||||||
|
|
||||||
|
#: core/views.py:80
|
||||||
|
msgid "You have accepted the shipment!"
|
||||||
|
msgstr "لقد قبلت الشحنة!"
|
||||||
|
|
||||||
|
#: core/views.py:91
|
||||||
|
msgid "Status updated successfully!"
|
||||||
|
msgstr "تم تحديث الحالة بنجاح!"
|
||||||
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-01-25 07:13+0000\n"
|
"POT-Creation-Date: 2026-01-25 07:25+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -17,6 +17,7 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: core/forms.py:7
|
#: core/forms.py:7
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -53,6 +54,42 @@ msgstr ""
|
|||||||
msgid "Passwords don't match"
|
msgid "Passwords don't match"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/forms.py:46
|
||||||
|
msgid "What are you sending?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/forms.py:48
|
||||||
|
msgid "123 Street, City"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/forms.py:49
|
||||||
|
msgid "456 Avenue, City"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/forms.py:54
|
||||||
|
msgid "Package Description"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/forms.py:55 core/models.py:36
|
||||||
|
msgid "Weight (kg)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/forms.py:56 core/models.py:38
|
||||||
|
msgid "Pickup Address"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/forms.py:57 core/models.py:39
|
||||||
|
msgid "Delivery Address"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/forms.py:58 core/models.py:41
|
||||||
|
msgid "Receiver Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/forms.py:59 core/models.py:42
|
||||||
|
msgid "Receiver Phone"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: core/models.py:8 core/models.py:32
|
#: core/models.py:8 core/models.py:32
|
||||||
msgid "Shipper"
|
msgid "Shipper"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -101,7 +138,7 @@ msgstr ""
|
|||||||
msgid "Tracking Number"
|
msgid "Tracking Number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/models.py:33
|
#: core/models.py:33 core/templates/core/shipper_dashboard.html:28
|
||||||
msgid "Carrier"
|
msgid "Carrier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -109,30 +146,10 @@ msgstr ""
|
|||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/models.py:36
|
|
||||||
msgid "Weight (kg)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: core/models.py:36
|
#: core/models.py:36
|
||||||
msgid "Weight in kg"
|
msgid "Weight in kg"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/models.py:38
|
|
||||||
msgid "Pickup Address"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: core/models.py:39
|
|
||||||
msgid "Delivery Address"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: core/models.py:41
|
|
||||||
msgid "Receiver Name"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: core/models.py:42
|
|
||||||
msgid "Receiver Phone"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: core/models.py:44 core/templates/core/index.html:30
|
#: core/models.py:44 core/templates/core/index.html:30
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -157,35 +174,94 @@ msgstr ""
|
|||||||
msgid "Small Shipments, Smart Delivery"
|
msgid "Small Shipments, Smart Delivery"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/base.html:58
|
#: core/templates/base.html:62
|
||||||
msgid "How it Works"
|
msgid "How it Works"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/base.html:62
|
#: core/templates/base.html:66
|
||||||
|
msgid "Dashboard"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/base.html:69
|
||||||
msgid "Hello"
|
msgid "Hello"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/base.html:67
|
#: core/templates/base.html:74
|
||||||
msgid "Logout"
|
msgid "Logout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/base.html:72 core/templates/core/login.html:4
|
#: core/templates/base.html:79 core/templates/core/login.html:4
|
||||||
#: core/templates/core/login.html:25
|
#: core/templates/core/login.html:25
|
||||||
msgid "Login"
|
msgid "Login"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/base.html:75 core/templates/core/register.html:4
|
#: core/templates/base.html:82 core/templates/core/register.html:4
|
||||||
msgid "Register"
|
msgid "Register"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/base.html:101 core/templates/core/index.html:13
|
#: core/templates/base.html:110
|
||||||
|
msgid "Find Loads"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/base.html:112 core/templates/core/index.html:13
|
||||||
msgid "Start Shipping"
|
msgid "Start Shipping"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/base.html:114
|
#: core/templates/base.html:137
|
||||||
msgid "All rights reserved."
|
msgid "All rights reserved."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:6
|
||||||
|
msgid "Driver Dashboard"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:10
|
||||||
|
msgid "Available Shipments"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:13
|
||||||
|
msgid "My Deliveries"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:27
|
||||||
|
msgid "Pickup"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:28
|
||||||
|
msgid "Delivery"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:29
|
||||||
|
msgid "Weight"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:32
|
||||||
|
msgid "Accept Shipment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:40
|
||||||
|
msgid "No shipments available at the moment."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:57
|
||||||
|
#: core/templates/core/index.html:35
|
||||||
|
#: core/templates/core/shipper_dashboard.html:25
|
||||||
|
msgid "To"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:58
|
||||||
|
#: core/templates/core/shipper_dashboard.html:27
|
||||||
|
msgid "Receiver"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:69
|
||||||
|
msgid "Update"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/driver_dashboard.html:77
|
||||||
|
msgid "You haven't accepted any shipments yet."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/core/index.html:10
|
#: core/templates/core/index.html:10
|
||||||
msgid "Small Shipments,"
|
msgid "Small Shipments,"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -217,13 +293,10 @@ msgid "Track"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/core/index.html:34
|
#: core/templates/core/index.html:34
|
||||||
|
#: core/templates/core/shipper_dashboard.html:24
|
||||||
msgid "From"
|
msgid "From"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/templates/core/index.html:35
|
|
||||||
msgid "To"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: core/templates/core/index.html:42
|
#: core/templates/core/index.html:42
|
||||||
msgid "Enter your 10-character tracking ID to see live updates."
|
msgid "Enter your 10-character tracking ID to see live updates."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -310,6 +383,54 @@ msgstr ""
|
|||||||
msgid "Login here"
|
msgid "Login here"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core/views.py:17
|
#: core/templates/core/shipment_request.html:10
|
||||||
|
msgid "Request a Shipment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/shipment_request.html:24
|
||||||
|
msgid "Submit Request"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:7
|
||||||
|
msgid "My Shipments"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:8
|
||||||
|
msgid "New Shipment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:28
|
||||||
|
msgid "Waiting for pickup"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:36
|
||||||
|
msgid "You haven't sent any shipments yet."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/templates/core/shipper_dashboard.html:37
|
||||||
|
msgid "Send your first shipment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/views.py:18
|
||||||
msgid "Parcel not found."
|
msgid "Parcel not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/views.py:55
|
||||||
|
msgid "Only shippers can request shipments."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/views.py:64
|
||||||
|
msgid "Shipment requested successfully! Tracking ID: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/views.py:73
|
||||||
|
msgid "Only car owners can accept shipments."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/views.py:80
|
||||||
|
msgid "You have accepted the shipment!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core/views.py:91
|
||||||
|
msgid "Status updated successfully!"
|
||||||
|
msgstr ""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user