This commit is contained in:
Faheedkhan 2025-06-17 14:52:49 +03:00
commit 38e52d5e30
11 changed files with 258 additions and 140 deletions

View File

@ -0,0 +1,26 @@
from django.core.management.base import BaseCommand
from inventory.services import get_model,get_make,decodevin
class Command(BaseCommand):
help = 'Seed the Customer model with 20 records'
def handle(self, *args, **kwargs):
# vin,description = self.generate_vin()
result = decodevin("1HGCM82633A123456")
self.stdout.write(self.style.SUCCESS('####################################################################################################'))
self.stdout.write(self.style.SUCCESS('####################################################################################################'))
# self.stdout.write(self.style.SUCCESS(f'Generated VIN: {vin}'))
# self.stdout.write(self.style.SUCCESS(f'Description: {description}'))
self.stdout.write(self.style.SUCCESS('####################################################################################################'))
self.stdout.write(self.style.SUCCESS('####################################################################################################'))
self.stdout.write(self.style.SUCCESS(f'Decoded VIN: {result}'))
make,model,year_model = result.values()
self.stdout.write(self.style.SUCCESS(f'VIN:"1HGCM82633A123456" - Make {make} - Model {model} - Model Year {year_model}'))
make = get_make(make)
model = get_model(model,make)
self.stdout.write(self.style.SUCCESS(f'Make: {make} - Model: {model} - Year: {year_model}'))
self.stdout.write(self.style.SUCCESS('####################################################################################################'))
self.stdout.write(self.style.SUCCESS('####################################################################################################'))

View File

