diff --git a/fusion_claims/models/dashboard.py b/fusion_claims/models/dashboard.py index 24d237a1..3b6fcfc5 100644 --- a/fusion_claims/models/dashboard.py +++ b/fusion_claims/models/dashboard.py @@ -224,3 +224,79 @@ class FusionClaimsDashboard(models.TransientModel): rec.count_mdc = SO.search_count(active + [('x_fc_sale_type', '=', 'muscular_dystrophy')]) rec.count_hardship = SO.search_count(active + [('x_fc_sale_type', '=', 'hardship')]) rec.count_acsd = SO.search_count(active + [('x_fc_client_type', '=', 'ACS')]) + + # ========================================================================= + # ADP Pre-Approval (right column, 4 tiles) + # ========================================================================= + adp_waiting_app_count = fields.Integer(compute='_compute_workflow_counts') + adp_app_received_count = fields.Integer(compute='_compute_workflow_counts') + adp_ready_submit_count = fields.Integer(compute='_compute_workflow_counts') + adp_needs_correction_count = fields.Integer(compute='_compute_workflow_counts') + + # ========================================================================= + # ADP Post-Approval (right column, 4 tiles) + # ========================================================================= + adp_approved_count = fields.Integer(compute='_compute_workflow_counts') + adp_ready_delivery_count = fields.Integer(compute='_compute_workflow_counts') + adp_ready_bill_count = fields.Integer(compute='_compute_workflow_counts') + adp_on_hold_count = fields.Integer(compute='_compute_workflow_counts') + + # ========================================================================= + # MOD (right column, 5 tiles) + # ========================================================================= + mod_awaiting_funding_count = fields.Integer(compute='_compute_workflow_counts') + mod_funding_approved_count = fields.Integer(compute='_compute_workflow_counts') + mod_pca_received_count = fields.Integer(compute='_compute_workflow_counts') + mod_project_complete_count = fields.Integer(compute='_compute_workflow_counts') + mod_pod_submitted_count = fields.Integer(compute='_compute_workflow_counts') + + def _compute_workflow_counts(self): + SO = self.env['sale.order'].sudo() + for rec in self: + base = rec._role_filter_domain() + + # ADP Pre-Approval + rec.adp_waiting_app_count = SO.search_count(base + [ + ('x_fc_adp_application_status', 'in', + ['waiting_for_application', 'assessment_completed']), + ]) + rec.adp_app_received_count = SO.search_count(base + [ + ('x_fc_adp_application_status', '=', 'application_received'), + ]) + rec.adp_ready_submit_count = SO.search_count(base + [ + ('x_fc_adp_application_status', '=', 'ready_submission'), + ]) + rec.adp_needs_correction_count = SO.search_count(base + [ + ('x_fc_adp_application_status', '=', 'needs_correction'), + ]) + + # ADP Post-Approval + rec.adp_approved_count = SO.search_count(base + [ + ('x_fc_adp_application_status', 'in', ['approved', 'approved_deduction']), + ]) + rec.adp_ready_delivery_count = SO.search_count(base + [ + ('x_fc_adp_application_status', '=', 'ready_delivery'), + ]) + rec.adp_ready_bill_count = SO.search_count(base + [ + ('x_fc_adp_application_status', '=', 'ready_bill'), + ]) + rec.adp_on_hold_count = SO.search_count(base + [ + ('x_fc_adp_application_status', '=', 'on_hold'), + ]) + + # MOD + rec.mod_awaiting_funding_count = SO.search_count(base + [ + ('x_fc_mod_status', '=', 'awaiting_funding'), + ]) + rec.mod_funding_approved_count = SO.search_count(base + [ + ('x_fc_mod_status', '=', 'funding_approved'), + ]) + rec.mod_pca_received_count = SO.search_count(base + [ + ('x_fc_mod_status', '=', 'contract_received'), + ]) + rec.mod_project_complete_count = SO.search_count(base + [ + ('x_fc_mod_status', '=', 'project_complete'), + ]) + rec.mod_pod_submitted_count = SO.search_count(base + [ + ('x_fc_mod_status', '=', 'pod_submitted'), + ]) diff --git a/fusion_claims/tests/test_dashboard.py b/fusion_claims/tests/test_dashboard.py index cf8534b4..08faf6f0 100644 --- a/fusion_claims/tests/test_dashboard.py +++ b/fusion_claims/tests/test_dashboard.py @@ -242,3 +242,60 @@ class TestFusionClaimsDashboard(TransactionCase): so.with_context(skip_status_validation=True).write({'state': 'cancel'}) dashboard = self.Dashboard.with_user(self.manager).create({}) self.assertEqual(dashboard.count_wsib, 0) + + # ------------------------------------------------------------------------- + # Task 6 — ADP + MOD workflow counts + # ------------------------------------------------------------------------- + def test_adp_pre_approval_tile_counts(self): + SO = self.env['sale.order'].with_context(skip_status_validation=True) + SO.create({'partner_id': self.partner.id, 'user_id': self.manager.id, + 'x_fc_sale_type': 'adp', + 'x_fc_adp_application_status': 'waiting_for_application'}) + SO.create({'partner_id': self.partner.id, 'user_id': self.manager.id, + 'x_fc_sale_type': 'adp', + 'x_fc_adp_application_status': 'application_received'}) + SO.create({'partner_id': self.partner.id, 'user_id': self.manager.id, + 'x_fc_sale_type': 'adp', + 'x_fc_adp_application_status': 'ready_submission'}) + SO.create({'partner_id': self.partner.id, 'user_id': self.manager.id, + 'x_fc_sale_type': 'adp', + 'x_fc_adp_application_status': 'needs_correction'}) + dashboard = self.Dashboard.with_user(self.manager).create({}) + self.assertEqual(dashboard.adp_waiting_app_count, 1) + self.assertEqual(dashboard.adp_app_received_count, 1) + self.assertEqual(dashboard.adp_ready_submit_count, 1) + self.assertEqual(dashboard.adp_needs_correction_count, 1) + + def test_adp_post_approval_tile_counts(self): + SO = self.env['sale.order'].with_context(skip_status_validation=True) + SO.create({'partner_id': self.partner.id, 'user_id': self.manager.id, + 'x_fc_sale_type': 'adp', + 'x_fc_adp_application_status': 'approved'}) + SO.create({'partner_id': self.partner.id, 'user_id': self.manager.id, + 'x_fc_sale_type': 'adp', + 'x_fc_adp_application_status': 'ready_delivery'}) + SO.create({'partner_id': self.partner.id, 'user_id': self.manager.id, + 'x_fc_sale_type': 'adp', + 'x_fc_adp_application_status': 'ready_bill'}) + SO.create({'partner_id': self.partner.id, 'user_id': self.manager.id, + 'x_fc_sale_type': 'adp', + 'x_fc_adp_application_status': 'on_hold'}) + dashboard = self.Dashboard.with_user(self.manager).create({}) + self.assertEqual(dashboard.adp_approved_count, 1) + self.assertEqual(dashboard.adp_ready_delivery_count, 1) + self.assertEqual(dashboard.adp_ready_bill_count, 1) + self.assertEqual(dashboard.adp_on_hold_count, 1) + + def test_mod_tile_counts(self): + SO = self.env['sale.order'].with_context(skip_status_validation=True) + for status in ('awaiting_funding', 'funding_approved', 'contract_received', + 'project_complete', 'pod_submitted'): + SO.create({'partner_id': self.partner.id, 'user_id': self.manager.id, + 'x_fc_sale_type': 'march_of_dimes', + 'x_fc_mod_status': status}) + dashboard = self.Dashboard.with_user(self.manager).create({}) + self.assertEqual(dashboard.mod_awaiting_funding_count, 1) + self.assertEqual(dashboard.mod_funding_approved_count, 1) + self.assertEqual(dashboard.mod_pca_received_count, 1) + self.assertEqual(dashboard.mod_project_complete_count, 1) + self.assertEqual(dashboard.mod_pod_submitted_count, 1)