Browse Source

Merge pull request #615 from Eficent/9.0-partner_sector-contact

[9.0] partner_sector: allow to use in individuals
pull/635/head
Pedro M. Baeza 6 years ago
committed by GitHub
parent
commit
1a9b7eabd5
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      partner_changeset/README.rst
  2. 15
      partner_changeset/models/res_partner.py
  3. 40
      partner_changeset/models/res_partner_changeset.py
  4. 7
      partner_contact_height/README.rst
  5. 7
      partner_contact_nutrition/README.rst
  6. 7
      partner_contact_weight/README.rst
  7. 2
      partner_identification/README.rst
  8. 8
      partner_identification/__openerp__.py
  9. 33
      partner_sector/README.rst
  10. 9
      partner_sector/__openerp__.py
  11. 2
      partner_sector/models/__init__.py
  12. 14
      partner_sector/models/base_config_settings.py
  13. 14
      partner_sector/models/sale_config_settings.py
  14. 11
      partner_sector/security/partner_sector_security.xml
  15. 23
      partner_sector/views/base_config_settings.xml
  16. 55
      partner_sector/views/res_partner_view.xml
  17. 21
      partner_sector/views/sale_config_settings.xml

2
partner_changeset/README.rst

@ -136,7 +136,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues Bugs are tracked on `GitHub Issues
<https://github.com/OCA/partner-contact/issues>`_. In case of trouble, please <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, 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
help us smash it by providing detailed and welcomed feedback.
Credits Credits
======= =======

15
partner_changeset/models/res_partner.py

@ -14,16 +14,16 @@ class ResPartner(models.Model):
readonly=True) readonly=True)
count_pending_changesets = fields.Integer( count_pending_changesets = fields.Integer(
string='Changes', string='Changes',
compute='_count_pending_changesets',
compute='_compute_count_pending_changesets',
search='_search_count_pending_changesets') search='_search_count_pending_changesets')
@api.one
@api.depends('changeset_ids', 'changeset_ids.state') @api.depends('changeset_ids', 'changeset_ids.state')
def _count_pending_changesets(self):
changesets = self.changeset_ids.filtered(
lambda rev: rev.state == 'draft' and rev.partner_id == self
)
self.count_pending_changesets = len(changesets)
def _compute_count_pending_changesets(self):
for res in self:
changesets = res.changeset_ids.filtered(
lambda rev: rev.state == 'draft' and rev.partner_id == res
)
res.count_pending_changesets = len(changesets)
@api.multi @api.multi
def write(self, values): def write(self, values):
@ -39,6 +39,7 @@ class ResPartner(models.Model):
def _search_count_pending_changesets(self, operator, value): def _search_count_pending_changesets(self, operator, value):
if operator not in ('=', '!=', '<', '<=', '>', '>=', 'in', 'not in'): if operator not in ('=', '!=', '<', '<=', '>', '>=', 'in', 'not in'):
return [] return []
# pylint: disable=sql-injection
query = ("SELECT p.id " query = ("SELECT p.id "
"FROM res_partner p " "FROM res_partner p "
"INNER JOIN res_partner_changeset r ON r.partner_id = p.id " "INNER JOIN res_partner_changeset r ON r.partner_id = p.id "

40
partner_changeset/models/res_partner_changeset.py

@ -52,14 +52,14 @@ class ResPartnerChangeset(models.Model):
models = self.env['ir.model'].search([]) models = self.env['ir.model'].search([])
return [(model.model, model.name) for model in models] return [(model.model, model.name) for model in models]
@api.one
@api.depends('change_ids', 'change_ids.state') @api.depends('change_ids', 'change_ids.state')
def _compute_state(self): def _compute_state(self):
if all(change.state in ('done', 'cancel') for change
in self.mapped('change_ids')):
self.state = 'done'
else:
self.state = 'draft'
for res in self:
if all(change.state in ('done', 'cancel') for change
in res.mapped('change_ids')):
res.state = 'done'
else:
res.state = 'draft'
@api.multi @api.multi
def apply(self): def apply(self):
@ -306,25 +306,25 @@ class ResPartnerChangesetChange(models.Model):
_old_value_fields + _old_value_fields +
_new_value_fields) _new_value_fields)
@api.one
@api.depends('changeset_id.partner_id') @api.depends('changeset_id.partner_id')
def _compute_origin_values(self): def _compute_origin_values(self):
field_name = self.get_field_for_type(self.field_id, 'origin')
if self.state == 'draft':
value = self.changeset_id.partner_id[self.field_id.name]
else:
old_field = self.get_field_for_type(self.field_id, 'old')
value = self[old_field]
setattr(self, field_name, value)
for res in self:
field_name = res.get_field_for_type(res.field_id, 'origin')
if res.state == 'draft':
value = res.changeset_id.partner_id[res.field_id.name]
else:
old_field = res.get_field_for_type(res.field_id, 'old')
value = res[old_field]
setattr(res, field_name, value)
@api.one
@api.depends(lambda self: self._value_fields) @api.depends(lambda self: self._value_fields)
def _compute_value_display(self): def _compute_value_display(self):
for prefix in ('origin', 'new'):
value = getattr(self, 'get_%s_value' % prefix)()
if self.field_id.ttype == 'many2one' and value:
value = value.display_name
setattr(self, '%s_value_display' % prefix, value)
for res in self:
for prefix in ('origin', 'new'):
value = getattr(res, 'get_%s_value' % prefix)()
if res.field_id.ttype == 'many2one' and value:
value = value.display_name
setattr(res, '%s_value_display' % prefix, value)
@api.model @api.model
def get_field_for_type(self, field, prefix): def get_field_for_type(self, field, prefix):

