diff --git a/HISTORY.md b/HISTORY.md index 3098144..113acd3 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,32 @@ # История изменений ERP WaterSurf +## 2025-02-25 21:30 UTC – Компактные формы документов (заказы клиента и поставщику) + +**Проблема**: Формы создания/редактирования заказов занимали много места: каждое поле с новой строки на всю ширину. + +**Решение**: +- Дата и Номер в одной строке: поле «Дата» — 10 символов (size=10), «Номер» — 15 символов (size=15, maxlength=15). +- Вид заказа и Организация в одной строке; Клиент и Автор в одной строке (заказ клиента). Аналогично заказ поставщику: Организация и Поставщик, Валюта и Курс, затем Автор. +- Таблица товаров: колонка «Товар» шире (35%, min 14rem), колонка «Количество» уже (поле ввода 4ch, до двухзначного числа). +- Добавлены виджеты для даты/номера в формах и для количества в formset (size=3, width: 4ch). Новый файл `static/css/theme-compact.css` с раскладкой строк формы (grid) и ширинами колонок таблицы. + +**Изменения**: documents/forms.py (CustomerOrderForm, SupplierOrderForm, CustomerOrderItemForm, SupplierOrderItemForm, виджеты), documents/order_form.html и supplier_order_form.html (компактная разметка по полям), base.html (подключение theme-compact.css), новый theme-compact.css. + +--- + +## 2025-02-25 21:00 UTC – Принудительное применение темы (кэш, шрифт, кнопки) + +**Проблема**: На скриншоте стили не применялись: кнопка бирюзовая вместо синей (#34AFE3), шрифт Geologica не отображался. + +**Решение**: +- К ссылке theme.css добавлен параметр ?v=4 для сброса кэша браузера и прокси. +- Для кнопки .btn-ws-primary заданы явные цвета #34AFE3 и #00868F и усилена специфичность селекторов (body .btn.btn-ws-primary). +- На html и body задан font-family Geologica; для потомков — font-family: inherit, чтобы шрифт применялся ко всей странице. + +**Изменения**: base.html (theme.css?v=4), theme.css (коммент v4, кнопки по HEX, наследование шрифта). + +--- + ## 2025-02-25 20:45 UTC – Логотип убран; дизайн строго по брендбуку **Проблема**: Логотип в шапке был вставлен некорректно; визуально тема не отличалась от дефолтной — цвета и шрифты не применялись. diff --git a/app/documents/forms.py b/app/documents/forms.py index 086b59f..ae719b8 100644 --- a/app/documents/forms.py +++ b/app/documents/forms.py @@ -11,9 +11,29 @@ from .models import ( ) from django.forms import inlineformset_factory + +class CustomerOrderItemForm(forms.ModelForm): + class Meta: + model = CustomerOrderItem + fields = ("product", "price", "currency", "quantity") + widgets = { + "quantity": forms.NumberInput(attrs={"size": 3, "min": 0, "max": 99, "style": "width: 4ch"}), + } + + +class SupplierOrderItemForm(forms.ModelForm): + class Meta: + model = SupplierOrderItem + fields = ("product", "price", "currency", "quantity") + widgets = { + "quantity": forms.NumberInput(attrs={"size": 3, "min": 0, "max": 99, "style": "width: 4ch"}), + } + + CustomerOrderItemFormSet = inlineformset_factory( CustomerOrder, CustomerOrderItem, + form=CustomerOrderItemForm, fields=("product", "price", "currency", "quantity"), extra=1, can_delete=True, @@ -22,6 +42,7 @@ CustomerOrderItemFormSet = inlineformset_factory( SupplierOrderItemFormSet = inlineformset_factory( SupplierOrder, SupplierOrderItem, + form=SupplierOrderItemForm, fields=("product", "price", "currency", "quantity"), extra=1, can_delete=True, @@ -32,12 +53,20 @@ class CustomerOrderForm(forms.ModelForm): class Meta: model = CustomerOrder fields = ("date", "number", "order_kind", "organization", "client", "author") + widgets = { + "date": forms.DateInput(attrs={"size": 10}), + "number": forms.TextInput(attrs={"size": 15, "maxlength": 15}), + } class SupplierOrderForm(forms.ModelForm): class Meta: model = SupplierOrder fields = ("date", "number", "organization", "supplier", "currency", "rate", "author") + widgets = { + "date": forms.DateInput(attrs={"size": 10}), + "number": forms.TextInput(attrs={"size": 15, "maxlength": 15}), + } class CashInflowForm(forms.ModelForm): diff --git a/app/static/css/theme-compact.css b/app/static/css/theme-compact.css new file mode 100644 index 0000000..572376d --- /dev/null +++ b/app/static/css/theme-compact.css @@ -0,0 +1,47 @@ +/* Компактная раскладка форм документов */ +.ws-form-compact .ws-form-row { + display: grid; + gap: 1rem; + margin-bottom: 1rem; + align-items: start; +} + +.ws-form-compact .ws-form-row-date-number { + grid-template-columns: 10ch 15ch; +} + +.ws-form-compact .ws-form-row-date-number .ws-form-group input { + max-width: 100%; + width: 100%; +} + +.ws-form-compact .ws-form-row-2 { + grid-template-columns: 1fr 1fr; + max-width: 520px; +} + +.ws-form-compact .ws-form-row-2 .ws-form-group input, +.ws-form-compact .ws-form-row-2 .ws-form-group select { + max-width: 100%; +} + +/* Таблица товаров: колонка Товар шире, Количество уже */ +.ws-table-items .ws-col-product { + width: 35%; + min-width: 14rem; +} + +.ws-table-items .ws-col-qty { + width: 5rem; +} + +.ws-table-items td.ws-col-qty input, +.ws-table-items .ws-col-qty input { + width: 4ch !important; + max-width: 5rem; + box-sizing: border-box; +} + +.ws-table-items .ws-col-del { + width: 4rem; +} diff --git a/app/static/css/theme.css b/app/static/css/theme.css index 3a262a4..6867e87 100644 --- a/app/static/css/theme.css +++ b/app/static/css/theme.css @@ -1,4 +1,4 @@ -/* ERP WaterSurf — только цвета и шрифты из брендбука */ +/* ERP WaterSurf — тема v4 (только цвета и шрифты из брендбука) */ /* Основные цвета бренда (базовые): White, Gray 01–04, Black */ :root { @@ -37,6 +37,12 @@ html { scroll-behavior: smooth; background: var(--ws-bg-page) !important; + font-family: var(--ws-font) !important; +} + +body, +body * { + font-family: inherit; } body { @@ -230,10 +236,12 @@ body { color: var(--ws-danger-dark) !important; } -/* Кнопки — акцент только из дополнительных (Blue 02) */ -.btn-ws-primary { - background: var(--ws-accent) !important; - color: var(--ws-black) !important; +/* Кнопки — акцент только из дополнительных (Blue 02), высокая специфичность */ +.btn-ws-primary, +body .btn.btn-ws-primary, +a.btn.btn-ws-primary { + background: #34AFE3 !important; + color: #0A121D !important; border: none !important; border-radius: var(--ws-radius-sm); padding: 0.5rem 1rem; @@ -243,8 +251,10 @@ body { letter-spacing: -0.01em; } -.btn-ws-primary:hover { - background: var(--ws-accent-hover) !important; +.btn-ws-primary:hover, +body .btn.btn-ws-primary:hover, +a.btn.btn-ws-primary:hover { + background: #00868F !important; color: var(--ws-white) !important; } diff --git a/app/templates/base.html b/app/templates/base.html index 17b088c..0d9e594 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -9,7 +9,8 @@ - + + {% block extra_css %}{% endblock %} diff --git a/app/templates/documents/order_form.html b/app/templates/documents/order_form.html index 7a8aeff..1eddbfd 100644 --- a/app/templates/documents/order_form.html +++ b/app/templates/documents/order_form.html @@ -3,20 +3,57 @@ {% block content %}

