diff --git a/HISTORY.md b/HISTORY.md index ebd230d..f098d82 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,15 @@ # История изменений ERP WaterSurf +## 2025-02-25 23:55 UTC – Дата при открытии формы, без лишней пустой строки при редактировании + +**Проблема**: При открытии формы редактирования заказа поле «Дата» не подставлялось из БД; в табличной части вместе с существующими строками отображалась лишняя пустая строка. + +**Решение**: Для виджета даты (DateInput с type="date") задан явный формат `format="%Y-%m-%d"`, чтобы значение из БД выводилось в виде, ожидаемом HTML5 (YYYY-MM-DD). Для редактирования заказов используются отдельные formset-классы с `extra=0`: при открытии формы показываются только сохранённые строки; новая строка добавляется по кнопке «+ Добавить строку». + +**Изменения**: documents/forms.py (format для всех DateInput; CustomerOrderItemFormSetUpdate и SupplierOrderItemFormSetUpdate с extra=0), documents/views.py (импорт и использование *FormSetUpdate в Update-представлениях заказов). + +--- + ## 2025-02-25 23:45 UTC – Сохранение заказа: дата и табличная часть **Проблема**: При сохранении заказа клиента не сохранялись поле «Дата» и табличная часть (товары). diff --git a/app/documents/forms.py b/app/documents/forms.py index 6ce7216..3c59d68 100644 --- a/app/documents/forms.py +++ b/app/documents/forms.py @@ -41,6 +41,15 @@ CustomerOrderItemFormSet = inlineformset_factory( can_delete=True, ) +CustomerOrderItemFormSetUpdate = inlineformset_factory( + CustomerOrder, + CustomerOrderItem, + form=CustomerOrderItemForm, + fields=("product", "price", "currency", "quantity"), + extra=0, + can_delete=True, +) + SupplierOrderItemFormSet = inlineformset_factory( SupplierOrder, SupplierOrderItem, @@ -50,13 +59,22 @@ SupplierOrderItemFormSet = inlineformset_factory( can_delete=True, ) +SupplierOrderItemFormSetUpdate = inlineformset_factory( + SupplierOrder, + SupplierOrderItem, + form=SupplierOrderItemForm, + fields=("product", "price", "currency", "quantity"), + extra=0, + can_delete=True, +) + class CustomerOrderForm(forms.ModelForm): class Meta: model = CustomerOrder fields = ("date", "number", "order_kind", "organization", "client", "author") widgets = { - "date": forms.DateInput(attrs={"type": "date"}), + "date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"), "number": forms.TextInput(attrs={"size": 15, "maxlength": 15}), } @@ -66,7 +84,7 @@ class SupplierOrderForm(forms.ModelForm): model = SupplierOrder fields = ("date", "number", "organization", "supplier", "currency", "rate", "author") widgets = { - "date": forms.DateInput(attrs={"type": "date"}), + "date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"), "number": forms.TextInput(attrs={"size": 15, "maxlength": 15}), } @@ -76,7 +94,7 @@ class CashInflowForm(forms.ModelForm): model = CashInflow fields = ("date", "number", "recipient", "amount", "customer_order", "comment", "author") widgets = { - "date": forms.DateInput(attrs={"type": "date"}), + "date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"), "number": forms.TextInput(attrs={"size": 15, "maxlength": 15}), } @@ -86,7 +104,7 @@ class CashTransferForm(forms.ModelForm): model = CashTransfer fields = ("date", "number", "sender", "recipient", "amount", "comment", "author") widgets = { - "date": forms.DateInput(attrs={"type": "date"}), + "date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"), "number": forms.TextInput(attrs={"size": 15, "maxlength": 15}), } @@ -96,6 +114,6 @@ class CashExpenseForm(forms.ModelForm): model = CashExpense fields = ("date", "number", "sender", "amount", "supplier_order", "comment", "author") widgets = { - "date": forms.DateInput(attrs={"type": "date"}), + "date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"), "number": forms.TextInput(attrs={"size": 15, "maxlength": 15}), } diff --git a/app/documents/views.py b/app/documents/views.py index e7ec0ea..94cf025 100644 --- a/app/documents/views.py +++ b/app/documents/views.py @@ -18,8 +18,10 @@ from .models import ( from .forms import ( CustomerOrderForm, CustomerOrderItemFormSet, + CustomerOrderItemFormSetUpdate, SupplierOrderForm, SupplierOrderItemFormSet, + SupplierOrderItemFormSetUpdate, CashInflowForm, CashTransferForm, CashExpenseForm, @@ -81,12 +83,12 @@ class CustomerOrderUpdate(LoginRequiredMixin, UpdateView): def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) - ctx["formset"] = CustomerOrderItemFormSet(instance=self.object) + ctx["formset"] = CustomerOrderItemFormSetUpdate(instance=self.object) ctx["title"] = "Заказ клиента" return ctx def form_valid(self, form): - formset = CustomerOrderItemFormSet(self.request.POST, instance=self.object) + formset = CustomerOrderItemFormSetUpdate(self.request.POST, instance=self.object) if formset.is_valid(): form.save() formset.save() @@ -150,12 +152,12 @@ class SupplierOrderUpdate(LoginRequiredMixin, UpdateView): def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) - ctx["formset"] = SupplierOrderItemFormSet(instance=self.object) + ctx["formset"] = SupplierOrderItemFormSetUpdate(instance=self.object) ctx["title"] = "Заказ поставщику" return ctx def form_valid(self, form): - formset = SupplierOrderItemFormSet(self.request.POST, instance=self.object) + formset = SupplierOrderItemFormSetUpdate(self.request.POST, instance=self.object) if formset.is_valid(): form.save() formset.save()