diff --git a/addons_extensions/my_custom_kudo_link/__init__.py b/addons_extensions/my_custom_kudo_link/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/addons_extensions/my_custom_kudo_link/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/addons_extensions/my_custom_kudo_link/__manifest__.py b/addons_extensions/my_custom_kudo_link/__manifest__.py new file mode 100644 index 000000000..32802fe99 --- /dev/null +++ b/addons_extensions/my_custom_kudo_link/__manifest__.py @@ -0,0 +1,21 @@ +{ + 'name': 'Project Kudos Link (Fixed)', + 'version': '18.0.1.0.0', + 'summary': 'Add Assign Kudos button and controlled employee domain by project visibility/generic', + 'category': 'Project', + 'author': 'You', + 'license': 'LGPL-3', + 'depends': [ + 'project', + 'project_kudos_plus', + 'project_task_timesheet_extended', + ], + 'data': [ + # 'views/project_task_kudo_button.xml', + 'views/task_assign_kudos_action.xml', + 'views/kudo_log_extend.xml', + ], + 'post_init_hook': 'post_init_hook', + 'installable': True, + 'application': False, +} diff --git a/addons_extensions/my_custom_kudo_link/models/__init__.py b/addons_extensions/my_custom_kudo_link/models/__init__.py new file mode 100644 index 000000000..652b4b67d --- /dev/null +++ b/addons_extensions/my_custom_kudo_link/models/__init__.py @@ -0,0 +1 @@ +from . import project_kudo_extend diff --git a/addons_extensions/my_custom_kudo_link/models/project_kudo_extend.py b/addons_extensions/my_custom_kudo_link/models/project_kudo_extend.py new file mode 100644 index 000000000..a62647f27 --- /dev/null +++ b/addons_extensions/my_custom_kudo_link/models/project_kudo_extend.py @@ -0,0 +1,70 @@ +from odoo import models, fields, api + + +class ProjectTask(models.Model): + _inherit = "project.task" + + def action_assign_kudos(self): + # Always load real task (form/kanban/list safe) + task_id = self.id or self._context.get('active_id') + task = self.env['project.task'].browse(task_id) + task.ensure_one() + + allowed = task._allowed_employees().ids + + ctx = dict( + self.env.context, + default_task_id=task.id, + default_project_id=task.project_id.id, + employee_domain=allowed, + ) + + return { + 'type': 'ir.actions.act_window', + 'name': 'Assign Kudos', + 'res_model': 'project.kudos', + 'view_mode': 'form', + 'target': 'new', + 'context': ctx, + } + + def _allowed_employees(self): + self.ensure_one() + + Employee = self.env['hr.employee'] + task = self + project = task.project_id + visibility = project.privacy_visibility + + admin_emp = Employee.search([('user_id.id', '=', 2)]) + + # FIXED HERE ↓↓↓ + if task.is_generic: + assignees = ( + task.user_ids # your system uses user_ids assigned manually + ).mapped("employee_id") + + return assignees - admin_emp + + # PRIVATE + if visibility == "followers": + users = project.message_partner_ids.mapped("user_ids") + internal_users = users.filtered(lambda u: not u.share) + employees = internal_users.mapped("employee_id") + return employees - admin_emp + + # INTERNAL ONLY + if visibility == "employees": + employees = Employee.search([ + ('user_id.share', '=', False) + ]) + return employees - admin_emp + + # PUBLIC + employees = Employee.search([]) + return employees - admin_emp + + +class ProjectKudos(models.Model): + _inherit = "project.kudos" + # unchanged diff --git a/addons_extensions/my_custom_kudo_link/views/kudo_log_extend.xml b/addons_extensions/my_custom_kudo_link/views/kudo_log_extend.xml new file mode 100644 index 000000000..d2f0fa3c9 --- /dev/null +++ b/addons_extensions/my_custom_kudo_link/views/kudo_log_extend.xml @@ -0,0 +1,16 @@ + + + project.kudos.form.extend + project.kudos + + + + + + [('id', 'in', context.get('employee_domain', []))] + + + + + + diff --git a/addons_extensions/my_custom_kudo_link/views/project_task_kudo_button.xml b/addons_extensions/my_custom_kudo_link/views/project_task_kudo_button.xml new file mode 100644 index 000000000..256991f31 --- /dev/null +++ b/addons_extensions/my_custom_kudo_link/views/project_task_kudo_button.xml @@ -0,0 +1,21 @@ + + + task.form.kudos.button + project.task + + + + + + + + + + diff --git a/addons_extensions/my_custom_kudo_link/views/task_assign_kudos_action.xml b/addons_extensions/my_custom_kudo_link/views/task_assign_kudos_action.xml new file mode 100644 index 000000000..671dfd1c4 --- /dev/null +++ b/addons_extensions/my_custom_kudo_link/views/task_assign_kudos_action.xml @@ -0,0 +1,15 @@ + + + Assign Kudos + + + action + code + + +action = records.action_assign_kudos() +result = action + + + +