diff --git a/crm_lead_approval/README.rst b/crm_lead_approval/README.rst new file mode 100644 index 00000000000..e69de29bb2d diff --git a/crm_lead_approval/__init__.py b/crm_lead_approval/__init__.py new file mode 100644 index 00000000000..9b4296142f4 --- /dev/null +++ b/crm_lead_approval/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizard diff --git a/crm_lead_approval/__manifest__.py b/crm_lead_approval/__manifest__.py new file mode 100644 index 00000000000..cef6256e5f0 --- /dev/null +++ b/crm_lead_approval/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2024 INVITU SARL +# License AGPL-3 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "CRM Lead Approval", + "summary": "This module allows to approve or not a lead.", + "version": "17.0.1.0.0", + "author": "INVITU SARL, Odoo Community Association (OCA)", + "license": "AGPL-3", + "website": "https://github.com/OCA/crm", + "depends": [ + "crm", + ], + "data": [ + "security/ir.model.access.csv", + "views/res_config_settings.xml", + "views/crm_lead_views.xml", + "wizard/approval_wizard_views.xml", + ], +} diff --git a/crm_lead_approval/models/__init__.py b/crm_lead_approval/models/__init__.py new file mode 100644 index 00000000000..d80948bd5a5 --- /dev/null +++ b/crm_lead_approval/models/__init__.py @@ -0,0 +1,3 @@ +from . import crm_lead +from . import res_config_settings +from . import res_company diff --git a/crm_lead_approval/models/crm_lead.py b/crm_lead_approval/models/crm_lead.py new file mode 100644 index 00000000000..1e1e34714f3 --- /dev/null +++ b/crm_lead_approval/models/crm_lead.py @@ -0,0 +1,28 @@ +from odoo import fields, models + + +class CrmLead(models.Model): + _inherit = "crm.lead" + _description = "Crm leads approval" + + approval = fields.Selection( + [ + ("none", "None"), + ("done", "Approve"), + ("normal", "Reserved"), + ("blocked", "Disapprove"), + ], + default="none", + tracking=True, + ) + approval_comment = fields.Text(string="Observation", tracking=True) + to_be_approved = fields.Boolean( + string="To be approved", compute="_compute_approve", help="Help note" + ) + + def _compute_approve(self): + for record in self: + record.to_be_approved = ( + record.team_id in self.env.company.approval_team_ids + or record.tag_ids in self.env.company.approval_tag_ids + ) diff --git a/crm_lead_approval/models/res_company.py b/crm_lead_approval/models/res_company.py new file mode 100644 index 00000000000..781f0a5619a --- /dev/null +++ b/crm_lead_approval/models/res_company.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + approval_team_ids = fields.Many2many("crm.team", string="Authorized Sales Teams") + approval_tag_ids = fields.Many2many("crm.tag", string="Authorized Tags") diff --git a/crm_lead_approval/models/res_config_settings.py b/crm_lead_approval/models/res_config_settings.py new file mode 100644 index 00000000000..9aac2b01ae5 --- /dev/null +++ b/crm_lead_approval/models/res_config_settings.py @@ -0,0 +1,18 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + approval_team_ids = fields.Many2many( + "crm.team", + string="Authorized Sales Teams", + readonly=False, + related="company_id.approval_team_ids", + ) + approval_tag_ids = fields.Many2many( + "crm.tag", + string="Authorized CRM Tags", + readonly=False, + related="company_id.approval_tag_ids", + ) diff --git a/crm_lead_approval/pyproject.toml b/crm_lead_approval/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/crm_lead_approval/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/crm_lead_approval/security/ir.model.access.csv b/crm_lead_approval/security/ir.model.access.csv new file mode 100644 index 00000000000..bd1b6e5b0e5 --- /dev/null +++ b/crm_lead_approval/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_crm_approval_wizard,access_crm_approval_wizard,model_crm_approval_wizard,base.group_user,1,1,1,1 diff --git a/crm_lead_approval/views/crm_lead_views.xml b/crm_lead_approval/views/crm_lead_views.xml new file mode 100644 index 00000000000..9f353745543 --- /dev/null +++ b/crm_lead_approval/views/crm_lead_views.xml @@ -0,0 +1,67 @@ + + + view.crm.lead.form.approval + crm.lead + + + + +