Compare commits

..

No commits in common. "50db32600b53ff2c8f6d6c47e383b0bf9ebac71a" and "a9b4186df790b5ed6b2116b64e38ab9d2c46c504" have entirely different histories.

22 changed files with 1295 additions and 3571 deletions

View File

@ -1355,27 +1355,11 @@ class SaleOrderForm(forms.ModelForm):
class Meta: class Meta:
model = SaleOrder model = SaleOrder
fields = [ fields = [
"customer", "customer","expected_delivery_date","estimate","opportunity","comments","order_date","status"]
"expected_delivery_date",
"estimate",
"opportunity",
"comments",
"order_date",
"status",
]
widgets = { widgets = {
"expected_delivery_date": forms.DateInput( "expected_delivery_date": forms.DateInput(attrs={"type": "date", "label": _("Expected Delivery Date")}),
attrs={"type": "date", "label": _("Expected Delivery Date")} "order_date": forms.DateInput(attrs={"type": "date", "label": _("Order Date")}),
), "customer": forms.Select(attrs={"class": "form-control","label": _("Customer"),}),
"order_date": forms.DateInput(
attrs={"type": "date", "label": _("Order Date")}
),
"customer": forms.Select(
attrs={
"class": "form-control",
"label": _("Customer"),
}
),
} }

File diff suppressed because it is too large Load Diff

View File

@ -4,13 +4,14 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("inventory", "0001_initial"), ('inventory', '0001_initial'),
] ]
operations = [ operations = [
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="journal_entry", name='journal_entry',
), ),
] ]

View File

@ -5,20 +5,16 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("django_ledger", "0022_alter_billmodel_bill_items_and_more"), ('django_ledger', '0022_alter_billmodel_bill_items_and_more'),
("inventory", "0002_remove_saleorder_journal_entry"), ('inventory', '0002_remove_saleorder_journal_entry'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="saleorder", model_name='saleorder',
name="journal_entry", name='journal_entry',
field=models.ForeignKey( field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='django_ledger.journalentrymodel'),
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="django_ledger.journalentrymodel",
),
), ),
] ]

View File

@ -4,57 +4,58 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("inventory", "0003_saleorder_journal_entry"), ('inventory', '0003_saleorder_journal_entry'),
] ]
operations = [ operations = [
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="agreed_price", name='agreed_price',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="customer", name='customer',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="down_payment_amount", name='down_payment_amount',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="estimate", name='estimate',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="journal_entry", name='journal_entry',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="loan_amount", name='loan_amount',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="opportunity", name='opportunity',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="payment_method", name='payment_method',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="remaining_balance", name='remaining_balance',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="total_paid_amount", name='total_paid_amount',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="trade_in_value", name='trade_in_value',
), ),
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="trade_in_vehicle", name='trade_in_vehicle',
), ),
] ]

View File

@ -4,13 +4,14 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("inventory", "0004_remove_saleorder_agreed_price_and_more"), ('inventory', '0004_remove_saleorder_agreed_price_and_more'),
] ]
operations = [ operations = [
migrations.RemoveField( migrations.RemoveField(
model_name="saleorder", model_name='saleorder',
name="car", name='car',
), ),
] ]

View File

@ -5,20 +5,16 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("inventory", "0005_remove_saleorder_car"), ('inventory', '0005_remove_saleorder_car'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="saleorder", model_name='saleorder',
name="dealer", name='dealer',
field=models.ForeignKey( field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='sale_orders', to='inventory.dealer'),
default=1,
on_delete=django.db.models.deletion.CASCADE,
related_name="sale_orders",
to="inventory.dealer",
),
preserve_default=False, preserve_default=False,
), ),
] ]

View File

@ -5,22 +5,16 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("django_ledger", "0022_alter_billmodel_bill_items_and_more"), ('django_ledger', '0022_alter_billmodel_bill_items_and_more'),
("inventory", "0006_saleorder_dealer"), ('inventory', '0006_saleorder_dealer'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="saleorder", model_name='saleorder',
name="estimate", name='estimate',
field=models.ForeignKey( field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='sale_orders', to='django_ledger.estimatemodel', verbose_name='Estimate'),
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="sale_orders",
to="django_ledger.estimatemodel",
verbose_name="Estimate",
),
), ),
] ]

