diff --git a/addons/mcs_operating_system/CEO_DASHBOARD_V2_IMPLEMENTATION_REPORT.md b/addons/mcs_operating_system/CEO_DASHBOARD_V2_IMPLEMENTATION_REPORT.md new file mode 100644 index 0000000..ead1c88 --- /dev/null +++ b/addons/mcs_operating_system/CEO_DASHBOARD_V2_IMPLEMENTATION_REPORT.md @@ -0,0 +1,411 @@ +# CEO Dashboard V2 Implementation Report + +Date: 2026-08-30 +Addon: `mcs_operating_system` +Odoo version: 17 +Latest deployed commit: `45a012b` + +## Summary + +CEO Dashboard V2 was implemented as an extension of the existing `mcs_operating_system` addon. The existing operating system models, menus, CRM extensions, project extensions, timesheet extensions, profitability records, and seeded records were preserved. + +The implementation adds a visual Odoo client dashboard, client-account rollups, project health/priority fields, CEO action tracking, internal-bet separation, portfolio seeding, profitability recomputation, CRM delivery-project support, cron repair, and focused tests. + +## Files Added + +- `addons/mcs_operating_system/hooks.py` +- `addons/mcs_operating_system/models/ceo_action.py` +- `addons/mcs_operating_system/models/res_partner.py` +- `addons/mcs_operating_system/static/src/js/ceo_dashboard_v2.js` +- `addons/mcs_operating_system/static/src/scss/ceo_dashboard_v2.scss` +- `addons/mcs_operating_system/static/src/xml/ceo_dashboard_v2.xml` +- `addons/mcs_operating_system/tests/__init__.py` +- `addons/mcs_operating_system/tests/test_ceo_dashboard_v2.py` +- `addons/mcs_operating_system/views/ceo_action_views.xml` +- `addons/mcs_operating_system/views/res_partner_views.xml` +- `addons/mcs_operating_system/CEO_DASHBOARD_V2_IMPLEMENTATION_REPORT.md` + +## Files Modified + +- `addons/mcs_operating_system/__init__.py` +- `addons/mcs_operating_system/__manifest__.py` +- `addons/mcs_operating_system/data/crm_data.xml` +- `addons/mcs_operating_system/data/project_data.xml` +- `addons/mcs_operating_system/models/__init__.py` +- `addons/mcs_operating_system/models/crm_lead.py` +- `addons/mcs_operating_system/models/dashboard.py` +- `addons/mcs_operating_system/models/operating.py` +- `addons/mcs_operating_system/models/project.py` +- `addons/mcs_operating_system/security/ir.model.access.csv` +- `addons/mcs_operating_system/views/crm_lead_views.xml` +- `addons/mcs_operating_system/views/dashboard_views.xml` +- `addons/mcs_operating_system/views/menu.xml` +- `addons/mcs_operating_system/views/operating_views.xml` +- `addons/mcs_operating_system/views/project_views.xml` + +## Models Created + +### `mcs.ceo.action` + +Tracks actions, decisions, approvals, blockers, and financial/business-impact items requiring CEO attention. + +Fields include: + +- `title` +- `category` +- `priority` +- `priority_rank` +- `state` +- `date_due` +- `responsible_user_id` +- `partner_id` +- `project_id` +- `lead_id` +- `expected_financial_impact` +- `business_impact` +- `next_action` +- `blocker` +- `notes` +- `date_created` +- `date_completed` + +Workflow actions: + +- Open +- Waiting +- Blocked +- Completed +- Cancelled + +## Models Extended + +### `res.partner` + +Added lightweight client-account rollup fields: + +- `mcs_is_client_account` +- `mcs_account_status` +- `mcs_account_health` +- `mcs_currency_id` +- `mcs_monthly_revenue` +- `mcs_contracted_value` +- `mcs_monthly_hours` +- `mcs_effective_hourly_revenue` +- `mcs_account_owner_id` +- `mcs_next_account_action` +- `mcs_account_risk_reason` +- `mcs_project_ids` + +A defensive public maintenance action was added: + +- `action_mcs_ensure_client_account_columns` + +This was needed to repair the live half-upgraded state where the registry saw the new partner fields before the database columns existed. + +### `project.project` + +Added delivery, portfolio, priority, stale, and internal-bet fields: + +- `mcs_delivery_type` +- `mcs_portfolio_health` +- `mcs_risk_score` +- `mcs_last_meaningful_progress_date` +- `mcs_days_since_meaningful_progress` +- `mcs_stale` +- `mcs_stale_threshold_days` +- `mcs_launch_completion_date` +- `mcs_revenue_impact_score` +- `mcs_client_importance_score` +- `mcs_urgency_score` +- `mcs_completion_leverage_score` +- `mcs_resource_cost_score` +- `mcs_commercial_priority_score` +- `mcs_internal_product_stage` +- `mcs_internal_expected_revenue` +- `mcs_internal_actual_revenue` +- `mcs_next_milestone` +- `mcs_next_decision_date` + +### `crm.lead` + +Added: + +- `action_mcs_create_delivery_project` + +This supports creating or linking a delivery project from a won opportunity while preserving the standard customer/project relationship. + +### `mcs.client.profitability` + +Added: + +- `action_recompute_from_project` +- Project/period onchange recomputation + +The recompute pulls project revenue and period timesheets into profitability fields. + +### `mcs.operating.dashboard` + +Added: + +- `get_ceo_dashboard_v2_data` +- `action_mcs_seed_v2_operating_data` + +The dashboard payload contains company pulse, revenue, funnel, portfolio, project health, capacity, time distribution, allocation guardrail, CEO actions, internal bets, and drill-down actions. + +## Computed Fields + +Client-account computed rollups: + +- Account health +- Monthly revenue +- Contracted value +- Monthly hours +- Effective hourly revenue + +Project computed fields: + +- Commercial priority score +- Last meaningful progress date +- Days since meaningful progress +- Stale flag +- Risk score +- Portfolio health + +Dashboard computed payload: + +- Revenue coverage +- Revenue coverage status +- Revenue gap +- Pipeline coverage +- Pipeline coverage status +- Team utilization +- Billable utilization +- Project health distribution +- Capacity rows per employee +- Time distribution by work category and billable class +- Resource allocation guardrail + +## XML Views + +Added: + +- CEO action tree/form/search/action views +- Client account partner tree/form/action views +- CEO Dashboard V2 client action + +Extended: + +- Project form operating section +- CRM lead header +- Profitability form +- MCS Operating System menu + +## JS / OWL Dashboard + +Added Odoo client action: + +- Tag: `mcs_ceo_dashboard_v2` +- JS component: `McsCeoDashboardV2` +- Template: `mcs_operating_system.CeoDashboardV2` + +Dashboard rows: + +- Company Pulse +- Revenue Target vs Actual vs Forecast +- CRM Funnel / Pipeline Coverage +- Client Portfolio Health +- Project Health Distribution +- Team Capacity +- Hours Distribution +- CEO Attention Queue +- Internal Bets +- Resource Allocation Guardrail + +## Menus And Actions + +Main CEO Dashboard menu now points to: + +- `action_mcs_ceo_dashboard_v2` + +Added management menus: + +- Client Accounts +- CEO Actions + +The classic form dashboard still exists as: + +- `action_mcs_operating_dashboard` + +## Security Changes + +Added access: + +- `mcs.ceo.action` read-only for Operating System User +- `mcs.ceo.action` full access for Operating System Manager +- `mcs.operating.dashboard` read-only for Operating System Manager + +Changed: + +- Dashboard financial access is manager-only. + +## Cron Changes + +The existing cron was preserved: + +- `MCS: Schedule Missing CRM Follow-Ups` + +The live root cause was data/configuration drift: the cron existed but was inactive. The V2 setup hook now explicitly repairs this intended state without creating duplicate activities. + +Live result: + +- Cron active: `True` + +## Data / Migration Changes + +Static CRM and project seed files were marked `noupdate` to prevent upgrade conflicts with live records that had drifted from their original XML IDs. + +Added idempotent setup logic for client accounts and portfolio workstreams. + +Seeded client accounts: + +- ClicksToCart +- Wallaceton +- Maison de Treats +- Lens and Frames +- TNCSC +- Infini +- Organic Healthy Family +- Hondavert +- RaceNation +- Racewerks +- Internal + +Seeded or linked workstreams: + +- ClicksToCart - ERP Implementation +- ClicksToCart - App Development +- ClicksToCart - Social Media Handling +- Wallaceton - SEO +- Wallaceton - Social Media Handling +- Wallaceton - Ads Management +- Maison de Treats - Social Media Handling +- Lens and Frames - SEO +- Lens and Frames - Social Media Handling +- Lens and Frames - Ads Management +- TNCSC - Ads Management +- TNCSC - Videos +- TNCSC - ERP +- Infini - Social Media Handling +- Organic Healthy Family - Shopify Store Development +- Hondavert - Website Development +- Hondavert - App Development +- RaceNation - Website Development +- Racewerks - Website Development +- Internal - Shopify App for Revenue Generation +- Internal - Custom Product Development + +The hook does not overwrite live task/project data. It creates missing records and fills blank operating fields only. + +## Tests Added + +Added transaction tests for: + +- Project commercial priority score +- Client account rollup +- CEO action workflow +- Dashboard V2 payload sections +- CRM follow-up idempotency + +Test file: + +- `addons/mcs_operating_system/tests/test_ceo_dashboard_v2.py` + +## Tests / Validation Executed + +Local validation executed: + +- Python syntax compile over `mcs_operating_system` Python files +- XML parse validation over `mcs_operating_system` XML files + +Local Odoo test execution was not possible because Docker Desktop was not running on this machine: + +- Docker API error: Docker daemon pipe not found + +Live validation executed through XML-RPC: + +- Module upgrade succeeded +- V2 seed action succeeded +- Dashboard payload method succeeded +- Client action exists +- Client accounts created/linked +- Delivery type projects created/linked +- Internal bets separated +- Follow-up cron active + +## Live Upgrade Result + +Final live upgrade result: + +- Module: `mcs_operating_system` +- State: `installed` +- Version: `17.0.1.0.0` +- Upgrade action returned successfully + +Live verification: + +- Client action `mcs_ceo_dashboard_v2`: exists +- Client accounts: 11 +- Projects with delivery type: 21 +- Internal bets: 2 +- CRM follow-up cron active: True +- Dashboard payload sections returned: + - `actions` + - `allocation_guardrail` + - `capacity` + - `ceo_actions` + - `company_pulse` + - `internal_bets` + - `kpis` + - `period` + - `portfolio` + - `project_health` + - `revenue` + - `time_distribution` + +Dashboard payload counts: + +- Portfolio rows: 10 +- Capacity rows: 15 +- Internal bet rows: 2 + +Revenue coverage on verification: + +- Coverage: 0% +- Status: critical + +This is expected until monthly revenue/cost source data is populated in live records. + +## Known Limitations + +1. Browser screenshot and browser-console validation were not completed because no authenticated browser session was available through the current tool context. +2. Local Odoo automated tests were added but not executed because Docker Desktop was not running. +3. Operating cost is derived from open HR contract wages when `hr.contract` is available. It does not yet include other overhead categories such as rent, subscriptions, or infrastructure. +4. Internal-bet estimated cost is currently returned as `0` because no employee/hourly-cost source model exists yet in this addon. +5. CRM-to-project workflow supports delivery project creation, but automatic sale order creation/linking is not fully implemented. +6. Portfolio stale calculation uses available signals: project write date, task write date, and timesheet dates. It does not yet detect milestone completion or formal project status updates separately. +7. Dashboard visuals are implemented as an Odoo client action with cards, bars, and tables. It is not a spreadsheet-style BI dashboard and does not yet use external charting libraries. +8. Some seeded legacy setup records had live drift. CRM/project static setup XML was marked `noupdate` to avoid duplicate/unique conflicts during upgrades. + +## Not Fully Implemented From Specification + +- Fully automatic opportunity-won sale order creation. +- Dedicated configuration model for stale threshold and pipeline multiplier. +- Real internal-product cost calculation from employee cost rates. +- Browser-based screenshot validation. +- Browser console validation. +- Full performance optimization with `read_group` everywhere. +- Full automated test execution in this environment. + +## Current Status + +CEO Dashboard V2 is implemented, pushed, and upgraded on the live server. The dashboard backend payload is returning live data, drill-down action definitions exist, the visual client action is registered, portfolio rollup data is seeded without overwriting live work, internal products are separated, and the CRM follow-up cron is active.