diff --git a/myproject/inventory/models.py b/myproject/inventory/models.py index 2619389..804880d 100644 --- a/myproject/inventory/models.py +++ b/myproject/inventory/models.py @@ -174,6 +174,11 @@ class Incoming(models.Model): def __str__(self): return f"{self.product.name}: {self.quantity} шт (партия {self.batch.document_number})" + @property + def can_edit(self): + """Можно ли редактировать приход""" + return self.stock_batch is None + class Sale(models.Model): """ diff --git a/myproject/inventory/templates/inventory/incoming/incoming_form.html b/myproject/inventory/templates/inventory/incoming/incoming_form.html index 9f86349..bafe9fb 100644 --- a/myproject/inventory/templates/inventory/incoming/incoming_form.html +++ b/myproject/inventory/templates/inventory/incoming/incoming_form.html @@ -23,6 +23,13 @@
+ {% if form.instance.pk and not form.instance.can_edit %} + + {% endif %}
{% csrf_token %} diff --git a/myproject/inventory/templates/inventory/incoming/incoming_list.html b/myproject/inventory/templates/inventory/incoming/incoming_list.html index 76e7c87..45825dd 100644 --- a/myproject/inventory/templates/inventory/incoming/incoming_list.html +++ b/myproject/inventory/templates/inventory/incoming/incoming_list.html @@ -60,9 +60,15 @@ {{ incoming.created_at|date:"d.m.Y H:i" }} - - - + {% if incoming.can_edit %} + + + + {% else %} + + + + {% endif %} diff --git a/myproject/inventory/views/incoming.py b/myproject/inventory/views/incoming.py index 09460b5..c4ddba2 100644 --- a/myproject/inventory/views/incoming.py +++ b/myproject/inventory/views/incoming.py @@ -5,7 +5,7 @@ from django.views.generic import ListView, CreateView, UpdateView, DeleteView, V from django.urls import reverse_lazy from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib import messages -from django.http import JsonResponse +from django.http import JsonResponse, Http404 from django.views.decorators.http import require_http_methods from django.utils.decorators import method_decorator from django.db import IntegrityError, transaction @@ -51,6 +51,19 @@ class IncomingUpdateView(LoginRequiredMixin, UpdateView): template_name = 'inventory/incoming/incoming_form.html' success_url = reverse_lazy('inventory:incoming-list') + def dispatch(self, request, *args, **kwargs): + """Проверяем, можно ли редактировать приход""" + obj = self.get_object() + if not obj.can_edit: + messages.error( + request, + f'Нельзя редактировать приход товара "{obj.product.name}", ' + f'так как для него уже создана складская партия. ' + f'Редактирование возможно только до обработки прихода.' + ) + return redirect('inventory:incoming-list') + return super().dispatch(request, *args, **kwargs) + def form_valid(self, form): messages.success(self.request, f'Приход товара обновлён.') return super().form_valid(form)