buttons in table footer

This commit is contained in:
2025-07-11 20:26:02 +03:00
parent d72cf0a0b3
commit d986fdf232
46 changed files with 1828 additions and 1720 deletions
+7 -1
View File
@@ -21,4 +21,10 @@ class PreinfoCreateForm(PreinfoBaseForm):
'deleted',
'deleted_on',
'deleted_by',
'received'] # Exclude fields that should not be set by the user
'received'] # Exclude fields that should not be set by the user
class PreinfoEditForm(ModelForm):
class Meta:
model = Preinfo
fields = ['container_number', 'container_type', 'line']
+12 -4
View File
@@ -1,9 +1,17 @@
from django.urls import path
from preinfo.views import ClientPreinfoView, check_preinfo, PreinfoSearchView, PreinfoListView
from django.urls import path, include
from preinfo.views.client_views import (ClientPreinfoView, check_preinfo, PreinfoSearchView, ClientPreinfoCreateView, ClientPreinfoUpdateView)
from preinfo.views.employee_views import EmployeePreinfoView
urlpatterns = [
path('client/', ClientPreinfoView.as_view(), name='client_preinfo'),
path('client/', include([
path('', ClientPreinfoView.as_view(), name='client_preinfo'),
path('create/', ClientPreinfoCreateView.as_view(), name='client_preinfo_create'),
path('update/<int:pk>/', ClientPreinfoUpdateView.as_view(), name='client_preinfo_update'),
])),
path('check-preinfo/', check_preinfo, name='check_preinfo'),
path('preinfo-search/', PreinfoSearchView.as_view(), name='preinfo_search'),
path('employee_preinfo/', PreinfoListView.as_view(), name='employee_preinfo'),
path('employee/', include([
path('', EmployeePreinfoView.as_view(), name='employee_preinfo'),
])
)
]
+41 -84
View File
@@ -1,85 +1,72 @@
from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import LoginRequiredMixin
from django.forms import forms
from django.forms.widgets import HiddenInput
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.http import JsonResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.shortcuts import render, redirect
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 django.views.generic import CreateView, ListView, UpdateView
from DepoT.mixins.crudListViewMixin import CRUDListViewMixin
from common.models import ContainerTypeModel, LinesModel
from DepoT.mixins.LineFiltweFormMixin import LineFilterFormMixin
from common.utils.utils import filter_queryset_by_user, get_preinfo_by_number
from preinfo.forms import PreinfoBaseForm, PreinfoCreateForm, PreinfoEditForm
from preinfo.forms import PreinfoCreateForm, PreinfoEditForm
from preinfo.models import Preinfo
class ClientPreinfoView(LoginRequiredMixin, CRUDListViewMixin, ListView):
# template_name = 'client-preinfo-content.html'
class ClientPreinfoView(LoginRequiredMixin, UserPassesTestMixin, ListView):
# ListView
model = Preinfo
template_name = 'client/preinfo-list.html'
create_form_class = PreinfoCreateForm
form_class = PreinfoEditForm
paginate_by = 4
# CRUDListView template
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 test_func(self):
return self.request.user.has_company_perm('can_view_preinfo') or self.request.user.user_type == 'CA'
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
queryset = filter_queryset_by_user( queryset, user)[:10]
# !!! important
context['recent'] = queryset
context['base_template'] = self.base_template
return context
def get_form(self, form_class=None):
form = super().get_form(form_class)
def get_queryset(self):
queryset = super().get_queryset()
user = self.request.user
result = filter_queryset_by_user(queryset, user)
return result
# If user has a specific line, limit the line choices
if user.line:
form.fields['line'].queryset = form.fields['line'].queryset.filter(pk=user.line.pk)
form.fields['line'].initial = user.line
form.fields['line'].widget.readonly = True #form.fields['line'].widget.attrs['disabled'] = True
# Keep the value when form is submitted
# form.fields['line'].widget = HiddenInput()
return form
class ClientPreinfoCreateView(LoginRequiredMixin, UserPassesTestMixin, LineFilterFormMixin, CreateView):
model = Preinfo
template_name = 'client/preinfo-create.html'
form_class = PreinfoCreateForm
success_url = reverse_lazy('client_preinfo')
def test_func(self):
return True # self.request.user.has_company_perm('can_create_preinfo') or self.request.user.user_type == 'CA'
def form_valid(self, form):
form.instance.created_by = self.request.user
form.instance.updated_by = self.request.user
return super().form_valid(form)
# Check if a preinfo exists for the given container number
class ClientPreinfoUpdateView(LoginRequiredMixin, UserPassesTestMixin, LineFilterFormMixin, UpdateView):
model = Preinfo
template_name = 'client/preinfo-edit.html'
form_class = PreinfoEditForm
success_url = reverse_lazy('client_preinfo')
def test_func(self):
return True # self.request.user.ha.s_company_perm('can_edit_preinfo') or self.request.user.user_type == 'CA'
def form_valid(self, form):
form.instance.updated_by = self.request.user
return super().form_valid(form)
def check_preinfo(request):
number = request.GET.get('number')
preinfo = Preinfo.objects.filter(container_number=number, received=False).first()
@@ -110,33 +97,3 @@ class PreinfoSearchView(View):
return render(request, self.template_name, {'error': 'Not found'})
class PreinfoListView(CRUDListViewMixin, ListView):
model = Preinfo
template_name = 'employee/preinfo-list.html'
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
+32
View File
@@ -0,0 +1,32 @@
from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.forms import forms
from django.forms.widgets import HiddenInput
from django.http import JsonResponse
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, PreinfoEditForm
from preinfo.models import Preinfo
class EmployeePreinfoView(LoginRequiredMixin, UserPassesTestMixin, ListView):
model = Preinfo
template_name = 'employee/preinfo-list.html'
context_object_name = 'objects'
paginate_by = 30
form_class = PreinfoEditForm
base_template = 'employee-base.html'
def test_func(self):
return True # self.request.user.has_employee_perm('can_view_preinfo') or self.request.user.user_type == 'CA'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['base_template'] = self.base_template
return context