7
partner_contact_height/README.rst

@ -21,11 +21,6 @@ To use this module, you need to:
:alt: Try me on Runbot :alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/134/9.0 :target: https://runbot.odoo-community.org/runbot/134/9.0
Known issues / Roadmap
======================
* ...
Bug Tracker Bug Tracker
=========== ===========
@ -60,4 +55,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
To contribute to this module, please visit https://odoo-community.org.
To contribute to this module, please visit https://odoo-community.org.

7
partner_contact_nutrition/README.rst

@ -26,11 +26,6 @@ To use this module, you need to:
:alt: Try me on Runbot :alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/134/9.0 :target: https://runbot.odoo-community.org/runbot/134/9.0
Known issues / Roadmap
======================
* ...
Bug Tracker Bug Tracker
=========== ===========
@ -65,4 +60,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
To contribute to this module, please visit https://odoo-community.org.
To contribute to this module, please visit https://odoo-community.org.

7
partner_contact_weight/README.rst

@ -21,11 +21,6 @@ To use this module, you need to:
:alt: Try me on Runbot :alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/134/9.0 :target: https://runbot.odoo-community.org/runbot/134/9.0
Known issues / Roadmap
======================
* ...
Bug Tracker Bug Tracker
=========== ===========
@ -60,4 +55,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
To contribute to this module, please visit https://odoo-community.org.
To contribute to this module, please visit https://odoo-community.org.

2
partner_identification/README.rst

@ -15,7 +15,7 @@ and vary from country to country.
* Fiscal ID's * Fiscal ID's
* Membership numbers * Membership numbers
* Driver license * Driver license
* ...
*
Installation Installation

8
partner_identification/__openerp__.py

@ -19,10 +19,10 @@
'security/ir.model.access.csv', 'security/ir.model.access.csv',
], ],
'author': 'ChriCar Beteiligungs- und Beratungs- GmbH, ' 'author': 'ChriCar Beteiligungs- und Beratungs- GmbH, '
'Antiun Ingeniería S.L.',
'Camptocamp,'
'ACSONE SA/NV,'
'Odoo Community Association (OCA)'
'Antiun Ingeniería S.L., '
'Camptocamp, '
'ACSONE SA/NV, '
'Odoo Community Association (OCA)',
'website': 'https://odoo-community.org/', 'website': 'https://odoo-community.org/',
'license': 'AGPL-3', 'license': 'AGPL-3',
'installable': True, 'installable': True,

