Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions crm_lead_lost_reason_add_info/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3

===========================================
CRM Lead Lost Reason Additional Information
===========================================

This module extends the CRM lead management system in Odoo by adding additional fields to capture detailed information about lost opportunities. It includes enhancements to both the lead form and the lost reason wizard to include competitor-related details.

Features
========

- **Extended CRM Lead Form**:
Adds new fields to the CRM lead form to capture information about competitors when a lead is marked as lost. The fields include:
- Competitor Manufacturer
- Competitor Integrator
- Competitor Reseller
- Competitor Price
- Lost Reason Notes

- **Enhanced Lost Reason Wizard**:
Includes the new fields in the lost reason wizard, allowing users to update or provide additional details when a lead is marked as lost.

- **Automatic Field Population**:
The wizard automatically populates the fields with information from the CRM lead record when opening the wizard.

Usage
=====

Once installed, the module will:
- **Extend the CRM Lead Form**:

- Navigate to CRM > Leads.
- Open a lead and check the "Competitor Details" group in the form view.

- **Enhance the Lost Reason Wizard**:
- When marking a lead as lost, the wizard will now include additional fields for competitor information and lost reason notes.

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

No specific configuration is required. The module will automatically integrate with the existing CRM lead and lost reason views.

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

Bugs are tracked on `GitHub Issues <https://github.com/avanzosc/odoo-addons/issues>`_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smash it by providing detailed and welcomed feedback.

Credits
=======

Contributors
------------
* Ana Juaristi <[email protected]>
* Unai Beristain <[email protected]>
* Lucía Echeverría <[email protected]>

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

License
=======
This project is licensed under the AGPL-3 License. For more details, please refer to the LICENSE file or visit <http://www.gnu.org/licenses/agpl-3.0-standalone.html>.
1 change: 1 addition & 0 deletions crm_lead_lost_reason_add_info/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models, wizards
18 changes: 18 additions & 0 deletions crm_lead_lost_reason_add_info/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "CRM Lead Lost Reason Additional Information",
"version": "18.0.1.0.0",
"summary": "Enhances CRM leads with detailed information on lost opportunities.",
"category": "Sales/CRM",
"author": "Avanzosc",
"website": "https://github.com/avanzosc/crm-addons",
"license": "AGPL-3",
"depends": [
"crm",
],
"data": [
"views/crm_lead_views.xml",
"wizards/crm_lead_lost_reason_wizard_views.xml",
],
"installable": True,
"auto_install": False,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * crm_lead_lost_reason_add_info
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-23 13:31+0000\n"
"PO-Revision-Date: 2026-03-23 13:31+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: crm_lead_lost_reason_add_info
#: model_terms:ir.ui.view,arch_db:crm_lead_lost_reason_add_info.view_crm_lead_form_inherit
#: model_terms:ir.ui.view,arch_db:crm_lead_lost_reason_add_info.view_crm_lead_lost_reason_wizard_inherit
msgid "Competitor Details"
msgstr ""

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__competitor_integrator_id
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__competitor_integrator_id
msgid "Competitor Integrator"
msgstr ""

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__competitor_manufacturer_id
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__competitor_manufacturer_id
msgid "Competitor Manufacturer"
msgstr ""

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__competitor_price
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__competitor_price
msgid "Competitor Price"
msgstr ""

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__competitor_reseller_id
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__competitor_reseller_id
msgid "Competitor Reseller"
msgstr ""

#. module: crm_lead_lost_reason_add_info
#: model:ir.model,name:crm_lead_lost_reason_add_info.model_crm_lead_lost
msgid "Get Lost Reason"
msgstr ""

#. module: crm_lead_lost_reason_add_info
#: model:ir.model,name:crm_lead_lost_reason_add_info.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__lost_reason_notes
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__lost_reason_notes
msgid "Lost Reason Notes"
msgstr ""
62 changes: 62 additions & 0 deletions crm_lead_lost_reason_add_info/i18n/es.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * crm_lead_lost_reason_add_info
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-23 13:31+0000\n"
"PO-Revision-Date: 2026-03-23 13:31+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: crm_lead_lost_reason_add_info
#: model_terms:ir.ui.view,arch_db:crm_lead_lost_reason_add_info.view_crm_lead_form_inherit
#: model_terms:ir.ui.view,arch_db:crm_lead_lost_reason_add_info.view_crm_lead_lost_reason_wizard_inherit
msgid "Competitor Details"
msgstr "Detalles del Competidor"

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__competitor_integrator_id
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__competitor_integrator_id
msgid "Competitor Integrator"
msgstr "Integrador del Competidor"

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__competitor_manufacturer_id
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__competitor_manufacturer_id
msgid "Competitor Manufacturer"
msgstr "Fabricante del Competidor"

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__competitor_price
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__competitor_price
msgid "Competitor Price"
msgstr "Precio del Competidor"

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__competitor_reseller_id
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__competitor_reseller_id
msgid "Competitor Reseller"
msgstr "Revendedor del Competidor"

#. module: crm_lead_lost_reason_add_info
#: model:ir.model,name:crm_lead_lost_reason_add_info.model_crm_lead_lost
msgid "Get Lost Reason"
msgstr "Obtener razón de pérdida"

#. module: crm_lead_lost_reason_add_info
#: model:ir.model,name:crm_lead_lost_reason_add_info.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Lead/Oportunidad"

