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 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.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 TruckForm(forms.ModelForm):
class Meta: class Meta:

View File

@ -9,24 +9,34 @@
<div class="card shadow"> <div class="card shadow">
<div class="card-body p-5"> <div class="card-body p-5">
<h2 class="text-center mb-4">{% trans "Create your account" %}</h2> <h2 class="text-center mb-4">{% trans "Create your account" %}</h2>
<form method="post">
<form method="post" novalidate>
{% csrf_token %} {% csrf_token %}
{{ form.as_p }}
<div class="mb-3"> {% if form.non_field_errors %}
<label class="form-label">{% trans "I am a:" %}</label> <div class="alert alert-danger">
<select name="role" class="form-select" required> {% for error in form.non_field_errors %}
<option value="SHIPPER">{% trans "Shipper (Need Goods Moved)" %}</option> {{ error }}
<option value="TRUCK_OWNER">{% trans "Truck Owner (Service Provider)" %}</option> {% endfor %}
</select> </div>
</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"> <button type="submit" class="btn btn-primary w-100 py-2 mt-3">{% trans "Register" %}</button>
<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>
</form> </form>
<div class="text-center mt-3"> <div class="text-center mt-3">
<p>{% trans "Already have an account?" %} <a href="{% url 'login' %}">{% trans "Login" %}</a></p> <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.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm
from django.utils import timezone from django.utils import timezone
from .models import Profile, Truck, Shipment, Bid, Message 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.contrib import messages
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from django.db.models import Q from django.db.models import Q
@ -19,19 +18,20 @@ def home(request):
def register(request): def register(request):
if request.method == 'POST': if request.method == 'POST':
form = UserCreationForm(request.POST) form = UserRegistrationForm(request.POST)
role = request.POST.get('role')
phone = request.POST.get('phone_number')
if form.is_valid(): if form.is_valid():
user = form.save() user = form.save()
profile = user.profile profile = user.profile
profile.role = role profile.role = form.cleaned_data.get('role')
profile.phone_number = phone profile.phone_number = form.cleaned_data.get('phone_number')
profile.save() profile.save()
login(request, user) login(request, user)
messages.success(request, _("Registration successful. Welcome!"))
return redirect('dashboard') return redirect('dashboard')
else:
messages.error(request, _("Please correct the errors below."))
else: else:
form = UserCreationForm() form = UserRegistrationForm()
return render(request, 'registration/register.html', {'form': form}) return render(request, 'registration/register.html', {'form': form})
@login_required @login_required
@ -85,24 +85,19 @@ def post_shipment(request):
return redirect('dashboard') return redirect('dashboard')
if request.method == 'POST': if request.method == 'POST':
description = request.POST.get('description') form = ShipmentForm(request.POST)
weight = request.POST.get('weight') if form.is_valid():
origin = request.POST.get('origin') shipment = form.save(commit=False)
destination = request.POST.get('destination') shipment.shipper = request.user
delivery_date = request.POST.get('delivery_date') shipment.save()
messages.success(request, _("Shipment posted successfully!"))
Shipment.objects.create( return redirect('dashboard')
shipper=request.user, else:
description=description, messages.error(request, _("Please correct the errors in the form."))
weight=weight, else:
origin=origin, form = ShipmentForm()
destination=destination,
delivery_date=delivery_date
)
messages.success(request, _("Shipment posted successfully!"))
return redirect('dashboard')
return render(request, 'core/post_shipment.html') return render(request, 'core/post_shipment.html', {'form': form})
@login_required @login_required
def marketplace(request): def marketplace(request):
@ -164,4 +159,4 @@ def accept_bid(request, bid_id):
bid.shipment.save() bid.shipment.save()
messages.success(request, _("Bid accepted! Shipment is now in progress.")) 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)