33
partner_sector/README.rst

@ -1,6 +1,6 @@
.. 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
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: https://www.gnu.org/licenses/agpl
:alt: License: AGPL-3
============== ==============
Partner Sector Partner Sector
@ -16,6 +16,16 @@ To manage sectors, you need to:
* Go to *Sales > Configuration > Address Book > Sectors*. * Go to *Sales > Configuration > Address Book > Sectors*.
By default only companies have sectors. To activate sectors in individuals also,
you need to activate the following setting:
* Go to *Settings > General Settings > Sector in contacts > Use sector for individuals*
Or, if you have *Sales* or *CRM* modules installed:
* Go to *Sales > Configuration > Settings > Partner Sector > Use sector for individuals*
Usage Usage
===== =====
@ -24,8 +34,6 @@ To use this module, you need to:
* Go to any partner's form. * Go to any partner's form.
Only companies have sectors.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot :alt: Try me on Runbot
@ -40,13 +48,19 @@ Known issues / Roadmap
Bug Tracker 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.
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 smash it by providing detailed and welcomed feedback.
Credits Credits
======= =======
Images
------
* Odoo Community Association: `Icon <https://odoo-community.org/logo.png>`_.
Contributors Contributors
------------ ------------
@ -55,6 +69,7 @@ Contributors
* Javier Iniesta <javieria@antiun.com> * Javier Iniesta <javieria@antiun.com>
* Vicent Cubells <vicent.cubells@tecnativa.com> * Vicent Cubells <vicent.cubells@tecnativa.com>
* Pedro M. Baeza <pedro.baeza@tecnativa.com> * Pedro M. Baeza <pedro.baeza@tecnativa.com>
* Jordi Ballester Alomar <jordi.ballester@eficent.com>
Maintainer Maintainer
---------- ----------
@ -69,4 +84,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.
To contribute to this module, please visit https://odoo-community.org.

9
partner_sector/__openerp__.py

@ -6,19 +6,22 @@
{ {
"name": "Partner Sector", "name": "Partner Sector",
"summary": "Add partner sectors", "summary": "Add partner sectors",
"version": "9.0.1.1.2",
"version": "9.0.2.0.0",
"category": "Customer Relationship Management", "category": "Customer Relationship Management",
"website": "http://www.tecnativa.com",
"website": "https://github.com/OCA/partner-contact",
"author": "Tecnativa, Odoo Community Association (OCA)", "author": "Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3", "license": "AGPL-3",
"application": False, "application": False,
"installable": True, "installable": True,
"depends": [ "depends": [
"base",
"base_setup",
], ],
"data": [ "data": [
"security/ir.model.access.csv", "security/ir.model.access.csv",
"security/partner_sector_security.xml",
"views/res_partner_sector_view.xml", "views/res_partner_sector_view.xml",
"views/res_partner_view.xml", "views/res_partner_view.xml",
"views/base_config_settings.xml",
"views/sale_config_settings.xml"
] ]
} }

2
partner_sector/models/__init__.py

@ -5,3 +5,5 @@
from . import res_partner from . import res_partner
from . import res_partner_sector from . import res_partner_sector
from . import base_config_settings
from . import sale_config_settings

14
partner_sector/models/base_config_settings.py

@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
from openerp import fields, models
class BaseConfigSettings(models.TransientModel):
_inherit = 'base.config.settings'
group_use_partner_sector_for_person = fields.Boolean(
'Use sector for individuals',
help="Set if you want to be able use sectors for "
"individuals also.",
implied_group='partner_sector.group_use_partner_sector_for_person')

14
partner_sector/models/sale_config_settings.py

@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
from openerp import fields, models
class SaleConfigSettings(models.TransientModel):
_inherit = 'sale.config.settings'
group_use_partner_sector_for_person = fields.Boolean(
'Use sector for individuals',
help="Set if you want to be able to use sectors for "
"individuals also.",
implied_group='partner_sector.group_use_partner_sector_for_person')

11
partner_sector/security/partner_sector_security.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="0">
<record id="group_use_partner_sector_for_person" model="res.groups">
<field name="name">Use sector for individuals</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
</data>
</openerp>