@ -255,7 +255,7 @@ urlpatterns = [
),
# Car URLs
path('cars/upload_cars/', views.upload_cars, name='upload_cars'),
path('cars/<uuid:po_pk>/upload_cars/', views.upload_cars, name='upload_cars'),
path('cars/<uuid:pk>/upload_cars/', views.upload_cars, name='upload_cars'),
path("cars/add/", views.CarCreateView.as_view(), name="car_add"),
path("cars/inventory/", views.CarInventory.as_view(), name="car_inventory_all"),
path(
@ -874,7 +874,7 @@ path(
path('purchase_orders/<slug:entity_slug>/delete/<uuid:po_pk>/',
views.PurchaseOrderModelDeleteView.as_view(),
name='po-delete'),
path('purchase_orders/<slug:entity_slug>/<uuid:po_pk>/upload/',view=views.view_items_inventory,name='view_items_inventory'),
# Actions....
path('<slug:entity_slug>/action/<uuid:po_pk>/mark-as-draft/',
views.PurchaseOrderMarkAsDraftView.as_view(),

View File

@ -8858,7 +8858,7 @@ def InventoryItemCreateView(request):
serie_name = models.CarSerie.objects.get(pk=serie)
trim_name = models.CarTrim.objects.get(pk=trim)
inventory_name = f"{make_name.name} - {model_name.name} - {serie_name.name} - {trim_name.name} - {year} - {exterior.name} - {interior.name}"
inventory_name = f"{make_name.name} || {model_name.name} || {serie_name.name} || {trim_name.name} || {year} || {exterior.name} || {interior.name}"
uom = entity.get_uom_all().get(name='Unit')
entity.create_item_inventory(
name=inventory_name,
@ -9187,29 +9187,56 @@ class BillModelActionForceMigrateView(BaseBillActionView):
###############################################################
###############################################################
def upload_cars(request,po_pk=None):
def view_items_inventory(request,entity_slug,po_pk):
dealer = get_user_type(request)
po = PurchaseOrderModel.objects.get(pk=po_pk)
items = po.get_itemtxs_data()[0]
return render(request,'purchase_orders/po_upload_cars.html',{'po':po,"items":items})
def upload_cars(request,pk=None):
item = None
dealer = get_user_type(request)
response = redirect('upload_cars')
if pk:
item = get_object_or_404(ItemTransactionModel, pk=pk)
response = redirect('upload_cars', pk=pk)
if item.item_model.additional_info["uploaded"]:
messages.add_message(request, messages.ERROR, 'Item already uploaded.')
return redirect('view_items_inventory', entity_slug=dealer.slug, po_pk=item.po_model.pk)
if request.method == 'POST':
csv_file = request.FILES.get('csv_file')
year = request.POST.get("year")
receiving_date = datetime.strptime(request.POST.get("receiving_date"), "%Y-%m-%d")
receiving_date = timezone.make_aware(receiving_date)
try:
make = models.CarMake.objects.get(pk=request.POST.get("make"))
model = models.CarModel.objects.get(pk=request.POST.get("model"))
serie = models.CarSerie.objects.get(pk=request.POST.get("serie"))
trim = models.CarTrim.objects.get(pk=request.POST.get("trim"))
vendor = models.Vendor.objects.get(pk=request.POST.get("vendor"))
exterior = models.ExteriorColors.objects.get(pk=request.POST.get("exterior"))
interior = models.InteriorColors.objects.get(pk=request.POST.get("interior"))
if item:
item = ItemTransactionModel.objects.get(pk=pk)
data = [x.strip() for x in item.item_model.name.split("||")]
make = models.CarMake.objects.get(name=data[0])
model = make.carmodel_set.get(name=data[1])
trim = models.CarTrim.objects.filter(name=data[3],id_car_serie__id_car_model=model.id_car_model).first()
serie = trim.id_car_serie
year = data[4]
exterior = models.ExteriorColors.objects.get(name=data[5])
interior = models.InteriorColors.objects.get(name=data[6])
receiving_date = timezone.now()
vendor_model = item.bill_model.vendor
vendor = models.Vendor.objects.get(vendor_model=vendor_model)
else:
make = models.CarMake.objects.get(pk=request.POST.get("make"))
model = models.CarModel.objects.get(pk=request.POST.get("model"))
serie = models.CarSerie.objects.get(pk=request.POST.get("serie"))
trim = models.CarTrim.objects.get(pk=request.POST.get("trim"))
exterior = models.ExteriorColors.objects.get(pk=request.POST.get("exterior"))
interior = models.InteriorColors.objects.get(pk=request.POST.get("interior"))
year = request.POST.get("year")
receiving_date = datetime.strptime(request.POST.get("receiving_date"), "%Y-%m-%d")
vendor = models.Vendor.objects.get(pk=request.POST.get("vendor"))
except Exception as e:
messages.error(request, f"Error processing CSV: {str(e)}")
if po_pk:
return redirect('upload_cars',po_pk=po_pk)
else:
return redirect('upload_cars')
return response
if not csv_file.name.endswith('.csv'):
messages.error(request, "Please upload a CSV file")
return redirect('upload_cars')
@ -9218,8 +9245,21 @@ def upload_cars(request,po_pk=None):
file_content = csv_file.read().decode('utf-8')
csv_data = io.StringIO(file_content)
reader = csv.DictReader(csv_data)
data = [x for x in reader]
for row in data:
if result := decodevin(row['vin']):
if models.Car.objects.filter(vin=row['vin']).exists():
messages.error(request, f"vin {row['vin']} already exists")
return response
manufacturer_name, model_name, year_model = result.values()
car_make = get_make(manufacturer_name)
car_model = get_model(model_name, car_make)
if not all([car_make, car_model]) or (make.pk != car_make.pk) or (model.pk != car_model.pk) or (int(year) != int(year_model)):
messages.error(request, f"invalid data at vin {row['vin']}, Please upload a valid CSV file")
return response
cars_created = 0
for row in reader:
for row in data:
car = models.Car.objects.create(
dealer=dealer,
vin=row['vin'],
@ -9227,19 +9267,24 @@ def upload_cars(request,po_pk=None):
id_car_model=model,
id_car_serie=serie,
id_car_trim=trim,
year=year,
year=int(year),
vendor=vendor,
receiving_date=receiving_date,
)
car.add_colors(exterior=exterior, interior=interior)
cars_created += 1
if item:
item.item_model.additional_info["uploaded"] = True
item.item_model.save()
messages.success(request, f"Successfully imported {cars_created} cars")
return redirect('car_list') # redirect to your car list view
return response
except Exception as e:
messages.error(request, f"Error processing CSV: {str(e)}")
form = forms.CSVUploadForm()
return render(request, 'csv_upload.html',{"make_data":models.CarMake.objects.all(),"form":form})
form.fields["vendor"].queryset = dealer.vendors.all()
return render(request, 'csv_upload.html',{"make_data":models.CarMake.objects.all(),"form":form,"item":item})
###############################################################
###############################################################

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@ -0,0 +1,2 @@
vin,
1HGCM82633A123456,
1 vin
2 1HGCM82633A123456

View File

@ -74,18 +74,23 @@
{% block content %}
<div class="container mt-4">
<h2>Upload Cars CSV</h2>
<div class="d-flex justify-content-end">
<a href="{% static 'sample/cars_sample.csv' %}" class="btn btn-outline-success mt-4">
<i class="fa-solid fa-file-csv me-2"></i>Download Sample CSV
</a>
</div>
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
{{ message }}
</div>
<div class="alert alert-outline-warning }} mt-4" role="alert">
{{ message }}
</div>
{% endfor %}
{% endif %}
<form method="post" enctype="multipart/form-data" class="mt-4">
{% csrf_token %}
{% if not item %}
<div class="row g-4">
<div class="col">
{% include "purchase_orders/partials/po-select.html" with name="make" target="model" data=make_data pk=po_model.pk %}
@ -117,70 +122,56 @@
<div class="mb-3">
<div class="row g-4">
<div class="col">
<p class="fs-5 mb-2">{% trans 'Exterior Colors' %}</p>
<div class="color-options-container">
{% for color in form.fields.exterior.queryset %}
<div class="color-card">
<label class="color-option">
<input class="color-radio" type="radio" name="exterior" value="{{ color.id }}" {% if color.id == form.instance.exterior.id %}checked{% endif %}>
<div class="color-display" style="background-color: rgb({{ color.rgb }})">
<span class="color-name">{{ color.get_local_name }}</span>
</div>
</label>
</div>
{% endfor %}
{% for color in form.fields.exterior.queryset %}
<div class="color-card">
<label class="color-option">
<input class="color-radio" type="radio" name="exterior" value="{{ color.id }}" {% if color.id == form.instance.exterior.id %}checked{% endif %}>
<div class="color-display" style="background-color: rgb({{ color.rgb }})">
<span class="color-name">{{ color.get_local_name }}</span>
</div>
</label>
</div>
{% endfor %}
</div>
</div>
<div class="col">
<p class="fs-5 mb-2">{% trans 'Interior Colors' %}</p>
<div class="color-options-container">
{% for color in form.fields.interior.queryset %}
<div class="color-card">
<label class="color-option">
<input class="color-radio" type="radio" name="interior" value="{{ color.id }}" {% if color.id == form.instance.interior.id %}checked{% endif %}>
<div class="color-display" style="background-color: rgb({{ color.rgb }})">
<span class="color-name">{{ color.get_local_name }}</span>
</div>
</label>
</div>
{% endfor %}
{% for color in form.fields.interior.queryset %}
<div class="color-card">
<label class="color-option">
<input class="color-radio" type="radio" name="interior" value="{{ color.id }}" {% if color.id == form.instance.interior.id %}checked{% endif %}>
<div class="color-display" style="background-color: rgb({{ color.rgb }})">
<span class="color-name">{{ color.get_local_name }}</span>
</div>
</label>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
{% endif %}
{% if item %}
<h3 class="mt-4">List of Items</h3>
<ul class="list-group">
<li class="list-group-item">
<span class="badge bg-primary">{{ item.item_model }}</span>
</li>
</ul>
{% endif %}
<div class="mb-3">
<label for="csv_file" class="form-label">CSV File</label>
<input type="file" class="form-control" id="csv_file" name="csv_file" accept=".csv" required>
<div class="form-text">
CSV should include columns: vin, make, model, year (required)
CSV should include columns: vin
</div>
</div>
<button type="submit" class="btn btn-primary">Upload</button>
<a href="{% url 'car_list' %}" class="btn btn-secondary">Cancel</a>
<a href="{{ request.META.HTTP_REFERER }}" class="btn btn-secondary">Cancel</a>
</form>
<div class="mt-4">
<h4>CSV Format Example</h4>
<table class="table table-bordered">
<thead>
<tr>
<th>vin</th>
<th>make</th>
<th>model</th>
<th>year</th>
</tr>
</thead>
<tbody>
<tr>
<td>1HGCM82633A123456</td>
<td>Honda</td>
<td>Accord</td>
<td>2023</td>
</tr>
</tbody>
</table>
<a href="{% static 'sample/cars_sample.csv' %}" class="btn btn-outline-primary">
Download Sample CSV
</a>
</div>
</div>
{% endblock %}

View File

@ -58,8 +58,11 @@ document.addEventListener('DOMContentLoaded', function() {
<h4 class="h6 mb-1">{% trans 'Contract' %}</h4>
<p class="mb-0">{{ po_model.ce_model.estimate_number }}</p>
</div>
<a href="{% url 'django_ledger:customer-estimate-detail' entity_slug=view.kwargs.entity_slug ce_pk=po_model.ce_model_id %}"
class="btn btn-sm btn-phoenix-info ms-auto">
<a href="{% url 'estimate_detail' po_model.ce_model_id %}"
class="btn btn-sm btn-outline-info ms-auto">
{% trans 'View Contract' %}
</a>
</div>
@ -192,33 +195,30 @@ document.addEventListener('DOMContentLoaded', function() {
onclick="showPOModal('Fulfill PO', '{% url 'po-action-mark-as-fulfilled' entity_slug po_model.pk %}', 'Mark As Fulfilled')">
<i class="fas fa-truck me-2"></i>{% trans 'Mark as Fulfilled' %}
</button>
<button class="btn btn-phoenix-danger"
onclick="showPOModal('Cancel PO', '{% url 'po-action-mark-as-canceled' entity_slug po_model.pk %}', 'Mark As Cancelled')">
<i class="fas fa-ban me-2"></i>{% trans 'Cancel' %}
</button>
{% endif %}
{% endif %}
{# Danger Action Buttons #}
{% if po_model.can_delete %}
<a class="btn btn-phoenix-danger" href="{% url 'po-delete' entity_slug po_model.pk %}">
<button class="btn btn-outline-danger"
onclick="showPOModal('Cancel PO', '{% url 'po-delete' entity_slug po_model.pk %}', 'Mark As Cancelled')">
<i class="fas fa-ban me-2"></i>{% trans 'Delete' %}
</a>
</button>
{% endif %}
{% if po_model.can_void %}
<button class="btn btn-phoenix-danger"
onclick="djLedger.toggleModal('{{ po_model.get_mark_as_void_html_id }}')">
<button class="btn btn-outline-danger"
onclick="showPOModal('Void PO', '{% url 'po-action-mark-as-void' entity_slug po_model.pk %}', 'Mark As Void')">
<i class="fas fa-times-circle me-2"></i>{% trans 'Void' %}
</button>
{% modal_action_v2 bill po_model.get_mark_as_void_url po_model.get_mark_as_void_message po_model.get_mark_as_void_html_id %}
</button>
{% endif %}
{% if po_model.can_cancel %}
<button class="btn btn-phoenix-secondary"
onclick="djLedger.toggleModal('{{ po_model.get_mark_as_canceled_html_id }}')">
<i class="fas fa-window-close me-2"></i>{% trans 'Cancel' %}
<button class="btn btn-outline-danger"
onclick="showPOModal('Cancel PO', '{% url 'po-action-mark-as-canceled' entity_slug po_model.pk %}', 'Mark As Cancelled')">
<i class="fas fa-ban me-2"></i>{% trans 'Cancel' %}
</button>
{% modal_action_v2 bill po_model.get_mark_as_canceled_url po_model.get_mark_as_canceled_message po_model.get_mark_as_canceled_html_id %}
{% endif %}
</div>
</div>

View File

@ -41,22 +41,34 @@
<tbody class="list">
{% if purchase_orders %}
{% for po in purchase_orders %}
<tr class="hover-actions-trigger btn-reveal-trigger position-static">
<td class="align-middle product white-space-nowrap">{{ po.po_number }}</td>
<td class="align-middle product white-space-nowrap">{{ po.po_title }}</td>
<td class="align-middle product white-space-nowrap">
<span class="">
{% if po.po_status == 'draft' %}
<span class="text-warning me-2" data-feather="file"></span>
{% elif po.po_status == 'in_review' %}
<span class="text-info me-2" data-feather="search"></span>
{% elif po.po_status == 'paid' %}
<span class="text-success me-2" data-feather="dollar-sign"></span>
{% elif po.po_status == 'canceled' %}
<span class="text-danger me-2" data-feather="x-circle"></span>
{% elif po.po_status == 'fulfilled' %}
<span class="text-success me-2" data-feather="check-circle"></span>
{% elif po.po_status == 'approved' %}
<span class="text-success me-2" data-feather="thumbs-up"></span>
{% endif %}
{{ po.po_status|capfirst }}
</span>
</td>
<td class="align-middle product white-space-nowrap">{{ po.created|date:"M d, Y" }}</td>
<td class="align-middle product white-space-nowrap">
<td class="align-middle white-space-nowrap">
<div class="btn-reveal-trigger position-static">
<button class="btn btn-sm dropdown-toggle dropdown-caret-none transition-none btn-reveal fs-10" type="button" data-bs-toggle="dropdown" data-boundary="window" aria-haspopup="true" aria-expanded="false" data-bs-reference="parent"><span class="fas fa-ellipsis-h fs-10"></span></button>
<div class="dropdown-menu dropdown-menu-end py-2">
<a href="{% url 'purchase_order_detail' po.pk %}" class="dropdown-item text-success-dark">{% trans 'View' %}</a>
<a href="{% url 'upload_cars' po.pk %}" class="dropdown-item text-success-dark">{% trans 'Upload Data' %}</a>
<a href="{% url 'purchase_order_detail' po.pk %}" class="dropdown-item text-success-dark">{% trans 'Detail' %}</a>
<a href="{% url 'view_items_inventory' entity_slug=entity_slug po_pk=po.pk %}" class="dropdown-item text-success-dark">{% trans 'View Inventory Items' %}</a>
</div>
</div>
</td>

View File

@ -0,0 +1,36 @@
{% extends "base.html" %}
{% block content %}
<h1>{{po.po_number}}</h1>
<h4>{{po.po_status|capfirst}}</h4>
<div class="table-responsive">
<table class="table table-striped table-hover align-middle">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Quatnity</th>
<th scope="col">Unit Cost</th>
<th scope="col">Is Data Uploaded ?</th>
</tr>
</thead>
<tbody>
{% for item in items %}
<tr>
<th scope="row">{{ item.item_model }}</th>
<th scope="row">{{ item.po_quantity }}</th>
<th scope="row">{{ item.po_unit_cost }}</th>
<th scope="row">
{% if item.item_model.additional_info.uploaded %}
<i data-feather="check-circle" class="text-success"></i>
{% else %}
<a href="{% url 'upload_cars' item.pk %}" class="btn btn-sm btn-phoenix-primary">
<i data-feather="upload" class="me-2"></i>Upload Data
</a>
{% endif %}
</th>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock content %}

View File

@ -10,10 +10,7 @@
border-radius: 50rem;
}
.card-header {
background-color: #f8f9fa;
border-bottom: 1px solid rgba(0,0,0,.125);
}
.timeline {
position: relative;
@ -79,24 +76,20 @@
<header class="bg-primary py-3">
<div class="container">
<div class="d-flex justify-content-between align-items-center">
<h1 class="h4 mb-0">
<h1 class="h4 mb-0 text-light">
<i class="fas fa-file-invoice me-2"></i>
{{ _("Sale Order")}} #{{ saleorder.formatted_order_id }}
</h1>
<div>
<<<<<<< HEAD
<button class="btn btn-sm btn-phoenix-light me-2">
<i class="fas fa-print me-1"></i> Print
</button>
<button class="btn btn-sm btn-phoenix-light">
<i class="fas fa-share-alt me-1"></i> Share
=======
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
<button class="btn btn-sm btn-outline-light me-2">
<i class="fas fa-print me-1"></i> {{ _("Print") }}
</button>
<button class="btn btn-sm btn-outline-light">
<i class="fas fa-share-alt me-1"></i> {{ _("Share") }}
>>>>>>> 90fea4d25623ba4dd0f6fd2390e23b40857b6dff
</button>
</div>
</div>
@ -110,7 +103,7 @@
<div class="col-lg-8 mb-4">
<!-- Order Summary Card -->
<div class="card mb-4 shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center bg-light">
<div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0 text-primary">{{ _("Order Summary")}}</h5>
<span class="status-badge
{% if saleorder.status == 'approved' %}bg-success text-white
@ -283,14 +276,16 @@
<div class="card mb-4 shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center">
<<<<<<< HEAD
<h5 class="mb-0">Documents</h5>
<button class="btn btn-sm btn-phoenix-primary">
<i class="fas fa-plus me-1"></i> Add Document
=======
<h5 class="mb-0">{{ _("Documents") }}</h5>
<button class="btn btn-sm btn-primary">
<i class="fas fa-plus me-1"></i> {{ _("Add Document")}}
>>>>>>> 90fea4d25623ba4dd0f6fd2390e23b40857b6dff
=======
<h5 class="mb-0">{{ _("Documents") }}</h5>
<button class="btn btn-sm btn-primary">
<i class="fas fa-plus me-1"></i> {{ _("Add Document")}}
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
</button>
</div>
<div class="card-body">
@ -336,10 +331,12 @@
<textarea class="form-control" name="comment" rows="3" placeholder="Add a comment or note..." required></textarea>
<div class="d-flex justify-content-end mt-2">
<<<<<<< HEAD
<button type="submit" class="btn btn-phoenix-primary btn-sm">Post Comment</button>
=======
<button type="submit" class="btn btn-primary btn-sm">{{ _("Post Comment")}}</button>
>>>>>>> 90fea4d25623ba4dd0f6fd2390e23b40857b6dff
=======
<button type="submit" class="btn btn-primary btn-sm">{{ _("Post Comment")}}</button>
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
</div>
</div>
</form>
@ -376,52 +373,57 @@
<div class="card-body">
<div class="d-grid gap-2">
{% if saleorder.status == 'pending_approval' %}
<button class="btn btn-phoenix-success" onclick="updateStatus('approved')">
<button class="btn btn-success" onclick="updateStatus('approved')">
<i class="fas fa-check-circle me-2"></i> Approve Order
</button>
{% endif %}
{% comment %} <a href="{% url 'edit_sale_order' saleorder.pk %}" class="btn btn-primary"> {% endcomment %}
<<<<<<< HEAD
<a href="" class="btn btn-phoenix-primary">
<i class="fas fa-edit me-2"></i> Edit Order
=======
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
<a href="" class="btn btn-primary">
<i class="fas fa-edit me-2"></i> {{ _("Edit Order")}}
>>>>>>> 90fea4d25623ba4dd0f6fd2390e23b40857b6dff
</a>
{% if not saleorder.invoice %}
{% comment %} <a href="{% url 'create_invoice_from_order' saleorder.pk %}" class="btn btn-info"> {% endcomment %}
<<<<<<< HEAD
<a href="" class="btn btn-phoenix-info">
<i class="fas fa-file-invoice-dollar me-2"></i> Create Invoice
=======
<a href="" class="btn btn-info">
<i class="fas fa-file-invoice-dollar me-2"></i> {{ _("Create Invoice")}}
>>>>>>> 90fea4d25623ba4dd0f6fd2390e23b40857b6dff
=======
<a href="" class="btn btn-info">
<i class="fas fa-file-invoice-dollar me-2"></i> {{ _("Create Invoice")}}
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
</a>
{% endif %}
{% if saleorder.status == 'approved' and not saleorder.actual_delivery_date %}
<<<<<<< HEAD
<button class="btn btn-phoenix-warning" data-bs-toggle="modal" data-bs-target="#deliveryModal">
<i class="fas fa-truck me-2"></i> Schedule Delivery
=======
<button class="btn btn-warning" data-bs-toggle="modal" data-bs-target="#deliveryModal">
<i class="fas fa-truck me-2"></i> {{ _("Schedule Delivery")}}
>>>>>>> 90fea4d25623ba4dd0f6fd2390e23b40857b6dff
=======
<button class="btn btn-warning" data-bs-toggle="modal" data-bs-target="#deliveryModal">
<i class="fas fa-truck me-2"></i> {{ _("Schedule Delivery")}}
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
</button>
{% endif %}
{% if saleorder.status != 'cancelled' %}
<<<<<<< HEAD
<button class="btn btn-phoenix-danger" data-bs-toggle="modal" data-bs-target="#cancelModal">
<i class="fas fa-times-circle me-2"></i> Cancel Order
=======
<button class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#cancelModal">
<i class="fas fa-times-circle me-2"></i> {{ _("Cancel Order")}}
>>>>>>> 90fea4d25623ba4dd0f6fd2390e23b40857b6dff
=======
<button class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#cancelModal">
<i class="fas fa-times-circle me-2"></i> {{ _("Cancel Order")}}
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
</button>
{% endif %}
</div>
@ -574,12 +576,14 @@
</div>
<div class="modal-footer">
<<<<<<< HEAD
<button type="button" class="btn btn-phoenix-secondary" data-bs-dismiss="modal">Close</button>
<button type="submit" class="btn btn-phoenix-danger">Confirm Cancellation</button>
=======
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
<button type="submit" class="btn btn-danger">{{ _("Confirm Cancellation")}}</button>
>>>>>>> 90fea4d25623ba4dd0f6fd2390e23b40857b6dff
=======
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
<button type="submit" class="btn btn-danger">{{ _("Confirm Cancellation")}}</button>
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
</div>
</form>
</div>
@ -609,12 +613,14 @@
</div>
<div class="modal-footer">
<<<<<<< HEAD
<button type="button" class="btn btn-phoenix-secondary" data-bs-dismiss="modal">Close</button>
<button type="submit" class="btn btn-phoenix-primary">Schedule Delivery</button>
=======
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
<button type="submit" class="btn btn-primary">{{ _("Schedule Delivery")}}</button>
>>>>>>> 90fea4d25623ba4dd0f6fd2390e23b40857b6dff
=======
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{ _("Close") }}</button>
<button type="submit" class="btn btn-primary">{{ _("Schedule Delivery")}}</button>
>>>>>>> e9e2fd3 (add bulk insert + po item insert)
</div>
</form>
</div>