132 lines
5.2 KiB
Python
132 lines
5.2 KiB
Python
"""
|
|
CRUD для справочников (списки и формы).
|
|
"""
|
|
import logging
|
|
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
|
|
from config.mixins import LoginRequiredMixin
|
|
from django.urls import reverse_lazy
|
|
from django.contrib import messages
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from .models import (
|
|
Currency,
|
|
OrderKind,
|
|
Client,
|
|
Organization,
|
|
Supplier,
|
|
Employee,
|
|
CashAccount,
|
|
Product,
|
|
)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def _ref_view(model_class, list_url_name, create_url_name, update_url_name, delete_url_name, list_title, form_title):
|
|
"""Фабрика представлений для одного справочника."""
|
|
class List(LoginRequiredMixin, ListView):
|
|
model = model_class
|
|
template_name = "references/reference_list.html"
|
|
context_object_name = "items"
|
|
extra_context = {
|
|
"title": list_title,
|
|
"create_url_name": create_url_name,
|
|
"update_url_name": update_url_name,
|
|
"delete_url_name": delete_url_name,
|
|
}
|
|
|
|
class Create(LoginRequiredMixin, CreateView):
|
|
model = model_class
|
|
fields = "__all__"
|
|
template_name = "references/reference_form.html"
|
|
success_url = reverse_lazy(list_url_name)
|
|
extra_context = {"title": form_title, "cancel_url": reverse_lazy(list_url_name)}
|
|
|
|
def form_valid(self, form):
|
|
messages.success(self.request, _("Запись создана."))
|
|
logger.info("Справочник %s: создана запись %s", model_class.__name__, form.instance)
|
|
return super().form_valid(form)
|
|
|
|
class Update(LoginRequiredMixin, UpdateView):
|
|
model = model_class
|
|
fields = "__all__"
|
|
template_name = "references/reference_form.html"
|
|
success_url = reverse_lazy(list_url_name)
|
|
context_object_name = "object"
|
|
extra_context = {"title": form_title, "cancel_url": reverse_lazy(list_url_name)}
|
|
|
|
def form_valid(self, form):
|
|
messages.success(self.request, _("Запись сохранена."))
|
|
logger.info("Справочник %s: обновлена запись %s", model_class.__name__, form.instance)
|
|
return super().form_valid(form)
|
|
|
|
class Delete(LoginRequiredMixin, DeleteView):
|
|
model = model_class
|
|
template_name = "references/reference_confirm_delete.html"
|
|
success_url = reverse_lazy(list_url_name)
|
|
context_object_name = "object"
|
|
extra_context = {"cancel_url": reverse_lazy(list_url_name)}
|
|
|
|
def form_valid(self, form):
|
|
messages.success(self.request, _("Запись удалена."))
|
|
logger.info("Справочник %s: удалена запись %s", model_class.__name__, self.object)
|
|
return super().form_valid(form)
|
|
|
|
return List, Create, Update, Delete
|
|
|
|
# Валюты
|
|
CurrencyList, CurrencyCreate, CurrencyUpdate, CurrencyDelete = _ref_view(
|
|
Currency, "references:currency_list", "references:currency_create",
|
|
"references:currency_update", "references:currency_delete",
|
|
"Валюты", "Валюта",
|
|
)
|
|
|
|
# Виды заказов
|
|
OrderKindList, OrderKindCreate, OrderKindUpdate, OrderKindDelete = _ref_view(
|
|
OrderKind, "references:orderkind_list", "references:orderkind_create",
|
|
"references:orderkind_update", "references:orderkind_delete",
|
|
"Виды заказов", "Вид заказа",
|
|
)
|
|
|
|
# Клиенты
|
|
ClientList, ClientCreate, ClientUpdate, ClientDelete = _ref_view(
|
|
Client, "references:client_list", "references:client_create",
|
|
"references:client_update", "references:client_delete",
|
|
"Клиенты", "Клиент",
|
|
)
|
|
|
|
# Организации
|
|
OrganizationList, OrganizationCreate, OrganizationUpdate, OrganizationDelete = _ref_view(
|
|
Organization, "references:organization_list", "references:organization_create",
|
|
"references:organization_update", "references:organization_delete",
|
|
"Организации", "Организация",
|
|
)
|
|
|
|
# Поставщики
|
|
SupplierList, SupplierCreate, SupplierUpdate, SupplierDelete = _ref_view(
|
|
Supplier, "references:supplier_list", "references:supplier_create",
|
|
"references:supplier_update", "references:supplier_delete",
|
|
"Поставщики", "Поставщик",
|
|
)
|
|
|
|
# Сотрудники
|
|
EmployeeList, EmployeeCreate, EmployeeUpdate, EmployeeDelete = _ref_view(
|
|
Employee, "references:employee_list", "references:employee_create",
|
|
"references:employee_update", "references:employee_delete",
|
|
"Сотрудники", "Сотрудник",
|
|
)
|
|
|
|
# Счета денежных средств
|
|
CashAccountList, CashAccountCreate, CashAccountUpdate, CashAccountDelete = _ref_view(
|
|
CashAccount, "references:cashaccount_list", "references:cashaccount_create",
|
|
"references:cashaccount_update", "references:cashaccount_delete",
|
|
"Счета денежных средств", "Счёт денежных средств",
|
|
)
|
|
|
|
# Товары
|
|
ProductList, ProductCreate, ProductUpdate, ProductDelete = _ref_view(
|
|
Product, "references:product_list", "references:product_create",
|
|
"references:product_update", "references:product_delete",
|
|
"Товары", "Товар",
|
|
)
|