Feature: сортировка по всем колонкам во всех списках документов
Made-with: Cursor
This commit is contained in:
10
HISTORY.md
10
HISTORY.md
@@ -1,5 +1,15 @@
|
|||||||
# История изменений ERP WaterSurf
|
# История изменений ERP WaterSurf
|
||||||
|
|
||||||
|
## 2025-02-26 17:25 UTC – Сортировка по всем колонкам в списках документов
|
||||||
|
|
||||||
|
**Задача**: Во всех списках документов сделать сортировку по каждой колонке таблицы.
|
||||||
|
|
||||||
|
**Решение**: Добавлен миксин **SortableListMixin**: читает GET-параметры `sort` и `order` (asc/desc), применяет order_by к queryset. Заголовки колонок — ссылки, активная колонка отмечена стрелкой ↑/↓. По умолчанию сортировка по дате по убыванию. Списки: заказы клиентов, заказы поставщику, поступления, перемещения, расходы денежных средств.
|
||||||
|
|
||||||
|
**Изменения**: documents/views.py (SortableListMixin, sort_fields в ListView), шаблоны списков (ссылки в th), theme.css (ws-th-sort, ws-sort-arrow).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 2025-02-26 17:15 UTC – Иконки «Карандаш» и «Крестик» вместо надписей «Изменить» и «Удалить» в списках
|
## 2025-02-26 17:15 UTC – Иконки «Карандаш» и «Крестик» вместо надписей «Изменить» и «Удалить» в списках
|
||||||
|
|
||||||
**Задача**: В таблицах списков документов заменить текстовые ссылки «Изменить» и «Удалить» на иконки: карандаш (редактирование) и красный крестик (удаление).
|
**Задача**: В таблицах списков документов заменить текстовые ссылки «Изменить» и «Удалить» на иконки: карандаш (редактирование) и красный крестик (удаление).
|
||||||
|
|||||||
@@ -32,6 +32,49 @@ from .services import next_number
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class SortableListMixin:
|
||||||
|
"""Миксин для сортировки списка по GET-параметрам sort и order."""
|
||||||
|
sort_param = "sort"
|
||||||
|
order_param = "order"
|
||||||
|
sort_fields = {} # ключ (из GET) -> поле order_by, например "date", "-date" не нужен, order добавляется в get_queryset
|
||||||
|
default_sort = None # например "date"
|
||||||
|
default_order = "desc" # asc или desc
|
||||||
|
|
||||||
|
def get_sort_fields(self):
|
||||||
|
return self.sort_fields
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
qs = super().get_queryset()
|
||||||
|
fields = self.get_sort_fields()
|
||||||
|
if not fields:
|
||||||
|
return qs
|
||||||
|
sort_key = self.request.GET.get(self.sort_param)
|
||||||
|
order = (self.request.GET.get(self.order_param) or "").lower()
|
||||||
|
if order not in ("asc", "desc"):
|
||||||
|
order = self.default_order or "asc"
|
||||||
|
if sort_key and sort_key in fields:
|
||||||
|
order_by_field = fields[sort_key]
|
||||||
|
if order == "desc":
|
||||||
|
order_by_field = "-" + order_by_field
|
||||||
|
return qs.order_by(order_by_field)
|
||||||
|
if self.default_sort and self.default_sort in fields:
|
||||||
|
order_by_field = fields[self.default_sort]
|
||||||
|
if (self.default_order or "asc") == "desc":
|
||||||
|
order_by_field = "-" + order_by_field
|
||||||
|
return qs.order_by(order_by_field)
|
||||||
|
return qs
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
ctx = super().get_context_data(**kwargs)
|
||||||
|
ctx["sort_key"] = self.request.GET.get(self.sort_param) or self.default_sort
|
||||||
|
ctx["sort_order"] = (self.request.GET.get(self.order_param) or self.default_order or "asc").lower()
|
||||||
|
if ctx["sort_order"] not in ("asc", "desc"):
|
||||||
|
ctx["sort_order"] = "asc"
|
||||||
|
ctx["sort_param"] = self.sort_param
|
||||||
|
ctx["order_param"] = self.order_param
|
||||||
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
def set_author(form, request):
|
def set_author(form, request):
|
||||||
"""Подставить автора при создании документа: из профиля пользователя (UserProfile.employee) или сотрудник по имени пользователя."""
|
"""Подставить автора при создании документа: из профиля пользователя (UserProfile.employee) или сотрудник по имени пользователя."""
|
||||||
if form.instance.pk:
|
if form.instance.pk:
|
||||||
@@ -56,10 +99,21 @@ def _get_author_for_request(request):
|
|||||||
|
|
||||||
|
|
||||||
# --- Заказы клиентов ---
|
# --- Заказы клиентов ---
|
||||||
class CustomerOrderList(LoginRequiredMixin, ListView):
|
class CustomerOrderList(LoginRequiredMixin, SortableListMixin, ListView):
|
||||||
model = CustomerOrder
|
model = CustomerOrder
|
||||||
template_name = "documents/customer_order_list.html"
|
template_name = "documents/customer_order_list.html"
|
||||||
context_object_name = "object_list"
|
context_object_name = "object_list"
|
||||||
|
default_sort = "date"
|
||||||
|
default_order = "desc"
|
||||||
|
sort_fields = {
|
||||||
|
"date": "date",
|
||||||
|
"number": "number",
|
||||||
|
"status": "status__name",
|
||||||
|
"order_kind": "order_kind__name",
|
||||||
|
"organization": "organization__name",
|
||||||
|
"client": "client__name",
|
||||||
|
"total_amount": "total_amount",
|
||||||
|
}
|
||||||
|
|
||||||
class CustomerOrderCreate(LoginRequiredMixin, CreateView):
|
class CustomerOrderCreate(LoginRequiredMixin, CreateView):
|
||||||
model = CustomerOrder
|
model = CustomerOrder
|
||||||
@@ -146,10 +200,20 @@ class CustomerOrderDetail(LoginRequiredMixin, DetailView):
|
|||||||
|
|
||||||
|
|
||||||
# --- Заказы поставщику ---
|
# --- Заказы поставщику ---
|
||||||
class SupplierOrderList(LoginRequiredMixin, ListView):
|
class SupplierOrderList(LoginRequiredMixin, SortableListMixin, ListView):
|
||||||
model = SupplierOrder
|
model = SupplierOrder
|
||||||
template_name = "documents/supplier_order_list.html"
|
template_name = "documents/supplier_order_list.html"
|
||||||
context_object_name = "object_list"
|
context_object_name = "object_list"
|
||||||
|
default_sort = "date"
|
||||||
|
default_order = "desc"
|
||||||
|
sort_fields = {
|
||||||
|
"date": "date",
|
||||||
|
"number": "number",
|
||||||
|
"organization": "organization__name",
|
||||||
|
"supplier": "supplier__name",
|
||||||
|
"total_in_currency": "total_in_currency",
|
||||||
|
"total_amount": "total_amount",
|
||||||
|
}
|
||||||
|
|
||||||
class SupplierOrderCreate(LoginRequiredMixin, CreateView):
|
class SupplierOrderCreate(LoginRequiredMixin, CreateView):
|
||||||
model = SupplierOrder
|
model = SupplierOrder
|
||||||
@@ -217,10 +281,19 @@ class SupplierOrderDelete(LoginRequiredMixin, DeleteView):
|
|||||||
|
|
||||||
|
|
||||||
# --- Поступление денежных средств ---
|
# --- Поступление денежных средств ---
|
||||||
class CashInflowList(LoginRequiredMixin, ListView):
|
class CashInflowList(LoginRequiredMixin, SortableListMixin, ListView):
|
||||||
model = CashInflow
|
model = CashInflow
|
||||||
template_name = "documents/cash_inflow_list.html"
|
template_name = "documents/cash_inflow_list.html"
|
||||||
context_object_name = "object_list"
|
context_object_name = "object_list"
|
||||||
|
default_sort = "date"
|
||||||
|
default_order = "desc"
|
||||||
|
sort_fields = {
|
||||||
|
"date": "date",
|
||||||
|
"number": "number",
|
||||||
|
"recipient": "recipient__name",
|
||||||
|
"amount": "amount",
|
||||||
|
"customer_order": "customer_order__number",
|
||||||
|
}
|
||||||
|
|
||||||
class CashInflowCreate(LoginRequiredMixin, CreateView):
|
class CashInflowCreate(LoginRequiredMixin, CreateView):
|
||||||
model = CashInflow
|
model = CashInflow
|
||||||
@@ -275,10 +348,19 @@ class CashInflowDelete(LoginRequiredMixin, DeleteView):
|
|||||||
|
|
||||||
|
|
||||||
# --- Перемещение денежных средств ---
|
# --- Перемещение денежных средств ---
|
||||||
class CashTransferList(LoginRequiredMixin, ListView):
|
class CashTransferList(LoginRequiredMixin, SortableListMixin, ListView):
|
||||||
model = CashTransfer
|
model = CashTransfer
|
||||||
template_name = "documents/cash_transfer_list.html"
|
template_name = "documents/cash_transfer_list.html"
|
||||||
context_object_name = "object_list"
|
context_object_name = "object_list"
|
||||||
|
default_sort = "date"
|
||||||
|
default_order = "desc"
|
||||||
|
sort_fields = {
|
||||||
|
"date": "date",
|
||||||
|
"number": "number",
|
||||||
|
"sender": "sender__name",
|
||||||
|
"recipient": "recipient__name",
|
||||||
|
"amount": "amount",
|
||||||
|
}
|
||||||
|
|
||||||
class CashTransferCreate(LoginRequiredMixin, CreateView):
|
class CashTransferCreate(LoginRequiredMixin, CreateView):
|
||||||
model = CashTransfer
|
model = CashTransfer
|
||||||
@@ -333,10 +415,19 @@ class CashTransferDelete(LoginRequiredMixin, DeleteView):
|
|||||||
|
|
||||||
|
|
||||||
# --- Расход денежных средств ---
|
# --- Расход денежных средств ---
|
||||||
class CashExpenseList(LoginRequiredMixin, ListView):
|
class CashExpenseList(LoginRequiredMixin, SortableListMixin, ListView):
|
||||||
model = CashExpense
|
model = CashExpense
|
||||||
template_name = "documents/cash_expense_list.html"
|
template_name = "documents/cash_expense_list.html"
|
||||||
context_object_name = "object_list"
|
context_object_name = "object_list"
|
||||||
|
default_sort = "date"
|
||||||
|
default_order = "desc"
|
||||||
|
sort_fields = {
|
||||||
|
"date": "date",
|
||||||
|
"number": "number",
|
||||||
|
"sender": "sender__name",
|
||||||
|
"amount": "amount",
|
||||||
|
"supplier_order": "supplier_order__number",
|
||||||
|
}
|
||||||
|
|
||||||
class CashExpenseCreate(LoginRequiredMixin, CreateView):
|
class CashExpenseCreate(LoginRequiredMixin, CreateView):
|
||||||
model = CashExpense
|
model = CashExpense
|
||||||
|
|||||||
@@ -231,6 +231,19 @@ body {
|
|||||||
color: var(--ws-text-secondary);
|
color: var(--ws-text-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ws-table th .ws-th-sort {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.ws-table th .ws-th-sort:hover {
|
||||||
|
color: var(--ws-accent);
|
||||||
|
}
|
||||||
|
.ws-table th .ws-sort-arrow {
|
||||||
|
margin-left: 2px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--ws-accent);
|
||||||
|
}
|
||||||
|
|
||||||
.ws-table tbody tr:hover {
|
.ws-table tbody tr:hover {
|
||||||
background: var(--ws-bg-hover);
|
background: var(--ws-bg-hover);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,11 +11,11 @@
|
|||||||
<table class="ws-table ws-table-list-nowrap">
|
<table class="ws-table ws-table-list-nowrap">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Дата</th>
|
<th>{% with key="date" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Дата</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Номер</th>
|
<th>{% with key="number" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Номер</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Отправитель</th>
|
<th>{% with key="sender" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Отправитель</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th class="ws-num">Сумма</th>
|
<th class="ws-num">{% with key="amount" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Сумма</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Заказ поставщику</th>
|
<th>{% with key="supplier_order" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Заказ поставщику</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|||||||
@@ -11,11 +11,11 @@
|
|||||||
<table class="ws-table ws-table-list-nowrap">
|
<table class="ws-table ws-table-list-nowrap">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Дата</th>
|
<th>{% with key="date" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Дата</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Номер</th>
|
<th>{% with key="number" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Номер</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Получатель</th>
|
<th>{% with key="recipient" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Получатель</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th class="ws-num">Сумма</th>
|
<th class="ws-num">{% with key="amount" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Сумма</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Заказ клиента</th>
|
<th>{% with key="customer_order" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Заказ клиента</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|||||||
@@ -11,11 +11,11 @@
|
|||||||
<table class="ws-table ws-table-list-nowrap">
|
<table class="ws-table ws-table-list-nowrap">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Дата</th>
|
<th>{% with key="date" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Дата</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Номер</th>
|
<th>{% with key="number" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Номер</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Отправитель</th>
|
<th>{% with key="sender" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Отправитель</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Получатель</th>
|
<th>{% with key="recipient" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Получатель</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th class="ws-num">Сумма</th>
|
<th class="ws-num">{% with key="amount" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Сумма</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|||||||
@@ -11,13 +11,13 @@
|
|||||||
<table class="ws-table ws-table-list-nowrap">
|
<table class="ws-table ws-table-list-nowrap">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Дата</th>
|
<th>{% with key="date" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Дата</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Номер</th>
|
<th>{% with key="number" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Номер</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Статус заказа</th>
|
<th>{% with key="status" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Статус заказа</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Вид заказа</th>
|
<th>{% with key="order_kind" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Вид заказа</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Организация</th>
|
<th>{% with key="organization" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Организация</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Клиент</th>
|
<th>{% with key="client" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Клиент</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th class="ws-num">Стоимость заказа</th>
|
<th class="ws-num">{% with key="total_amount" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Стоимость заказа</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|||||||
@@ -11,12 +11,12 @@
|
|||||||
<table class="ws-table ws-table-list-nowrap">
|
<table class="ws-table ws-table-list-nowrap">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Дата</th>
|
<th>{% with key="date" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Дата</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Номер</th>
|
<th>{% with key="number" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Номер</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Организация</th>
|
<th>{% with key="organization" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Организация</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th>Поставщик</th>
|
<th>{% with key="supplier" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Поставщик</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th class="ws-num">Стоимость в валюте</th>
|
<th class="ws-num">{% with key="total_in_currency" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Стоимость в валюте</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th class="ws-num">Стоимость заказа</th>
|
<th class="ws-num">{% with key="total_amount" %}<a href="?sort={{ key }}&order={% if sort_key == key and sort_order == 'asc' %}desc{% else %}asc{% endif %}" class="ws-th-sort">Стоимость заказа</a>{% if sort_key == key %} <span class="ws-sort-arrow">{% if sort_order == 'asc' %}↑{% else %}↓{% endif %}</span>{% endif %}{% endwith %}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|||||||
Reference in New Issue
Block a user