#. module: crm_lead_lost_reason_add_info
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead__lost_reason_notes
#: model:ir.model.fields,field_description:crm_lead_lost_reason_add_info.field_crm_lead_lost__lost_reason_notes
msgid "Lost Reason Notes"
msgstr "Notas sobre la razón de la pérdida"
1 change: 1 addition & 0 deletions crm_lead_lost_reason_add_info/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import crm_lead
23 changes: 23 additions & 0 deletions crm_lead_lost_reason_add_info/models/crm_lead.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from odoo import fields, models


class CrmLead(models.Model):
_inherit = "crm.lead"

competitor_manufacturer_id = fields.Many2one(
"res.partner",
string="Competitor Manufacturer",
domain=[("is_company", "=", True)],
)
competitor_integrator_id = fields.Many2one(
"res.partner",
string="Competitor Integrator",
domain=[("is_company", "=", True)],
)
competitor_reseller_id = fields.Many2one(
"res.partner",
string="Competitor Reseller",
domain=[("is_company", "=", True)],
)
competitor_price = fields.Float()
lost_reason_notes = fields.Text()
3 changes: 3 additions & 0 deletions crm_lead_lost_reason_add_info/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
49 changes: 49 additions & 0 deletions crm_lead_lost_reason_add_info/views/crm_lead_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_crm_lead_form_inherit" model="ir.ui.view">
<field name="name">crm.lead.form.inherit</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_lead_view_form" />
<field name="arch" type="xml">
<xpath expr="//page[@name='internal_notes']" position="inside">
<group string="Competitor Details" invisible="active">
<field name="competitor_manufacturer_id" />
<field name="competitor_integrator_id" />
<field name="competitor_reseller_id" />
<field name="competitor_price" />
<field name="lost_reason_notes" />
</group>
</xpath>
</field>
</record>

<record id="crm_case_tree_view_leads_inherit" model="ir.ui.view">
<field name="name">crm.case.tree.view.leads</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_case_tree_view_leads" />
<field name="arch" type="xml">
<xpath expr="//list" position="inside">
<field name="competitor_manufacturer_id" optional="hide" />
<field name="competitor_integrator_id" optional="hide" />
<field name="competitor_reseller_id" optional="hide" />
<field name="competitor_price" optional="hide" />
<field name="lost_reason_notes" optional="hide" />
</xpath>
</field>
</record>

<record id="crm_case_tree_view_oppor_inherit" model="ir.ui.view">
<field name="name">crm.case.tree.view.leads</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_case_tree_view_oppor" />
<field name="arch" type="xml">
<xpath expr="//list" position="inside">
<field name="competitor_manufacturer_id" optional="hide" />
<field name="competitor_integrator_id" optional="hide" />
<field name="competitor_reseller_id" optional="hide" />
<field name="competitor_price" optional="hide" />
<field name="lost_reason_notes" optional="hide" />
</xpath>
</field>
</record>
</odoo>
1 change: 1 addition & 0 deletions crm_lead_lost_reason_add_info/wizards/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import crm_lead_lost_reason_wizard
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from odoo import api, fields, models


class CrmLeadLostReasonWizard(models.TransientModel):
_inherit = "crm.lead.lost"

competitor_manufacturer_id = fields.Many2one(
"res.partner",
string="Competitor Manufacturer",
domain=[("is_company", "=", True)],
)
competitor_integrator_id = fields.Many2one(
"res.partner",
string="Competitor Integrator",
domain=[("is_company", "=", True)],
)
competitor_reseller_id = fields.Many2one(
"res.partner",
string="Competitor Reseller",
domain=[("is_company", "=", True)],
)
competitor_price = fields.Float()
lost_reason_notes = fields.Text()

@api.model
def default_get(self, fields):
res = super().default_get(fields)
lead = self.env["crm.lead"].browse(self.env.context.get("active_id"))
if lead:
res.update(
{
"competitor_manufacturer_id": lead.competitor_manufacturer_id.id,
"competitor_integrator_id": lead.competitor_integrator_id.id,
"competitor_reseller_id": lead.competitor_reseller_id.id,
"competitor_price": lead.competitor_price,
"lost_reason_notes": lead.lost_reason_notes,
}
)
return res

def action_lost_reason_apply(self):
"""
Applies the lost reason and updates the lead with additional fields.
"""
res = super().action_lost_reason_apply()
lead = self.env["crm.lead"].browse(self.env.context.get("active_id"))
if lead:
lead.write(
{
"competitor_manufacturer_id": self.competitor_manufacturer_id.id,
"competitor_integrator_id": self.competitor_integrator_id.id,
"competitor_reseller_id": self.competitor_reseller_id.id,
"competitor_price": self.competitor_price,
"lost_reason_notes": self.lost_reason_notes,
}
)
return res
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_crm_lead_lost_reason_wizard_inherit" model="ir.ui.view">
<field name="name">crm.lead.lost.reason.wizard.inherit</field>
<field name="model">crm.lead.lost</field>
<field name="inherit_id" ref="crm.crm_lead_lost_view_form" />
<field name="arch" type="xml">
<xpath expr="//group" position="after">
<group string="Competitor Details">
<field name="competitor_manufacturer_id" />
<field name="competitor_integrator_id" />
<field name="competitor_reseller_id" />
<field name="competitor_price" />
<field name="lost_reason_notes" />
</group>
</xpath>
</field>
</record>
</odoo>
Loading