This commit is contained in:
Flatlogic Bot 2026-01-23 10:05:02 +00:00
parent ba8173f9d8
commit d8246c69a2
5 changed files with 75 additions and 42 deletions

View File

@ -1,6 +1,34 @@
from django import forms
from .models import Truck, Shipment, Bid
from .models import Truck, Shipment, Bid, Profile
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'}))
phone_number = forms.CharField(max_length=20, required=False, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': '+1234567890'}))
class Meta(UserCreationForm.Meta):
model = User
fields = UserCreationForm.Meta.fields + ('email',)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
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:

View File

@ -9,24 +9,34 @@
<div class="card shadow">
<div class="card-body p-5">
<h2 class="text-center mb-4">{% trans "Create your account" %}</h2>
<form method="post">
<form method="post" novalidate>
{% csrf_token %}
{{ form.as_p }}
<div class="mb-3">
<label class="form-label">{% trans "I am a:" %}</label>
<select name="role" class="form-select" required>
<option value="SHIPPER">{% trans "Shipper (Need Goods Moved)" %}</option>
<option value="TRUCK_OWNER">{% trans "Truck Owner (Service Provider)" %}</option>
</select>
</div>
{% if form.non_field_errors %}
<div class="alert alert-danger">
{% for error in form.non_field_errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
{% for field in form %}
<div class="mb-3">
<label class="form-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
{{ field }}
{% if field.help_text %}
<div class="form-text text-muted small">{{ field.help_text|safe }}</div>
{% endif %}
{% if field.errors %}
{% for error in field.errors %}
<div class="text-danger small">{{ error }}</div>
{% endfor %}
{% endif %}
</div>
{% endfor %}
<div class="mb-3">
<label class="form-label">{% trans "Phone Number" %}</label>
<input type="text" name="phone_number" class="form-control" placeholder="+1234567890">
</div>
<button type="submit" class="btn btn-primary w-100 py-2">{% trans "Register" %}</button>
<button type="submit" class="btn btn-primary w-100 py-2 mt-3">{% trans "Register" %}</button>
</form>
<div class="text-center mt-3">
<p>{% trans "Already have an account?" %} <a href="{% url 'login' %}">{% trans "Login" %}</a></p>

View File

@ -1,10 +1,9 @@
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm
from django.utils import timezone
from .models import Profile, Truck, Shipment, Bid, Message
from .forms import TruckForm, ShipmentForm, BidForm
from .forms import TruckForm, ShipmentForm, BidForm, UserRegistrationForm
from django.contrib import messages
from django.utils.translation import gettext as _
from django.db.models import Q
@ -19,19 +18,20 @@ def home(request):
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
role = request.POST.get('role')
phone = request.POST.get('phone_number')
form = UserRegistrationForm(request.POST)
if form.is_valid():
user = form.save()
profile = user.profile
profile.role = role
profile.phone_number = phone
profile.role = form.cleaned_data.get('role')
profile.phone_number = form.cleaned_data.get('phone_number')
profile.save()
login(request, user)
messages.success(request, _("Registration successful. Welcome!"))
return redirect('dashboard')
else:
messages.error(request, _("Please correct the errors below."))
else:
form = UserCreationForm()
form = UserRegistrationForm()
return render(request, 'registration/register.html', {'form': form})
@login_required
@ -85,24 +85,19 @@ def post_shipment(request):
return redirect('dashboard')
if request.method == 'POST':
description = request.POST.get('description')
weight = request.POST.get('weight')
origin = request.POST.get('origin')
destination = request.POST.get('destination')
delivery_date = request.POST.get('delivery_date')
Shipment.objects.create(
shipper=request.user,
description=description,
weight=weight,
origin=origin,
destination=destination,
delivery_date=delivery_date
)
messages.success(request, _("Shipment posted successfully!"))
return redirect('dashboard')
form = ShipmentForm(request.POST)
if form.is_valid():
shipment = form.save(commit=False)
shipment.shipper = request.user
shipment.save()
messages.success(request, _("Shipment posted successfully!"))
return redirect('dashboard')
else:
messages.error(request, _("Please correct the errors in the form."))
else:
form = ShipmentForm()
return render(request, 'core/post_shipment.html')
return render(request, 'core/post_shipment.html', {'form': form})
@login_required
def marketplace(request):
@ -164,4 +159,4 @@ def accept_bid(request, bid_id):
bid.shipment.save()
messages.success(request, _("Bid accepted! Shipment is now in progress."))
return redirect('shipment_detail', shipment_id=bid.shipment.id)
return redirect('shipment_detail', shipment_id=bid.shipment.id)