From acbf9f5853ec43bbebedf6d7dc480be93797afa6 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 1 Feb 2016 14:42:17 +0100 Subject: [PATCH] [ADD] crm_lead_substage: Substages for leads/opportunities ================================= Substages for leads/opportunities ================================= This module allows to set substages inside the same stage for fine-graining the reasons or flows on the CRM pipelines. Configuration ============= Go to Sales > Configuration > Leads & Opportunities > Substages for defining the substages you want and set the stages where this substages are going to be available Usage ===== Go to Sales > Leads or Sales > Opportunities, and when you are in one stage, the available substages are shown below. Click on one of them to set it. If you change the stage, then the substage is reset and the new ones available for this stage are shown. --- crm_lead_substage/README.rst | 64 +++++++++++ crm_lead_substage/__init__.py | 7 ++ crm_lead_substage/__openerp__.py | 26 +++++ crm_lead_substage/i18n/es.po | 99 ++++++++++++++++++ crm_lead_substage/models/__init__.py | 7 ++ crm_lead_substage/models/crm_case_substage.py | 15 +++ crm_lead_substage/models/crm_lead.py | 21 ++++ crm_lead_substage/report/__init__.py | 7 ++ crm_lead_substage/report/crm_lead_report.py | 24 +++++ .../report/crm_lead_report_view.xml | 19 ++++ .../report/crm_opportunity_report.py | 25 +++++ .../report/crm_opportunity_report_view.xml | 19 ++++ .../security/ir.model.access.csv | 3 + crm_lead_substage/static/description/icon.png | Bin 0 -> 9455 bytes crm_lead_substage/views/crm_lead_view.xml | 34 ++++++ crm_lead_substage/views/crm_substage_view.xml | 38 +++++++ 16 files changed, 408 insertions(+) create mode 100644 crm_lead_substage/README.rst create mode 100644 crm_lead_substage/__init__.py create mode 100644 crm_lead_substage/__openerp__.py create mode 100644 crm_lead_substage/i18n/es.po create mode 100644 crm_lead_substage/models/__init__.py create mode 100644 crm_lead_substage/models/crm_case_substage.py create mode 100644 crm_lead_substage/models/crm_lead.py create mode 100644 crm_lead_substage/report/__init__.py create mode 100644 crm_lead_substage/report/crm_lead_report.py create mode 100644 crm_lead_substage/report/crm_lead_report_view.xml create mode 100644 crm_lead_substage/report/crm_opportunity_report.py create mode 100644 crm_lead_substage/report/crm_opportunity_report_view.xml create mode 100644 crm_lead_substage/security/ir.model.access.csv create mode 100644 crm_lead_substage/static/description/icon.png create mode 100644 crm_lead_substage/views/crm_lead_view.xml create mode 100644 crm_lead_substage/views/crm_substage_view.xml diff --git a/crm_lead_substage/README.rst b/crm_lead_substage/README.rst new file mode 100644 index 000000000000..a09e5062b53a --- /dev/null +++ b/crm_lead_substage/README.rst @@ -0,0 +1,64 @@ +.. 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 + +================================= +Substages for leads/opportunities +================================= + +This module allows to set substages inside the same stage for fine-graining +the reasons or flows on the CRM pipelines. + +Configuration +============= + +Go to Sales > Configuration > Leads & Opportunities > Substages for defining +the substages you want and set the stages where this substages are going to be +available + +Usage +===== + +Go to Sales > Leads or Sales > Opportunities, and when you are in one stage, +the available substages are shown below. Click on one of them to set it. If you +change the stage, then the substage is reset and the new ones available for +this stage are shown. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/111/8.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed `feedback +`_. + +Credits +======= + +Contributors +------------ + +* Pedro M. Baeza + +Maintainer +---------- + +.. image:: http://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: http://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/crm_lead_substage/__init__.py b/crm_lead_substage/__init__.py new file mode 100644 index 000000000000..5d84acfd31de --- /dev/null +++ b/crm_lead_substage/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. +# © 2016 Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from . import models +from . import report diff --git a/crm_lead_substage/__openerp__.py b/crm_lead_substage/__openerp__.py new file mode 100644 index 000000000000..e2fd25a66237 --- /dev/null +++ b/crm_lead_substage/__openerp__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. +# © 2016 Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +{ + "name": "Substages in leads/opportunities", + "version": "8.0.1.0.0", + "license": "AGPL-3", + "author": "Antiun Ingeniería S.L., " + "Serv. Tecnol. Avanzados - Pedro M. Baeza, " + "Odoo Community Association (OCA)", + "website": "https://www.antiun.com", + "category": "Customer Relationship Management", + "depends": [ + 'crm', + ], + "data": [ + 'security/ir.model.access.csv', + 'views/crm_lead_view.xml', + 'views/crm_substage_view.xml', + 'report/crm_lead_report_view.xml', + 'report/crm_opportunity_report_view.xml', + ], + "installable": True, +} diff --git a/crm_lead_substage/i18n/es.po b/crm_lead_substage/i18n/es.po new file mode 100644 index 000000000000..d8882bf3402b --- /dev/null +++ b/crm_lead_substage/i18n/es.po @@ -0,0 +1,99 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_lead_substage +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-01 13:38+0000\n" +"PO-Revision-Date: 2016-02-01 13:38+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_substage +#: model:ir.actions.act_window,help:crm_lead_substage.crm_case_substage_action +msgid "