View File

@ -5,21 +5,15 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("inventory", "0007_saleorder_estimate"), ('inventory', '0007_saleorder_estimate'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="saleorder", model_name='saleorder',
name="opportunity", name='opportunity',
field=models.ForeignKey( field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='sale_orders', to='inventory.opportunity', verbose_name='Opportunity'),
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="sale_orders",
to="inventory.opportunity",
verbose_name="Opportunity",
),
), ),
] ]

View File

@ -5,21 +5,15 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("inventory", "0008_saleorder_opportunity"), ('inventory', '0008_saleorder_opportunity'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="saleorder", model_name='saleorder',
name="customer", name='customer',
field=models.ForeignKey( field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='sale_orders', to='inventory.customer', verbose_name='Customer'),
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="sale_orders",
to="inventory.customer",
verbose_name="Customer",
),
), ),
] ]

View File

@ -6,34 +6,21 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("inventory", "0009_saleorder_customer"), ('inventory', '0009_saleorder_customer'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name="saleorder", model_name='saleorder',
name="created_by", name='created_by',
field=models.ForeignKey( field=models.ForeignKey(blank=True, help_text='The user who created this sales order.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_sales_orders', to=settings.AUTH_USER_MODEL),
blank=True,
help_text="The user who created this sales order.",
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="created_sales_orders",
to=settings.AUTH_USER_MODEL,
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="saleorder", model_name='saleorder',
name="last_modified_by", name='last_modified_by',
field=models.ForeignKey( field=models.ForeignKey(blank=True, help_text='The user who last modified this sales order.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='modified_sales_orders', to=settings.AUTH_USER_MODEL),
blank=True,
help_text="The user who last modified this sales order.",
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="modified_sales_orders",
to=settings.AUTH_USER_MODEL,
),
), ),
] ]

View File

@ -2479,6 +2479,7 @@ class SaleOrder(models.Model):
return self.invoice.get_itemtxs_data()[0] return self.invoice.get_itemtxs_data()[0]
return [] return []
@property @property
def cars(self): def cars(self):
if self.items: if self.items:
@ -2496,7 +2497,6 @@ class CustomGroup(models.Model):
@property @property
def entity(self): def entity(self):
return self.invoice.entity return self.invoice.entity
@property @property
def users(self): def users(self):
return self.group.user_set.all() return self.group.user_set.all()

View File

