Files
django-htmx-presenatation/project/main/views/complex_form/views.py
2024-04-07 00:08:09 +02:00

94 lines
2.7 KiB
Python

from dataclasses import dataclass
from typing import Any
from django.core.handlers.wsgi import WSGIRequest
from django.http import HttpResponse
from django.views.generic import TemplateView
from project.main.views.complex_form.reports_state import ReportsState
from project.main.views.complex_form.route_module_state import RouteModuleState
from project.main.views.complex_form.warehouse_management_state import (
WarehouseManagementState,
)
from project.main.views.demo_view_base import DemoViewBase
@dataclass
class FormState:
route_module: RouteModuleState
reports: ReportsState
warehouse_management: WarehouseManagementState
def control_state(self) -> None:
self.route_module.control_state()
self.reports.control_state()
self.warehouse_management.control_state()
class ComplexFormView(DemoViewBase):
template_name = "main/complex_form/container.html"
active_section = "complex-form"
title = "Complex Form"
def get_context_data(self, **kwargs) -> dict[str, Any]:
context = super().get_context_data(**kwargs)
state = FormState(
route_module=RouteModuleState.from_form(values={}),
reports=ReportsState.from_form(values={}),
warehouse_management=WarehouseManagementState.from_form(values={}),
)
state.control_state()
context.update(
{
"form_state": state,
}
)
return context
def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponse:
...
class RouteModuleHandleView(TemplateView):
template_name = "main/complex_form/route_module.html"
def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponse:
state = RouteModuleState.from_form(values=request.POST)
state.control_state()
return self.render_to_response(
context={
"state": state,
}
)
class ReportsHandleView(TemplateView):
template_name = "main/complex_form/reports.html"
def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponse:
state = ReportsState.from_form(values=request.POST)
state.control_state()
return self.render_to_response(
context={
"state": state,
}
)
class WarehouseManagementHandleView(TemplateView):
template_name = "main/complex_form/warehouse_management.html"
def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponse:
state = WarehouseManagementState.from_form(values=request.POST)
state.control_state()
return self.render_to_response(
context={
"state": state,
}
)