{% if object %}Редактировать{% else %}Создать{% endif %} {{ title }}

-
+ {% csrf_token %} - {% for field in form %} -
- - {{ field }} - {% if field.errors %}{{ field.errors.0 }}{% endif %} +
+
+ + {{ form.date }} + {% if form.date.errors %}{{ form.date.errors.0 }}{% endif %} +
+
+ + {{ form.number }} + {% if form.number.errors %}{{ form.number.errors.0 }}{% endif %} +
+
+
+
+ + {{ form.order_kind }} + {% if form.order_kind.errors %}{{ form.order_kind.errors.0 }}{% endif %} +
+
+ + {{ form.organization }} + {% if form.organization.errors %}{{ form.organization.errors.0 }}{% endif %} +
+
+
+
+ + {{ form.client }} + {% if form.client.errors %}{{ form.client.errors.0 }}{% endif %} +
+
+ + {{ form.author }} + {% if form.author.errors %}{{ form.author.errors.0 }}{% endif %} +
- {% endfor %}

Товары

{{ formset.management_form }}
- +
+ + + + + + + + @@ -33,7 +70,7 @@ - + diff --git a/app/templates/documents/supplier_order_form.html b/app/templates/documents/supplier_order_form.html index 549140f..5d0e6a8 100644 --- a/app/templates/documents/supplier_order_form.html +++ b/app/templates/documents/supplier_order_form.html @@ -3,20 +3,64 @@ {% block content %}

{% if object %}Редактировать{% else %}Создать{% endif %} {{ title }}

- + {% csrf_token %} - {% for field in form %} -
- - {{ field }} - {% if field.errors %}{{ field.errors.0 }}{% endif %} +
+
+ + {{ form.date }} + {% if form.date.errors %}{{ form.date.errors.0 }}{% endif %} +
+
+ + {{ form.number }} + {% if form.number.errors %}{{ form.number.errors.0 }}{% endif %} +
+
+
+
+ + {{ form.organization }} + {% if form.organization.errors %}{{ form.organization.errors.0 }}{% endif %} +
+
+ + {{ form.supplier }} + {% if form.supplier.errors %}{{ form.supplier.errors.0 }}{% endif %} +
+
+
+
+ + {{ form.currency }} + {% if form.currency.errors %}{{ form.currency.errors.0 }}{% endif %} +
+
+ + {{ form.rate }} + {% if form.rate.errors %}{{ form.rate.errors.0 }}{% endif %} +
+
+
+
+ + {{ form.author }} + {% if form.author.errors %}{{ form.author.errors.0 }}{% endif %} +
- {% endfor %}

Товары

{{ formset.management_form }}
-
Товар{{ f.id }}{{ f.product }} {{ f.price }} {{ f.currency }}{{ f.quantity }}{{ f.quantity }} {% if f.DELETE %}{{ f.DELETE }}{% endif %}
+
+ + + + + + + + @@ -33,7 +77,7 @@ - +
Товар{{ f.id }}{{ f.product }} {{ f.price }} {{ f.currency }}{{ f.quantity }}{{ f.quantity }} {% if f.DELETE %}{{ f.DELETE }}{% endif %}