Fix: общая сумма над таблицей; автор подставляется всегда (профиль или ФИО/логин)

Made-with: Cursor
This commit is contained in:
2026-02-26 16:23:25 +00:00
parent a183121721
commit 27fa4b94ba
4 changed files with 29 additions and 6 deletions

View File

@@ -1,5 +1,13 @@
# История изменений ERP WaterSurf
## 2025-02-26 16:35 UTC Общая сумма над таблицей; автор всегда подставляется при создании
**Изменения**: Блок «Общая сумма заказа» перенесён над табличную часть «Товары» в формах заказа клиента и заказа поставщику. Поле «Автор» в моделях — ForeignKey на справочник Employee; при создании документа автор теперь подставляется всегда: сначала из профиля пользователя (UserProfile.employee), при отсутствии — создаётся/берётся сотрудник с именем из ФИО или логина пользователя. В контексте для отображения используется тот же хелпер, чтобы надпись «Автор» показывала будущего автора уже при открытии формы создания.
**Файлы**: order_form.html, supplier_order_form.html (общая сумма над таблицей), documents/views.py (_get_author_for_request, set_author с fallback).
---
## 2025-02-26 16:15 UTC Форма заказа: общая сумма и автор только для отображения
**Задача**: В форме заказа показывать общую сумму заказа (сумма стоимостей строк табличной части) как надпись; поле «Автор» сделать надписью (не вводом), при создании документа подставлять текущего пользователя и сохранять, при открытии — только отображать.

View File

@@ -8,6 +8,7 @@ from django.contrib import messages
from django.http import HttpResponseRedirect
from users.utils import get_author_employee
from references.models import Employee
from .models import (
CustomerOrder,
SupplierOrder,
@@ -32,14 +33,28 @@ logger = logging.getLogger(__name__)
def set_author(form, request):
"""Подставить автора из профиля пользователя при создании документа."""
"""Подставить автора при создании документа: из профиля пользователя (UserProfile.employee) или сотрудник по имени пользователя."""
if form.instance.pk:
return # при редактировании автора не меняем
author = get_author_employee(request.user)
author = _get_author_for_request(request)
if author:
form.instance.author = author
def _get_author_for_request(request):
"""Сотрудник-автор: из профиля пользователя или по ФИО/логину."""
if not request.user.is_authenticated:
return None
author = get_author_employee(request.user)
if author:
return author
name = (request.user.get_full_name() or "").strip() or request.user.username
author = Employee.objects.filter(name=name).first()
if not author:
author = Employee.objects.create(name=name)
return author
# --- Заказы клиентов ---
class CustomerOrderList(LoginRequiredMixin, ListView):
model = CustomerOrder
@@ -56,7 +71,7 @@ class CustomerOrderCreate(LoginRequiredMixin, CreateView):
ctx = super().get_context_data(**kwargs)
ctx["formset"] = CustomerOrderItemFormSet(instance=self.object) if self.object and self.object.pk else CustomerOrderItemFormSet()
ctx["title"] = "Заказ клиента"
ctx["author_display"] = get_author_employee(self.request.user) if not self.object or not self.object.pk else self.object.author
ctx["author_display"] = _get_author_for_request(self.request) if not self.object or not self.object.pk else self.object.author
return ctx
def form_valid(self, form):
@@ -138,7 +153,7 @@ class SupplierOrderCreate(LoginRequiredMixin, CreateView):
ctx = super().get_context_data(**kwargs)
ctx["formset"] = SupplierOrderItemFormSet(instance=self.object) if self.object and self.object.pk else SupplierOrderItemFormSet()
ctx["title"] = "Заказ поставщику"
ctx["author_display"] = get_author_employee(self.request.user) if not self.object or not self.object.pk else self.object.author
ctx["author_display"] = _get_author_for_request(self.request) if not self.object or not self.object.pk else self.object.author
return ctx
def form_valid(self, form):

View File

@@ -42,6 +42,7 @@
</div>
<div class="ws-form-section">
<h3 class="ws-form-section-title">Товары</h3>
<p class="ws-order-total-row"><strong>Общая сумма заказа:</strong> <span id="order-total-sum" class="ws-num"></span></p>
{{ formset.management_form }}
<div class="ws-table-wrap">
<table class="ws-table ws-table-items" id="order-items">
@@ -77,7 +78,6 @@
</tbody>
</table>
</div>
<p class="ws-order-total-row"><strong>Общая сумма заказа:</strong> <span id="order-total-sum" class="ws-num"></span></p>
<div class="ws-btn-group" style="margin-top: 0.75rem;">
<button type="button" class="btn btn-ws-secondary" id="add-order-row">+ Добавить строку</button>
</div>

View File

@@ -56,6 +56,7 @@
</div>
<div class="ws-form-section">
<h3 class="ws-form-section-title">Товары</h3>
<p class="ws-order-total-row"><strong>Общая сумма заказа:</strong> <span id="supplier-order-total-sum" class="ws-num"></span></p>
{{ formset.management_form }}
<div class="ws-table-wrap">
<table class="ws-table ws-table-items" id="supplier-order-items">
@@ -91,7 +92,6 @@
</tbody>
</table>
</div>
<p class="ws-order-total-row"><strong>Общая сумма заказа:</strong> <span id="supplier-order-total-sum" class="ws-num"></span></p>
<div class="ws-btn-group" style="margin-top: 0.75rem;">
<button type="button" class="btn btn-ws-secondary" id="add-supplier-order-row">+ Добавить строку</button>
</div>