23
partner_sector/views/base_config_settings.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_general_configuration" model="ir.ui.view">
<field name="name">General Settings</field>
<field name="model">base.config.settings</field>
<field name="inherit_id" ref="base_setup.view_general_configuration"/>
<field name="arch" type="xml">
<group name="authentication" position="after">
<group name="partner">
<label for="id" string="Sector for individual"/>
<div name="group_use_partner_sector_for_person">
<field name="group_use_partner_sector_for_person" class="oe_inline"/>
<label for="group_use_partner_sector_for_person"/>
</div>
</group>
</group>
</field>
</record>
</data>
</openerp>

55
partner_sector/views/res_partner_view.xml

@ -15,6 +15,14 @@
<field name="secondary_sector_ids" widget="many2many_tags" <field name="secondary_sector_ids" widget="many2many_tags"
attrs="{'invisible': [('is_company', '=', False)]}"/> attrs="{'invisible': [('is_company', '=', False)]}"/>
</field> </field>
<xpath expr="//field[@name='child_ids']/form//field[@name='title']" position="after">
<field name="is_company" invisible="1"/>
<field name="sector_id" placeholder="Sector"
options='{"no_open": True}'
attrs="{'invisible': [('is_company', '=', False)]}"/>
<field name="secondary_sector_ids" widget="many2many_tags"
attrs="{'invisible': [('is_company', '=', False)]}"/>
</xpath>
</field> </field>
</record> </record>
@ -50,4 +58,51 @@
</field> </field>
</record> </record>
<!-- Views activated for group_use_partner_sector_for_person -->
<record model="ir.ui.view" id="view_partner_form_sector_person">
<field name="name">Partner form with sector</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="partner_sector.view_partner_form_sector"/>
<field name="groups_id" eval="[(4, ref('partner_sector.group_use_partner_sector_for_person'))]"/>
<field name="arch" type="xml">
<field name="sector_id" position="attributes">
<attribute name="attrs">{'invisible': 0}</attribute>
</field>
<field name="secondary_sector_ids" position="attributes">
<attribute name="attrs">{'invisible': 0}</attribute>
</field>
<xpath expr="//field[@name='child_ids']/form//field[@name='sector_id']" position="attributes">
<attribute name="attrs">{'invisible': 0}</attribute>
</xpath>
<xpath expr="//field[@name='child_ids']/form//field[@name='secondary_sector_ids']" position="attributes">
<attribute name="attrs">{'invisible': 0}</attribute>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_partner_tree_sector_person">
<field name="name">Partner tree with sector</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="partner_sector.view_partner_tree_sector"/>
<field name="groups_id" eval="[(4, ref('partner_sector.group_use_partner_sector_for_person'))]"/>
<field name="arch" type="xml">
<field name="sector_id" position="attributes">
<attribute name="attrs">{'invisible': 0}</attribute>
</field>
</field>
</record>
<record model="ir.ui.view" id="view_res_partner_filter_sector_person">
<field name="name">Partner search with sector</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="partner_sector.view_res_partner_filter_sector"/>
<field name="groups_id" eval="[(4, ref('partner_sector.group_use_partner_sector_for_person'))]"/>
<field name="arch" type="xml">
<filter name="sector" position="attributes">
<attribute name="domain"/>
</filter>
</field>
</record>
</odoo> </odoo>

21
partner_sector/views/sale_config_settings.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_sale_config_settings" model="ir.ui.view">
<field name="name">partner sector settings</field>
<field name="model">sale.config.settings</field>
<field name="inherit_id" ref="base_setup.view_sale_config_settings"/>
<field name="arch" type="xml">
<div id="main" position="inside">
<group name="partner_sector" string="Partner Sector">
<label for="id" string="Sector for individuals"/>
<div name="group_use_partner_sector_for_person">
<field name="group_use_partner_sector_for_person" class="oe_inline"/>
<label for="group_use_partner_sector_for_person"/>
</div>
</group>
</div>
</field>
</record>
</data>
</openerp>
Loading…
Cancel
Save