From 7cd001f3edc0420dfd77d8dc1790c9cb09eb3d70 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Wed, 25 Mar 2015 10:08:20 +0100 Subject: [PATCH 01/58] [ADD] crm_capital addon --- crm_capital/README.rst | 18 +++ crm_capital/__init__.py | 6 + crm_capital/__openerp__.py | 39 +++++++ crm_capital/i18n/crm_capital.pot | 105 ++++++++++++++++++ crm_capital/i18n/es.po | 105 ++++++++++++++++++ crm_capital/models/__init__.py | 8 ++ crm_capital/models/crm_lead.py | 28 +++++ crm_capital/models/crm_turnover_range.py | 20 ++++ crm_capital/models/res_partner.py | 14 +++ crm_capital/security/ir.model.access.csv | 5 + crm_capital/static/description/icon.png | Bin 0 -> 19467 bytes crm_capital/views/crm_lead_view.xml | 30 +++++ crm_capital/views/crm_turnover_range_view.xml | 30 +++++ crm_capital/views/res_partner_view.xml | 20 ++++ 14 files changed, 428 insertions(+) create mode 100644 crm_capital/README.rst create mode 100644 crm_capital/__init__.py create mode 100644 crm_capital/__openerp__.py create mode 100644 crm_capital/i18n/crm_capital.pot create mode 100644 crm_capital/i18n/es.po create mode 100644 crm_capital/models/__init__.py create mode 100644 crm_capital/models/crm_lead.py create mode 100644 crm_capital/models/crm_turnover_range.py create mode 100644 crm_capital/models/res_partner.py create mode 100644 crm_capital/security/ir.model.access.csv create mode 100644 crm_capital/static/description/icon.png create mode 100644 crm_capital/views/crm_lead_view.xml create mode 100644 crm_capital/views/crm_turnover_range_view.xml create mode 100644 crm_capital/views/res_partner_view.xml diff --git a/crm_capital/README.rst b/crm_capital/README.rst new file mode 100644 index 000000000..735a076d7 --- /dev/null +++ b/crm_capital/README.rst @@ -0,0 +1,18 @@ +Capital in CRM +================ + +This module allows to set capital country, capital registered and turnover +for companies in the CRM main objects (lead, opportunity, partner), and +propagate them through the workflow. + +By capital country we mean country of origin of the capital of the company +By capital registered we mean the amount of money registered in comercial +registry, aka social capital or just capital of a company +By turnover we can define a range an a concret amount + +Credits +======= + +Contributors +------------ +* Antonio Espinosa <antonioea@antiun.com> diff --git a/crm_capital/__init__.py b/crm_capital/__init__.py new file mode 100644 index 000000000..054c8853d --- /dev/null +++ b/crm_capital/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import models diff --git a/crm_capital/__openerp__.py b/crm_capital/__openerp__.py new file mode 100644 index 000000000..0a26b02b4 --- /dev/null +++ b/crm_capital/__openerp__.py @@ -0,0 +1,39 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Odoo Source Management Solution +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + 'name': 'Capital in CRM', + 'version': '1.0', + 'category': 'Customer Relationship Management', + 'author': 'Antiun Ingeniería S.L.', + 'website': 'http://www.antiun.com', + 'depends': [ + 'crm', + ], + 'data': [ + 'views/crm_turnover_range_view.xml', + 'views/crm_lead_view.xml', + 'views/res_partner_view.xml', + 'security/ir.model.access.csv', + ], + "installable": True, +} diff --git a/crm_capital/i18n/crm_capital.pot b/crm_capital/i18n/crm_capital.pot new file mode 100644 index 000000000..9434fb358 --- /dev/null +++ b/crm_capital/i18n/crm_capital.pot @@ -0,0 +1,105 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_capital +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-24 11:53+0000\n" +"PO-Revision-Date: 2015-03-24 11:53+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_capital +#: field:crm.lead,capital_country:0 +msgid "Capital country" +msgstr "" + +#. module: crm_capital +#: field:crm.lead,capital_registered:0 +#: field:res.partner,capital_registered:0 +msgid "Capital registered" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,children:0 +msgid "Children" +msgstr "" + +#. module: crm_capital +#: help:crm.lead,capital_country:0 +msgid "Country of origin of the capital of this company" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,create_date:0 +msgid "Created on" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,id:0 +msgid "ID" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: crm_capital +#: model:ir.model,name:crm_capital.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,name:0 +msgid "Name" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,parent_left:0 +msgid "Parent Left" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,parent_right:0 +msgid "Parent Right" +msgstr "" + +#. module: crm_capital +#: field:crm.turnover_range,parent_id:0 +msgid "Parent id" +msgstr "" + +#. module: crm_capital +#: model:ir.model,name:crm_capital.model_res_partner +msgid "Partner" +msgstr "" + +#. module: crm_capital +#: model:ir.model,name:crm_capital.model_crm_turnover_range +msgid "Turnover range" +msgstr "" + +#. module: crm_capital +#: view:crm.turnover_range:crm_capital.crm_turnover_range_tree_view +#: model:ir.actions.act_window,name:crm_capital.crm_turnover_range_action +#: model:ir.ui.menu,name:crm_capital.menu_crm_turnover_range +msgid "Turnover ranges" +msgstr "" + diff --git a/crm_capital/i18n/es.po b/crm_capital/i18n/es.po new file mode 100644 index 000000000..f5b80e398 --- /dev/null +++ b/crm_capital/i18n/es.po @@ -0,0 +1,105 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_capital +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-24 11:53+0000\n" +"PO-Revision-Date: 2015-03-24 11:53+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_capital +#: field:crm.lead,capital_country:0 +msgid "Capital country" +msgstr "Nacionalidad del capital" + +#. module: crm_capital +#: field:crm.lead,capital_registered:0 +#: field:res.partner,capital_registered:0 +msgid "Capital registered" +msgstr "Capital social" + +#. module: crm_capital +#: field:crm.turnover_range,children:0 +msgid "Children" +msgstr "Hijos" + +#. module: crm_capital +#: help:crm.lead,capital_country:0 +msgid "Country of origin of the capital of this company" +msgstr "País de origen del capital social de esta empresa" + +#. module: crm_capital +#: field:crm.turnover_range,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: crm_capital +#: field:crm.turnover_range,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: crm_capital +#: field:crm.turnover_range,id:0 +msgid "ID" +msgstr "ID" + +#. module: crm_capital +#: field:crm.turnover_range,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: crm_capital +#: field:crm.turnover_range,write_date:0 +msgid "Last Updated on" +msgstr "última actualización en" + +#. module: crm_capital +#: model:ir.model,name:crm_capital.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Iniciativa/Oportunidad" + +#. module: crm_capital +#: field:crm.turnover_range,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: crm_capital +#: field:crm.turnover_range,parent_left:0 +msgid "Parent Left" +msgstr "Padre izquierdo" + +#. module: crm_capital +#: field:crm.turnover_range,parent_right:0 +msgid "Parent Right" +msgstr "Padre derecho" + +#. module: crm_capital +#: field:crm.turnover_range,parent_id:0 +msgid "Parent id" +msgstr "ID del padre" + +#. module: crm_capital +#: model:ir.model,name:crm_capital.model_res_partner +msgid "Partner" +msgstr "Empresa" + +#. module: crm_capital +#: model:ir.model,name:crm_capital.model_crm_turnover_range +msgid "Turnover range" +msgstr "Rango de facturación" + +#. module: crm_capital +#: view:crm.turnover_range:crm_capital.crm_turnover_range_tree_view +#: model:ir.actions.act_window,name:crm_capital.crm_turnover_range_action +#: model:ir.ui.menu,name:crm_capital.menu_crm_turnover_range +msgid "Turnover ranges" +msgstr "Rangos de facturación" + diff --git a/crm_capital/models/__init__.py b/crm_capital/models/__init__.py new file mode 100644 index 000000000..2e0c5d82f --- /dev/null +++ b/crm_capital/models/__init__.py @@ -0,0 +1,8 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import crm_turnover_range +from . import crm_lead +from . import res_partner diff --git a/crm_capital/models/crm_lead.py b/crm_capital/models/crm_lead.py new file mode 100644 index 000000000..0b0a517f2 --- /dev/null +++ b/crm_capital/models/crm_lead.py @@ -0,0 +1,28 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmLead(models.Model): + _inherit = 'crm.lead' + + capital_country = fields.Many2one( + 'res.country', string="Capital country", + help="Country of origin of the capital of this company") + capital_registered = fields.Integer(string="Capital registered") + + def _lead_create_contact(self, cr, uid, lead, name, is_company, + parent_id=False, context=None): + """Propagate capital_country and capital_registered to created partner. + """ + partner_id = super(CrmLead, self)._lead_create_contact( + cr, uid, lead, name, is_company, parent_id=parent_id, + context=context) + self.pool['res.partner'].write( + cr, uid, partner_id, { + 'capital_country': lead.capital_country.id, + 'capital_registered': lead.capital_registered + }, context=context) + return partner_id diff --git a/crm_capital/models/crm_turnover_range.py b/crm_capital/models/crm_turnover_range.py new file mode 100644 index 000000000..875496abf --- /dev/null +++ b/crm_capital/models/crm_turnover_range.py @@ -0,0 +1,20 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmTurnoverRange(models.Model): + _name = 'crm.turnover_range' + _order = "parent_left" + _parent_order = "name" + _parent_store = True + _description = "Turnover range" + + name = fields.Char(required=True) + parent_id = fields.Many2one(comodel_name='crm.turnover_range') + children = fields.One2many(comodel_name='crm.turnover_range', + inverse_name='parent_id') + parent_left = fields.Integer('Parent Left', select=True) + parent_right = fields.Integer('Parent Right', select=True) diff --git a/crm_capital/models/res_partner.py b/crm_capital/models/res_partner.py new file mode 100644 index 000000000..8eb85d32e --- /dev/null +++ b/crm_capital/models/res_partner.py @@ -0,0 +1,14 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + capital_country = fields.Many2one( + 'res.country', string="Capital country", + help="Country of origin of the capital of this company") + capital_registered = fields.Integer(string="Capital registered") diff --git a/crm_capital/security/ir.model.access.csv b/crm_capital/security/ir.model.access.csv new file mode 100644 index 000000000..ff06a904d --- /dev/null +++ b/crm_capital/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_crm_turnover_public","crm_turnover_range group_public","model_crm_turnover_range","base.group_public",1,0,0,0 +"access_crm_turnover_portal","crm_turnover_range group_portal","model_crm_turnover_range","base.group_portal",1,0,0,0 +"access_crm_turnover_group_partner_manager","crm_turnover_range group_partner_manager","model_crm_turnover_range","base.group_partner_manager",1,1,1,1 +"access_crm_turnover_group_user","crm_turnover_range group_user","model_crm_turnover_range","base.group_user",1,0,0,0 diff --git a/crm_capital/static/description/icon.png b/crm_capital/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..abc5b9a32987ba72504e20d2f7e8316c7ca59f93 GIT binary patch literal 19467 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 literal 0 HcmV?d00001 diff --git a/crm_capital/views/crm_lead_view.xml b/crm_capital/views/crm_lead_view.xml new file mode 100644 index 000000000..87f66a013 --- /dev/null +++ b/crm_capital/views/crm_lead_view.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="ir.ui.view" id="crm_case_form_view_leads_capital"> + <field name="name">CRM - Leads Form with capital info</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> + <field name="arch" type="xml"> + <field name="partner_id" position="before"> + <field name="capital_country"/> + <field name="capital_registered"/> + </field> + </field> + </record> + + <record model="ir.ui.view" id="crm_case_form_view_oppor_capital"> + <field name="name">CRM - Leads Form with capital info</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> + <field name="arch" type="xml"> + <field name="partner_id" position="before"> + <field name="capital_country"/> + <field name="capital_registered"/> + </field> + </field> + </record> + + </data> +</openerp> \ No newline at end of file diff --git a/crm_capital/views/crm_turnover_range_view.xml b/crm_capital/views/crm_turnover_range_view.xml new file mode 100644 index 000000000..329aff280 --- /dev/null +++ b/crm_capital/views/crm_turnover_range_view.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record id="crm_turnover_range_action" model="ir.actions.act_window"> + <field name="name">Turnover ranges</field> + <field name="res_model">crm.turnover_range</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> + </record> + + <record id="crm_turnover_range_tree_view" model="ir.ui.view"> + <field name="name">CRM Turnover range tree</field> + <field name="model">crm.turnover_range</field> + <field name="arch" type="xml"> + <tree string="Turnover ranges" editable="bottom"> + <field name="name"/> + <field name="parent_id"/> + </tree> + </field> + </record> + + <menuitem action="crm_turnover_range_action" + id="menu_crm_turnover_range" + name="Turnover ranges" + parent="base.menu_crm_config_lead" + sequence="5"/> + + </data> +</openerp> \ No newline at end of file diff --git a/crm_capital/views/res_partner_view.xml b/crm_capital/views/res_partner_view.xml new file mode 100644 index 000000000..f5e730709 --- /dev/null +++ b/crm_capital/views/res_partner_view.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="ir.ui.view" id="view_partner_form_capital"> + <field name="name">Partner form with capital info</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="capital_country" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="capital_registered" + attrs="{'invisible': [('is_company', '=', False)]}"/> + </field> + </field> + </record> + + </data> +</openerp> \ No newline at end of file From d9447b070e655126bc143cbe817ed727e3794352 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Fri, 27 Mar 2015 12:53:53 +0100 Subject: [PATCH 02/58] Set some fields as tranlate --- crm_capital/models/crm_turnover_range.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_capital/models/crm_turnover_range.py b/crm_capital/models/crm_turnover_range.py index 875496abf..5df06607b 100644 --- a/crm_capital/models/crm_turnover_range.py +++ b/crm_capital/models/crm_turnover_range.py @@ -12,7 +12,7 @@ class CrmTurnoverRange(models.Model): _parent_store = True _description = "Turnover range" - name = fields.Char(required=True) + name = fields.Char(required=True, translate=True) parent_id = fields.Many2one(comodel_name='crm.turnover_range') children = fields.One2many(comodel_name='crm.turnover_range', inverse_name='parent_id') From d487f3c8471873dedfbd70e1a09bca6fe9b5f8dc Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Mon, 30 Mar 2015 17:29:52 +0200 Subject: [PATCH 03/58] Turnover items has no parent --- crm_capital/models/crm_turnover_range.py | 8 -------- crm_capital/views/crm_turnover_range_view.xml | 1 - 2 files changed, 9 deletions(-) diff --git a/crm_capital/models/crm_turnover_range.py b/crm_capital/models/crm_turnover_range.py index 5df06607b..b6784462e 100644 --- a/crm_capital/models/crm_turnover_range.py +++ b/crm_capital/models/crm_turnover_range.py @@ -7,14 +7,6 @@ from openerp import models, fields class CrmTurnoverRange(models.Model): _name = 'crm.turnover_range' - _order = "parent_left" - _parent_order = "name" - _parent_store = True _description = "Turnover range" name = fields.Char(required=True, translate=True) - parent_id = fields.Many2one(comodel_name='crm.turnover_range') - children = fields.One2many(comodel_name='crm.turnover_range', - inverse_name='parent_id') - parent_left = fields.Integer('Parent Left', select=True) - parent_right = fields.Integer('Parent Right', select=True) diff --git a/crm_capital/views/crm_turnover_range_view.xml b/crm_capital/views/crm_turnover_range_view.xml index 329aff280..fbc3f87c9 100644 --- a/crm_capital/views/crm_turnover_range_view.xml +++ b/crm_capital/views/crm_turnover_range_view.xml @@ -15,7 +15,6 @@ <field name="arch" type="xml"> <tree string="Turnover ranges" editable="bottom"> <field name="name"/> - <field name="parent_id"/> </tree> </field> </record> From 14cb48926b6fcc46d85bbffa318223ae76f15e8a Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Wed, 8 Apr 2015 19:34:05 +0200 Subject: [PATCH 04/58] [FIX] Declare turnover fields in model --- crm_capital/models/crm_lead.py | 6 +++++- crm_capital/models/res_partner.py | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/crm_capital/models/crm_lead.py b/crm_capital/models/crm_lead.py index 0b0a517f2..6e3978fe6 100644 --- a/crm_capital/models/crm_lead.py +++ b/crm_capital/models/crm_lead.py @@ -12,6 +12,8 @@ class CrmLead(models.Model): 'res.country', string="Capital country", help="Country of origin of the capital of this company") capital_registered = fields.Integer(string="Capital registered") + turnover_range = fields.Many2one(comodel_name='crm.turnover_range') + turnover_number = fields.Integer() def _lead_create_contact(self, cr, uid, lead, name, is_company, parent_id=False, context=None): @@ -23,6 +25,8 @@ class CrmLead(models.Model): self.pool['res.partner'].write( cr, uid, partner_id, { 'capital_country': lead.capital_country.id, - 'capital_registered': lead.capital_registered + 'capital_registered': lead.capital_registered, + 'turnover_range': lead.turnover_range.id, + 'turnover_number': lead.turnover_number, }, context=context) return partner_id diff --git a/crm_capital/models/res_partner.py b/crm_capital/models/res_partner.py index 8eb85d32e..ded600eeb 100644 --- a/crm_capital/models/res_partner.py +++ b/crm_capital/models/res_partner.py @@ -12,3 +12,5 @@ class ResPartner(models.Model): 'res.country', string="Capital country", help="Country of origin of the capital of this company") capital_registered = fields.Integer(string="Capital registered") + turnover_range = fields.Many2one(comodel_name='crm.turnover_range') + turnover_number = fields.Integer() From 99938d564a3bd443932aebe24adae06ffe1debd3 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Wed, 8 Apr 2015 19:34:58 +0200 Subject: [PATCH 05/58] [FIX] XML revised --- crm_capital/views/crm_lead_view.xml | 86 +++++++++++++------ crm_capital/views/crm_turnover_range_view.xml | 46 +++++----- crm_capital/views/res_partner_view.xml | 52 +++++++---- 3 files changed, 120 insertions(+), 64 deletions(-) diff --git a/crm_capital/views/crm_lead_view.xml b/crm_capital/views/crm_lead_view.xml index 87f66a013..a06b65a4d 100644 --- a/crm_capital/views/crm_lead_view.xml +++ b/crm_capital/views/crm_lead_view.xml @@ -1,30 +1,66 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record model="ir.ui.view" id="crm_case_form_view_leads_capital"> - <field name="name">CRM - Leads Form with capital info</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> - <field name="arch" type="xml"> - <field name="partner_id" position="before"> - <field name="capital_country"/> - <field name="capital_registered"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="crm_case_form_view_leads_capital"> + <field name="name">CRM - Leads Form with capital info</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> + <field name="arch" type="xml"> + <field name="partner_id" position="before"> + <field name="capital_country"/> + <field name="capital_registered"/> + <field name="turnover_range"/> + <field name="turnover_number"/> + </field> + </field> +</record> - <record model="ir.ui.view" id="crm_case_form_view_oppor_capital"> - <field name="name">CRM - Leads Form with capital info</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> - <field name="arch" type="xml"> - <field name="partner_id" position="before"> - <field name="capital_country"/> - <field name="capital_registered"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="view_crm_case_leads_filter_capital"> + <field name="name">CRM - Leads Search with capital</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> + <field name="arch" type="xml"> + <filter string="Sales Team" position="after"> + <filter string="Capital country" + domain="[]" + context="{'group_by': 'capital_country'}"/> + <filter string="Turnover" + domain="[]" + context="{'group_by': 'turnover_number'}"/> + </filter> + </field> +</record> - </data> +<record model="ir.ui.view" id="crm_case_form_view_oppor_capital"> + <field name="name">CRM - Leads Form with capital info</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> + <field name="arch" type="xml"> + <field name="partner_id" position="before"> + <field name="capital_country"/> + <field name="capital_registered"/> + <field name="turnover_range"/> + <field name="turnover_number"/> + </field> + </field> +</record> + +<record model="ir.ui.view" id="view_crm_case_opportunities_filter_capital"> + <field name="name">CRM - Leads Search with capital</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> + <field name="arch" type="xml"> + <filter string="Sales Team" position="after"> + <filter string="Capital country" + domain="[]" + context="{'group_by': 'capital_country'}"/> + <filter string="Turnover" + domain="[]" + context="{'group_by': 'turnover_number'}"/> + </filter> + </field> +</record> + +</data> </openerp> \ No newline at end of file diff --git a/crm_capital/views/crm_turnover_range_view.xml b/crm_capital/views/crm_turnover_range_view.xml index fbc3f87c9..366896a2d 100644 --- a/crm_capital/views/crm_turnover_range_view.xml +++ b/crm_capital/views/crm_turnover_range_view.xml @@ -1,29 +1,29 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record id="crm_turnover_range_action" model="ir.actions.act_window"> - <field name="name">Turnover ranges</field> - <field name="res_model">crm.turnover_range</field> - <field name="view_type">form</field> - <field name="view_mode">tree</field> - </record> +<record id="crm_turnover_range_action" model="ir.actions.act_window"> + <field name="name">Turnover ranges</field> + <field name="res_model">crm.turnover_range</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> +</record> - <record id="crm_turnover_range_tree_view" model="ir.ui.view"> - <field name="name">CRM Turnover range tree</field> - <field name="model">crm.turnover_range</field> - <field name="arch" type="xml"> - <tree string="Turnover ranges" editable="bottom"> - <field name="name"/> - </tree> - </field> - </record> +<record id="crm_turnover_range_tree_view" model="ir.ui.view"> + <field name="name">CRM Turnover range tree</field> + <field name="model">crm.turnover_range</field> + <field name="arch" type="xml"> + <tree string="Turnover ranges" editable="bottom"> + <field name="name"/> + </tree> + </field> +</record> - <menuitem action="crm_turnover_range_action" - id="menu_crm_turnover_range" - name="Turnover ranges" - parent="base.menu_crm_config_lead" - sequence="5"/> +<menuitem action="crm_turnover_range_action" + id="menu_crm_turnover_range" + name="Turnover ranges" + parent="base.menu_crm_config_lead" + sequence="5"/> - </data> +</data> </openerp> \ No newline at end of file diff --git a/crm_capital/views/res_partner_view.xml b/crm_capital/views/res_partner_view.xml index f5e730709..38013dad0 100644 --- a/crm_capital/views/res_partner_view.xml +++ b/crm_capital/views/res_partner_view.xml @@ -1,20 +1,40 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record model="ir.ui.view" id="view_partner_form_capital"> - <field name="name">Partner form with capital info</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="capital_country" - attrs="{'invisible': [('is_company', '=', False)]}"/> - <field name="capital_registered" - attrs="{'invisible': [('is_company', '=', False)]}"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="view_partner_form_capital"> + <field name="name">Partner form with capital info</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="capital_country" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="capital_registered" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="turnover_range" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="turnover_number" + attrs="{'invisible': [('is_company', '=', False)]}"/> + </field> + </field> +</record> - </data> +<record model="ir.ui.view" id="view_res_partner_filter_capital"> + <field name="name">Partner search with capital</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_res_partner_filter"/> + <field name="arch" type="xml"> + <filter string="Salesperson" position="after"> + <filter string="Capital country" + domain="[('is_company', '=', True)]" + context="{'group_by': 'capital_country'}"/> + <filter string="Turnover" + domain="[('is_company', '=', True)]" + context="{'group_by': 'turnover_number'}"/> + </filter> + </field> +</record> + +</data> </openerp> \ No newline at end of file From 74cfb885a5597788df27e66bd7b96f30e3d2fce7 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Thu, 16 Apr 2015 16:32:07 +0200 Subject: [PATCH 06/58] [FIX] View fields review --- crm_capital/views/crm_lead_view.xml | 12 ++++++++---- crm_capital/views/res_partner_view.xml | 10 ++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/crm_capital/views/crm_lead_view.xml b/crm_capital/views/crm_lead_view.xml index a06b65a4d..a0a38e91b 100644 --- a/crm_capital/views/crm_lead_view.xml +++ b/crm_capital/views/crm_lead_view.xml @@ -8,9 +8,11 @@ <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> <field name="arch" type="xml"> <field name="partner_id" position="before"> - <field name="capital_country"/> + <field name="capital_country" placeholder="Capital country" + options='{"no_open": True}'/> <field name="capital_registered"/> - <field name="turnover_range"/> + <field name="turnover_range" placeholder="Turnover range" + options='{"no_open": True}'/> <field name="turnover_number"/> </field> </field> @@ -38,9 +40,11 @@ <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> <field name="arch" type="xml"> <field name="partner_id" position="before"> - <field name="capital_country"/> + <field name="capital_country" placeholder="Capital country" + options='{"no_open": True}'/> <field name="capital_registered"/> - <field name="turnover_range"/> + <field name="turnover_range" placeholder="Turnover range" + options='{"no_open": True}'/> <field name="turnover_number"/> </field> </field> diff --git a/crm_capital/views/res_partner_view.xml b/crm_capital/views/res_partner_view.xml index 38013dad0..72c12ce15 100644 --- a/crm_capital/views/res_partner_view.xml +++ b/crm_capital/views/res_partner_view.xml @@ -8,12 +8,14 @@ <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> <field name="phone" position="before"> - <field name="capital_country" - attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="capital_country" placeholder="Capital country" + attrs="{'invisible': [('is_company', '=', False)]}" + options='{"no_open": True}'/> <field name="capital_registered" attrs="{'invisible': [('is_company', '=', False)]}"/> - <field name="turnover_range" - attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="turnover_range" placeholder="Turnover range" + attrs="{'invisible': [('is_company', '=', False)]}" + options='{"no_open": True}'/> <field name="turnover_number" attrs="{'invisible': [('is_company', '=', False)]}"/> </field> From 204eaec59014a5f108d8ae8810af1a7ee7925898 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Fri, 24 Apr 2015 12:26:24 +0200 Subject: [PATCH 07/58] [IMP] Add company size field --- crm_capital/models/crm_lead.py | 5 +++++ crm_capital/models/res_partner.py | 4 ++++ crm_capital/views/crm_lead_view.xml | 8 ++++++++ crm_capital/views/res_partner_view.xml | 5 +++++ 4 files changed, 22 insertions(+) diff --git a/crm_capital/models/crm_lead.py b/crm_capital/models/crm_lead.py index 6e3978fe6..02342d728 100644 --- a/crm_capital/models/crm_lead.py +++ b/crm_capital/models/crm_lead.py @@ -14,6 +14,10 @@ class CrmLead(models.Model): capital_registered = fields.Integer(string="Capital registered") turnover_range = fields.Many2one(comodel_name='crm.turnover_range') turnover_number = fields.Integer() + company_size = fields.Selection( + string="Company size", + selection=[('micro', 'Micro'), ('small', 'Small'), + ('medium', 'Medium'), ('big', 'Big')]) def _lead_create_contact(self, cr, uid, lead, name, is_company, parent_id=False, context=None): @@ -28,5 +32,6 @@ class CrmLead(models.Model): 'capital_registered': lead.capital_registered, 'turnover_range': lead.turnover_range.id, 'turnover_number': lead.turnover_number, + 'company_size': lead.company_size, }, context=context) return partner_id diff --git a/crm_capital/models/res_partner.py b/crm_capital/models/res_partner.py index ded600eeb..b0a0df7df 100644 --- a/crm_capital/models/res_partner.py +++ b/crm_capital/models/res_partner.py @@ -14,3 +14,7 @@ class ResPartner(models.Model): capital_registered = fields.Integer(string="Capital registered") turnover_range = fields.Many2one(comodel_name='crm.turnover_range') turnover_number = fields.Integer() + company_size = fields.Selection( + string="Company size", + selection=[('micro', 'Micro'), ('small', 'Small'), + ('medium', 'Medium'), ('big', 'Big')]) diff --git a/crm_capital/views/crm_lead_view.xml b/crm_capital/views/crm_lead_view.xml index a0a38e91b..6602454a1 100644 --- a/crm_capital/views/crm_lead_view.xml +++ b/crm_capital/views/crm_lead_view.xml @@ -14,6 +14,7 @@ <field name="turnover_range" placeholder="Turnover range" options='{"no_open": True}'/> <field name="turnover_number"/> + <field name="company_size"/> </field> </field> </record> @@ -30,6 +31,9 @@ <filter string="Turnover" domain="[]" context="{'group_by': 'turnover_number'}"/> + <filter string="Company size" + domain="[]" + context="{'group_by': 'company_size'}"/> </filter> </field> </record> @@ -46,6 +50,7 @@ <field name="turnover_range" placeholder="Turnover range" options='{"no_open": True}'/> <field name="turnover_number"/> + <field name="company_size"/> </field> </field> </record> @@ -62,6 +67,9 @@ <filter string="Turnover" domain="[]" context="{'group_by': 'turnover_number'}"/> + <filter string="Company size" + domain="[]" + context="{'group_by': 'company_size'}"/> </filter> </field> </record> diff --git a/crm_capital/views/res_partner_view.xml b/crm_capital/views/res_partner_view.xml index 72c12ce15..b2ee2eaa6 100644 --- a/crm_capital/views/res_partner_view.xml +++ b/crm_capital/views/res_partner_view.xml @@ -18,6 +18,8 @@ options='{"no_open": True}'/> <field name="turnover_number" attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="company_size" + attrs="{'invisible': [('is_company', '=', False)]}"/> </field> </field> </record> @@ -34,6 +36,9 @@ <filter string="Turnover" domain="[('is_company', '=', True)]" context="{'group_by': 'turnover_number'}"/> + <filter string="Company size" + domain="[('is_company', '=', True)]" + context="{'group_by': 'company_size'}"/> </filter> </field> </record> From 8b85274c5c2879709c56eb429ca254b541103b72 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Fri, 22 May 2015 09:29:19 +0200 Subject: [PATCH 08/58] [FIX] Add new record on top of the list --- crm_capital/views/crm_turnover_range_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_capital/views/crm_turnover_range_view.xml b/crm_capital/views/crm_turnover_range_view.xml index 366896a2d..1f2461ce0 100644 --- a/crm_capital/views/crm_turnover_range_view.xml +++ b/crm_capital/views/crm_turnover_range_view.xml @@ -13,7 +13,7 @@ <field name="name">CRM Turnover range tree</field> <field name="model">crm.turnover_range</field> <field name="arch" type="xml"> - <tree string="Turnover ranges" editable="bottom"> + <tree string="Turnover ranges" editable="top"> <field name="name"/> </tree> </field> From e7a158444fd86575eb67633fcdf021b4cc94698c Mon Sep 17 00:00:00 2001 From: Javier Iniesta <javieria@antiun.com> Date: Tue, 26 May 2015 18:02:19 +0200 Subject: [PATCH 09/58] [IMP] Added translations --- crm_capital/i18n/crm_capital.pot | 74 +++++++++++++++++++++++----- crm_capital/i18n/es.po | 84 +++++++++++++++++++++++++------- 2 files changed, 129 insertions(+), 29 deletions(-) diff --git a/crm_capital/i18n/crm_capital.pot b/crm_capital/i18n/crm_capital.pot index 9434fb358..4e28cdaf9 100644 --- a/crm_capital/i18n/crm_capital.pot +++ b/crm_capital/i18n/crm_capital.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-24 11:53+0000\n" -"PO-Revision-Date: 2015-03-24 11:53+0000\n" +"POT-Creation-Date: 2015-05-26 15:15+0000\n" +"PO-Revision-Date: 2015-05-26 15:15+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,20 @@ msgstr "" "Plural-Forms: \n" #. module: crm_capital +#: selection:crm.lead,company_size:0 +#: selection:res.partner,company_size:0 +msgid "Big" +msgstr "" + +#. module: crm_capital +#: view:crm.lead:crm_capital.crm_case_form_view_leads_capital +#: view:crm.lead:crm_capital.crm_case_form_view_oppor_capital +#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital +#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital #: field:crm.lead,capital_country:0 +#: view:res.partner:crm_capital.view_partner_form_capital +#: view:res.partner:crm_capital.view_res_partner_filter_capital +#: field:res.partner,capital_country:0 msgid "Capital country" msgstr "" @@ -27,12 +40,17 @@ msgid "Capital registered" msgstr "" #. module: crm_capital -#: field:crm.turnover_range,children:0 -msgid "Children" +#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital +#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital +#: field:crm.lead,company_size:0 +#: view:res.partner:crm_capital.view_res_partner_filter_capital +#: field:res.partner,company_size:0 +msgid "Company size" msgstr "" #. module: crm_capital #: help:crm.lead,capital_country:0 +#: help:res.partner,capital_country:0 msgid "Country of origin of the capital of this company" msgstr "" @@ -66,33 +84,65 @@ msgstr "" msgid "Lead/Opportunity" msgstr "" +#. module: crm_capital +#: selection:crm.lead,company_size:0 +#: selection:res.partner,company_size:0 +msgid "Medium" +msgstr "" + +#. module: crm_capital +#: selection:crm.lead,company_size:0 +#: selection:res.partner,company_size:0 +msgid "Micro" +msgstr "" + #. module: crm_capital #: field:crm.turnover_range,name:0 msgid "Name" msgstr "" #. module: crm_capital -#: field:crm.turnover_range,parent_left:0 -msgid "Parent Left" +#: model:ir.model,name:crm_capital.model_res_partner +msgid "Partner" msgstr "" #. module: crm_capital -#: field:crm.turnover_range,parent_right:0 -msgid "Parent Right" +#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital +#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital +msgid "Sales Team" msgstr "" #. module: crm_capital -#: field:crm.turnover_range,parent_id:0 -msgid "Parent id" +#: view:res.partner:crm_capital.view_res_partner_filter_capital +msgid "Salesperson" msgstr "" #. module: crm_capital -#: model:ir.model,name:crm_capital.model_res_partner -msgid "Partner" +#: selection:crm.lead,company_size:0 +#: selection:res.partner,company_size:0 +msgid "Small" +msgstr "" + +#. module: crm_capital +#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital +#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital +#: view:res.partner:crm_capital.view_res_partner_filter_capital +msgid "Turnover" +msgstr "" + +#. module: crm_capital +#: field:crm.lead,turnover_number:0 +#: field:res.partner,turnover_number:0 +msgid "Turnover number" msgstr "" #. module: crm_capital +#: view:crm.lead:crm_capital.crm_case_form_view_leads_capital +#: view:crm.lead:crm_capital.crm_case_form_view_oppor_capital +#: field:crm.lead,turnover_range:0 #: model:ir.model,name:crm_capital.model_crm_turnover_range +#: view:res.partner:crm_capital.view_partner_form_capital +#: field:res.partner,turnover_range:0 msgid "Turnover range" msgstr "" diff --git a/crm_capital/i18n/es.po b/crm_capital/i18n/es.po index f5b80e398..ea21593b1 100644 --- a/crm_capital/i18n/es.po +++ b/crm_capital/i18n/es.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-24 11:53+0000\n" -"PO-Revision-Date: 2015-03-24 11:53+0000\n" +"POT-Creation-Date: 2015-05-26 15:15+0000\n" +"PO-Revision-Date: 2015-05-26 15:15+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,7 +16,20 @@ msgstr "" "Plural-Forms: \n" #. module: crm_capital +#: selection:crm.lead,company_size:0 +#: selection:res.partner,company_size:0 +msgid "Big" +msgstr "Grande" + +#. module: crm_capital +#: view:crm.lead:crm_capital.crm_case_form_view_leads_capital +#: view:crm.lead:crm_capital.crm_case_form_view_oppor_capital +#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital +#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital #: field:crm.lead,capital_country:0 +#: view:res.partner:crm_capital.view_partner_form_capital +#: view:res.partner:crm_capital.view_res_partner_filter_capital +#: field:res.partner,capital_country:0 msgid "Capital country" msgstr "Nacionalidad del capital" @@ -27,12 +40,17 @@ msgid "Capital registered" msgstr "Capital social" #. module: crm_capital -#: field:crm.turnover_range,children:0 -msgid "Children" -msgstr "Hijos" +#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital +#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital +#: field:crm.lead,company_size:0 +#: view:res.partner:crm_capital.view_res_partner_filter_capital +#: field:res.partner,company_size:0 +msgid "Company size" +msgstr "Tamaño de la companía" #. module: crm_capital #: help:crm.lead,capital_country:0 +#: help:res.partner,capital_country:0 msgid "Country of origin of the capital of this company" msgstr "País de origen del capital social de esta empresa" @@ -66,33 +84,65 @@ msgstr "última actualización en" msgid "Lead/Opportunity" msgstr "Iniciativa/Oportunidad" +#. module: crm_capital +#: selection:crm.lead,company_size:0 +#: selection:res.partner,company_size:0 +msgid "Medium" +msgstr "Medio" + +#. module: crm_capital +#: selection:crm.lead,company_size:0 +#: selection:res.partner,company_size:0 +msgid "Micro" +msgstr "Micro" + #. module: crm_capital #: field:crm.turnover_range,name:0 msgid "Name" msgstr "Nombre" #. module: crm_capital -#: field:crm.turnover_range,parent_left:0 -msgid "Parent Left" -msgstr "Padre izquierdo" +#: model:ir.model,name:crm_capital.model_res_partner +msgid "Partner" +msgstr "Empresa" + +#. module: crm_capital +#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital +#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital +msgid "Sales Team" +msgstr "Equipo de ventas" #. module: crm_capital -#: field:crm.turnover_range,parent_right:0 -msgid "Parent Right" -msgstr "Padre derecho" +#: view:res.partner:crm_capital.view_res_partner_filter_capital +msgid "Salesperson" +msgstr "Comercial" #. module: crm_capital -#: field:crm.turnover_range,parent_id:0 -msgid "Parent id" -msgstr "ID del padre" +#: selection:crm.lead,company_size:0 +#: selection:res.partner,company_size:0 +msgid "Small" +msgstr "Pequeño" #. module: crm_capital -#: model:ir.model,name:crm_capital.model_res_partner -msgid "Partner" -msgstr "Empresa" +#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital +#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital +#: view:res.partner:crm_capital.view_res_partner_filter_capital +msgid "Turnover" +msgstr "Facturación" + +#. module: crm_capital +#: field:crm.lead,turnover_number:0 +#: field:res.partner,turnover_number:0 +msgid "Turnover number" +msgstr "Número de facturación" #. module: crm_capital +#: view:crm.lead:crm_capital.crm_case_form_view_leads_capital +#: view:crm.lead:crm_capital.crm_case_form_view_oppor_capital +#: field:crm.lead,turnover_range:0 #: model:ir.model,name:crm_capital.model_crm_turnover_range +#: view:res.partner:crm_capital.view_partner_form_capital +#: field:res.partner,turnover_range:0 msgid "Turnover range" msgstr "Rango de facturación" From b5203fc4a76e17f476da1f67ac3b1c25398a8160 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antespi@gmail.com> Date: Wed, 1 Jul 2015 13:32:14 +0200 Subject: [PATCH 10/58] Renaming several views to complain best practices --- crm_capital/views/crm_lead_view.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/crm_capital/views/crm_lead_view.xml b/crm_capital/views/crm_lead_view.xml index 6602454a1..f5cec0cfb 100644 --- a/crm_capital/views/crm_lead_view.xml +++ b/crm_capital/views/crm_lead_view.xml @@ -2,8 +2,8 @@ <openerp> <data> -<record model="ir.ui.view" id="crm_case_form_view_leads_capital"> - <field name="name">CRM - Leads Form with capital info</field> +<record model="ir.ui.view" id="crm_case_form_view_leads"> + <field name="name">Add capital fields</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> <field name="arch" type="xml"> @@ -19,8 +19,8 @@ </field> </record> -<record model="ir.ui.view" id="view_crm_case_leads_filter_capital"> - <field name="name">CRM - Leads Search with capital</field> +<record model="ir.ui.view" id="view_crm_case_leads_filter"> + <field name="name">Add capital fields for grouping</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> <field name="arch" type="xml"> @@ -38,8 +38,8 @@ </field> </record> -<record model="ir.ui.view" id="crm_case_form_view_oppor_capital"> - <field name="name">CRM - Leads Form with capital info</field> +<record model="ir.ui.view" id="crm_case_form_view_oppor"> + <field name="name">Add capital fields</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> <field name="arch" type="xml"> @@ -55,8 +55,8 @@ </field> </record> -<record model="ir.ui.view" id="view_crm_case_opportunities_filter_capital"> - <field name="name">CRM - Leads Search with capital</field> +<record model="ir.ui.view" id="view_crm_case_opportunities_filter"> + <field name="name">Add capital fields for grouping</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> <field name="arch" type="xml"> From 699f969a40aa15262e8ea7499fafb137bba7c828 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Wed, 16 Dec 2015 17:41:52 +0100 Subject: [PATCH 11/58] Rename addon to partner_capital. --- {crm_capital => partner_capital}/README.rst | 0 {crm_capital => partner_capital}/__init__.py | 0 {crm_capital => partner_capital}/__openerp__.py | 0 .../i18n/crm_capital.pot | 0 {crm_capital => partner_capital}/i18n/es.po | 0 {crm_capital => partner_capital}/models/__init__.py | 0 {crm_capital => partner_capital}/models/crm_lead.py | 0 .../models/crm_turnover_range.py | 0 .../models/res_partner.py | 0 .../security/ir.model.access.csv | 0 .../static/description/icon.png | Bin .../views/crm_lead_view.xml | 0 .../views/crm_turnover_range_view.xml | 0 .../views/res_partner_view.xml | 0 14 files changed, 0 insertions(+), 0 deletions(-) rename {crm_capital => partner_capital}/README.rst (100%) rename {crm_capital => partner_capital}/__init__.py (100%) rename {crm_capital => partner_capital}/__openerp__.py (100%) rename {crm_capital => partner_capital}/i18n/crm_capital.pot (100%) rename {crm_capital => partner_capital}/i18n/es.po (100%) rename {crm_capital => partner_capital}/models/__init__.py (100%) rename {crm_capital => partner_capital}/models/crm_lead.py (100%) rename {crm_capital => partner_capital}/models/crm_turnover_range.py (100%) rename {crm_capital => partner_capital}/models/res_partner.py (100%) rename {crm_capital => partner_capital}/security/ir.model.access.csv (100%) rename {crm_capital => partner_capital}/static/description/icon.png (100%) rename {crm_capital => partner_capital}/views/crm_lead_view.xml (100%) rename {crm_capital => partner_capital}/views/crm_turnover_range_view.xml (100%) rename {crm_capital => partner_capital}/views/res_partner_view.xml (100%) diff --git a/crm_capital/README.rst b/partner_capital/README.rst similarity index 100% rename from crm_capital/README.rst rename to partner_capital/README.rst diff --git a/crm_capital/__init__.py b/partner_capital/__init__.py similarity index 100% rename from crm_capital/__init__.py rename to partner_capital/__init__.py diff --git a/crm_capital/__openerp__.py b/partner_capital/__openerp__.py similarity index 100% rename from crm_capital/__openerp__.py rename to partner_capital/__openerp__.py diff --git a/crm_capital/i18n/crm_capital.pot b/partner_capital/i18n/crm_capital.pot similarity index 100% rename from crm_capital/i18n/crm_capital.pot rename to partner_capital/i18n/crm_capital.pot diff --git a/crm_capital/i18n/es.po b/partner_capital/i18n/es.po similarity index 100% rename from crm_capital/i18n/es.po rename to partner_capital/i18n/es.po diff --git a/crm_capital/models/__init__.py b/partner_capital/models/__init__.py similarity index 100% rename from crm_capital/models/__init__.py rename to partner_capital/models/__init__.py diff --git a/crm_capital/models/crm_lead.py b/partner_capital/models/crm_lead.py similarity index 100% rename from crm_capital/models/crm_lead.py rename to partner_capital/models/crm_lead.py diff --git a/crm_capital/models/crm_turnover_range.py b/partner_capital/models/crm_turnover_range.py similarity index 100% rename from crm_capital/models/crm_turnover_range.py rename to partner_capital/models/crm_turnover_range.py diff --git a/crm_capital/models/res_partner.py b/partner_capital/models/res_partner.py similarity index 100% rename from crm_capital/models/res_partner.py rename to partner_capital/models/res_partner.py diff --git a/crm_capital/security/ir.model.access.csv b/partner_capital/security/ir.model.access.csv similarity index 100% rename from crm_capital/security/ir.model.access.csv rename to partner_capital/security/ir.model.access.csv diff --git a/crm_capital/static/description/icon.png b/partner_capital/static/description/icon.png similarity index 100% rename from crm_capital/static/description/icon.png rename to partner_capital/static/description/icon.png diff --git a/crm_capital/views/crm_lead_view.xml b/partner_capital/views/crm_lead_view.xml similarity index 100% rename from crm_capital/views/crm_lead_view.xml rename to partner_capital/views/crm_lead_view.xml diff --git a/crm_capital/views/crm_turnover_range_view.xml b/partner_capital/views/crm_turnover_range_view.xml similarity index 100% rename from crm_capital/views/crm_turnover_range_view.xml rename to partner_capital/views/crm_turnover_range_view.xml diff --git a/crm_capital/views/res_partner_view.xml b/partner_capital/views/res_partner_view.xml similarity index 100% rename from crm_capital/views/res_partner_view.xml rename to partner_capital/views/res_partner_view.xml From ee698418a2613e468704ff05a02ef770759380df Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Wed, 16 Dec 2015 18:33:01 +0100 Subject: [PATCH 12/58] Prepare module for OCA. This means: - Add proper README. - Use new-style copyright & license headers. - Update translation. - Remove .pot. - Drop CRM dependency. - Move fields into Sales & Purchases tab. - Rename some fields. - Probably something more. --- partner_capital/README.rst | 82 ++++++++- partner_capital/__init__.py | 9 +- partner_capital/__openerp__.py | 31 +--- partner_capital/i18n/crm_capital.pot | 155 ------------------ partner_capital/i18n/es.po | 146 +++++++---------- partner_capital/models/__init__.py | 16 +- partner_capital/models/crm_lead.py | 37 ----- partner_capital/models/crm_turnover_range.py | 12 -- partner_capital/models/res_partner.py | 25 ++- .../models/res_partner_turnover_range.py | 14 ++ partner_capital/security/ir.model.access.csv | 8 +- partner_capital/views/crm_lead_view.xml | 78 --------- .../views/crm_turnover_range_view.xml | 29 ---- .../views/res_partner_turnover_range_view.xml | 33 ++++ partner_capital/views/res_partner_view.xml | 34 ++-- 15 files changed, 242 insertions(+), 467 deletions(-) delete mode 100644 partner_capital/i18n/crm_capital.pot delete mode 100644 partner_capital/models/crm_lead.py delete mode 100644 partner_capital/models/crm_turnover_range.py create mode 100644 partner_capital/models/res_partner_turnover_range.py delete mode 100644 partner_capital/views/crm_lead_view.xml delete mode 100644 partner_capital/views/crm_turnover_range_view.xml create mode 100644 partner_capital/views/res_partner_turnover_range_view.xml diff --git a/partner_capital/README.rst b/partner_capital/README.rst index 735a076d7..a1590a66a 100644 --- a/partner_capital/README.rst +++ b/partner_capital/README.rst @@ -1,18 +1,82 @@ -Capital in CRM -================ +.. 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 -This module allows to set capital country, capital registered and turnover -for companies in the CRM main objects (lead, opportunity, partner), and -propagate them through the workflow. +=============== +Partners Capital +=============== -By capital country we mean country of origin of the capital of the company -By capital registered we mean the amount of money registered in comercial -registry, aka social capital or just capital of a company -By turnover we can define a range an a concret amount +This module extends the functionality of partners to support setting capital +country, registered capital amount and turnover. + +By capital country we mean country of origin of the capital of the company. + +By registered capital amount we mean the amount of money registered in the +corresponding commercial registry, A.K.A. social capital or just capital of a +company. + +By turnover we can define a range for a concrete amount. + +Usage +===== + +To use this module, you need to: + +* Go to any partner's form. +* You will find the new fields in *Sales & Purchases > Capital*. + +To manage turnover ranges, you need to: + +* Go to *Sales > Configuration > Address Book > Turnover ranges*. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/134/8.0 + +Known issues / Roadmap +====================== + +* Add automatic rules to calculate turnover range and company size. +* Allow customization of company sizes. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +<https://github.com/OCA/partner-contact/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 +<https://github.com/OCA/ +partner-contact/issues/new?body=module:%20 +partner_capital%0Aversion:%20 +8.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. Credits ======= +Images +------ + +* `Antiun Ingeniería S.L. <http://www.antiun.com>`_: Icon. + Contributors ------------ + * Antonio Espinosa <antonioea@antiun.com> +* Rafael Blasco <rafabn@antiun.com> +* Jairo Llopis <yajo.sk8@gmail.com> + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://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 https://odoo-community.org. diff --git a/partner_capital/__init__.py b/partner_capital/__init__.py index 054c8853d..013a9f613 100644 --- a/partner_capital/__init__.py +++ b/partner_capital/__init__.py @@ -1,6 +1,7 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models diff --git a/partner_capital/__openerp__.py b/partner_capital/__openerp__.py index 0a26b02b4..22a1e6b49 100644 --- a/partner_capital/__openerp__.py +++ b/partner_capital/__openerp__.py @@ -1,37 +1,20 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Odoo Source Management Solution +# -*- coding: utf-8 -*- # Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) # Antonio Espinosa <antonioea@antiun.com> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Capital in CRM', - 'version': '1.0', + 'name': 'Partners Capital', + 'version': '8.0.1.0.0', 'category': 'Customer Relationship Management', 'author': 'Antiun Ingeniería S.L.', 'website': 'http://www.antiun.com', 'depends': [ - 'crm', + 'base', ], 'data': [ - 'views/crm_turnover_range_view.xml', - 'views/crm_lead_view.xml', + 'views/res_partner_turnover_range_view.xml', 'views/res_partner_view.xml', 'security/ir.model.access.csv', ], diff --git a/partner_capital/i18n/crm_capital.pot b/partner_capital/i18n/crm_capital.pot deleted file mode 100644 index 4e28cdaf9..000000000 --- a/partner_capital/i18n/crm_capital.pot +++ /dev/null @@ -1,155 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * crm_capital -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-26 15:15+0000\n" -"PO-Revision-Date: 2015-05-26 15:15+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_capital -#: selection:crm.lead,company_size:0 -#: selection:res.partner,company_size:0 -msgid "Big" -msgstr "" - -#. module: crm_capital -#: view:crm.lead:crm_capital.crm_case_form_view_leads_capital -#: view:crm.lead:crm_capital.crm_case_form_view_oppor_capital -#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital -#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital -#: field:crm.lead,capital_country:0 -#: view:res.partner:crm_capital.view_partner_form_capital -#: view:res.partner:crm_capital.view_res_partner_filter_capital -#: field:res.partner,capital_country:0 -msgid "Capital country" -msgstr "" - -#. module: crm_capital -#: field:crm.lead,capital_registered:0 -#: field:res.partner,capital_registered:0 -msgid "Capital registered" -msgstr "" - -#. module: crm_capital -#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital -#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital -#: field:crm.lead,company_size:0 -#: view:res.partner:crm_capital.view_res_partner_filter_capital -#: field:res.partner,company_size:0 -msgid "Company size" -msgstr "" - -#. module: crm_capital -#: help:crm.lead,capital_country:0 -#: help:res.partner,capital_country:0 -msgid "Country of origin of the capital of this company" -msgstr "" - -#. module: crm_capital -#: field:crm.turnover_range,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: crm_capital -#: field:crm.turnover_range,create_date:0 -msgid "Created on" -msgstr "" - -#. module: crm_capital -#: field:crm.turnover_range,id:0 -msgid "ID" -msgstr "" - -#. module: crm_capital -#: field:crm.turnover_range,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: crm_capital -#: field:crm.turnover_range,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: crm_capital -#: model:ir.model,name:crm_capital.model_crm_lead -msgid "Lead/Opportunity" -msgstr "" - -#. module: crm_capital -#: selection:crm.lead,company_size:0 -#: selection:res.partner,company_size:0 -msgid "Medium" -msgstr "" - -#. module: crm_capital -#: selection:crm.lead,company_size:0 -#: selection:res.partner,company_size:0 -msgid "Micro" -msgstr "" - -#. module: crm_capital -#: field:crm.turnover_range,name:0 -msgid "Name" -msgstr "" - -#. module: crm_capital -#: model:ir.model,name:crm_capital.model_res_partner -msgid "Partner" -msgstr "" - -#. module: crm_capital -#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital -#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital -msgid "Sales Team" -msgstr "" - -#. module: crm_capital -#: view:res.partner:crm_capital.view_res_partner_filter_capital -msgid "Salesperson" -msgstr "" - -#. module: crm_capital -#: selection:crm.lead,company_size:0 -#: selection:res.partner,company_size:0 -msgid "Small" -msgstr "" - -#. module: crm_capital -#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital -#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital -#: view:res.partner:crm_capital.view_res_partner_filter_capital -msgid "Turnover" -msgstr "" - -#. module: crm_capital -#: field:crm.lead,turnover_number:0 -#: field:res.partner,turnover_number:0 -msgid "Turnover number" -msgstr "" - -#. module: crm_capital -#: view:crm.lead:crm_capital.crm_case_form_view_leads_capital -#: view:crm.lead:crm_capital.crm_case_form_view_oppor_capital -#: field:crm.lead,turnover_range:0 -#: model:ir.model,name:crm_capital.model_crm_turnover_range -#: view:res.partner:crm_capital.view_partner_form_capital -#: field:res.partner,turnover_range:0 -msgid "Turnover range" -msgstr "" - -#. module: crm_capital -#: view:crm.turnover_range:crm_capital.crm_turnover_range_tree_view -#: model:ir.actions.act_window,name:crm_capital.crm_turnover_range_action -#: model:ir.ui.menu,name:crm_capital.menu_crm_turnover_range -msgid "Turnover ranges" -msgstr "" - diff --git a/partner_capital/i18n/es.po b/partner_capital/i18n/es.po index ea21593b1..adbfc1ccf 100644 --- a/partner_capital/i18n/es.po +++ b/partner_capital/i18n/es.po @@ -1,155 +1,133 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_capital +# * partner_capital # msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-26 15:15+0000\n" -"PO-Revision-Date: 2015-05-26 15:15+0000\n" +"POT-Creation-Date: 2015-12-16 17:27+0000\n" +"PO-Revision-Date: 2015-12-16 18:29+0100\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: \n" +"Language: es\n" +"X-Generator: Poedit 1.8.5\n" -#. module: crm_capital -#: selection:crm.lead,company_size:0 +#. module: partner_capital #: selection:res.partner,company_size:0 msgid "Big" msgstr "Grande" -#. module: crm_capital -#: view:crm.lead:crm_capital.crm_case_form_view_leads_capital -#: view:crm.lead:crm_capital.crm_case_form_view_oppor_capital -#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital -#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital -#: field:crm.lead,capital_country:0 -#: view:res.partner:crm_capital.view_partner_form_capital -#: view:res.partner:crm_capital.view_res_partner_filter_capital +#. module: partner_capital +#: view:res.partner:partner_capital.view_partner_form_capital +msgid "Capital" +msgstr "Capital" + +#. module: partner_capital +#: field:res.partner,capital_amount:0 +msgid "Capital amount" +msgstr "Capital amount" + +#. module: partner_capital +#: view:res.partner:partner_capital.view_res_partner_filter_capital #: field:res.partner,capital_country:0 msgid "Capital country" msgstr "Nacionalidad del capital" -#. module: crm_capital -#: field:crm.lead,capital_registered:0 -#: field:res.partner,capital_registered:0 -msgid "Capital registered" -msgstr "Capital social" - -#. module: crm_capital -#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital -#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital -#: field:crm.lead,company_size:0 -#: view:res.partner:crm_capital.view_res_partner_filter_capital +#. module: partner_capital +#: view:res.partner:partner_capital.view_res_partner_filter_capital #: field:res.partner,company_size:0 msgid "Company size" msgstr "Tamaño de la companía" -#. module: crm_capital -#: help:crm.lead,capital_country:0 +#. module: partner_capital #: help:res.partner,capital_country:0 -msgid "Country of origin of the capital of this company" -msgstr "País de origen del capital social de esta empresa" +msgid "Country of origin of this company's capital." +msgstr "País de origen del capital de esta empresa." -#. module: crm_capital -#: field:crm.turnover_range,create_uid:0 +#. module: partner_capital +#: field:res.partner.turnover_range,create_uid:0 msgid "Created by" msgstr "Creado por" -#. module: crm_capital -#: field:crm.turnover_range,create_date:0 +#. module: partner_capital +#: field:res.partner.turnover_range,create_date:0 msgid "Created on" msgstr "Creado en" -#. module: crm_capital -#: field:crm.turnover_range,id:0 +#. module: partner_capital +#: field:res.partner.turnover_range,id:0 msgid "ID" msgstr "ID" -#. module: crm_capital -#: field:crm.turnover_range,write_uid:0 +#. module: partner_capital +#: field:res.partner.turnover_range,write_uid:0 msgid "Last Updated by" msgstr "Última actualización por" -#. module: crm_capital -#: field:crm.turnover_range,write_date:0 +#. module: partner_capital +#: field:res.partner.turnover_range,write_date:0 msgid "Last Updated on" -msgstr "última actualización en" - -#. module: crm_capital -#: model:ir.model,name:crm_capital.model_crm_lead -msgid "Lead/Opportunity" -msgstr "Iniciativa/Oportunidad" +msgstr "Última actualización en" -#. module: crm_capital -#: selection:crm.lead,company_size:0 +#. module: partner_capital #: selection:res.partner,company_size:0 msgid "Medium" msgstr "Medio" -#. module: crm_capital -#: selection:crm.lead,company_size:0 +#. module: partner_capital #: selection:res.partner,company_size:0 msgid "Micro" msgstr "Micro" -#. module: crm_capital -#: field:crm.turnover_range,name:0 +#. module: partner_capital +#: field:res.partner.turnover_range,name:0 msgid "Name" msgstr "Nombre" -#. module: crm_capital -#: model:ir.model,name:crm_capital.model_res_partner +#. module: partner_capital +#: model:ir.model,name:partner_capital.model_res_partner msgid "Partner" msgstr "Empresa" -#. module: crm_capital -#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital -#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital -msgid "Sales Team" -msgstr "Equipo de ventas" +#. module: partner_capital +#: help:res.partner,capital_amount:0 +msgid "Publicly registered capital amount." +msgstr "Importe del capital públicamente registrado." -#. module: crm_capital -#: view:res.partner:crm_capital.view_res_partner_filter_capital +#. module: partner_capital +#: view:res.partner:partner_capital.view_res_partner_filter_capital msgid "Salesperson" msgstr "Comercial" -#. module: crm_capital -#: selection:crm.lead,company_size:0 +#. module: partner_capital #: selection:res.partner,company_size:0 msgid "Small" msgstr "Pequeño" -#. module: crm_capital -#: view:crm.lead:crm_capital.view_crm_case_leads_filter_capital -#: view:crm.lead:crm_capital.view_crm_case_opportunities_filter_capital -#: view:res.partner:crm_capital.view_res_partner_filter_capital +#. module: partner_capital +#: view:res.partner:partner_capital.view_res_partner_filter_capital msgid "Turnover" msgstr "Facturación" -#. module: crm_capital -#: field:crm.lead,turnover_number:0 -#: field:res.partner,turnover_number:0 -msgid "Turnover number" -msgstr "Número de facturación" - -#. module: crm_capital -#: view:crm.lead:crm_capital.crm_case_form_view_leads_capital -#: view:crm.lead:crm_capital.crm_case_form_view_oppor_capital -#: field:crm.lead,turnover_range:0 -#: model:ir.model,name:crm_capital.model_crm_turnover_range -#: view:res.partner:crm_capital.view_partner_form_capital -#: field:res.partner,turnover_range:0 +#. module: partner_capital +#: field:res.partner,turnover_amount:0 +msgid "Turnover amount" +msgstr "Cantidad de facturación" + +#. module: partner_capital +#: model:ir.model,name:partner_capital.model_res_partner_turnover_range +#: field:res.partner,turnover_range_id:0 msgid "Turnover range" msgstr "Rango de facturación" -#. module: crm_capital -#: view:crm.turnover_range:crm_capital.crm_turnover_range_tree_view -#: model:ir.actions.act_window,name:crm_capital.crm_turnover_range_action -#: model:ir.ui.menu,name:crm_capital.menu_crm_turnover_range +#. module: partner_capital +#: model:ir.actions.act_window,name:partner_capital.res_partner_turnover_range_action +#: model:ir.ui.menu,name:partner_capital.menu_res_partner_turnover_range +#: view:res.partner.turnover_range:partner_capital.res_partner_turnover_range_tree_view msgid "Turnover ranges" msgstr "Rangos de facturación" - diff --git a/partner_capital/models/__init__.py b/partner_capital/models/__init__.py index 2e0c5d82f..801fe329f 100644 --- a/partner_capital/models/__init__.py +++ b/partner_capital/models/__init__.py @@ -1,8 +1,10 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import crm_turnover_range -from . import crm_lead -from . import res_partner +from . import ( + res_partner_turnover_range, + res_partner, +) diff --git a/partner_capital/models/crm_lead.py b/partner_capital/models/crm_lead.py deleted file mode 100644 index 02342d728..000000000 --- a/partner_capital/models/crm_lead.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmLead(models.Model): - _inherit = 'crm.lead' - - capital_country = fields.Many2one( - 'res.country', string="Capital country", - help="Country of origin of the capital of this company") - capital_registered = fields.Integer(string="Capital registered") - turnover_range = fields.Many2one(comodel_name='crm.turnover_range') - turnover_number = fields.Integer() - company_size = fields.Selection( - string="Company size", - selection=[('micro', 'Micro'), ('small', 'Small'), - ('medium', 'Medium'), ('big', 'Big')]) - - def _lead_create_contact(self, cr, uid, lead, name, is_company, - parent_id=False, context=None): - """Propagate capital_country and capital_registered to created partner. - """ - partner_id = super(CrmLead, self)._lead_create_contact( - cr, uid, lead, name, is_company, parent_id=parent_id, - context=context) - self.pool['res.partner'].write( - cr, uid, partner_id, { - 'capital_country': lead.capital_country.id, - 'capital_registered': lead.capital_registered, - 'turnover_range': lead.turnover_range.id, - 'turnover_number': lead.turnover_number, - 'company_size': lead.company_size, - }, context=context) - return partner_id diff --git a/partner_capital/models/crm_turnover_range.py b/partner_capital/models/crm_turnover_range.py deleted file mode 100644 index b6784462e..000000000 --- a/partner_capital/models/crm_turnover_range.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmTurnoverRange(models.Model): - _name = 'crm.turnover_range' - _description = "Turnover range" - - name = fields.Char(required=True, translate=True) diff --git a/partner_capital/models/res_partner.py b/partner_capital/models/res_partner.py index b0a0df7df..dcb4adb5f 100644 --- a/partner_capital/models/res_partner.py +++ b/partner_capital/models/res_partner.py @@ -1,7 +1,9 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from openerp import models, fields @@ -9,11 +11,16 @@ class ResPartner(models.Model): _inherit = 'res.partner' capital_country = fields.Many2one( - 'res.country', string="Capital country", - help="Country of origin of the capital of this company") - capital_registered = fields.Integer(string="Capital registered") - turnover_range = fields.Many2one(comodel_name='crm.turnover_range') - turnover_number = fields.Integer() + 'res.country', + "Capital country", + help="Country of origin of this company's capital.") + capital_amount = fields.Float( + "Capital amount", + help="Publicly registered capital amount.") + turnover_range_id = fields.Many2one( + 'res.partner.turnover_range', + "Turnover range") + turnover_amount = fields.Float() company_size = fields.Selection( string="Company size", selection=[('micro', 'Micro'), ('small', 'Small'), diff --git a/partner_capital/models/res_partner_turnover_range.py b/partner_capital/models/res_partner_turnover_range.py new file mode 100644 index 000000000..4fafbc852 --- /dev/null +++ b/partner_capital/models/res_partner_turnover_range.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, fields + + +class ResPartnerTurnoverRange(models.Model): + _name = 'res.partner.turnover_range' + _description = "Turnover range" + + name = fields.Char(required=True, translate=True) diff --git a/partner_capital/security/ir.model.access.csv b/partner_capital/security/ir.model.access.csv index ff06a904d..0a5d1bb4e 100644 --- a/partner_capital/security/ir.model.access.csv +++ b/partner_capital/security/ir.model.access.csv @@ -1,5 +1,5 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_crm_turnover_public","crm_turnover_range group_public","model_crm_turnover_range","base.group_public",1,0,0,0 -"access_crm_turnover_portal","crm_turnover_range group_portal","model_crm_turnover_range","base.group_portal",1,0,0,0 -"access_crm_turnover_group_partner_manager","crm_turnover_range group_partner_manager","model_crm_turnover_range","base.group_partner_manager",1,1,1,1 -"access_crm_turnover_group_user","crm_turnover_range group_user","model_crm_turnover_range","base.group_user",1,0,0,0 +"access_crm_turnover_public","res_partner_turnover_range group_public","model_res_partner_turnover_range","base.group_public",1,0,0,0 +"access_crm_turnover_portal","res_partner_turnover_range group_portal","model_res_partner_turnover_range","base.group_portal",1,0,0,0 +"access_crm_turnover_group_partner_manager","res_partner_turnover_range group_partner_manager","model_res_partner_turnover_range","base.group_partner_manager",1,1,1,1 +"access_crm_turnover_group_user","res_partner_turnover_range group_user","model_res_partner_turnover_range","base.group_user",1,0,0,0 diff --git a/partner_capital/views/crm_lead_view.xml b/partner_capital/views/crm_lead_view.xml deleted file mode 100644 index f5cec0cfb..000000000 --- a/partner_capital/views/crm_lead_view.xml +++ /dev/null @@ -1,78 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record model="ir.ui.view" id="crm_case_form_view_leads"> - <field name="name">Add capital fields</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> - <field name="arch" type="xml"> - <field name="partner_id" position="before"> - <field name="capital_country" placeholder="Capital country" - options='{"no_open": True}'/> - <field name="capital_registered"/> - <field name="turnover_range" placeholder="Turnover range" - options='{"no_open": True}'/> - <field name="turnover_number"/> - <field name="company_size"/> - </field> - </field> -</record> - -<record model="ir.ui.view" id="view_crm_case_leads_filter"> - <field name="name">Add capital fields for grouping</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> - <field name="arch" type="xml"> - <filter string="Sales Team" position="after"> - <filter string="Capital country" - domain="[]" - context="{'group_by': 'capital_country'}"/> - <filter string="Turnover" - domain="[]" - context="{'group_by': 'turnover_number'}"/> - <filter string="Company size" - domain="[]" - context="{'group_by': 'company_size'}"/> - </filter> - </field> -</record> - -<record model="ir.ui.view" id="crm_case_form_view_oppor"> - <field name="name">Add capital fields</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> - <field name="arch" type="xml"> - <field name="partner_id" position="before"> - <field name="capital_country" placeholder="Capital country" - options='{"no_open": True}'/> - <field name="capital_registered"/> - <field name="turnover_range" placeholder="Turnover range" - options='{"no_open": True}'/> - <field name="turnover_number"/> - <field name="company_size"/> - </field> - </field> -</record> - -<record model="ir.ui.view" id="view_crm_case_opportunities_filter"> - <field name="name">Add capital fields for grouping</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> - <field name="arch" type="xml"> - <filter string="Sales Team" position="after"> - <filter string="Capital country" - domain="[]" - context="{'group_by': 'capital_country'}"/> - <filter string="Turnover" - domain="[]" - context="{'group_by': 'turnover_number'}"/> - <filter string="Company size" - domain="[]" - context="{'group_by': 'company_size'}"/> - </filter> - </field> -</record> - -</data> -</openerp> \ No newline at end of file diff --git a/partner_capital/views/crm_turnover_range_view.xml b/partner_capital/views/crm_turnover_range_view.xml deleted file mode 100644 index 1f2461ce0..000000000 --- a/partner_capital/views/crm_turnover_range_view.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record id="crm_turnover_range_action" model="ir.actions.act_window"> - <field name="name">Turnover ranges</field> - <field name="res_model">crm.turnover_range</field> - <field name="view_type">form</field> - <field name="view_mode">tree</field> -</record> - -<record id="crm_turnover_range_tree_view" model="ir.ui.view"> - <field name="name">CRM Turnover range tree</field> - <field name="model">crm.turnover_range</field> - <field name="arch" type="xml"> - <tree string="Turnover ranges" editable="top"> - <field name="name"/> - </tree> - </field> -</record> - -<menuitem action="crm_turnover_range_action" - id="menu_crm_turnover_range" - name="Turnover ranges" - parent="base.menu_crm_config_lead" - sequence="5"/> - -</data> -</openerp> \ No newline at end of file diff --git a/partner_capital/views/res_partner_turnover_range_view.xml b/partner_capital/views/res_partner_turnover_range_view.xml new file mode 100644 index 000000000..ad9d32622 --- /dev/null +++ b/partner_capital/views/res_partner_turnover_range_view.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- © 2015 Antiun Ingeniería S.L. - Antonio Espinosa + © 2015 Antiun Ingeniería S.L. - Jairo Llopis + License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). --> + +<openerp> +<data> + +<record id="res_partner_turnover_range_action" model="ir.actions.act_window"> + <field name="name">Turnover ranges</field> + <field name="res_model">res.partner.turnover_range</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> +</record> + +<record id="res_partner_turnover_range_tree_view" model="ir.ui.view"> + <field name="name">CRM Turnover range tree</field> + <field name="model">res.partner.turnover_range</field> + <field name="arch" type="xml"> + <tree string="Turnover ranges" editable="top"> + <field name="name"/> + </tree> + </field> +</record> + +<menuitem action="res_partner_turnover_range_action" + id="menu_res_partner_turnover_range" + name="Turnover ranges" + parent="base.menu_config_address_book" + sequence="5"/> + +</data> +</openerp> diff --git a/partner_capital/views/res_partner_view.xml b/partner_capital/views/res_partner_view.xml index b2ee2eaa6..ab192466f 100644 --- a/partner_capital/views/res_partner_view.xml +++ b/partner_capital/views/res_partner_view.xml @@ -1,4 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- © 2015 Antiun Ingeniería S.L. - Antonio Espinosa + © 2015 Antiun Ingeniería S.L. - Jairo Llopis + License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). --> + <openerp> <data> @@ -7,20 +11,20 @@ <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="capital_country" placeholder="Capital country" - attrs="{'invisible': [('is_company', '=', False)]}" - options='{"no_open": True}'/> - <field name="capital_registered" - attrs="{'invisible': [('is_company', '=', False)]}"/> - <field name="turnover_range" placeholder="Turnover range" - attrs="{'invisible': [('is_company', '=', False)]}" - options='{"no_open": True}'/> - <field name="turnover_number" - attrs="{'invisible': [('is_company', '=', False)]}"/> - <field name="company_size" - attrs="{'invisible': [('is_company', '=', False)]}"/> - </field> + <xpath expr="//page[@name='sales_purchases']" position="inside"> + <group name="captial" string="Capital"> + <field name="capital_country" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="capital_amount" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="turnover_range_id" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="turnover_amount" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="company_size" + attrs="{'invisible': [('is_company', '=', False)]}"/> + </group> + </xpath> </field> </record> @@ -44,4 +48,4 @@ </record> </data> -</openerp> \ No newline at end of file +</openerp> From 045e8fc6218c958663f9a37443d438d13ab88d43 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Thu, 17 Dec 2015 16:53:59 +0100 Subject: [PATCH 13/58] Style corrections. --- partner_capital/README.rst | 8 ++++---- partner_capital/__init__.py | 3 +-- partner_capital/__openerp__.py | 3 +-- partner_capital/models/__init__.py | 3 +-- partner_capital/models/res_partner.py | 10 ++++++---- partner_capital/models/res_partner_turnover_range.py | 3 +-- 6 files changed, 14 insertions(+), 16 deletions(-) diff --git a/partner_capital/README.rst b/partner_capital/README.rst index a1590a66a..d5dc5c71a 100644 --- a/partner_capital/README.rst +++ b/partner_capital/README.rst @@ -2,12 +2,12 @@ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -=============== +================ Partners Capital -=============== +================ -This module extends the functionality of partners to support setting capital -country, registered capital amount and turnover. +This module extends the functionality of partners to support setting the +country of origin of capital, registered capital amount and turnover. By capital country we mean country of origin of the capital of the company. diff --git a/partner_capital/__init__.py b/partner_capital/__init__.py index 013a9f613..8e6d7e45a 100644 --- a/partner_capital/__init__.py +++ b/partner_capital/__init__.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa # © 2015 Antiun Ingeniería S.L. - Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/partner_capital/__openerp__.py b/partner_capital/__openerp__.py index 22a1e6b49..76ab06a28 100644 --- a/partner_capital/__openerp__.py +++ b/partner_capital/__openerp__.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa # © 2015 Antiun Ingeniería S.L. - Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/partner_capital/models/__init__.py b/partner_capital/models/__init__.py index 801fe329f..c2cd4625c 100644 --- a/partner_capital/models/__init__.py +++ b/partner_capital/models/__init__.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa # © 2015 Antiun Ingeniería S.L. - Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/partner_capital/models/res_partner.py b/partner_capital/models/res_partner.py index dcb4adb5f..a32973a69 100644 --- a/partner_capital/models/res_partner.py +++ b/partner_capital/models/res_partner.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa # © 2015 Antiun Ingeniería S.L. - Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). @@ -16,11 +15,14 @@ class ResPartner(models.Model): help="Country of origin of this company's capital.") capital_amount = fields.Float( "Capital amount", + oldname="capital_amount", help="Publicly registered capital amount.") turnover_range_id = fields.Many2one( 'res.partner.turnover_range', - "Turnover range") - turnover_amount = fields.Float() + "Turnover range", + oldname="turnover_range") + turnover_amount = fields.Float( + oldname="turnover_number") company_size = fields.Selection( string="Company size", selection=[('micro', 'Micro'), ('small', 'Small'), diff --git a/partner_capital/models/res_partner_turnover_range.py b/partner_capital/models/res_partner_turnover_range.py index 4fafbc852..25712489d 100644 --- a/partner_capital/models/res_partner_turnover_range.py +++ b/partner_capital/models/res_partner_turnover_range.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa # © 2015 Antiun Ingeniería S.L. - Jairo Llopis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). From 109082ae037b67137d00c74d5ac1a036fb817d14 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Wed, 25 Mar 2015 10:08:35 +0100 Subject: [PATCH 14/58] [ADD] crm_employees addon --- crm_employees/README.rst | 13 +++ crm_employees/__init__.py | 6 ++ crm_employees/__openerp__.py | 39 +++++++ crm_employees/i18n/crm_employees.pot | 97 ++++++++++++++++++ crm_employees/i18n/es.po | 97 ++++++++++++++++++ crm_employees/models/__init__.py | 8 ++ crm_employees/models/crm_employees_range.py | 20 ++++ crm_employees/models/crm_lead.py | 26 +++++ crm_employees/models/res_partner.py | 12 +++ crm_employees/security/ir.model.access.csv | 5 + crm_employees/static/description/icon.png | Bin 0 -> 18713 bytes .../views/crm_employees_range_view.xml | 30 ++++++ crm_employees/views/crm_lead_view.xml | 30 ++++++ crm_employees/views/res_partner_view.xml | 20 ++++ 14 files changed, 403 insertions(+) create mode 100644 crm_employees/README.rst create mode 100644 crm_employees/__init__.py create mode 100644 crm_employees/__openerp__.py create mode 100644 crm_employees/i18n/crm_employees.pot create mode 100644 crm_employees/i18n/es.po create mode 100644 crm_employees/models/__init__.py create mode 100644 crm_employees/models/crm_employees_range.py create mode 100644 crm_employees/models/crm_lead.py create mode 100644 crm_employees/models/res_partner.py create mode 100644 crm_employees/security/ir.model.access.csv create mode 100644 crm_employees/static/description/icon.png create mode 100644 crm_employees/views/crm_employees_range_view.xml create mode 100644 crm_employees/views/crm_lead_view.xml create mode 100644 crm_employees/views/res_partner_view.xml diff --git a/crm_employees/README.rst b/crm_employees/README.rst new file mode 100644 index 000000000..51ffa3ece --- /dev/null +++ b/crm_employees/README.rst @@ -0,0 +1,13 @@ +Employees in CRM +================ + +This module allows to set employees amount and employees ranges for companies +in the CRM main objects (lead, opportunity, partner), and propagate them through +the workflow. + +Credits +======= + +Contributors +------------ +* Antonio Espinosa <antonioea@antiun.com> diff --git a/crm_employees/__init__.py b/crm_employees/__init__.py new file mode 100644 index 000000000..054c8853d --- /dev/null +++ b/crm_employees/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import models diff --git a/crm_employees/__openerp__.py b/crm_employees/__openerp__.py new file mode 100644 index 000000000..fe43bfcce --- /dev/null +++ b/crm_employees/__openerp__.py @@ -0,0 +1,39 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Odoo Source Management Solution +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + 'name': 'Employees in CRM', + 'version': '1.0', + 'category': 'Customer Relationship Management', + 'author': 'Antiun Ingeniería S.L.', + 'website': 'http://www.antiun.com', + 'depends': [ + 'crm', + ], + 'data': [ + 'views/crm_employees_range_view.xml', + 'views/crm_lead_view.xml', + 'views/res_partner_view.xml', + 'security/ir.model.access.csv', + ], + "installable": True, +} diff --git a/crm_employees/i18n/crm_employees.pot b/crm_employees/i18n/crm_employees.pot new file mode 100644 index 000000000..198769332 --- /dev/null +++ b/crm_employees/i18n/crm_employees.pot @@ -0,0 +1,97 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_employees +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-24 11:53+0000\n" +"PO-Revision-Date: 2015-03-24 11:53+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_employees +#: field:crm.employees_range,children:0 +msgid "Children" +msgstr "" + +#. module: crm_employees +#: field:crm.employees_range,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: crm_employees +#: field:crm.employees_range,create_date:0 +msgid "Created on" +msgstr "" + +#. module: crm_employees +#: field:crm.lead,employees_number:0 +#: field:res.partner,employees_number:0 +msgid "Employees number" +msgstr "" + +#. module: crm_employees +#: field:crm.lead,employees_range:0 +#: model:ir.model,name:crm_employees.model_crm_employees_range +#: field:res.partner,employees_range:0 +msgid "Employees range" +msgstr "" + +#. module: crm_employees +#: view:crm.employees_range:crm_employees.crm_employees_range_tree_view +#: model:ir.actions.act_window,name:crm_employees.crm_employees_range_action +#: model:ir.ui.menu,name:crm_employees.menu_crm_employees_range +msgid "Employees ranges" +msgstr "" + +#. module: crm_employees +#: field:crm.employees_range,id:0 +msgid "ID" +msgstr "" + +#. module: crm_employees +#: field:crm.employees_range,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: crm_employees +#: field:crm.employees_range,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: crm_employees +#: model:ir.model,name:crm_employees.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" + +#. module: crm_employees +#: field:crm.employees_range,name:0 +msgid "Name" +msgstr "" + +#. module: crm_employees +#: field:crm.employees_range,parent_left:0 +msgid "Parent Left" +msgstr "" + +#. module: crm_employees +#: field:crm.employees_range,parent_right:0 +msgid "Parent Right" +msgstr "" + +#. module: crm_employees +#: field:crm.employees_range,parent_id:0 +msgid "Parent id" +msgstr "" + +#. module: crm_employees +#: model:ir.model,name:crm_employees.model_res_partner +msgid "Partner" +msgstr "" + diff --git a/crm_employees/i18n/es.po b/crm_employees/i18n/es.po new file mode 100644 index 000000000..77bbddff3 --- /dev/null +++ b/crm_employees/i18n/es.po @@ -0,0 +1,97 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_employees +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-24 11:53+0000\n" +"PO-Revision-Date: 2015-03-24 11:53+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_employees +#: field:crm.employees_range,children:0 +msgid "Children" +msgstr "Hijos" + +#. module: crm_employees +#: field:crm.employees_range,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: crm_employees +#: field:crm.employees_range,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: crm_employees +#: field:crm.lead,employees_number:0 +#: field:res.partner,employees_number:0 +msgid "Employees number" +msgstr "Número de empleados" + +#. module: crm_employees +#: field:crm.lead,employees_range:0 +#: model:ir.model,name:crm_employees.model_crm_employees_range +#: field:res.partner,employees_range:0 +msgid "Employees range" +msgstr "Rango de empleados" + +#. module: crm_employees +#: view:crm.employees_range:crm_employees.crm_employees_range_tree_view +#: model:ir.actions.act_window,name:crm_employees.crm_employees_range_action +#: model:ir.ui.menu,name:crm_employees.menu_crm_employees_range +msgid "Employees ranges" +msgstr "Rangos de empleados" + +#. module: crm_employees +#: field:crm.employees_range,id:0 +msgid "ID" +msgstr "ID" + +#. module: crm_employees +#: field:crm.employees_range,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: crm_employees +#: field:crm.employees_range,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: crm_employees +#: model:ir.model,name:crm_employees.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Iniciativa/Oportunidad" + +#. module: crm_employees +#: field:crm.employees_range,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: crm_employees +#: field:crm.employees_range,parent_left:0 +msgid "Parent Left" +msgstr "Padre izquierdo" + +#. module: crm_employees +#: field:crm.employees_range,parent_right:0 +msgid "Parent Right" +msgstr "Padre derecho" + +#. module: crm_employees +#: field:crm.employees_range,parent_id:0 +msgid "Parent id" +msgstr "ID del padre" + +#. module: crm_employees +#: model:ir.model,name:crm_employees.model_res_partner +msgid "Partner" +msgstr "Empresa" + diff --git a/crm_employees/models/__init__.py b/crm_employees/models/__init__.py new file mode 100644 index 000000000..60471a1ff --- /dev/null +++ b/crm_employees/models/__init__.py @@ -0,0 +1,8 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import crm_employees_range +from . import crm_lead +from . import res_partner diff --git a/crm_employees/models/crm_employees_range.py b/crm_employees/models/crm_employees_range.py new file mode 100644 index 000000000..5610c1dd7 --- /dev/null +++ b/crm_employees/models/crm_employees_range.py @@ -0,0 +1,20 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmEmployeesRange(models.Model): + _name = 'crm.employees_range' + _order = "parent_left" + _parent_order = "name" + _parent_store = True + _description = "Employees range" + + name = fields.Char(required=True) + parent_id = fields.Many2one(comodel_name='crm.employees_range') + children = fields.One2many(comodel_name='crm.employees_range', + inverse_name='parent_id') + parent_left = fields.Integer('Parent Left', select=True) + parent_right = fields.Integer('Parent Right', select=True) diff --git a/crm_employees/models/crm_lead.py b/crm_employees/models/crm_lead.py new file mode 100644 index 000000000..60e9f7fce --- /dev/null +++ b/crm_employees/models/crm_lead.py @@ -0,0 +1,26 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmLead(models.Model): + _inherit = 'crm.lead' + + employees_range = fields.Many2one(comodel_name='crm.employees_range') + employees_number = fields.Integer() + + def _lead_create_contact(self, cr, uid, lead, name, is_company, + parent_id=False, context=None): + """Propagate employees_range and employees_number to created partner. + """ + partner_id = super(CrmLead, self)._lead_create_contact( + cr, uid, lead, name, is_company, parent_id=parent_id, + context=context) + self.pool['res.partner'].write( + cr, uid, partner_id, { + 'employees_range': lead.employees_range.id, + 'employees_number': lead.employees_number + }, context=context) + return partner_id diff --git a/crm_employees/models/res_partner.py b/crm_employees/models/res_partner.py new file mode 100644 index 000000000..53b3f5e24 --- /dev/null +++ b/crm_employees/models/res_partner.py @@ -0,0 +1,12 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + employees_range = fields.Many2one(comodel_name='crm.employees_range') + employees_number = fields.Integer() diff --git a/crm_employees/security/ir.model.access.csv b/crm_employees/security/ir.model.access.csv new file mode 100644 index 000000000..01adc1025 --- /dev/null +++ b/crm_employees/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_crm_employees_public","crm_employees_range group_public","model_crm_employees_range","base.group_public",1,0,0,0 +"access_crm_employees_portal","crm_employees_range group_portal","model_crm_employees_range","base.group_portal",1,0,0,0 +"access_crm_employees_group_partner_manager","crm_employees_range group_partner_manager","model_crm_employees_range","base.group_partner_manager",1,1,1,1 +"access_crm_employees_group_user","crm_employees_range group_user","model_crm_employees_range","base.group_user",1,0,0,0 diff --git a/crm_employees/static/description/icon.png b/crm_employees/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..64933c90c9d7e429ceb2aa26570cd0846c81d174 GIT binary patch literal 18713 zcmV*aKvlnqP)<h;3K|Lk000e1NJLTq004jh004jp1^@s6!#-il00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-vbvAFgQ-IJh1=(AOJ~3 zK~#9!?7exITvvJL|2gO0TYK+&w|1#zNw$P6O9E^l#PJFS+w4h5h6#a)fSoXeWD-J{ zEEAF+giPd+2!}9afCLAO0b@rt*fKWW+OjQcvG%sqQg2eP)wSI1ob&tR-m0!@$!zvu zGc%>9A9Z(C*K*(e`+nc|2>vg<8DqpPx7;EC)*O0P92p-M00-{A!~A0z^}K(mjQv;N zy*In$^r>`EF1i2drkiH~%xZ)<5<T_L({&L4$4lBnZ2#PLv3m7tapcGmA-}(i3wC#z zE0R03IP(0$y7lalZ1&N;J<e2NnJJc5iBfsBnJX+ah4LbbrDj<wr|^8=2<vcJ^4a(N z+ZXOO#)yLl587+jt~K}EbC0>^nrqbmQ-GhbRe$$`ACNQ6EfQemu|sClo;%bJ6ZHRj zW^beO?13I@dTJ>}zaO`>TDX2cuD?vXUaxV>O|}~l7K;RPMZEkRLAi`7dsxzt$!5`x z!*oO9_y5cN_kL=@`;kHj{r?o;MSQ<zHQe%{?cydIK6~FTS-t1}JM@R9dESftkKg@X zTifudUNbwpOt`@+S#<l2@2{flE!A$hS9o4ddI73XBFN9-&gOBaXDR241lreu33Z5# zaV#Se38WOlkrG>@8f=jaEeqcE#@~GPyWV-cFfoyQ*YE%Sqi6Q)$-mr{;N_|SV*B>( zV$Gpv1;CN<ak09q%Ut=r9Y!4ChhEI>|Mu0+wwdWgGGAC}m4bdNaQlrHtT3Lp*tl+& zaQ%$%eRQFOmoMPW=5c59l;=u>+6zO3QBtCkw!pCjmMsthBM?R#v@z8vZwY}T1nF#A z*~3rTT_5=iUiI!@rM0P<{M_6#k3Ray4exr_yH4!fxzl>Nh6DTMAna}1w#jwt)`{-1 zQL*y59<%9Lw7B`^=NI(jPuQQ|_e^_wD!<4sl~>}qtF1t-HeRq&Jn-mZ<GLNv50l1o z2}&jW{2YG1fSWJk6^bbBhoO;LSpuE1g?1cCOG+4#v54iXjm9XA(h6hdBZxKzWk3qB zg}@*XT3cy@o;h+vmP<uUQ!`7JEPh3?aM4?Vzq$JAt0kcRZ}tGf7{e{M+#=-ncgfBR z)(G)5G(S77uROWqc`wYHZoeb-rsJnNv!&8vJM@>!lG`r=zn?H%Y5Z`pcD+tJ3@lOh z2+AeA{2bog9ObzpUdcl%t+d2wOBx&t?N~zDmJ}c&AtNvvZH&>{V2qB0ADg%~U@(9{ zndlykj4zzV77|Mc63G;~sRFXI*=+gyPn-UAYr@v%mgMm8@a_Hm{co$e*5?0Y4<NR0 z-!1^2eKvC4Z;>GGf-90cv=G9?7vLPr{=HlOsbS63WOt_EFSGq%h4lS?5riw*dH*u) z1%3ElyQM-w*(WTP@QMZ8xdP?6GC`@VmDXC>+Thp%$3Zz#nC6TCAv8uB48~NfT48kb zvq2lGZz>YCiG{A?-y5SbLPnNiBu0P{AdEz55W=8TNZ6c3j65x7M#rSTa-|LeA1UQV zpaq!TxpSv{Ifj9sS^>6i-!6AODC94`&TyZBZz1%}H{Vnz+#L)4=2JU%v~^78d!1r& zx#I<^Y+v=8&|Asldzaw(-NtvDtRO(S9zm&$Uy7}|<l&dgI@CrPOBiiSfny7kuqCOi z&;rZE($m_YjYjJ*5@zhaqyHk?u4<x)@6)DgnmYc*2#qlkfvnoC5%Xpo{eAp>7@{&s zY+&Z(2~*g#QKpg!ENLyj{r20}y!EYbeYCBu?PZy7{lp4z<Bd1kU47fk%{O1I0DZ^T z>+j#Wb7$h&-Mc%yQgP8zQp=ORw@SD{KYqB<Jic$S@PkeQFC{!5U3T${CEP-hpjg85 zT*4sK3Zs<}#z+fcTLMQ2lgtP$u#FMIM7C?RR+zBHdMh}Lu2`}LB&I6(SkR)z>NQkK zi8}2y^YKxbd0|(fp4c-ez*2@#L>IF#_#DN#f^5iSR3?+L+S=MS0grCpyxIKRE5NpG z+pHZsc7$*T03ZI?U-SurWnrLJDP>lNM)%)#=e;X@&+T*PW;+*Un`CA>Pcfe-D3);N z3i!n$f$Nz-E3GYQv}J*1W2C?&EMXG1Fv3_mGC5%|#+XP@$|z!QUKOCwU?iB>XB!c@ z?TW>k8nK!Mfmk9i=Y(aAiB+N+uf)8D7#Te;CQ>pXqQ|H(MA1X(&@twwr$uvflgeeY zRw|X+0w9D?#uyQY!k<3{*uH(cy!qyv)qnkyKe;ep3g4G6mN$=#4zCD;uqy~c>4zaD z*QHn}P%4%<R48y!Ym+XIO{m$)Swmw+2+J165rRZUXoD1JjE?M6qo`C^T31{)#?*+g zB6wlIh)5}7W2~lG#_0MC*VLo4rWy`F$QmJ6+<cwzb*v`wW2&wqehnFg2?eOY$FwvP z?0<%tGiT`N=@Fji;W*AlAO*NF^!)Ru0Nb{0vu?imX7%Ae{%==|O_y#T9UX5xb9S6! zu|%m{#t#Fdv{4eYZ3)u0BSDENtz}nhldW_pq?0hA(x44mhf%DRx`LQtD%NPgAW)bZ z!!vb0x>ksFlC5*%mFJo_dsE}njjk_(BIVLmDH~**?8Sc~;;>TjF7eB0G+IbZsL{C; zl4<5fhD~|RYFR86u`H|qv!DI!@(+ISg9lfyUM+s^LO|^H)yF>evCffv@qZpXa;$Ox z!6R;aQ`R;{V_`(rv4s%A0%L&?mcbANOqNUdRsuf=j1<HcD<dlw8e?MXuUzRG6Bl*P z`#e?DIkprFPv{7&5%Y1}7*X{Y$a#-pv^nonR)i~SJVfM3YJ_j*HA4eh>uMe_dvb_U zsVp<elujfPncm(-7Xb%fj)|cBaUVG2iyNjUrxzVQKIr##HYY5JB`_93NR1IH^ig3* z7=}iv0Hk1Ag#-eSkwq(^Q9@yaMw$4+n%K%roX81NP1eMM_<OF!*M2WCB8mwTfr!mr zi#Xel%R8kb#nN%cuj}+q)?FDL;{s6(Snvi!6c~(&ib)0NAjHsyckDTe`MmHvKeTO| zbUOJufX$mX>z_9T5Ic74&;aE?t<4uoq=dkPMuxtR2}6tuF`<fGI2f(L2y((=EC}!< z2+KlgMa6y$CQjBsAYvI;Ot!`?3nD?*1nIgmF8)WHMa)Nv=rt<O9C;a2{lM}Z9TIiV zTfI-nD6i0ZK@JgRfX2vbd8q}2L4e7%qV^tVZfZ&!Od{|DrlzKXmuoNJ$4&xs2|J5X zXbHxIXarJ3wUHJTmuL`CZcYX`1GoZGwuSLREK9_RUX73qXc>6{u`nw)v73&S!_=no zb%|R|Ac(D9i;7r5==yk}sYw=vtlp;tKP>1}AWc}1gBW8_0<=<ui6mBG*o+SjO5c*@ zp<~By`)_~tXTJ~dfe(D(=Q0EcfaZqGTsoD+^*w5H^r$w{2&JkClNOK?f?=g88G~ip zv1P|dim0jDMMa+TuHRH%R?kb?)Oy}ZGA7OivxN~LL{)fNoAU}^7>PlmVjnUu%z3a# z8(p=2Q%zRSjXss?MHvV!fgz8Xn53(-Yv!$Qf4e&{F!09Mo2r*v1MWvDfDw(`A_Zt_ z7|&(W6qOVpu&UCKNWj>3Tp=04AjBdBr746O;aH#}msv4m!#N52ya07<yK=z=H}e-; zRBAXwHNIEC9$n|$>(j)@fy9t*%_Yzkh*v~eVr@BDb@|NaE%Tm7SCv2;P*UP+gyRKf z^{Q1p>(;H?wr<_JZ$9?eW7o$px&3qH0e<UOqW_y3vZpiY6i8u3W@V~w-x!V18ni}O z0xW}t0BJF+6<Br@E~*zx)VXf6piZx1vYK<Od>+Zubw5{<JyR#~d7)`)l|`HzKH~ed z0V8F7yst$Es|7}+Bs#_(jL~QmDhxq%lYi<N&WwzjiOC5soleu%*7jzAwQJX^pSKVI zKwn?aTuV~}Dntk=qomK6_yS2Zn$YOD%@#FI5QZt=LkkNjWL40Wh+Z$-sI^*=lvxPe z#L#Z#!q-Y=A)04&)Dtl0sT!i3(#+%d)t9V1ucj_RseK<}{`+e6ph3r_tu|2}pqm;A zjt?+3GK}l_vQ#QzS=PlsQV5~9ZQEx3+$g|!OqM)5J~~q<7R}O*RuP7QNmvp`N^B{y zrN9yr+lmq@DI;_&Y2YjnSTYiD#f`?2kHs0`1G*lP6AS$ILP*!tv}(`E-WODlrm8&i z;ii&ah>8?Nd?};^t?Mj*9xc?=)fs|nDA92#8Y+cOCC~<@P7YBjyTUD(ky7^m^FRM{ zKfrt6`(E*LqX1o9T?XL3`@SEPT`%lwZ>H#Lrh||nx6Em`Og;<|LLjA8z4TfL+HHps zrSSl1+g0eczN8ZfDHgVKYRbg(fdJIi_@*|mtl;$(p;W;e$vGLEs7WI#kJGw7$usk= zA8Hgau7FHUUSf#a%@rR%eSDDO+?*_x%O;gdWtS~mwlT&7em+9L_U+qcHk)+-tW4%? zISBNbatYV-%#vJ|O>M1gY-y(55}eG>a3(*C@`I{lP5@_=p^QN|7N$a{s9aP8&r{je z$VxBxxu)E!$pNUkXoFET*u8Bb92=2vAmJbqHo}r1M4jO45Wbosr?!5m+%*p#$yhP; z{O=8fMqx-(ICO;k^px=Z2oTC<vlYp|Y^nkKhX~)k`R1ELzy)NhlYK*TP9^#`tVdqB zPU;}QEfvsZA40_|XJ>il<S`CUoT9CL5h9r)5!Y;UDx}@Aq7Wcz{qKS%e4QX_gfFP` z59T~dV@%uzb|lh?K9&hJ!Vd}O=Fp)VJyNC-4QZ^51GbIP3RQHYzZc>>K%<WP7B$s| zh~CtEH4tSq(!{xtA7C=w_)kB>^x3nbv!~aDK|nH@yf|tM3KKWi%*#>%j4_rFA_Nkj z`R||pZ7IZWxt_NsUn&|c&`vfhnwy(xYHUDC!Q9L&&mB2RlV89;^&GM-z_BwBMxSq1 zX+)(=tU>7JL7sYnQc23hybGQW*fp7Wj3H>HFirxQPC&kZJAMSuL@zG|SnVsYT6?0r zV=j+3e1u>UECE@WCb?u))XtqNAuL(nKol{=94C4evVp0=HDk016(<;0pim8IMCm#5 z!y~5L-!Dt0BvQyVAOHBr7ybF4|M{txOJnF91=zWBrzM0?xBid+u|AP%`a-@`-h5(o zgkq>nTYH=6?rf(qn;~i0Bohhjq)l^c8=-_J4<A4SjSY>ILqniK5R%C-L?_d6dsft! zRtqxzO4m-tT^mg;P*f9(1%x`1u-%YF&lZ>+JA?w7UjGIbZ@7q_Wy@*l=pfhBNGhEI zB);cSEX*-AewN`QhZ+3deVl&wY1-{1$>kRiOwUp28kt&dfUXgE9KI^qf~kU)kry#a z6G|B~gicZ{l_G|aZFR0+zy1Q?)YVsC{qlo?pLpU4d&`zB;X^xjUN$l@bJw%SPc%I{ zJnS|#wWYG@jF>(<860@#Y3JCH<L1Dg$LgM_qkA!^fW^y}6B_V>5Ze;80i%IWkjh|N zc9bAV5nKO)E?n&P1rjZE{Ii)a5o7nO0HF*rVS^=@JGqa54wk*|CN9{zl|?I7(ALpT zHj~9kCa^6VA!VE&L}K$?k5cg$n0(8P9Nx2+hj#oEXAVC_`_gqN*T=X%#*Xq9G&SAH z1sH}g7ztWO;FtjvhA<2<K;hVP6z2*en@NXFjZJo2Tib=e_g<F0fGu0Lgm-@Z&P7Ax zlmGtM-u+ESN6(ge+B!2cXU-fMpUZ#5c+*!MI&$o$V@D6`u8t;|PB$W?P1!9o=a$K2 zGiW=>T-n2t76wQm88aGJK*qKR{4fHG&WZOmF~0_mt(1$kj~B`y(+PCG$aMZBJ-_@L zY<|Plth!(=Ep2Vswv8VKluKo%CMWSd9~F@_agr%=jg90QbF{X%)70Ed-_oUAv}H5* ze*HEc|JzT~)6);>1lskZ7=o-r{6uXcDxfm<5yq-2g+K)%##w^*%(LVtCq#QkdmyE> zJ<r=v`%zwMg2*``;0Js5{L!iL@!pAviE?v8V`k#ib6?wfN$>kV{_%g9dEfiqmnwMS zP32I_&~uH8BM=T&E<<ZWgq>?7mLub`OJfU|Hky*rG&l~%^`lz*oV-I*1JKPUcngvP zqZBfm!5<!{pfp?l>{D$1#n;o*(}V3e%*@U(c5;ZZW5=01dYtK#rznq(6Hd<(7=zW? zOnT`edM{qjx-DB-wdMkH*(}NBOL^CCe~7LnOS$vIH__G8k4V^<AdKIKtO1!#9lmU8 zDhQ2;%F{4FHKq`gN0=QQGyckz>Cur<hK7a?1Ke`UE$}j62h}OShi>}A_8&a?%o~+f zG&ojz__?Fsd-$PU@3`}u(fx%&FqllG+}5_v)Y<7NolIneG74i<gboWETS`RSU@^jq zdIlQil%mVFF-9YW731sFwSE`2;3}QHDk)PbL^gwWdWceIH<y3n57~U_r8GA;lP?uH zv2PzI9(j!6haP3_i6`;&BnBHJS}>L!J@Lus$Un7<liz?J02lxMpK$HF-o=t7OK@z5 zH@^KHSi<7=-~Da+maiko7b0M2VX7(=XlnsHHJ`(1W$=u_0Va<RirwkdQ$M)xzR%wN zt#5q+;ANQvo;-1^b#7*|xv8xKF+IgaU2WfgIJ(OMR5(>UnQ3VpZSP4eKRa7A(vlGg zLeGO}6>F(ub67UBN=G&MITV~I(W+F3Rliu}V#OAw45X9j@o9>UEnN9$A7{&JE+d!C zGCDTKp+_F&xo`dl6F>L?u9bk!HlPh5B$n-fEf6ARBS}d*;b6)hyZ`#nIQqbYy!SJo zV*UE{2;lNJzln*_VSez}|DCRt>j}=zLba7`s_2QX<|n4w-%xSO*dl6khXx_0XUyhJ zn|SLDH@xYuKJ}?J-@EU=zrE&~YewTz@FgXQ)cN90Cp?o)h^f|=973XdOX1D`__2@w z@*nJaAPMlbd%iZAN;oG|NgK<uj4dGPIHYZxq;1E2!HA?GO!Q@pMjDt31GEqbDdQGx zeMhZY-c<;nwTYHC7+WHhVa6Ng(m(kFHeYrrxono9Q>S?5uDdz-cegV9(4+XBZOGOJ zL};)RNi0he4xgnoxR;q@dzd=5hp8h^F}eS7^2hhkzG@@xzytil``*vt!-q+xQe-k2 zu6oBi>3Y@cDLl6i*_6d7UFV=w)%BZsG_cYUG!>c{C~Ol9ou)CH+tkt7dBdvy{*PX9 z#T9=6aMMjUz2qL?95?j(%dh;%(hJsnS~w{a9zG(vd_^f~9~vqb_K(d@jP>>{xxs1a zSTu0pkUl*#C938x1Ubv5#j5XfNFm4@MW28hvJG%{icssQ?ONN>qaG%%^6=xPj?AQ) z9@@vU4}OH}|MP#QySt0wkx`!c&fOgO`+s4|FW@xhzzYxw2O|u{kwcU<Bs*5oyy-$3 zd%8(v(;x&vvCPb=5ej>sCDqc%#Nnq{`m4Xe?|kwvX~<?NmP$PI-S6_n_q?0lC2I*w zrFcB768B9VTx=>_aRgErk^&sZCS$<PKgVmo_;s`KvRC^pP0gv<+1X>gy}g@&xtDry z^qeH{f&0JvH`lj!b}U}L@(-3?|0Z%41he@y!LtX}-1U|3@#LO8TyeuM>)u>e^rsW# zQb|mx2?C$#VxHrZQ-q-+m&roHK_W>Bn={JC(}s*~6SyA2j;uw9`c9oW4<kpW68OWz z*cWc))z@50cULF*xjBwJHo)NLzRI*NVK?T`We+Qt!aseQ8I`B+#&>b)YhS~n6)S0J zYa^XbVc9kUfs_K*^SJl6+j#oZe@W;1SMto4zQAMGT*WnSelw13vu48vmS27~QxDuj zYVjJ#m(G*Ciu!WZMCD>=Kq`ewrx3u@sZ*j<zSv3HMT{{^zxK7SUHJC5zx}Z#OP0K( zgQNC&LW2I*zklVwUjD}G?@tQxdu!HRu%)waQ6kaWY=giGwcXXxF3jRyv<lIFK;XI< zKOiW&EJ|c}WN<%)*&<DCePDrO45LO+M3b{+{j_at^`a)ns&)OuF?&u;amm|nWaa99 zv^ESKe~u&H_%>5#N3grw&?OJ6Aw%KRe#H8%T>Trr!G)JxLPu8zxoi&0vJgU`RCKLv z+on`@X=rYVc>TuEZo#g9{Z}@>>eaNgw$j|%%K9s><gQ)!kQRb!KdFXIToHcM6`!X` zD5=q*B$N_qVDk7Nr9weuk_ny3WS#Er?k&J$YuB!QS(SkmV!Xcpu5aCY|6Sj@7g+q^ zn?L%wp3bgoS1s>XC9kYKtz^2RL3FgW(bn8TCYQm4A!8$>l%5#C897ODZi;LsNzn_5 z%6`S1Qgqukrb_0F5~gZzURT-#(Zr7igkz(I&tNTI&xNmi6%Dx@)3Y-S4m`ox2fqz{ z>o5fut1-je(0&@Ocr({*dp{Rkcp=SAO*l>hr4?@3MQcSimnEG_<GC(D7*rcSs^pUG zS<UggzRj@@-oz^}yOf0Eu=IipqJ*yOMbk@R3{cfEPwLBgQ=zIFjgA#=_TUj_rl&<i zE*ECAIho01DicHDONj@ZuN$bhZ{KbM{OQfV+IaiF{`)6ZEMI>4==8KYK0Qq#k+vJV zdt^&{yTQQO$tgyLN0^$LMpzP=N-$9@)7aPwTH%L5%%C>pwE`<5hn&~tOOV=BffcmI zN+l?$Gc39K3KlI{g0v(P<KvvX?*TNO;DyLcit^BY(yzUW>u&lW>o49&ds`dE7>0&U z^62;O<KBPy694>(KjqPf9t0s!I?CdNv|`SHK_nB{0uJrlhaUtujze2_7cJ{H<4>GK z*jBX@T;H>-7k-60U;rH`wCtul@D#IW&Is4@@O>XA;k*J!$MCy++2jCmQW8FP&(5Za zId|vr(Xm%Ow0ED$HMfeClc7ADKk>wYz1<Hy_(*DI{JHaLZAV8J(n&H~h?*<tsQWqP z2ZWgfLJBH<poL0cYB2U_cFRyQuyW%DnwlC>N;5Keg6T(hLi=j4E!1?LGM!xe{`a$X z{Y5l4Hc@t64jtIX-f!K_;FrFMTR6^OplR!0#g<Di!<H7JhB<5i9fl+Y3>`W|u~4L; zAx9>grDgR>P95BhWjh$-)!9uQW2}ZiDv;3}L>ORNa)eXIm>wQ6UjJ%QDi*OVd*!XS z-n!!b?|=V+mvUfap#q3XMtW>?V*9D_v#;9u_&{k%S6`+yH9dW1cKQ!iHWa>Im@eOw zNt!L0-rg{kO4*K+Kx>2RdAPnpS{4BU5pw~Rh8&U!41ttbm0m#HlaJ;uOno9^G&nYT zGLJ3V=v}&uWFkqvP+<JnF?<clWC8?C7f-YPqkqgr8(%?Ft^uVK&mB9)?yr1}<6r(~ zyyk9_D>u+|WDj;SN$3aIDGMQ^vQ$-)`%p!|&Cn2qVu7ZnMiR*+P2HUg8c16bl#JnF zQx(1zx;jQ)Wh)6q2smMg%BI0Y&s!=LWh&w5L^7G}>FK!$IPg+V4%fM!>;G=M1@K>f z{}Y$}$HR~P`ZsqypgYo;%-NyAV@o>h*WCThfBUCfzI5kwBAwgU+1ZV&ER%ObF;#Gx zaeV@r#7XC{5-BWu-qmX$Ct)~L_&ORCiRfVlRkfITBd8E7L?VG(I7#lcn`vonMM_Dz zTxR;z>BxE=8+B$H*}RyGU-KGTTU$X0re<b1@coB4_N9Ly>{*IsCorx@5HE?C=av&U ziQ+^~8yu0KG&+V`E+d4%wruQVDn>Ttxsh5%6GfG*rb=3^kVACTwG=@9*f9!)IpGCC zg&=bAg1*2@s{rzWT>$JqeE5oIkDsI|k&?%c94#j^>K&i{^!8^rZrs=yH}eiPx3-aM zZ54@h)}%5y5{VR+B@vcHSQZG2TH<s<Nb*5IQ7dq4R0T)V5hqZ~D0(X9>wjz;-$3J{ zMPxErwAQ$#5_4nYk-Kti%I+|W-*gR&mo6pYIB2aoJ2J|lJMSi-1EE2<el=37P}MXT zMBVIP)XB5ZUWnEjtt0NAHZ@gBJPu|mkZ*;|XljTn+Em%kO2m`Hq7`@VA!aA1MA>x- ze4lhWy*5q+wK3+U_W*a?5zYNipB>F*5*9_*<-&v=Ubo?r62P84d-4F;bn-w`b2H5? zt+tT~BWw#~)Bw^|!cUDwBd}$J6&G}fu&nB+R%L`k==siIO%{L#QVlt5$Bt@jr3lJy z+<F(3H1w@qLqlU@1n`6*W2aAZcK0rvzIIf}L)o&XVWaD^cd;M^*QQLOqYcM#ARhNB zPt8QFUZv)l!J?jIT1#K94wb}AA?1bWrY3^3N0>b`j#f$=1Eo@FEs%_xLodAtxcu_V z1%QLu-IPwy-qjIEFKn3Eck~;7{*jNq^$$MriRA#joxKyuL_($0S>Z@b!m>$NHc2T- zSQ00Si18~}(O1l=n$fDt4l*@#5MAZmM;*o5od8zCj=YPMF(qrh2-iSIcMpj~BAU<* zLh_T7xSHs7s)0IsY__QxX;rd$Gtc|eAZ&?ipl$gwve_I0L9sAL{=`Wf0Xp!(l2trF z)JzLk6(cTRm6#uG&`P76hzl_@blMb(rPQg@rx+X@d;stOUMhN6T@rZz{r86ek390= zZC71){X19m_TE@(ZB<8~JFzae|Jc{ZefR7u)?PHU>;8MKrE4z2Nu?N?oE9XUDlIDF z-3dDEBnjJ&w>@Z-5a2jWDUGrOwy^3pM$HF7SwjIA)#R*V@s_l4(wWF@D}@2lxhz(7 zn8QQ>RSjj#2+*#N1UkCA;vp4~Qj$ogVvAMCOoqIH6|Y!NHk%;`1I9;2$v^rOGP@W; zRn7KAwdfPomXNBVDA9a`j+I$q2*MBtm>WDHo;?~^D0%<@AOJ~3K~%8+=|cw(-g@h; zx9+H^ywpps0D!6N0|-lV?;bfdwBv%cYkzIUmQCam7H7xCI=qJ->iGKC{+(n~8;ch$ zG1qT;g=k79L8%B83<IX-@*Eu>W^&Fan`=NgNi@)`;fx6gQW>Na`12c?=10O!oNQG$ z|A1dCNAXx|Qt1@g?rz2n2q|hf1F|aARIZ^K*F)FGX=<f7^emlMyn((YOA%6FSr(4t z(Ae672Aqa0GY59lxNHR%U2+Mw?JzSl%ZYsl@bx4j+l2PQxO+)FfI2_Ssw&xzu8Ape zj-cX@5E=+aM!9&yhSqn!^PTVeqd)qi>y92h`lnZ3dF2x?)ke{CaDW{<b|`*pn|1%^ zc9ei$zxKv=eM6|=H&?D+wXCV5bIHaH7iW5!+I34VXG<vwySflUL@_bc1jRCKlhasQ z@%WMbgtjD`&JqS886g=AJzQbP*cRINDpQ8lZeV3bk9gYF0p><W@jVZKL@G)1;vPZ( z%R(C{%+3G?+p<VF4qZzYp$r&5Ah}`@YC6xjf?vM=dOAAVNjM2?%fhj3mabe$Zt+_7 z@7+yja~C)K(I2yN)hfa;;N;*SCmwnjO~mgrTGekIneS-V%nQ`e$z%4A7N7$SsUAxE zA2Cwvr46~<(uRfxkTMPYQY`$RIU;!e5v3=0N65A@y!%~mKlIQ8_x~$n<&%w#+3PK2 z)=sBY*%HX6CfUAX8H-o<vugc%`ZvCUB^RzC-P6w4>@2&Veu}o%HZr*^Mb{%~S<D#N zkVueI8s7_$av=-1l1&?gl*pn@erB4DH@=y+_I5CaiOES0e)|qG?Y)#HMrhu62^U^+ z3CUy<%d$wO(iAc|9=P)xFfqc}{3NgY=pXS**S(R(rY43?oS>npiBu{@CYxpP=8Y`f z@=AW`eeY${=FMcX8HPtjczWkO9Qx81QEhz?sOms~uDrk4&1k9X$g0&jh1d;PG34zu zWKqQ_8aBPsbSzmC2(U1wp|P>?wq3h+&2Hbm-TsgN_z(S(dVpF;_yZsKfCZ>;|J!Z9 zlJ|no9(``8`Sj#OkjgbAnwr~jEMaEOPBD7&6u##ogdm+x5%@k+Gc$l7nM_f3T|gnR zz!>IqNT+RA#(ZN={(K%FOf;pd`~Z7VJH-?GIWs!S>NRVyZJR~QSCGo~5uBZ(Q3{Ui zdVraCzJsR5Mlgo9wl?1U>%UId(q&AIjnTPe3F|g)q_w@B;h`b!{D;r+<_~><3pZ@Q zwk+0f+Qj-zn*a!ckfBqj*uU#R_J8FL+++(<&67zN4yx*SZlGqQpl-~eQXD7*K{PkZ z<lvwv7mIc}nM6w2e(9x`UJMLfam5wlB@Y1$AYt|3z4yLjcx>`3_doG8bAfMKn>(ER zbYcI*$)TYG`=5Ek{%3Yqs<m_8e0T3+O0I{pY%Dv8Mu65#hXKY;)j_FRoJ$flVT2jj zz~KG^yz(`##gdY)zFwC7$_*U-{AX!dvx(CW-N){SA7;^_#aL2eSr(mLU0m^|>rhHz zTNXk}#?G8!&#qk@|MIPTE#Y8&@B?&qbW~q+W_FsB#|Jt7@M9eK_ir<K`ZS_B2fmtT zF4r`xR868;Pw_O&SDc1W2&C3%6>%gd4jy7=dRpXi4PjGLqutop_)6egYuB#TFAD|O zzJ0rW%{AAA+qZ9D{lv3J{`v7edkM5r0^8d6<dfSUx$j#ax$;%n_C#vK!DXxZo0aEj zCy}r!W)Ox7FVOJ?vau{1gNm^oo2k&C5`y|vuZ{u~X_OQw*C!|8z`fsN@@;RUudkO} zF2^NTUBy$kewHR>Xtz7K`vV`Pv$u~euX+_S_A04V3Lzz)?=gIOm}eh(lzm^h9n-Ru zL!bXF|9I>uo36W#mey8^b9v4TKF9b|dl`H90X)%&)zX0RgE%CKC_#-u9wl@=A*A;G z>-yaR+C*V4R3SDwia&UY>4^zCy1I-CLz1cF<`@uCKWm!U`4m9>&R<5K?wLa;-aj}p zo=c#8p~A$T-A~>$HahtC0DWuTo-YiZIGIXin#X2~#?jFPu(aa3-*J$DWyxyW7a_<Q zm<oLY(g@o^YmJn$22jy;#$?Ja$-Z@rK71ehpMHu(ix=Zq7Hc<bVAK0=V*fwgLf87O z1p5d0mv_FK(f{u+x$u%rG&D4T5EKgq#)gJCIk20<ckblu;Xy=ej@+U(On?7gzVpDn zq(n3&6uIg&qOBX-fbl|%5Ot#~s&-eMsGlFKA4spCY1BaIh3Ljs{QMA;!y~w>R#A3c z9NSs<?svbt`^#Vc@>rFF{!%G`=)Ogmv1sS-frAG(8z+e^MPlg0vG0zJ4*vb$zx77@ zZ=ab>eDRB4EM0ZY8;31B^@^#o5{^(285Gc3ol7u?<D{cPPKF*XkhN`m&qLR&eW?S* zD_2)SlLZg{+ihI@%2(3e)rAJG{k31^;Q#s>bNdI#uHB4#=osJm(EE7w;@8k~(K?)@ zgEu+D?BPN3hxXu!9I~|$6NH3*5v%(G8WXZg77bkwODPD#YRs?Tm8PcovycH$M-S5r zx`gpE3x&iA6(*Y@FfeiQB&A|erV<H+5PjEQfBl*-fBDN}uYUEbU)m60#^#BNUb!S% znwkk`r@6Mhv+XN?zdg74LpK+QW*|sqvIp!2`wgixlPJ%{647FYXb30X{}+#M5%=5^ zi3A~rl2SA{HpVR@v0_ZUb{=4!6|4$nGD|LE=&o<@{cEn`ZNK(wBprukt5)%zfBih4 zeam&2gS*MC-GVF>DeZZZBYS>OeLh7iqO}8Q1Um3B!a`V9gye;Snc;Y(tz!k+^<pn% zog-ddGpx!20L#?iU{NI?>sZa&M7soalnF6?>^OzFIhoC5!dxzAH#IeF0v`BTcLvWF z0xGkxI%SFPbu{H(7c@3_#RG>o-F@e-2Y=@+zkKUi6F#%=*r8{Wj!0V4rZJrrv!0K! zAkaRT=rDzZv<Z!>#&Zlv6E$P<O4Du4uVN8W&d=tX1=~H8M!6ncZA-cP=4~uqxsuCX z_d1L*T=MEy@xgE2#g~5f_ZT|x1YNC5NUT^Dxo)E|p}|%vX68stD%wS+i!Sc?QN|Tq z^2@(YTVF4af99{qHZR8LXl+P!`9n-jsTIDdp@UT%wmuKtwxZZFwi-VONg<fscYyrV zv}kT^(K#TMN?lUP1Adk}g`ZCW1i;co;b%&P{N*dwT=e>&w~N`c6Bj4u3jbId8VhF5 zOwH~uKauNQdofcOIdb$EEbhj!B({LE8-NOENF>PG$tr4Bp+DxeLfK9gEfe#@cIPD2 z#*&z_huxH;VFv!!?|g*J=Re2BO&4Q;i??o}?JNJn_wKlZCqDg2+)2pD=)(!ofD|c= zDG`_=z5y==XnL=>mS4EyaxS^_G7`xolc$F`blbnuy!Zmbso4nkuMz&j(r&(;W#$J- zYZjrY8kNw16cXk6m|QRJ(6h{(J!3i-^@&ocRM{!q1kC;{0ioyHRb%+AZPxyO`G(iO za``ukUeK|)Z_&n0mt87WY~D!6vc=YPaW3=NV~^XHtlMDLFY0CUntoohbQv4l+S$<3 z!G?|w7N=4aW+s^}7O)cuw3Il~Vpb_ygkeb{5pnI}u3TL$S+m4R3yqW(y6j?iFCu(y zKTkfsm-e+6(AC$AW7#w`G_rcbdit+<Bdu%KW7<3MQw_KU7tbAo)*e#pE~4kM*RlT1 zH}d-Ty`Rf(xPeVuUrB36Thzb_6i4s53n$ZrR%#yTsg9=Btc|6fwjS3BH9HIR{32^Z zwaX!t!D>h&N;Bjxe1+&<xk5MOa@OSJWK(~C|L1q@+BNg)SHD_*`O9DanJB;y1s*DW z0f4Kny6&~>Hg3Fj<;vx+(_wH~etbd&WmiZegr}l;zf>wgGMNNpD9+3<e(E&)4;^Ip z;eE9CEXB?=qCAgTV`x<#*Eh8wX66V~7?p0d?!RU)P!%IE(S(rQ(ujL<Kdyo6{_zW3 z`irlprL`5U6iO>R&tq<Oj=6lEQmKFnLhOV?I-Mb%&63OINT<_SwvFp~jExL)e9t}( z@A^K6cixW@1|vkYcc3=joBBxxqtEX?bqz1DdZA+w$kCcqYa_{t=jgfNSGf3XZ#4#^ zPM$dNXTSG*zxNmCWtqN2NFcHB<r7alA-8PV^3c8ae&?aj{N<<qrxEsLo*(L>F<9xO z-PygE_SO~}b6IlPEQy4T=Xo4He28PSllc1;jg1Y2Sj@Saw1Csv-~kysX4=NX)u#4z z4kPFH^_oa1LRy5Ad7MRSu_p7}zU?>I_l{rV(zo2e>U9^=+|o=YlcBMp5pDXS$)rjf zSsQe$AhWZxoEaTs=<s2ld-QQm-2DKPGlMt{y-4Qi;}yXRQExZrU2RuUR<n@j7y$!H zNGu@<J)b0)*=G-lGvlM8vAN~j>2&&Q3-pMW+ym4if?wVK$<Aa)|JO&SW?uXBp+mlM z5{Z_kR%|rBTh!B2lVWOef<nH4kb<VBMsyf(=)gWkN5|>x?PabUjfdG%FcO5kJC~)S z>`^WjBNowukF6>@0_v7aR$9awk&OmD3a1a^8d!YI4Xpcx*Rr_3pO%hxGTCfI>;MAa zr#Lsq%;Y2!!y}9xKhF5xXPJ6<53}JYUh87K)<)r57NKP!wZ;xYk|o!qie-e-^Bqeq z&RtF?<`cde@=)D&Ghx7ylBDC12?DI(Ebscp-Dcy~ty(K3$H&J%wqe7Dzk0sT;MT2M zHv(?~wgSB|m*5m|A8^OOz`)3hssI&K$`~W>y8YWbkDeO7@~+1Ryd~X>lD_LwoXhVx zdHBH6efthv8+bG7d^B?>m8G?<6=eigB8iX|328Cpd)$ytu|h*>b}nKM*KFc4HM0Vy zf{hqczh_t*j4cq^G$vGdqem$lum$9L*3j6$gk(b#0!dJsqkLu>_s|fY8jf1D2uiJs z$#=C0FX=r0MN*oEsacbm&exq;P+4mz&H3HFIkz^z7LYJD+2$<anL%#Y@dYls_FB{1 z-7Uw)#zuO2de#E@T10T`)~&06&j4@wA>#6Y?ZAH<7#JwMC?TLy4u1MG+dn)pJ$L29 z&+KuRb@!wOj~qVeojLuXM|VGZ|MfTC_%UglYe$AhG+Ij`qYYe@Eg*qXC<B(AKnN?s z2I8i9UMsMj>UI_48o3&4YnB5nTryqV7NQI$UqV;{ySJZaCyDkw{IRo)j~=R9C?!NI zqA`m}EJq4KA(iB8OHM5C@8`yKOOo$s5pFs~^T=5vt3cQMIP5~dUANaTZWxFv`za)p zQ9(3x_#hizbD5d2Z6l@Z`p$R0v+=s?u6yu`E3U8ry>;u>D}b*7%|Aj`N#LWv6<fD% zee=M;!08vH0I>#!U;OWXk-q(jr{6m=HBE0*E_M9Cfx*^9;o1jw51a%@r_*DOZQ}<@ zhM|vbS!gSo6pmI2TL@uCv*WQ+RIFr5X_OOV0Y+C5x!Ubu!qlGRXU@gnD;ZO$F>@|T zyI=`KYZJE9I?pgNVe}Yf5N^m^Ho@7}hM%bW=I7GP^md4r(_;&En$-WW@TiOVG58n| z5&{(}EMVf`QRZgyq9NCybJ?ub($exu;KA7PF9E(yJV5ee-Yy32-nw<`r2_*4g`bEM zSbN*GD>|3=u~TPOjf{*eP1}wsjGrZIsU3GcFmQ6S)!Pu)$orG2lxk^jx2$x7mYD{e zL>epMM0K>VBCKCWCvjpTDtM!WGl5Sa1hN7M2_2IyBTlu5$E@eqvcyc@%64uRZt;#h z4>1|U%(>{f5~ff>7d?y@qC$l);cREiPt|($b7_jLO+b{ORu@q|pYRvNh3Y{SVTceg z_1Ke4ojof&&odZ9E}Pp5@SgX)M*{!;6AHg_TMzurPfQ9u-_3RNvo@iZ&ZR`!_xZ)v zuD9HJ>-HtP)yN#cSHJqz$1}Oc!M4sWupFJV9g(ynl4!zmkW!$vuC_QNnh-+<$%qEm z7_hB*YWBi&flN(pElhPYXx-rx=cF_9v~44Gyl+5PPXL>4Z4gHO^wU_ywq~I#N~@o* z9IW&Y&fS5ij3MwtOtzci>?zKU4&(X0aXk+w;j9N5fZqaEynqD%H@9xxy5^?^f;e>O zkOst_J$q)CE?aiN@}(;-HqA}0Iyt<|9UOV*+SM1VT)B4bs?`_tuaiQ)&Q7FSXJ%$i zG4RDi5HRBhcv_JZl7wYP)+uy6lOeEyIjvZeOpwzC-}e#m`uTcyFX|3?MAy$!OH)5y zR$H>wu5}S+o*F*U-TEWr{tq`Bf#v(yo?n-^*6+MAKQ#50+F<1}=+Z2$7jB@hzu!2P zEwxb%n>KCw*6!WA{{-lHffe5D@bK{cKeY$gwr!gP$R(YR=BFngUcP*Js_~6ik>0ev zw`cj%-}Z~;zkB%6N5AmEBM+>aC=~Rm**Pop16JkIT-egY(p;8_FkpCkf|6Up2n&sc z79cGFN--BIu<iO2!Klm#&hG^k@%%*<Ei}<u7KMng`?_m?E^c4p8oDWm7h?U@lslUi zwccu>_5Y}w($Qg)8aQ)oko@edEPJj_CQ?Zu#B1VM{z7j*av9-|1cG8TaB{^8uClG) z{L>3JT==0?7i~^uQc1t<qBU~XDCu~ixNud!_{Ehgk)gtP9$vACQ5xU(IXOPU?h{Aw zRY)=$_35>aNS(7P#5hTW5jAJ<P?P<e%3kJk7c$jC#tUg!LZM@vKI+g#E;(>sobwuV zb++M$$Nc$UMPX3H9?lqz4nr(pYX2efv$LYPr6tU!)3RJHU-ly5Jj-5a8Ca_XrNP0^ zf0VEA*-!uN_CHRiQtvHKmDC$AzfzRSu68|78cULG$kEi?NII1w^gYIhN5~(rXgE8< z`0Nbr?Hv?+AEgYoWizc5Iw6@KyQ@72B3d06YEg%~nb_x_gT={s&AW+C4U1N92!x21 z_e7kP7l(Fdq&!FXweem#HbE|fN;tyU(aESH2$5lEEY~MFS48<Cw$n!b$kR-XkBjc! zUgHM=mStV=A}K(_3s!)N68zyG{-N{9Pku50POM(MBtJ7d$En$2RR~-yQc0(?uZPaI zHj_=KNhTdq$t1RI(c0b3tnV`Q;Da<awUWxDnJv3W1UYFj5qc3>(z5XNd>qy18J9G5 z>!QUu-k{DU*AX&mLPHq7C|6e2JWq52NxXryr4g^CNvL%4hk|cKtx4pIw78zJM<<ya zK5a^CE|BR|iq6i?t`|uGMqd;Ki2Kt4z|Pyh_36>6*$+RoXKxr<GSSr7f>es(lc)6V zM<0{NjvhA$_Us{AG7d}o*OQPT7ST}0?Ccy$E2Ok=v}Q~jT%*a^HlgccTQV9QkJqoB zW98>L2BeblSB`_xP!l%h`}IOV!hdm2aI-u=R>Wu_W{^!&?CB6XnfNg^Na8m)Fm7@p z?HERnpTK{OuSLXTNE%~GLWs-@e4Be;6a~2Fo_i#q?!5iZ-yNBn{>beQJfNEzn{5%o zk%Nc6aP+|5uO@{1cf;f3Yv-n>R7ZQO<=D;mZkdxu_W>5I9UT;k9-$0z>;xdNqy-|R zY%~qF6;s0GIg6sSSzz%C7fws!B^2{`fv)MzMM@&$P2M54=M(<8f_k2tlP{P`$I@+U zrrg!`(^VEiP;Tqsu_K4*e&(6P$jC^3@c8lH6+&DGyzK=lz&Bs80&M%xJ=QhXT&+Iw ziBB%y^~CN^>^X9j)=WlDoF2|U_{fv*btjK~9pJLpyl%osn<*z{jMlhDB9l3~dYjN9 zI#SJ836hpQKeuO0R0*h%PD|D;ThY3HcyvC|JGWChznMc&%jDCQqhdwnkf-RL>{Q;& z_O$=h$$(XIu}dxnD0R0BudVq7dlVnI<BmJbt1i9tLx1zBPkrgNuYK)d&+}f00-OfE z`htO=9YHiQesJ*Ebq_tYw^=HshEENdd+)sMKe>~~zJBA4H`;M+d|XNkKk!8uTdcM$ z0wK{@)ome>OIDaLjLwd>9A=e5TNXAF7J|M;#H-jUCzP4GT3^Sfb}CUJYlsLZ&{5sE z@OW5*AvssVDY-vo`ftdLo;3h&OCv9a@GG|<2*g9*|NdWY-MY2wV;}q26TlZ<z|(zr zU|^v9LKQ&pxg7@J#EFxOg;9i_Z?zN(XaD-I|N1_F{QlWQY<*8<vsu!O%~B>a#z|+e z5@{?eiInkS5k{d^5WT7p=xEZK=^!K&(e$rYwG+ejr*xVMTTxa7Upcmo>VT<^kFirM zJQjX_tEVuA=Hau(`YG~()aV&wc^+XZLAj^nf5#-xBH&9yLqi7mAn@={@f?3XFfj1- z7Xu2e24CYAPPJsyBywqYk>zwIpV;@whQGTdci++bO8{+6El)Q#HPhVEF156cu<ST4 zpF8!e<0Q|ZNlVR)R`@3Bl`2#fLN!KIPyUQR9gWcnt!odTHZ^3AXo9%XO|1Q@(z;`h zfC_0kIb!S|*ApmBc4*WjX6H~E%3bZ^#VRS!bG!2Mpa1;T0|NstaMh3F%HvxI+ys2$ z#|~#drjnQyE0&!|rqb_Nv0_#GwBxwm(CDR`4<CQ`(nU)yD}`#6LS385Hf#utVQMCi zV@n|r(WtjHF(f0Z>A65uw{%Tu&6-3KCsc$%7%zgTui+|ia1~>($rYkiE&?sgIh?(^ zrIbe3oG%)=l;msy%L`BmTU1Uzt>*$LlGAx|r^bx!dePSGTpG9YfBR;y^?iMPpBoq$ z2>SZ^z5zS}EC&{!TOd=48%J*+7#P?&JUsjp;l)4tL5<rili#7PeZ!l#w)XUWedXG< ziyPA^l5UyN)2DdssV6yf;2D;!S#Lxt!@k3VWRgyFiYBU#HZ9|=9<s)I&iXFb=W?{W zA*DhIX<Jd-SWwe#r|ys@t!v}DKJS^nl|QJ^%Dh|#m2^nX7LcK;f2=kr$3`a|v>hFF zD}xZbT&|u`RJqOdb_&0xk)Ofs6$1kUb*0?aty{Z*OX5C(7bkm<FO2tFw{Dfd8-R;| zI|l{^4*awp0KDCX-`Zv!`|4LtrycoK+etbd?QKgIuUOHrc-2Y}GW?Hwb}A>CkzHM# zj89BOjU5x8;AvFk0YuHDjff_0ZDA;A!D8E{8Swoe&hRu!)UTASjAg6pL6D{f9C{w% z#|o40>lEdV77=9A!fk03#<ql2_OX<TkU}GoT4DPEj_c!iK6V&lRky>7=rdUs#oi8q z{F&@_9337Wez5iz!^6YH;o;$<!^6W*4-XIT9UdM&F+4mR)(Bqo_4U08xDEI)a0T$b zzP`Svhlhuc{8S#Gra4q)2?O0*Ui+pkmu|gi%gSYow)tMUWAEPmYG`y^9y@&ouUsPP z_e5vvqT-ftd^mG-z@s4{EXF*KElHb;>?Eb>e07qj?wn3NKRc*vHgK2)z|ey8sL+7h z(!g9-t2htBMY2#LGgB~$LJ3(RkBA7f7gn@Kkc5RqkaR<QAsAZK_p=(~zJFj~;Fn^- zZUy$ndBHiity{M)27VoQ53uSy519p)3=9n9e_|kLVP9a~x^?E}n{OU_;-Ne5yzL90 zDbE%PA1{|nT3VJkIQT6xNsCg^U|CV-k02t4EcDYAl9Xlt|LvW7j9gcJ$3N%X_spG{ zec9gin%EF$Q^$nH#<`9G6Vf!;l(a;&)nceX2vGqgqT&(y;GZG~s}vEjQCo`CpehF9 z@QA9E5UF+p2~MjUVwX7X+QDltCYxQ)ddAtu?9S}mdr$wkch-}QgYDU|<HvlZ(ax@R z&b{aUzUO!5{GLn(imDz5bkqbNCK9Zv`I`M-)cFDAf+0nHOF|X9UP>KV@mfZhN+wMu zlNKV1uqsu|AizlS0z)AvTRIin<_#|%Q*L>Zmvh}*MD*6Z|2FVO&+~j>gt#lO4lD(J z7w9|7SUKR&fv+`8fEoz^cJ10_^!N8y$BV^Dr5H0!t2>=e2aaiKvts77^-e4Z)JTdZ z);wcD7?K8FCO*pxDG8I(vZBuJBWhVU3s$(CKc_@>RiP63N~ky{(K&bkm6Vhni!x`n z;j6c-M=f23D3@V)`1K$_0k{FUbrIveZy^C1-pKm<`>RSRxpCu0U(@6!A^E?hOP1({ zX@*jlv6_~3869C5*9DdFX+T8+6$U7!u)>fNbF);0Leq3K6*E&;U;u^ybHU3>e(JTC z1jEp<OoOyzl5s3@ritb_O_9Xfjkj?7op<s(H{8JMgl23zw|JhHT9gKOr3MwzQ%^l* z-F)-S!-ozX`a(MG{<yO}tB;M1MV6rpq7Yf@0a$0HS9QIF2ty1_gG!vU*QRTza)i|5 zax$VW(^l0~yZ~KDbRp1$Ku4knAzHbLh)Te0vTaz5Wt+2KyQvht-Q7$Six*Sq^>O}P zO&Cv4j**9(LI8kLsT2TQfBp4OjgF2U>FMcN{oL~hBU9J4xjB$BB8rmAv57W_<r&B7 zMVc0?b<3d=DNIeGbPcI%2(-A!1OiPdbOm|@S~Wrh6`)L@Dg-Jb6rEJMG6d~C1i2g{ zlR?X7sEp@fVq(!xZens$D1mD0Xup^Q7^yqbEpMWwv3Ufj;n1N&8Ot>FteatOE)Z!u z#q3-h`5K>?WE>nSPM<stsUb9pEr<g{-4vbDpi-Db*F{{c0Tr8&iKr@=wQPbVIl|6% zqP8qDm&MFxvD^&Vj7vI`A>*b=J1J6*!*_P>YzhI6|9Y58xr}3)*p^MXQoa}j_-XQU z4Ulaj0caWlYCUht<?=PQ<E(0HZ{z3-FRH$`^kJC>G79Hw=t?2ukSH13EQ27TST17( z5u6w!ylD+Gogz{p)1B?ir5$bYntA{L2#!faK~#daEVSj&+jH329Bw9yn{i2}<2=Na zlft$wEYrj^40K&blQIrP7cf0N-IS+x<N<F8koU+C5B|f~82|Y%D0k<eYstkRK+T=I zxyinU<`H1cnl%Byx^?UR=itGEU+nH)_V><;Zhc~WEUM@!5l9^=B$ZH6sgz+V$y%}v zy4xN4x?I}bG?{hR(b?8cA(zA1w1JLn7T0xglNK*2$Hq1-EYrd;bY#*4C@x8_UfIi6 z)hc`oDoKIK#UhF##`ir#Z$~FRD_8P-Y3f1?|3LBr_+S&q%`}w&LI_n$W?Z{=?N`71 z&_nC*xMh9+M1CY_@8~p#kB=xJHB8eWo3hE}vSf2PGOkM|<C1YRxNh8;!*Lu;%fhna zI>WlIBc+Thk=6<L6@no`ig?9KQS&v#i6zx)HQsibgw*DDamOG3NnqGErH3EZj}0HY zkOrZ@@_k=<o_9l&HGt7n0@O|efBm<+j2-v(S0_$Q{i~FE|Ef2wHaD!hDJoYgA_xLf zjzijYv27d2wlOUWqo%SoZC=o|`T#Y-)oS$%DUec|7jm3K7!iaa!Q32`@+>o@64R5@ zOcjcp8qZUF=_R5tYFaCX-;9iiP?N?RS6;)m4{l?}jvZW}I{$lspCs?U)a0@CrV{|* zRN;vTz{wdyNO3AcwD&Au9=Wco)r2f$+#*&=Ij^c~fgVv5Aw+C%*EAj75T^;D6xF#Z z<=GOmGc(LgO*3_>z{`aq6Zt%oBV$Y)`W4f|2Pr33LPx}9V&sh*h(z=3_CNUk_pA5Z zbI-os-rk|jn>V*T`Q(#-&}0Gq2KZ32`ZojHnmqo@1tGw^!Q{HN`Jd)~F}m-U&$ZwB zj<=~LU0tysNW`ar`9={!%=hw>A}ItBh0Il}%#>!BotmOFImuL^Kyf_J<V#~r9Ul?1 z&pt;bD%R|N7y=xD%5|+)y|->vPIr$oI<wfh9A+lN$vu1YLb13g9pJidp{J*3uVEPb zgCN+yYuB#-yzjpIW|AY?0I?6g8JGm#=llMN<oBb%dx=xT-j-PM78@vfxY^dF+TJ{0 z+3Mq;{>;Da-uujl-+WDX_0K-EO<&Qw9I3@sz@kVI1Ob)G9JA#z)6>&TzC1zxWPyBs z6#e*%%)M}w((nPIn4wA+C_|tufikaMuTs~n!0zeB>gteoCM$H;m6n?pRw{*I+nA<_ zVd&_($<up(&VM}mXrt451o#T@tnd4;()Eu&{<t<YG^Fj^x%2a37;azW^Be;H(D(hp z*ZK#~^IYIhf$a_21*U+NzVDxEx&{zJs9Ns8rnjztx^S}i;U7KpAfw~O=#JaoDSCRk zsm{%jAI~#(Vw_{czvjuG?N@~3b(Ve9$81=(Yz<v+e>YC|Qekv;Y3Z&Gnd;~um21P! zq_J!V-84^sL5!j})Lh7tfGHtFQA%0Rq#S$a=FR!1_wIdfu~=Mno(7mt`o8}t!0z3< zwe8!tudY-oZwFQ=rG#mk|FU)K)-mFcr>}UPw-5NnIXGorwRV69fzSHBUq}QkfZLN- zAvq2FcjC$Ww&!_21nvbseV*6(M7{8vssU;%V(Zqe;Y2?FhDRQI?Aagw`(sNUedOT) zINd?2cFm4e;$3fDLvK$v%a(M~(cVs1E=OB7i=9qkrW|y`tVIWfx~83yQjTj<<^>`z zr8oiPrIdM1(+WzdaZAb~x>0m9?!>j%UOQd4a#FzG0iOWev#mteb$|b^yY4z}+cpn8 z@W8exiarnAbcVh3%fQ!t->)XuF@TQ&pCV4t{%x2AeoP#{_gvk*UI+YhBK&&H0p9`c z^?iRR`QJ|h|8x$b*$;fl_x;B%goELXBp4hVy#4Uu7ruG)*s;~)Cr_g5I_+&ave_(Y zCl#Ln45MmUMxbf>grV!xQqu}(+DT1_Q6c4+Cd7+U%27jzmn>b+TiI-}Ua;qafq?<J zY11Z|PN&88?c3Xr9zFX0D2i4S=gqli5b9s}zCY@DUMKKf;+VYOhF=07_kI7F1?u`u zz<Y?pxO$RnogmKEc^24RU&<vR&*zBa`Rub0=P!NV|5oz3kDTF)qDuS-$B0A8o;cGM zc0mYGd+14Rq1@o$;B8Y=Q*BBq%`{DAYN8TCAf-Mnr5p!lbX`AXnbzdWRVz#9(Kba4 z3=D|AzCO`)<OQKNp02T5C=}F|EnDJP;RY&hdY-owc!JpddammAd%%}{-#>hw*D`?q zL_?iVJ%GRQeSgQIx9$sN#aK)uq=A6}+1J-6YAsa@g@OXuvSo|9|Ni^A`|i6{?Ib~y zOR6OT*|P}a%M;0-zQ_0d<F9cI6W9R!5%3Y9(I}G-_`bjEk|aQKGLVCVgW7=u2j>5F z<Bg}c#!{)I7OvRZ7fN0yc%Jtu;2)bb+;L!-IC^IW=p>HdSxaN3Ul!sdu-f<iiA$0I zmm56K%K=Adj_>_q;j6yyf3eXI%a+(*fiGNU!Uy<F5)j%Vz#><_1U`Bh-nzviyoD_S zoW?t7UewLS#s^vicpV?&C4iee&+BUuU~%}p%l!UtYZ0LF{Xfh3+wd<nY-kanajd%n zj>IhjECM%P0dsh>=XqL-0F7bA6)=Zdo?wdr4WRdGokxoRF_yOoaCIYdh0Mck5uh>H zSI9h^76BTA)gr*vjoB+?9;Frm8pHV2I*%3sV(h<K=g}fSjGtTqb9nw-dj+-#@M`=F z_}|NX4qtENLoEUTzVAoGMHR!#bqd6h$mb2MCH@#ABO}ATy}e_=om^g?!K1((3kyKD zG(cmT;9JD?bw@9gTmBKS!T0^KMh9qxg`WYQ=h?(%SKm(@E1157Zf^+qFW{TL@9$ge zU@ZcioeYw=b9V<9pq|2cpah&emo6YJw9rBeEws==3unXs1N46BVZ6GFy#N3J07*qo IM6N<$f<}^PvH$=8 literal 0 HcmV?d00001 diff --git a/crm_employees/views/crm_employees_range_view.xml b/crm_employees/views/crm_employees_range_view.xml new file mode 100644 index 000000000..87fda272b --- /dev/null +++ b/crm_employees/views/crm_employees_range_view.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record id="crm_employees_range_action" model="ir.actions.act_window"> + <field name="name">Employees ranges</field> + <field name="res_model">crm.employees_range</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> + </record> + + <record id="crm_employees_range_tree_view" model="ir.ui.view"> + <field name="name">CRM employees_range tree</field> + <field name="model">crm.employees_range</field> + <field name="arch" type="xml"> + <tree string="Employees ranges" editable="bottom"> + <field name="name"/> + <field name="parent_id"/> + </tree> + </field> + </record> + + <menuitem action="crm_employees_range_action" + id="menu_crm_employees_range" + name="Employees ranges" + parent="base.menu_crm_config_lead" + sequence="5"/> + + </data> +</openerp> \ No newline at end of file diff --git a/crm_employees/views/crm_lead_view.xml b/crm_employees/views/crm_lead_view.xml new file mode 100644 index 000000000..9bb89f255 --- /dev/null +++ b/crm_employees/views/crm_lead_view.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="ir.ui.view" id="crm_case_form_view_leads_employees"> + <field name="name">CRM - Leads Form with employees</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> + <field name="arch" type="xml"> + <field name="partner_id" position="before"> + <field name="employees_range"/> + <field name="employees_number"/> + </field> + </field> + </record> + + <record model="ir.ui.view" id="crm_case_form_view_oppor_employees"> + <field name="name">CRM - Leads Form with employees</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> + <field name="arch" type="xml"> + <field name="partner_id" position="before"> + <field name="employees_range"/> + <field name="employees_number"/> + </field> + </field> + </record> + + </data> +</openerp> \ No newline at end of file diff --git a/crm_employees/views/res_partner_view.xml b/crm_employees/views/res_partner_view.xml new file mode 100644 index 000000000..3ed8d41e6 --- /dev/null +++ b/crm_employees/views/res_partner_view.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="ir.ui.view" id="view_partner_form_employees"> + <field name="name">Partner form with employees</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="employees_range" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="employees_number" + attrs="{'invisible': [('is_company', '=', False)]}"/> + </field> + </field> + </record> + + </data> +</openerp> \ No newline at end of file From 185f429f2a4309addf446fb382434e1a0ecafb9a Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Fri, 27 Mar 2015 12:53:53 +0100 Subject: [PATCH 15/58] Set some fields as tranlate --- crm_employees/models/crm_employees_range.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_employees/models/crm_employees_range.py b/crm_employees/models/crm_employees_range.py index 5610c1dd7..d8912f0b5 100644 --- a/crm_employees/models/crm_employees_range.py +++ b/crm_employees/models/crm_employees_range.py @@ -12,7 +12,7 @@ class CrmEmployeesRange(models.Model): _parent_store = True _description = "Employees range" - name = fields.Char(required=True) + name = fields.Char(required=True, translate=True) parent_id = fields.Many2one(comodel_name='crm.employees_range') children = fields.One2many(comodel_name='crm.employees_range', inverse_name='parent_id') From 89f64b90063e3922a3d215b771922de85accb0f5 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Mon, 30 Mar 2015 17:30:12 +0200 Subject: [PATCH 16/58] Employees range items has no parent --- crm_employees/models/crm_employees_range.py | 8 -------- crm_employees/views/crm_employees_range_view.xml | 1 - 2 files changed, 9 deletions(-) diff --git a/crm_employees/models/crm_employees_range.py b/crm_employees/models/crm_employees_range.py index d8912f0b5..0703e83b0 100644 --- a/crm_employees/models/crm_employees_range.py +++ b/crm_employees/models/crm_employees_range.py @@ -7,14 +7,6 @@ from openerp import models, fields class CrmEmployeesRange(models.Model): _name = 'crm.employees_range' - _order = "parent_left" - _parent_order = "name" - _parent_store = True _description = "Employees range" name = fields.Char(required=True, translate=True) - parent_id = fields.Many2one(comodel_name='crm.employees_range') - children = fields.One2many(comodel_name='crm.employees_range', - inverse_name='parent_id') - parent_left = fields.Integer('Parent Left', select=True) - parent_right = fields.Integer('Parent Right', select=True) diff --git a/crm_employees/views/crm_employees_range_view.xml b/crm_employees/views/crm_employees_range_view.xml index 87fda272b..efe3d1671 100644 --- a/crm_employees/views/crm_employees_range_view.xml +++ b/crm_employees/views/crm_employees_range_view.xml @@ -15,7 +15,6 @@ <field name="arch" type="xml"> <tree string="Employees ranges" editable="bottom"> <field name="name"/> - <field name="parent_id"/> </tree> </field> </record> From 8031039e72bc32098dba9378550e05ed6f7ff37e Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Wed, 8 Apr 2015 19:34:58 +0200 Subject: [PATCH 17/58] [FIX] XML revised --- .../views/crm_employees_range_view.xml | 46 ++++++++--------- crm_employees/views/crm_lead_view.xml | 50 +++++++++---------- crm_employees/views/res_partner_view.xml | 45 +++++++++++------ 3 files changed, 77 insertions(+), 64 deletions(-) diff --git a/crm_employees/views/crm_employees_range_view.xml b/crm_employees/views/crm_employees_range_view.xml index efe3d1671..039fd0a7b 100644 --- a/crm_employees/views/crm_employees_range_view.xml +++ b/crm_employees/views/crm_employees_range_view.xml @@ -1,29 +1,29 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record id="crm_employees_range_action" model="ir.actions.act_window"> - <field name="name">Employees ranges</field> - <field name="res_model">crm.employees_range</field> - <field name="view_type">form</field> - <field name="view_mode">tree</field> - </record> +<record id="crm_employees_range_action" model="ir.actions.act_window"> + <field name="name">Employees ranges</field> + <field name="res_model">crm.employees_range</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> +</record> - <record id="crm_employees_range_tree_view" model="ir.ui.view"> - <field name="name">CRM employees_range tree</field> - <field name="model">crm.employees_range</field> - <field name="arch" type="xml"> - <tree string="Employees ranges" editable="bottom"> - <field name="name"/> - </tree> - </field> - </record> +<record id="crm_employees_range_tree_view" model="ir.ui.view"> + <field name="name">CRM employees_range tree</field> + <field name="model">crm.employees_range</field> + <field name="arch" type="xml"> + <tree string="Employees ranges" editable="bottom"> + <field name="name"/> + </tree> + </field> +</record> - <menuitem action="crm_employees_range_action" - id="menu_crm_employees_range" - name="Employees ranges" - parent="base.menu_crm_config_lead" - sequence="5"/> +<menuitem action="crm_employees_range_action" + id="menu_crm_employees_range" + name="Employees ranges" + parent="base.menu_crm_config_lead" + sequence="5"/> - </data> +</data> </openerp> \ No newline at end of file diff --git a/crm_employees/views/crm_lead_view.xml b/crm_employees/views/crm_lead_view.xml index 9bb89f255..0b5b25704 100644 --- a/crm_employees/views/crm_lead_view.xml +++ b/crm_employees/views/crm_lead_view.xml @@ -1,30 +1,30 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record model="ir.ui.view" id="crm_case_form_view_leads_employees"> - <field name="name">CRM - Leads Form with employees</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> - <field name="arch" type="xml"> - <field name="partner_id" position="before"> - <field name="employees_range"/> - <field name="employees_number"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="crm_case_form_view_leads_employees"> + <field name="name">CRM - Leads Form with employees</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> + <field name="arch" type="xml"> + <field name="partner_id" position="before"> + <field name="employees_range"/> + <field name="employees_number"/> + </field> + </field> +</record> - <record model="ir.ui.view" id="crm_case_form_view_oppor_employees"> - <field name="name">CRM - Leads Form with employees</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> - <field name="arch" type="xml"> - <field name="partner_id" position="before"> - <field name="employees_range"/> - <field name="employees_number"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="crm_case_form_view_oppor_employees"> + <field name="name">CRM - Leads Form with employees</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> + <field name="arch" type="xml"> + <field name="partner_id" position="before"> + <field name="employees_range"/> + <field name="employees_number"/> + </field> + </field> +</record> - </data> +</data> </openerp> \ No newline at end of file diff --git a/crm_employees/views/res_partner_view.xml b/crm_employees/views/res_partner_view.xml index 3ed8d41e6..32a09c1a5 100644 --- a/crm_employees/views/res_partner_view.xml +++ b/crm_employees/views/res_partner_view.xml @@ -1,20 +1,33 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record model="ir.ui.view" id="view_partner_form_employees"> - <field name="name">Partner form with employees</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="employees_range" - attrs="{'invisible': [('is_company', '=', False)]}"/> - <field name="employees_number" - attrs="{'invisible': [('is_company', '=', False)]}"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="view_partner_form_employees"> + <field name="name">Partner form with employees</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="employees_range" + attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="employees_number" + attrs="{'invisible': [('is_company', '=', False)]}"/> + </field> + </field> +</record> - </data> +<record model="ir.ui.view" id="view_res_partner_filter_employees"> + <field name="name">Partner search with employees</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_res_partner_filter"/> + <field name="arch" type="xml"> + <filter string="Salesperson" position="after"> + <filter string="Emplooyees" + domain="[('is_company','=', True)]" + context="{'group_by': 'employees_range'}"/> + </filter> + </field> +</record> + +</data> </openerp> \ No newline at end of file From 1045ee65d2194c58de7a2d16af83bcdb9bf049e5 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Thu, 16 Apr 2015 16:32:07 +0200 Subject: [PATCH 18/58] [FIX] View fields review --- crm_employees/views/crm_lead_view.xml | 6 ++++-- crm_employees/views/res_partner_view.xml | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/crm_employees/views/crm_lead_view.xml b/crm_employees/views/crm_lead_view.xml index 0b5b25704..c7fff6076 100644 --- a/crm_employees/views/crm_lead_view.xml +++ b/crm_employees/views/crm_lead_view.xml @@ -8,7 +8,8 @@ <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> <field name="arch" type="xml"> <field name="partner_id" position="before"> - <field name="employees_range"/> + <field name="employees_range" placeholder="Employees range" + options='{"no_open": True}'/> <field name="employees_number"/> </field> </field> @@ -20,7 +21,8 @@ <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> <field name="arch" type="xml"> <field name="partner_id" position="before"> - <field name="employees_range"/> + <field name="employees_range" placeholder="Employees range" + options='{"no_open": True}'/> <field name="employees_number"/> </field> </field> diff --git a/crm_employees/views/res_partner_view.xml b/crm_employees/views/res_partner_view.xml index 32a09c1a5..7d31100a5 100644 --- a/crm_employees/views/res_partner_view.xml +++ b/crm_employees/views/res_partner_view.xml @@ -8,8 +8,9 @@ <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> <field name="phone" position="before"> - <field name="employees_range" - attrs="{'invisible': [('is_company', '=', False)]}"/> + <field name="employees_range" placeholder="Employees range" + attrs="{'invisible': [('is_company', '=', False)]}" + options='{"no_open": True}'/> <field name="employees_number" attrs="{'invisible': [('is_company', '=', False)]}"/> </field> From d5257c7d88cca52804491bbb0a32c9981e774fde Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Fri, 22 May 2015 09:29:19 +0200 Subject: [PATCH 19/58] [FIX] Add new record on top of the list --- crm_employees/views/crm_employees_range_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_employees/views/crm_employees_range_view.xml b/crm_employees/views/crm_employees_range_view.xml index 039fd0a7b..7deca9816 100644 --- a/crm_employees/views/crm_employees_range_view.xml +++ b/crm_employees/views/crm_employees_range_view.xml @@ -13,7 +13,7 @@ <field name="name">CRM employees_range tree</field> <field name="model">crm.employees_range</field> <field name="arch" type="xml"> - <tree string="Employees ranges" editable="bottom"> + <tree string="Employees ranges" editable="top"> <field name="name"/> </tree> </field> From 8786779495b520b27d4c5f266b22ac28946747a5 Mon Sep 17 00:00:00 2001 From: Javier Iniesta <javieria@antiun.com> Date: Wed, 27 May 2015 12:00:23 +0200 Subject: [PATCH 20/58] [IMP] Updated translations --- crm_employees/i18n/crm_employees.pot | 35 ++++++++++--------------- crm_employees/i18n/es.po | 39 ++++++++++++---------------- 2 files changed, 30 insertions(+), 44 deletions(-) diff --git a/crm_employees/i18n/crm_employees.pot b/crm_employees/i18n/crm_employees.pot index 198769332..eaed68cf0 100644 --- a/crm_employees/i18n/crm_employees.pot +++ b/crm_employees/i18n/crm_employees.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-24 11:53+0000\n" -"PO-Revision-Date: 2015-03-24 11:53+0000\n" +"POT-Creation-Date: 2015-05-27 08:57+0000\n" +"PO-Revision-Date: 2015-05-27 08:57+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -15,11 +15,6 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: crm_employees -#: field:crm.employees_range,children:0 -msgid "Children" -msgstr "" - #. module: crm_employees #: field:crm.employees_range,create_uid:0 msgid "Created by" @@ -30,6 +25,11 @@ msgstr "" msgid "Created on" msgstr "" +#. module: crm_employees +#: view:res.partner:crm_employees.view_res_partner_filter_employees +msgid "Emplooyees" +msgstr "" + #. module: crm_employees #: field:crm.lead,employees_number:0 #: field:res.partner,employees_number:0 @@ -37,8 +37,11 @@ msgid "Employees number" msgstr "" #. module: crm_employees +#: view:crm.lead:crm_employees.crm_case_form_view_leads_employees +#: view:crm.lead:crm_employees.crm_case_form_view_oppor_employees #: field:crm.lead,employees_range:0 #: model:ir.model,name:crm_employees.model_crm_employees_range +#: view:res.partner:crm_employees.view_partner_form_employees #: field:res.partner,employees_range:0 msgid "Employees range" msgstr "" @@ -76,22 +79,12 @@ msgid "Name" msgstr "" #. module: crm_employees -#: field:crm.employees_range,parent_left:0 -msgid "Parent Left" -msgstr "" - -#. module: crm_employees -#: field:crm.employees_range,parent_right:0 -msgid "Parent Right" -msgstr "" - -#. module: crm_employees -#: field:crm.employees_range,parent_id:0 -msgid "Parent id" +#: model:ir.model,name:crm_employees.model_res_partner +msgid "Partner" msgstr "" #. module: crm_employees -#: model:ir.model,name:crm_employees.model_res_partner -msgid "Partner" +#: view:res.partner:crm_employees.view_res_partner_filter_employees +msgid "Salesperson" msgstr "" diff --git a/crm_employees/i18n/es.po b/crm_employees/i18n/es.po index 77bbddff3..b0d153863 100644 --- a/crm_employees/i18n/es.po +++ b/crm_employees/i18n/es.po @@ -1,13 +1,13 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_employees +# * crm_employees # msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-24 11:53+0000\n" -"PO-Revision-Date: 2015-03-24 11:53+0000\n" +"POT-Creation-Date: 2015-05-27 08:57+0000\n" +"PO-Revision-Date: 2015-05-27 08:57+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -15,11 +15,6 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: crm_employees -#: field:crm.employees_range,children:0 -msgid "Children" -msgstr "Hijos" - #. module: crm_employees #: field:crm.employees_range,create_uid:0 msgid "Created by" @@ -30,6 +25,11 @@ msgstr "Creado por" msgid "Created on" msgstr "Creado en" +#. module: crm_employees +#: view:res.partner:crm_employees.view_res_partner_filter_employees +msgid "Emplooyees" +msgstr "Empleados" + #. module: crm_employees #: field:crm.lead,employees_number:0 #: field:res.partner,employees_number:0 @@ -37,8 +37,11 @@ msgid "Employees number" msgstr "Número de empleados" #. module: crm_employees +#: view:crm.lead:crm_employees.crm_case_form_view_leads_employees +#: view:crm.lead:crm_employees.crm_case_form_view_oppor_employees #: field:crm.lead,employees_range:0 #: model:ir.model,name:crm_employees.model_crm_employees_range +#: view:res.partner:crm_employees.view_partner_form_employees #: field:res.partner,employees_range:0 msgid "Employees range" msgstr "Rango de empleados" @@ -75,23 +78,13 @@ msgstr "Iniciativa/Oportunidad" msgid "Name" msgstr "Nombre" -#. module: crm_employees -#: field:crm.employees_range,parent_left:0 -msgid "Parent Left" -msgstr "Padre izquierdo" - -#. module: crm_employees -#: field:crm.employees_range,parent_right:0 -msgid "Parent Right" -msgstr "Padre derecho" - -#. module: crm_employees -#: field:crm.employees_range,parent_id:0 -msgid "Parent id" -msgstr "ID del padre" - #. module: crm_employees #: model:ir.model,name:crm_employees.model_res_partner msgid "Partner" msgstr "Empresa" +#. module: crm_employees +#: view:res.partner:crm_employees.view_res_partner_filter_employees +msgid "Salesperson" +msgstr "Comercial" + From a7a09d9e9deee806ae5b313f5b47bd47417c67f4 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antespi@gmail.com> Date: Wed, 1 Jul 2015 13:32:14 +0200 Subject: [PATCH 21/58] Renaming several views to complain best practices --- crm_employees/views/crm_lead_view.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crm_employees/views/crm_lead_view.xml b/crm_employees/views/crm_lead_view.xml index c7fff6076..150ad404c 100644 --- a/crm_employees/views/crm_lead_view.xml +++ b/crm_employees/views/crm_lead_view.xml @@ -2,8 +2,8 @@ <openerp> <data> -<record model="ir.ui.view" id="crm_case_form_view_leads_employees"> - <field name="name">CRM - Leads Form with employees</field> +<record model="ir.ui.view" id="crm_case_form_view_leads"> + <field name="name">Add employees field</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> <field name="arch" type="xml"> @@ -15,8 +15,8 @@ </field> </record> -<record model="ir.ui.view" id="crm_case_form_view_oppor_employees"> - <field name="name">CRM - Leads Form with employees</field> +<record model="ir.ui.view" id="crm_case_form_view_oppor"> + <field name="name">Add employees field</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> <field name="arch" type="xml"> From 1630652d51ca14111e074c4cbc19afd71236be12 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Thu, 17 Dec 2015 17:26:58 +0100 Subject: [PATCH 22/58] Rename module to partner_employee_amount. --- .../README.rst | 0 .../__init__.py | 0 .../__openerp__.py | 0 .../i18n/crm_employees.pot | 0 .../i18n/es.po | 0 .../models/__init__.py | 0 .../models/crm_employees_range.py | 0 .../models/crm_lead.py | 0 .../models/res_partner.py | 0 .../security/ir.model.access.csv | 0 .../static/description/icon.png | Bin .../views/crm_employees_range_view.xml | 0 .../views/crm_lead_view.xml | 0 .../views/res_partner_view.xml | 0 14 files changed, 0 insertions(+), 0 deletions(-) rename {crm_employees => partner_employee_amount}/README.rst (100%) rename {crm_employees => partner_employee_amount}/__init__.py (100%) rename {crm_employees => partner_employee_amount}/__openerp__.py (100%) rename {crm_employees => partner_employee_amount}/i18n/crm_employees.pot (100%) rename {crm_employees => partner_employee_amount}/i18n/es.po (100%) rename {crm_employees => partner_employee_amount}/models/__init__.py (100%) rename {crm_employees => partner_employee_amount}/models/crm_employees_range.py (100%) rename {crm_employees => partner_employee_amount}/models/crm_lead.py (100%) rename {crm_employees => partner_employee_amount}/models/res_partner.py (100%) rename {crm_employees => partner_employee_amount}/security/ir.model.access.csv (100%) rename {crm_employees => partner_employee_amount}/static/description/icon.png (100%) rename {crm_employees => partner_employee_amount}/views/crm_employees_range_view.xml (100%) rename {crm_employees => partner_employee_amount}/views/crm_lead_view.xml (100%) rename {crm_employees => partner_employee_amount}/views/res_partner_view.xml (100%) diff --git a/crm_employees/README.rst b/partner_employee_amount/README.rst similarity index 100% rename from crm_employees/README.rst rename to partner_employee_amount/README.rst diff --git a/crm_employees/__init__.py b/partner_employee_amount/__init__.py similarity index 100% rename from crm_employees/__init__.py rename to partner_employee_amount/__init__.py diff --git a/crm_employees/__openerp__.py b/partner_employee_amount/__openerp__.py similarity index 100% rename from crm_employees/__openerp__.py rename to partner_employee_amount/__openerp__.py diff --git a/crm_employees/i18n/crm_employees.pot b/partner_employee_amount/i18n/crm_employees.pot similarity index 100% rename from crm_employees/i18n/crm_employees.pot rename to partner_employee_amount/i18n/crm_employees.pot diff --git a/crm_employees/i18n/es.po b/partner_employee_amount/i18n/es.po similarity index 100% rename from crm_employees/i18n/es.po rename to partner_employee_amount/i18n/es.po diff --git a/crm_employees/models/__init__.py b/partner_employee_amount/models/__init__.py similarity index 100% rename from crm_employees/models/__init__.py rename to partner_employee_amount/models/__init__.py diff --git a/crm_employees/models/crm_employees_range.py b/partner_employee_amount/models/crm_employees_range.py similarity index 100% rename from crm_employees/models/crm_employees_range.py rename to partner_employee_amount/models/crm_employees_range.py diff --git a/crm_employees/models/crm_lead.py b/partner_employee_amount/models/crm_lead.py similarity index 100% rename from crm_employees/models/crm_lead.py rename to partner_employee_amount/models/crm_lead.py diff --git a/crm_employees/models/res_partner.py b/partner_employee_amount/models/res_partner.py similarity index 100% rename from crm_employees/models/res_partner.py rename to partner_employee_amount/models/res_partner.py diff --git a/crm_employees/security/ir.model.access.csv b/partner_employee_amount/security/ir.model.access.csv similarity index 100% rename from crm_employees/security/ir.model.access.csv rename to partner_employee_amount/security/ir.model.access.csv diff --git a/crm_employees/static/description/icon.png b/partner_employee_amount/static/description/icon.png similarity index 100% rename from crm_employees/static/description/icon.png rename to partner_employee_amount/static/description/icon.png diff --git a/crm_employees/views/crm_employees_range_view.xml b/partner_employee_amount/views/crm_employees_range_view.xml similarity index 100% rename from crm_employees/views/crm_employees_range_view.xml rename to partner_employee_amount/views/crm_employees_range_view.xml diff --git a/crm_employees/views/crm_lead_view.xml b/partner_employee_amount/views/crm_lead_view.xml similarity index 100% rename from crm_employees/views/crm_lead_view.xml rename to partner_employee_amount/views/crm_lead_view.xml diff --git a/crm_employees/views/res_partner_view.xml b/partner_employee_amount/views/res_partner_view.xml similarity index 100% rename from crm_employees/views/res_partner_view.xml rename to partner_employee_amount/views/res_partner_view.xml From 766c09b3086730daf457642202be26a58143c624 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Thu, 17 Dec 2015 17:39:34 +0100 Subject: [PATCH 23/58] Prepare for OCA. - Shorter copyright & license headers. - Remove all CRM functionality & dependencies. - Move fields to Sales & Purchases tab. - Remove pot. - Probably something more. --- partner_employee_amount/README.rst | 69 ++++++++++++-- partner_employee_amount/__init__.py | 8 +- partner_employee_amount/__openerp__.py | 37 +++----- .../i18n/crm_employees.pot | 90 ------------------- partner_employee_amount/models/__init__.py | 10 +-- .../models/crm_employees_range.py | 12 --- partner_employee_amount/models/crm_lead.py | 26 ------ partner_employee_amount/models/res_partner.py | 25 ++++-- .../security/ir.model.access.csv | 8 +- .../views/crm_employees_range_view.xml | 29 ------ .../views/crm_lead_view.xml | 32 ------- ...res_partner_employee_amount_range_view.xml | 27 ++++++ .../views/res_partner_view.xml | 21 ++--- 13 files changed, 143 insertions(+), 251 deletions(-) delete mode 100644 partner_employee_amount/i18n/crm_employees.pot delete mode 100644 partner_employee_amount/models/crm_employees_range.py delete mode 100644 partner_employee_amount/models/crm_lead.py delete mode 100644 partner_employee_amount/views/crm_employees_range_view.xml delete mode 100644 partner_employee_amount/views/crm_lead_view.xml create mode 100644 partner_employee_amount/views/res_partner_employee_amount_range_view.xml diff --git a/partner_employee_amount/README.rst b/partner_employee_amount/README.rst index 51ffa3ece..8b344ed7c 100644 --- a/partner_employee_amount/README.rst +++ b/partner_employee_amount/README.rst @@ -1,13 +1,72 @@ -Employees in CRM -================ +.. 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 -This module allows to set employees amount and employees ranges for companies -in the CRM main objects (lead, opportunity, partner), and propagate them through -the workflow. +=========================== +Employee amount in partners +=========================== + +This module allows to set employee amount for partners, and categorize them by +ranges. + +Configuration +============= + +To manage available ranges, you need to: + +* Go to *Sales > Configuration > Address Book > Ranges by amount of employees*. + +Usage +===== + +To use this module, you need to: + +* Go to any partner's form. +* Enable *Is company?*. +* Go to *Sales & Purchases > Employee amount*. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/134/8.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +<https://github.com/OCA/partner-contact/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 +<https://github.com/OCA/ +partner-contact/issues/new?body=module:%20 +partner_employee_amount%0Aversion:%20 +8.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. Credits ======= +Images +------ + +* `Antiun Ingeniería S.L. <http://www.antiun.com>`_: Icon. + Contributors ------------ + * Antonio Espinosa <antonioea@antiun.com> +* Rafael Blasco <rafabn@antiun.com> +* Jairo Llopis <yajo.sk8@gmail.com> + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://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 https://odoo-community.org. diff --git a/partner_employee_amount/__init__.py b/partner_employee_amount/__init__.py index 054c8853d..8e6d7e45a 100644 --- a/partner_employee_amount/__init__.py +++ b/partner_employee_amount/__init__.py @@ -1,6 +1,6 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models diff --git a/partner_employee_amount/__openerp__.py b/partner_employee_amount/__openerp__.py index fe43bfcce..1c3ef7dbc 100644 --- a/partner_employee_amount/__openerp__.py +++ b/partner_employee_amount/__openerp__.py @@ -1,39 +1,22 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Odoo Source Management Solution -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa <antonioea@antiun.com> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## +# -*- coding: utf-8 -*- +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Employees in CRM', - 'version': '1.0', + 'name': 'Employee amount in partners', + 'summary': 'Know how many employees a partner has', + 'version': '8.0.1.0.0', 'category': 'Customer Relationship Management', 'author': 'Antiun Ingeniería S.L.', 'website': 'http://www.antiun.com', 'depends': [ - 'crm', + 'base', ], 'data': [ - 'views/crm_employees_range_view.xml', - 'views/crm_lead_view.xml', - 'views/res_partner_view.xml', 'security/ir.model.access.csv', + 'views/res_partner_employee_amount_range_view.xml', + 'views/res_partner_view.xml', ], "installable": True, } diff --git a/partner_employee_amount/i18n/crm_employees.pot b/partner_employee_amount/i18n/crm_employees.pot deleted file mode 100644 index eaed68cf0..000000000 --- a/partner_employee_amount/i18n/crm_employees.pot +++ /dev/null @@ -1,90 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * crm_employees -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 08:57+0000\n" -"PO-Revision-Date: 2015-05-27 08:57+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_employees -#: field:crm.employees_range,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: crm_employees -#: field:crm.employees_range,create_date:0 -msgid "Created on" -msgstr "" - -#. module: crm_employees -#: view:res.partner:crm_employees.view_res_partner_filter_employees -msgid "Emplooyees" -msgstr "" - -#. module: crm_employees -#: field:crm.lead,employees_number:0 -#: field:res.partner,employees_number:0 -msgid "Employees number" -msgstr "" - -#. module: crm_employees -#: view:crm.lead:crm_employees.crm_case_form_view_leads_employees -#: view:crm.lead:crm_employees.crm_case_form_view_oppor_employees -#: field:crm.lead,employees_range:0 -#: model:ir.model,name:crm_employees.model_crm_employees_range -#: view:res.partner:crm_employees.view_partner_form_employees -#: field:res.partner,employees_range:0 -msgid "Employees range" -msgstr "" - -#. module: crm_employees -#: view:crm.employees_range:crm_employees.crm_employees_range_tree_view -#: model:ir.actions.act_window,name:crm_employees.crm_employees_range_action -#: model:ir.ui.menu,name:crm_employees.menu_crm_employees_range -msgid "Employees ranges" -msgstr "" - -#. module: crm_employees -#: field:crm.employees_range,id:0 -msgid "ID" -msgstr "" - -#. module: crm_employees -#: field:crm.employees_range,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: crm_employees -#: field:crm.employees_range,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: crm_employees -#: model:ir.model,name:crm_employees.model_crm_lead -msgid "Lead/Opportunity" -msgstr "" - -#. module: crm_employees -#: field:crm.employees_range,name:0 -msgid "Name" -msgstr "" - -#. module: crm_employees -#: model:ir.model,name:crm_employees.model_res_partner -msgid "Partner" -msgstr "" - -#. module: crm_employees -#: view:res.partner:crm_employees.view_res_partner_filter_employees -msgid "Salesperson" -msgstr "" - diff --git a/partner_employee_amount/models/__init__.py b/partner_employee_amount/models/__init__.py index 60471a1ff..44ab9476e 100644 --- a/partner_employee_amount/models/__init__.py +++ b/partner_employee_amount/models/__init__.py @@ -1,8 +1,6 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import crm_employees_range -from . import crm_lead from . import res_partner diff --git a/partner_employee_amount/models/crm_employees_range.py b/partner_employee_amount/models/crm_employees_range.py deleted file mode 100644 index 0703e83b0..000000000 --- a/partner_employee_amount/models/crm_employees_range.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmEmployeesRange(models.Model): - _name = 'crm.employees_range' - _description = "Employees range" - - name = fields.Char(required=True, translate=True) diff --git a/partner_employee_amount/models/crm_lead.py b/partner_employee_amount/models/crm_lead.py deleted file mode 100644 index 60e9f7fce..000000000 --- a/partner_employee_amount/models/crm_lead.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmLead(models.Model): - _inherit = 'crm.lead' - - employees_range = fields.Many2one(comodel_name='crm.employees_range') - employees_number = fields.Integer() - - def _lead_create_contact(self, cr, uid, lead, name, is_company, - parent_id=False, context=None): - """Propagate employees_range and employees_number to created partner. - """ - partner_id = super(CrmLead, self)._lead_create_contact( - cr, uid, lead, name, is_company, parent_id=parent_id, - context=context) - self.pool['res.partner'].write( - cr, uid, partner_id, { - 'employees_range': lead.employees_range.id, - 'employees_number': lead.employees_number - }, context=context) - return partner_id diff --git a/partner_employee_amount/models/res_partner.py b/partner_employee_amount/models/res_partner.py index 53b3f5e24..ff79d6586 100644 --- a/partner_employee_amount/models/res_partner.py +++ b/partner_employee_amount/models/res_partner.py @@ -1,12 +1,25 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from openerp import models, fields class ResPartner(models.Model): _inherit = 'res.partner' - employees_range = fields.Many2one(comodel_name='crm.employees_range') - employees_number = fields.Integer() + employee_amount = fields.Integer( + oldname="employees_number") + employee_amount_range_id = fields.Many2one( + "res.partner.employee_amount_range", + "Employee amount range", + help="Range of this partner depending on the employee amount.", + oldname="employees_range") + + +class ResPartnerEmployeeAmountRange(models.Model): + _name = "res.partner.employee_amount_range" + _description = "Partner employee amount range" + + name = fields.Char(required=True, translate=True) diff --git a/partner_employee_amount/security/ir.model.access.csv b/partner_employee_amount/security/ir.model.access.csv index 01adc1025..883a0d119 100644 --- a/partner_employee_amount/security/ir.model.access.csv +++ b/partner_employee_amount/security/ir.model.access.csv @@ -1,5 +1,5 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_crm_employees_public","crm_employees_range group_public","model_crm_employees_range","base.group_public",1,0,0,0 -"access_crm_employees_portal","crm_employees_range group_portal","model_crm_employees_range","base.group_portal",1,0,0,0 -"access_crm_employees_group_partner_manager","crm_employees_range group_partner_manager","model_crm_employees_range","base.group_partner_manager",1,1,1,1 -"access_crm_employees_group_user","crm_employees_range group_user","model_crm_employees_range","base.group_user",1,0,0,0 +"access_res_partner_employee_amount_range_public","res_partner_employee_amount_range group_public","model_res_partner_employee_amount_range","base.group_public",1,0,0,0 +"access_res_partner_employee_amount_range_portal","res_partner_employee_amount_range group_portal","model_res_partner_employee_amount_range","base.group_portal",1,0,0,0 +"access_res_partner_employee_amount_range_group_partner_manager","res_partner_employee_amount_range group_partner_manager","model_res_partner_employee_amount_range","base.group_partner_manager",1,1,1,1 +"access_res_partner_employee_amount_range_group_user","res_partner_employee_amount_range group_user","model_res_partner_employee_amount_range","base.group_user",1,0,0,0 diff --git a/partner_employee_amount/views/crm_employees_range_view.xml b/partner_employee_amount/views/crm_employees_range_view.xml deleted file mode 100644 index 7deca9816..000000000 --- a/partner_employee_amount/views/crm_employees_range_view.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record id="crm_employees_range_action" model="ir.actions.act_window"> - <field name="name">Employees ranges</field> - <field name="res_model">crm.employees_range</field> - <field name="view_type">form</field> - <field name="view_mode">tree</field> -</record> - -<record id="crm_employees_range_tree_view" model="ir.ui.view"> - <field name="name">CRM employees_range tree</field> - <field name="model">crm.employees_range</field> - <field name="arch" type="xml"> - <tree string="Employees ranges" editable="top"> - <field name="name"/> - </tree> - </field> -</record> - -<menuitem action="crm_employees_range_action" - id="menu_crm_employees_range" - name="Employees ranges" - parent="base.menu_crm_config_lead" - sequence="5"/> - -</data> -</openerp> \ No newline at end of file diff --git a/partner_employee_amount/views/crm_lead_view.xml b/partner_employee_amount/views/crm_lead_view.xml deleted file mode 100644 index 150ad404c..000000000 --- a/partner_employee_amount/views/crm_lead_view.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record model="ir.ui.view" id="crm_case_form_view_leads"> - <field name="name">Add employees field</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> - <field name="arch" type="xml"> - <field name="partner_id" position="before"> - <field name="employees_range" placeholder="Employees range" - options='{"no_open": True}'/> - <field name="employees_number"/> - </field> - </field> -</record> - -<record model="ir.ui.view" id="crm_case_form_view_oppor"> - <field name="name">Add employees field</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> - <field name="arch" type="xml"> - <field name="partner_id" position="before"> - <field name="employees_range" placeholder="Employees range" - options='{"no_open": True}'/> - <field name="employees_number"/> - </field> - </field> -</record> - -</data> -</openerp> \ No newline at end of file diff --git a/partner_employee_amount/views/res_partner_employee_amount_range_view.xml b/partner_employee_amount/views/res_partner_employee_amount_range_view.xml new file mode 100644 index 000000000..03d580af9 --- /dev/null +++ b/partner_employee_amount/views/res_partner_employee_amount_range_view.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + +<record id="employees_range_action" model="ir.actions.act_window"> + <field name="name">Ranges by amount of employees</field> + <field name="res_model">res.partner.employee_amount_range</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> +</record> + +<record id="employees_range_tree_view" model="ir.ui.view"> + <field name="name">Amount of employees ranges tree</field> + <field name="model">res.partner.employee_amount_range</field> + <field name="arch" type="xml"> + <tree string="Ranges by amount of employees" editable="top"> + <field name="name"/> + </tree> + </field> +</record> + +<menuitem action="employees_range_action" + id="menu_employees_range" + parent="base.menu_config_address_book"/> + +</data> +</openerp> diff --git a/partner_employee_amount/views/res_partner_view.xml b/partner_employee_amount/views/res_partner_view.xml index 7d31100a5..133061a2a 100644 --- a/partner_employee_amount/views/res_partner_view.xml +++ b/partner_employee_amount/views/res_partner_view.xml @@ -7,13 +7,14 @@ <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="employees_range" placeholder="Employees range" - attrs="{'invisible': [('is_company', '=', False)]}" - options='{"no_open": True}'/> - <field name="employees_number" - attrs="{'invisible': [('is_company', '=', False)]}"/> - </field> + <xpath expr="//page[@name='sales_purchases']/group"> + <group name="employee_amount" + string="Employee amount" + attrs="{'invisible': [('is_company', '=', False)]}"> + <field name="employee_amount"/> + <field name="employee_amount_range_id"/> + </group> + </xpath> </field> </record> @@ -23,12 +24,12 @@ <field name="inherit_id" ref="base.view_res_partner_filter"/> <field name="arch" type="xml"> <filter string="Salesperson" position="after"> - <filter string="Emplooyees" + <filter string="Employees" domain="[('is_company','=', True)]" - context="{'group_by': 'employees_range'}"/> + context="{'group_by': 'employee_amount_range_id'}"/> </filter> </field> </record> </data> -</openerp> \ No newline at end of file +</openerp> From b073c336b009f2fd5cc569ba7b8bca633d11ba35 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Fri, 18 Dec 2015 16:52:05 +0100 Subject: [PATCH 24/58] Add currency, fix view, rename capital_country. --- partner_capital/models/res_partner.py | 6 +++++- partner_capital/views/res_partner_view.xml | 22 ++++++++++------------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/partner_capital/models/res_partner.py b/partner_capital/models/res_partner.py index a32973a69..8adc35fe0 100644 --- a/partner_capital/models/res_partner.py +++ b/partner_capital/models/res_partner.py @@ -9,14 +9,18 @@ from openerp import models, fields class ResPartner(models.Model): _inherit = 'res.partner' - capital_country = fields.Many2one( + capital_country_id = fields.Many2one( 'res.country', "Capital country", + oldname="capital_country", help="Country of origin of this company's capital.") capital_amount = fields.Float( "Capital amount", oldname="capital_amount", help="Publicly registered capital amount.") + capital_currency_id = fields.Many2one( + "res.currency", + string="Capital currency") turnover_range_id = fields.Many2one( 'res.partner.turnover_range', "Turnover range", diff --git a/partner_capital/views/res_partner_view.xml b/partner_capital/views/res_partner_view.xml index ab192466f..f5683d59f 100644 --- a/partner_capital/views/res_partner_view.xml +++ b/partner_capital/views/res_partner_view.xml @@ -11,18 +11,16 @@ <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> - <xpath expr="//page[@name='sales_purchases']" position="inside"> - <group name="captial" string="Capital"> - <field name="capital_country" - attrs="{'invisible': [('is_company', '=', False)]}"/> - <field name="capital_amount" - attrs="{'invisible': [('is_company', '=', False)]}"/> - <field name="turnover_range_id" - attrs="{'invisible': [('is_company', '=', False)]}"/> - <field name="turnover_amount" - attrs="{'invisible': [('is_company', '=', False)]}"/> - <field name="company_size" - attrs="{'invisible': [('is_company', '=', False)]}"/> + <xpath expr="//page[@name='sales_purchases']/group"> + <group name="captial" + string="Capital" + attrs="{'invisible': [('is_company', '=', False)]}"> + <field name="capital_country_id"/> + <field name="capital_amount"/> + <field name="capital_currency_id"/> + <field name="turnover_range_id"/> + <field name="turnover_amount"/> + <field name="company_size"/> </group> </xpath> </field> From 21f28db1bf581b6e0ba26ef0f9f2730b9e138ac0 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Sat, 21 Feb 2015 20:31:12 +0100 Subject: [PATCH 25/58] Addon crm_job_position --- crm_job_position/README.rst | 13 +++ crm_job_position/__init__.py | 6 ++ crm_job_position/__openerp__.py | 39 ++++++++ crm_job_position/i18n/crm_job_position.pot | 90 ++++++++++++++++++ crm_job_position/i18n/es.po | 90 ++++++++++++++++++ crm_job_position/models/__init__.py | 8 ++ crm_job_position/models/crm_job_position.py | 20 ++++ crm_job_position/models/crm_lead.py | 26 +++++ crm_job_position/models/res_partner.py | 13 +++ crm_job_position/static/description/icon.png | Bin 0 -> 22620 bytes .../views/crm_job_position_view.xml | 30 ++++++ crm_job_position/views/crm_lead_view.xml | 86 +++++++++++++++++ crm_job_position/views/res_partner_view.xml | 48 ++++++++++ 13 files changed, 469 insertions(+) create mode 100644 crm_job_position/README.rst create mode 100644 crm_job_position/__init__.py create mode 100644 crm_job_position/__openerp__.py create mode 100644 crm_job_position/i18n/crm_job_position.pot create mode 100644 crm_job_position/i18n/es.po create mode 100644 crm_job_position/models/__init__.py create mode 100644 crm_job_position/models/crm_job_position.py create mode 100644 crm_job_position/models/crm_lead.py create mode 100644 crm_job_position/models/res_partner.py create mode 100644 crm_job_position/static/description/icon.png create mode 100644 crm_job_position/views/crm_job_position_view.xml create mode 100644 crm_job_position/views/crm_lead_view.xml create mode 100644 crm_job_position/views/res_partner_view.xml diff --git a/crm_job_position/README.rst b/crm_job_position/README.rst new file mode 100644 index 000000000..31fbf7ba6 --- /dev/null +++ b/crm_job_position/README.rst @@ -0,0 +1,13 @@ +Job positions in CRM +==================== + +This module adds the concept of job position to the CRM main objects (lead, +opportunity, partner), and propagate them through the workflow. + +Credits +======= + +Contributors +------------ +* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +* Antonio Espinosa <antonioea@antiun.com> diff --git a/crm_job_position/__init__.py b/crm_job_position/__init__.py new file mode 100644 index 000000000..054c8853d --- /dev/null +++ b/crm_job_position/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import models diff --git a/crm_job_position/__openerp__.py b/crm_job_position/__openerp__.py new file mode 100644 index 000000000..311e1d6c4 --- /dev/null +++ b/crm_job_position/__openerp__.py @@ -0,0 +1,39 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Odoo Source Management Solution +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + 'name': 'Job positions in CRM', + 'version': '1.0', + 'category': 'Customer Relationship Management', + 'author': 'Serv. Tecnolog. Avanzados - Pedro M. Baeza, ' + 'Antiun Ingeniería S.L.', + 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', + 'depends': [ + 'crm', + ], + 'data': [ + 'views/crm_job_position_view.xml', + 'views/crm_lead_view.xml', + 'views/res_partner_view.xml', + ], + "installable": True, +} diff --git a/crm_job_position/i18n/crm_job_position.pot b/crm_job_position/i18n/crm_job_position.pot new file mode 100644 index 000000000..620e822d0 --- /dev/null +++ b/crm_job_position/i18n/crm_job_position.pot @@ -0,0 +1,90 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_job_position +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-24 13:47+0000\n" +"PO-Revision-Date: 2015-01-24 13:47+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_job_position +#: field:crm.job_position,children:0 +msgid "Children" +msgstr "" + +#. module: crm_job_position +#: field:crm.job_position,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: crm_job_position +#: field:crm.job_position,create_date:0 +msgid "Created on" +msgstr "" + +#. module: crm_job_position +#: field:crm.job_position,id:0 +msgid "ID" +msgstr "" + +#. module: crm_job_position +#: field:crm.job_position,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: crm_job_position +#: field:crm.job_position,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: crm_job_position +#: field:crm.job_position,name:0 +msgid "Name" +msgstr "" + +#. module: crm_job_position +#: field:crm.job_position,parent_left:0 +msgid "Parent Left" +msgstr "" + +#. module: crm_job_position +#: field:crm.job_position,parent_right:0 +msgid "Parent Right" +msgstr "" + +#. module: crm_job_position +#: field:crm.job_position,parent_id:0 +msgid "Parent id" +msgstr "" + +#. module: crm_job_position +#: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position +#: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position +#: field:crm.lead,job_position:0 +#: model:ir.model,name:crm_job_position.model_crm_job_position +#: view:res.partner:crm_job_position.view_res_partner_filter_job_position +#: field:res.partner,job_position:0 +msgid "Job position" +msgstr "" + +#. module: crm_job_position +#: field:crm.lead,function:0 +#: field:res.partner,function:0 +msgid "Detailed job position" +msgstr "" + +#. module: crm_job_position +#: view:crm.job_position:crm_job_position.crm_job_position_tree_view +#: model:ir.actions.act_window,name:crm_job_position.crm_job_position_action +#: model:ir.ui.menu,name:crm_job_position.menu_crm_job_position +msgid "Job positions" +msgstr "" + diff --git a/crm_job_position/i18n/es.po b/crm_job_position/i18n/es.po new file mode 100644 index 000000000..9568802e5 --- /dev/null +++ b/crm_job_position/i18n/es.po @@ -0,0 +1,90 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_job_position +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-24 13:47+0000\n" +"PO-Revision-Date: 2015-01-24 13:47+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_job_position +#: field:crm.job_position,children:0 +msgid "Children" +msgstr "Hijos" + +#. module: crm_job_position +#: field:crm.job_position,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: crm_job_position +#: field:crm.job_position,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: crm_job_position +#: field:crm.job_position,id:0 +msgid "ID" +msgstr "ID" + +#. module: crm_job_position +#: field:crm.job_position,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: crm_job_position +#: field:crm.job_position,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: crm_job_position +#: field:crm.job_position,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: crm_job_position +#: field:crm.job_position,parent_left:0 +msgid "Parent Left" +msgstr "Padre izquierdo" + +#. module: crm_job_position +#: field:crm.job_position,parent_right:0 +msgid "Parent Right" +msgstr "Padre derecho" + +#. module: crm_job_position +#: field:crm.job_position,parent_id:0 +msgid "Parent id" +msgstr "ID del padre" + +#. module: crm_job_position +#: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position +#: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position +#: field:crm.lead,job_position:0 +#: model:ir.model,name:crm_job_position.model_crm_job_position +#: view:res.partner:crm_job_position.view_res_partner_filter_job_position +#: field:res.partner,job_position:0 +msgid "Job position" +msgstr "Puesto de trabajo" + +#. module: crm_job_position +#: field:crm.lead,function:0 +#: field:res.partner,function:0 +msgid "Detailed job position" +msgstr "Puesto de trabajo detallado" + +#. module: crm_job_position +#: view:crm.job_position:crm_job_position.crm_job_position_tree_view +#: model:ir.actions.act_window,name:crm_job_position.crm_job_position_action +#: model:ir.ui.menu,name:crm_job_position.menu_crm_job_position +msgid "Job positions" +msgstr "Puestos de trabajo" + diff --git a/crm_job_position/models/__init__.py b/crm_job_position/models/__init__.py new file mode 100644 index 000000000..0ab7c4ce5 --- /dev/null +++ b/crm_job_position/models/__init__.py @@ -0,0 +1,8 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import crm_job_position +from . import crm_lead +from . import res_partner diff --git a/crm_job_position/models/crm_job_position.py b/crm_job_position/models/crm_job_position.py new file mode 100644 index 000000000..665425d51 --- /dev/null +++ b/crm_job_position/models/crm_job_position.py @@ -0,0 +1,20 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmJobPosition(models.Model): + _name = 'crm.job_position' + _order = "parent_left" + _parent_order = "name" + _parent_store = True + _description = "Job position" + + name = fields.Char(required=True) + parent_id = fields.Many2one(comodel_name='crm.job_position') + children = fields.One2many(comodel_name='crm.job_position', + inverse_name='parent_id') + parent_left = fields.Integer('Parent Left', select=True) + parent_right = fields.Integer('Parent Right', select=True) diff --git a/crm_job_position/models/crm_lead.py b/crm_job_position/models/crm_lead.py new file mode 100644 index 000000000..1fecc91ed --- /dev/null +++ b/crm_job_position/models/crm_lead.py @@ -0,0 +1,26 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmLead(models.Model): + _inherit = 'crm.lead' + + function = fields.Char(string="Detailed job position") + job_position = fields.Many2one(comodel_name='crm.job_position', + string="Job position") + + def _lead_create_contact(self, cr, uid, lead, name, is_company, + parent_id=False, context=None): + """ + Propagate job_position to created partner. + """ + partner_id = super(CrmLead, self)._lead_create_contact( + cr, uid, lead, name, is_company, parent_id=parent_id, + context=context) + self.pool['res.partner'].write( + cr, uid, partner_id, {'job_position': lead.job_position.id}, + context=context) + return partner_id diff --git a/crm_job_position/models/res_partner.py b/crm_job_position/models/res_partner.py new file mode 100644 index 000000000..5a76412d1 --- /dev/null +++ b/crm_job_position/models/res_partner.py @@ -0,0 +1,13 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + function = fields.Char(string="Detailed job position") + job_position = fields.Many2one(comodel_name='crm.job_position', + string="Job position") diff --git a/crm_job_position/static/description/icon.png b/crm_job_position/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..add81b17a4847ff2663923593ecc364587d3dd9f GIT binary patch literal 22620 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%0A{Ckv_A`d0n`sc6nr@&!27fYc51Y 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 P00000NkvXXu0mjfiBcmQ literal 0 HcmV?d00001 diff --git a/crm_job_position/views/crm_job_position_view.xml b/crm_job_position/views/crm_job_position_view.xml new file mode 100644 index 000000000..f5dfce5be --- /dev/null +++ b/crm_job_position/views/crm_job_position_view.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record id="crm_job_position_action" model="ir.actions.act_window"> + <field name="name">Job positions</field> + <field name="res_model">crm.job_position</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> + </record> + + <record id="crm_job_position_tree_view" model="ir.ui.view"> + <field name="name">CRM job_position tree</field> + <field name="model">crm.job_position</field> + <field name="arch" type="xml"> + <tree string="Job positions" editable="bottom"> + <field name="name"/> + <field name="parent_id"/> + </tree> + </field> + </record> + + <menuitem action="crm_job_position_action" + id="menu_crm_job_position" + name="Job positions" + parent="base.menu_crm_config_lead" + sequence="3"/> + + </data> +</openerp> \ No newline at end of file diff --git a/crm_job_position/views/crm_lead_view.xml b/crm_job_position/views/crm_lead_view.xml new file mode 100644 index 000000000..169fdd48c --- /dev/null +++ b/crm_job_position/views/crm_lead_view.xml @@ -0,0 +1,86 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="ir.ui.view" id="crm_case_form_view_leads_job_position"> + <field name="name">CRM - Leads Form with job positions</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> + <field name="arch" type="xml"> + <field name="function" position="before"> + <field name="job_position"/> + </field> + </field> + </record> + + <!-- Uncomment this to add a new column to tree view + <record model="ir.ui.view" id="crm_case_tree_view_leads_job_position"> + <field name="name">Leads with job_position</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_tree_view_leads"/> + <field name="arch" type="xml"> + <field name="function" position="before"> + <field name="job_position"/> + </field> + </field> + </record> + --> + + <record model="ir.ui.view" id="view_crm_case_leads_filter_job_position"> + <field name="name">CRM - Leads Search with job positions</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="job_position"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="job_position" + domain="[]" + context="{'group_by': 'job_position'}"/> + </filter> + </field> + </record> + + <record model="ir.ui.view" id="crm_case_form_view_oppor_job_position"> + <field name="name">CRM - Leads Form with job position</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> + <field name="arch" type="xml"> + <field name="function" position="before"> + <field name="job_position"/> + </field> + </field> + </record> + + <!-- Uncomment this to add a new column to tree view + <record model="ir.ui.view" id="crm_case_tree_view_oppor_job_position"> + <field name="name">Leads with job position</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_tree_view_oppor"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="job_position"/> + </field> + </field> + </record> + --> + + <record model="ir.ui.view" id="view_crm_case_opportunities_filter_job_position"> + <field name="name">CRM - Leads Search with job positions</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="job_position"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="Job position" + domain="[]" + context="{'group_by': 'job_position'}"/> + </filter> + </field> + </record> + + </data> +</openerp> \ No newline at end of file diff --git a/crm_job_position/views/res_partner_view.xml b/crm_job_position/views/res_partner_view.xml new file mode 100644 index 000000000..871411116 --- /dev/null +++ b/crm_job_position/views/res_partner_view.xml @@ -0,0 +1,48 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="ir.ui.view" id="view_partner_form_job_position"> + <field name="name">Partner form with job position</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <field name="function" position="before"> + <field name="job_position" + placeholder="Job position" + attrs="{'invisible': [('is_company','=', True)]}"/> + </field> + </field> + </record> + + <!-- Uncomment this to add a new column to tree view + <record model="ir.ui.view" id="view_partner_tree_job_position"> + <field name="name">Partner tree with job position</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_tree"/> + <field name="arch" type="xml"> + <field name="email" position="after"> + <field name="job_position"/> + </field> + </field> + </record> + --> + + <record model="ir.ui.view" id="view_res_partner_filter_job_position"> + <field name="name">Partner search with job position</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_res_partner_filter"/> + <field name="arch" type="xml"> + <field name="category_id" position="after"> + <field name="job_position"/> + </field> + <filter string="Salesperson" position="after"> + <filter string="Job position" + domain="[]" + context="{'group_by': 'job_position'}"/> + </filter> + </field> + </record> + + </data> +</openerp> \ No newline at end of file From 8f1f6966ed829796e8260e40463c17e024a81829 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Sat, 21 Feb 2015 20:45:43 +0100 Subject: [PATCH 26/58] Add copyright info --- crm_job_position/__openerp__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crm_job_position/__openerp__.py b/crm_job_position/__openerp__.py index 311e1d6c4..0414e0f9a 100644 --- a/crm_job_position/__openerp__.py +++ b/crm_job_position/__openerp__.py @@ -4,6 +4,8 @@ # OpenERP, Odoo Source Management Solution # Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) # Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published From 40e174bbc44d88c8a7200b218820900ae0392791 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Tue, 3 Mar 2015 15:49:11 +0100 Subject: [PATCH 27/58] CRM Job position access rights --- crm_job_position/__openerp__.py | 1 + crm_job_position/security/ir.model.access.csv | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 crm_job_position/security/ir.model.access.csv diff --git a/crm_job_position/__openerp__.py b/crm_job_position/__openerp__.py index 0414e0f9a..61227e13c 100644 --- a/crm_job_position/__openerp__.py +++ b/crm_job_position/__openerp__.py @@ -36,6 +36,7 @@ 'views/crm_job_position_view.xml', 'views/crm_lead_view.xml', 'views/res_partner_view.xml', + 'security/ir.model.access.csv', ], "installable": True, } diff --git a/crm_job_position/security/ir.model.access.csv b/crm_job_position/security/ir.model.access.csv new file mode 100644 index 000000000..bd53556bd --- /dev/null +++ b/crm_job_position/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_crm_job_position_public","crm_job_position group_public","model_crm_job_position","base.group_public",1,0,0,0 +"access_crm_job_position_portal","crm_job_position group_portal","model_crm_job_position","base.group_portal",1,0,0,0 +"access_crm_job_position_group_partner_manager","crm_job_position group_partner_manager","model_crm_job_position","base.group_partner_manager",1,1,1,1 +"access_crm_job_position_group_user","crm_job_position group_user","model_crm_job_position","base.group_user",1,0,0,0 From 3b4322b8de8ffdc691f08fbf7f35e6ec5293f41e Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Fri, 27 Mar 2015 12:53:53 +0100 Subject: [PATCH 28/58] Set some fields as tranlate --- crm_job_position/models/crm_job_position.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_job_position/models/crm_job_position.py b/crm_job_position/models/crm_job_position.py index 665425d51..e03ba74f4 100644 --- a/crm_job_position/models/crm_job_position.py +++ b/crm_job_position/models/crm_job_position.py @@ -12,7 +12,7 @@ class CrmJobPosition(models.Model): _parent_store = True _description = "Job position" - name = fields.Char(required=True) + name = fields.Char(required=True, translate=True) parent_id = fields.Many2one(comodel_name='crm.job_position') children = fields.One2many(comodel_name='crm.job_position', inverse_name='parent_id') From c3d8658ea718c104ac5b0e294ad7d22d1d0455aa Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Wed, 8 Apr 2015 19:34:58 +0200 Subject: [PATCH 29/58] [FIX] XML revised --- .../views/crm_job_position_view.xml | 48 +++--- crm_job_position/views/crm_lead_view.xml | 154 +++++++++--------- crm_job_position/views/res_partner_view.xml | 84 +++++----- 3 files changed, 143 insertions(+), 143 deletions(-) diff --git a/crm_job_position/views/crm_job_position_view.xml b/crm_job_position/views/crm_job_position_view.xml index f5dfce5be..5fda8727c 100644 --- a/crm_job_position/views/crm_job_position_view.xml +++ b/crm_job_position/views/crm_job_position_view.xml @@ -1,30 +1,30 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record id="crm_job_position_action" model="ir.actions.act_window"> - <field name="name">Job positions</field> - <field name="res_model">crm.job_position</field> - <field name="view_type">form</field> - <field name="view_mode">tree</field> - </record> +<record id="crm_job_position_action" model="ir.actions.act_window"> + <field name="name">Job positions</field> + <field name="res_model">crm.job_position</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> +</record> - <record id="crm_job_position_tree_view" model="ir.ui.view"> - <field name="name">CRM job_position tree</field> - <field name="model">crm.job_position</field> - <field name="arch" type="xml"> - <tree string="Job positions" editable="bottom"> - <field name="name"/> - <field name="parent_id"/> - </tree> - </field> - </record> +<record id="crm_job_position_tree_view" model="ir.ui.view"> + <field name="name">CRM job_position tree</field> + <field name="model">crm.job_position</field> + <field name="arch" type="xml"> + <tree string="Job positions" editable="bottom"> + <field name="name"/> + <field name="parent_id"/> + </tree> + </field> +</record> - <menuitem action="crm_job_position_action" - id="menu_crm_job_position" - name="Job positions" - parent="base.menu_crm_config_lead" - sequence="3"/> +<menuitem action="crm_job_position_action" + id="menu_crm_job_position" + name="Job positions" + parent="base.menu_crm_config_lead" + sequence="3"/> - </data> +</data> </openerp> \ No newline at end of file diff --git a/crm_job_position/views/crm_lead_view.xml b/crm_job_position/views/crm_lead_view.xml index 169fdd48c..082be11e6 100644 --- a/crm_job_position/views/crm_lead_view.xml +++ b/crm_job_position/views/crm_lead_view.xml @@ -1,86 +1,86 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record model="ir.ui.view" id="crm_case_form_view_leads_job_position"> - <field name="name">CRM - Leads Form with job positions</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> - <field name="arch" type="xml"> - <field name="function" position="before"> - <field name="job_position"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="crm_case_form_view_leads_job_position"> + <field name="name">CRM - Leads Form with job positions</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> + <field name="arch" type="xml"> + <field name="function" position="before"> + <field name="job_position"/> + </field> + </field> +</record> - <!-- Uncomment this to add a new column to tree view - <record model="ir.ui.view" id="crm_case_tree_view_leads_job_position"> - <field name="name">Leads with job_position</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_tree_view_leads"/> - <field name="arch" type="xml"> - <field name="function" position="before"> - <field name="job_position"/> - </field> - </field> - </record> - --> +<!-- Uncomment this to add a new column to tree view +<record model="ir.ui.view" id="crm_case_tree_view_leads_job_position"> + <field name="name">Leads with job_position</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_tree_view_leads"/> + <field name="arch" type="xml"> + <field name="function" position="before"> + <field name="job_position"/> + </field> + </field> +</record> +--> - <record model="ir.ui.view" id="view_crm_case_leads_filter_job_position"> - <field name="name">CRM - Leads Search with job positions</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="job_position"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="job_position" - domain="[]" - context="{'group_by': 'job_position'}"/> - </filter> - </field> - </record> +<record model="ir.ui.view" id="view_crm_case_leads_filter_job_position"> + <field name="name">CRM - Leads Search with job positions</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="job_position"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="job_position" + domain="[]" + context="{'group_by': 'job_position'}"/> + </filter> + </field> +</record> - <record model="ir.ui.view" id="crm_case_form_view_oppor_job_position"> - <field name="name">CRM - Leads Form with job position</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> - <field name="arch" type="xml"> - <field name="function" position="before"> - <field name="job_position"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="crm_case_form_view_oppor_job_position"> + <field name="name">CRM - Leads Form with job position</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> + <field name="arch" type="xml"> + <field name="function" position="before"> + <field name="job_position"/> + </field> + </field> +</record> - <!-- Uncomment this to add a new column to tree view - <record model="ir.ui.view" id="crm_case_tree_view_oppor_job_position"> - <field name="name">Leads with job position</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_tree_view_oppor"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="job_position"/> - </field> - </field> - </record> - --> +<!-- Uncomment this to add a new column to tree view +<record model="ir.ui.view" id="crm_case_tree_view_oppor_job_position"> + <field name="name">Leads with job position</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_tree_view_oppor"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="job_position"/> + </field> + </field> +</record> +--> - <record model="ir.ui.view" id="view_crm_case_opportunities_filter_job_position"> - <field name="name">CRM - Leads Search with job positions</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="job_position"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="Job position" - domain="[]" - context="{'group_by': 'job_position'}"/> - </filter> - </field> - </record> +<record model="ir.ui.view" id="view_crm_case_opportunities_filter_job_position"> + <field name="name">CRM - Leads Search with job positions</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="job_position"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="Job position" + domain="[]" + context="{'group_by': 'job_position'}"/> + </filter> + </field> +</record> - </data> +</data> </openerp> \ No newline at end of file diff --git a/crm_job_position/views/res_partner_view.xml b/crm_job_position/views/res_partner_view.xml index 871411116..9c3e26250 100644 --- a/crm_job_position/views/res_partner_view.xml +++ b/crm_job_position/views/res_partner_view.xml @@ -1,48 +1,48 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record model="ir.ui.view" id="view_partner_form_job_position"> - <field name="name">Partner form with job position</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> - <field name="arch" type="xml"> - <field name="function" position="before"> - <field name="job_position" - placeholder="Job position" - attrs="{'invisible': [('is_company','=', True)]}"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="view_partner_form_job_position"> + <field name="name">Partner form with job position</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <field name="function" position="before"> + <field name="job_position" + placeholder="Job position" + attrs="{'invisible': [('is_company','=', True)]}"/> + </field> + </field> +</record> - <!-- Uncomment this to add a new column to tree view - <record model="ir.ui.view" id="view_partner_tree_job_position"> - <field name="name">Partner tree with job position</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_tree"/> - <field name="arch" type="xml"> - <field name="email" position="after"> - <field name="job_position"/> - </field> - </field> - </record> - --> +<!-- Uncomment this to add a new column to tree view +<record model="ir.ui.view" id="view_partner_tree_job_position"> + <field name="name">Partner tree with job position</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_tree"/> + <field name="arch" type="xml"> + <field name="email" position="after"> + <field name="job_position"/> + </field> + </field> +</record> +--> - <record model="ir.ui.view" id="view_res_partner_filter_job_position"> - <field name="name">Partner search with job position</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_res_partner_filter"/> - <field name="arch" type="xml"> - <field name="category_id" position="after"> - <field name="job_position"/> - </field> - <filter string="Salesperson" position="after"> - <filter string="Job position" - domain="[]" - context="{'group_by': 'job_position'}"/> - </filter> - </field> - </record> +<record model="ir.ui.view" id="view_res_partner_filter_job_position"> + <field name="name">Partner search with job position</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_res_partner_filter"/> + <field name="arch" type="xml"> + <field name="category_id" position="after"> + <field name="job_position"/> + </field> + <filter string="Salesperson" position="after"> + <filter string="Job position" + domain="[('is_company','=', True)]" + context="{'group_by': 'job_position'}"/> + </filter> + </field> +</record> - </data> +</data> </openerp> \ No newline at end of file From 465885833e4c5d2f3c3795c7aef4f72a3f714045 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Thu, 16 Apr 2015 16:32:07 +0200 Subject: [PATCH 30/58] [FIX] View fields review --- crm_job_position/views/crm_lead_view.xml | 6 ++++-- crm_job_position/views/res_partner_view.xml | 9 ++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/crm_job_position/views/crm_lead_view.xml b/crm_job_position/views/crm_lead_view.xml index 082be11e6..0ed1cfd46 100644 --- a/crm_job_position/views/crm_lead_view.xml +++ b/crm_job_position/views/crm_lead_view.xml @@ -8,7 +8,8 @@ <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> <field name="arch" type="xml"> <field name="function" position="before"> - <field name="job_position"/> + <field name="job_position" placeholder="Job position" + options='{"no_open": True}'/> </field> </field> </record> @@ -48,7 +49,8 @@ <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> <field name="arch" type="xml"> <field name="function" position="before"> - <field name="job_position"/> + <field name="job_position" placeholder="Job position" + options='{"no_open": True}'/> </field> </field> </record> diff --git a/crm_job_position/views/res_partner_view.xml b/crm_job_position/views/res_partner_view.xml index 9c3e26250..21d94f624 100644 --- a/crm_job_position/views/res_partner_view.xml +++ b/crm_job_position/views/res_partner_view.xml @@ -10,8 +10,15 @@ <field name="function" position="before"> <field name="job_position" placeholder="Job position" - attrs="{'invisible': [('is_company','=', True)]}"/> + attrs="{'invisible': [('is_company','=', True)]}" + options='{"no_open": True}'/> </field> + <xpath expr="//field[@name='child_ids']/form//field[@name='function']" position="before"> + <field name="job_position" + placeholder="Job position" + attrs="{'invisible': [('is_company','=', True)]}" + options='{"no_open": True}'/> + </xpath> </field> </record> From 8bf225ad58b069cea9fb5edf51f91c68d42964ee Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Fri, 22 May 2015 09:29:19 +0200 Subject: [PATCH 31/58] [FIX] Add new record on top of the list --- crm_job_position/views/crm_job_position_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_job_position/views/crm_job_position_view.xml b/crm_job_position/views/crm_job_position_view.xml index 5fda8727c..330890340 100644 --- a/crm_job_position/views/crm_job_position_view.xml +++ b/crm_job_position/views/crm_job_position_view.xml @@ -13,7 +13,7 @@ <field name="name">CRM job_position tree</field> <field name="model">crm.job_position</field> <field name="arch" type="xml"> - <tree string="Job positions" editable="bottom"> + <tree string="Job positions" editable="top"> <field name="name"/> <field name="parent_id"/> </tree> From ae49cbca991952e0a9718baf4dc43d4872aa236f Mon Sep 17 00:00:00 2001 From: Javier Iniesta <javieria@antiun.com> Date: Wed, 27 May 2015 12:00:23 +0200 Subject: [PATCH 32/58] [IMP] Updated translations --- crm_job_position/i18n/crm_job_position.pot | 50 +++++++++++++------ crm_job_position/i18n/es.po | 58 +++++++++++++++------- 2 files changed, 76 insertions(+), 32 deletions(-) diff --git a/crm_job_position/i18n/crm_job_position.pot b/crm_job_position/i18n/crm_job_position.pot index 620e822d0..c825139a8 100644 --- a/crm_job_position/i18n/crm_job_position.pot +++ b/crm_job_position/i18n/crm_job_position.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-24 13:47+0000\n" -"PO-Revision-Date: 2015-01-24 13:47+0000\n" +"POT-Creation-Date: 2015-05-27 09:03+0000\n" +"PO-Revision-Date: 2015-05-27 09:03+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -35,6 +35,25 @@ msgstr "" msgid "ID" msgstr "" +#. module: crm_job_position +#: view:crm.lead:crm_job_position.crm_case_form_view_leads_job_position +#: view:crm.lead:crm_job_position.crm_case_form_view_oppor_job_position +#: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position +#: field:crm.lead,job_position:0 +#: model:ir.model,name:crm_job_position.model_crm_job_position +#: view:res.partner:crm_job_position.view_partner_form_job_position +#: view:res.partner:crm_job_position.view_res_partner_filter_job_position +#: field:res.partner,job_position:0 +msgid "Job position" +msgstr "" + +#. module: crm_job_position +#: view:crm.job_position:crm_job_position.crm_job_position_tree_view +#: model:ir.actions.act_window,name:crm_job_position.crm_job_position_action +#: model:ir.ui.menu,name:crm_job_position.menu_crm_job_position +msgid "Job positions" +msgstr "" + #. module: crm_job_position #: field:crm.job_position,write_uid:0 msgid "Last Updated by" @@ -45,6 +64,11 @@ msgstr "" msgid "Last Updated on" msgstr "" +#. module: crm_job_position +#: model:ir.model,name:crm_job_position.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" + #. module: crm_job_position #: field:crm.job_position,name:0 msgid "Name" @@ -65,26 +89,24 @@ msgstr "" msgid "Parent id" msgstr "" +#. module: crm_job_position +#: model:ir.model,name:crm_job_position.model_res_partner +msgid "Partner" +msgstr "" + #. module: crm_job_position #: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position #: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position -#: field:crm.lead,job_position:0 -#: model:ir.model,name:crm_job_position.model_crm_job_position -#: view:res.partner:crm_job_position.view_res_partner_filter_job_position -#: field:res.partner,job_position:0 -msgid "Job position" +msgid "Sales Team" msgstr "" #. module: crm_job_position -#: field:crm.lead,function:0 -#: field:res.partner,function:0 -msgid "Detailed job position" +#: view:res.partner:crm_job_position.view_res_partner_filter_job_position +msgid "Salesperson" msgstr "" #. module: crm_job_position -#: view:crm.job_position:crm_job_position.crm_job_position_tree_view -#: model:ir.actions.act_window,name:crm_job_position.crm_job_position_action -#: model:ir.ui.menu,name:crm_job_position.menu_crm_job_position -msgid "Job positions" +#: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position +msgid "job_position" msgstr "" diff --git a/crm_job_position/i18n/es.po b/crm_job_position/i18n/es.po index 9568802e5..0adcfeded 100644 --- a/crm_job_position/i18n/es.po +++ b/crm_job_position/i18n/es.po @@ -1,13 +1,13 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_job_position +# * crm_job_position # msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-24 13:47+0000\n" -"PO-Revision-Date: 2015-01-24 13:47+0000\n" +"POT-Creation-Date: 2015-05-27 09:03+0000\n" +"PO-Revision-Date: 2015-05-27 09:03+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -35,6 +35,25 @@ msgstr "Creado en" msgid "ID" msgstr "ID" +#. module: crm_job_position +#: view:crm.lead:crm_job_position.crm_case_form_view_leads_job_position +#: view:crm.lead:crm_job_position.crm_case_form_view_oppor_job_position +#: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position +#: field:crm.lead,job_position:0 +#: model:ir.model,name:crm_job_position.model_crm_job_position +#: view:res.partner:crm_job_position.view_partner_form_job_position +#: view:res.partner:crm_job_position.view_res_partner_filter_job_position +#: field:res.partner,job_position:0 +msgid "Job position" +msgstr "Puesto de trabajo" + +#. module: crm_job_position +#: view:crm.job_position:crm_job_position.crm_job_position_tree_view +#: model:ir.actions.act_window,name:crm_job_position.crm_job_position_action +#: model:ir.ui.menu,name:crm_job_position.menu_crm_job_position +msgid "Job positions" +msgstr "Puestos de trabajo" + #. module: crm_job_position #: field:crm.job_position,write_uid:0 msgid "Last Updated by" @@ -45,6 +64,11 @@ msgstr "Última actualización por" msgid "Last Updated on" msgstr "Última actualización en" +#. module: crm_job_position +#: model:ir.model,name:crm_job_position.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Iniciativa/Oportunidad" + #. module: crm_job_position #: field:crm.job_position,name:0 msgid "Name" @@ -65,26 +89,24 @@ msgstr "Padre derecho" msgid "Parent id" msgstr "ID del padre" +#. module: crm_job_position +#: model:ir.model,name:crm_job_position.model_res_partner +msgid "Partner" +msgstr "Empresa" + #. module: crm_job_position #: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position #: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position -#: field:crm.lead,job_position:0 -#: model:ir.model,name:crm_job_position.model_crm_job_position -#: view:res.partner:crm_job_position.view_res_partner_filter_job_position -#: field:res.partner,job_position:0 -msgid "Job position" -msgstr "Puesto de trabajo" +msgid "Sales Team" +msgstr "Equipo de ventas" #. module: crm_job_position -#: field:crm.lead,function:0 -#: field:res.partner,function:0 -msgid "Detailed job position" -msgstr "Puesto de trabajo detallado" +#: view:res.partner:crm_job_position.view_res_partner_filter_job_position +msgid "Salesperson" +msgstr "Comercial" #. module: crm_job_position -#: view:crm.job_position:crm_job_position.crm_job_position_tree_view -#: model:ir.actions.act_window,name:crm_job_position.crm_job_position_action -#: model:ir.ui.menu,name:crm_job_position.menu_crm_job_position -msgid "Job positions" -msgstr "Puestos de trabajo" +#: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position +msgid "job_position" +msgstr "" From 8327e6c8c316f1d5d1e727116b4a37726dc1ec95 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antespi@gmail.com> Date: Mon, 16 Nov 2015 11:59:21 +0100 Subject: [PATCH 33/58] Avoid creation of job positions in partner form --- crm_job_position/i18n/crm_job_position.pot | 8 ++++++-- crm_job_position/i18n/es.po | 10 +++++++--- crm_job_position/views/res_partner_view.xml | 4 ++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/crm_job_position/i18n/crm_job_position.pot b/crm_job_position/i18n/crm_job_position.pot index c825139a8..f8b374a6b 100644 --- a/crm_job_position/i18n/crm_job_position.pot +++ b/crm_job_position/i18n/crm_job_position.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 09:03+0000\n" -"PO-Revision-Date: 2015-05-27 09:03+0000\n" +"POT-Creation-Date: 2015-11-16 10:18+0000\n" +"PO-Revision-Date: 2015-11-16 10:18+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -110,3 +110,7 @@ msgstr "" msgid "job_position" msgstr "" +#. module: crm_job_position +#: field:res.partner,function:0 +msgid "Detailed job position" +msgstr "" diff --git a/crm_job_position/i18n/es.po b/crm_job_position/i18n/es.po index 0adcfeded..40c6d18fc 100644 --- a/crm_job_position/i18n/es.po +++ b/crm_job_position/i18n/es.po @@ -1,13 +1,13 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_job_position +# * crm_job_position # msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 09:03+0000\n" -"PO-Revision-Date: 2015-05-27 09:03+0000\n" +"POT-Creation-Date: 2015-11-16 10:18+0000\n" +"PO-Revision-Date: 2015-11-16 10:18+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -110,3 +110,7 @@ msgstr "Comercial" msgid "job_position" msgstr "" +#. module: crm_job_position +#: field:res.partner,function:0 +msgid "Detailed job position" +msgstr "Puesto de trabajo detallado" diff --git a/crm_job_position/views/res_partner_view.xml b/crm_job_position/views/res_partner_view.xml index 21d94f624..6ca9186b4 100644 --- a/crm_job_position/views/res_partner_view.xml +++ b/crm_job_position/views/res_partner_view.xml @@ -11,13 +11,13 @@ <field name="job_position" placeholder="Job position" attrs="{'invisible': [('is_company','=', True)]}" - options='{"no_open": True}'/> + options="{'no_open': True, 'no_create': True}"/> </field> <xpath expr="//field[@name='child_ids']/form//field[@name='function']" position="before"> <field name="job_position" placeholder="Job position" attrs="{'invisible': [('is_company','=', True)]}" - options='{"no_open": True}'/> + options="{'no_open': True, 'no_create': True}"/> </xpath> </field> </record> From 0aa91a225a0057ba0be5d860a3f99cf34abcd6d3 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antespi@gmail.com> Date: Mon, 16 Nov 2015 12:03:35 +0100 Subject: [PATCH 34/58] Update version --- crm_job_position/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_job_position/__openerp__.py b/crm_job_position/__openerp__.py index 61227e13c..91c28d451 100644 --- a/crm_job_position/__openerp__.py +++ b/crm_job_position/__openerp__.py @@ -24,7 +24,7 @@ { 'name': 'Job positions in CRM', - 'version': '1.0', + 'version': '8.0.1.1.0', 'category': 'Customer Relationship Management', 'author': 'Serv. Tecnolog. Avanzados - Pedro M. Baeza, ' 'Antiun Ingeniería S.L.', From a77950a3d558364299b4ff38bf82310f31f117ac Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" <pedro.baeza@gmail.com> Date: Tue, 8 Dec 2015 09:32:46 +0100 Subject: [PATCH 35/58] [FIX] Author --- crm_job_position/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_job_position/__openerp__.py b/crm_job_position/__openerp__.py index 91c28d451..6fdcdf3a0 100644 --- a/crm_job_position/__openerp__.py +++ b/crm_job_position/__openerp__.py @@ -26,7 +26,7 @@ 'name': 'Job positions in CRM', 'version': '8.0.1.1.0', 'category': 'Customer Relationship Management', - 'author': 'Serv. Tecnolog. Avanzados - Pedro M. Baeza, ' + 'author': 'Serv. Tecnol. Avanzados - Pedro M. Baeza, ' 'Antiun Ingeniería S.L.', 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', 'depends': [ From 5f63fd0f00970438db77e79656bff87049a059db Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Fri, 18 Dec 2015 17:46:52 +0100 Subject: [PATCH 36/58] Prepare for OCA: - Renamed crm_job_position to partner_contact_job_position. - Drop all CRM dependencies. - Improve README. - Add form view. - Rename one model. - Rename some fields. - Reorder module. - Remove pot. - Update translation. - Use new-style short license and copyright headers. --- crm_job_position/README.rst | 13 -- crm_job_position/__init__.py | 6 - crm_job_position/__openerp__.py | 42 ------- crm_job_position/i18n/crm_job_position.pot | 116 ------------------ crm_job_position/i18n/es.po | 116 ------------------ crm_job_position/models/__init__.py | 8 -- crm_job_position/models/crm_job_position.py | 20 --- crm_job_position/models/crm_lead.py | 26 ---- crm_job_position/models/res_partner.py | 13 -- crm_job_position/security/ir.model.access.csv | 5 - .../views/crm_job_position_view.xml | 30 ----- crm_job_position/views/crm_lead_view.xml | 88 ------------- partner_contact_job_position/README.rst | 74 +++++++++++ partner_contact_job_position/__init__.py | 9 ++ partner_contact_job_position/__openerp__.py | 29 +++++ partner_contact_job_position/i18n/es.po | 101 +++++++++++++++ .../models/__init__.py | 9 ++ .../models/res_partner.py | 38 ++++++ .../security/ir.model.access.csv | 5 + .../static/description/icon.png | Bin .../views/res_partner_job_position_view.xml | 42 +++++++ .../views/res_partner_view.xml | 32 ++--- 22 files changed, 316 insertions(+), 506 deletions(-) delete mode 100644 crm_job_position/README.rst delete mode 100644 crm_job_position/__init__.py delete mode 100644 crm_job_position/__openerp__.py delete mode 100644 crm_job_position/i18n/crm_job_position.pot delete mode 100644 crm_job_position/i18n/es.po delete mode 100644 crm_job_position/models/__init__.py delete mode 100644 crm_job_position/models/crm_job_position.py delete mode 100644 crm_job_position/models/crm_lead.py delete mode 100644 crm_job_position/models/res_partner.py delete mode 100644 crm_job_position/security/ir.model.access.csv delete mode 100644 crm_job_position/views/crm_job_position_view.xml delete mode 100644 crm_job_position/views/crm_lead_view.xml create mode 100644 partner_contact_job_position/README.rst create mode 100644 partner_contact_job_position/__init__.py create mode 100644 partner_contact_job_position/__openerp__.py create mode 100644 partner_contact_job_position/i18n/es.po create mode 100644 partner_contact_job_position/models/__init__.py create mode 100644 partner_contact_job_position/models/res_partner.py create mode 100644 partner_contact_job_position/security/ir.model.access.csv rename {crm_job_position => partner_contact_job_position}/static/description/icon.png (100%) create mode 100644 partner_contact_job_position/views/res_partner_job_position_view.xml rename {crm_job_position => partner_contact_job_position}/views/res_partner_view.xml (56%) diff --git a/crm_job_position/README.rst b/crm_job_position/README.rst deleted file mode 100644 index 31fbf7ba6..000000000 --- a/crm_job_position/README.rst +++ /dev/null @@ -1,13 +0,0 @@ -Job positions in CRM -==================== - -This module adds the concept of job position to the CRM main objects (lead, -opportunity, partner), and propagate them through the workflow. - -Credits -======= - -Contributors ------------- -* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> -* Antonio Espinosa <antonioea@antiun.com> diff --git a/crm_job_position/__init__.py b/crm_job_position/__init__.py deleted file mode 100644 index 054c8853d..000000000 --- a/crm_job_position/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## - -from . import models diff --git a/crm_job_position/__openerp__.py b/crm_job_position/__openerp__.py deleted file mode 100644 index 6fdcdf3a0..000000000 --- a/crm_job_position/__openerp__.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Odoo Source Management Solution -# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) -# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa <antonioea@antiun.com> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -{ - 'name': 'Job positions in CRM', - 'version': '8.0.1.1.0', - 'category': 'Customer Relationship Management', - 'author': 'Serv. Tecnol. Avanzados - Pedro M. Baeza, ' - 'Antiun Ingeniería S.L.', - 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', - 'depends': [ - 'crm', - ], - 'data': [ - 'views/crm_job_position_view.xml', - 'views/crm_lead_view.xml', - 'views/res_partner_view.xml', - 'security/ir.model.access.csv', - ], - "installable": True, -} diff --git a/crm_job_position/i18n/crm_job_position.pot b/crm_job_position/i18n/crm_job_position.pot deleted file mode 100644 index f8b374a6b..000000000 --- a/crm_job_position/i18n/crm_job_position.pot +++ /dev/null @@ -1,116 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * crm_job_position -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-11-16 10:18+0000\n" -"PO-Revision-Date: 2015-11-16 10:18+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_job_position -#: field:crm.job_position,children:0 -msgid "Children" -msgstr "" - -#. module: crm_job_position -#: field:crm.job_position,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: crm_job_position -#: field:crm.job_position,create_date:0 -msgid "Created on" -msgstr "" - -#. module: crm_job_position -#: field:crm.job_position,id:0 -msgid "ID" -msgstr "" - -#. module: crm_job_position -#: view:crm.lead:crm_job_position.crm_case_form_view_leads_job_position -#: view:crm.lead:crm_job_position.crm_case_form_view_oppor_job_position -#: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position -#: field:crm.lead,job_position:0 -#: model:ir.model,name:crm_job_position.model_crm_job_position -#: view:res.partner:crm_job_position.view_partner_form_job_position -#: view:res.partner:crm_job_position.view_res_partner_filter_job_position -#: field:res.partner,job_position:0 -msgid "Job position" -msgstr "" - -#. module: crm_job_position -#: view:crm.job_position:crm_job_position.crm_job_position_tree_view -#: model:ir.actions.act_window,name:crm_job_position.crm_job_position_action -#: model:ir.ui.menu,name:crm_job_position.menu_crm_job_position -msgid "Job positions" -msgstr "" - -#. module: crm_job_position -#: field:crm.job_position,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: crm_job_position -#: field:crm.job_position,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: crm_job_position -#: model:ir.model,name:crm_job_position.model_crm_lead -msgid "Lead/Opportunity" -msgstr "" - -#. module: crm_job_position -#: field:crm.job_position,name:0 -msgid "Name" -msgstr "" - -#. module: crm_job_position -#: field:crm.job_position,parent_left:0 -msgid "Parent Left" -msgstr "" - -#. module: crm_job_position -#: field:crm.job_position,parent_right:0 -msgid "Parent Right" -msgstr "" - -#. module: crm_job_position -#: field:crm.job_position,parent_id:0 -msgid "Parent id" -msgstr "" - -#. module: crm_job_position -#: model:ir.model,name:crm_job_position.model_res_partner -msgid "Partner" -msgstr "" - -#. module: crm_job_position -#: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position -#: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position -msgid "Sales Team" -msgstr "" - -#. module: crm_job_position -#: view:res.partner:crm_job_position.view_res_partner_filter_job_position -msgid "Salesperson" -msgstr "" - -#. module: crm_job_position -#: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position -msgid "job_position" -msgstr "" - -#. module: crm_job_position -#: field:res.partner,function:0 -msgid "Detailed job position" -msgstr "" diff --git a/crm_job_position/i18n/es.po b/crm_job_position/i18n/es.po deleted file mode 100644 index 40c6d18fc..000000000 --- a/crm_job_position/i18n/es.po +++ /dev/null @@ -1,116 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * crm_job_position -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-11-16 10:18+0000\n" -"PO-Revision-Date: 2015-11-16 10:18+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_job_position -#: field:crm.job_position,children:0 -msgid "Children" -msgstr "Hijos" - -#. module: crm_job_position -#: field:crm.job_position,create_uid:0 -msgid "Created by" -msgstr "Creado por" - -#. module: crm_job_position -#: field:crm.job_position,create_date:0 -msgid "Created on" -msgstr "Creado en" - -#. module: crm_job_position -#: field:crm.job_position,id:0 -msgid "ID" -msgstr "ID" - -#. module: crm_job_position -#: view:crm.lead:crm_job_position.crm_case_form_view_leads_job_position -#: view:crm.lead:crm_job_position.crm_case_form_view_oppor_job_position -#: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position -#: field:crm.lead,job_position:0 -#: model:ir.model,name:crm_job_position.model_crm_job_position -#: view:res.partner:crm_job_position.view_partner_form_job_position -#: view:res.partner:crm_job_position.view_res_partner_filter_job_position -#: field:res.partner,job_position:0 -msgid "Job position" -msgstr "Puesto de trabajo" - -#. module: crm_job_position -#: view:crm.job_position:crm_job_position.crm_job_position_tree_view -#: model:ir.actions.act_window,name:crm_job_position.crm_job_position_action -#: model:ir.ui.menu,name:crm_job_position.menu_crm_job_position -msgid "Job positions" -msgstr "Puestos de trabajo" - -#. module: crm_job_position -#: field:crm.job_position,write_uid:0 -msgid "Last Updated by" -msgstr "Última actualización por" - -#. module: crm_job_position -#: field:crm.job_position,write_date:0 -msgid "Last Updated on" -msgstr "Última actualización en" - -#. module: crm_job_position -#: model:ir.model,name:crm_job_position.model_crm_lead -msgid "Lead/Opportunity" -msgstr "Iniciativa/Oportunidad" - -#. module: crm_job_position -#: field:crm.job_position,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: crm_job_position -#: field:crm.job_position,parent_left:0 -msgid "Parent Left" -msgstr "Padre izquierdo" - -#. module: crm_job_position -#: field:crm.job_position,parent_right:0 -msgid "Parent Right" -msgstr "Padre derecho" - -#. module: crm_job_position -#: field:crm.job_position,parent_id:0 -msgid "Parent id" -msgstr "ID del padre" - -#. module: crm_job_position -#: model:ir.model,name:crm_job_position.model_res_partner -msgid "Partner" -msgstr "Empresa" - -#. module: crm_job_position -#: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position -#: view:crm.lead:crm_job_position.view_crm_case_opportunities_filter_job_position -msgid "Sales Team" -msgstr "Equipo de ventas" - -#. module: crm_job_position -#: view:res.partner:crm_job_position.view_res_partner_filter_job_position -msgid "Salesperson" -msgstr "Comercial" - -#. module: crm_job_position -#: view:crm.lead:crm_job_position.view_crm_case_leads_filter_job_position -msgid "job_position" -msgstr "" - -#. module: crm_job_position -#: field:res.partner,function:0 -msgid "Detailed job position" -msgstr "Puesto de trabajo detallado" diff --git a/crm_job_position/models/__init__.py b/crm_job_position/models/__init__.py deleted file mode 100644 index 0ab7c4ce5..000000000 --- a/crm_job_position/models/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## - -from . import crm_job_position -from . import crm_lead -from . import res_partner diff --git a/crm_job_position/models/crm_job_position.py b/crm_job_position/models/crm_job_position.py deleted file mode 100644 index e03ba74f4..000000000 --- a/crm_job_position/models/crm_job_position.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmJobPosition(models.Model): - _name = 'crm.job_position' - _order = "parent_left" - _parent_order = "name" - _parent_store = True - _description = "Job position" - - name = fields.Char(required=True, translate=True) - parent_id = fields.Many2one(comodel_name='crm.job_position') - children = fields.One2many(comodel_name='crm.job_position', - inverse_name='parent_id') - parent_left = fields.Integer('Parent Left', select=True) - parent_right = fields.Integer('Parent Right', select=True) diff --git a/crm_job_position/models/crm_lead.py b/crm_job_position/models/crm_lead.py deleted file mode 100644 index 1fecc91ed..000000000 --- a/crm_job_position/models/crm_lead.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmLead(models.Model): - _inherit = 'crm.lead' - - function = fields.Char(string="Detailed job position") - job_position = fields.Many2one(comodel_name='crm.job_position', - string="Job position") - - def _lead_create_contact(self, cr, uid, lead, name, is_company, - parent_id=False, context=None): - """ - Propagate job_position to created partner. - """ - partner_id = super(CrmLead, self)._lead_create_contact( - cr, uid, lead, name, is_company, parent_id=parent_id, - context=context) - self.pool['res.partner'].write( - cr, uid, partner_id, {'job_position': lead.job_position.id}, - context=context) - return partner_id diff --git a/crm_job_position/models/res_partner.py b/crm_job_position/models/res_partner.py deleted file mode 100644 index 5a76412d1..000000000 --- a/crm_job_position/models/res_partner.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class ResPartner(models.Model): - _inherit = 'res.partner' - - function = fields.Char(string="Detailed job position") - job_position = fields.Many2one(comodel_name='crm.job_position', - string="Job position") diff --git a/crm_job_position/security/ir.model.access.csv b/crm_job_position/security/ir.model.access.csv deleted file mode 100644 index bd53556bd..000000000 --- a/crm_job_position/security/ir.model.access.csv +++ /dev/null @@ -1,5 +0,0 @@ -"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_crm_job_position_public","crm_job_position group_public","model_crm_job_position","base.group_public",1,0,0,0 -"access_crm_job_position_portal","crm_job_position group_portal","model_crm_job_position","base.group_portal",1,0,0,0 -"access_crm_job_position_group_partner_manager","crm_job_position group_partner_manager","model_crm_job_position","base.group_partner_manager",1,1,1,1 -"access_crm_job_position_group_user","crm_job_position group_user","model_crm_job_position","base.group_user",1,0,0,0 diff --git a/crm_job_position/views/crm_job_position_view.xml b/crm_job_position/views/crm_job_position_view.xml deleted file mode 100644 index 330890340..000000000 --- a/crm_job_position/views/crm_job_position_view.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record id="crm_job_position_action" model="ir.actions.act_window"> - <field name="name">Job positions</field> - <field name="res_model">crm.job_position</field> - <field name="view_type">form</field> - <field name="view_mode">tree</field> -</record> - -<record id="crm_job_position_tree_view" model="ir.ui.view"> - <field name="name">CRM job_position tree</field> - <field name="model">crm.job_position</field> - <field name="arch" type="xml"> - <tree string="Job positions" editable="top"> - <field name="name"/> - <field name="parent_id"/> - </tree> - </field> -</record> - -<menuitem action="crm_job_position_action" - id="menu_crm_job_position" - name="Job positions" - parent="base.menu_crm_config_lead" - sequence="3"/> - -</data> -</openerp> \ No newline at end of file diff --git a/crm_job_position/views/crm_lead_view.xml b/crm_job_position/views/crm_lead_view.xml deleted file mode 100644 index 0ed1cfd46..000000000 --- a/crm_job_position/views/crm_lead_view.xml +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record model="ir.ui.view" id="crm_case_form_view_leads_job_position"> - <field name="name">CRM - Leads Form with job positions</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> - <field name="arch" type="xml"> - <field name="function" position="before"> - <field name="job_position" placeholder="Job position" - options='{"no_open": True}'/> - </field> - </field> -</record> - -<!-- Uncomment this to add a new column to tree view -<record model="ir.ui.view" id="crm_case_tree_view_leads_job_position"> - <field name="name">Leads with job_position</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_tree_view_leads"/> - <field name="arch" type="xml"> - <field name="function" position="before"> - <field name="job_position"/> - </field> - </field> -</record> ---> - -<record model="ir.ui.view" id="view_crm_case_leads_filter_job_position"> - <field name="name">CRM - Leads Search with job positions</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="job_position"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="job_position" - domain="[]" - context="{'group_by': 'job_position'}"/> - </filter> - </field> -</record> - -<record model="ir.ui.view" id="crm_case_form_view_oppor_job_position"> - <field name="name">CRM - Leads Form with job position</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> - <field name="arch" type="xml"> - <field name="function" position="before"> - <field name="job_position" placeholder="Job position" - options='{"no_open": True}'/> - </field> - </field> -</record> - -<!-- Uncomment this to add a new column to tree view -<record model="ir.ui.view" id="crm_case_tree_view_oppor_job_position"> - <field name="name">Leads with job position</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_tree_view_oppor"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="job_position"/> - </field> - </field> -</record> ---> - -<record model="ir.ui.view" id="view_crm_case_opportunities_filter_job_position"> - <field name="name">CRM - Leads Search with job positions</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="job_position"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="Job position" - domain="[]" - context="{'group_by': 'job_position'}"/> - </filter> - </field> -</record> - -</data> -</openerp> \ No newline at end of file diff --git a/partner_contact_job_position/README.rst b/partner_contact_job_position/README.rst new file mode 100644 index 000000000..00f2706d0 --- /dev/null +++ b/partner_contact_job_position/README.rst @@ -0,0 +1,74 @@ +.. 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 + +==================== +Partner job position +==================== + +This module extends the functionality of partners job position to support +having them categorized in tree form and allow you to choose a categorized job +position for your contacts in addition to the current custom string for job +position. + +Configuration +============= + +To configure job positions, you need to: + +* Go to *Sales > Configuration > Address Book > Job Positions*. + +Usage +===== + +To use this module, you need to: + +* Go to any partner's form. +* Use the new *Categorized job position* field. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/134/8.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +<https://github.com/OCA/partner-contact/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 +<https://github.com/OCA/ +partner-contact/issues/new?body=module:%20 +{module_name}%0Aversion:%20 +8.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. + +Credits +======= + +Images +------ + +* `Antiun Ingeniería S.L. <http://www.antiun.com>`_: Icon. + +Contributors +------------ + +* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +* Antonio Espinosa <antonioea@antiun.com> +* Rafael Blasco <rafabn@antiun.com> +* Jairo Llopis <yajo.sk8@gmail.com> + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://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 https://odoo-community.org. diff --git a/partner_contact_job_position/__init__.py b/partner_contact_job_position/__init__.py new file mode 100644 index 000000000..9af8488e4 --- /dev/null +++ b/partner_contact_job_position/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/partner_contact_job_position/__openerp__.py b/partner_contact_job_position/__openerp__.py new file mode 100644 index 000000000..3e4521aad --- /dev/null +++ b/partner_contact_job_position/__openerp__.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Partner job position", + "summary": "Categorize job positions for contacts", + "version": "8.0.1.0.0", + 'category': 'Customer Relationship Management', + "website": "http://www.antiun.com", + 'author': 'Serv. Tecnolog. Avanzados - Pedro M. Baeza, ' + 'Antiun Ingeniería S.L., ' + "Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "base", + ], + "data": [ + 'security/ir.model.access.csv', + 'views/res_partner_job_position_view.xml', + 'views/res_partner_view.xml', + ], +} diff --git a/partner_contact_job_position/i18n/es.po b/partner_contact_job_position/i18n/es.po new file mode 100644 index 000000000..93f2409ab --- /dev/null +++ b/partner_contact_job_position/i18n/es.po @@ -0,0 +1,101 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_job_position +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-18 18:22+0100\n" +"PO-Revision-Date: 2015-12-18 18:22+0100\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 1.8.5\n" + +#. module: partner_contact_job_position +#: field:res.partner,job_position_id:0 +msgid "Categorized job position" +msgstr "Puesto de trabajo categorizado" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,child_ids:0 +msgid "Children" +msgstr "Hijos" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,id:0 +msgid "ID" +msgstr "ID" + +#. module: partner_contact_job_position +#: model:ir.actions.act_window,name:partner_contact_job_position.res_partner_job_position_action +#: model:ir.ui.menu,name:partner_contact_job_position.menu_res_partner_job_position +msgid "Job Positions" +msgstr "Puestos de trabajo" + +#. module: partner_contact_job_position +#: model:ir.model,name:partner_contact_job_position.model_res_partner_job_position +#: view:res.partner:partner_contact_job_position.view_res_partner_filter_job_position +msgid "Job position" +msgstr "Puesto de trabajo" + +#. module: partner_contact_job_position +#: view:res.partner.job_position:partner_contact_job_position.res_partner_job_position_form_view +#: view:res.partner.job_position:partner_contact_job_position.res_partner_job_position_tree_view +msgid "Job positions" +msgstr "Puestos de trabajo" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,parent_id:0 +msgid "Parent" +msgstr "Padre" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,parent_left:0 +msgid "Parent left" +msgstr "Padre izquierdo" + +#. module: partner_contact_job_position +#: field:res.partner.job_position,parent_right:0 +msgid "Parent right" +msgstr "Padre derecho" + +#. module: partner_contact_job_position +#: model:ir.model,name:partner_contact_job_position.model_res_partner +msgid "Partner" +msgstr "Empresa" + +#. module: partner_contact_job_position +#: view:res.partner:partner_contact_job_position.view_res_partner_filter_job_position +msgid "Salesperson" +msgstr "Comercial" diff --git a/partner_contact_job_position/models/__init__.py b/partner_contact_job_position/models/__init__.py new file mode 100644 index 000000000..213b25fdc --- /dev/null +++ b/partner_contact_job_position/models/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import res_partner diff --git a/partner_contact_job_position/models/res_partner.py b/partner_contact_job_position/models/res_partner.py new file mode 100644 index 000000000..abb6863fa --- /dev/null +++ b/partner_contact_job_position/models/res_partner.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, fields + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + job_position_id = fields.Many2one( + "res.partner.job_position", + "Categorized job position", + oldname="job_position") + + +class ResPartnerJobPosition(models.Model): + _name = "res.partner.job_position" + _order = "parent_left" + _parent_order = "name" + _parent_store = True + _description = "Job position" + + name = fields.Char(required=True, translate=True) + parent_id = fields.Many2one( + "res.partner.job_position", + "Parent") + child_ids = fields.One2many( + "res.partner.job_position", + "parent_id", + "Children", + oldname="children") + parent_left = fields.Integer(index=True) + parent_right = fields.Integer(index=True) diff --git a/partner_contact_job_position/security/ir.model.access.csv b/partner_contact_job_position/security/ir.model.access.csv new file mode 100644 index 000000000..93930fc92 --- /dev/null +++ b/partner_contact_job_position/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_res_partner_job_position_public","res_partner_job_position group_public","model_res_partner_job_position","base.group_public",1,0,0,0 +"access_res_partner_job_position_portal","res_partner_job_position group_portal","model_res_partner_job_position","base.group_portal",1,0,0,0 +"access_res_partner_job_position_group_partner_manager","res_partner_job_position group_partner_manager","model_res_partner_job_position","base.group_partner_manager",1,1,1,1 +"access_res_partner_job_position_group_user","res_partner_job_position group_user","model_res_partner_job_position","base.group_user",1,0,0,0 diff --git a/crm_job_position/static/description/icon.png b/partner_contact_job_position/static/description/icon.png similarity index 100% rename from crm_job_position/static/description/icon.png rename to partner_contact_job_position/static/description/icon.png diff --git a/partner_contact_job_position/views/res_partner_job_position_view.xml b/partner_contact_job_position/views/res_partner_job_position_view.xml new file mode 100644 index 000000000..e70b45a91 --- /dev/null +++ b/partner_contact_job_position/views/res_partner_job_position_view.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + +<record id="res_partner_job_position_action" model="ir.actions.act_window"> + <field name="name">Job Positions</field> + <field name="res_model">res.partner.job_position</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> +</record> + +<record id="res_partner_job_position_tree_view" model="ir.ui.view"> + <field name="name">Job position tree</field> + <field name="model">res.partner.job_position</field> + <field name="arch" type="xml"> + <tree string="Job positions" editable="top"> + <field name="name"/> + <field name="parent_id"/> + </tree> + </field> +</record> + +<record id="res_partner_job_position_form_view" model="ir.ui.view"> + <field name="name">Job position form</field> + <field name="model">res.partner.job_position</field> + <field name="arch" type="xml"> + <form string="Job positions"> + <group> + <field name="name"/> + <field name="parent_id"/> + <field name="child_ids"/> + </group> + </form> + </field> +</record> + +<menuitem action="res_partner_job_position_action" + id="menu_res_partner_job_position" + parent="base.menu_config_address_book"/> + +</data> +</openerp> diff --git a/crm_job_position/views/res_partner_view.xml b/partner_contact_job_position/views/res_partner_view.xml similarity index 56% rename from crm_job_position/views/res_partner_view.xml rename to partner_contact_job_position/views/res_partner_view.xml index 6ca9186b4..f1a2a0e45 100644 --- a/crm_job_position/views/res_partner_view.xml +++ b/partner_contact_job_position/views/res_partner_view.xml @@ -8,48 +8,34 @@ <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> <field name="function" position="before"> - <field name="job_position" - placeholder="Job position" + <field name="job_position_id" attrs="{'invisible': [('is_company','=', True)]}" - options="{'no_open': True, 'no_create': True}"/> + options='{"no_open": True}'/> </field> - <xpath expr="//field[@name='child_ids']/form//field[@name='function']" position="before"> - <field name="job_position" - placeholder="Job position" + <xpath expr="//field[@name='child_ids']/form//field[@name='function']" + position="before"> + <field name="job_position_id" attrs="{'invisible': [('is_company','=', True)]}" - options="{'no_open': True, 'no_create': True}"/> + options='{"no_open": True}'/> </xpath> </field> </record> -<!-- Uncomment this to add a new column to tree view -<record model="ir.ui.view" id="view_partner_tree_job_position"> - <field name="name">Partner tree with job position</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_tree"/> - <field name="arch" type="xml"> - <field name="email" position="after"> - <field name="job_position"/> - </field> - </field> -</record> ---> - <record model="ir.ui.view" id="view_res_partner_filter_job_position"> <field name="name">Partner search with job position</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_res_partner_filter"/> <field name="arch" type="xml"> <field name="category_id" position="after"> - <field name="job_position"/> + <field name="job_position_id"/> </field> <filter string="Salesperson" position="after"> <filter string="Job position" domain="[('is_company','=', True)]" - context="{'group_by': 'job_position'}"/> + context="{'group_by': 'job_position_id'}"/> </filter> </field> </record> </data> -</openerp> \ No newline at end of file +</openerp> From ec4f87786701c384fc0090cedce20b49ae0604ef Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Mon, 21 Dec 2015 15:41:15 +0100 Subject: [PATCH 37/58] Clean migration remainders. --- partner_capital/models/res_partner.py | 2 +- partner_capital/views/res_partner_turnover_range_view.xml | 4 +--- partner_capital/views/res_partner_view.xml | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/partner_capital/models/res_partner.py b/partner_capital/models/res_partner.py index 8adc35fe0..746a7e035 100644 --- a/partner_capital/models/res_partner.py +++ b/partner_capital/models/res_partner.py @@ -16,7 +16,7 @@ class ResPartner(models.Model): help="Country of origin of this company's capital.") capital_amount = fields.Float( "Capital amount", - oldname="capital_amount", + oldname="capital_registered", help="Publicly registered capital amount.") capital_currency_id = fields.Many2one( "res.currency", diff --git a/partner_capital/views/res_partner_turnover_range_view.xml b/partner_capital/views/res_partner_turnover_range_view.xml index ad9d32622..a5dd70af5 100644 --- a/partner_capital/views/res_partner_turnover_range_view.xml +++ b/partner_capital/views/res_partner_turnover_range_view.xml @@ -25,9 +25,7 @@ <menuitem action="res_partner_turnover_range_action" id="menu_res_partner_turnover_range" - name="Turnover ranges" - parent="base.menu_config_address_book" - sequence="5"/> + parent="base.menu_config_address_book"/> </data> </openerp> diff --git a/partner_capital/views/res_partner_view.xml b/partner_capital/views/res_partner_view.xml index f5683d59f..3eadeff25 100644 --- a/partner_capital/views/res_partner_view.xml +++ b/partner_capital/views/res_partner_view.xml @@ -34,10 +34,10 @@ <filter string="Salesperson" position="after"> <filter string="Capital country" domain="[('is_company', '=', True)]" - context="{'group_by': 'capital_country'}"/> + context="{'group_by': 'capital_country_id'}"/> <filter string="Turnover" domain="[('is_company', '=', True)]" - context="{'group_by': 'turnover_number'}"/> + context="{'group_by': 'turnover_range_id'}"/> <filter string="Company size" domain="[('is_company', '=', True)]" context="{'group_by': 'company_size'}"/> From 767ae1225876774b32dfe1310dcec928d5acdfb7 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Mon, 21 Dec 2015 15:41:27 +0100 Subject: [PATCH 38/58] Resort view. --- partner_capital/views/res_partner_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/partner_capital/views/res_partner_view.xml b/partner_capital/views/res_partner_view.xml index 3eadeff25..e5a5b6c85 100644 --- a/partner_capital/views/res_partner_view.xml +++ b/partner_capital/views/res_partner_view.xml @@ -15,11 +15,11 @@ <group name="captial" string="Capital" attrs="{'invisible': [('is_company', '=', False)]}"> - <field name="capital_country_id"/> <field name="capital_amount"/> <field name="capital_currency_id"/> - <field name="turnover_range_id"/> + <field name="capital_country_id"/> <field name="turnover_amount"/> + <field name="turnover_range_id"/> <field name="company_size"/> </group> </xpath> From 136d24591011dbfb3ab6f19621f224199d81e412 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Mon, 21 Dec 2015 16:09:33 +0100 Subject: [PATCH 39/58] Rename to partner_employee_quantity. --- partner_employee_amount/i18n/es.po | 90 ----------------- .../security/ir.model.access.csv | 5 - .../README.rst | 16 +-- .../__init__.py | 0 .../__openerp__.py | 4 +- partner_employee_quantity/i18n/es.po | 91 ++++++++++++++++++ .../models/__init__.py | 0 .../models/res_partner.py | 16 +-- .../security/ir.model.access.csv | 5 + .../static/description/icon.png | Bin ...s_partner_employee_quantity_range_view.xml | 10 +- .../views/res_partner_view.xml | 12 +-- 12 files changed, 125 insertions(+), 124 deletions(-) delete mode 100644 partner_employee_amount/i18n/es.po delete mode 100644 partner_employee_amount/security/ir.model.access.csv rename {partner_employee_amount => partner_employee_quantity}/README.rst (82%) rename {partner_employee_amount => partner_employee_quantity}/__init__.py (100%) rename {partner_employee_amount => partner_employee_quantity}/__openerp__.py (84%) create mode 100644 partner_employee_quantity/i18n/es.po rename {partner_employee_amount => partner_employee_quantity}/models/__init__.py (100%) rename {partner_employee_amount => partner_employee_quantity}/models/res_partner.py (51%) create mode 100644 partner_employee_quantity/security/ir.model.access.csv rename {partner_employee_amount => partner_employee_quantity}/static/description/icon.png (100%) rename partner_employee_amount/views/res_partner_employee_amount_range_view.xml => partner_employee_quantity/views/res_partner_employee_quantity_range_view.xml (61%) rename {partner_employee_amount => partner_employee_quantity}/views/res_partner_view.xml (74%) diff --git a/partner_employee_amount/i18n/es.po b/partner_employee_amount/i18n/es.po deleted file mode 100644 index b0d153863..000000000 --- a/partner_employee_amount/i18n/es.po +++ /dev/null @@ -1,90 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * crm_employees -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 08:57+0000\n" -"PO-Revision-Date: 2015-05-27 08:57+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_employees -#: field:crm.employees_range,create_uid:0 -msgid "Created by" -msgstr "Creado por" - -#. module: crm_employees -#: field:crm.employees_range,create_date:0 -msgid "Created on" -msgstr "Creado en" - -#. module: crm_employees -#: view:res.partner:crm_employees.view_res_partner_filter_employees -msgid "Emplooyees" -msgstr "Empleados" - -#. module: crm_employees -#: field:crm.lead,employees_number:0 -#: field:res.partner,employees_number:0 -msgid "Employees number" -msgstr "Número de empleados" - -#. module: crm_employees -#: view:crm.lead:crm_employees.crm_case_form_view_leads_employees -#: view:crm.lead:crm_employees.crm_case_form_view_oppor_employees -#: field:crm.lead,employees_range:0 -#: model:ir.model,name:crm_employees.model_crm_employees_range -#: view:res.partner:crm_employees.view_partner_form_employees -#: field:res.partner,employees_range:0 -msgid "Employees range" -msgstr "Rango de empleados" - -#. module: crm_employees -#: view:crm.employees_range:crm_employees.crm_employees_range_tree_view -#: model:ir.actions.act_window,name:crm_employees.crm_employees_range_action -#: model:ir.ui.menu,name:crm_employees.menu_crm_employees_range -msgid "Employees ranges" -msgstr "Rangos de empleados" - -#. module: crm_employees -#: field:crm.employees_range,id:0 -msgid "ID" -msgstr "ID" - -#. module: crm_employees -#: field:crm.employees_range,write_uid:0 -msgid "Last Updated by" -msgstr "Última actualización por" - -#. module: crm_employees -#: field:crm.employees_range,write_date:0 -msgid "Last Updated on" -msgstr "Última actualización en" - -#. module: crm_employees -#: model:ir.model,name:crm_employees.model_crm_lead -msgid "Lead/Opportunity" -msgstr "Iniciativa/Oportunidad" - -#. module: crm_employees -#: field:crm.employees_range,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: crm_employees -#: model:ir.model,name:crm_employees.model_res_partner -msgid "Partner" -msgstr "Empresa" - -#. module: crm_employees -#: view:res.partner:crm_employees.view_res_partner_filter_employees -msgid "Salesperson" -msgstr "Comercial" - diff --git a/partner_employee_amount/security/ir.model.access.csv b/partner_employee_amount/security/ir.model.access.csv deleted file mode 100644 index 883a0d119..000000000 --- a/partner_employee_amount/security/ir.model.access.csv +++ /dev/null @@ -1,5 +0,0 @@ -"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_res_partner_employee_amount_range_public","res_partner_employee_amount_range group_public","model_res_partner_employee_amount_range","base.group_public",1,0,0,0 -"access_res_partner_employee_amount_range_portal","res_partner_employee_amount_range group_portal","model_res_partner_employee_amount_range","base.group_portal",1,0,0,0 -"access_res_partner_employee_amount_range_group_partner_manager","res_partner_employee_amount_range group_partner_manager","model_res_partner_employee_amount_range","base.group_partner_manager",1,1,1,1 -"access_res_partner_employee_amount_range_group_user","res_partner_employee_amount_range group_user","model_res_partner_employee_amount_range","base.group_user",1,0,0,0 diff --git a/partner_employee_amount/README.rst b/partner_employee_quantity/README.rst similarity index 82% rename from partner_employee_amount/README.rst rename to partner_employee_quantity/README.rst index 8b344ed7c..11a9ea65e 100644 --- a/partner_employee_amount/README.rst +++ b/partner_employee_quantity/README.rst @@ -2,19 +2,19 @@ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -=========================== -Employee amount in partners -=========================== +============================= +Employee quantity in partners +============================= -This module allows to set employee amount for partners, and categorize them by -ranges. +This module allows to set employee quantity for partners, and categorize them +by ranges. Configuration ============= To manage available ranges, you need to: -* Go to *Sales > Configuration > Address Book > Ranges by amount of employees*. +* Go to *Sales > Configuration > Address Book > Ranges by quantity of employees*. Usage ===== @@ -23,7 +23,7 @@ To use this module, you need to: * Go to any partner's form. * Enable *Is company?*. -* Go to *Sales & Purchases > Employee amount*. +* Go to *Sales & Purchases > Employee quantity*. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot @@ -38,7 +38,7 @@ 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 <https://github.com/OCA/ partner-contact/issues/new?body=module:%20 -partner_employee_amount%0Aversion:%20 +partner_employee_quantity%0Aversion:%20 8.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. Credits diff --git a/partner_employee_amount/__init__.py b/partner_employee_quantity/__init__.py similarity index 100% rename from partner_employee_amount/__init__.py rename to partner_employee_quantity/__init__.py diff --git a/partner_employee_amount/__openerp__.py b/partner_employee_quantity/__openerp__.py similarity index 84% rename from partner_employee_amount/__openerp__.py rename to partner_employee_quantity/__openerp__.py index 1c3ef7dbc..be90e04db 100644 --- a/partner_employee_amount/__openerp__.py +++ b/partner_employee_quantity/__openerp__.py @@ -4,7 +4,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Employee amount in partners', + 'name': 'Employee quantity in partners', 'summary': 'Know how many employees a partner has', 'version': '8.0.1.0.0', 'category': 'Customer Relationship Management', @@ -15,7 +15,7 @@ ], 'data': [ 'security/ir.model.access.csv', - 'views/res_partner_employee_amount_range_view.xml', + 'views/res_partner_employee_quantity_range_view.xml', 'views/res_partner_view.xml', ], "installable": True, diff --git a/partner_employee_quantity/i18n/es.po b/partner_employee_quantity/i18n/es.po new file mode 100644 index 000000000..d3c891ec8 --- /dev/null +++ b/partner_employee_quantity/i18n/es.po @@ -0,0 +1,91 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_employees +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-21 16:02+0100\n" +"PO-Revision-Date: 2015-12-21 16:03+0100\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 1.8.5\n" + +#. module: partner_employee_quantity +#: field:res.partner.employee_quantity_range,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: partner_employee_quantity +#: field:res.partner.employee_quantity_range,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: partner_employee_quantity +#: view:res.partner:partner_employee_quantity.view_partner_form_employees +#: field:res.partner,employee_quantity:0 +msgid "Employee quantity" +msgstr "Cantidad de empleados" + +#. module: partner_employee_quantity +#: field:res.partner,employee_quantity_range_id:0 +msgid "Employee quantity range" +msgstr "Rango de la cantidad de empleados" + +#. module: partner_employee_quantity +#: view:res.partner:partner_employee_quantity.view_res_partner_filter_employees +msgid "Employees" +msgstr "Empleados" + +#. module: partner_employee_quantity +#: field:res.partner.employee_quantity_range,id:0 +msgid "ID" +msgstr "ID" + +#. module: partner_employee_quantity +#: field:res.partner.employee_quantity_range,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: partner_employee_quantity +#: field:res.partner.employee_quantity_range,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: partner_employee_quantity +#: field:res.partner.employee_quantity_range,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: partner_employee_quantity +#: model:ir.model,name:partner_employee_quantity.model_res_partner +msgid "Partner" +msgstr "Empresa" + +#. module: partner_employee_quantity +#: model:ir.model,name:partner_employee_quantity.model_res_partner_employee_quantity_range +msgid "Partner employee quantity range" +msgstr "Rango de la cantidad de empleados de la empresa" + +#. module: partner_employee_quantity +#: help:res.partner,employee_quantity_range_id:0 +msgid "Range of this partner depending on the employee quantity." +msgstr "Rango de esta empresa dependiendo de su cantidad de empleados." + +#. module: partner_employee_quantity +#: model:ir.actions.act_window,name:partner_employee_quantity.employees_range_action +#: model:ir.ui.menu,name:partner_employee_quantity.menu_employees_range +#: view:res.partner.employee_quantity_range:partner_employee_quantity.employees_range_tree_view +msgid "Ranges by quantity of employees" +msgstr "Rangos por cantidad de empleados" + +#. module: partner_employee_quantity +#: view:res.partner:partner_employee_quantity.view_res_partner_filter_employees +msgid "Salesperson" +msgstr "Comercial" diff --git a/partner_employee_amount/models/__init__.py b/partner_employee_quantity/models/__init__.py similarity index 100% rename from partner_employee_amount/models/__init__.py rename to partner_employee_quantity/models/__init__.py diff --git a/partner_employee_amount/models/res_partner.py b/partner_employee_quantity/models/res_partner.py similarity index 51% rename from partner_employee_amount/models/res_partner.py rename to partner_employee_quantity/models/res_partner.py index ff79d6586..0bff10d55 100644 --- a/partner_employee_amount/models/res_partner.py +++ b/partner_employee_quantity/models/res_partner.py @@ -9,17 +9,17 @@ from openerp import models, fields class ResPartner(models.Model): _inherit = 'res.partner' - employee_amount = fields.Integer( + employee_quantity = fields.Integer( oldname="employees_number") - employee_amount_range_id = fields.Many2one( - "res.partner.employee_amount_range", - "Employee amount range", - help="Range of this partner depending on the employee amount.", + employee_quantity_range_id = fields.Many2one( + "res.partner.employee_quantity_range", + "Employee quantity range", + help="Range of this partner depending on the employee quantity.", oldname="employees_range") -class ResPartnerEmployeeAmountRange(models.Model): - _name = "res.partner.employee_amount_range" - _description = "Partner employee amount range" +class ResPartnerEmployeeQuantityRange(models.Model): + _name = "res.partner.employee_quantity_range" + _description = "Partner employee quantity range" name = fields.Char(required=True, translate=True) diff --git a/partner_employee_quantity/security/ir.model.access.csv b/partner_employee_quantity/security/ir.model.access.csv new file mode 100644 index 000000000..ad0aaf6bf --- /dev/null +++ b/partner_employee_quantity/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_res_partner_employee_quantity_range_public","res_partner_employee_quantity_range group_public","model_res_partner_employee_quantity_range","base.group_public",1,0,0,0 +"access_res_partner_employee_quantity_range_portal","res_partner_employee_quantity_range group_portal","model_res_partner_employee_quantity_range","base.group_portal",1,0,0,0 +"access_res_partner_employee_quantity_range_group_partner_manager","res_partner_employee_quantity_range group_partner_manager","model_res_partner_employee_quantity_range","base.group_partner_manager",1,1,1,1 +"access_res_partner_employee_quantity_range_group_user","res_partner_employee_quantity_range group_user","model_res_partner_employee_quantity_range","base.group_user",1,0,0,0 diff --git a/partner_employee_amount/static/description/icon.png b/partner_employee_quantity/static/description/icon.png similarity index 100% rename from partner_employee_amount/static/description/icon.png rename to partner_employee_quantity/static/description/icon.png diff --git a/partner_employee_amount/views/res_partner_employee_amount_range_view.xml b/partner_employee_quantity/views/res_partner_employee_quantity_range_view.xml similarity index 61% rename from partner_employee_amount/views/res_partner_employee_amount_range_view.xml rename to partner_employee_quantity/views/res_partner_employee_quantity_range_view.xml index 03d580af9..429640911 100644 --- a/partner_employee_amount/views/res_partner_employee_amount_range_view.xml +++ b/partner_employee_quantity/views/res_partner_employee_quantity_range_view.xml @@ -3,17 +3,17 @@ <data> <record id="employees_range_action" model="ir.actions.act_window"> - <field name="name">Ranges by amount of employees</field> - <field name="res_model">res.partner.employee_amount_range</field> + <field name="name">Ranges by quantity of employees</field> + <field name="res_model">res.partner.employee_quantity_range</field> <field name="view_type">form</field> <field name="view_mode">tree</field> </record> <record id="employees_range_tree_view" model="ir.ui.view"> - <field name="name">Amount of employees ranges tree</field> - <field name="model">res.partner.employee_amount_range</field> + <field name="name">Quantity of employees ranges tree</field> + <field name="model">res.partner.employee_quantity_range</field> <field name="arch" type="xml"> - <tree string="Ranges by amount of employees" editable="top"> + <tree string="Ranges by quantity of employees" editable="top"> <field name="name"/> </tree> </field> diff --git a/partner_employee_amount/views/res_partner_view.xml b/partner_employee_quantity/views/res_partner_view.xml similarity index 74% rename from partner_employee_amount/views/res_partner_view.xml rename to partner_employee_quantity/views/res_partner_view.xml index 133061a2a..8a8297db5 100644 --- a/partner_employee_amount/views/res_partner_view.xml +++ b/partner_employee_quantity/views/res_partner_view.xml @@ -8,11 +8,11 @@ <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> <xpath expr="//page[@name='sales_purchases']/group"> - <group name="employee_amount" - string="Employee amount" + <group name="employee_quantity" + string="Employee quantity" attrs="{'invisible': [('is_company', '=', False)]}"> - <field name="employee_amount"/> - <field name="employee_amount_range_id"/> + <field name="employee_quantity"/> + <field name="employee_quantity_range_id"/> </group> </xpath> </field> @@ -24,9 +24,9 @@ <field name="inherit_id" ref="base.view_res_partner_filter"/> <field name="arch" type="xml"> <filter string="Salesperson" position="after"> - <filter string="Employees" + <filter string="Employee Quantity" domain="[('is_company','=', True)]" - context="{'group_by': 'employee_amount_range_id'}"/> + context="{'group_by': 'employee_quantity_range_id'}"/> </filter> </field> </record> From d227a867f9e404ff1f11dc3469eb028440ea4b91 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Sat, 21 Feb 2015 20:30:57 +0100 Subject: [PATCH 40/58] Addon crm_department --- crm_department/README.rst | 13 +++ crm_department/__init__.py | 6 ++ crm_department/__openerp__.py | 39 +++++++++ crm_department/i18n/crm_department.pot | 84 ++++++++++++++++++ crm_department/i18n/es.po | 84 ++++++++++++++++++ crm_department/models/__init__.py | 8 ++ crm_department/models/crm_department.py | 20 +++++ crm_department/models/crm_lead.py | 23 +++++ crm_department/models/res_partner.py | 11 +++ crm_department/static/description/icon.png | Bin 0 -> 22620 bytes crm_department/views/crm_department_view.xml | 30 +++++++ crm_department/views/crm_lead_view.xml | 86 +++++++++++++++++++ crm_department/views/res_partner_view.xml | 47 ++++++++++ 13 files changed, 451 insertions(+) create mode 100644 crm_department/README.rst create mode 100644 crm_department/__init__.py create mode 100644 crm_department/__openerp__.py create mode 100644 crm_department/i18n/crm_department.pot create mode 100644 crm_department/i18n/es.po create mode 100644 crm_department/models/__init__.py create mode 100644 crm_department/models/crm_department.py create mode 100644 crm_department/models/crm_lead.py create mode 100644 crm_department/models/res_partner.py create mode 100644 crm_department/static/description/icon.png create mode 100644 crm_department/views/crm_department_view.xml create mode 100644 crm_department/views/crm_lead_view.xml create mode 100644 crm_department/views/res_partner_view.xml diff --git a/crm_department/README.rst b/crm_department/README.rst new file mode 100644 index 000000000..e9228f523 --- /dev/null +++ b/crm_department/README.rst @@ -0,0 +1,13 @@ +Departments in CRM +================== + +This module adds the concept of department to the CRM main objects (lead, +opportunity, partner), and propagate them through the workflow. + +Credits +======= + +Contributors +------------ +* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +* Antonio Espinosa <antonioea@antiun.com> diff --git a/crm_department/__init__.py b/crm_department/__init__.py new file mode 100644 index 000000000..054c8853d --- /dev/null +++ b/crm_department/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import models diff --git a/crm_department/__openerp__.py b/crm_department/__openerp__.py new file mode 100644 index 000000000..7d38c7269 --- /dev/null +++ b/crm_department/__openerp__.py @@ -0,0 +1,39 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Odoo Source Management Solution +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + 'name': 'Departments in CRM', + 'version': '1.0', + 'category': 'Customer Relationship Management', + 'author': 'Serv. Tecnolog. Avanzados - Pedro M. Baeza, ' + 'Antiun Ingeniería S.L.', + 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', + 'depends': [ + 'crm', + ], + 'data': [ + 'views/crm_department_view.xml', + 'views/crm_lead_view.xml', + 'views/res_partner_view.xml', + ], + "installable": True, +} diff --git a/crm_department/i18n/crm_department.pot b/crm_department/i18n/crm_department.pot new file mode 100644 index 000000000..e179e4782 --- /dev/null +++ b/crm_department/i18n/crm_department.pot @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_department +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-24 13:47+0000\n" +"PO-Revision-Date: 2015-01-24 13:47+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_department +#: field:crm.department,children:0 +msgid "Children" +msgstr "" + +#. module: crm_department +#: field:crm.department,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: crm_department +#: field:crm.department,create_date:0 +msgid "Created on" +msgstr "" + +#. module: crm_department +#: field:crm.department,id:0 +msgid "ID" +msgstr "" + +#. module: crm_department +#: field:crm.department,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: crm_department +#: field:crm.department,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: crm_department +#: field:crm.department,name:0 +msgid "Name" +msgstr "" + +#. module: crm_department +#: field:crm.department,parent_left:0 +msgid "Parent Left" +msgstr "" + +#. module: crm_department +#: field:crm.department,parent_right:0 +msgid "Parent Right" +msgstr "" + +#. module: crm_department +#: field:crm.department,parent_id:0 +msgid "Parent id" +msgstr "" + +#. module: crm_department +#: view:crm.lead:crm_department.view_crm_case_leads_filter_department +#: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department +#: field:crm.lead,department:0 +#: model:ir.model,name:crm_department.model_crm_department +#: view:res.partner:crm_department.view_res_partner_filter_department +#: field:res.partner,department:0 +msgid "Department" +msgstr "" + +#. module: crm_department +#: view:crm.department:crm_department.crm_department_tree_view +#: model:ir.actions.act_window,name:crm_department.crm_department_action +#: model:ir.ui.menu,name:crm_department.menu_crm_department +msgid "Departments" +msgstr "" + diff --git a/crm_department/i18n/es.po b/crm_department/i18n/es.po new file mode 100644 index 000000000..0516eca84 --- /dev/null +++ b/crm_department/i18n/es.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_department +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-24 13:47+0000\n" +"PO-Revision-Date: 2015-01-24 13:47+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_department +#: field:crm.department,children:0 +msgid "Children" +msgstr "Hijos" + +#. module: crm_department +#: field:crm.department,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: crm_department +#: field:crm.department,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: crm_department +#: field:crm.department,id:0 +msgid "ID" +msgstr "ID" + +#. module: crm_department +#: field:crm.department,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: crm_department +#: field:crm.department,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: crm_department +#: field:crm.department,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: crm_department +#: field:crm.department,parent_left:0 +msgid "Parent Left" +msgstr "Padre izquierdo" + +#. module: crm_department +#: field:crm.department,parent_right:0 +msgid "Parent Right" +msgstr "Padre derecho" + +#. module: crm_department +#: field:crm.department,parent_id:0 +msgid "Parent id" +msgstr "ID del padre" + +#. module: crm_department +#: view:crm.lead:crm_department.view_crm_case_leads_filter_department +#: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department +#: field:crm.lead,department:0 +#: model:ir.model,name:crm_department.model_crm_department +#: view:res.partner:crm_department.view_res_partner_filter_department +#: field:res.partner,department:0 +msgid "Department" +msgstr "Departamento" + +#. module: crm_department +#: view:crm.department:crm_department.crm_department_tree_view +#: model:ir.actions.act_window,name:crm_department.crm_department_action +#: model:ir.ui.menu,name:crm_department.menu_crm_department +msgid "Departments" +msgstr "Departamentos" + diff --git a/crm_department/models/__init__.py b/crm_department/models/__init__.py new file mode 100644 index 000000000..006c33b3b --- /dev/null +++ b/crm_department/models/__init__.py @@ -0,0 +1,8 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import crm_department +from . import crm_lead +from . import res_partner diff --git a/crm_department/models/crm_department.py b/crm_department/models/crm_department.py new file mode 100644 index 000000000..2927c567a --- /dev/null +++ b/crm_department/models/crm_department.py @@ -0,0 +1,20 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmDepartment(models.Model): + _name = 'crm.department' + _order = "parent_left" + _parent_order = "name" + _parent_store = True + _description = "Department" + + name = fields.Char(required=True) + parent_id = fields.Many2one(comodel_name='crm.department') + children = fields.One2many(comodel_name='crm.department', + inverse_name='parent_id') + parent_left = fields.Integer('Parent Left', select=True) + parent_right = fields.Integer('Parent Right', select=True) diff --git a/crm_department/models/crm_lead.py b/crm_department/models/crm_lead.py new file mode 100644 index 000000000..33fa82850 --- /dev/null +++ b/crm_department/models/crm_lead.py @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmLead(models.Model): + _inherit = 'crm.lead' + + department = fields.Many2one(comodel_name='crm.department') + + def _lead_create_contact(self, cr, uid, lead, name, is_company, + parent_id=False, context=None): + """Propagate department to created partner. + """ + partner_id = super(CrmLead, self)._lead_create_contact( + cr, uid, lead, name, is_company, parent_id=parent_id, + context=context) + self.pool['res.partner'].write( + cr, uid, partner_id, {'department': lead.department.id}, + context=context) + return partner_id diff --git a/crm_department/models/res_partner.py b/crm_department/models/res_partner.py new file mode 100644 index 000000000..b8c7cd3a8 --- /dev/null +++ b/crm_department/models/res_partner.py @@ -0,0 +1,11 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + department = fields.Many2one(comodel_name='crm.department') diff --git a/crm_department/static/description/icon.png b/crm_department/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..add81b17a4847ff2663923593ecc364587d3dd9f GIT binary patch literal 22620 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%0A{Ckv_A`d0n`sc6nr@&!27fYc51Y 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 P00000NkvXXu0mjfiBcmQ literal 0 HcmV?d00001 diff --git a/crm_department/views/crm_department_view.xml b/crm_department/views/crm_department_view.xml new file mode 100644 index 000000000..4a0c66fa7 --- /dev/null +++ b/crm_department/views/crm_department_view.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record id="crm_department_action" model="ir.actions.act_window"> + <field name="name">Departments</field> + <field name="res_model">crm.department</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> + </record> + + <record id="crm_department_tree_view" model="ir.ui.view"> + <field name="name">CRM department tree</field> + <field name="model">crm.department</field> + <field name="arch" type="xml"> + <tree string="Departments" editable="bottom"> + <field name="name"/> + <field name="parent_id"/> + </tree> + </field> + </record> + + <menuitem action="crm_department_action" + id="menu_crm_department" + name="Departments" + parent="base.menu_crm_config_lead" + sequence="3"/> + + </data> +</openerp> \ No newline at end of file diff --git a/crm_department/views/crm_lead_view.xml b/crm_department/views/crm_lead_view.xml new file mode 100644 index 000000000..32e851bce --- /dev/null +++ b/crm_department/views/crm_lead_view.xml @@ -0,0 +1,86 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="ir.ui.view" id="crm_case_form_view_leads_department"> + <field name="name">CRM - Leads Form with department</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department"/> + </field> + </field> + </record> + + <!-- Uncomment this to add a new column to tree view + <record model="ir.ui.view" id="crm_case_tree_view_leads_department"> + <field name="name">Leads with department</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_tree_view_leads"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + </field> + </record> + --> + + <record model="ir.ui.view" id="view_crm_case_leads_filter_department"> + <field name="name">CRM - Leads Search with departments</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="Department" + domain="[]" + context="{'group_by': 'department'}"/> + </filter> + </field> + </record> + + <record model="ir.ui.view" id="crm_case_form_view_oppor_department"> + <field name="name">CRM - Leads Form with department</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department"/> + </field> + </field> + </record> + + <!-- Uncomment this to add a new column to tree view + <record model="ir.ui.view" id="crm_case_tree_view_oppor_department"> + <field name="name">Leads with department</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_tree_view_oppor"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + </field> + </record> + --> + + <record model="ir.ui.view" id="view_crm_case_opportunities_filter_department"> + <field name="name">CRM - Leads Search with departments</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="Department" + domain="[]" + context="{'group_by': 'department'}"/> + </filter> + </field> + </record> + + </data> +</openerp> \ No newline at end of file diff --git a/crm_department/views/res_partner_view.xml b/crm_department/views/res_partner_view.xml new file mode 100644 index 000000000..0909e057d --- /dev/null +++ b/crm_department/views/res_partner_view.xml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="ir.ui.view" id="view_partner_form_department"> + <field name="name">Partner form with department</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department" + placeholder="Department"/> + </field> + </field> + </record> + + <!-- Uncomment this to add a new column to tree view + <record model="ir.ui.view" id="view_partner_tree_department"> + <field name="name">Partner tree with department</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_tree"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department"/> + </field> + </field> + </record> + --> + + <record model="ir.ui.view" id="view_res_partner_filter_department"> + <field name="name">Partner search with department</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_res_partner_filter"/> + <field name="arch" type="xml"> + <field name="category_id" position="after"> + <field name="department"/> + </field> + <filter string="Salesperson" position="after"> + <filter string="Department" + domain="[]" + context="{'group_by': 'department'}"/> + </filter> + </field> + </record> + + </data> +</openerp> \ No newline at end of file From 9641220864e7d4a910c87e3f67b7e36256017db2 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Sat, 21 Feb 2015 20:45:43 +0100 Subject: [PATCH 41/58] Add copyright info --- crm_department/__openerp__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crm_department/__openerp__.py b/crm_department/__openerp__.py index 7d38c7269..b48cec38a 100644 --- a/crm_department/__openerp__.py +++ b/crm_department/__openerp__.py @@ -4,6 +4,8 @@ # OpenERP, Odoo Source Management Solution # Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) # Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published From dd5771696ffc5fa3e0af467a711f18ce46785e2c Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Tue, 3 Mar 2015 15:48:58 +0100 Subject: [PATCH 42/58] CRM Department access rights --- crm_department/__openerp__.py | 1 + crm_department/security/ir.model.access.csv | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 crm_department/security/ir.model.access.csv diff --git a/crm_department/__openerp__.py b/crm_department/__openerp__.py index b48cec38a..e4372990c 100644 --- a/crm_department/__openerp__.py +++ b/crm_department/__openerp__.py @@ -36,6 +36,7 @@ 'views/crm_department_view.xml', 'views/crm_lead_view.xml', 'views/res_partner_view.xml', + 'security/ir.model.access.csv', ], "installable": True, } diff --git a/crm_department/security/ir.model.access.csv b/crm_department/security/ir.model.access.csv new file mode 100644 index 000000000..dc285f926 --- /dev/null +++ b/crm_department/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_crm_department_public","crm_department group_public","model_crm_department","base.group_public",1,0,0,0 +"access_crm_department_portal","crm_department group_portal","model_crm_department","base.group_portal",1,0,0,0 +"access_crm_department_group_partner_manager","crm_department group_partner_manager","model_crm_department","base.group_partner_manager",1,1,1,1 +"access_crm_department_group_user","crm_department group_user","model_crm_department","base.group_user",1,0,0,0 From 766b8564f524c9fcad2d82d08c8ec370532b7411 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Fri, 27 Mar 2015 12:53:53 +0100 Subject: [PATCH 43/58] Set some fields as tranlate --- crm_department/models/crm_department.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_department/models/crm_department.py b/crm_department/models/crm_department.py index 2927c567a..71bc4067e 100644 --- a/crm_department/models/crm_department.py +++ b/crm_department/models/crm_department.py @@ -12,7 +12,7 @@ class CrmDepartment(models.Model): _parent_store = True _description = "Department" - name = fields.Char(required=True) + name = fields.Char(required=True, translate=True) parent_id = fields.Many2one(comodel_name='crm.department') children = fields.One2many(comodel_name='crm.department', inverse_name='parent_id') From dbceae355edc3ddee96382de83a50ef5a8bb8420 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Wed, 8 Apr 2015 19:34:58 +0200 Subject: [PATCH 44/58] [FIX] XML revised --- crm_department/views/crm_department_view.xml | 48 +++--- crm_department/views/crm_lead_view.xml | 154 +++++++++---------- crm_department/views/res_partner_view.xml | 82 +++++----- 3 files changed, 142 insertions(+), 142 deletions(-) diff --git a/crm_department/views/crm_department_view.xml b/crm_department/views/crm_department_view.xml index 4a0c66fa7..d340f28e3 100644 --- a/crm_department/views/crm_department_view.xml +++ b/crm_department/views/crm_department_view.xml @@ -1,30 +1,30 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record id="crm_department_action" model="ir.actions.act_window"> - <field name="name">Departments</field> - <field name="res_model">crm.department</field> - <field name="view_type">form</field> - <field name="view_mode">tree</field> - </record> +<record id="crm_department_action" model="ir.actions.act_window"> + <field name="name">Departments</field> + <field name="res_model">crm.department</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> +</record> - <record id="crm_department_tree_view" model="ir.ui.view"> - <field name="name">CRM department tree</field> - <field name="model">crm.department</field> - <field name="arch" type="xml"> - <tree string="Departments" editable="bottom"> - <field name="name"/> - <field name="parent_id"/> - </tree> - </field> - </record> +<record id="crm_department_tree_view" model="ir.ui.view"> + <field name="name">CRM department tree</field> + <field name="model">crm.department</field> + <field name="arch" type="xml"> + <tree string="Departments" editable="bottom"> + <field name="name"/> + <field name="parent_id"/> + </tree> + </field> +</record> - <menuitem action="crm_department_action" - id="menu_crm_department" - name="Departments" - parent="base.menu_crm_config_lead" - sequence="3"/> +<menuitem action="crm_department_action" + id="menu_crm_department" + name="Departments" + parent="base.menu_crm_config_lead" + sequence="3"/> - </data> +</data> </openerp> \ No newline at end of file diff --git a/crm_department/views/crm_lead_view.xml b/crm_department/views/crm_lead_view.xml index 32e851bce..26439d894 100644 --- a/crm_department/views/crm_lead_view.xml +++ b/crm_department/views/crm_lead_view.xml @@ -1,86 +1,86 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record model="ir.ui.view" id="crm_case_form_view_leads_department"> - <field name="name">CRM - Leads Form with department</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="crm_case_form_view_leads_department"> + <field name="name">CRM - Leads Form with department</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department"/> + </field> + </field> +</record> - <!-- Uncomment this to add a new column to tree view - <record model="ir.ui.view" id="crm_case_tree_view_leads_department"> - <field name="name">Leads with department</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_tree_view_leads"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - </field> - </record> - --> +<!-- Uncomment this to add a new column to tree view +<record model="ir.ui.view" id="crm_case_tree_view_leads_department"> + <field name="name">Leads with department</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_tree_view_leads"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + </field> +</record> +--> - <record model="ir.ui.view" id="view_crm_case_leads_filter_department"> - <field name="name">CRM - Leads Search with departments</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="Department" - domain="[]" - context="{'group_by': 'department'}"/> - </filter> - </field> - </record> +<record model="ir.ui.view" id="view_crm_case_leads_filter_department"> + <field name="name">CRM - Leads Search with departments</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="Department" + domain="[]" + context="{'group_by': 'department'}"/> + </filter> + </field> +</record> - <record model="ir.ui.view" id="crm_case_form_view_oppor_department"> - <field name="name">CRM - Leads Form with department</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="crm_case_form_view_oppor_department"> + <field name="name">CRM - Leads Form with department</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department"/> + </field> + </field> +</record> - <!-- Uncomment this to add a new column to tree view - <record model="ir.ui.view" id="crm_case_tree_view_oppor_department"> - <field name="name">Leads with department</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_tree_view_oppor"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - </field> - </record> - --> +<!-- Uncomment this to add a new column to tree view +<record model="ir.ui.view" id="crm_case_tree_view_oppor_department"> + <field name="name">Leads with department</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_tree_view_oppor"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + </field> +</record> +--> - <record model="ir.ui.view" id="view_crm_case_opportunities_filter_department"> - <field name="name">CRM - Leads Search with departments</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="Department" - domain="[]" - context="{'group_by': 'department'}"/> - </filter> - </field> - </record> +<record model="ir.ui.view" id="view_crm_case_opportunities_filter_department"> + <field name="name">CRM - Leads Search with departments</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="Department" + domain="[]" + context="{'group_by': 'department'}"/> + </filter> + </field> +</record> - </data> +</data> </openerp> \ No newline at end of file diff --git a/crm_department/views/res_partner_view.xml b/crm_department/views/res_partner_view.xml index 0909e057d..a896b98fb 100644 --- a/crm_department/views/res_partner_view.xml +++ b/crm_department/views/res_partner_view.xml @@ -1,47 +1,47 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="utf-8"?> <openerp> - <data> +<data> - <record model="ir.ui.view" id="view_partner_form_department"> - <field name="name">Partner form with department</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department" - placeholder="Department"/> - </field> - </field> - </record> +<record model="ir.ui.view" id="view_partner_form_department"> + <field name="name">Partner form with department</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department" + placeholder="Department"/> + </field> + </field> +</record> - <!-- Uncomment this to add a new column to tree view - <record model="ir.ui.view" id="view_partner_tree_department"> - <field name="name">Partner tree with department</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_tree"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department"/> - </field> - </field> - </record> - --> +<!-- Uncomment this to add a new column to tree view +<record model="ir.ui.view" id="view_partner_tree_department"> + <field name="name">Partner tree with department</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_tree"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department"/> + </field> + </field> +</record> +--> - <record model="ir.ui.view" id="view_res_partner_filter_department"> - <field name="name">Partner search with department</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_res_partner_filter"/> - <field name="arch" type="xml"> - <field name="category_id" position="after"> - <field name="department"/> - </field> - <filter string="Salesperson" position="after"> - <filter string="Department" - domain="[]" - context="{'group_by': 'department'}"/> - </filter> - </field> - </record> +<record model="ir.ui.view" id="view_res_partner_filter_department"> + <field name="name">Partner search with department</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_res_partner_filter"/> + <field name="arch" type="xml"> + <field name="category_id" position="after"> + <field name="department"/> + </field> + <filter string="Salesperson" position="after"> + <filter string="Department" + domain="[('is_company', '=', False)]" + context="{'group_by': 'department'}"/> + </filter> + </field> +</record> - </data> +</data> </openerp> \ No newline at end of file From 01de2b79c8be8b6e5783a54808bc901b9fed54da Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Thu, 16 Apr 2015 16:32:07 +0200 Subject: [PATCH 45/58] [FIX] View fields review --- crm_department/views/crm_lead_view.xml | 8 ++++++-- crm_department/views/res_partner_view.xml | 10 +++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/crm_department/views/crm_lead_view.xml b/crm_department/views/crm_lead_view.xml index 26439d894..c934eedd0 100644 --- a/crm_department/views/crm_lead_view.xml +++ b/crm_department/views/crm_lead_view.xml @@ -8,7 +8,9 @@ <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> <field name="arch" type="xml"> <field name="phone" position="before"> - <field name="department"/> + <field name="department" + placeholder="Department" + options='{"no_open": True}'/> </field> </field> </record> @@ -48,7 +50,9 @@ <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> <field name="arch" type="xml"> <field name="phone" position="before"> - <field name="department"/> + <field name="department" + placeholder="Department" + options='{"no_open": True}'/> </field> </field> </record> diff --git a/crm_department/views/res_partner_view.xml b/crm_department/views/res_partner_view.xml index a896b98fb..8856abd93 100644 --- a/crm_department/views/res_partner_view.xml +++ b/crm_department/views/res_partner_view.xml @@ -9,8 +9,16 @@ <field name="arch" type="xml"> <field name="phone" position="before"> <field name="department" - placeholder="Department"/> + placeholder="Department" + attrs="{'invisible': [('is_company','=', True)]}" + options='{"no_open": True}'/> </field> + <xpath expr="//field[@name='child_ids']/form//field[@name='phone']" position="before"> + <field name="department" + placeholder="Department" + attrs="{'invisible': [('is_company','=', True)]}" + options='{"no_open": True}'/> + </xpath> </field> </record> From 3ca7885df0ff11780d1ddb9f8a5ba345e8f04c97 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antonioea@antiun.com> Date: Fri, 22 May 2015 09:29:19 +0200 Subject: [PATCH 46/58] [FIX] Add new record on top of the list --- crm_department/views/crm_department_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_department/views/crm_department_view.xml b/crm_department/views/crm_department_view.xml index d340f28e3..981e7d7b7 100644 --- a/crm_department/views/crm_department_view.xml +++ b/crm_department/views/crm_department_view.xml @@ -13,7 +13,7 @@ <field name="name">CRM department tree</field> <field name="model">crm.department</field> <field name="arch" type="xml"> - <tree string="Departments" editable="bottom"> + <tree string="Departments" editable="top"> <field name="name"/> <field name="parent_id"/> </tree> From 027ec8255692063ec66cd84c33baccbdd53d4fb5 Mon Sep 17 00:00:00 2001 From: Javier Iniesta <javieria@antiun.com> Date: Wed, 27 May 2015 12:00:23 +0200 Subject: [PATCH 47/58] [IMP] Updated translations --- crm_department/i18n/crm_department.pot | 46 +++++++++++++++----- crm_department/i18n/es.po | 58 ++++++++++++++++++-------- 2 files changed, 76 insertions(+), 28 deletions(-) diff --git a/crm_department/i18n/crm_department.pot b/crm_department/i18n/crm_department.pot index e179e4782..561efa034 100644 --- a/crm_department/i18n/crm_department.pot +++ b/crm_department/i18n/crm_department.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-24 13:47+0000\n" -"PO-Revision-Date: 2015-01-24 13:47+0000\n" +"POT-Creation-Date: 2015-05-27 08:51+0000\n" +"PO-Revision-Date: 2015-05-27 08:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -30,6 +30,26 @@ msgstr "" msgid "Created on" msgstr "" +#. module: crm_department +#: view:crm.lead:crm_department.crm_case_form_view_leads_department +#: view:crm.lead:crm_department.crm_case_form_view_oppor_department +#: view:crm.lead:crm_department.view_crm_case_leads_filter_department +#: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department +#: field:crm.lead,department:0 +#: model:ir.model,name:crm_department.model_crm_department +#: view:res.partner:crm_department.view_partner_form_department +#: view:res.partner:crm_department.view_res_partner_filter_department +#: field:res.partner,department:0 +msgid "Department" +msgstr "" + +#. module: crm_department +#: view:crm.department:crm_department.crm_department_tree_view +#: model:ir.actions.act_window,name:crm_department.crm_department_action +#: model:ir.ui.menu,name:crm_department.menu_crm_department +msgid "Departments" +msgstr "" + #. module: crm_department #: field:crm.department,id:0 msgid "ID" @@ -45,6 +65,11 @@ msgstr "" msgid "Last Updated on" msgstr "" +#. module: crm_department +#: model:ir.model,name:crm_department.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" + #. module: crm_department #: field:crm.department,name:0 msgid "Name" @@ -65,20 +90,19 @@ msgstr "" msgid "Parent id" msgstr "" +#. module: crm_department +#: model:ir.model,name:crm_department.model_res_partner +msgid "Partner" +msgstr "" + #. module: crm_department #: view:crm.lead:crm_department.view_crm_case_leads_filter_department #: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department -#: field:crm.lead,department:0 -#: model:ir.model,name:crm_department.model_crm_department -#: view:res.partner:crm_department.view_res_partner_filter_department -#: field:res.partner,department:0 -msgid "Department" +msgid "Sales Team" msgstr "" #. module: crm_department -#: view:crm.department:crm_department.crm_department_tree_view -#: model:ir.actions.act_window,name:crm_department.crm_department_action -#: model:ir.ui.menu,name:crm_department.menu_crm_department -msgid "Departments" +#: view:res.partner:crm_department.view_res_partner_filter_department +msgid "Salesperson" msgstr "" diff --git a/crm_department/i18n/es.po b/crm_department/i18n/es.po index 0516eca84..1620205a7 100644 --- a/crm_department/i18n/es.po +++ b/crm_department/i18n/es.po @@ -1,13 +1,13 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * crm_department +# * crm_department # msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-24 13:47+0000\n" -"PO-Revision-Date: 2015-01-24 13:47+0000\n" +"POT-Creation-Date: 2015-05-27 08:51+0000\n" +"PO-Revision-Date: 2015-05-27 08:51+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -30,6 +30,26 @@ msgstr "Creado por" msgid "Created on" msgstr "Creado en" +#. module: crm_department +#: view:crm.lead:crm_department.crm_case_form_view_leads_department +#: view:crm.lead:crm_department.crm_case_form_view_oppor_department +#: view:crm.lead:crm_department.view_crm_case_leads_filter_department +#: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department +#: field:crm.lead,department:0 +#: model:ir.model,name:crm_department.model_crm_department +#: view:res.partner:crm_department.view_partner_form_department +#: view:res.partner:crm_department.view_res_partner_filter_department +#: field:res.partner,department:0 +msgid "Department" +msgstr "Departamento" + +#. module: crm_department +#: view:crm.department:crm_department.crm_department_tree_view +#: model:ir.actions.act_window,name:crm_department.crm_department_action +#: model:ir.ui.menu,name:crm_department.menu_crm_department +msgid "Departments" +msgstr "Departamentos" + #. module: crm_department #: field:crm.department,id:0 msgid "ID" @@ -45,6 +65,11 @@ msgstr "Última actualización por" msgid "Last Updated on" msgstr "Última actualización en" +#. module: crm_department +#: model:ir.model,name:crm_department.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Iniciativa/Oportunidad" + #. module: crm_department #: field:crm.department,name:0 msgid "Name" @@ -53,32 +78,31 @@ msgstr "Nombre" #. module: crm_department #: field:crm.department,parent_left:0 msgid "Parent Left" -msgstr "Padre izquierdo" +msgstr "Padre Izquierdo" #. module: crm_department #: field:crm.department,parent_right:0 msgid "Parent Right" -msgstr "Padre derecho" +msgstr "Padre Derecho" #. module: crm_department #: field:crm.department,parent_id:0 msgid "Parent id" -msgstr "ID del padre" +msgstr "ID Padre" + +#. module: crm_department +#: model:ir.model,name:crm_department.model_res_partner +msgid "Partner" +msgstr "Empresa" #. module: crm_department #: view:crm.lead:crm_department.view_crm_case_leads_filter_department #: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department -#: field:crm.lead,department:0 -#: model:ir.model,name:crm_department.model_crm_department -#: view:res.partner:crm_department.view_res_partner_filter_department -#: field:res.partner,department:0 -msgid "Department" -msgstr "Departamento" +msgid "Sales Team" +msgstr "Equipo de ventas" #. module: crm_department -#: view:crm.department:crm_department.crm_department_tree_view -#: model:ir.actions.act_window,name:crm_department.crm_department_action -#: model:ir.ui.menu,name:crm_department.menu_crm_department -msgid "Departments" -msgstr "Departamentos" +#: view:res.partner:crm_department.view_res_partner_filter_department +msgid "Salesperson" +msgstr "Comercial" From 368fafb379a261db1b4580e123a3f1dd696f3b02 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antespi@gmail.com> Date: Wed, 1 Jul 2015 13:32:14 +0200 Subject: [PATCH 48/58] Renaming several views to complain best practices --- crm_department/views/crm_lead_view.xml | 42 +++++--------------------- 1 file changed, 8 insertions(+), 34 deletions(-) diff --git a/crm_department/views/crm_lead_view.xml b/crm_department/views/crm_lead_view.xml index c934eedd0..6b4d289af 100644 --- a/crm_department/views/crm_lead_view.xml +++ b/crm_department/views/crm_lead_view.xml @@ -2,8 +2,8 @@ <openerp> <data> -<record model="ir.ui.view" id="crm_case_form_view_leads_department"> - <field name="name">CRM - Leads Form with department</field> +<record model="ir.ui.view" id="crm_case_form_view_leads"> + <field name="name">Add department field</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> <field name="arch" type="xml"> @@ -15,21 +15,8 @@ </field> </record> -<!-- Uncomment this to add a new column to tree view -<record model="ir.ui.view" id="crm_case_tree_view_leads_department"> - <field name="name">Leads with department</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_tree_view_leads"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - </field> -</record> ---> - -<record model="ir.ui.view" id="view_crm_case_leads_filter_department"> - <field name="name">CRM - Leads Search with departments</field> +<record model="ir.ui.view" id="view_crm_case_leads_filter"> + <field name="name">Add department field for searching and grouping</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> <field name="arch" type="xml"> @@ -44,8 +31,8 @@ </field> </record> -<record model="ir.ui.view" id="crm_case_form_view_oppor_department"> - <field name="name">CRM - Leads Form with department</field> +<record model="ir.ui.view" id="crm_case_form_view_oppor"> + <field name="name">Add department field</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> <field name="arch" type="xml"> @@ -57,21 +44,8 @@ </field> </record> -<!-- Uncomment this to add a new column to tree view -<record model="ir.ui.view" id="crm_case_tree_view_oppor_department"> - <field name="name">Leads with department</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_tree_view_oppor"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - </field> -</record> ---> - -<record model="ir.ui.view" id="view_crm_case_opportunities_filter_department"> - <field name="name">CRM - Leads Search with departments</field> +<record model="ir.ui.view" id="view_crm_case_opportunities_filter"> + <field name="name">Add department field for searching and grouping</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> <field name="arch" type="xml"> From e40da2e535566e4c60840c9f132782457ca43ea8 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antespi@gmail.com> Date: Tue, 18 Aug 2015 11:36:11 +0200 Subject: [PATCH 49/58] [FIX] Rename crm_department addon to crm_partner_department in order to do not conflict with OCA/department addon with the same name --- crm_department/README.rst | 13 --- crm_department/__init__.py | 6 -- crm_department/__openerp__.py | 42 -------- crm_department/i18n/crm_department.pot | 108 ------------------- crm_department/i18n/es.po | 108 ------------------- crm_department/models/__init__.py | 8 -- crm_department/models/crm_department.py | 20 ---- crm_department/models/crm_lead.py | 23 ---- crm_department/models/res_partner.py | 11 -- crm_department/security/ir.model.access.csv | 5 - crm_department/static/description/icon.png | Bin 22620 -> 0 bytes crm_department/views/crm_department_view.xml | 30 ------ crm_department/views/crm_lead_view.xml | 64 ----------- crm_department/views/res_partner_view.xml | 55 ---------- 14 files changed, 493 deletions(-) delete mode 100644 crm_department/README.rst delete mode 100644 crm_department/__init__.py delete mode 100644 crm_department/__openerp__.py delete mode 100644 crm_department/i18n/crm_department.pot delete mode 100644 crm_department/i18n/es.po delete mode 100644 crm_department/models/__init__.py delete mode 100644 crm_department/models/crm_department.py delete mode 100644 crm_department/models/crm_lead.py delete mode 100644 crm_department/models/res_partner.py delete mode 100644 crm_department/security/ir.model.access.csv delete mode 100644 crm_department/static/description/icon.png delete mode 100644 crm_department/views/crm_department_view.xml delete mode 100644 crm_department/views/crm_lead_view.xml delete mode 100644 crm_department/views/res_partner_view.xml diff --git a/crm_department/README.rst b/crm_department/README.rst deleted file mode 100644 index e9228f523..000000000 --- a/crm_department/README.rst +++ /dev/null @@ -1,13 +0,0 @@ -Departments in CRM -================== - -This module adds the concept of department to the CRM main objects (lead, -opportunity, partner), and propagate them through the workflow. - -Credits -======= - -Contributors ------------- -* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> -* Antonio Espinosa <antonioea@antiun.com> diff --git a/crm_department/__init__.py b/crm_department/__init__.py deleted file mode 100644 index 054c8853d..000000000 --- a/crm_department/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## - -from . import models diff --git a/crm_department/__openerp__.py b/crm_department/__openerp__.py deleted file mode 100644 index e4372990c..000000000 --- a/crm_department/__openerp__.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Odoo Source Management Solution -# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) -# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa <antonioea@antiun.com> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -{ - 'name': 'Departments in CRM', - 'version': '1.0', - 'category': 'Customer Relationship Management', - 'author': 'Serv. Tecnolog. Avanzados - Pedro M. Baeza, ' - 'Antiun Ingeniería S.L.', - 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', - 'depends': [ - 'crm', - ], - 'data': [ - 'views/crm_department_view.xml', - 'views/crm_lead_view.xml', - 'views/res_partner_view.xml', - 'security/ir.model.access.csv', - ], - "installable": True, -} diff --git a/crm_department/i18n/crm_department.pot b/crm_department/i18n/crm_department.pot deleted file mode 100644 index 561efa034..000000000 --- a/crm_department/i18n/crm_department.pot +++ /dev/null @@ -1,108 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * crm_department -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 08:51+0000\n" -"PO-Revision-Date: 2015-05-27 08:51+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_department -#: field:crm.department,children:0 -msgid "Children" -msgstr "" - -#. module: crm_department -#: field:crm.department,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: crm_department -#: field:crm.department,create_date:0 -msgid "Created on" -msgstr "" - -#. module: crm_department -#: view:crm.lead:crm_department.crm_case_form_view_leads_department -#: view:crm.lead:crm_department.crm_case_form_view_oppor_department -#: view:crm.lead:crm_department.view_crm_case_leads_filter_department -#: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department -#: field:crm.lead,department:0 -#: model:ir.model,name:crm_department.model_crm_department -#: view:res.partner:crm_department.view_partner_form_department -#: view:res.partner:crm_department.view_res_partner_filter_department -#: field:res.partner,department:0 -msgid "Department" -msgstr "" - -#. module: crm_department -#: view:crm.department:crm_department.crm_department_tree_view -#: model:ir.actions.act_window,name:crm_department.crm_department_action -#: model:ir.ui.menu,name:crm_department.menu_crm_department -msgid "Departments" -msgstr "" - -#. module: crm_department -#: field:crm.department,id:0 -msgid "ID" -msgstr "" - -#. module: crm_department -#: field:crm.department,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: crm_department -#: field:crm.department,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: crm_department -#: model:ir.model,name:crm_department.model_crm_lead -msgid "Lead/Opportunity" -msgstr "" - -#. module: crm_department -#: field:crm.department,name:0 -msgid "Name" -msgstr "" - -#. module: crm_department -#: field:crm.department,parent_left:0 -msgid "Parent Left" -msgstr "" - -#. module: crm_department -#: field:crm.department,parent_right:0 -msgid "Parent Right" -msgstr "" - -#. module: crm_department -#: field:crm.department,parent_id:0 -msgid "Parent id" -msgstr "" - -#. module: crm_department -#: model:ir.model,name:crm_department.model_res_partner -msgid "Partner" -msgstr "" - -#. module: crm_department -#: view:crm.lead:crm_department.view_crm_case_leads_filter_department -#: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department -msgid "Sales Team" -msgstr "" - -#. module: crm_department -#: view:res.partner:crm_department.view_res_partner_filter_department -msgid "Salesperson" -msgstr "" - diff --git a/crm_department/i18n/es.po b/crm_department/i18n/es.po deleted file mode 100644 index 1620205a7..000000000 --- a/crm_department/i18n/es.po +++ /dev/null @@ -1,108 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * crm_department -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 08:51+0000\n" -"PO-Revision-Date: 2015-05-27 08:51+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_department -#: field:crm.department,children:0 -msgid "Children" -msgstr "Hijos" - -#. module: crm_department -#: field:crm.department,create_uid:0 -msgid "Created by" -msgstr "Creado por" - -#. module: crm_department -#: field:crm.department,create_date:0 -msgid "Created on" -msgstr "Creado en" - -#. module: crm_department -#: view:crm.lead:crm_department.crm_case_form_view_leads_department -#: view:crm.lead:crm_department.crm_case_form_view_oppor_department -#: view:crm.lead:crm_department.view_crm_case_leads_filter_department -#: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department -#: field:crm.lead,department:0 -#: model:ir.model,name:crm_department.model_crm_department -#: view:res.partner:crm_department.view_partner_form_department -#: view:res.partner:crm_department.view_res_partner_filter_department -#: field:res.partner,department:0 -msgid "Department" -msgstr "Departamento" - -#. module: crm_department -#: view:crm.department:crm_department.crm_department_tree_view -#: model:ir.actions.act_window,name:crm_department.crm_department_action -#: model:ir.ui.menu,name:crm_department.menu_crm_department -msgid "Departments" -msgstr "Departamentos" - -#. module: crm_department -#: field:crm.department,id:0 -msgid "ID" -msgstr "ID" - -#. module: crm_department -#: field:crm.department,write_uid:0 -msgid "Last Updated by" -msgstr "Última actualización por" - -#. module: crm_department -#: field:crm.department,write_date:0 -msgid "Last Updated on" -msgstr "Última actualización en" - -#. module: crm_department -#: model:ir.model,name:crm_department.model_crm_lead -msgid "Lead/Opportunity" -msgstr "Iniciativa/Oportunidad" - -#. module: crm_department -#: field:crm.department,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: crm_department -#: field:crm.department,parent_left:0 -msgid "Parent Left" -msgstr "Padre Izquierdo" - -#. module: crm_department -#: field:crm.department,parent_right:0 -msgid "Parent Right" -msgstr "Padre Derecho" - -#. module: crm_department -#: field:crm.department,parent_id:0 -msgid "Parent id" -msgstr "ID Padre" - -#. module: crm_department -#: model:ir.model,name:crm_department.model_res_partner -msgid "Partner" -msgstr "Empresa" - -#. module: crm_department -#: view:crm.lead:crm_department.view_crm_case_leads_filter_department -#: view:crm.lead:crm_department.view_crm_case_opportunities_filter_department -msgid "Sales Team" -msgstr "Equipo de ventas" - -#. module: crm_department -#: view:res.partner:crm_department.view_res_partner_filter_department -msgid "Salesperson" -msgstr "Comercial" - diff --git a/crm_department/models/__init__.py b/crm_department/models/__init__.py deleted file mode 100644 index 006c33b3b..000000000 --- a/crm_department/models/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## - -from . import crm_department -from . import crm_lead -from . import res_partner diff --git a/crm_department/models/crm_department.py b/crm_department/models/crm_department.py deleted file mode 100644 index 71bc4067e..000000000 --- a/crm_department/models/crm_department.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmDepartment(models.Model): - _name = 'crm.department' - _order = "parent_left" - _parent_order = "name" - _parent_store = True - _description = "Department" - - name = fields.Char(required=True, translate=True) - parent_id = fields.Many2one(comodel_name='crm.department') - children = fields.One2many(comodel_name='crm.department', - inverse_name='parent_id') - parent_left = fields.Integer('Parent Left', select=True) - parent_right = fields.Integer('Parent Right', select=True) diff --git a/crm_department/models/crm_lead.py b/crm_department/models/crm_lead.py deleted file mode 100644 index 33fa82850..000000000 --- a/crm_department/models/crm_lead.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmLead(models.Model): - _inherit = 'crm.lead' - - department = fields.Many2one(comodel_name='crm.department') - - def _lead_create_contact(self, cr, uid, lead, name, is_company, - parent_id=False, context=None): - """Propagate department to created partner. - """ - partner_id = super(CrmLead, self)._lead_create_contact( - cr, uid, lead, name, is_company, parent_id=parent_id, - context=context) - self.pool['res.partner'].write( - cr, uid, partner_id, {'department': lead.department.id}, - context=context) - return partner_id diff --git a/crm_department/models/res_partner.py b/crm_department/models/res_partner.py deleted file mode 100644 index b8c7cd3a8..000000000 --- a/crm_department/models/res_partner.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class ResPartner(models.Model): - _inherit = 'res.partner' - - department = fields.Many2one(comodel_name='crm.department') diff --git a/crm_department/security/ir.model.access.csv b/crm_department/security/ir.model.access.csv deleted file mode 100644 index dc285f926..000000000 --- a/crm_department/security/ir.model.access.csv +++ /dev/null @@ -1,5 +0,0 @@ -"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_crm_department_public","crm_department group_public","model_crm_department","base.group_public",1,0,0,0 -"access_crm_department_portal","crm_department group_portal","model_crm_department","base.group_portal",1,0,0,0 -"access_crm_department_group_partner_manager","crm_department group_partner_manager","model_crm_department","base.group_partner_manager",1,1,1,1 -"access_crm_department_group_user","crm_department group_user","model_crm_department","base.group_user",1,0,0,0 diff --git a/crm_department/static/description/icon.png b/crm_department/static/description/icon.png deleted file mode 100644 index add81b17a4847ff2663923593ecc364587d3dd9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22620 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%0A{Ckv_A`d0n`sc6nr@&!27fYc51Y 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 P00000NkvXXu0mjfiBcmQ diff --git a/crm_department/views/crm_department_view.xml b/crm_department/views/crm_department_view.xml deleted file mode 100644 index 981e7d7b7..000000000 --- a/crm_department/views/crm_department_view.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record id="crm_department_action" model="ir.actions.act_window"> - <field name="name">Departments</field> - <field name="res_model">crm.department</field> - <field name="view_type">form</field> - <field name="view_mode">tree</field> -</record> - -<record id="crm_department_tree_view" model="ir.ui.view"> - <field name="name">CRM department tree</field> - <field name="model">crm.department</field> - <field name="arch" type="xml"> - <tree string="Departments" editable="top"> - <field name="name"/> - <field name="parent_id"/> - </tree> - </field> -</record> - -<menuitem action="crm_department_action" - id="menu_crm_department" - name="Departments" - parent="base.menu_crm_config_lead" - sequence="3"/> - -</data> -</openerp> \ No newline at end of file diff --git a/crm_department/views/crm_lead_view.xml b/crm_department/views/crm_lead_view.xml deleted file mode 100644 index 6b4d289af..000000000 --- a/crm_department/views/crm_lead_view.xml +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record model="ir.ui.view" id="crm_case_form_view_leads"> - <field name="name">Add department field</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department" - placeholder="Department" - options='{"no_open": True}'/> - </field> - </field> -</record> - -<record model="ir.ui.view" id="view_crm_case_leads_filter"> - <field name="name">Add department field for searching and grouping</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="Department" - domain="[]" - context="{'group_by': 'department'}"/> - </filter> - </field> -</record> - -<record model="ir.ui.view" id="crm_case_form_view_oppor"> - <field name="name">Add department field</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department" - placeholder="Department" - options='{"no_open": True}'/> - </field> - </field> -</record> - -<record model="ir.ui.view" id="view_crm_case_opportunities_filter"> - <field name="name">Add department field for searching and grouping</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="Department" - domain="[]" - context="{'group_by': 'department'}"/> - </filter> - </field> -</record> - -</data> -</openerp> \ No newline at end of file diff --git a/crm_department/views/res_partner_view.xml b/crm_department/views/res_partner_view.xml deleted file mode 100644 index 8856abd93..000000000 --- a/crm_department/views/res_partner_view.xml +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record model="ir.ui.view" id="view_partner_form_department"> - <field name="name">Partner form with department</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department" - placeholder="Department" - attrs="{'invisible': [('is_company','=', True)]}" - options='{"no_open": True}'/> - </field> - <xpath expr="//field[@name='child_ids']/form//field[@name='phone']" position="before"> - <field name="department" - placeholder="Department" - attrs="{'invisible': [('is_company','=', True)]}" - options='{"no_open": True}'/> - </xpath> - </field> -</record> - -<!-- Uncomment this to add a new column to tree view -<record model="ir.ui.view" id="view_partner_tree_department"> - <field name="name">Partner tree with department</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_tree"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department"/> - </field> - </field> -</record> ---> - -<record model="ir.ui.view" id="view_res_partner_filter_department"> - <field name="name">Partner search with department</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_res_partner_filter"/> - <field name="arch" type="xml"> - <field name="category_id" position="after"> - <field name="department"/> - </field> - <filter string="Salesperson" position="after"> - <filter string="Department" - domain="[('is_company', '=', False)]" - context="{'group_by': 'department'}"/> - </filter> - </field> -</record> - -</data> -</openerp> \ No newline at end of file From c322344eb8a806640d5be93bd828a7ec065385e4 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa <antespi@gmail.com> Date: Tue, 18 Aug 2015 11:36:11 +0200 Subject: [PATCH 50/58] [FIX] Rename crm_department addon to crm_partner_department in order to do not conflict with OCA/department addon with the same name --- crm_partner_department/README.rst | 19 +++ crm_partner_department/__init__.py | 6 + crm_partner_department/__openerp__.py | 42 +++++++ .../i18n/crm_department.pot | 108 ++++++++++++++++++ crm_partner_department/i18n/es.po | 108 ++++++++++++++++++ crm_partner_department/models/__init__.py | 8 ++ .../models/crm_department.py | 20 ++++ crm_partner_department/models/crm_lead.py | 23 ++++ crm_partner_department/models/res_partner.py | 11 ++ .../security/ir.model.access.csv | 5 + .../static/description/icon.png | Bin 0 -> 22620 bytes .../views/crm_department_view.xml | 30 +++++ .../views/crm_lead_view.xml | 64 +++++++++++ .../views/res_partner_view.xml | 55 +++++++++ 14 files changed, 499 insertions(+) create mode 100644 crm_partner_department/README.rst create mode 100644 crm_partner_department/__init__.py create mode 100644 crm_partner_department/__openerp__.py create mode 100644 crm_partner_department/i18n/crm_department.pot create mode 100644 crm_partner_department/i18n/es.po create mode 100644 crm_partner_department/models/__init__.py create mode 100644 crm_partner_department/models/crm_department.py create mode 100644 crm_partner_department/models/crm_lead.py create mode 100644 crm_partner_department/models/res_partner.py create mode 100644 crm_partner_department/security/ir.model.access.csv create mode 100644 crm_partner_department/static/description/icon.png create mode 100644 crm_partner_department/views/crm_department_view.xml create mode 100644 crm_partner_department/views/crm_lead_view.xml create mode 100644 crm_partner_department/views/res_partner_view.xml diff --git a/crm_partner_department/README.rst b/crm_partner_department/README.rst new file mode 100644 index 000000000..34548936e --- /dev/null +++ b/crm_partner_department/README.rst @@ -0,0 +1,19 @@ +Department field in CRM contact +=============================== + +This module adds the concept of department to the CRM main objects (lead, +opportunity, partner), and propagate them through the workflow. + +Department is a drop-down field in lead, opportunity and partner forms. It +refers to contact department in its own company + +Departments available list must be defined first at +Sales > Configuration > Leads & Opportunities > Departments + +Credits +======= + +Contributors +------------ +* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +* Antonio Espinosa <antonioea@antiun.com> diff --git a/crm_partner_department/__init__.py b/crm_partner_department/__init__.py new file mode 100644 index 000000000..054c8853d --- /dev/null +++ b/crm_partner_department/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import models diff --git a/crm_partner_department/__openerp__.py b/crm_partner_department/__openerp__.py new file mode 100644 index 000000000..7f60aebbd --- /dev/null +++ b/crm_partner_department/__openerp__.py @@ -0,0 +1,42 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Odoo Source Management Solution +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + 'name': 'Department field in CRM contact', + 'version': '1.0', + 'category': 'Customer Relationship Management', + 'author': 'Serv. Tecnolog. Avanzados - Pedro M. Baeza, ' + 'Antiun Ingeniería S.L.', + 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', + 'depends': [ + 'crm', + ], + 'data': [ + 'views/crm_department_view.xml', + 'views/crm_lead_view.xml', + 'views/res_partner_view.xml', + 'security/ir.model.access.csv', + ], + "installable": True, +} diff --git a/crm_partner_department/i18n/crm_department.pot b/crm_partner_department/i18n/crm_department.pot new file mode 100644 index 000000000..9a33d3ef9 --- /dev/null +++ b/crm_partner_department/i18n/crm_department.pot @@ -0,0 +1,108 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_partner_department +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-27 08:51+0000\n" +"PO-Revision-Date: 2015-05-27 08:51+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_partner_department +#: field:crm.department,children:0 +msgid "Children" +msgstr "" + +#. module: crm_partner_department +#: field:crm.department,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: crm_partner_department +#: field:crm.department,create_date:0 +msgid "Created on" +msgstr "" + +#. module: crm_partner_department +#: view:crm.lead:crm_partner_department.crm_case_form_view_leads_department +#: view:crm.lead:crm_partner_department.crm_case_form_view_oppor_department +#: view:crm.lead:crm_partner_department.view_crm_case_leads_filter_department +#: view:crm.lead:crm_partner_department.view_crm_case_opportunities_filter_department +#: field:crm.lead,department:0 +#: model:ir.model,name:crm_partner_department.model_crm_department +#: view:res.partner:crm_partner_department.view_partner_form_department +#: view:res.partner:crm_partner_department.view_res_partner_filter_department +#: field:res.partner,department:0 +msgid "Department" +msgstr "" + +#. module: crm_partner_department +#: view:crm.department:crm_partner_department.crm_department_tree_view +#: model:ir.actions.act_window,name:crm_partner_department.crm_department_action +#: model:ir.ui.menu,name:crm_partner_department.menu_crm_department +msgid "Departments" +msgstr "" + +#. module: crm_partner_department +#: field:crm.department,id:0 +msgid "ID" +msgstr "" + +#. module: crm_partner_department +#: field:crm.department,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: crm_partner_department +#: field:crm.department,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: crm_partner_department +#: model:ir.model,name:crm_partner_department.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" + +#. module: crm_partner_department +#: field:crm.department,name:0 +msgid "Name" +msgstr "" + +#. module: crm_partner_department +#: field:crm.department,parent_left:0 +msgid "Parent Left" +msgstr "" + +#. module: crm_partner_department +#: field:crm.department,parent_right:0 +msgid "Parent Right" +msgstr "" + +#. module: crm_partner_department +#: field:crm.department,parent_id:0 +msgid "Parent id" +msgstr "" + +#. module: crm_partner_department +#: model:ir.model,name:crm_partner_department.model_res_partner +msgid "Partner" +msgstr "" + +#. module: crm_partner_department +#: view:crm.lead:crm_partner_department.view_crm_case_leads_filter_department +#: view:crm.lead:crm_partner_department.view_crm_case_opportunities_filter_department +msgid "Sales Team" +msgstr "" + +#. module: crm_partner_department +#: view:res.partner:crm_partner_department.view_res_partner_filter_department +msgid "Salesperson" +msgstr "" + diff --git a/crm_partner_department/i18n/es.po b/crm_partner_department/i18n/es.po new file mode 100644 index 000000000..2c519e3c8 --- /dev/null +++ b/crm_partner_department/i18n/es.po @@ -0,0 +1,108 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * crm_partner_department +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-27 08:51+0000\n" +"PO-Revision-Date: 2015-05-27 08:51+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_partner_department +#: field:crm.department,children:0 +msgid "Children" +msgstr "Hijos" + +#. module: crm_partner_department +#: field:crm.department,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: crm_partner_department +#: field:crm.department,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: crm_partner_department +#: view:crm.lead:crm_partner_department.crm_case_form_view_leads_department +#: view:crm.lead:crm_partner_department.crm_case_form_view_oppor_department +#: view:crm.lead:crm_partner_department.view_crm_case_leads_filter_department +#: view:crm.lead:crm_partner_department.view_crm_case_opportunities_filter_department +#: field:crm.lead,department:0 +#: model:ir.model,name:crm_partner_department.model_crm_department +#: view:res.partner:crm_partner_department.view_partner_form_department +#: view:res.partner:crm_partner_department.view_res_partner_filter_department +#: field:res.partner,department:0 +msgid "Department" +msgstr "Departamento" + +#. module: crm_partner_department +#: view:crm.department:crm_partner_department.crm_department_tree_view +#: model:ir.actions.act_window,name:crm_partner_department.crm_department_action +#: model:ir.ui.menu,name:crm_partner_department.menu_crm_department +msgid "Departments" +msgstr "Departamentos" + +#. module: crm_partner_department +#: field:crm.department,id:0 +msgid "ID" +msgstr "ID" + +#. module: crm_partner_department +#: field:crm.department,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: crm_partner_department +#: field:crm.department,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: crm_partner_department +#: model:ir.model,name:crm_partner_department.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Iniciativa/Oportunidad" + +#. module: crm_partner_department +#: field:crm.department,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: crm_partner_department +#: field:crm.department,parent_left:0 +msgid "Parent Left" +msgstr "Padre Izquierdo" + +#. module: crm_partner_department +#: field:crm.department,parent_right:0 +msgid "Parent Right" +msgstr "Padre Derecho" + +#. module: crm_partner_department +#: field:crm.department,parent_id:0 +msgid "Parent id" +msgstr "ID Padre" + +#. module: crm_partner_department +#: model:ir.model,name:crm_partner_department.model_res_partner +msgid "Partner" +msgstr "Empresa" + +#. module: crm_partner_department +#: view:crm.lead:crm_partner_department.view_crm_case_leads_filter_department +#: view:crm.lead:crm_partner_department.view_crm_case_opportunities_filter_department +msgid "Sales Team" +msgstr "Equipo de ventas" + +#. module: crm_partner_department +#: view:res.partner:crm_partner_department.view_res_partner_filter_department +msgid "Salesperson" +msgstr "Comercial" + diff --git a/crm_partner_department/models/__init__.py b/crm_partner_department/models/__init__.py new file mode 100644 index 000000000..006c33b3b --- /dev/null +++ b/crm_partner_department/models/__init__.py @@ -0,0 +1,8 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import crm_department +from . import crm_lead +from . import res_partner diff --git a/crm_partner_department/models/crm_department.py b/crm_partner_department/models/crm_department.py new file mode 100644 index 000000000..71bc4067e --- /dev/null +++ b/crm_partner_department/models/crm_department.py @@ -0,0 +1,20 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmDepartment(models.Model): + _name = 'crm.department' + _order = "parent_left" + _parent_order = "name" + _parent_store = True + _description = "Department" + + name = fields.Char(required=True, translate=True) + parent_id = fields.Many2one(comodel_name='crm.department') + children = fields.One2many(comodel_name='crm.department', + inverse_name='parent_id') + parent_left = fields.Integer('Parent Left', select=True) + parent_right = fields.Integer('Parent Right', select=True) diff --git a/crm_partner_department/models/crm_lead.py b/crm_partner_department/models/crm_lead.py new file mode 100644 index 000000000..33fa82850 --- /dev/null +++ b/crm_partner_department/models/crm_lead.py @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class CrmLead(models.Model): + _inherit = 'crm.lead' + + department = fields.Many2one(comodel_name='crm.department') + + def _lead_create_contact(self, cr, uid, lead, name, is_company, + parent_id=False, context=None): + """Propagate department to created partner. + """ + partner_id = super(CrmLead, self)._lead_create_contact( + cr, uid, lead, name, is_company, parent_id=parent_id, + context=context) + self.pool['res.partner'].write( + cr, uid, partner_id, {'department': lead.department.id}, + context=context) + return partner_id diff --git a/crm_partner_department/models/res_partner.py b/crm_partner_department/models/res_partner.py new file mode 100644 index 000000000..b8c7cd3a8 --- /dev/null +++ b/crm_partner_department/models/res_partner.py @@ -0,0 +1,11 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## +from openerp import models, fields + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + department = fields.Many2one(comodel_name='crm.department') diff --git a/crm_partner_department/security/ir.model.access.csv b/crm_partner_department/security/ir.model.access.csv new file mode 100644 index 000000000..dc285f926 --- /dev/null +++ b/crm_partner_department/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_crm_department_public","crm_department group_public","model_crm_department","base.group_public",1,0,0,0 +"access_crm_department_portal","crm_department group_portal","model_crm_department","base.group_portal",1,0,0,0 +"access_crm_department_group_partner_manager","crm_department group_partner_manager","model_crm_department","base.group_partner_manager",1,1,1,1 +"access_crm_department_group_user","crm_department group_user","model_crm_department","base.group_user",1,0,0,0 diff --git a/crm_partner_department/static/description/icon.png b/crm_partner_department/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..add81b17a4847ff2663923593ecc364587d3dd9f GIT binary patch literal 22620 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%0A{Ckv_A`d0n`sc6nr@&!27fYc51Y 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 P00000NkvXXu0mjfiBcmQ literal 0 HcmV?d00001 diff --git a/crm_partner_department/views/crm_department_view.xml b/crm_partner_department/views/crm_department_view.xml new file mode 100644 index 000000000..981e7d7b7 --- /dev/null +++ b/crm_partner_department/views/crm_department_view.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + +<record id="crm_department_action" model="ir.actions.act_window"> + <field name="name">Departments</field> + <field name="res_model">crm.department</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> +</record> + +<record id="crm_department_tree_view" model="ir.ui.view"> + <field name="name">CRM department tree</field> + <field name="model">crm.department</field> + <field name="arch" type="xml"> + <tree string="Departments" editable="top"> + <field name="name"/> + <field name="parent_id"/> + </tree> + </field> +</record> + +<menuitem action="crm_department_action" + id="menu_crm_department" + name="Departments" + parent="base.menu_crm_config_lead" + sequence="3"/> + +</data> +</openerp> \ No newline at end of file diff --git a/crm_partner_department/views/crm_lead_view.xml b/crm_partner_department/views/crm_lead_view.xml new file mode 100644 index 000000000..6b4d289af --- /dev/null +++ b/crm_partner_department/views/crm_lead_view.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + +<record model="ir.ui.view" id="crm_case_form_view_leads"> + <field name="name">Add department field</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department" + placeholder="Department" + options='{"no_open": True}'/> + </field> + </field> +</record> + +<record model="ir.ui.view" id="view_crm_case_leads_filter"> + <field name="name">Add department field for searching and grouping</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="Department" + domain="[]" + context="{'group_by': 'department'}"/> + </filter> + </field> +</record> + +<record model="ir.ui.view" id="crm_case_form_view_oppor"> + <field name="name">Add department field</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department" + placeholder="Department" + options='{"no_open": True}'/> + </field> + </field> +</record> + +<record model="ir.ui.view" id="view_crm_case_opportunities_filter"> + <field name="name">Add department field for searching and grouping</field> + <field name="model">crm.lead</field> + <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> + <field name="arch" type="xml"> + <field name="section_id" position="after"> + <field name="department"/> + </field> + <filter string="Sales Team" position="after"> + <filter string="Department" + domain="[]" + context="{'group_by': 'department'}"/> + </filter> + </field> +</record> + +</data> +</openerp> \ No newline at end of file diff --git a/crm_partner_department/views/res_partner_view.xml b/crm_partner_department/views/res_partner_view.xml new file mode 100644 index 000000000..8856abd93 --- /dev/null +++ b/crm_partner_department/views/res_partner_view.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + +<record model="ir.ui.view" id="view_partner_form_department"> + <field name="name">Partner form with department</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department" + placeholder="Department" + attrs="{'invisible': [('is_company','=', True)]}" + options='{"no_open": True}'/> + </field> + <xpath expr="//field[@name='child_ids']/form//field[@name='phone']" position="before"> + <field name="department" + placeholder="Department" + attrs="{'invisible': [('is_company','=', True)]}" + options='{"no_open": True}'/> + </xpath> + </field> +</record> + +<!-- Uncomment this to add a new column to tree view +<record model="ir.ui.view" id="view_partner_tree_department"> + <field name="name">Partner tree with department</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_tree"/> + <field name="arch" type="xml"> + <field name="phone" position="before"> + <field name="department"/> + </field> + </field> +</record> +--> + +<record model="ir.ui.view" id="view_res_partner_filter_department"> + <field name="name">Partner search with department</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_res_partner_filter"/> + <field name="arch" type="xml"> + <field name="category_id" position="after"> + <field name="department"/> + </field> + <filter string="Salesperson" position="after"> + <filter string="Department" + domain="[('is_company', '=', False)]" + context="{'group_by': 'department'}"/> + </filter> + </field> +</record> + +</data> +</openerp> \ No newline at end of file From 024e3b704b1a983112add8cf533f8ba89af9c339 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" <pedro.baeza@gmail.com> Date: Tue, 8 Dec 2015 09:32:46 +0100 Subject: [PATCH 51/58] [FIX] Author --- crm_partner_department/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crm_partner_department/__openerp__.py b/crm_partner_department/__openerp__.py index 7f60aebbd..4ffb8fe2b 100644 --- a/crm_partner_department/__openerp__.py +++ b/crm_partner_department/__openerp__.py @@ -26,7 +26,7 @@ 'name': 'Department field in CRM contact', 'version': '1.0', 'category': 'Customer Relationship Management', - 'author': 'Serv. Tecnolog. Avanzados - Pedro M. Baeza, ' + 'author': 'Serv. Tecnol. Avanzados - Pedro M. Baeza, ' 'Antiun Ingeniería S.L.', 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', 'depends': [ From 21df0dd26beb4df201993bc94e490af782f42fec Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Mon, 21 Dec 2015 17:25:01 +0100 Subject: [PATCH 52/58] Rename to partner_contact_department. --- .../README.rst | 0 .../__init__.py | 0 .../__openerp__.py | 0 .../i18n/crm_department.pot | 0 .../i18n/es.po | 0 .../models/__init__.py | 0 .../models/crm_department.py | 0 .../models/crm_lead.py | 0 .../models/res_partner.py | 0 .../security/ir.model.access.csv | 0 .../static/description/icon.png | Bin .../views/crm_department_view.xml | 0 .../views/crm_lead_view.xml | 0 .../views/res_partner_view.xml | 0 14 files changed, 0 insertions(+), 0 deletions(-) rename {crm_partner_department => partner_contact_department}/README.rst (100%) rename {crm_partner_department => partner_contact_department}/__init__.py (100%) rename {crm_partner_department => partner_contact_department}/__openerp__.py (100%) rename {crm_partner_department => partner_contact_department}/i18n/crm_department.pot (100%) rename {crm_partner_department => partner_contact_department}/i18n/es.po (100%) rename {crm_partner_department => partner_contact_department}/models/__init__.py (100%) rename {crm_partner_department => partner_contact_department}/models/crm_department.py (100%) rename {crm_partner_department => partner_contact_department}/models/crm_lead.py (100%) rename {crm_partner_department => partner_contact_department}/models/res_partner.py (100%) rename {crm_partner_department => partner_contact_department}/security/ir.model.access.csv (100%) rename {crm_partner_department => partner_contact_department}/static/description/icon.png (100%) rename {crm_partner_department => partner_contact_department}/views/crm_department_view.xml (100%) rename {crm_partner_department => partner_contact_department}/views/crm_lead_view.xml (100%) rename {crm_partner_department => partner_contact_department}/views/res_partner_view.xml (100%) diff --git a/crm_partner_department/README.rst b/partner_contact_department/README.rst similarity index 100% rename from crm_partner_department/README.rst rename to partner_contact_department/README.rst diff --git a/crm_partner_department/__init__.py b/partner_contact_department/__init__.py similarity index 100% rename from crm_partner_department/__init__.py rename to partner_contact_department/__init__.py diff --git a/crm_partner_department/__openerp__.py b/partner_contact_department/__openerp__.py similarity index 100% rename from crm_partner_department/__openerp__.py rename to partner_contact_department/__openerp__.py diff --git a/crm_partner_department/i18n/crm_department.pot b/partner_contact_department/i18n/crm_department.pot similarity index 100% rename from crm_partner_department/i18n/crm_department.pot rename to partner_contact_department/i18n/crm_department.pot diff --git a/crm_partner_department/i18n/es.po b/partner_contact_department/i18n/es.po similarity index 100% rename from crm_partner_department/i18n/es.po rename to partner_contact_department/i18n/es.po diff --git a/crm_partner_department/models/__init__.py b/partner_contact_department/models/__init__.py similarity index 100% rename from crm_partner_department/models/__init__.py rename to partner_contact_department/models/__init__.py diff --git a/crm_partner_department/models/crm_department.py b/partner_contact_department/models/crm_department.py similarity index 100% rename from crm_partner_department/models/crm_department.py rename to partner_contact_department/models/crm_department.py diff --git a/crm_partner_department/models/crm_lead.py b/partner_contact_department/models/crm_lead.py similarity index 100% rename from crm_partner_department/models/crm_lead.py rename to partner_contact_department/models/crm_lead.py diff --git a/crm_partner_department/models/res_partner.py b/partner_contact_department/models/res_partner.py similarity index 100% rename from crm_partner_department/models/res_partner.py rename to partner_contact_department/models/res_partner.py diff --git a/crm_partner_department/security/ir.model.access.csv b/partner_contact_department/security/ir.model.access.csv similarity index 100% rename from crm_partner_department/security/ir.model.access.csv rename to partner_contact_department/security/ir.model.access.csv diff --git a/crm_partner_department/static/description/icon.png b/partner_contact_department/static/description/icon.png similarity index 100% rename from crm_partner_department/static/description/icon.png rename to partner_contact_department/static/description/icon.png diff --git a/crm_partner_department/views/crm_department_view.xml b/partner_contact_department/views/crm_department_view.xml similarity index 100% rename from crm_partner_department/views/crm_department_view.xml rename to partner_contact_department/views/crm_department_view.xml diff --git a/crm_partner_department/views/crm_lead_view.xml b/partner_contact_department/views/crm_lead_view.xml similarity index 100% rename from crm_partner_department/views/crm_lead_view.xml rename to partner_contact_department/views/crm_lead_view.xml diff --git a/crm_partner_department/views/res_partner_view.xml b/partner_contact_department/views/res_partner_view.xml similarity index 100% rename from crm_partner_department/views/res_partner_view.xml rename to partner_contact_department/views/res_partner_view.xml From 4a1c1d4e6d0396902bfb33fa511a968579c3f8e6 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Mon, 21 Dec 2015 17:27:10 +0100 Subject: [PATCH 53/58] Prepare for OCA. - Update translation. - Reduce garbage code. - Update license and copyright headers. - Improve README. - Drop CRM stuff. --- partner_contact_department/README.rst | 71 ++++++++++-- partner_contact_department/__init__.py | 11 +- partner_contact_department/__openerp__.py | 41 +++---- .../i18n/crm_department.pot | 108 ------------------ partner_contact_department/i18n/es.po | 107 ++++++++--------- partner_contact_department/models/__init__.py | 13 ++- .../models/crm_department.py | 20 ---- partner_contact_department/models/crm_lead.py | 23 ---- .../models/res_partner.py | 37 +++++- .../security/ir.model.access.csv | 8 +- .../views/crm_department_view.xml | 30 ----- .../views/crm_lead_view.xml | 64 ----------- .../views/res_partner_department_view.xml | 47 ++++++++ .../views/res_partner_view.xml | 36 +++--- 14 files changed, 235 insertions(+), 381 deletions(-) delete mode 100644 partner_contact_department/i18n/crm_department.pot delete mode 100644 partner_contact_department/models/crm_department.py delete mode 100644 partner_contact_department/models/crm_lead.py delete mode 100644 partner_contact_department/views/crm_department_view.xml delete mode 100644 partner_contact_department/views/crm_lead_view.xml create mode 100644 partner_contact_department/views/res_partner_department_view.xml diff --git a/partner_contact_department/README.rst b/partner_contact_department/README.rst index 34548936e..d142645b8 100644 --- a/partner_contact_department/README.rst +++ b/partner_contact_department/README.rst @@ -1,19 +1,74 @@ -Department field in CRM contact -=============================== +.. 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 -This module adds the concept of department to the CRM main objects (lead, -opportunity, partner), and propagate them through the workflow. +================== +Contact department +================== -Department is a drop-down field in lead, opportunity and partner forms. It -refers to contact department in its own company +This module extends the functionality of the address book to support +departments. -Departments available list must be defined first at -Sales > Configuration > Leads & Opportunities > Departments +Department is a drop-down field in partner forms, and it refers to contact +department in its own company. + +Configuration +============= + +To configure departments, you need to: + +* Go to *Sales > Configuration > Address Book > Departments*. + +Usage +===== + +To use this module, you need to: + +* Go to any partner's form. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/134/8.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +<https://github.com/OCA/partner-contact/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 +<https://github.com/OCA/ +partner-contact/issues/new?body=module:%20 +partner_contact_department%0Aversion:%20 +8.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. Credits ======= +Images +------ + +* `Antiun Ingeniería S.L. <http://www.antiun.com>`_: Icon. + Contributors ------------ + * Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> * Antonio Espinosa <antonioea@antiun.com> +* Rafael Blasco <rafabn@antiun.com> +* Jairo Llopis <yajo.sk8@gmail.com> + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://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 https://odoo-community.org. diff --git a/partner_contact_department/__init__.py b/partner_contact_department/__init__.py index 054c8853d..9af8488e4 100644 --- a/partner_contact_department/__init__.py +++ b/partner_contact_department/__init__.py @@ -1,6 +1,9 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models diff --git a/partner_contact_department/__openerp__.py b/partner_contact_department/__openerp__.py index 4ffb8fe2b..a5323db87 100644 --- a/partner_contact_department/__openerp__.py +++ b/partner_contact_department/__openerp__.py @@ -1,42 +1,29 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Odoo Source Management Solution +# -*- coding: utf-8 -*- # Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) # Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> # Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) # Antonio Espinosa <antonioea@antiun.com> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Department field in CRM contact', - 'version': '1.0', + 'name': 'Contact department', + "summary": "Assign contacts to departments", + 'version': '8.0.1.0.0', 'category': 'Customer Relationship Management', 'author': 'Serv. Tecnol. Avanzados - Pedro M. Baeza, ' - 'Antiun Ingeniería S.L.', - 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', + 'Antiun Ingeniería S.L., ' + "Odoo Community Association (OCA)", + "license": "AGPL-3", + 'website': 'http://www.antiun.com', + "application": False, 'depends': [ - 'crm', + 'base', ], 'data': [ - 'views/crm_department_view.xml', - 'views/crm_lead_view.xml', - 'views/res_partner_view.xml', 'security/ir.model.access.csv', + 'views/res_partner_department_view.xml', + 'views/res_partner_view.xml', ], "installable": True, } diff --git a/partner_contact_department/i18n/crm_department.pot b/partner_contact_department/i18n/crm_department.pot deleted file mode 100644 index 9a33d3ef9..000000000 --- a/partner_contact_department/i18n/crm_department.pot +++ /dev/null @@ -1,108 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * crm_partner_department -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 08:51+0000\n" -"PO-Revision-Date: 2015-05-27 08:51+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_partner_department -#: field:crm.department,children:0 -msgid "Children" -msgstr "" - -#. module: crm_partner_department -#: field:crm.department,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: crm_partner_department -#: field:crm.department,create_date:0 -msgid "Created on" -msgstr "" - -#. module: crm_partner_department -#: view:crm.lead:crm_partner_department.crm_case_form_view_leads_department -#: view:crm.lead:crm_partner_department.crm_case_form_view_oppor_department -#: view:crm.lead:crm_partner_department.view_crm_case_leads_filter_department -#: view:crm.lead:crm_partner_department.view_crm_case_opportunities_filter_department -#: field:crm.lead,department:0 -#: model:ir.model,name:crm_partner_department.model_crm_department -#: view:res.partner:crm_partner_department.view_partner_form_department -#: view:res.partner:crm_partner_department.view_res_partner_filter_department -#: field:res.partner,department:0 -msgid "Department" -msgstr "" - -#. module: crm_partner_department -#: view:crm.department:crm_partner_department.crm_department_tree_view -#: model:ir.actions.act_window,name:crm_partner_department.crm_department_action -#: model:ir.ui.menu,name:crm_partner_department.menu_crm_department -msgid "Departments" -msgstr "" - -#. module: crm_partner_department -#: field:crm.department,id:0 -msgid "ID" -msgstr "" - -#. module: crm_partner_department -#: field:crm.department,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: crm_partner_department -#: field:crm.department,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: crm_partner_department -#: model:ir.model,name:crm_partner_department.model_crm_lead -msgid "Lead/Opportunity" -msgstr "" - -#. module: crm_partner_department -#: field:crm.department,name:0 -msgid "Name" -msgstr "" - -#. module: crm_partner_department -#: field:crm.department,parent_left:0 -msgid "Parent Left" -msgstr "" - -#. module: crm_partner_department -#: field:crm.department,parent_right:0 -msgid "Parent Right" -msgstr "" - -#. module: crm_partner_department -#: field:crm.department,parent_id:0 -msgid "Parent id" -msgstr "" - -#. module: crm_partner_department -#: model:ir.model,name:crm_partner_department.model_res_partner -msgid "Partner" -msgstr "" - -#. module: crm_partner_department -#: view:crm.lead:crm_partner_department.view_crm_case_leads_filter_department -#: view:crm.lead:crm_partner_department.view_crm_case_opportunities_filter_department -msgid "Sales Team" -msgstr "" - -#. module: crm_partner_department -#: view:res.partner:crm_partner_department.view_res_partner_filter_department -msgid "Salesperson" -msgstr "" - diff --git a/partner_contact_department/i18n/es.po b/partner_contact_department/i18n/es.po index 2c519e3c8..e3c3ae378 100644 --- a/partner_contact_department/i18n/es.po +++ b/partner_contact_department/i18n/es.po @@ -6,103 +6,88 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 08:51+0000\n" -"PO-Revision-Date: 2015-05-27 08:51+0000\n" +"POT-Creation-Date: 2015-12-21 16:54+0100\n" +"PO-Revision-Date: 2015-12-21 16:55+0100\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: \n" +"X-Generator: Poedit 1.8.5\n" -#. module: crm_partner_department -#: field:crm.department,children:0 -msgid "Children" -msgstr "Hijos" +#. module: partner_contact_department +#: field:res.partner.department,child_ids:0 +msgid "Child departments" +msgstr "Departamentos hijo" -#. module: crm_partner_department -#: field:crm.department,create_uid:0 +#. module: partner_contact_department +#: field:res.partner.department,create_uid:0 msgid "Created by" msgstr "Creado por" -#. module: crm_partner_department -#: field:crm.department,create_date:0 +#. module: partner_contact_department +#: field:res.partner.department,create_date:0 msgid "Created on" msgstr "Creado en" -#. module: crm_partner_department -#: view:crm.lead:crm_partner_department.crm_case_form_view_leads_department -#: view:crm.lead:crm_partner_department.crm_case_form_view_oppor_department -#: view:crm.lead:crm_partner_department.view_crm_case_leads_filter_department -#: view:crm.lead:crm_partner_department.view_crm_case_opportunities_filter_department -#: field:crm.lead,department:0 -#: model:ir.model,name:crm_partner_department.model_crm_department -#: view:res.partner:crm_partner_department.view_partner_form_department -#: view:res.partner:crm_partner_department.view_res_partner_filter_department -#: field:res.partner,department:0 +#. module: partner_contact_department +#: model:ir.model,name:partner_contact_department.model_res_partner_department +#: view:res.partner:partner_contact_department.view_partner_form_department +#: view:res.partner:partner_contact_department.view_res_partner_filter_department +#: field:res.partner,department_id:0 msgid "Department" msgstr "Departamento" -#. module: crm_partner_department -#: view:crm.department:crm_partner_department.crm_department_tree_view -#: model:ir.actions.act_window,name:crm_partner_department.crm_department_action -#: model:ir.ui.menu,name:crm_partner_department.menu_crm_department +#. module: partner_contact_department +#: model:ir.actions.act_window,name:partner_contact_department.res_partner_department_action +#: model:ir.ui.menu,name:partner_contact_department.menu_res_partner_department +#: view:res.partner.department:partner_contact_department.res_partner_department_tree_view msgid "Departments" msgstr "Departamentos" -#. module: crm_partner_department -#: field:crm.department,id:0 +#. module: partner_contact_department +#: field:res.partner.department,id:0 msgid "ID" msgstr "ID" -#. module: crm_partner_department -#: field:crm.department,write_uid:0 +#. module: partner_contact_department +#: field:res.partner.department,write_uid:0 msgid "Last Updated by" msgstr "Última actualización por" -#. module: crm_partner_department -#: field:crm.department,write_date:0 +#. module: partner_contact_department +#: field:res.partner.department,write_date:0 msgid "Last Updated on" msgstr "Última actualización en" -#. module: crm_partner_department -#: model:ir.model,name:crm_partner_department.model_crm_lead -msgid "Lead/Opportunity" -msgstr "Iniciativa/Oportunidad" - -#. module: crm_partner_department -#: field:crm.department,name:0 +#. module: partner_contact_department +#: field:res.partner.department,name:0 msgid "Name" msgstr "Nombre" -#. module: crm_partner_department -#: field:crm.department,parent_left:0 -msgid "Parent Left" -msgstr "Padre Izquierdo" +#. module: partner_contact_department +#: field:res.partner.department,parent_id:0 +msgid "Parent department" +msgstr "Departamento padre" -#. module: crm_partner_department -#: field:crm.department,parent_right:0 -msgid "Parent Right" -msgstr "Padre Derecho" +#. module: partner_contact_department +#: field:res.partner.department,parent_left:0 +msgid "Parent left" +msgstr "Padre izquierdo" -#. module: crm_partner_department -#: field:crm.department,parent_id:0 -msgid "Parent id" -msgstr "ID Padre" +#. module: partner_contact_department +#: field:res.partner.department,parent_right:0 +msgid "Parent right" +msgstr "Padre derecho" -#. module: crm_partner_department -#: model:ir.model,name:crm_partner_department.model_res_partner +#. module: partner_contact_department +#: model:ir.model,name:partner_contact_department.model_res_partner msgid "Partner" msgstr "Empresa" -#. module: crm_partner_department -#: view:crm.lead:crm_partner_department.view_crm_case_leads_filter_department -#: view:crm.lead:crm_partner_department.view_crm_case_opportunities_filter_department -msgid "Sales Team" -msgstr "Equipo de ventas" - -#. module: crm_partner_department -#: view:res.partner:crm_partner_department.view_res_partner_filter_department +#. module: partner_contact_department +#: view:res.partner:partner_contact_department.view_res_partner_filter_department msgid "Salesperson" msgstr "Comercial" - diff --git a/partner_contact_department/models/__init__.py b/partner_contact_department/models/__init__.py index 006c33b3b..213b25fdc 100644 --- a/partner_contact_department/models/__init__.py +++ b/partner_contact_department/models/__init__.py @@ -1,8 +1,9 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import crm_department -from . import crm_lead from . import res_partner diff --git a/partner_contact_department/models/crm_department.py b/partner_contact_department/models/crm_department.py deleted file mode 100644 index 71bc4067e..000000000 --- a/partner_contact_department/models/crm_department.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmDepartment(models.Model): - _name = 'crm.department' - _order = "parent_left" - _parent_order = "name" - _parent_store = True - _description = "Department" - - name = fields.Char(required=True, translate=True) - parent_id = fields.Many2one(comodel_name='crm.department') - children = fields.One2many(comodel_name='crm.department', - inverse_name='parent_id') - parent_left = fields.Integer('Parent Left', select=True) - parent_right = fields.Integer('Parent Right', select=True) diff --git a/partner_contact_department/models/crm_lead.py b/partner_contact_department/models/crm_lead.py deleted file mode 100644 index 33fa82850..000000000 --- a/partner_contact_department/models/crm_lead.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## -from openerp import models, fields - - -class CrmLead(models.Model): - _inherit = 'crm.lead' - - department = fields.Many2one(comodel_name='crm.department') - - def _lead_create_contact(self, cr, uid, lead, name, is_company, - parent_id=False, context=None): - """Propagate department to created partner. - """ - partner_id = super(CrmLead, self)._lead_create_contact( - cr, uid, lead, name, is_company, parent_id=parent_id, - context=context) - self.pool['res.partner'].write( - cr, uid, partner_id, {'department': lead.department.id}, - context=context) - return partner_id diff --git a/partner_contact_department/models/res_partner.py b/partner_contact_department/models/res_partner.py index b8c7cd3a8..20e2cfd27 100644 --- a/partner_contact_department/models/res_partner.py +++ b/partner_contact_department/models/res_partner.py @@ -1,11 +1,38 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza <pedro.baeza@serviciosbaeza.com> +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Antonio Espinosa <antonioea@antiun.com> +# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from openerp import models, fields class ResPartner(models.Model): _inherit = 'res.partner' - department = fields.Many2one(comodel_name='crm.department') + department_id = fields.Many2one( + "res.partner.department", + "Department", + oldname="department") + + +class ResPartnerDepartment(models.Model): + _name = 'res.partner.department' + _order = "parent_left" + _parent_order = "name" + _parent_store = True + _description = "Department" + + name = fields.Char(required=True, translate=True) + parent_id = fields.Many2one( + "res.partner.department", + "Parent department") + child_ids = fields.One2many( + "res.partner.department", + "parent_id", + "Child departments", + oldname="children") + parent_left = fields.Integer(index=True) + parent_right = fields.Integer(index=True) diff --git a/partner_contact_department/security/ir.model.access.csv b/partner_contact_department/security/ir.model.access.csv index dc285f926..9a73e7a61 100644 --- a/partner_contact_department/security/ir.model.access.csv +++ b/partner_contact_department/security/ir.model.access.csv @@ -1,5 +1,5 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_crm_department_public","crm_department group_public","model_crm_department","base.group_public",1,0,0,0 -"access_crm_department_portal","crm_department group_portal","model_crm_department","base.group_portal",1,0,0,0 -"access_crm_department_group_partner_manager","crm_department group_partner_manager","model_crm_department","base.group_partner_manager",1,1,1,1 -"access_crm_department_group_user","crm_department group_user","model_crm_department","base.group_user",1,0,0,0 +"access_res_partner_department_public","res_partner_department group_public","model_res_partner_department","base.group_public",1,0,0,0 +"access_res_partner_department_portal","res_partner_department group_portal","model_res_partner_department","base.group_portal",1,0,0,0 +"access_res_partner_department_group_partner_manager","res_partner_department group_partner_manager","model_res_partner_department","base.group_partner_manager",1,1,1,1 +"access_res_partner_department_group_user","res_partner_department group_user","model_res_partner_department","base.group_user",1,0,0,0 diff --git a/partner_contact_department/views/crm_department_view.xml b/partner_contact_department/views/crm_department_view.xml deleted file mode 100644 index 981e7d7b7..000000000 --- a/partner_contact_department/views/crm_department_view.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record id="crm_department_action" model="ir.actions.act_window"> - <field name="name">Departments</field> - <field name="res_model">crm.department</field> - <field name="view_type">form</field> - <field name="view_mode">tree</field> -</record> - -<record id="crm_department_tree_view" model="ir.ui.view"> - <field name="name">CRM department tree</field> - <field name="model">crm.department</field> - <field name="arch" type="xml"> - <tree string="Departments" editable="top"> - <field name="name"/> - <field name="parent_id"/> - </tree> - </field> -</record> - -<menuitem action="crm_department_action" - id="menu_crm_department" - name="Departments" - parent="base.menu_crm_config_lead" - sequence="3"/> - -</data> -</openerp> \ No newline at end of file diff --git a/partner_contact_department/views/crm_lead_view.xml b/partner_contact_department/views/crm_lead_view.xml deleted file mode 100644 index 6b4d289af..000000000 --- a/partner_contact_department/views/crm_lead_view.xml +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> -<data> - -<record model="ir.ui.view" id="crm_case_form_view_leads"> - <field name="name">Add department field</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department" - placeholder="Department" - options='{"no_open": True}'/> - </field> - </field> -</record> - -<record model="ir.ui.view" id="view_crm_case_leads_filter"> - <field name="name">Add department field for searching and grouping</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_leads_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="Department" - domain="[]" - context="{'group_by': 'department'}"/> - </filter> - </field> -</record> - -<record model="ir.ui.view" id="crm_case_form_view_oppor"> - <field name="name">Add department field</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.crm_case_form_view_oppor"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department" - placeholder="Department" - options='{"no_open": True}'/> - </field> - </field> -</record> - -<record model="ir.ui.view" id="view_crm_case_opportunities_filter"> - <field name="name">Add department field for searching and grouping</field> - <field name="model">crm.lead</field> - <field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/> - <field name="arch" type="xml"> - <field name="section_id" position="after"> - <field name="department"/> - </field> - <filter string="Sales Team" position="after"> - <filter string="Department" - domain="[]" - context="{'group_by': 'department'}"/> - </filter> - </field> -</record> - -</data> -</openerp> \ No newline at end of file diff --git a/partner_contact_department/views/res_partner_department_view.xml b/partner_contact_department/views/res_partner_department_view.xml new file mode 100644 index 000000000..f7aae91f9 --- /dev/null +++ b/partner_contact_department/views/res_partner_department_view.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza + © 2015 Antiun Ingeniería S.L. - Antonio Espinosa + © 2015 Antiun Ingeniería S.L. - Jairo Llopis + License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). --> + +<openerp> +<data> + +<record id="res_partner_department_action" model="ir.actions.act_window"> + <field name="name">Departments</field> + <field name="res_model">res.partner.department</field> + <field name="view_type">form</field> + <field name="view_mode">tree</field> +</record> + +<record id="res_partner_department_tree_view" model="ir.ui.view"> + <field name="name">CRM department tree</field> + <field name="model">res.partner.department</field> + <field name="arch" type="xml"> + <tree string="Departments" editable="top"> + <field name="name"/> + <field name="parent_id"/> + </tree> + </field> +</record> + +<record id="res_partner_department_form_view" model="ir.ui.view"> + <field name="name">CRM department form</field> + <field name="model">res.partner.department</field> + <field name="arch" type="xml"> + <form> + <group> + <field name="name"/> + <field name="parent_id"/> + <field name="child_ids"/> + </group> + </form> + </field> +</record> + +<menuitem action="res_partner_department_action" + id="menu_res_partner_department" + parent="base.menu_config_address_book"/> + +</data> +</openerp> diff --git a/partner_contact_department/views/res_partner_view.xml b/partner_contact_department/views/res_partner_view.xml index 8856abd93..108a2415e 100644 --- a/partner_contact_department/views/res_partner_view.xml +++ b/partner_contact_department/views/res_partner_view.xml @@ -1,4 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> +<!-- © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza + © 2015 Antiun Ingeniería S.L. - Antonio Espinosa + © 2015 Antiun Ingeniería S.L. - Jairo Llopis + License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). --> + <openerp> <data> @@ -7,14 +12,16 @@ <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department" + <xpath expr="//sheet/group//field[@name='function']" position="after"> + <field name="department_id" placeholder="Department" attrs="{'invisible': [('is_company','=', True)]}" options='{"no_open": True}'/> - </field> - <xpath expr="//field[@name='child_ids']/form//field[@name='phone']" position="before"> - <field name="department" + </xpath> + <xpath expr="//field[@name='child_ids']/form//field[@name='function']" + position="after"> + <field name="is_company" invisible="True"/> + <field name="department_id" placeholder="Department" attrs="{'invisible': [('is_company','=', True)]}" options='{"no_open": True}'/> @@ -22,34 +29,21 @@ </field> </record> -<!-- Uncomment this to add a new column to tree view -<record model="ir.ui.view" id="view_partner_tree_department"> - <field name="name">Partner tree with department</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_tree"/> - <field name="arch" type="xml"> - <field name="phone" position="before"> - <field name="department"/> - </field> - </field> -</record> ---> - <record model="ir.ui.view" id="view_res_partner_filter_department"> <field name="name">Partner search with department</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_res_partner_filter"/> <field name="arch" type="xml"> <field name="category_id" position="after"> - <field name="department"/> + <field name="department_id"/> </field> <filter string="Salesperson" position="after"> <filter string="Department" domain="[('is_company', '=', False)]" - context="{'group_by': 'department'}"/> + context="{'group_by': 'department_id'}"/> </filter> </field> </record> </data> -</openerp> \ No newline at end of file +</openerp> From 7cb72348b548dbcbc93ab28ff9ca1519a65c3278 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Tue, 22 Dec 2015 16:08:30 +0100 Subject: [PATCH 54/58] Improve README. --- partner_contact_department/README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/partner_contact_department/README.rst b/partner_contact_department/README.rst index d142645b8..f15fcdce0 100644 --- a/partner_contact_department/README.rst +++ b/partner_contact_department/README.rst @@ -25,6 +25,7 @@ Usage To use this module, you need to: * Go to any partner's form. +* You will find the new *Department* field below *Job Position*. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot From 0ce0b34991116d9355ededee5239fb98687cb19e Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Tue, 22 Dec 2015 16:32:58 +0100 Subject: [PATCH 55/58] Move group of fields outside unrelated Sales & Purchases tab. --- partner_capital/views/res_partner_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partner_capital/views/res_partner_view.xml b/partner_capital/views/res_partner_view.xml index e5a5b6c85..4fe7baa55 100644 --- a/partner_capital/views/res_partner_view.xml +++ b/partner_capital/views/res_partner_view.xml @@ -11,7 +11,7 @@ <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> - <xpath expr="//page[@name='sales_purchases']/group"> + <xpath expr="/form/sheet/group"> <group name="captial" string="Capital" attrs="{'invisible': [('is_company', '=', False)]}"> From 1016eb8f8288781deed6dde27a45bfb531889eb4 Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Tue, 22 Dec 2015 16:37:29 +0100 Subject: [PATCH 56/58] Improve metadata. --- partner_employee_quantity/__openerp__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/partner_employee_quantity/__openerp__.py b/partner_employee_quantity/__openerp__.py index be90e04db..0d3c0ab64 100644 --- a/partner_employee_quantity/__openerp__.py +++ b/partner_employee_quantity/__openerp__.py @@ -8,7 +8,9 @@ 'summary': 'Know how many employees a partner has', 'version': '8.0.1.0.0', 'category': 'Customer Relationship Management', - 'author': 'Antiun Ingeniería S.L.', + "author": "Antiun Ingeniería S.L., Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, 'website': 'http://www.antiun.com', 'depends': [ 'base', From bb0a4b769a22c4abbe4d594c51161b79ed5fd05d Mon Sep 17 00:00:00 2001 From: Jairo Llopis <yajo.sk8@gmail.com> Date: Tue, 22 Dec 2015 16:37:38 +0100 Subject: [PATCH 57/58] Move group of fields outside unrelated Sales & Purchases tab. --- partner_employee_quantity/README.rst | 2 +- partner_employee_quantity/views/res_partner_view.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/partner_employee_quantity/README.rst b/partner_employee_quantity/README.rst index 11a9ea65e..ca6964326 100644 --- a/partner_employee_quantity/README.rst +++ b/partner_employee_quantity/README.rst @@ -23,7 +23,7 @@ To use this module, you need to: * Go to any partner's form. * Enable *Is company?*. -* Go to *Sales & Purchases > Employee quantity*. +* You will see a new group of fields called *Employee quantity*. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot diff --git a/partner_employee_quantity/views/res_partner_view.xml b/partner_employee_quantity/views/res_partner_view.xml index 8a8297db5..ad2c60461 100644 --- a/partner_employee_quantity/views/res_partner_view.xml +++ b/partner_employee_quantity/views/res_partner_view.xml @@ -7,7 +7,7 @@ <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> - <xpath expr="//page[@name='sales_purchases']/group"> + <xpath expr="/form/sheet/group"> <group name="employee_quantity" string="Employee quantity" attrs="{'invisible': [('is_company', '=', False)]}"> From bd356fb2dc9eea91bf89dd9e067dd50d9062aa1e Mon Sep 17 00:00:00 2001 From: OCA Git Bot <oca-git-bot@odoo-community.org> Date: Wed, 23 Dec 2015 02:33:20 +0100 Subject: [PATCH 58/58] [UPD] addons table in README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 6f14bcc7a..618763233 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,16 @@ addon | version | summary [partner_academic_title](partner_academic_title/) | 8.0.1.0.0 | Add possibility to define some academic title [partner_address_street3](partner_address_street3/) | 8.0.0.1.0 | Street3 in addresses [partner_auto_salesman](partner_auto_salesman/) | 8.0.1.0.0 | Partner auto salesman +[partner_capital](partner_capital/) | 8.0.1.0.0 | Partners Capital [partner_contact_address_detailed](partner_contact_address_detailed/) | 8.0.1.0.0 | All address data in summarized contact form [partner_contact_birthdate](partner_contact_birthdate/) | 8.0.1.0.0 | Contact's birthdate +[partner_contact_department](partner_contact_department/) | 8.0.1.0.0 | Assign contacts to departments [partner_contact_gender](partner_contact_gender/) | 8.0.1.0.0 | Add gender field to contacts [partner_contact_in_several_companies](partner_contact_in_several_companies/) | 8.0.1.0.0 | Allow to have one contact in several partners +[partner_contact_job_position](partner_contact_job_position/) | 8.0.1.0.0 | Categorize job positions for contacts [partner_contact_nationality](partner_contact_nationality/) | 8.0.1.0.0 | Contact's nationality [partner_contact_personal_information_page](partner_contact_personal_information_page/) | 8.0.1.0.0 | Add a page to contacts form to put personal information +[partner_employee_quantity](partner_employee_quantity/) | 8.0.1.0.0 | Know how many employees a partner has [partner_external_maps](partner_external_maps/) | 8.0.0.1.0 | Add Map and Map Routing buttons on partner form to open GMaps, OSM, Bing and others [partner_firstname](partner_firstname/) | 8.0.2.1.0 | Split first name and last name for non company partners [partner_helper](partner_helper/) | 8.0.0.1.0 | Partner Helper