Compare commits

...

2 Commits

Author SHA1 Message Date
e3949d249f feat(units): добавить единицу измерения "Коробка" в дефолтный набор
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 20:07:43 +03:00
e10f2c413b fix(units): добавить проверку прав PlatformAdmin и исправить запрос связи
- Добавить name="submit" к кнопке формы
- Запретить PlatformAdmin доступ к CRUD операций UnitOfMeasure
- Исправить запрос sales_units_using через ProductSalesUnit.objects.filter

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 19:43:18 +03:00
3 changed files with 18 additions and 2 deletions

View File

@@ -31,6 +31,7 @@ class UnitOfMeasureService:
{'code': 'банч', 'name': 'Банч', 'short_name': 'банч', 'position': 10},
{'code': 'ветка', 'name': 'Ветка', 'short_name': 'вет.', 'position': 11},
{'code': 'пучок', 'name': 'Пучок', 'short_name': 'пуч.', 'position': 12},
{'code': 'коробка', 'name': 'Коробка', 'short_name': 'кор.', 'position': 13},
]
@classmethod

View File

@@ -97,7 +97,7 @@
<a href="{% url 'products:unit-list' %}" class="btn btn-outline-secondary">
Отмена
</a>
<button type="submit" class="btn btn-primary">
<button type="submit" name="submit" class="btn btn-primary">
<i class="bi bi-check-lg"></i> {{ submit_text }}
</button>
</div>

View File

@@ -63,6 +63,11 @@ def unit_of_measure_create(request):
"""
Создание новой единицы измерения
"""
# Проверка: PlatformAdmin не имеет доступа к бизнес-данным тенантов
if request.user.__class__.__name__ == 'PlatformAdmin':
messages.error(request, 'У вас недостаточно прав для выполнения этого действия')
return redirect('products:unit-list')
if request.method == 'POST':
form = UnitOfMeasureForm(request.POST)
if form.is_valid():
@@ -85,6 +90,11 @@ def unit_of_measure_update(request, pk):
"""
Редактирование единицы измерения
"""
# Проверка: PlatformAdmin не имеет доступа к бизнес-данным тенантов
if request.user.__class__.__name__ == 'PlatformAdmin':
messages.error(request, 'У вас недостаточно прав для выполнения этого действия')
return redirect('products:unit-list')
unit = get_object_or_404(UnitOfMeasure, pk=pk)
if request.method == 'POST':
@@ -110,11 +120,16 @@ def unit_of_measure_delete(request, pk):
"""
Удаление единицы измерения
"""
# Проверка: PlatformAdmin не имеет доступа к бизнес-данным тенантов
if request.user.__class__.__name__ == 'PlatformAdmin':
messages.error(request, 'У вас недостаточно прав для выполнения этого действия')
return redirect('products:unit-list')
unit = get_object_or_404(UnitOfMeasure, pk=pk)
# Проверяем использование
products_using = unit.products.count()
sales_units_using = unit.productsalesunit_set.count()
sales_units_using = ProductSalesUnit.objects.filter(product__base_unit=unit).count()
can_delete = products_using == 0 and sales_units_using == 0