summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYash Vaishnav <yava@odoo.com>2024-12-18 06:28:50 +0000
committerYash Vaishnav <yava@odoo.com>2025-02-05 16:42:36 +0000
commit80478819fd92d7269e346902ffa647ec545d15b3 (patch)
treebab440b0e1a36c70217a0eddd6d92092a0eb3347
parentefd72670128adfa59644482c13fbea2b477b5815 (diff)
[FIX] hr: fixed the plan smart button
In this commit, - Set the default department for the Plans smart button. - If there is no plan, it will open the form view. Task-4356557 closes odoo/odoo#196602 X-original-commit: 0a4cf6764469954f59cc59d1d4c09ccc9f02126a Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
-rw-r--r--addons/hr/models/hr_department.py27
-rw-r--r--addons/hr/views/mail_activity_plan_views.xml2
-rw-r--r--addons/mail/views/mail_activity_plan_views.xml2
3 files changed, 25 insertions, 6 deletions
diff --git a/addons/hr/models/hr_department.py b/addons/hr/models/hr_department.py
index 44e2c28c69f..9519506fd56 100644
--- a/addons/hr/models/hr_department.py
+++ b/addons/hr/models/hr_department.py
@@ -1,8 +1,10 @@
-# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import ast
+
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
+from odoo.osv import expression
class Department(models.Model):
@@ -76,10 +78,19 @@ class Department(models.Model):
department.total_employee = result.get(department.id, 0)
def _compute_plan_count(self):
- plans_data = self.env['mail.activity.plan']._read_group([('department_id', 'in', self.ids), ('company_id', 'in', self.env.companies.ids + [False])], ['department_id'], ['__count'])
+ plans_data = self.env['mail.activity.plan']._read_group(
+ domain=[
+ '|',
+ ('department_id', '=', False),
+ ('department_id', 'in', self.ids),
+ ('company_id', 'in', self.env.companies.ids + [False])
+ ],
+ groupby=['department_id'],
+ aggregates=['__count'],
+ )
plans_count = {department.id: count for department, count in plans_data}
for department in self:
- department.plans_count = plans_count.get(department.id, 0)
+ department.plans_count = plans_count.get(department.id, 0) + plans_count.get(False, 0)
@api.constrains('parent_id')
def _check_parent_id(self):
@@ -147,7 +158,15 @@ class Department(models.Model):
def action_plan_from_department(self):
action = self.env['ir.actions.actions']._for_xml_id('hr.mail_activity_plan_action')
- action['context'] = {'default_department_id': self.id, 'search_default_department_id': self.id}
+ action['context'] = dict(ast.literal_eval(action.get('context')), default_department_id=self.id)
+ domain = [
+ '|',
+ ('department_id', '=', False),
+ ('department_id', 'in', self.ids),
+ ]
+ action['domain'] = expression.AND([ast.literal_eval(action['domain']), domain]) if 'domain' in action else domain
+ if self.plans_count == 0:
+ action['views'] = [(False, 'form')]
return action
def action_employee_from_department(self):
diff --git a/addons/hr/views/mail_activity_plan_views.xml b/addons/hr/views/mail_activity_plan_views.xml
index 3fa0e4d5cd1..130356152ca 100644
--- a/addons/hr/views/mail_activity_plan_views.xml
+++ b/addons/hr/views/mail_activity_plan_views.xml
@@ -31,7 +31,7 @@
<xpath expr="//group[@name='group_plan_fields']/group[@name='company_id']" position="before">
<field name="department_assignable" invisible="1"/>
<group invisible="not department_assignable">
- <field name="department_id"/>
+ <field name="department_id" placeholder="Available for all Departments"/>
</group>
</xpath>
</field>
diff --git a/addons/mail/views/mail_activity_plan_views.xml b/addons/mail/views/mail_activity_plan_views.xml
index 75e83b6a17f..73445086f69 100644
--- a/addons/mail/views/mail_activity_plan_views.xml
+++ b/addons/mail/views/mail_activity_plan_views.xml
@@ -61,7 +61,7 @@
<field name="res_model"/>
</group>
<group name="company_id" groups="base.group_multi_company">
- <field name="company_id" domain="[('id', '=', allowed_company_ids)]"/>
+ <field name="company_id" domain="[('id', '=', allowed_company_ids)]" placeholder="Available for all Companies"/>
</group>
</group>
<notebook>