37733-vm/core/templates/core/place_bid.html
2026-01-24 07:29:53 +00:00

181 lines
8.8 KiB
HTML

{% extends "base.html" %}
{% load i18n %}
{% block breadcrumbs %}
<div class="breadcrumb-container">
<div class="container">
<nav aria-label="breadcrumb">
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item"><a href="/"><i class="fa-solid fa-house me-1"></i> {% trans "Home" %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'dashboard' %}">{% trans "Dashboard" %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'marketplace' %}">{% trans "Marketplace" %}</a></li>
<li class="breadcrumb-item active" aria-current="page">{% trans "Send Offer" %}</li>
</ol>
</nav>
</div>
</div>
{% endblock %}
{% block content %}
<div class="container py-4">
<div class="mb-4">
<a href="{% url 'marketplace' %}" class="btn btn-outline-secondary btn-sm">
<i class="fa-solid fa-arrow-left me-1"></i> {% trans "Back to Marketplace" %}
</a>
</div>
<div class="row justify-content-center">
<div class="col-md-8 col-lg-7">
<div class="card shadow-lg border-0">
<div class="card-body p-5">
<h2 class="mb-4 text-center">{% trans "Send Shipping Offer" %}</h2>
<div class="card bg-light border-0 mb-4">
<div class="card-body">
<h6 class="text-primary mb-2">{% trans "Target Truck" %}</h6>
<div class="d-flex align-items-center">
{% if truck.truck_picture %}
<img src="{{ truck.truck_picture.url }}" class="rounded me-3" style="width: 60px; height: 60px; object-fit: cover;">
{% else %}
<div class="bg-secondary bg-opacity-10 rounded me-3 d-flex align-items-center justify-content-center" style="width: 60px; height: 60px;">
<i class="fa-solid fa-truck text-muted"></i>
</div>
{% endif %}
<div>
<div class="fw-bold">{{ truck.display_truck_type }} - {{ truck.display_model }}</div>
<small class="text-muted">{% trans "Owner" %}: {{ truck.owner.username }} | {% trans "Plate" %}: {{ truck.plate_no }}</small>
</div>
</div>
<div class="mb-3">
<label class="form-label fw-bold">{{ form.required_truck_type_link.label }}</label>
{{ form.required_truck_type_link }}
{{ form.required_truck_type_link.errors }}
</div>
</div>
</div>
<form method="post" novalidate>
{% csrf_token %}
<h6 class="border-bottom pb-2 mb-3">{% trans "Shipment Details" %}</h6>
<div class="mb-3">
<label class="form-label fw-bold">{{ form.description.label }}</label>
{{ form.description }}
{{ form.description.errors }}
</div>
<div class="row mb-3">
<div class="col-md-6">
<label class="form-label fw-bold">{{ form.weight.label }}</label>
{{ form.weight }}
{{ form.weight.errors }}
</div>
<div class="col-md-6">
<label class="form-label fw-bold">{{ form.delivery_date.label }}</label>
{{ form.delivery_date }}
{{ form.delivery_date.errors }}
</div>
</div>
<div class="card bg-light border-0 p-3 mb-4">
<h6 class="mb-3"><i class="fa-solid fa-map-marker-alt me-2 text-primary"></i> {% trans "Route" %}</h6>
<div class="row">
<div class="col-md-6 border-end">
<label class="form-label small text-muted">{% trans "Origin" %}</label>
<div class="mb-2">
{{ form.origin_country }}
{{ form.origin_country.errors }}
</div>
<div>
{{ form.origin_city }}
{{ form.origin_city.errors }}
</div>
</div>
<div class="col-md-6">
<label class="form-label small text-muted">{% trans "Destination" %}</label>
<div class="mb-2">
{{ form.destination_country }}
{{ form.destination_country.errors }}
</div>
<div>
{{ form.destination_city }}
{{ form.destination_city.errors }}
</div>
</div>
</div>
</div>
<h6 class="border-bottom pb-2 mb-3 mt-4">{% trans "Pricing & Terms" %}</h6>
<div class="mb-3">
<label class="form-label fw-bold">{{ form.amount.label }}</label>
<div class="input-group">
<span class="input-group-text">$</span>
{{ form.amount }}
</div>
{{ form.amount.errors }}
</div>
<div class="mb-4">
<label class="form-label fw-bold">{{ form.comments.label }}</label>
{{ form.comments }}
{{ form.comments.errors }}
</div>
<div class="d-grid gap-2">
<button type="submit" class="btn btn-primary btn-lg py-3">
<i class="fa-solid fa-paper-plane me-2"></i>{% trans "Send Offer to Truck Owner" %}
</button>
<a href="{% url 'marketplace' %}" class="btn btn-link text-muted">{% trans "Cancel" %}</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const citiesByCountry = {
{% for country in form.fields.origin_country.queryset %}
"{{ country.id }}": [
{% for city in country.cities.all %}
{"id": "{{ city.id }}", "name": "{{ city.name }}"}{% if not forloop.last %},{% endif %}
{% endfor %}
]{% if not forloop.last %},{% endif %}
{% endfor %}
};
function updateCities(countrySelect, citySelect) {
const countryId = countrySelect.value;
const cities = citiesByCountry[countryId] || [];
const currentCityId = citySelect.value;
citySelect.innerHTML = '<option value="">---------</option>';
cities.forEach(city => {
const option = document.createElement('option');
option.value = city.id;
option.textContent = city.name;
if (city.id == currentCityId) option.selected = true;
citySelect.appendChild(option);
});
}
const originCountry = document.querySelector('select[name="origin_country"]');
const originCity = document.querySelector('select[name="origin_city"]');
const destCountry = document.querySelector('select[name="destination_country"]');
const destCity = document.querySelector('select[name="destination_city"]');
if (originCountry && originCity) {
originCountry.addEventListener('change', () => updateCities(originCountry, originCity));
updateCities(originCountry, originCity);
}
if (destCountry && destCity) {
destCountry.addEventListener('change', () => updateCities(destCountry, destCity));
updateCities(destCountry, destCity);
}
});
</script>
{% endblock %}