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, } )