- В WriteOffCreateView добавлена передача категорий и тегов в контекст - Шаблон writeoff_form.html обновлен с использованием product_search_picker - Автоматическая фильтрация партий по выбранному товару - Отображение информации о выбранном товаре с фото - Улучшенный UX при выборе товара для списания - Подключены CSS и JS компонента поиска товаров
62 lines
2.2 KiB
Python
62 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
WriteOff (Списание товара) views
|
|
GROUP 2: MEDIUM PRIORITY
|
|
"""
|
|
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
|
|
from django.urls import reverse_lazy
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.contrib import messages
|
|
from ..models import WriteOff
|
|
from ..forms import WriteOffForm
|
|
from products.models import ProductCategory, ProductTag
|
|
|
|
|
|
class WriteOffListView(LoginRequiredMixin, ListView):
|
|
model = WriteOff
|
|
template_name = 'inventory/writeoff/writeoff_list.html'
|
|
context_object_name = 'writeoffs'
|
|
paginate_by = 20
|
|
|
|
def get_queryset(self):
|
|
return WriteOff.objects.select_related('batch', 'batch__product').order_by('-date')
|
|
|
|
|
|
class WriteOffCreateView(LoginRequiredMixin, CreateView):
|
|
model = WriteOff
|
|
form_class = WriteOffForm
|
|
template_name = 'inventory/writeoff/writeoff_form.html'
|
|
success_url = reverse_lazy('inventory:writeoff-list')
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['categories'] = ProductCategory.objects.filter(is_active=True).order_by('name')
|
|
context['tags'] = ProductTag.objects.filter(is_active=True).order_by('name')
|
|
return context
|
|
|
|
def form_valid(self, form):
|
|
messages.success(self.request, f'Списание товара успешно создано.')
|
|
return super().form_valid(form)
|
|
|
|
|
|
class WriteOffUpdateView(LoginRequiredMixin, UpdateView):
|
|
model = WriteOff
|
|
form_class = WriteOffForm
|
|
template_name = 'inventory/writeoff/writeoff_form.html'
|
|
success_url = reverse_lazy('inventory:writeoff-list')
|
|
|
|
def form_valid(self, form):
|
|
messages.success(self.request, f'Списание товара обновлено.')
|
|
return super().form_valid(form)
|
|
|
|
|
|
class WriteOffDeleteView(LoginRequiredMixin, DeleteView):
|
|
model = WriteOff
|
|
template_name = 'inventory/writeoff/writeoff_confirm_delete.html'
|
|
success_url = reverse_lazy('inventory:writeoff-list')
|
|
|
|
def form_valid(self, form):
|
|
writeoff = self.get_object()
|
|
messages.success(self.request, f'Списание товара отменено.')
|
|
return super().form_valid(form)
|