\n" +" Click to set a new substage in your lead/opportunity pipeline.\n" +"

\n" +" Substages will allow salespersons to easily refine the part or the\n" +" reason why a lead or opportunity is positioned in that stage.\n" +"

\n" +" " +msgstr "

\n" +" Pulse para establecer una nueva subetapa en su operativa de iniciativas/oportunidades.\n" +"

\n" +" Las subetapas permitirán a los comerciales refinar fácilmente la parte o\n" +" la razón por la que una iniciativa u oportunidad está posicionada en esa etapa.\n" +"

\n" +" " + +#. module: crm_lead_substage +#: model:ir.model,name:crm_lead_substage.model_crm_lead_report +msgid "CRM Lead Analysis" +msgstr "Análisis Iniciativas CRM" + +#. module: crm_lead_substage +#: model:ir.model,name:crm_lead_substage.model_crm_opportunity_report +msgid "CRM Opportunity Analysis" +msgstr "Análisis de oportunidades CRM" + +#. module: crm_lead_substage +#: field:crm.case.substage,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: crm_lead_substage +#: field:crm.case.substage,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: crm_lead_substage +#: field:crm.case.substage,id:0 +msgid "ID" +msgstr "ID" + +#. module: crm_lead_substage +#: field:crm.case.substage,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: crm_lead_substage +#: field:crm.case.substage,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: crm_lead_substage +#: model:ir.model,name:crm_lead_substage.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Iniciativa/Oportunidad" + +#. module: crm_lead_substage +#: field:crm.case.substage,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: crm_lead_substage +#: field:crm.case.substage,stage_id:0 +msgid "Stage" +msgstr "Etap" + +#. module: crm_lead_substage +#: field:crm.lead,substage_id:0 +#: view:crm.lead.report:crm_lead_substage.view_report_crm_lead_filter +#: field:crm.lead.report,substage_id:0 +#: view:crm.opportunity.report:crm_lead_substage.view_report_crm_opportunity_filter +#: field:crm.opportunity.report,substage_id:0 +msgid "Substage" +msgstr "Subetapa" + +#. module: crm_lead_substage +#: model:ir.actions.act_window,name:crm_lead_substage.crm_case_substage_action +#: model:ir.ui.menu,name:crm_lead_substage.menu_crm_case_substage +msgid "Substages" +msgstr "Subetapas" + diff --git a/crm_lead_substage/models/__init__.py b/crm_lead_substage/models/__init__.py new file mode 100644 index 000000000000..5b5e595e9f7f --- /dev/null +++ b/crm_lead_substage/models/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. +# © 2016 Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from . import crm_case_substage +from . import crm_lead diff --git a/crm_lead_substage/models/crm_case_substage.py b/crm_lead_substage/models/crm_case_substage.py new file mode 100644 index 000000000000..6e7af3a44637 --- /dev/null +++ b/crm_lead_substage/models/crm_case_substage.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. +# © 2016 Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from openerp import fields, models + + +class CrmCaseSubstage(models.Model): + _name = 'crm.case.substage' + + name = fields.Char(required=True) + stage_id = fields.Many2one( + comodel_name="crm.case.stage", required=True, string="Stage", + translate=True) diff --git a/crm_lead_substage/models/crm_lead.py b/crm_lead_substage/models/crm_lead.py new file mode 100644 index 000000000000..5ea038600bb9 --- /dev/null +++ b/crm_lead_substage/models/crm_lead.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. +# © 2016 Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from openerp import api, fields, models + + +class CrmLead(models.Model): + _inherit = 'crm.lead' + + substage_id = fields.Many2one( + comodel_name="crm.case.substage", string="Substage", + domain="[('stage_id', '=', stage_id)]") + + @api.multi + def onchange_stage_id(self, stage_id): + res = super(CrmLead, self).onchange_stage_id(stage_id) + res['value'] = res.get('value', {}) + res['value']['substage_id'] = False + return res diff --git a/crm_lead_substage/report/__init__.py b/crm_lead_substage/report/__init__.py new file mode 100644 index 000000000000..166c497ac680 --- /dev/null +++ b/crm_lead_substage/report/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. +# © 2016 Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from . import crm_lead_report +from . import crm_opportunity_report diff --git a/crm_lead_substage/report/crm_lead_report.py b/crm_lead_substage/report/crm_lead_report.py new file mode 100644 index 000000000000..12f8224bcef9 --- /dev/null +++ b/crm_lead_substage/report/crm_lead_report.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. +# © 2016 Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +from openerp import fields, models, tools + + +class CrmLeadReport(models.Model): + _inherit = "crm.lead.report" + + substage_id = fields.Many2one( + comodel_name="crm.case.substage", string="Substage") + + def init(self, cr): + super(CrmLeadReport, self).init(cr) + cr.execute("SELECT pg_get_viewdef('crm_lead_report', true)") + view_def = cr.fetchone()[0] + # Inject the new field in the expected SQL + sql = "c.stage_id,\n" + index = view_def.find(sql) + len(sql) + sql = " c.substage_id,\n" + view_def = view_def[:index] + sql + view_def[index:-1] + tools.drop_view_if_exists(cr, 'crm_lead_report') + cr.execute("CREATE OR REPLACE VIEW crm_lead_report AS (%s)" % view_def) diff --git a/crm_lead_substage/report/crm_lead_report_view.xml b/crm_lead_substage/report/crm_lead_report_view.xml new file mode 100644 index 000000000000..5bf6dbf064d2 --- /dev/null +++ b/crm_lead_substage/report/crm_lead_report_view.xml @@ -0,0 +1,19 @@ + + + + + + Leads report search (substage) + crm.lead.report + + + + + + + + + + diff --git a/crm_lead_substage/report/crm_opportunity_report.py b/crm_lead_substage/report/crm_opportunity_report.py new file mode 100644 index 000000000000..5339b12861d9 --- /dev/null +++ b/crm_lead_substage/report/crm_opportunity_report.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# © 2016 Antiun Ingeniería S.L. +# © 2016 Pedro M. Baeza +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +from openerp import fields, models, tools + + +class CrmOpportunityReport(models.Model): + _inherit = "crm.opportunity.report" + + substage_id = fields.Many2one( + comodel_name="crm.case.substage", string="Substage") + + def init(self, cr): + super(CrmOpportunityReport, self).init(cr) + cr.execute("SELECT pg_get_viewdef('crm_opportunity_report', true)") + view_def = cr.fetchone()[0] + # Inject the new field in the expected SQL + sql = "c.stage_id,\n" + index = view_def.find(sql) + len(sql) + sql = " c.substage_id,\n" + view_def = view_def[:index] + sql + view_def[index:-1] + tools.drop_view_if_exists(cr, 'crm_opportunity_report') + cr.execute( + "CREATE OR REPLACE VIEW crm_opportunity_report AS (%s)" % view_def) diff --git a/crm_lead_substage/report/crm_opportunity_report_view.xml b/crm_lead_substage/report/crm_opportunity_report_view.xml new file mode 100644 index 000000000000..67a4953bcaaf --- /dev/null +++ b/crm_lead_substage/report/crm_opportunity_report_view.xml @@ -0,0 +1,19 @@ + + + + + + Opportunities report search (substage) + crm.opportunity.report + + + + + + + + + + diff --git a/crm_lead_substage/security/ir.model.access.csv b/crm_lead_substage/security/ir.model.access.csv new file mode 100644 index 000000000000..761590cdf3de --- /dev/null +++ b/crm_lead_substage/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_crm_case_substage,crm.case.substage,model_crm_case_substage,,1,0,0,0 +access_crm_case_substage_manager,crm.case.substage,model_crm_case_substage,base.group_sale_manager,1,1,1,1 diff --git a/crm_lead_substage/static/description/icon.png b/crm_lead_substage/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/crm_lead_substage/views/crm_lead_view.xml b/crm_lead_substage/views/crm_lead_view.xml new file mode 100644 index 000000000000..9350e8a29d09 --- /dev/null +++ b/crm_lead_substage/views/crm_lead_view.xml @@ -0,0 +1,34 @@ + + + + + + CRM - Leads Form (substage) + crm.lead + + + + + + + + + + Opportunities Form (substage) + crm.lead + + + + + + + + + + diff --git a/crm_lead_substage/views/crm_substage_view.xml b/crm_lead_substage/views/crm_substage_view.xml new file mode 100644 index 000000000000..7c8cec968fe6 --- /dev/null +++ b/crm_lead_substage/views/crm_substage_view.xml @@ -0,0 +1,38 @@ + + + + + + CRM case substage tree view + crm.case.substage + + + + + + + + + + Substages + crm.case.substage + form + tree + +

+ Click to set a new substage in your lead/opportunity pipeline. +

+ Substages will allow salespersons to easily refine the part or the + reason why a lead or opportunity is positioned in that stage. +

+
+
+ + + +
+