diff --git a/addons/crm/models/crm_team.py b/addons/crm/models/crm_team.py index 9480eaa150d..b16efe51e0a 100644 --- a/addons/crm/models/crm_team.py +++ b/addons/crm/models/crm_team.py @@ -25,6 +25,19 @@ class Team(models.Model): compute='_compute_opportunities', string='Amount of quotations to invoice', readonly=True) dashboard_graph_model = fields.Selection(selection_add=[('pipeline', 'Pipeline')]) + dashboard_graph_period_pipeline = fields.Selection([ + ('week', 'Within a Week'), + ('month', 'Within a Month'), + ('year', 'Within a Year'), + ], string='Expected to Close', help="The time period this channel's dashboard graph will consider.", + compute="_compute_dashboard_graph_period_pipeline", inverse="_inverse_dashboard_graph_period_pipeline") + dashboard_graph_group_pipeline = fields.Selection([ + ('day', 'Expected Closing Day'), + ('week', 'Expected Closing Week'), + ('month', 'Expected Closing Month'), + ('user', 'Salesperson'), + ('stage', 'Stage'), + ], string='Group by', default='day', help="How this channel's dashboard graph will group the results.") def _compute_unassigned_leads_count(self): leads_data = self.env['crm.lead'].read_group([ @@ -48,6 +61,14 @@ class Team(models.Model): team.opportunities_count = counts.get(team.id, 0) team.opportunities_amount = amounts.get(team.id, 0) + def _compute_dashboard_graph_period_pipeline(self): + for channel in self: + channel.dashboard_graph_period_pipeline = channel.dashboard_graph_period + + def _inverse_dashboard_graph_period_pipeline(self): + for channel in self.filtered(lambda ch: ch.dashboard_graph_model == 'pipeline'): + channel.dashboard_graph_period = channel.dashboard_graph_period_pipeline + def get_alias_model_name(self, vals): return 'crm.lead' @@ -77,6 +98,23 @@ class Team(models.Model): self.use_leads = False return super(Team, self)._onchange_team_type() + @api.onchange('dashboard_graph_model') + def _onchange_dashboard_graph_model(self): + if self.dashboard_graph_model == 'pipeline': + self.dashboard_graph_period_pipeline = self.dashboard_graph_period + self.dashboard_graph_group_pipeline = self.dashboard_graph_group + else: + self.dashboard_graph_period = self.dashboard_graph_period_pipeline + if not self.dashboard_graph_group: + self.dashboard_graph_group = self._fields['dashboard_graph_group'].default(self) + + @api.onchange('dashboard_graph_group_pipeline') + def _onchange_dashboard_graph_group_pipeline(self): + if self.dashboard_graph_group_pipeline == 'stage': + self.dashboard_graph_group = False + else: + self.dashboard_graph_group = self.dashboard_graph_group_pipeline + @api.constrains('dashboard_graph_model', 'use_opportunities') def _check_graph_model(self): if not self.use_opportunities and self.dashboard_graph_model == 'pipeline': @@ -170,11 +208,26 @@ class Team(models.Model): return [start_date, end_date] return super(Team, self)._graph_get_dates(today) + def _get_graph(self): + graph_datas = super(Team, self)._get_graph() + if self.dashboard_graph_model == 'pipeline' and self.dashboard_graph_group_pipeline == 'stage': + stage_data = self.env['crm.stage'].browse([d['label'] for d in graph_datas[0]['values']]).read(['sequence', 'name']) + stage_data = {d['id']: {'name': d['name'], 'sequence': d['sequence']} for d in stage_data} + graph_datas[0]['values'] = sorted(graph_datas[0]['values'], key=lambda el: stage_data[el['label']]['sequence']) + for gdata in graph_datas[0]['values']: + gdata['label'] = stage_data[gdata['label']]['name'] + return graph_datas + def _graph_date_column(self): if self.dashboard_graph_model == 'pipeline': return 'date_deadline' return super(Team, self)._graph_date_column() + def _graph_x_query(self): + if self.dashboard_graph_model == 'pipeline' and self.dashboard_graph_group_pipeline == 'stage': + return 'stage_id' + return super(Team, self)._graph_x_query() + def _graph_y_query(self): if self.dashboard_graph_model == 'pipeline': return 'SUM(expected_revenue)' diff --git a/addons/crm/views/crm_team_views.xml b/addons/crm/views/crm_team_views.xml index 23698ecc36c..94320c9c0e8 100644 --- a/addons/crm/views/crm_team_views.xml +++ b/addons/crm/views/crm_team_views.xml @@ -108,6 +108,18 @@ string="Accept Emails From" attrs="{'invisible': [('use_leads', '=', False), ('use_opportunities', '=', False)]}"/> + + {'invisible': [('dashboard_graph_model', '=', 'pipeline')]} + + + + + + {'invisible': [('dashboard_graph_model', '=', 'pipeline')]} + + + + diff --git a/addons/pos_sale/views/sales_team_views.xml b/addons/pos_sale/views/sales_team_views.xml index 0ecb5c08140..13f79a22e16 100644 --- a/addons/pos_sale/views/sales_team_views.xml +++ b/addons/pos_sale/views/sales_team_views.xml @@ -6,10 +6,10 @@ - {'invisible': [('team_type', '=', 'pos')]} + {'readonly': [('team_type', 'in', ['pos', 'ebay'])]} - {'invisible': [('team_type', '=', 'pos')]} + {'invisible': ['|', ('dashboard_graph_model', '=', 'pipeline'), ('team_type', '=', 'pos')]} diff --git a/addons/sales_team/models/crm_team.py b/addons/sales_team/models/crm_team.py index a085622fc47..131ff1fd745 100644 --- a/addons/sales_team/models/crm_team.py +++ b/addons/sales_team/models/crm_team.py @@ -65,10 +65,10 @@ class CrmTeam(models.Model): ('user', 'Salesperson'), ], string='Group by', default='day', help="How this channel's dashboard graph will group the results.") dashboard_graph_period = fields.Selection([ - ('week', 'This Week'), - ('month', 'This Month'), - ('year', 'This Year'), - ], string='Period', default='month', help="The time period this channel's dashboard graph will consider.") + ('week', 'Last Week'), + ('month', 'Last Month'), + ('year', 'Last Year'), + ], string='Scale', default='month', help="The time period this channel's dashboard graph will consider.") @api.depends('dashboard_graph_group', 'dashboard_graph_model', 'dashboard_graph_period') def _compute_dashboard_graph(self): diff --git a/addons/sales_team/views/crm_team_views.xml b/addons/sales_team/views/crm_team_views.xml index bd2b9f552e0..73e34493902 100644 --- a/addons/sales_team/views/crm_team_views.xml +++ b/addons/sales_team/views/crm_team_views.xml @@ -94,7 +94,7 @@ - + @@ -117,9 +117,9 @@ - - + +