# app/modules/orders/definition.py """ Orders module definition. Defines the orders module including its features, menu items, route configurations, and self-contained module settings. """ from app.modules.base import ( MenuItemDefinition, MenuSectionDefinition, ModuleDefinition, PermissionDefinition, ) from app.modules.enums import FrontendType def _get_admin_router(): """Lazy import of admin router to avoid circular imports.""" from app.modules.orders.routes.admin import router return router def _get_store_router(): """Lazy import of store router to avoid circular imports.""" from app.modules.orders.routes.store import router return router def _get_metrics_provider(): """Lazy import of metrics provider to avoid circular imports.""" from app.modules.orders.services.order_metrics import order_metrics_provider return order_metrics_provider def _get_feature_provider(): """Lazy import of feature provider to avoid circular imports.""" from app.modules.orders.services.order_features import order_feature_provider return order_feature_provider def _get_widget_provider(): """Lazy import of widget provider to avoid circular imports.""" from app.modules.orders.services.order_widgets import order_widget_provider return order_widget_provider # Orders module definition orders_module = ModuleDefinition( code="orders", name="Order Management", description=( "Order processing, fulfillment tracking, customer checkout, " "invoicing, and bulk order operations. Uses the payments module for checkout." ), version="1.0.0", requires=["payments", "catalog", "inventory"], # Depends on payments, catalog, and inventory modules (marketplace imported lazily) # Module-driven permissions permissions=[ PermissionDefinition( id="orders.view", label_key="orders.permissions.orders_view", description_key="orders.permissions.orders_view_desc", category="orders", ), PermissionDefinition( id="orders.edit", label_key="orders.permissions.orders_edit", description_key="orders.permissions.orders_edit_desc", category="orders", ), PermissionDefinition( id="orders.cancel", label_key="orders.permissions.orders_cancel", description_key="orders.permissions.orders_cancel_desc", category="orders", ), PermissionDefinition( id="orders.refund", label_key="orders.permissions.orders_refund", description_key="orders.permissions.orders_refund_desc", category="orders", ), ], features=[ "order_management", # Basic order CRUD "order_bulk_actions", # Bulk status updates "order_export", # Export orders to CSV/Excel "automation_rules", # Order automation rules "fulfillment_tracking", # Shipping and tracking "shipping_management", # Carrier integration "order_exceptions", # Order item exception handling "customer_checkout", # Customer checkout flow "invoice_generation", # Invoice creation "invoice_pdf", # PDF invoice generation ], menu_items={ FrontendType.ADMIN: [ "orders", # Platform-wide order management ], FrontendType.STORE: [ "orders", # Store order management ], }, # New module-driven menu definitions menus={ FrontendType.ADMIN: [ MenuSectionDefinition( id="storeOps", label_key="orders.menu.store_operations", icon="clipboard-list", order=40, items=[ MenuItemDefinition( id="orders", label_key="orders.menu.orders", icon="clipboard-list", route="/admin/orders", order=40, ), ], ), ], FrontendType.STORE: [ MenuSectionDefinition( id="sales", label_key="orders.menu.sales_orders", icon="document-text", order=20, items=[ MenuItemDefinition( id="orders", label_key="orders.menu.orders", icon="document-text", route="/store/{store_code}/orders", order=10, is_mandatory=True, requires_permission="orders.view", ), ], ), ], FrontendType.STOREFRONT: [ MenuSectionDefinition( id="account", label_key=None, order=10, items=[ MenuItemDefinition( id="orders", label_key="orders.storefront.account.orders", icon="clipboard-list", route="account/orders", order=40, ), ], ), ], }, is_core=False, # ========================================================================= # Self-Contained Module Configuration # ========================================================================= is_self_contained=True, services_path="app.modules.orders.services", models_path="app.modules.orders.models", schemas_path="app.modules.orders.schemas", exceptions_path="app.modules.orders.exceptions", migrations_path="migrations", # Metrics provider for dashboard statistics metrics_provider=_get_metrics_provider, feature_provider=_get_feature_provider, widget_provider=_get_widget_provider, ) def get_orders_module_with_routers() -> ModuleDefinition: """ Get orders module with routers attached. This function attaches the routers lazily to avoid circular imports during module initialization. """ orders_module.admin_router = _get_admin_router() orders_module.store_router = _get_store_router() return orders_module __all__ = ["orders_module", "get_orders_module_with_routers"]