Files
orion/app/modules/prospecting/definition.py
Samir Boulahtit 4d07418f44
Some checks failed
CI / ruff (push) Successful in 9s
CI / pytest (push) Failing after 47m22s
CI / validate (push) Successful in 24s
CI / dependency-scanning (push) Successful in 29s
CI / docs (push) Has been skipped
CI / deploy (push) Has been skipped
fix(prospecting): replace missing icons with available registry icons
map-pin→location-marker, target→cursor-click, device-mobile→phone, radar→globe-alt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 19:23:02 +01:00

166 lines
5.5 KiB
Python

# app/modules/prospecting/definition.py
"""
Prospecting module definition.
Lead discovery, scoring, and campaign management for Luxembourg businesses.
Supports digital (domain scanning) and offline (street/networking) lead channels.
Admin-only module for superadmin and platform admin users.
"""
from app.modules.base import (
MenuItemDefinition,
MenuSectionDefinition,
ModuleDefinition,
PermissionDefinition,
)
from app.modules.enums import FrontendType
def _get_admin_api_router():
"""Lazy import of admin API router to avoid circular imports."""
from app.modules.prospecting.routes.api.admin import router
return router
def _get_admin_page_router():
"""Lazy import of admin page router to avoid circular imports."""
from app.modules.prospecting.routes.pages.admin import router
return router
prospecting_module = ModuleDefinition(
code="prospecting",
name="Prospecting",
description="Lead discovery, scoring, and campaign management for Luxembourg businesses.",
version="1.0.0",
is_core=False,
is_self_contained=True,
permissions=[
PermissionDefinition(
id="prospecting.view",
label_key="prospecting.permissions.view",
description_key="prospecting.permissions.view_desc",
category="prospecting",
),
PermissionDefinition(
id="prospecting.manage",
label_key="prospecting.permissions.manage",
description_key="prospecting.permissions.manage_desc",
category="prospecting",
),
PermissionDefinition(
id="prospecting.scan",
label_key="prospecting.permissions.scan",
description_key="prospecting.permissions.scan_desc",
category="prospecting",
),
PermissionDefinition(
id="prospecting.campaigns",
label_key="prospecting.permissions.campaigns",
description_key="prospecting.permissions.campaigns_desc",
category="prospecting",
),
PermissionDefinition(
id="prospecting.export",
label_key="prospecting.permissions.export",
description_key="prospecting.permissions.export_desc",
category="prospecting",
),
],
features=[
"domain_scanning",
"offline_capture",
"opportunity_scoring",
"campaign_management",
"lead_export",
],
menu_items={
FrontendType.ADMIN: [
"prospecting-dashboard",
"prospects",
"leads",
"capture",
"scan-jobs",
"campaigns",
],
},
menus={
FrontendType.ADMIN: [
MenuSectionDefinition(
id="prospecting",
label_key="prospecting.menu.prospecting",
icon="cursor-click",
order=60,
items=[
MenuItemDefinition(
id="prospecting-dashboard",
label_key="prospecting.menu.dashboard",
icon="chart-bar",
route="/admin/prospecting",
order=1,
),
MenuItemDefinition(
id="prospects",
label_key="prospecting.menu.prospects",
icon="globe",
route="/admin/prospecting/prospects",
order=5,
),
MenuItemDefinition(
id="leads",
label_key="prospecting.menu.leads",
icon="cursor-click",
route="/admin/prospecting/leads",
order=10,
),
MenuItemDefinition(
id="capture",
label_key="prospecting.menu.capture",
icon="phone",
route="/admin/prospecting/capture",
order=15,
),
MenuItemDefinition(
id="scan-jobs",
label_key="prospecting.menu.scan_jobs",
icon="globe-alt",
route="/admin/prospecting/scan-jobs",
order=20,
),
MenuItemDefinition(
id="campaigns",
label_key="prospecting.menu.campaigns",
icon="mail",
route="/admin/prospecting/campaigns",
order=25,
),
],
),
],
},
migrations_path="migrations",
services_path="app.modules.prospecting.services",
models_path="app.modules.prospecting.models",
schemas_path="app.modules.prospecting.schemas",
exceptions_path="app.modules.prospecting.exceptions",
templates_path="templates",
locales_path="locales",
tasks_path="app.modules.prospecting.tasks",
)
def get_prospecting_module_with_routers() -> ModuleDefinition:
"""
Get prospecting module with routers attached.
Attaches routers lazily to avoid circular imports during module initialization.
"""
prospecting_module.admin_api_router = _get_admin_api_router()
prospecting_module.admin_page_router = _get_admin_page_router()
return prospecting_module
__all__ = ["prospecting_module", "get_prospecting_module_with_routers"]