@ -309,9 +309,7 @@ def update_item_model_cost(sender, instance, created, **kwargs):
# entity.get_all_accounts() # entity.get_all_accounts()
# .filter(name="Cash", role=roles.ASSET_CA_CASH) # .filter(name="Cash", role=roles.ASSET_CA_CASH)
# .first() # .first()
entity.get_all_accounts() entity.get_all_accounts().filter(role=roles.ASSET_CA_CASH,role_default=True).first()
.filter(role=roles.ASSET_CA_CASH, role_default=True)
.first()
) )
ledger = LedgerModel.objects.create( ledger = LedgerModel.objects.create(

View File

@ -9,7 +9,6 @@ from django.forms import ValidationError
from django.utils.formats import number_format from django.utils.formats import number_format
from django_ledger.io.io_core import get_localdate, validate_activity from django_ledger.io.io_core import get_localdate, validate_activity
from django_ledger.models import InvoiceModel, JournalEntryModel, BillModel from django_ledger.models import InvoiceModel, JournalEntryModel, BillModel
register = template.Library() register = template.Library()
@ -450,12 +449,6 @@ def po_item_table1(context, queryset):
"purchase_orders/includes/po_item_formset.html", takes_context=True "purchase_orders/includes/po_item_formset.html", takes_context=True
) )
def po_item_formset_table(context, po_model, itemtxs_formset): def po_item_formset_table(context, po_model, itemtxs_formset):
# print(len(itemtxs_formset.forms))
for form in itemtxs_formset.forms:
form.fields["item_model"].queryset = form.fields["item_model"].queryset.filter(
item_role="inventory"
)
return { return {
"entity_slug": context["view"].kwargs["entity_slug"], "entity_slug": context["view"].kwargs["entity_slug"],
"po_model": po_model, "po_model": po_model,
@ -607,26 +600,27 @@ def get_vehicle_type_name(car_serie):
return "sedan" return "sedan"
@register.filter @register.filter
def status_badge_color(status): def status_badge_color(status):
color_map = { color_map = {
"PENDING_APPROVAL": "warning", 'PENDING_APPROVAL': 'warning',
"APPROVED": "info", 'APPROVED': 'info',
"IN_FINANCING": "primary", 'IN_FINANCING': 'primary',
"PARTIALLY_PAID": "success", 'PARTIALLY_PAID': 'success',
"FULLY_PAID": "success", 'FULLY_PAID': 'success',
"PENDING_DELIVERY": "warning", 'PENDING_DELIVERY': 'warning',
"DELIVERED": "success", 'DELIVERED': 'success',
"CANCELLED": "danger", 'CANCELLED': 'danger',
} }
return color_map.get(status, "secondary") return color_map.get(status, 'secondary')
@register.inclusion_tag("inventory/tags/inventory_table.html", takes_context=True) @register.inclusion_tag('inventory/tags/inventory_table.html', takes_context=True)
def inventory_table(context, queryset): def inventory_table(context, queryset):
ctx = { ctx = {
"entity_slug": context["view"].kwargs["entity_slug"], 'entity_slug': context['view'].kwargs['entity_slug'],
"inventory_list": queryset, 'inventory_list': queryset
} }
ctx.update(queryset.aggregate(inventory_total_value=Sum("total_value"))) ctx.update(queryset.aggregate(inventory_total_value=Sum('total_value')))
return ctx return ctx

View File

@ -375,16 +375,9 @@ urlpatterns = [
views.sales_list_view, views.sales_list_view,
name="sales_list", name="sales_list",
), ),
path( path('sale_orders/<int:pk>/', views.SaleOrderDetailView.as_view(), name='order_detail'),
"sale_orders/<int:pk>/", path('inventory/<slug:entity_slug>/list/', views.InventoryListView.as_view(), name='inventort_list'),
views.SaleOrderDetailView.as_view(),
name="order_detail",
),
path(
"inventory/<slug:entity_slug>/list/",
views.InventoryListView.as_view(),
name="inventort_list",
),
# Sales URLs quotation_create # Sales URLs quotation_create
# path( # path(
# "sales/quotations/create/", # "sales/quotations/create/",

View File

@ -3626,28 +3626,26 @@ def sales_list_view(request):
context = {"txs": page_obj, "page_obj": page_obj} context = {"txs": page_obj, "page_obj": page_obj}
return render(request, "sales/sales_list.html", context) return render(request, "sales/sales_list.html", context)
class SaleOrderDetailView(LoginRequiredMixin, DetailView): class SaleOrderDetailView(LoginRequiredMixin, DetailView):
model = models.SaleOrder model = models.SaleOrder
template_name = "sales/saleorder_detail.html" template_name = 'sales/saleorder_detail.html'
context_object_name = "sale_order" context_object_name = 'sale_order'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
sale_order = self.get_object() sale_order = self.get_object()
# Add additional context data # Add additional context data
context["status_choices"] = dict(models.SaleOrder.STATUS_CHOICES) context['status_choices'] = dict(models.SaleOrder.STATUS_CHOICES)
context["page_title"] = _("Sales Order Details") context['page_title'] = _('Sales Order Details')
# Calculate any additional properties you want to display # Calculate any additional properties you want to display
context["is_delivered"] = sale_order.status == "DELIVERED" context['is_delivered'] = sale_order.status == 'DELIVERED'
context["is_cancelled"] = sale_order.status == "CANCELLED" context['is_cancelled'] = sale_order.status == 'CANCELLED'
context["is_pending_approval"] = sale_order.status == "PENDING_APPROVAL" context['is_pending_approval'] = sale_order.status == 'PENDING_APPROVAL'
return context return context
# Estimates # Estimates
class EstimateListView(LoginRequiredMixin, PermissionRequiredMixin, ListView): class EstimateListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
""" """
@ -4044,7 +4042,8 @@ def create_sale_order(request, pk):
customer = estimate.customer.customer_set.first() customer = estimate.customer.customer_set.first()
form.fields["estimate"].queryset = EstimateModel.objects.filter(pk=pk) form.fields["estimate"].queryset = EstimateModel.objects.filter(pk=pk)
form.initial["estimate"] = estimate form.initial["estimate"] = estimate
form.fields["customer"].queryset = models.Customer.objects.filter(pk=customer.pk) form.fields["customer"].queryset = models.Customer.objects.filter(
pk=customer.pk)
form.initial["customer"] = customer form.initial["customer"] = customer
if hasattr(estimate, "opportunity"): if hasattr(estimate, "opportunity"):
form.initial["opportunity"] = estimate.opportunity form.initial["opportunity"] = estimate.opportunity
@ -4570,6 +4569,7 @@ def invoice_create(request, pk):
} }
) )
context = { context = {
"form": form, "form": form,
"estimate": estimate, "estimate": estimate,
@ -8966,11 +8966,7 @@ def InventoryItemCreateView(request):
trim_name = models.CarTrim.objects.get(pk=trim) 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}"
if ( if inventory := entity.get_items_inventory().filter(name=inventory_name).first():
inventory := entity.get_items_inventory()
.filter(name=inventory_name)
.first()
):
messages.error(request, _("Inventory item already exists")) messages.error(request, _("Inventory item already exists"))
return redirect(f"{reverse('inventory_item_create')}?for_po={for_po}") return redirect(f"{reverse('inventory_item_create')}?for_po={for_po}")
uom = entity.get_uom_all().get(name="Unit") uom = entity.get_uom_all().get(name="Unit")
@ -9104,31 +9100,14 @@ class PurchaseOrderUpdateView(PurchaseOrderModelUpdateViewBase):
template_name = "purchase_orders/po_update.html" template_name = "purchase_orders/po_update.html"
context_object_name = "po_model" context_object_name = "po_model"
def get_context_data(self, itemtxs_formset=None, **kwargs): def get_context_data(self, **kwargs):
dealer = get_user_type(self.request) dealer = get_user_type(self.request)
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["entity_slug"] = dealer.entity.slug context["entity_slug"] = dealer.entity.slug
po_model: PurchaseOrderModel = self.object context["make_data"] = models.CarMake.objects.all()
# context["make_data"] = models.CarMake.objects.all() context["model_data"] = models.CarModel.objects.none()
# context["model_data"] = models.CarModel.objects.none() context["serie_data"] = models.CarSerie.objects.none()
# context["serie_data"] = models.CarSerie.objects.none() context["trim_data"] = models.CarTrim.objects.none()
# context["trim_data"] = models.CarTrim.objects.none()
# itemtxs_qs = dealer.entity.get_items_inventory().filter(item_role="inventory")
if not itemtxs_formset:
itemtxs_qs = self.get_po_itemtxs_qs(po_model)
itemtxs_qs, itemtxs_agg = po_model.get_itemtxs_data(queryset=itemtxs_qs)
po_itemtxs_formset_class = get_po_itemtxs_formset_class(po_model)
itemtxs_formset = po_itemtxs_formset_class(
entity_slug=dealer.entity.slug,
user_model=dealer.entity.admin,
po_model=po_model,
queryset=itemtxs_qs,
)
else:
itemtxs_qs, itemtxs_agg = po_model.get_itemtxs_data()
context["itemtxs_qs"] = itemtxs_qs
context["itemtxs_formset"] = itemtxs_formset
return context return context
def get_success_url(self): def get_success_url(self):
@ -9148,7 +9127,7 @@ class PurchaseOrderUpdateView(PurchaseOrderModelUpdateViewBase):
kwargs={"entity_slug": entity_slug, "po_pk": po_pk}, kwargs={"entity_slug": entity_slug, "po_pk": po_pk},
) )
) )
return super(PurchaseOrderUpdateView, self).get( return super(PurchaseOrderModelUpdateViewBase, self).get(
request, entity_slug, po_pk, *args, **kwargs request, entity_slug, po_pk, *args, **kwargs
) )
@ -9248,9 +9227,7 @@ class BasePurchaseOrderActionActionView(BasePurchaseOrderActionActionViewBase):
) )
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
# kwargs["user_model"] = self.request.user kwargs["user_model"] = self.request.user
dealer = get_user_type(request)
kwargs["user_model"] = dealer.entity.admin
if not self.action_name: if not self.action_name:
raise ImproperlyConfigured("View attribute action_name is required.") raise ImproperlyConfigured("View attribute action_name is required.")
response = super(BasePurchaseOrderActionActionView, self).get( response = super(BasePurchaseOrderActionActionView, self).get(
@ -9260,18 +9237,12 @@ class BasePurchaseOrderActionActionView(BasePurchaseOrderActionActionViewBase):
try: try:
getattr(po_model, self.action_name)(commit=self.commit, **kwargs) getattr(po_model, self.action_name)(commit=self.commit, **kwargs)
except ValidationError as e:
messages.add_message( messages.add_message(
request, request,
message="PO updated successfully.", message=e.message,
level=messages.SUCCESS, level=messages.ERROR,
) )
except ValidationError as e:
print(e)
# messages.add_message(
# request,
# message=e.message,
# level=messages.ERROR,
# )
return response return response
@ -9514,6 +9485,7 @@ def bulk_update_car_price(request):
return response return response
class InventoryListView(InventoryListViewBase): class InventoryListView(InventoryListViewBase):
template_name = "inventory/list.html" template_name = "inventory/list.html"

View File

@ -3,7 +3,7 @@
{%block title%} {%trans 'Stocks'%} {%endblock%} {%block title%} {%trans 'Stocks'%} {%endblock%}
{% block customCSS %} {% block customCSS %}
<style> <style>
.htmx-indicator { .htmx-indicator {
opacity: 0; opacity: 0;
transition: opacity 500ms ease-in; transition: opacity 500ms ease-in;
@ -21,10 +21,10 @@
.transition { .transition {
transition: all ease-in 1s; transition: all ease-in 1s;
} }
</style> </style>
{% endblock customCSS %} {% endblock customCSS %}
{% block content %} {% block content %}
<div class="mb-9"> <div class="mb-9">
<div id="projectSummary"> <div id="projectSummary">
<div class="row g-3 justify-content-between align-items-end mb-4"> <div class="row g-3 justify-content-between align-items-end mb-4">
<div class="col-12 col-sm-auto"> <div class="col-12 col-sm-auto">
@ -293,7 +293,7 @@
</div> </div>
</div> </div>
</div> </div>
{% endblock %} {% block customJS %} {% endblock %} {% block customJS %}
<script> <script>
links = document.querySelectorAll(".nav-link"); links = document.querySelectorAll(".nav-link");
links.forEach((link) => { links.forEach((link) => {
@ -357,5 +357,5 @@
} }
} }
</script> </script>
{% endblock customJS %} {% endblock customJS %}
</div> </div>

View File

@ -4,7 +4,7 @@
{% load custom_filters %} {% load custom_filters %}
{% block content %} {% block content %}
<div class="container-fluid px-4 py-4"> <div class="container-fluid px-4 py-4">
<div class="row g-4"> <div class="row g-4">
<!-- Inventory Ordered Card --> <!-- Inventory Ordered Card -->
<div class="col-12"> <div class="col-12">
@ -79,5 +79,5 @@
<div class="col-12 text-end mt-3"> <div class="col-12 text-end mt-3">
</div> </div>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -1,7 +1,5 @@
{% load trans from i18n %} {% load trans from i18n %}
{% load currency_symbol from django_ledger %} {% load django_ledger %}
{% load icon from django_ledger %}
{% load custom_filters %}
{% load widget_tweaks %} {% load widget_tweaks %}
<form action="{% url 'purchase_order_update_items' entity_slug=entity_slug po_pk=po_model.uuid %}" <form action="{% url 'purchase_order_update_items' entity_slug=entity_slug po_pk=po_model.uuid %}"

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %} {% load i18n %}
{% load static %} {% load static %}
{% load currency_symbol from django_ledger %} {% load django_ledger %}
{% load custom_filters %} {% load custom_filters %}
{% load widget_tweaks %} {% load widget_tweaks %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}

View File

@ -5,7 +5,7 @@
{% block title %}{{ page_title }} - {{ sale_order.formatted_order_id }}{% endblock %} {% block title %}{{ page_title }} - {{ sale_order.formatted_order_id }}{% endblock %}
{% block content %} {% block content %}
<div class="container mt-4"> <div class="container mt-4">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<h2 class="mb-0"> <h2 class="mb-0">
@ -265,5 +265,5 @@
{% endif %} {% endif %}
</div> </div>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}