From 26633e5e51f7ce4f96ff3df454012a948c250429 Mon Sep 17 00:00:00 2001 From: kikimor Date: Tue, 8 Jul 2025 18:52:08 +0300 Subject: [PATCH] A little refactoring for crud template and project structure --- DepoT/mixins/crudListViewMixin.py | 0 preinfo/views/__init__.py | 0 preinfo/{views.py => views/client_views.py} | 73 ++++++-- preinfo/views/employee_views.py | 0 static/js/crud-list.js | 0 .../{ => barrier}/barrier receive found.html | 0 templates/barrier/barrier-base.html | 10 ++ .../{ => barrier}/barrier-dashboard.html | 0 templates/client/preinfo-list.html | 25 +++ templates/list-crud.html | 157 ++++++++++++++++++ 10 files changed, 255 insertions(+), 10 deletions(-) create mode 100644 DepoT/mixins/crudListViewMixin.py create mode 100644 preinfo/views/__init__.py rename preinfo/{views.py => views/client_views.py} (50%) create mode 100644 preinfo/views/employee_views.py create mode 100644 static/js/crud-list.js rename templates/{ => barrier}/barrier receive found.html (100%) create mode 100644 templates/barrier/barrier-base.html rename templates/{ => barrier}/barrier-dashboard.html (100%) create mode 100644 templates/client/preinfo-list.html create mode 100644 templates/list-crud.html diff --git a/DepoT/mixins/crudListViewMixin.py b/DepoT/mixins/crudListViewMixin.py new file mode 100644 index 0000000..e69de29 diff --git a/preinfo/views/__init__.py b/preinfo/views/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/preinfo/views.py b/preinfo/views/client_views.py similarity index 50% rename from preinfo/views.py rename to preinfo/views/client_views.py index 0c1fe1c..c2df425 100644 --- a/preinfo/views.py +++ b/preinfo/views/client_views.py @@ -3,25 +3,53 @@ from django.contrib.auth.mixins import LoginRequiredMixin from django.forms import forms from django.forms.widgets import HiddenInput from django.http import JsonResponse -from django.shortcuts import render, redirect +from django.shortcuts import render, redirect, get_object_or_404 from django.urls import reverse_lazy +from django.utils import timezone from django.views import View from django.views.generic import TemplateView, FormView, CreateView, ListView +from DepoT.mixins.crudListViewMixin import CRUDListViewMixin +from common.models import ContainerTypeModel, LinesModel from common.utils.utils import filter_queryset_by_user, get_preinfo_by_number -from preinfo.forms import PreinfoBaseForm, PreinfoCreateForm +from preinfo.forms import PreinfoBaseForm, PreinfoCreateForm, PreinfoEditForm from preinfo.models import Preinfo - -class ClientPreinfoView(LoginRequiredMixin, CreateView): - template_name = 'client-preinfo-content.html' - form_class = PreinfoCreateForm - success_url = reverse_lazy('client_preinfo') +class ClientPreinfoView(LoginRequiredMixin, CRUDListViewMixin, ListView): + # template_name = 'client-preinfo-content.html' model = Preinfo + template_name = 'client/preinfo-list.html' + create_form_class = PreinfoCreateForm + form_class = PreinfoEditForm + context_object_name = 'objects' + success_url = reverse_lazy('client_preinfo') + base_template = 'client-base.html' + + def get_object_data(self, obj): + return { + 'container_number': obj.container_number, + 'container_type': obj.container_type.id, + 'line': obj.line.id + } + + def handle_form_submission(self, request, *args, **kwargs): + object_id = request.POST.get('object_id') + if object_id: + obj = get_object_or_404(self.model, id=object_id) + form = self.form_class(request.POST, instance=obj) + else: + form = self.create_form_class(request.POST) + if form.is_valid(): + form.save() + return redirect(self.success_url) + return self.get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) + context['form'] = self.form_class() # Add empty form to context + context['create_form'] = self.create_form_class() # Add empty form to context + context['base_template'] = self.base_template # Add empty form to context queryset = self.model.objects.all().order_by('-created_on') user = self.request.user # !!! important @@ -82,8 +110,33 @@ class PreinfoSearchView(View): return render(request, self.template_name, {'error': 'Not found'}) -class PreinfoListView(ListView): +class PreinfoListView(CRUDListViewMixin, ListView): model = Preinfo template_name = 'employee/preinfo-list.html' - context_object_name = 'preinfos' - paginate_by = 30 # Number of items per page + context_object_name = 'objects' + paginate_by = 30 + form_class = PreinfoEditForm + base_template = 'employee-base.html' + + def get_object_data(self, obj): + return { + 'container_number': obj.container_number, + 'container_type': obj.container_type.id, + 'line': obj.line.id + } + + def handle_form_submission(self, request, *args, **kwargs): + object_id = request.POST.get('object_id') + if object_id: + obj = get_object_or_404(self.model, id=object_id) + form = self.form_class(request.POST, instance=obj) + if form.is_valid(): + form.save() + return redirect('employee_preinfo') + return self.get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['form'] = self.form_class() # Add empty form to context + context['base_template'] = self.base_template # Add empty form to context + return context \ No newline at end of file diff --git a/preinfo/views/employee_views.py b/preinfo/views/employee_views.py new file mode 100644 index 0000000..e69de29 diff --git a/static/js/crud-list.js b/static/js/crud-list.js new file mode 100644 index 0000000..e69de29 diff --git a/templates/barrier receive found.html b/templates/barrier/barrier receive found.html similarity index 100% rename from templates/barrier receive found.html rename to templates/barrier/barrier receive found.html diff --git a/templates/barrier/barrier-base.html b/templates/barrier/barrier-base.html new file mode 100644 index 0000000..4bdcfcb --- /dev/null +++ b/templates/barrier/barrier-base.html @@ -0,0 +1,10 @@ + + + + + $Title$ + + +$END$ + + \ No newline at end of file diff --git a/templates/barrier-dashboard.html b/templates/barrier/barrier-dashboard.html similarity index 100% rename from templates/barrier-dashboard.html rename to templates/barrier/barrier-dashboard.html diff --git a/templates/client/preinfo-list.html b/templates/client/preinfo-list.html new file mode 100644 index 0000000..788cec0 --- /dev/null +++ b/templates/client/preinfo-list.html @@ -0,0 +1,25 @@ +{% extends 'list-crud.html' %} +{% load static %} + +{% block table_header %} + Select + Preinfo № + Container № + Container type + Line + Created on + Created by +{% endblock table_header %} + +{% block table_data %} + {{ object.id }} + {{ object.container_number }} + {{ object.container_type }} + {{ object.line.short_name }} + {{ object.created_on }} + {{ object.created_by.username }} +{% endblock %} + +{% block modal_header %} +

Edit Preinfo

+{% endblock modal_header %} diff --git a/templates/list-crud.html b/templates/list-crud.html new file mode 100644 index 0000000..d052240 --- /dev/null +++ b/templates/list-crud.html @@ -0,0 +1,157 @@ +{% extends 'employee-base.html' %} +{% load static %} + +{% block content %} + + + + + + + + + + + + {% for preinfo in preinfos %} + + + + + + + + + + {% endfor %} +
SelectPreinfo №Container №Container typeLineCreated onCreated by
{{ preinfo.id }}{{ preinfo.container_number }}{{ preinfo.container_type }}{{ preinfo.line.short_name }}{{ preinfo.created_on }}{{ preinfo.created_by.username }}
+ +
+ + +
+ + + + + + + +{% endblock content %} \ No newline at end of file