diff --git a/odex30_base/system_notification/models/models.py b/odex30_base/system_notification/models/models.py index 9e87807..a7ede9c 100644 --- a/odex30_base/system_notification/models/models.py +++ b/odex30_base/system_notification/models/models.py @@ -1,12 +1,8 @@ -# -*- coding: utf-8 -*- from odoo import models, fields, api, _ from datetime import datetime - - class BaseAutomation(models.Model): _inherit = 'base.automation' - send_notify = fields.Boolean(string='Send Notify', help="Send Notifications Within The System") notify_title = fields.Char(string='Notification Title', related='model_id.name') notify_note = fields.Char(string='Notification Note') @@ -44,13 +40,11 @@ class BaseAutomation(models.Model): help="Send Notification To The Financial Manager Only") cyber_security_id = fields.Boolean(string='Cyber Security', help="Send Notification To The Cyber Security Only") - def check_user_access(self, user_id, record, mode='read'): try: return record.with_user(user_id).has_access(mode) except Exception: return False - def access_users(self, groups, record): users = [] for group in groups: @@ -60,26 +54,36 @@ class BaseAutomation(models.Model): if self.hr_notifys: if hasattr(record, 'employee_id') and record.employee_id: hr_mail = record.employee_id.sudo().company_id.hr_email - if self.direct_manager_notify and user.id == record.employee_id.sudo().parent_id.user_id.id: - users.append(user.partner_id.email) - if self.department_manager_notify and user.id == record.employee_id.sudo().coach_id.user_id.id: - users.append(user.partner_id.email) - if self.employee_notify and user.id == record.employee_id.sudo().user_id.id: - users.append(user.partner_id.email) - if self.ceo_notify and user.id == record.employee_id.sudo().company_id.general_supervisor_id.user_id.id: - users.append(user.partner_id.email) - if self.hr_manager_notify and user.id == record.employee_id.sudo().company_id.hr_manager_id.user_id.id: - users.append(user.partner_id.email) - if self.services_manager_id and user.id == record.employee_id.sudo().company_id.services_manager_id.user_id.id: - users.append(user.partner_id.email) - if self.it_manager_id and user.id == record.employee_id.sudo().company_id.it_manager_id.user_id.id: - users.append(user.partner_id.email) - if self.admin_manager_id and user.id == record.employee_id.sudo().company_id.admin_manager_id.user_id.id: - users.append(user.partner_id.email) - if self.financial_manager_id and user.id == record.employee_id.sudo().company_id.financial_manager_id.user_id.id: - users.append(user.partner_id.email) - if self.cyber_security_id and user.id == record.employee_id.sudo().company_id.cyber_security_id.user_id.id: - users.append(user.partner_id.email) + if self.direct_manager_notify: + if user.id == record.employee_id.sudo().parent_id.user_id.id: + users.append(user.partner_id.email) + if self.department_manager_notify: + if user.id == record.employee_id.sudo().coach_id.user_id.id: + users.append(user.partner_id.email) + if self.employee_notify: + if user.id == record.employee_id.sudo().user_id.id: + users.append(user.partner_id.email) + if self.ceo_notify: + if user.id == record.employee_id.sudo().company_id.general_supervisor_id.user_id.id: + users.append(user.partner_id.email) + if self.hr_manager_notify: + if user.id == record.employee_id.sudo().company_id.hr_manager_id.user_id.id: + users.append(user.partner_id.email) + if self.services_manager_id: + if user.id == record.employee_id.sudo().company_id.services_manager_id.user_id.id: + users.append(user.partner_id.email) + if self.it_manager_id: + if user.id == record.employee_id.sudo().company_id.it_manager_id.user_id.id: + users.append(user.partner_id.email) + if self.admin_manager_id: + if user.id == record.employee_id.sudo().company_id.admin_manager_id.user_id.id: + users.append(user.partner_id.email) + if self.financial_manager_id: + if user.id == record.employee_id.sudo().company_id.financial_manager_id.user_id.id: + users.append(user.partner_id.email) + if self.cyber_security_id: + if user.id == record.employee_id.sudo().company_id.cyber_security_id.user_id.id: + users.append(user.partner_id.email) if self.hr_email_notify and hr_mail not in users: users.append(hr_mail) else: @@ -87,45 +91,55 @@ class BaseAutomation(models.Model): else: users.append(user.partner_id.email) return ",".join(users) - def access_users_ids(self, groups, record): processed_users = set() for group in groups: for user in group.users: - if user.id not in processed_users and self.check_user_access(user_id=user.id, record=record, mode='read'): + if user.id not in processed_users and self.check_user_access(user_id=user.id, record=record,mode='read'): if self.hr_notifys: if hasattr(record, 'employee_id') and record.employee_id: - if self.direct_manager_notify and user.id == record.employee_id.sudo().parent_id.user_id.id: - processed_users.add(user.id) - if self.department_manager_notify and user.id == record.employee_id.sudo().coach_id.user_id.id: - processed_users.add(user.id) - if self.employee_notify and user.id == record.employee_id.sudo().user_id.id: - processed_users.add(user.id) - if self.ceo_notify and user.id == record.employee_id.sudo().company_id.general_supervisor_id.user_id.id: - processed_users.add(user.id) - if self.hr_manager_notify and user.id == record.employee_id.sudo().company_id.hr_manager_id.user_id.id: - processed_users.add(user.id) - if self.services_manager_id and user.id == record.employee_id.sudo().company_id.services_manager_id.user_id.id: - processed_users.add(user.id) - if self.it_manager_id and user.id == record.employee_id.sudo().company_id.it_manager_id.user_id.id: - processed_users.add(user.id) - if self.admin_manager_id and user.id == record.employee_id.sudo().company_id.admin_manager_id.user_id.id: - processed_users.add(user.id) - if self.financial_manager_id and user.id == record.employee_id.sudo().company_id.financial_manager_id.user_id.id: - processed_users.add(user.id) - if self.cyber_security_id and user.id == record.employee_id.sudo().company_id.cyber_security_id.user_id.id: - processed_users.add(user.id) + if self.direct_manager_notify: + if user.id == record.employee_id.sudo().parent_id.user_id.id: + processed_users.add(user.id) + if self.department_manager_notify: + if user.id == record.employee_id.sudo().coach_id.user_id.id: + processed_users.add(user.id) + if self.employee_notify: + if user.id == record.employee_id.sudo().user_id.id: + processed_users.add(user.id) + if self.ceo_notify: + if user.id == record.employee_id.sudo().company_id.general_supervisor_id.user_id.id: + processed_users.add(user.id) + if self.hr_manager_notify: + if user.id == record.employee_id.sudo().company_id.hr_manager_id.user_id.id: + processed_users.add(user.id) + if self.services_manager_id: + if user.id == record.employee_id.sudo().company_id.services_manager_id.user_id.id: + processed_users.add(user.id) + if self.it_manager_id: + if user.id == record.employee_id.sudo().company_id.it_manager_id.user_id.id: + processed_users.add(user.id) + if self.admin_manager_id: + if user.id == record.employee_id.sudo().company_id.admin_manager_id.user_id.id: + processed_users.add(user.id) + if self.financial_manager_id: + if user.id == record.employee_id.sudo().company_id.financial_manager_id.user_id.id: + processed_users.add(user.id) + if self.cyber_security_id: + if user.id == record.employee_id.sudo().company_id.cyber_security_id.user_id.id: + processed_users.add(user.id) else: processed_users.add(user.id) else: processed_users.add(user.id) return list(processed_users) - def get_notify_message(self, record): user_ids = self.access_users_ids(self.notify_to_groups_ids, record) today = datetime.today() for user in user_ids: - summary = (self.name or (self.template_id.name if hasattr(self, 'template_id') and self.template_id else 'Notification')) + summary = (self.name or + (self.template_id.name if hasattr(self, 'template_id') and self.template_id else None) or + 'Notification') data = { 'res_id': record.id, 'res_model_id': self.env['ir.model'].search([('model', '=', record._name)]).id, @@ -135,47 +149,46 @@ class BaseAutomation(models.Model): 'date_deadline': today } self.env['mail.activity'].create(data) - if self.hr_notifys and not user_ids and self.notify_to_groups_ids: - if hasattr(record, 'employee_id') and record.employee_id: - hr_manager_user = record.employee_id.sudo().company_id.hr_manager_id.user_id.id - summary = (self.name or (self.template_id.name if hasattr(self, 'template_id') and self.template_id else 'Notification')) - data = { - 'res_id': record.id, - 'res_model_id': self.env['ir.model'].search([('model', '=', record._name)]).id, - 'user_id': hr_manager_user, - 'summary': _(summary), - 'activity_type_id': self.env.ref('mail.mail_activity_data_todo').id, - 'date_deadline': today - } - self.env['mail.activity'].create(data) - + if self.hr_notifys: + if not user_ids and self.notify_to_groups_ids: + if hasattr(record, 'employee_id') and record.employee_id: + hr_manager_user = record.employee_id.sudo().company_id.hr_manager_id.user_id.id + summary = (self.name or + (self.template_id.name if hasattr(self, 'template_id') and self.template_id else None) or + 'Notification') + data = { + 'res_id': record.id, + 'res_model_id': self.env['ir.model'].search([('model', '=', record._name)]).id, + 'user_id': hr_manager_user, + 'summary': _(summary), + 'activity_type_id': self.env.ref('mail.mail_activity_data_todo').id, + 'date_deadline': today + } + self.env['mail.activity'].create(data) def get_mail_to(self, record): users = self.access_users(self.notify_to_groups_ids, record) - if self.hr_notifys and not users and self.notify_to_groups_ids: - if hasattr(record, 'employee_id') and record.employee_id: - hr_manager_mail = record.employee_id.sudo().company_id.hr_manager_id.user_id.partner_id.email - users = hr_manager_mail + if self.hr_notifys: + if not users and self.notify_to_groups_ids: + if hasattr(record, 'employee_id') and record.employee_id: + hr_manager_mail = record.employee_id.sudo().company_id.hr_manager_id.user_id.partner_id.email + users = hr_manager_mail return users - def get_mail_cc(self, record): users = self.access_users(self.notify_cc_groups_ids, record) - if self.hr_notifys and not users and self.notify_cc_groups_ids: - if hasattr(record, 'employee_id') and record.employee_id: - hr_mail = record.employee_id.sudo().company_id.hr_email - users = hr_mail + if self.hr_notifys: + if not users and self.notify_cc_groups_ids: + if hasattr(record, 'employee_id') and record.employee_id: + hr_mail = record.employee_id.sudo().company_id.hr_email + users = hr_mail return users - def _process(self, records, domain_post=None): result = super()._process(records, domain_post) if self.send_notify: for record in records: self.get_notify_message(record) return result - - class ServerActions(models.Model): _inherit = 'ir.actions.server' - @api.model def _run_action_email(self, eval_context=None): if self._context.get('__action_done'): @@ -183,9 +196,9 @@ class ServerActions(models.Model): automation = list(automations.keys())[0] record = automations[automation] action = automation.action_server_id + old_email_to = action.template_id.email_to if action.template_id else '' + old_email_cc = action.template_id.email_cc if action.template_id else '' if action.template_id: - old_email_to = action.template_id.email_to - old_email_cc = action.template_id.email_cc template_values = { 'email_to': automation.get_mail_to(record), 'email_cc': automation.get_mail_cc(record), @@ -206,35 +219,29 @@ class ServerActions(models.Model): automation.get_notify_message(record) return False return super()._run_action_email(eval_context=eval_context) - - class MailActivity(models.Model): _inherit = 'mail.activity' - def action_notify(self): if not self: return original_context = self.env.context body_template = self.env.ref('mail.message_activity_assigned') - for activity in self: if activity.user_id.lang: self = self.with_context(lang=activity.user_id.lang) body_template = body_template.with_context(lang=activity.user_id.lang) activity = activity.with_context(lang=activity.user_id.lang) - model_description = self.env['ir.model']._get(activity.res_model).display_name - template_values = { - 'activity': activity, - 'model_description': model_description, - 'access_link': self.env['mail.thread']._notify_get_action_link( - 'view', model=activity.res_model, res_id=activity.res_id), - } - try: - body = body_template.render(template_values, engine='ir.qweb', minimal_qcontext=True) - except Exception: - body = _('Activity assigned: %(summary)s', summary=activity.summary or activity.activity_type_id.name) - + body = body_template._render( + { + 'activity': activity, + 'model_description': model_description, + 'access_link': self.env['mail.thread']._notify_get_action_link('view', model=activity.res_model, + res_id=activity.res_id), + }, + engine='ir.qweb', + minimal_qcontext=True + ) record = self.env[activity.res_model].browse(activity.res_id) if activity.user_id: record.message_post( @@ -246,17 +253,16 @@ class MailActivity(models.Model): email_layout_xmlid='system_notification.mail_notification_odex', message_type='notification' ) - self.with_context(original_context) - + body_template = body_template.with_context(original_context) + self = self.with_context(original_context) class BaseGroupAutomation(models.Model): _name = 'automation.group' _rec_name = 'model_id' - model_id = fields.Many2one('ir.model', string="Model", ondelete='cascade', required=True) atuomation_ids = fields.Many2many(comodel_name='base.automation', relation='automation_state_groups_rel', string='Group States ') - def unlink(self): for record in self.atuomation_ids: record.unlink() - return super().unlink() + result = super().unlink() + return result \ No newline at end of file