From b33ed21949bc45a7e5f5de504fdc011d5a4937c3 Mon Sep 17 00:00:00 2001 From: Eden Kirin Date: Sun, 7 Apr 2024 00:07:47 +0200 Subject: [PATCH] Warehouse management --- .../main/complex_form/container.html | 53 +++++++++++------ .../templates/main/complex_form/reports.html | 2 +- .../main/complex_form/route_module.html | 2 +- .../complex_form/warehouse_management.html | 58 +++++++++++++++++++ project/main/views/__init__.py | 7 ++- .../main/views/complex_form/reports_state.py | 3 +- project/main/views/complex_form/views.py | 20 +++++++ .../warehouse_management_state.py | 48 +++++++++++++++ project/urls.py | 1 + 9 files changed, 170 insertions(+), 24 deletions(-) create mode 100644 project/main/templates/main/complex_form/warehouse_management.html create mode 100644 project/main/views/complex_form/warehouse_management_state.py diff --git a/project/main/templates/main/complex_form/container.html b/project/main/templates/main/complex_form/container.html index ec99f59..2802ed4 100644 --- a/project/main/templates/main/complex_form/container.html +++ b/project/main/templates/main/complex_form/container.html @@ -2,27 +2,42 @@ {% block content %} -
-
-
- {% set state = form_state.route_module %} - {% include "main/complex_form/route_module.html" %} + +
+
+
+ {% set state = form_state.route_module %} + {% include "main/complex_form/route_module.html" %} +
+
+
+
+ {% set state = form_state.reports %} + {% include "main/complex_form/reports.html" %} +
-
-
- {% set state = form_state.reports %} - {% include "main/complex_form/reports.html" %} +
+
+
+ {% set state = form_state.warehouse_management %} + {% include "main/complex_form/warehouse_management.html" %} +
diff --git a/project/main/templates/main/complex_form/reports.html b/project/main/templates/main/complex_form/reports.html index 8f0f205..1670593 100644 --- a/project/main/templates/main/complex_form/reports.html +++ b/project/main/templates/main/complex_form/reports.html @@ -3,7 +3,7 @@ {% set indent_1 = "ms-4" %} {% set indent_2 = "ms-5" %} -
+
{{ checkbox( title="Enable Reports", name="reports", diff --git a/project/main/templates/main/complex_form/route_module.html b/project/main/templates/main/complex_form/route_module.html index 0f61023..3ab1d63 100644 --- a/project/main/templates/main/complex_form/route_module.html +++ b/project/main/templates/main/complex_form/route_module.html @@ -3,7 +3,7 @@ {% set indent_1 = "ms-4" %} {% set indent_2 = "ms-5" %} -
+
{{ checkbox( title="Enable Route module", name="route_module", diff --git a/project/main/templates/main/complex_form/warehouse_management.html b/project/main/templates/main/complex_form/warehouse_management.html new file mode 100644 index 0000000..1fa242b --- /dev/null +++ b/project/main/templates/main/complex_form/warehouse_management.html @@ -0,0 +1,58 @@ +{% from "main/components/inputs.html" import checkbox, select %} + +{% set indent_1 = "ms-4" %} +{% set indent_2 = "ms-5" %} + +
+ {{ checkbox( + title="Product warehouse", + name="product_warehouse", + state=state.product_warehouse + ) }} + + {{ select( + title="Delivery option", + name="delivery_option", + options={ + "direct": "Direct", + "vehicle": "Vehicle", + }, + state=state.delivery_option, + cls=indent_1 + ) }} + {{ checkbox( + title="Allow negative stock", + name="allow_negative_stock", + state=state.allow_negative_stock, + cls=indent_1 + ) }} + {{ checkbox( + title="Route reserve stock", + name="route_reserve_stock", + state=state.route_reserve_stock, + cls=indent_1 + ) }} + {{ checkbox( + title="Refill log", + name="refill_log", + state=state.refill_log, + cls=indent_1 + ) }} + {{ checkbox( + title="Product order", + name="product_order", + state=state.product_order, + cls=indent_1 + ) }} + + {{ checkbox( + title="Spare parts warehouse", + name="spare_parts_warehouse", + state=state.spare_parts_warehouse + ) }} + {{ checkbox( + title="Purchase module", + name="purchase_module", + state=state.purchase_module + ) }} +
diff --git a/project/main/views/__init__.py b/project/main/views/__init__.py index e4171a0..ba8d607 100644 --- a/project/main/views/__init__.py +++ b/project/main/views/__init__.py @@ -1,4 +1,9 @@ -from .complex_form.views import RouteModuleHandleView, ComplexFormView, ReportsHandleView +from .complex_form.views import ( + ComplexFormView, + ReportsHandleView, + RouteModuleHandleView, + WarehouseManagementHandleView, +) from .filter_list import FilterListView from .form_validation import FormValidationView from .home import HomeView diff --git a/project/main/views/complex_form/reports_state.py b/project/main/views/complex_form/reports_state.py index bd09baf..64203bb 100644 --- a/project/main/views/complex_form/reports_state.py +++ b/project/main/views/complex_form/reports_state.py @@ -19,7 +19,6 @@ class ReportsState: @staticmethod def from_form(values: dict[str, str]) -> "ReportsState": - print(values) return ReportsState( enabled=CheckboxState(checked=values.get("reports") == "on"), cash_conformity=CheckboxState(checked=values.get("cash_conformity") == "on"), @@ -36,7 +35,7 @@ class ReportsState: def control_state(self) -> None: self.cash_conformity.enabled = self.enabled.checked - self.days_between_cc.enabled = self.cash_conformity.enabled and self.cash_conformity.checked + self.days_between_cc.visible = self.cash_conformity.enabled and self.cash_conformity.checked self.scan_2nd_bardcode.enabled = self.cash_conformity.enabled and self.cash_conformity.checked self.allow_empty_cashbag.enabled = self.enabled.checked self.reports_builder.enabled = self.enabled.checked diff --git a/project/main/views/complex_form/views.py b/project/main/views/complex_form/views.py index 94d028b..eeb3b2c 100644 --- a/project/main/views/complex_form/views.py +++ b/project/main/views/complex_form/views.py @@ -7,6 +7,9 @@ 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 @@ -14,10 +17,12 @@ from project.main.views.demo_view_base import DemoViewBase 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): @@ -31,6 +36,7 @@ class ComplexFormView(DemoViewBase): state = FormState( route_module=RouteModuleState.from_form(values={}), reports=ReportsState.from_form(values={}), + warehouse_management=WarehouseManagementState.from_form(values={}), ) state.control_state() @@ -71,3 +77,17 @@ class ReportsHandleView(TemplateView): "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, + } + ) diff --git a/project/main/views/complex_form/warehouse_management_state.py b/project/main/views/complex_form/warehouse_management_state.py new file mode 100644 index 0000000..383b12f --- /dev/null +++ b/project/main/views/complex_form/warehouse_management_state.py @@ -0,0 +1,48 @@ +from dataclasses import dataclass + +from project.main.views.complex_form.state_models import CheckboxState, SelectState + + +@dataclass +class WarehouseManagementState: + product_warehouse: CheckboxState + delivery_option: SelectState + allow_negative_stock: CheckboxState + route_reserve_stock: CheckboxState + refill_log: CheckboxState + product_order: CheckboxState + spare_parts_warehouse: CheckboxState + purchase_module: CheckboxState + + @staticmethod + def from_form(values: dict[str, str]) -> "WarehouseManagementState": + return WarehouseManagementState( + product_warehouse=CheckboxState( + checked=values.get("product_warehouse") == "on" + ), + delivery_option=SelectState(value=values.get("delivery_option")), + allow_negative_stock=CheckboxState( + checked=values.get("allow_negative_stock") == "on" + ), + route_reserve_stock=CheckboxState( + checked=values.get("route_reserve_stock") == "on" + ), + refill_log=CheckboxState(checked=values.get("refill_log") == "on"), + product_order=CheckboxState(checked=values.get("product_order") == "on"), + spare_parts_warehouse=CheckboxState( + checked=values.get("spare_parts_warehouse") == "on" + ), + purchase_module=CheckboxState( + checked=values.get("purchase_module") == "on" + ), + ) + + def control_state(self) -> None: + self.delivery_option.visible = self.product_warehouse.checked + self.allow_negative_stock.visible = self.product_warehouse.checked + self.route_reserve_stock.visible = self.product_warehouse.checked + self.refill_log.visible = self.product_warehouse.checked + self.product_order.visible = self.product_warehouse.checked + self.purchase_module.enabled = ( + self.product_warehouse.checked or self.spare_parts_warehouse.checked + ) diff --git a/project/urls.py b/project/urls.py index 3f6bf4f..1d65a46 100644 --- a/project/urls.py +++ b/project/urls.py @@ -10,5 +10,6 @@ urlpatterns = [ path("complex-form", views.ComplexFormView.as_view(), name="complex-form"), path("complex-form/handle/route-module", views.RouteModuleHandleView.as_view(), name="complex-form-handle-route-module"), path("complex-form/handle/reports", views.ReportsHandleView.as_view(), name="complex-form-handle-reports"), + path("complex-form/handle/warehouse-management", views.WarehouseManagementHandleView.as_view(), name="complex-form-handle-warehouse-management"), path("table-inline-edit", views.TableInlineEditView.as_view(), name="table-inline-edit"), ]