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. 5
      partner_contact_height/README.rst
  5. 5
      partner_contact_nutrition/README.rst
  6. 5
      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
<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
help us smash it by providing detailed and welcomed feedback.
Credits
=======

15
partner_changeset/models/res_partner.py

@ -14,16 +14,16 @@ class ResPartner(models.Model):
readonly=True)
count_pending_changesets = fields.Integer(
string='Changes',
compute='_count_pending_changesets',
compute='_compute_count_pending_changesets',
search='_search_count_pending_changesets')
@api.one
@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
def write(self, values):
@ -39,6 +39,7 @@ class ResPartner(models.Model):
def _search_count_pending_changesets(self, operator, value):
if operator not in ('=', '!=', '<', '<=', '>', '>=', 'in', 'not in'):
return []
# pylint: disable=sql-injection
query = ("SELECT p.id "
"FROM res_partner p "
"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([])
return [(model.model, model.name) for model in models]
@api.one
@api.depends('change_ids', 'change_ids.state')
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
def apply(self):
@ -306,25 +306,25 @@ class ResPartnerChangesetChange(models.Model):
_old_value_fields +
_new_value_fields)
@api.one
@api.depends('changeset_id.partner_id')
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)
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
def get_field_for_type(self, field, prefix):

5
partner_contact_height/README.rst

@ -21,11 +21,6 @@ To use this module, you need to:
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/134/9.0
Known issues / Roadmap
======================
* ...
Bug Tracker
===========

5
partner_contact_nutrition/README.rst

@ -26,11 +26,6 @@ To use this module, you need to:
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/134/9.0
Known issues / Roadmap
======================
* ...
Bug Tracker
===========

5
partner_contact_weight/README.rst

@ -21,11 +21,6 @@ To use this module, you need to:
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/134/9.0
Known issues / Roadmap
======================
* ...
Bug Tracker
===========

2
partner_identification/README.rst

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

8
partner_identification/__openerp__.py

@ -19,10 +19,10 @@
'security/ir.model.access.csv',
],
'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/',
'license': 'AGPL-3',
'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
@ -16,6 +16,16 @@ To manage sectors, you need to:
* 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
=====
@ -24,8 +34,6 @@ To use this module, you need to:
* Go to any partner's form.
Only companies have sectors.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
@ -40,13 +48,19 @@ Known issues / Roadmap
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
=======
Images
------
* Odoo Community Association: `Icon <https://odoo-community.org/logo.png>`_.
Contributors
------------
@ -55,6 +69,7 @@ Contributors
* Javier Iniesta <javieria@antiun.com>
* Vicent Cubells <vicent.cubells@tecnativa.com>
* Pedro M. Baeza <pedro.baeza@tecnativa.com>
* Jordi Ballester Alomar <jordi.ballester@eficent.com>
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
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",
"summary": "Add partner sectors",
"version": "9.0.1.1.2",
"version": "9.0.2.0.0",
"category": "Customer Relationship Management",
"website": "http://www.tecnativa.com",
"website": "https://github.com/OCA/partner-contact",
"author": "Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": [
"base",
"base_setup",
],
"data": [
"security/ir.model.access.csv",
"security/partner_sector_security.xml",
"views/res_partner_sector_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_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"
attrs="{'invisible': [('is_company', '=', False)]}"/>
</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>
</record>
@ -50,4 +58,51 @@
</field>
</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>

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