adding bids

This commit is contained in:
Flatlogic Bot 2026-01-25 17:00:23 +00:00
parent 08e8aa82d4
commit 3cf59feab0
5 changed files with 73 additions and 10 deletions

View File

@ -184,7 +184,7 @@ class ParcelForm(forms.ModelForm):
labels = {
'description': _('Package Description'),
'weight': _('Weight (kg)'),
'price': _('Shipping Price (OMR)'),
'price': _('Your Offer Price (Bid) (OMR)'),
'pickup_country': _('Pickup Country'),
'pickup_governate': _('Pickup Governate'),
'pickup_city': _('Pickup City'),

View File

@ -26,10 +26,17 @@
<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>
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="d-flex justify-content-between align-items-center mb-2">
<span class="text-muted small"><strong>{% trans "Weight" %}:</strong> {{ parcel.weight }} kg</span>
<span class="text-primary fw-bold">{{ parcel.price }} OMR</span>
</div>
<!-- Bid/Price Highlight -->
<div class="bg-light p-2 rounded text-center mb-3 border border-primary border-opacity-25">
<small class="text-uppercase text-muted fw-bold" style="font-size: 0.7rem;">{% trans "Shipper's Offer (Bid)" %}</small>
<div class="text-primary fw-bold fs-4">{{ parcel.price }} <span class="fs-6">OMR</span></div>
</div>
<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>

View File

@ -130,6 +130,29 @@ def send_whatsapp_message_detailed(phone_number, message):
logger.error(error_msg)
return False, error_msg
def notify_admin(subject, message):
"""Notifies the admin via Email and WhatsApp (if configured in PlatformProfile)."""
# Email
try:
if hasattr(settings, 'CONTACT_EMAIL_TO') and settings.CONTACT_EMAIL_TO:
send_html_email(
subject=f"Admin Alert: {subject}",
message=message,
recipient_list=settings.CONTACT_EMAIL_TO,
title="Admin Alert"
)
except Exception as e:
logger.error(f"Failed to notify admin via email: {e}")
# WhatsApp
try:
profile = PlatformProfile.objects.first()
if profile and profile.phone_number:
# Assuming profile.phone_number is a valid WhatsApp number for Admin alerts
send_whatsapp_message(profile.phone_number, f"ADMIN ALERT: {subject}\n{message}")
except Exception:
pass
def notify_shipment_created(parcel):
"""Notifies the shipper that the shipment request was received via WhatsApp and Email."""
shipper_name = parcel.shipper.get_full_name() or parcel.shipper.username
@ -185,7 +208,7 @@ Your shipment is now visible to available drivers."""
except Exception as e:
logger.error(f"Failed to send payment email to {parcel.shipper.email}: {e}")
# Notify Receiver (WhatsApp only usually, but good to have logic if email exists in future)
# Notify Receiver
receiver_msg = f"""Hello {parcel.receiver_name},
A shipment is coming your way from {shipper_name}.
@ -194,26 +217,59 @@ Status: {parcel.get_status_display()}"""
send_whatsapp_message(parcel.receiver_phone, receiver_msg)
def notify_driver_assigned(parcel):
"""Notifies the shipper and receiver that a driver has picked up the parcel."""
"""Notifies the shipper, receiver, driver, and admin that a driver has picked up the parcel."""
driver_name = parcel.carrier.get_full_name() or parcel.carrier.username
msg = f"""Shipment {parcel.tracking_number} has been picked up by {driver_name}.
shipper_name = parcel.shipper.get_full_name() or parcel.shipper.username
# 1. Notify Shipper
msg_shipper = f"""Shipment {parcel.tracking_number} has been picked up by {driver_name}.
Status: {parcel.get_status_display()}"""
if hasattr(parcel.shipper, 'profile') and parcel.shipper.profile.phone_number:
send_whatsapp_message(parcel.shipper.profile.phone_number, msg)
send_whatsapp_message(parcel.shipper.profile.phone_number, msg_shipper)
if parcel.shipper.email:
try:
send_html_email(
subject='Driver Assigned - ' + parcel.tracking_number,
message=msg,
message=msg_shipper,
recipient_list=[parcel.shipper.email],
title='Driver Assigned'
)
except Exception:
pass
send_whatsapp_message(parcel.receiver_phone, msg)
# 2. Notify Receiver
msg_receiver = f"""Shipment {parcel.tracking_number} from {shipper_name} is on the way (Picked up).
Driver: {driver_name}"""
send_whatsapp_message(parcel.receiver_phone, msg_receiver)
# 3. Notify Driver (Confirmation)
msg_driver = f"""You have successfully accepted Shipment {parcel.tracking_number}.
Shipper: {shipper_name}
Pickup: {parcel.pickup_address}
Delivery: {parcel.delivery_address}
Price/Bid: {parcel.price} OMR"""
if hasattr(parcel.carrier, 'profile') and parcel.carrier.profile.phone_number:
send_whatsapp_message(parcel.carrier.profile.phone_number, msg_driver)
if parcel.carrier.email:
try:
send_html_email(
subject='Shipment Accepted - ' + parcel.tracking_number,
message=msg_driver,
recipient_list=[parcel.carrier.email],
title='Shipment Accepted'
)
except Exception:
pass
# 4. Notify Admin
notify_admin(
subject=f"Shipment Accepted ({parcel.tracking_number})",
message=f"Driver {driver_name} accepted shipment {parcel.tracking_number} from {shipper_name}.\nPrice: {parcel.price} OMR"
)
def notify_status_change(parcel):
"""Notifies parties about general status updates (In Transit, Delivered)."""
@ -234,4 +290,4 @@ New Status: {parcel.get_status_display()}"""
except Exception:
pass
send_whatsapp_message(parcel.receiver_phone, msg)
send_whatsapp_message(parcel.receiver_phone, msg)