Skip to content

Commit

Permalink
[ADD] crm_exception
Browse files Browse the repository at this point in the history
  • Loading branch information
AungKoKoLin1997 committed Oct 11, 2024
1 parent 7829832 commit c947070
Show file tree
Hide file tree
Showing 18 changed files with 744 additions and 0 deletions.
101 changes: 101 additions & 0 deletions crm_exception/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
=============
CRM Exception
=============

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:364c4bbd2fab4ca9a0a3ba481b31aec7efb3fcd15f8a93bfa77ca92cb9f67d11
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcrm-lightgray.png?logo=github
:target: https://github.com/OCA/crm/tree/16.0/crm_exception
:alt: OCA/crm
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/crm-16-0/crm-16-0-crm_exception
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/crm&target_branch=16.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows you to attach several customizable exceptions to your opportunities.
You can also define an exception rule to be applied to specific CRM stages.

**Table of contents**

.. contents::
:local:

Configuration
=============

**To configure CRM exception rule:**

#. Create a new exception rule.
#. Select "Lead" in the "Apply On" field (the 'stage_ids' field will be displayed).
#. Choose the CRM stage to which you want to apply the exception rule.
#. Specify the exception type and define the condition, then save the rule.

**Note:**
If you don't specify a CRM stage for stage_ids (leave it blank), the rule will be checked at every stage.

Known issues / Roadmap
======================

**No Exception checking in the create function.**

Adding exception checking to the create function would trigger an Odoo Client Error
related to JavaScript (Error: Component is destroyed) when attempting to create a new opportunity
in the pipeline's kanban view and clicking the edit button.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/crm/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/crm/issues/new?body=module:%20crm_exception%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* Quartile Limited

Contributors
~~~~~~~~~~~~

* `Quartile <https://www.quartile.co>`__:

* Aung Ko Ko Lin

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/crm <https://github.com/OCA/crm/tree/16.0/crm_exception>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions crm_exception/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
19 changes: 19 additions & 0 deletions crm_exception/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright 2023 Quartile Limited
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "CRM Exception",
"version": "16.0.1.0.0",
"category": "Customer Relationship Management",
"author": "Quartile Limited, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/crm",
"depends": ["crm", "base_exception"],
"license": "AGPL-3",
"data": [
"views/crm_lead_views.xml",
"views/base_exception_views.xml",
],
"demo": [
"demo/crm_exception_demo.xml",
],
"installable": True,
}
12 changes: 12 additions & 0 deletions crm_exception/demo/crm_exception_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="crm_excep_no_partner" model="exception.rule">
<field name="name">No Customer</field>
<field name="description">No Customer</field>
<field name="sequence">80</field>
<field name="model">crm.lead</field>
<field name="code">if not self.partner_id:
failed=True</field>
<field name="active" eval="False" />
</record>
</odoo>
2 changes: 2 additions & 0 deletions crm_exception/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import exception_rule
from . import crm_lead
38 changes: 38 additions & 0 deletions crm_exception/models/crm_lead.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Copyright 2023 Quartile Limited
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import api, models
from odoo.osv import expression


class CrmLead(models.Model):
_inherit = ["crm.lead", "base.exception"]
_name = "crm.lead"
_order = "main_exception_id asc, name desc"

def write(self, vals):
result = super().write(vals)
# To avoid a recursive call, write()
if "exception_ids" in vals:
return result
self._check_exception()
return result

@api.model
def _reverse_field(self):
return "crm_lead_ids"

Check warning on line 23 in crm_exception/models/crm_lead.py

View check run for this annotation

Codecov / codecov/patch

crm_exception/models/crm_lead.py#L23

Added line #L23 was not covered by tests

def _rule_domain(self):
rule_domain = super()._rule_domain()
if self.stage_id:
rule_domain = expression.AND(
[
rule_domain,
[
"|",
("stage_ids", "in", tuple(self.stage_id.ids)),
("stage_ids", "=", False),
],
]
)
return rule_domain
17 changes: 17 additions & 0 deletions crm_exception/models/exception_rule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright 2023 Quartile Limited
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import fields, models


class ExceptionRule(models.Model):
_inherit = "exception.rule"

crm_lead_ids = fields.Many2many(comodel_name="crm.lead", string="Opportunities")
model = fields.Selection(
selection_add=[
("crm.lead", "Lead"),
],
ondelete={"crm.lead": "cascade"},
)
stage_ids = fields.Many2many(comodel_name="crm.stage")
9 changes: 9 additions & 0 deletions crm_exception/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
**To configure CRM exception rule:**

#. Create a new exception rule.
#. Select "Lead" in the "Apply On" field (the 'stage_ids' field will be displayed).
#. Choose the CRM stage to which you want to apply the exception rule.
#. Specify the exception type and define the condition, then save the rule.

**Note:**
If you don't specify a CRM stage for stage_ids (leave it blank), the rule will be checked at every stage.
3 changes: 3 additions & 0 deletions crm_exception/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* `Quartile <https://www.quartile.co>`__:

* Aung Ko Ko Lin
2 changes: 2 additions & 0 deletions crm_exception/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This module allows you to attach several customizable exceptions to your opportunities.
You can also define an exception rule to be applied to specific CRM stages.
5 changes: 5 additions & 0 deletions crm_exception/readme/ROADMAP.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
**No Exception checking in the create function.**

Adding exception checking to the create function would trigger an Odoo Client Error
related to JavaScript (Error: Component is destroyed) when attempting to create a new opportunity
in the pipeline's kanban view and clicking the edit button.
Loading

0 comments on commit c947070

Please sign in to comment.