Browse Source

9.0 partner relations v8api (#304)

[MIG] partner_relations
* New API.
* Rename module partner_relations to partner_multi_relation.
* More test
* View adaptations
pull/363/head
Ronald Portier 8 years ago
parent
commit
9eccf77754
No known key found for this signature in database GPG Key ID: A181F8124D7101D3
  1. 89
      README.rst
  2. 5
      __init__.py
  3. 26
      __openerp__.py
  4. 118
      data/demo.xml
  5. 431
      i18n/da.po
  6. 431
      i18n/de.po
  7. 432
      i18n/es.po
  8. 430
      i18n/fi.po
  9. 433
      i18n/fr.po
  10. 432
      i18n/it.po
  11. 549
      i18n/nl.po
  12. 521
      i18n/partner_multi_relation.pot
  13. 432
      i18n/pt_BR.po
  14. 431
      i18n/sl.po
  15. 8
      models/__init__.py
  16. 172
      models/res_partner.py
  17. 156
      models/res_partner_relation.py
  18. 345
      models/res_partner_relation_all.py
  19. 175
      models/res_partner_relation_type.py
  20. 127
      models/res_partner_relation_type_selection.py
  21. 8
      security/ir.model.access.csv
  22. BIN
      static/description/icon.png
  23. 7
      tests/__init__.py
  24. 280
      tests/test_partner_relation.py
  25. 241
      tests/test_partner_relation_all.py
  26. 113
      tests/test_partner_relation_common.py
  27. 76
      tests/test_partner_search.py
  28. 25
      views/menu.xml
  29. 59
      views/res_partner.xml
  30. 96
      views/res_partner_relation_all.xml
  31. 51
      views/res_partner_relation_type.xml

89
README.rst

@ -0,0 +1,89 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:alt: License
Partner Relations
=================
This module aims to provide generic means to model relations between partners.
Examples would be 'is sibling of' or 'is friend of', but also 'has contract X
with' or 'is assistant of'. This way, you can encode your knowledge about your
partners directly in your partner list.
Installation
============
Configuration
=============
Usage
=====
Before being able to use relations, you'll have define some first. Do that in
Sales / Configuration / Address Book / Partner relations. Here, you need to
name both sides of the relation: To have an assistant-relation, you would name
one side 'is assistant of' and the other side 'has assistant'. This relation
only makes sense between people, so you would choose 'Person' for both partner
types. For the relation 'is a competitor of', both sides would be companies,
while the relation 'has worked for' should have persons on the left side and
companies on the right side. If you leave this field empty, the relation is
applicable to all types of partners.
If you use categories to further specify the type of partners, you could for
example enforce that the 'is member of' relation can only have companies with
label 'Organization' on the left side.
Now open a partner and choose relations as appropriate in the 'Relations' tab.
Searching partners with relations
---------------------------------
Searching for relations is integrated transparently into the partner search
form. To find all assistants in your database, fill in 'is assistant of' and
autocomplete will propose to search for partners having this relation. Now if
you want to find Anna's assistant, you fill in 'Anna' and one of the proposals
is to search for partners having a relation with Anna. This results in Anna's
assistant(s), as you searched for assistants before.
By default, only active, not expired relations are shown. If you need to find
partners that had some relation at a certain date, fill in that date in the
search box and one of the proposals is to search for relations valid at that
date.
More info
---------
For further information, please visit:
* https://www.odoo.com/forum/help-1
Known issues / Roadmap
======================
Credits
=======
Contributors
------------
* Holger Brunn <hbrunn@therp.nl>
* Stefan Rijnhart <stefan@therp.nl>
* Ronald Portier <ronald@therp.nl>
* Sandy Carter <sandy.carter@savoirfairelinux.com>
* Bruno Joliveau <bruno.joliveau@savoirfairelinux.com>
* Adriana Ierfino <adriana.ierfino@savoirfairelinux.com>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.

5
__init__.py

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# © 2013-2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models
from . import tests

26
__openerp__.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# © 2013-2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Partner relations",
"version": "9.0.1.1.1",
"author": "Therp BV,Camptocamp,Odoo Community Association (OCA)",
"complexity": "normal",
"category": "Customer Relationship Management",
"license": "AGPL-3",
"depends": [
'base',
],
"demo": [
"data/demo.xml",
],
"data": [
"views/res_partner_relation_all.xml",
'views/res_partner.xml',
'views/res_partner_relation_type.xml',
'views/menu.xml',
'security/ir.model.access.csv',
],
"auto_install": False,
"installable": True,
}

118
data/demo.xml

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<!-- Added partner categories and partners to this file, because it
turned out to be a bad idea to rely on demo data in base module,
that can change from release to release. Only dependency on
countries remain. They are less likely to change/disappear.
-->
<!-- Partner relation types -->
<record id="rel_type_assistant" model="res.partner.relation.type">
<field name="name">Is assistant of</field>
<field name="name_inverse">Has assistant</field>
<field name="contact_type_left">p</field>
<field name="contact_type_right">p</field>
</record>
<record id="rel_type_competitor" model="res.partner.relation.type">
<field name="name">Is competitor of</field>
<field name="name_inverse">Is competitor of</field>
<field name="contact_type_left">c</field>
<field name="contact_type_right">c</field>
<field name="is_symmetric" eval="True" />
</record>
<record id="rel_type_has_worked_for" model="res.partner.relation.type">
<field name="name">Has worked for</field>
<field name="name_inverse">Has former employee</field>
<field name="contact_type_left">p</field>
<field name="contact_type_right">c</field>
</record>
<!-- Categories -->
<record id="res_partner_category_pmr_0" model="res.partner.category">
<field name="name">Washing Companies</field>
</record>
<record id="res_partner_category_pmr_4" model="res.partner.category">
<field name="name">Washing Gold</field>
<field name="parent_id" ref="res_partner_category_pmr_0"/>
</record>
<record id="res_partner_category_pmr_5" model="res.partner.category">
<field name="name">Washing Silver</field>
<field name="parent_id" ref="res_partner_category_pmr_0"/>
</record>
<record id="res_partner_category_pmr_11" model="res.partner.category">
<field name="name">Washing Services</field>
<field name="parent_id" ref="res_partner_category_pmr_0"/>
</record>
<!-- Partners -->
<record id="res_partner_pmr_great" model="res.partner">
<field name="name">Great Washing Powder Company</field>
<field
name="category_id"
eval="[(6, 0, [ref('res_partner_category_pmr_11'), ref('res_partner_category_pmr_4')])]"
/>
<field name="supplier">1</field>
<field name="customer">1</field>
<field name="is_company">1</field>
<field name="city">Le Bourget du Lac</field>
<field name="zip">73377</field>
<field name="phone">+33 4 49 23 44 54</field>
<field name="country_id" ref="base.fr"/>
<field name="street">93, Press Avenue</field>
<field name="email">great@yourcompany.example.com</field>
<field name="website">http://www.great.com</field>
</record>
<record id="res_partner_pmr_best" model="res.partner">
<field name="name">Best Washing Powder Company</field>
<field
name="category_id"
eval="[(6, 0, [ref('res_partner_category_pmr_4'), ref('res_partner_category_pmr_11')])]"
/>
<field name="supplier">1</field>
<field name="is_company">1</field>
<field name="city">Champs sur Marne</field>
<field name="zip">77420</field>
<field name="country_id" ref="base.fr"/>
<field name="email">best@yourcompany.example.com</field>
<field name="phone">+33 1 64 61 04 01</field>
<field name="street">12 rue Albert Einstein</field>
<field name="website">http://www.best.com/</field>
</record>
<record id="res_partner_pmr_super" model="res.partner">
<field name="name">Super Washing Powder Company</field>
<field
name="category_id"
eval="[(6,0,[ref('res_partner_category_pmr_5')])]"
/>
<field name="supplier">1</field>
<field eval="1" name="customer"/>
<field name="is_company">1</field>
<field name="street">3rd Floor, Room 3-C,</field>
<field name="street2">Carretera Panamericana, Km 1, Urb. Delgado Chalbaud</field>
<field name="city">Caracas</field>
<field name="zip">1090</field>
<field name="email">super@yourcompany.example.com</field>
<field name="phone">+58 212 681 0538</field>
<field name="country_id" ref="base.ve"/>
<field name="website">super.com</field>
</record>
<!-- Relations -->
<record id="rel_1" model="res.partner.relation">
<field name="left_partner_id" ref="res_partner_pmr_great" />
<field name="right_partner_id" ref="res_partner_pmr_super" />
<field name="type_id" ref="rel_type_competitor" />
</record>
<record id="rel_2" model="res.partner.relation">
<field name="left_partner_id" ref="res_partner_pmr_best" />
<field name="right_partner_id" ref="res_partner_pmr_super" />
<field name="type_id" ref="rel_type_competitor" />
</record>
<record id="rel_3" model="res.partner.relation">
<field name="left_partner_id" ref="res_partner_pmr_great" />
<field name="right_partner_id" ref="res_partner_pmr_best" />
<field name="type_id" ref="rel_type_competitor" />
</record>
</data>
</openerp>

431
i18n/da.po

@ -0,0 +1,431 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
# Translators:
# Hans Henrik Gabelgaard <hhg@gabelgaard.org>, 2015
msgid ""
msgstr ""
"Project-Id-Version: partner-contact (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-07 07:18+0000\n"
"PO-Revision-Date: 2016-05-06 15:15+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: Danish (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n"
" </p>\n"
" "
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,active:0 field:res.partner.relation.all,active:0
msgid "Active"
msgstr "Aktiv"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,allow_self:0
#: field:res.partner.relation.type,allow_self:0
msgid "Allow both sides to be the same"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:68
#, python-format
msgid "Company"
msgstr "Virksomhed"
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,this_partner_id:0
msgid "Current Partner"
msgstr "Aktuel partner"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
#: field:res.partner.relation.type.selection,search_partner_category_this:0
msgid "Current record's category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,id:0 field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr ""
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
msgid "Inverse type"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Left Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,left_contact_type:0
msgid "Left Partner Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr "Navn"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation,any_partner_id:0
#: field:res.partner.relation,partner_id_display:0
msgid "Partner"
msgstr "Partner"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.form_res_partner_relation
msgid "Partner Relation"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.tree_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,contact_type:0
msgid "Partner Type"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.form_res_partner_relation_all
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
#: view:res.partner.relation.type:partner_multi_relation.tree_res_partner_relation_type
msgid "Partner relation"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:301
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:69
#, python-format
msgid "Person"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,record_type:0
msgid "Record type"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:370
#, python-format
msgid "Related partners"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_id:0
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
#: field:res.partner,relation_ids:0
msgid "Relations"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Right Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,right_contact_type:0
msgid "Right Partner Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.server,name:partner_multi_relation.action_show_right_relation_partners
msgid "Show partners"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:287
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:254
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:329
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation,type_selection_id:0
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:122
#, python-format
msgid "Unsupported search operand \"%s\""
msgstr ""

431
i18n/de.po

@ -0,0 +1,431 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
# Translators:
# Rudolf Schnapka <rs@techno-flex.de>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: partner-contact (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-07 07:18+0000\n"
"PO-Revision-Date: 2016-05-06 15:15+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: German (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n"
" </p>\n"
" "
msgstr "<p class=\"oe_view_nocontent_create\">\n Aufzeichnen und Beobachten der Beziehungen des Partners. Beziehungen mit anderen Partnern können entweder direkt oder rückwirkend hergestellt werden.\n </p>\n "
#. module: partner_multi_relation
#: field:res.partner.relation,active:0 field:res.partner.relation.all,active:0
msgid "Active"
msgstr "Aktiv"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr "Alle (direkten und rückwirkenden) Beziehungen zwischen Partnern"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr "Alle Beziehungsarten"
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr "Alle Beziehungen mit diesem Partner"
#. module: partner_multi_relation
#: field:res.partner.relation,allow_self:0
#: field:res.partner.relation.type,allow_self:0
msgid "Allow both sides to be the same"
msgstr "Erlaube beide Seiten gleich zu sein"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:68
#, python-format
msgid "Company"
msgstr "Unternehmen"
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr "erstellt von"
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr "erstellt am"
#. module: partner_multi_relation
#: field:res.partner.relation.all,this_partner_id:0
msgid "Current Partner"
msgstr "Aktueller Partner"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
#: field:res.partner.relation.type.selection,search_partner_category_this:0
msgid "Current record's category"
msgstr "Kategorie des aktuellen Datensatzes"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr "Partnerart des aktuellen Datensatzes"
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr "Zielpartner"
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr "Enddatum"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr "Gruppieren"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr "Hat Assistent"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr "Hat ehemaligen Mitarbeiter"
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr "Hat Beziehungsart"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr "Hat Beziehung mit"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr "Hat Beziehung mit Partner der Kategorie"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr "Hat gearbeitet für"
#. module: partner_multi_relation
#: field:res.partner.relation,id:0 field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr "ID"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr "Umgekehrte Bezeichnung"
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
msgid "Inverse type"
msgstr "Art der Umkehrung"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr "Ist Assistent von"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr "Ist Mitbewerber von"
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr "zuletzt aktualisiert von"
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr "zuletzt aktualisiert am"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Left Partner"
msgstr "Linker Partner"
#. module: partner_multi_relation
#: field:res.partner.relation,left_contact_type:0
msgid "Left Partner Type"
msgstr "Art des linken Partners"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr "Kategorie des linken Partners"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr "Art des linken Partners"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr "Linker Zweig der Beziehung"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr "Name"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr "Anderer Partner"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr "Kategorie des anderen Satzes"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr "Partnerart des anderen Satzes"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation,any_partner_id:0
#: field:res.partner.relation,partner_id_display:0
msgid "Partner"
msgstr "Partner"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.form_res_partner_relation
msgid "Partner Relation"
msgstr "Partnerbeziehung"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr "Art der Partnerbeziehung"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.tree_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr "Partnerbeziehungen"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr "Arten von Partnerbeziehungen"
#. module: partner_multi_relation
#: field:res.partner.relation.all,contact_type:0
msgid "Partner Type"
msgstr "Partnerart"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.form_res_partner_relation_all
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
#: view:res.partner.relation.type:partner_multi_relation.tree_res_partner_relation_type
msgid "Partner relation"
msgstr "Partnerbeziehung"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:301
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr "Partner dürfen nicht mit sich selbst in Beziehung stehen."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:69
#, python-format
msgid "Person"
msgstr "Person"
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr "Satzart"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,record_type:0
msgid "Record type"
msgstr "Satzart"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:370
#, python-format
msgid "Related partners"
msgstr "Partner mit Beziehung"
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr "Beziehung"
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_id:0
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr "Art der Beziehung"
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr "Beziehung zulässig"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
#: field:res.partner,relation_ids:0
msgid "Relations"
msgstr "Beziehungen"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr "Art der Beziehung"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Right Partner"
msgstr "Rechter Partner"
#. module: partner_multi_relation
#: field:res.partner.relation,right_contact_type:0
msgid "Right Partner Type"
msgstr "Art des rechten Partners"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr "Kategorie des rechten Partners"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr "Art des rechten Partners"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr "Rechter Zweig der Beziehung"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr "Suche in Beziehungen"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr "Zeige Beziehungen des Partners"
#. module: partner_multi_relation
#: model:ir.actions.server,name:partner_multi_relation.action_show_right_relation_partners
msgid "Show partners"
msgstr "Zeige Partner"
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr "Partnerentstehung"
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr "Anfangsdatum"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:287
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr "Der %s Partner ist für diese Beziehungsart nicht geeignet."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:254
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr "Das Anfangsdatum darf nicht nach dem Enddatum liegen."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:329
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr "Es gibt bereits eine ähnliche Beziehung mit überlappenden Daten"
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation,type_selection_id:0
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr "Art"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:122
#, python-format
msgid "Unsupported search operand \"%s\""
msgstr "Nicht unterstützter Such-Operand \"%s\""

432
i18n/es.po

@ -0,0 +1,432 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
# Translators:
# Iván Todorovich <ivan.todorovich@gmail.com>, 2015
# Oihane Crucelaegui <oihanecruce@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: partner-contact (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-07-25 11:58+0000\n"
"PO-Revision-Date: 2016-07-14 09:06+0000\n"
"Last-Translator: Oihane Crucelaegui <oihanecruce@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n"
" </p>\n"
" "
msgstr "<p class=\"oe_view_nocontent_create\">\n Registro y seguimiento de las relaciones de sus empresas. Las relaciones pueden estar vinculadas a otras empresas con un tipo de relación directa o inversamente.\n </p>\n "
#. module: partner_multi_relation
#: field:res.partner.relation,active:0 field:res.partner.relation.all,active:0
msgid "Active"
msgstr "Activo"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr "Todas (no-inversas + inversas) las relaciones entre empresas"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr "Todos los tipos de relaciones"
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr "Todas las relaciones con la empresa actual"
#. module: partner_multi_relation
#: field:res.partner.relation,allow_self:0
#: field:res.partner.relation.type,allow_self:0
msgid "Allow both sides to be the same"
msgstr "Permitir que ambos lados sean iguales"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:68
#, python-format
msgid "Company"
msgstr "Empresa"
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr "Creado por"
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr "Creado en"
#. module: partner_multi_relation
#: field:res.partner.relation.all,this_partner_id:0
msgid "Current Partner"
msgstr "Empresa actual"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
#: field:res.partner.relation.type.selection,search_partner_category_this:0
msgid "Current record's category"
msgstr "Etiqueta del registro actual"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr "Tipo de empresa del registro actual"
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr "Empresa destino"
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr "Nombre mostrado"
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr "Fecha fin"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr "Agrupar por"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr "Tiene asistente"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr "Tiene ex-empleado"
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr "Tiene una relación de tipo"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr "Tiene una relación con"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr "Tiene una relación con las empresas con la etiqueta"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr "Ha trabajado para"
#. module: partner_multi_relation
#: field:res.partner.relation,id:0 field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr "ID"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr "Nombre inverso"
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
msgid "Inverse type"
msgstr "Tipo inverso"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr "Es asistente de"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr "Es competidor de"
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr "Última modificación el"
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr "Última actualización en"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Left Partner"
msgstr "Empresa izquierda"
#. module: partner_multi_relation
#: field:res.partner.relation,left_contact_type:0
msgid "Left Partner Type"
msgstr "Tipo de empresa izquierda"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr "Etiqueta empresa izquierda"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr "Tipo de empresa izquierda"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr "Lado izquierdo de la relación"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr "Nombre"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr "Otra empresa"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr "Etiqueta del otro registro"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr "Tipo de empresa del otro registro"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation,any_partner_id:0
#: field:res.partner.relation,partner_id_display:0
msgid "Partner"
msgstr "Empresa"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.form_res_partner_relation
msgid "Partner Relation"
msgstr "Relación entre empresas"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr "Tipo de relación entre empresas"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.tree_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr "Relaciones entre empresas"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr "Tipos de relaciones entre empresas"
#. module: partner_multi_relation
#: field:res.partner.relation.all,contact_type:0
msgid "Partner Type"
msgstr "Tipo de empresa"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.form_res_partner_relation_all
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
#: view:res.partner.relation.type:partner_multi_relation.tree_res_partner_relation_type
msgid "Partner relation"
msgstr "Relación de empresa"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:301
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr "Partners cannot have a relation with themselves."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:69
#, python-format
msgid "Person"
msgstr "Contacto"
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr "Tipo de registro"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,record_type:0
msgid "Record type"
msgstr "Tipo de registro"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:370
#, python-format
msgid "Related partners"
msgstr "Empresas relacionadas"
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr "Relación"
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_id:0
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr "Tipo de relación"
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr "Relación válida"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
#: field:res.partner,relation_ids:0
msgid "Relations"
msgstr "Relaciones"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr "Tipo de relación"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Right Partner"
msgstr "Empresa derecha"
#. module: partner_multi_relation
#: field:res.partner.relation,right_contact_type:0
msgid "Right Partner Type"
msgstr "Tipo de empresa derecha"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr "Etiqueta empresa derecha"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr "Tipo empresa derecha"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr "Lado derecho de la relación"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr "Buscar relaciones"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr "Mostrar la relaiones de la empresa"
#. module: partner_multi_relation
#: model:ir.actions.server,name:partner_multi_relation.action_show_right_relation_partners
msgid "Show partners"
msgstr "Mostrar empresas"
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr "Empresa origen"
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr "Fecha inicio"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:287
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr "La empresa %s no aplica para este tipo de relación"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:254
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr "La fecha de inicio no puede ser posterior a la fecha de fin."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:329
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr "Hay una relación similar que se solapa en fechas"
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation,type_selection_id:0
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr "Tipo"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:122
#, python-format
msgid "Unsupported search operand \"%s\""
msgstr "Operando de búsqueda no soportado: \"%s\""

430
i18n/fi.po

@ -0,0 +1,430 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: partner-contact (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-07 07:18+0000\n"
"PO-Revision-Date: 2016-05-06 15:15+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: Finnish (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/fi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: fi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n"
" </p>\n"
" "
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,active:0 field:res.partner.relation.all,active:0
msgid "Active"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,allow_self:0
#: field:res.partner.relation.type,allow_self:0
msgid "Allow both sides to be the same"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:68
#, python-format
msgid "Company"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr "Luonut"
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr "Luotu"
#. module: partner_multi_relation
#: field:res.partner.relation.all,this_partner_id:0
msgid "Current Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
#: field:res.partner.relation.type.selection,search_partner_category_this:0
msgid "Current record's category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,id:0 field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr "ID"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr ""
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
msgid "Inverse type"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr "Viimeksi päivitetty"
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr "Viimeksi päivittänyt"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Left Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,left_contact_type:0
msgid "Left Partner Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr "Nimi"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation,any_partner_id:0
#: field:res.partner.relation,partner_id_display:0
msgid "Partner"
msgstr "Kumppani"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.form_res_partner_relation
msgid "Partner Relation"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.tree_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,contact_type:0
msgid "Partner Type"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.form_res_partner_relation_all
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
#: view:res.partner.relation.type:partner_multi_relation.tree_res_partner_relation_type
msgid "Partner relation"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:301
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:69
#, python-format
msgid "Person"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,record_type:0
msgid "Record type"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:370
#, python-format
msgid "Related partners"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_id:0
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
#: field:res.partner,relation_ids:0
msgid "Relations"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Right Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,right_contact_type:0
msgid "Right Partner Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.server,name:partner_multi_relation.action_show_right_relation_partners
msgid "Show partners"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:287
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:254
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:329
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation,type_selection_id:0
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:122
#, python-format
msgid "Unsupported search operand \"%s\""
msgstr ""

433
i18n/fr.po

@ -0,0 +1,433 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
# Translators:
# Bruno JOLIVEAU, 2015
# Bruno JOLIVEAU, 2015
# Etienne Ferriere <etienne.ferriere@xcg-consulting.fr>, 2016
msgid ""
msgstr ""
"Project-Id-Version: partner-contact (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-07 07:18+0000\n"
"PO-Revision-Date: 2016-05-06 15:15+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: French (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n"
" </p>\n"
" "
msgstr "<p class=\"oe_view_nocontent_create\">\n Enregistrer et suivre les relations de vos partenaires. Les relations peuvent être liés avec d'autre partenaires avec un type, soit directement ou inversement.\n </p>\n "
#. module: partner_multi_relation
#: field:res.partner.relation,active:0 field:res.partner.relation.all,active:0
msgid "Active"
msgstr "Actif"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr "Tous les relations (non-inverse et inverse) entre partenaires"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr "Tous types de relations"
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr "Tous les relations avec le partenaire courant"
#. module: partner_multi_relation
#: field:res.partner.relation,allow_self:0
#: field:res.partner.relation.type,allow_self:0
msgid "Allow both sides to be the same"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:68
#, python-format
msgid "Company"
msgstr "Société"
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr "Créé par"
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr "Créé le"
#. module: partner_multi_relation
#: field:res.partner.relation.all,this_partner_id:0
msgid "Current Partner"
msgstr "Partenaire courant"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
#: field:res.partner.relation.type.selection,search_partner_category_this:0
msgid "Current record's category"
msgstr "Catégorie de l'enregistrement courante"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr "Type de partenaire de l'enregistrement courrant"
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr "Partenaire destinataire"
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr "Date de fin"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr "Regrouper par"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr "A une relation de type"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr "A une relation avec"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr "A une relation avec un partenaire dans la catégorie"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,id:0 field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr "Id"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr "Nom inverse"
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
msgid "Inverse type"
msgstr "Type inverse"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr "Dernière modification par"
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr "Dernière mise à jour le"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Left Partner"
msgstr "Partenaire de gauche"
#. module: partner_multi_relation
#: field:res.partner.relation,left_contact_type:0
msgid "Left Partner Type"
msgstr "Type de partenaire de gauche"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr "Catégorie du partenaire de gauche"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr "Type de partenaire de gauche"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr "Côté gauche de la relation"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr "Nom"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr "L'autre partenaire"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr "La catégorie de l'enregistrement de gauche"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr "Le type de l'enregistrement de gauche"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation,any_partner_id:0
#: field:res.partner.relation,partner_id_display:0
msgid "Partner"
msgstr "Partenaire"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.form_res_partner_relation
msgid "Partner Relation"
msgstr "Relation du partenaire"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr "Type de relation de partenaire"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.tree_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr "Relations du partenaire"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr "Types de relation de partenaire"
#. module: partner_multi_relation
#: field:res.partner.relation.all,contact_type:0
msgid "Partner Type"
msgstr "Type de partenaire"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.form_res_partner_relation_all
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
#: view:res.partner.relation.type:partner_multi_relation.tree_res_partner_relation_type
msgid "Partner relation"
msgstr "Relation du partenaire"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:301
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr "Un partenaire ne peut pas avoir une relation avec soi-même."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:69
#, python-format
msgid "Person"
msgstr "Personne"
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr "Type d'enregistrement"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,record_type:0
msgid "Record type"
msgstr "Type d'enregistrement"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:370
#, python-format
msgid "Related partners"
msgstr "Partenaires liés"
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr "Relation"
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_id:0
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr "Type de relation"
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr "Relation valide"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
#: field:res.partner,relation_ids:0
msgid "Relations"
msgstr "Relations"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr "Type de relation"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Right Partner"
msgstr "Partenaire de droite"
#. module: partner_multi_relation
#: field:res.partner.relation,right_contact_type:0
msgid "Right Partner Type"
msgstr "Type du partenaire de droite"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr "Catégorie du partenaire de droite"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr "Type du partenaire de droite"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr "Côté droite de la relation"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr "Rechercher les relations"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr "Montrer les relations du partenaire"
#. module: partner_multi_relation
#: model:ir.actions.server,name:partner_multi_relation.action_show_right_relation_partners
msgid "Show partners"
msgstr "Montrer les partenaires"
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr "Partenaire source"
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr "Date de début"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:287
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr "Le partenaire %s n'es pas applicable pour cette type de relation."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:254
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr "La date de début ne peut pas être après la date de fin."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:329
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr "Il existe des dates en conflit des relations similaires."
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation,type_selection_id:0
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr "Type"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:122
#, python-format
msgid "Unsupported search operand \"%s\""
msgstr "Opérateur de recherche non-supporté « %s »"

432
i18n/it.po

@ -0,0 +1,432 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
# Translators:
# Paolo Valier, 2016
# Paolo Valier, 2016
msgid ""
msgstr ""
"Project-Id-Version: partner-contact (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-07 07:18+0000\n"
"PO-Revision-Date: 2016-05-06 15:15+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: Italian (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n"
" </p>\n"
" "
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,active:0 field:res.partner.relation.all,active:0
msgid "Active"
msgstr "Attivo"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,allow_self:0
#: field:res.partner.relation.type,allow_self:0
msgid "Allow both sides to be the same"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:68
#, python-format
msgid "Company"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr "Creato da"
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr "reato il"
#. module: partner_multi_relation
#: field:res.partner.relation.all,this_partner_id:0
msgid "Current Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
#: field:res.partner.relation.type.selection,search_partner_category_this:0
msgid "Current record's category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr "Raggruppa per"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,id:0 field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr "ID"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr ""
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
msgid "Inverse type"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Left Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,left_contact_type:0
msgid "Left Partner Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr "Nome"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation,any_partner_id:0
#: field:res.partner.relation,partner_id_display:0
msgid "Partner"
msgstr "Partner"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.form_res_partner_relation
msgid "Partner Relation"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.tree_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,contact_type:0
msgid "Partner Type"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.form_res_partner_relation_all
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
#: view:res.partner.relation.type:partner_multi_relation.tree_res_partner_relation_type
msgid "Partner relation"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:301
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:69
#, python-format
msgid "Person"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,record_type:0
msgid "Record type"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:370
#, python-format
msgid "Related partners"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_id:0
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
#: field:res.partner,relation_ids:0
msgid "Relations"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Right Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,right_contact_type:0
msgid "Right Partner Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.server,name:partner_multi_relation.action_show_right_relation_partners
msgid "Show partners"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:287
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:254
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:329
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation,type_selection_id:0
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:122
#, python-format
msgid "Unsupported search operand \"%s\""
msgstr ""

549
i18n/nl.po

@ -0,0 +1,549 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: partner-contact (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-02 12:39+0000\n"
"PO-Revision-Date: 2016-09-02 15:03+0200\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: Dutch (http://www.transifex.com/oca/OCA-partner-contact-8-0/"
"language/nl/)\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 2.91.6\n"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:178
#, python-format
msgid "%s partner incompatible with relation type."
msgstr "%s relatie is onverenigbaar met gekozen connectietype."
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations "
"may\n"
" be linked to other partners with a type either directly\n"
" or inversely.\n"
" </p>\n"
" "
msgstr ""
"<p class=\"oe_view_nocontent_create\">\n"
"Onderhoud de connecties tussen uw relaties. Relaties mogen gekoppeld\n"
"worden zowel via een normale connectie, als met een omgekeerde\n"
"connectie.</p>"
#. module: partner_multi_relation
#: field:res.partner.relation.all,active:0
msgid "Active"
msgstr "Actief"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr "Alle connecties tussen relaties (gewoon en omgekeerd)."
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr "Alle connectietypes"
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr "Alle connecties vanuit de huidige relatie"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:13
#: selection:res.partner.relation.type,handle_invalid_onchange:0
#, python-format
msgid "Allow existing relations that do not fit changed conditions"
msgstr ""
"Sta bestaande connecties toe die niet voldoen aan de gewijzigde criteria"
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr "Aangemaakt door"
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr "Aangemaakt op"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
msgid "Current record's category"
msgstr "Categorie van het huidige record"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr "Type van de huidige relatie"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:17
#: selection:res.partner.relation.type,handle_invalid_onchange:0
#, python-format
msgid "Delete relations that do not fit changed conditions"
msgstr "Verwijder connecties die niet voldoen aan de gewijzigde condities"
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr "Doel relatie"
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr "Te tonen naam"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:11
#: selection:res.partner.relation.type,handle_invalid_onchange:0
#, python-format
msgid "Do not allow change that will result in invalid relations"
msgstr "Sta geen wijziging toe die zal resulteren in ongeldige connecties"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:15
#: selection:res.partner.relation.type,handle_invalid_onchange:0
#, python-format
msgid "End relations per today, if they do not fit changed conditions"
msgstr ""
"Beëindig wijzigingen per vandaag indien ze niet voldoen aan de gewijzigde "
"condities"
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr "Einddatum"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:184
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:259
#, python-format
msgid "Error!"
msgstr "Fout!"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr "Groepeer op"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr "Heeft assistent"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr "Heeft voormalig werknemer"
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr "heeft connectie van type"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr "Heeft connectie met"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr "Heeft connectie met een relatie in de categorie"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr "Heeft gewerkt voor"
#. module: partner_multi_relation
#: field:res.partner.relation,id:0 field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr "ID"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Include past records"
msgstr "Inclusief beëindigde connecties"
#. module: partner_multi_relation
#: field:res.partner.relation.type,handle_invalid_onchange:0
msgid "Invalid relation handling"
msgstr "Afhandeling van ongeldige connecties"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr "Omgekeerde naam"
#. module: partner_multi_relation
#: help:res.partner.relation.type.selection,is_inverse:0
msgid "Inverse relations are from right to left partner."
msgstr "Omgekeerde connecties zijn vanaf de rechter relatie naar de linker."
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr "Is assistent van"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr "Is concurrent van"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,is_inverse:0
msgid "Is reverse type?"
msgstr "Is omgekeerd type?"
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr "Laatst bijgewerkt op"
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr "Laatst bijgewerkt door"
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr "Laatst bijgewerkt op"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr "Categorie linkerrelatie"
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
msgid "Left partner to right partner"
msgstr "Van linker naar rechterrelatie"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr "Type linkerrelatie"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr "Linkerkant van relatie"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Left to right"
msgstr "Links naar rechts"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr "Naam"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:181
#, python-format
msgid "No %s partner available for relation type."
msgstr "Geen %s relatie beschikbaar voor dit connectietype."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:256
#, python-format
msgid "No relation type available for selected partners."
msgstr "Geen connectietype beschikbaar voor verbinden van deze relaties."
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,this_partner_id:0
msgid "One Partner"
msgstr "De ene relatie"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:82
#, python-format
msgid "Organisation"
msgstr "Organisatie"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr "De andere relatie"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr "Categorie andere relatie"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr "Type andere relatie"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation.all,any_partner_id:0
msgid "Partner"
msgstr "Relatie"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr "Type connectie"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr "Connecties"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr "Connectietypes"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
msgid "Partner relation"
msgstr "Connectie"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:115
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr "Relaties kunnen geen connectie met zichzelf hebben"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:83
#, python-format
msgid "Person"
msgstr "Persoon"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Properties"
msgstr "Eigenschappen"
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr "Recordtype"
#. module: partner_multi_relation
#: help:res.partner.relation.all,active:0
msgid "Records with date_end in the past are inactive"
msgstr "Connecties met een datum in het verleden zijn inactief"
#. module: partner_multi_relation
#: field:res.partner.relation.type,allow_self:0
#: field:res.partner.relation.type.selection,allow_self:0
msgid "Reflexive"
msgstr "Wederkerig"
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr "Connectie"
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr "Aantal connecties"
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr "Type connectie"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:252
#, python-format
msgid "Relation type incompatible with selected partner(s)."
msgstr "Type connectie komt niet overeen met geselecteerde relatie(s)."
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr "Geldige connectie"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
msgid "Relations"
msgstr "Connecties"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr "Type connectie"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr "Categorie rechterrelatie"
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
msgid "Right partner to left partner"
msgstr "Rechter naar linkerrelatie"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr "Type rechterrelatie"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr "Rechterkant van de connectie"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Right to left"
msgstr "Rechts naar links"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr "Zoek connecties"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr "Toon connecties van relatie"
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr "Bron relatie"
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr "Datum ingang"
#. module: partner_multi_relation
#: field:res.partner.relation.type,is_symmetric:0
#: field:res.partner.relation.type.selection,is_symmetric:0
msgid "Symmetric"
msgstr "Symmetrisch"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:101
#, fuzzy, python-format
msgid "The %s partner does not have category %s."
msgstr "De %s relatie is niet geldig voor dit type connectie."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:95
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr "De %s relatie is niet geldig voor dit type connectie."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:61
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr "De ingangsdatum kan niet na de einddatum liggen."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:168
#, python-format
msgid ""
"There are already relations not satisfying the conditions for partner type "
"or category."
msgstr ""
"Er zijn al connecties die niet voldoen aan de criteria voor type relatie of "
"categorie."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:154
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr "Er is al een gelijkaardige connectie met overlappende geldigheid"
#. module: partner_multi_relation
#: help:res.partner.relation.type,allow_self:0
msgid "This relation can be set up with the same partner left and right"
msgstr "Deze connectie kan een relatie met zichzelf verbinden"
#. module: partner_multi_relation
#: help:res.partner.relation.type,is_symmetric:0
msgid "This relation is the same from right to left as from left to right"
msgstr ""
"Deze connectie is van rechts naar links hetzelfde als van links naar rechts"
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr "Type"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:80
#: code:addons/partner_multi_relation/models/res_partner.py:121
#, python-format
msgid "Unsupported search operator \"%s\""
msgstr "Zoek operator \"%s\" wordt niet ondersteund "
#. module: partner_multi_relation
#: help:res.partner.relation.type,handle_invalid_onchange:0
msgid ""
"When adding relations criteria like partner type and category are checked.\n"
"However when you change the criteria, there might be relations that do not "
"fit the new criteria.\n"
"Specify how this situation should be handled."
msgstr ""
"Bij het aanmaken van connecties vinden controles plaats op type en categorie "
"van de relatie.\n"
"Echter, wanneer u de criteria verandert, dan kunnen er al connecties bestaan "
"die daar niet aan voldoen.\n"
"Geef aan hoe zo'n situatie moet worden afgehandeld. "
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:221
#, python-format
msgid "other"
msgstr "andere"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:215
#, python-format
msgid "this"
msgstr "deze"
#~ msgid "Company"
#~ msgstr "Bedrijf"

521
i18n/partner_multi_relation.pot

@ -0,0 +1,521 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-02 12:39+0000\n"
"PO-Revision-Date: 2016-09-02 12:39+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: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:178
#, python-format
msgid "%s partner incompatible with relation type."
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid "<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations may\n"
" be linked to other partners with a type either directly\n"
" or inversely.\n"
" </p>\n"
" "
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,active:0
msgid "Active"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:13
#: selection:res.partner.relation.type,handle_invalid_onchange:0
#, python-format
msgid "Allow existing relations that do not fit changed conditions"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
msgid "Current record's category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:17
#: selection:res.partner.relation.type,handle_invalid_onchange:0
#, python-format
msgid "Delete relations that do not fit changed conditions"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:11
#: selection:res.partner.relation.type,handle_invalid_onchange:0
#, python-format
msgid "Do not allow change that will result in invalid relations"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:15
#: selection:res.partner.relation.type,handle_invalid_onchange:0
#, python-format
msgid "End relations per today, if they do not fit changed conditions"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:184
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:259
#, python-format
msgid "Error!"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,id:0
#: field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Include past records"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,handle_invalid_onchange:0
msgid "Invalid relation handling"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr ""
#. module: partner_multi_relation
#: help:res.partner.relation.type.selection,is_inverse:0
msgid "Inverse relations are from right to left partner."
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr ""
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,is_inverse:0
msgid "Is reverse type?"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr ""
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
msgid "Left partner to right partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Left to right"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:181
#, python-format
msgid "No %s partner available for relation type."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:256
#, python-format
msgid "No relation type available for selected partners."
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,this_partner_id:0
msgid "One Partner"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:82
#, python-format
msgid "Organisation"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation.all,any_partner_id:0
msgid "Partner"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr ""
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
msgid "Partner relation"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:115
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:83
#, python-format
msgid "Person"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Properties"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr ""
#. module: partner_multi_relation
#: help:res.partner.relation.all,active:0
msgid "Records with date_end in the past are inactive"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,allow_self:0
#: field:res.partner.relation.type.selection,allow_self:0
msgid "Reflexive"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:252
#, python-format
msgid "Relation type incompatible with selected partner(s)."
msgstr ""
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
msgid "Relations"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr ""
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
msgid "Right partner to left partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Right to left"
msgstr ""
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr ""
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.type,is_symmetric:0
#: field:res.partner.relation.type.selection,is_symmetric:0
msgid "Symmetric"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:101
#, python-format
msgid "The %s partner does not have category %s."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:95
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:61
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:168
#, python-format
msgid "There are already relations not satisfying the conditions for partner type or category."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:154
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr ""
#. module: partner_multi_relation
#: help:res.partner.relation.type,allow_self:0
msgid "This relation can be set up with the same partner left and right"
msgstr ""
#. module: partner_multi_relation
#: help:res.partner.relation.type,is_symmetric:0
msgid "This relation is the same from right to left as from left to right"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:80
#: code:addons/partner_multi_relation/models/res_partner.py:121
#, python-format
msgid "Unsupported search operator \"%s\""
msgstr ""
#. module: partner_multi_relation
#: help:res.partner.relation.type,handle_invalid_onchange:0
msgid "When adding relations criteria like partner type and category are checked.\n"
"However when you change the criteria, there might be relations that do not fit the new criteria.\n"
"Specify how this situation should be handled."
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:221
#, python-format
msgid "other"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_all.py:215
#, python-format
msgid "this"
msgstr ""

432
i18n/pt_BR.po

@ -0,0 +1,432 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
# Translators:
# danimaribeiro <danimaribeiro@gmail.com>, 2015
# danimaribeiro <danimaribeiro@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: partner-contact (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-07 07:18+0000\n"
"PO-Revision-Date: 2016-05-06 15:15+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n"
" </p>\n"
" "
msgstr "<p class=\"oe_view_nocontent_create\">\nRegistre e mantenha registro das relações entre seus parceiros. Relações podem ser\nligações para outros parceiros com um tipo específico, tanto diretamente ou o inverso.\n</p>"
#. module: partner_multi_relation
#: field:res.partner.relation,active:0 field:res.partner.relation.all,active:0
msgid "Active"
msgstr "Ativo"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr "Todas (inversas e não-inversas) relações entre parceiros"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr "Todos os tipos de relação"
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr "Todos os relacionamentos com o parceiro atual"
#. module: partner_multi_relation
#: field:res.partner.relation,allow_self:0
#: field:res.partner.relation.type,allow_self:0
msgid "Allow both sides to be the same"
msgstr ""
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:68
#, python-format
msgid "Company"
msgstr "Empresa"
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr "Criado por"
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr "Criado em"
#. module: partner_multi_relation
#: field:res.partner.relation.all,this_partner_id:0
msgid "Current Partner"
msgstr "Parceiro atual"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
#: field:res.partner.relation.type.selection,search_partner_category_this:0
msgid "Current record's category"
msgstr "Categoria do registro atual"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr "Tipo do parceiro registro atual"
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr "Parceiro de destino"
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr "Data fina"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr "Agrupar por"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr "Tem assistente"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr "Tem ex-empregado"
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr "Tem relação do tipo"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr "Tem relação com"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr "Tem relação com um parceiro na categoria"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr "Trabalhou para"
#. module: partner_multi_relation
#: field:res.partner.relation,id:0 field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr "ID"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr "Nome inverso"
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
msgid "Inverse type"
msgstr "Tipo inverso"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr "É assistente de "
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr "É competidor de"
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr "Útima atualização por"
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr "Útima atualização em"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Left Partner"
msgstr "Parceiro da esquerda"
#. module: partner_multi_relation
#: field:res.partner.relation,left_contact_type:0
msgid "Left Partner Type"
msgstr "Tipo parceiro da esquerda"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr "Categoria do parceiro da esquerda"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr "Tipo parceiro da esquerda"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr "Lado esquerdo da relação"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr "Nome"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr "Outro parceiro"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr "Outra categoria de registro"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr "Outro tipo de registro de parceiro"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation,any_partner_id:0
#: field:res.partner.relation,partner_id_display:0
msgid "Partner"
msgstr "Parceiro"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.form_res_partner_relation
msgid "Partner Relation"
msgstr "Relacãos entre parceiros"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr "Tipo de relação entre parceiros"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.tree_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr "Relacão entre parceiros"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr "Tipo de relação entre parceiros"
#. module: partner_multi_relation
#: field:res.partner.relation.all,contact_type:0
msgid "Partner Type"
msgstr "Tipo de parceiro"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.form_res_partner_relation_all
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
#: view:res.partner.relation.type:partner_multi_relation.tree_res_partner_relation_type
msgid "Partner relation"
msgstr "Relação parceiro"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:301
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr "Parceiros não podem ter relacionamentos com ele mesmo."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:69
#, python-format
msgid "Person"
msgstr "Pessoa"
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr "Tipo de Registro"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,record_type:0
msgid "Record type"
msgstr "Tipo de registro"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:370
#, python-format
msgid "Related partners"
msgstr "Parceiros relacionados"
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr "Relação"
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr ""
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_id:0
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr "Tipo de relação"
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr "Relação válida"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
#: field:res.partner,relation_ids:0
msgid "Relations"
msgstr "Relações"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr "Tipo de relacionamento"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Right Partner"
msgstr "Parceiro da direita"
#. module: partner_multi_relation
#: field:res.partner.relation,right_contact_type:0
msgid "Right Partner Type"
msgstr "Tipo de parceiro da direita"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr "Categoria do parceiro da direita"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr "Tipo de parceiro da direita"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr "Lado direito da relação"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr "Buscar relações"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr "Mostrar relações do parceiro"
#. module: partner_multi_relation
#: model:ir.actions.server,name:partner_multi_relation.action_show_right_relation_partners
msgid "Show partners"
msgstr "Mostrar parceiros"
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr "Parceiro de origem"
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr "Data de inicio"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:287
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr "O parceiro %s não é aplicavel a este tipo de relação."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:254
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr "A data de inicio não pode ser após a data de fim."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:329
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr "Já existe uma relação similar com datas incompativeis."
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation,type_selection_id:0
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr "Tipo"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:122
#, python-format
msgid "Unsupported search operand \"%s\""
msgstr "Operador de busca não suportado \"%s\""

431
i18n/sl.po

@ -0,0 +1,431 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_multi_relation
#
# Translators:
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: partner-contact (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-07 07:18+0000\n"
"PO-Revision-Date: 2016-05-07 07:16+0000\n"
"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>\n"
"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
#. module: partner_multi_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,help:partner_multi_relation.action_res_partner_relation_all
msgid ""
"<p class=\"oe_view_nocontent_create\">\n"
" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n"
" </p>\n"
" "
msgstr "<p class=\"oe_view_nocontent_create\">\n Beležite in sledite odnosom med partnerji. Odnosi se lahko povezani s partnerji direktno ali inverzno.\n </p>\n "
#. module: partner_multi_relation
#: field:res.partner.relation,active:0 field:res.partner.relation.all,active:0
msgid "Active"
msgstr "Aktivno"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_all
msgid "All (non-inverse + inverse) relations between partners"
msgstr "Vsi (ne inverzni in inverzni) odnosi med partnerji"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type_selection
msgid "All relation types"
msgstr "Vsi tipi odnosov"
#. module: partner_multi_relation
#: field:res.partner,relation_all_ids:0
msgid "All relations with current partner"
msgstr "Vsi odnosi s trenutnim partnerjem"
#. module: partner_multi_relation
#: field:res.partner.relation,allow_self:0
#: field:res.partner.relation.type,allow_self:0
msgid "Allow both sides to be the same"
msgstr "Dovoli, da sta obe strani enaki"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:68
#, python-format
msgid "Company"
msgstr "Družba"
#. module: partner_multi_relation
#: field:res.partner.relation,create_uid:0
#: field:res.partner.relation.type,create_uid:0
msgid "Created by"
msgstr "Ustvaril"
#. module: partner_multi_relation
#: field:res.partner.relation,create_date:0
#: field:res.partner.relation.type,create_date:0
msgid "Created on"
msgstr "Ustvarjeno"
#. module: partner_multi_relation
#: field:res.partner.relation.all,this_partner_id:0
msgid "Current Partner"
msgstr "Trenutni partner"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_this:0
#: field:res.partner.relation.type.selection,search_partner_category_this:0
msgid "Current record's category"
msgstr "Kategorija trenutnega zapisa"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_this:0
msgid "Current record's partner type"
msgstr "Tip partnerja na trenutnem zapisu"
#. module: partner_multi_relation
#: field:res.partner.relation,right_partner_id:0
msgid "Destination Partner"
msgstr "Ciljni partner"
#. module: partner_multi_relation
#: field:res.partner.relation,display_name:0
#: field:res.partner.relation.all,display_name:0
#: field:res.partner.relation.type,display_name:0
#: field:res.partner.relation.type.selection,display_name:0
msgid "Display Name"
msgstr "Prikazni naziv"
#. module: partner_multi_relation
#: field:res.partner.relation,date_end:0
#: field:res.partner.relation.all,date_end:0
msgid "Ending date"
msgstr "Končni datum"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Group By"
msgstr "Združi po"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_assistant
msgid "Has assistant"
msgstr "Ima asistenta"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_has_worked_for
msgid "Has former employee"
msgstr "Ima bivšega zaposlenega"
#. module: partner_multi_relation
#: field:res.partner,search_relation_type_id:0
msgid "Has relation of type"
msgstr "Ima odnos tipa"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_id:0
msgid "Has relation with"
msgstr "Je v odnosu z"
#. module: partner_multi_relation
#: field:res.partner,search_relation_partner_category_id:0
msgid "Has relation with a partner in category"
msgstr "Je v odnosu s partnerjem kategorije"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_has_worked_for
msgid "Has worked for"
msgstr "Je delal za"
#. module: partner_multi_relation
#: field:res.partner.relation,id:0 field:res.partner.relation.all,id:0
#: field:res.partner.relation.type,id:0
#: field:res.partner.relation.type.selection,id:0
msgid "ID"
msgstr "ID"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name_inverse:0
msgid "Inverse name"
msgstr "Inverzni naziv"
#. module: partner_multi_relation
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
msgid "Inverse type"
msgstr "Inverzni tip"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_assistant
msgid "Is assistant of"
msgstr "Je asistent"
#. module: partner_multi_relation
#: model:res.partner.relation.type,name:partner_multi_relation.rel_type_competitor
#: model:res.partner.relation.type,name_inverse:partner_multi_relation.rel_type_competitor
msgid "Is competitor of"
msgstr "Je konkurent"
#. module: partner_multi_relation
#: field:res.partner.relation,__last_update:0
#: field:res.partner.relation.all,__last_update:0
#: field:res.partner.relation.type,__last_update:0
#: field:res.partner.relation.type.selection,__last_update:0
msgid "Last Modified on"
msgstr "Zadnjič spremenjeno"
#. module: partner_multi_relation
#: field:res.partner.relation,write_uid:0
#: field:res.partner.relation.type,write_uid:0
msgid "Last Updated by"
msgstr "Zadnji posodobil"
#. module: partner_multi_relation
#: field:res.partner.relation,write_date:0
#: field:res.partner.relation.type,write_date:0
msgid "Last Updated on"
msgstr "Zadnjič posodobljeno"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Left Partner"
msgstr "Levi partner"
#. module: partner_multi_relation
#: field:res.partner.relation,left_contact_type:0
msgid "Left Partner Type"
msgstr "Tip levega partnerja"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_left:0
msgid "Left partner category"
msgstr "Kategorija levega partnerja"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_left:0
msgid "Left partner type"
msgstr "Tip levega partnerja"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Left side of relation"
msgstr "Leva stran odnosa"
#. module: partner_multi_relation
#: field:res.partner.relation.type,name:0
#: field:res.partner.relation.type.selection,name:0
msgid "Name"
msgstr "Naziv"
#. module: partner_multi_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
#: field:res.partner.relation.all,other_partner_id:0
msgid "Other Partner"
msgstr "Drugi partner"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,partner_category_other:0
msgid "Other record's category"
msgstr "Kategorija drugega zapisa"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,contact_type_other:0
msgid "Other record's partner type"
msgstr "Tip partnerja drugega zapisa"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner
#: field:res.partner.relation,any_partner_id:0
#: field:res.partner.relation,partner_id_display:0
msgid "Partner"
msgstr "Partner"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.form_res_partner_relation
msgid "Partner Relation"
msgstr "Partnerski odnos"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation_type
msgid "Partner Relation Type"
msgstr "Tip partnerskega odnosa"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.tree_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.tree_res_partner_relation_all
msgid "Partner Relations"
msgstr "Partnerski odnosi"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_type
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_type
msgid "Partner Relations Types"
msgstr "Tipi partnerskih odnosov"
#. module: partner_multi_relation
#: field:res.partner.relation.all,contact_type:0
msgid "Partner Type"
msgstr "Tip partnerja"
#. module: partner_multi_relation
#: model:ir.model,name:partner_multi_relation.model_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.form_res_partner_relation_all
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
#: view:res.partner.relation.type:partner_multi_relation.tree_res_partner_relation_type
msgid "Partner relation"
msgstr "Partnerski odnos"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:301
#, python-format
msgid "Partners cannot have a relation with themselves."
msgstr "Partnerji ne morejo biti v odnosu sami s seboj."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation_type.py:69
#, python-format
msgid "Person"
msgstr "Oseba"
#. module: partner_multi_relation
#: field:res.partner.relation.all,record_type:0
msgid "Record Type"
msgstr "Tip zapisa"
#. module: partner_multi_relation
#: field:res.partner.relation.type.selection,record_type:0
msgid "Record type"
msgstr "Tip zapisa"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:370
#, python-format
msgid "Related partners"
msgstr "Povezani partnerji"
#. module: partner_multi_relation
#: field:res.partner.relation.all,relation_id:0
msgid "Relation"
msgstr "Odnos"
#. module: partner_multi_relation
#: field:res.partner,relation_count:0
msgid "Relation Count"
msgstr "Števec relacij"
#. module: partner_multi_relation
#: field:res.partner.relation.all,type_id:0
#: field:res.partner.relation.all,type_selection_id:0
msgid "Relation Type"
msgstr "Tip odnosa"
#. module: partner_multi_relation
#: field:res.partner,search_relation_date:0
msgid "Relation valid"
msgstr "Odnos veljaven"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_res_partner_relation_all
#: model:ir.ui.menu,name:partner_multi_relation.menu_res_partner_relation_sales
#: view:res.partner:partner_multi_relation.view_partner_form
#: field:res.partner,relation_ids:0
msgid "Relations"
msgstr "Odnosi"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Relationship Type"
msgstr "Tip odnosa"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
msgid "Right Partner"
msgstr "Desni partner"
#. module: partner_multi_relation
#: field:res.partner.relation,right_contact_type:0
msgid "Right Partner Type"
msgstr "Tip desnega partnerja"
#. module: partner_multi_relation
#: field:res.partner.relation.type,partner_category_right:0
msgid "Right partner category"
msgstr "Kategorija desnega partnerja"
#. module: partner_multi_relation
#: field:res.partner.relation.type,contact_type_right:0
msgid "Right partner type"
msgstr "Tip desnega partnerja"
#. module: partner_multi_relation
#: view:res.partner.relation.type:partner_multi_relation.form_res_partner_relation_type
msgid "Right side of relation"
msgstr "Desna stran odnosa"
#. module: partner_multi_relation
#: view:res.partner.relation:partner_multi_relation.search_res_partner_relation
#: view:res.partner.relation.all:partner_multi_relation.search_res_partner_relation_all
msgid "Search Relations"
msgstr "Iskanje odnosov"
#. module: partner_multi_relation
#: model:ir.actions.act_window,name:partner_multi_relation.action_show_partner_multi_relation
msgid "Show partner's relations"
msgstr "Prikaz odnosov partnerja"
#. module: partner_multi_relation
#: model:ir.actions.server,name:partner_multi_relation.action_show_right_relation_partners
msgid "Show partners"
msgstr "Prikaz partnerjev"
#. module: partner_multi_relation
#: field:res.partner.relation,left_partner_id:0
msgid "Source Partner"
msgstr "Izvorni partner"
#. module: partner_multi_relation
#: field:res.partner.relation,date_start:0
#: field:res.partner.relation.all,date_start:0
msgid "Starting date"
msgstr "Začetni datum"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:287
#, python-format
msgid "The %s partner is not applicable for this relation type."
msgstr "Partner %s ni ustrezen za ta tip odnosa."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:254
#, python-format
msgid "The starting date cannot be after the ending date."
msgstr "Začetni datum ne more biti za končnim datumom."
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner_relation.py:329
#, python-format
msgid "There is already a similar relation with overlapping dates"
msgstr "Podoben odnos s prekrivajočimi se datumi že obstaja."
#. module: partner_multi_relation
#: field:res.partner.relation,type_id:0
#: field:res.partner.relation,type_selection_id:0
#: selection:res.partner.relation.all,record_type:0
#: selection:res.partner.relation.type.selection,record_type:0
#: field:res.partner.relation.type.selection,type_id:0
msgid "Type"
msgstr "Tip"
#. module: partner_multi_relation
#: code:addons/partner_multi_relation/models/res_partner.py:122
#, python-format
msgid "Unsupported search operand \"%s\""
msgstr "Nepodprt iskalni operand \"%s\""

8
models/__init__.py

@ -0,0 +1,8 @@
# -*- coding: utf-8 -*-
# © 2013-2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import res_partner
from . import res_partner_relation
from . import res_partner_relation_type
from . import res_partner_relation_all
from . import res_partner_relation_type_selection

172
models/res_partner.py

@ -0,0 +1,172 @@
# -*- coding: utf-8 -*-
# © 2013-2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
"""Support connections between partners."""
import numbers
from openerp import _, api, exceptions, fields, models
from openerp.osv.expression import is_leaf, OR, FALSE_LEAF
class ResPartner(models.Model):
"""Extend partner with relations and allow to search for relations
in various ways.
"""
# pylint: disable=invalid-name
# pylint: disable=no-member
_inherit = 'res.partner'
relation_count = fields.Integer(
string='Relation Count',
compute="_compute_relation_count"
)
relation_all_ids = fields.One2many(
comodel_name='res.partner.relation.all',
inverse_name='this_partner_id',
string='All relations with current partner',
auto_join=True,
selectable=False,
copy=False,
)
search_relation_type_id = fields.Many2one(
comodel_name='res.partner.relation.type.selection',
compute=lambda self: None,
search='_search_relation_type_id',
string='Has relation of type',
)
search_relation_partner_id = fields.Many2one(
comodel_name='res.partner',
compute=lambda self: None,
search='_search_related_partner_id',
string='Has relation with',
)
search_relation_date = fields.Date(
compute=lambda self: None,
search='_search_relation_date',
string='Relation valid',
)
search_relation_partner_category_id = fields.Many2one(
comodel_name='res.partner.category',
compute=lambda self: None,
search='_search_related_partner_category_id',
string='Has relation with a partner in category',
)
@api.depends("relation_all_ids")
def _compute_relation_count(self):
"""Count the number of relations this partner has for Smart Button
Don't count inactive relations.
"""
for rec in self:
rec.relation_count = len(rec.relation_all_ids.filtered('active'))
@api.model
def _search_relation_type_id(self, operator, value):
"""Search partners based on their type of relations."""
result = []
SUPPORTED_OPERATORS = (
'=',
'!=',
'like',
'not like',
'ilike',
'not ilike',
'in',
'not in',
)
if operator not in SUPPORTED_OPERATORS:
raise exceptions.ValidationError(
_('Unsupported search operator "%s"') % operator)
type_selection_model = self.env['res.partner.relation.type.selection']
relation_type_selection = []
if operator == '=' and isinstance(value, numbers.Integral):
relation_type_selection += type_selection_model.browse(value)
elif operator == '!=' and isinstance(value, numbers.Integral):
relation_type_selection = type_selection_model.search([
('id', operator, value),
])
else:
relation_type_selection = type_selection_model.search([
'|',
('type_id.name', operator, value),
('type_id.name_inverse', operator, value),
])
if not relation_type_selection:
result = [FALSE_LEAF]
for relation_type in relation_type_selection:
result = OR([
result,
[
('relation_all_ids.type_selection_id.id', '=',
relation_type.id),
],
])
return result
@api.model
def _search_related_partner_id(self, operator, value):
"""Find partner based on relation with other partner."""
# pylint: disable=no-self-use
return [
('relation_all_ids.other_partner_id', operator, value),
]
@api.model
def _search_relation_date(self, operator, value):
"""Look only for relations valid at date of search."""
# pylint: disable=no-self-use
return [
'&',
'|',
('relation_all_ids.date_start', '=', False),
('relation_all_ids.date_start', '<=', value),
'|',
('relation_all_ids.date_end', '=', False),
('relation_all_ids.date_end', '>=', value),
]
@api.model
def _search_related_partner_category_id(self, operator, value):
"""Search for partner related to a partner with search category."""
# pylint: disable=no-self-use
return [
('relation_all_ids.other_partner_id.category_id', operator, value),
]
@api.model
def search(self, args, offset=0, limit=None, order=None, count=False):
"""Inject searching for current relation date if we search for
relation properties and no explicit date was given.
"""
# pylint: disable=arguments-differ
# pylint: disable=no-value-for-parameter
date_args = []
for arg in args:
if is_leaf(arg) and arg[0].startswith('search_relation'):
if arg[0] == 'search_relation_date':
date_args = []
break
if not date_args:
date_args = [
('search_relation_date', '=', fields.Date.today()),
]
# because of auto_join, we have to do the active test by hand
active_args = []
if self.env.context.get('active_test', True):
for arg in args:
if is_leaf(arg) and arg[0].startswith('search_relation'):
active_args = [('relation_all_ids.active', '=', True)]
break
return super(ResPartner, self).search(
args + date_args + active_args, offset=offset, limit=limit,
order=order, count=count)
@api.multi
def get_partner_type(self):
"""Get partner type for relation.
:return: 'c' for company or 'p' for person
:rtype: str
"""
self.ensure_one()
return 'c' if self.is_company else 'p'

156
models/res_partner_relation.py

@ -0,0 +1,156 @@
# -*- coding: utf-8 -*-
# © 2013-2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
"""Store relations (connections) between partners."""
from openerp import _, api, fields, models
from openerp.exceptions import ValidationError
class ResPartnerRelation(models.Model):
"""Model res.partner.relation is used to describe all links or relations
between partners in the database.
This model is actually only used to store the data. The model
res.partner.relation.all, based on a view that contains each record
two times, once for the normal relation, once for the inverse relation,
will be used to maintain the data.
"""
_name = 'res.partner.relation'
_description = 'Partner relation'
left_partner_id = fields.Many2one(
comodel_name='res.partner',
string='Source Partner',
required=True,
auto_join=True,
ondelete='cascade',
)
right_partner_id = fields.Many2one(
comodel_name='res.partner',
string='Destination Partner',
required=True,
auto_join=True,
ondelete='cascade',
)
type_id = fields.Many2one(
comodel_name='res.partner.relation.type',
string='Type',
required=True,
auto_join=True,
)
date_start = fields.Date('Starting date')
date_end = fields.Date('Ending date')
@api.model
def create(self, vals):
"""Override create to correct values, before being stored."""
context = self.env.context
if 'left_partner_id' not in vals and context.get('active_id'):
vals['left_partner_id'] = context.get('active_id')
return super(ResPartnerRelation, self).create(vals)
@api.one
@api.constrains('date_start', 'date_end')
def _check_dates(self):
"""End date should not be before start date, if not filled
:raises ValidationError: When constraint is violated
"""
if (self.date_start and self.date_end and
self.date_start > self.date_end):
raise ValidationError(
_('The starting date cannot be after the ending date.')
)
@api.one
@api.constrains('left_partner_id', 'type_id')
def _check_partner_left(self):
"""Check left partner for required company or person
:raises ValidationError: When constraint is violated
"""
self._check_partner("left")
@api.one
@api.constrains('right_partner_id', 'type_id')
def _check_partner_right(self):
"""Check right partner for required company or person
:raises ValidationError: When constraint is violated
"""
self._check_partner("right")
@api.one
def _check_partner(self, side):
"""Check partner for required company or person, and for category
:param str side: left or right
:raises ValidationError: When constraint is violated
"""
assert side in ['left', 'right']
ptype = getattr(self.type_id, "contact_type_%s" % side)
partner = getattr(self, '%s_partner_id' % side)
if ((ptype == 'c' and not partner.is_company) or
(ptype == 'p' and partner.is_company)):
raise ValidationError(
_('The %s partner is not applicable for this relation type.') %
side
)
category = getattr(self.type_id, "partner_category_%s" % side)
if category and category.id not in partner.category_id.ids:
raise ValidationError(
_('The %s partner does not have category %s.') %
(side, category.name)
)
@api.one
@api.constrains('left_partner_id', 'right_partner_id')
def _check_not_with_self(self):
"""Not allowed to link partner to same partner
:raises ValidationError: When constraint is violated
"""
if self.left_partner_id == self.right_partner_id:
if not (self.type_id and self.type_id.allow_self):
raise ValidationError(
_('Partners cannot have a relation with themselves.')
)
@api.one
@api.constrains(
'left_partner_id',
'type_id',
'right_partner_id',
'date_start',
'date_end',
)
def _check_relation_uniqueness(self):
"""Forbid multiple active relations of the same type between the same
partners
:raises ValidationError: When constraint is violated
"""
# pylint: disable=no-member
# pylint: disable=no-value-for-parameter
domain = [
('type_id', '=', self.type_id.id),
('id', '!=', self.id),
('left_partner_id', '=', self.left_partner_id.id),
('right_partner_id', '=', self.right_partner_id.id),
]
if self.date_start:
domain += [
'|',
('date_end', '=', False),
('date_end', '>=', self.date_start),
]
if self.date_end:
domain += [
'|',
('date_start', '=', False),
('date_start', '<=', self.date_end),
]
if self.search(domain):
raise ValidationError(
_('There is already a similar relation with overlapping dates')
)

345
models/res_partner_relation_all.py

@ -0,0 +1,345 @@
# -*- coding: utf-8 -*-
# © 2014-2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
"""Abstract model to show each relation from two sides."""
from psycopg2.extensions import AsIs
from openerp import _, api, fields, models
from openerp.tools import drop_view_if_exists
PADDING = 10
_RECORD_TYPES = [
('a', 'Left partner to right partner'),
('b', 'Right partner to left partner'),
]
class ResPartnerRelationAll(models.AbstractModel):
"""Abstract model to show each relation from two sides."""
_auto = False
_log_access = False
_name = 'res.partner.relation.all'
_description = 'All (non-inverse + inverse) relations between partners'
_order = (
'this_partner_id, type_selection_id,'
'date_end desc, date_start desc'
)
_additional_view_fields = []
"""append to this list if you added fields to res_partner_relation that
you need in this model and related fields are not adequate (ie for sorting)
You must use the same name as in res_partner_relation.
Don't overwrite this list in your declaration but append in _auto_init:
def _auto_init(self, cr, context=None):
self._additional_view_fields.append('my_field')
return super(ResPartnerRelationAll, self)._auto_init(
cr, context=context)
my_field = fields...
"""
this_partner_id = fields.Many2one(
comodel_name='res.partner',
string='One Partner',
required=True,
)
other_partner_id = fields.Many2one(
comodel_name='res.partner',
string='Other Partner',
required=True,
)
type_selection_id = fields.Many2one(
comodel_name='res.partner.relation.type.selection',
string='Relation Type',
required=True,
)
relation_id = fields.Many2one(
comodel_name='res.partner.relation',
string='Relation',
readonly=True,
)
record_type = fields.Selection(
selection=_RECORD_TYPES,
string='Record Type',
readonly=True,
)
date_start = fields.Date('Starting date')
date_end = fields.Date('Ending date')
active = fields.Boolean(
string='Active',
help="Records with date_end in the past are inactive",
)
any_partner_id = fields.Many2many(
comodel_name='res.partner',
string='Partner',
compute=lambda self: None,
search='_search_any_partner_id'
)
def _auto_init(self, cr, context=None):
drop_view_if_exists(cr, self._table)
additional_view_fields = ','.join(self._additional_view_fields)
additional_view_fields = (',' + additional_view_fields)\
if additional_view_fields else ''
cr.execute(
"""\
CREATE OR REPLACE VIEW %(table)s AS
SELECT
rel.id * %(padding)s AS id,
rel.id AS relation_id,
cast('a' AS CHAR(1)) AS record_type,
rel.left_partner_id AS this_partner_id,
rel.right_partner_id AS other_partner_id,
rel.date_start,
rel.date_end,
(rel.date_end IS NULL OR rel.date_end >= current_date) AS active,
rel.type_id * %(padding)s AS type_selection_id
%(additional_view_fields)s
FROM res_partner_relation rel
UNION SELECT
rel.id * %(padding)s + 1,
rel.id,
CAST('b' AS CHAR(1)),
rel.right_partner_id,
rel.left_partner_id,
rel.date_start,
rel.date_end,
rel.date_end IS NULL OR rel.date_end >= current_date,
CASE
WHEN typ.is_symmetric THEN rel.type_id * %(padding)s
ELSE rel.type_id * %(padding)s + 1
END
%(additional_view_fields)s
FROM res_partner_relation rel
JOIN res_partner_relation_type typ ON (rel.type_id = typ.id)
""",
{
'table': AsIs(self._table),
'padding': PADDING,
'additional_view_fields': AsIs(additional_view_fields),
}
)
return super(ResPartnerRelationAll, self)._auto_init(
cr, context=context
)
@api.model
def _search_any_partner_id(self, operator, value):
"""Search relation with partner, no matter on which side."""
# pylint: disable=no-self-use
return [
'|',
('this_partner_id', operator, value),
('other_partner_id', operator, value),
]
@api.multi
def name_get(self):
return {
this.id: '%s %s %s' % (
this.this_partner_id.name,
this.type_selection_id.display_name,
this.other_partner_id.name,
)
for this in self
}
@api.onchange('type_selection_id')
def onchange_type_selection_id(self):
"""Add domain on partners according to category and contact_type."""
def check_partner_domain(partner, partner_domain, side):
"""Check wether partner_domain results in empty selection
for partner, or wrong selection of partner already selected.
"""
warning = {}
if partner:
test_domain = [('id', '=', partner.id)] + partner_domain
else:
test_domain = partner_domain
partner_model = self.env['res.partner']
partners_found = partner_model.search(test_domain, limit=1)
if not partners_found:
warning['title'] = _('Error!')
if partner:
warning['message'] = (
_('%s partner incompatible with relation type.') %
side.title()
)
else:
warning['message'] = (
_('No %s partner available for relation type.') %
side
)
return warning
this_partner_domain = []
other_partner_domain = []
if self.type_selection_id.contact_type_this:
this_partner_domain.append((
'is_company', '=',
self.type_selection_id.contact_type_this == 'c'
))
if self.type_selection_id.partner_category_this:
this_partner_domain.append((
'category_id', 'in',
self.type_selection_id.partner_category_this.ids
))
if self.type_selection_id.contact_type_other:
other_partner_domain.append((
'is_company', '=',
self.type_selection_id.contact_type_other == 'c'
))
if self.type_selection_id.partner_category_other:
other_partner_domain.append((
'category_id', 'in',
self.type_selection_id.partner_category_other.ids
))
result = {'domain': {
'this_partner_id': this_partner_domain,
'other_partner_id': other_partner_domain,
}}
# Check wether domain results in no choice or wrong choice of partners:
warning = {}
if this_partner_domain:
warning = check_partner_domain(
self.this_partner_id, this_partner_domain, _('this')
)
if not warning and other_partner_domain:
warning = check_partner_domain(
self.other_partner_id, other_partner_domain, _('other')
)
if warning:
result['warning'] = warning
return result
@api.onchange(
'this_partner_id',
'other_partner_id',
)
def onchange_partner_id(self):
"""Set domain on type_selection_id based on partner(s) selected."""
def check_type_selection_domain(type_selection_domain):
"""If type_selection_id already selected, check wether it
is compatible with the computed type_selection_domain. An empty
selection can practically only occur in a practically empty
database, and will not lead to problems. Therefore not tested.
"""
warning = {}
if not (type_selection_domain and self.type_selection_id):
return warning
test_domain = (
[('id', '=', self.type_selection_id.id)] +
type_selection_domain
)
type_model = self.env['res.partner.relation.type.selection']
types_found = type_model.search(test_domain, limit=1)
if not types_found:
warning['title'] = _('Error!')
warning['message'] = _(
'Relation type incompatible with selected partner(s).'
)
return warning
type_selection_domain = []
if self.this_partner_id:
type_selection_domain += [
'|',
('contact_type_this', '=', False),
('contact_type_this', '=',
self.this_partner_id.get_partner_type()),
'|',
('partner_category_this', '=', False),
('partner_category_this', 'in',
self.this_partner_id.category_id.ids),
]
if self.other_partner_id:
type_selection_domain += [
'|',
('contact_type_other', '=', False),
('contact_type_other', '=',
self.other_partner_id.get_partner_type()),
'|',
('partner_category_other', '=', False),
('partner_category_other', 'in',
self.other_partner_id.category_id.ids),
]
result = {'domain': {
'type_selection_id': type_selection_domain,
}}
# Check wether domain results in no choice or wrong choice for
# type_selection_id:
warning = check_type_selection_domain(type_selection_domain)
if warning:
result['warning'] = warning
return result
@api.model
def _correct_vals(self, vals):
"""Fill left and right partner from this and other partner."""
vals = vals.copy()
if 'this_partner_id' in vals:
vals['left_partner_id'] = vals['this_partner_id']
del vals['this_partner_id']
if 'other_partner_id' in vals:
vals['right_partner_id'] = vals['other_partner_id']
del vals['other_partner_id']
if 'type_selection_id' not in vals:
return vals
selection = self.type_selection_id.browse(vals['type_selection_id'])
type_id = selection.type_id.id
is_inverse = selection.is_inverse
vals['type_id'] = type_id
del vals['type_selection_id']
# Need to switch right and left partner if we are in reverse id:
if 'left_partner_id' in vals or 'right_partner_id' in vals:
if is_inverse:
left_partner_id = False
right_partner_id = False
if 'left_partner_id' in vals:
right_partner_id = vals['left_partner_id']
del vals['left_partner_id']
if 'right_partner_id' in vals:
left_partner_id = vals['right_partner_id']
del vals['right_partner_id']
if left_partner_id:
vals['left_partner_id'] = left_partner_id
if right_partner_id:
vals['right_partner_id'] = right_partner_id
return vals
@api.multi
def write(self, vals):
"""divert non-problematic writes to underlying table"""
vals = self._correct_vals(vals)
for rec in self:
rec.relation_id.write(vals)
return True
@api.model
def create(self, vals):
"""Divert non-problematic creates to underlying table.
Create a res.partner.relation but return the converted id.
"""
is_inverse = False
if 'type_selection_id' in vals:
selection = self.type_selection_id.browse(
vals['type_selection_id']
)
is_inverse = selection.is_inverse
vals = self._correct_vals(vals)
res = self.relation_id.create(vals)
return_id = res.id * PADDING + (is_inverse and 1 or 0)
return self.browse(return_id)
@api.multi
def unlink(self):
"""divert non-problematic creates to underlying table"""
# pylint: disable=arguments-differ
for rec in self:
rec.relation_id.unlink()
return True

175
models/res_partner_relation_type.py

@ -0,0 +1,175 @@
# -*- coding: utf-8 -*-
# © 2013-2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
"""Define the type of relations that can exist between partners."""
from openerp import _, api, fields, models
from openerp.exceptions import ValidationError
from openerp.osv.expression import AND, OR
HANDLE_INVALID_ONCHANGE = [
('restrict',
_('Do not allow change that will result in invalid relations')),
('ignore',
_('Allow existing relations that do not fit changed conditions')),
('end',
_('End relations per today, if they do not fit changed conditions')),
('delete',
_('Delete relations that do not fit changed conditions')),
]
class ResPartnerRelationType(models.Model):
"""Model that defines relation types that might exist between partners"""
_name = 'res.partner.relation.type'
_description = 'Partner Relation Type'
_order = 'name'
name = fields.Char(
string='Name',
required=True,
translate=True,
)
name_inverse = fields.Char(
string='Inverse name',
required=True,
translate=True,
)
contact_type_left = fields.Selection(
selection='get_partner_types',
string='Left partner type',
)
contact_type_right = fields.Selection(
selection='get_partner_types',
string='Right partner type',
)
partner_category_left = fields.Many2one(
comodel_name='res.partner.category',
string='Left partner category',
)
partner_category_right = fields.Many2one(
comodel_name='res.partner.category',
string='Right partner category',
)
allow_self = fields.Boolean(
string='Reflexive',
help='This relation can be set up with the same partner left and '
'right',
default=False,
)
is_symmetric = fields.Boolean(
string='Symmetric',
help="This relation is the same from right to left as from left to"
" right",
default=False,
)
handle_invalid_onchange = fields.Selection(
selection=HANDLE_INVALID_ONCHANGE,
string='Invalid relation handling',
required=True,
default='restrict',
help="When adding relations criteria like partner type and category"
" are checked.\n"
"However when you change the criteria, there might be relations"
" that do not fit the new criteria.\n"
"Specify how this situation should be handled.",
)
@api.model
def get_partner_types(self):
"""A partner can be an organisation or an individual."""
# pylint: disable=no-self-use
return [
('c', _('Organisation')),
('p', _('Person')),
]
@api.onchange('is_symmetric')
def onchange_is_symmetric(self):
"""Set right side to left side if symmetric."""
if self.is_symmetric:
self.update({
'name_inverse': self.name,
'contact_type_right': self.contact_type_left,
'partner_category_right': self.partner_category_left,
})
@api.multi
def check_existing(self, vals):
"""Check wether records exist that do not fit new criteria."""
relation_model = self.env['res.partner.relation']
def get_type_condition(vals, side):
"""Add if needed check for contact type."""
fieldname1 = 'contact_type_%s' % side
fieldname2 = '%s_partner_id.is_company' % side
contact_type = fieldname1 in vals and vals[fieldname1] or False
if contact_type == 'c':
# Records that are not companies are invalid:
return [(fieldname2, '=', False)]
if contact_type == 'p':
# Records that are companies are invalid:
return [(fieldname2, '=', True)]
return []
def get_category_condition(vals, side):
"""Add if needed check for partner category."""
fieldname1 = 'partner_category_%s' % side
fieldname2 = '%s_partner_id.category_id' % side
category_id = fieldname1 in vals and vals[fieldname1] or False
if category_id:
# Records that do not have the specified category are invalid:
return [(fieldname2, 'not in', [category_id])]
return []
for rec in self:
handling = (
'handle_invalid_onchange' in vals and
vals['handle_invalid_onchange'] or
self.handle_invalid_onchange
)
if handling == 'ignore':
continue
invalid_conditions = []
for side in ['left', 'right']:
invalid_conditions = OR([
invalid_conditions,
get_type_condition(vals, side),
])
invalid_conditions = OR([
invalid_conditions,
get_category_condition(vals, side),
])
if not invalid_conditions:
return
# only look at relations for this type
invalid_domain = AND([
[('type_id', '=', rec.id)], invalid_conditions
])
invalid_relations = relation_model.with_context(
active_test=False
).search(invalid_domain)
if invalid_relations:
if handling == 'restrict':
raise ValidationError(
_('There are already relations not satisfying the'
' conditions for partner type or category.')
)
elif handling == 'delete':
invalid_relations.unlink()
else:
# Delete future records, end other ones, ignore relations
# already ended:
cutoff_date = fields.Date.today()
for relation in invalid_relations:
if relation.date_start >= cutoff_date:
relation.unlink()
elif (not relation.date_end or
relation.date_end > cutoff_date):
relation.write({'date_end': cutoff_date})
@api.multi
def write(self, vals):
"""Handle existing relations if conditions change."""
self.check_existing(vals)
return super(ResPartnerRelationType, self).write(vals)

127
models/res_partner_relation_type_selection.py

@ -0,0 +1,127 @@
# -*- coding: utf-8 -*-
# © 2014-2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
"""
For the model defined here _auto is set to False to prevent creating a
database file. The model is based on a SQL view based on
res_partner_relation_type where each type is included in the
result set twice, so it appears that the connection type and the inverse
type are separate records..
The original function _auto_init is still called because this function
normally (if _auto == True) not only creates the db tables, but it also takes
care of registering all fields in ir_model_fields. This is needed to make
the field labels translatable.
"""
from psycopg2.extensions import AsIs
from openerp import api, fields, models
from openerp.tools import drop_view_if_exists
from .res_partner_relation_type import ResPartnerRelationType
PADDING = 10
class ResPartnerRelationTypeSelection(models.Model):
"""Virtual relation types"""
_name = 'res.partner.relation.type.selection'
_description = 'All relation types'
_auto = False # Do not try to create table in _auto_init(..)
_foreign_keys = []
_log_access = False
_order = 'name asc'
type_id = fields.Many2one(
comodel_name='res.partner.relation.type',
string='Type',
)
name = fields.Char('Name')
contact_type_this = fields.Selection(
selection=ResPartnerRelationType.get_partner_types.im_func,
string='Current record\'s partner type',
)
is_inverse = fields.Boolean(
string="Is reverse type?",
help="Inverse relations are from right to left partner.",
)
contact_type_other = fields.Selection(
selection=ResPartnerRelationType.get_partner_types.im_func,
string='Other record\'s partner type',
)
partner_category_this = fields.Many2one(
comodel_name='res.partner.category',
string='Current record\'s category',
)
partner_category_other = fields.Many2one(
comodel_name='res.partner.category',
string='Other record\'s category',
)
allow_self = fields.Boolean(
string='Reflexive',
)
is_symmetric = fields.Boolean(
string='Symmetric',
)
def _auto_init(self, cr, context=None):
drop_view_if_exists(cr, self._table)
cr.execute(
"""CREATE OR REPLACE VIEW %(table)s AS
SELECT
id * %(padding)s AS id,
id AS type_id,
name AS name,
False AS is_inverse,
contact_type_left AS contact_type_this,
contact_type_right AS contact_type_other,
partner_category_left AS partner_category_this,
partner_category_right AS partner_category_other,
allow_self,
is_symmetric
FROM %(underlying_table)s
UNION SELECT
id * %(padding)s + 1,
id,
name_inverse,
True,
contact_type_right,
contact_type_left,
partner_category_right,
partner_category_left,
allow_self,
is_symmetric
FROM %(underlying_table)s
WHERE not is_symmetric
""",
{
'table': AsIs(self._table),
'padding': PADDING,
'underlying_table': AsIs('res_partner_relation_type'),
})
return super(ResPartnerRelationTypeSelection, self)._auto_init(
cr, context=context)
@api.multi
def name_get(self):
"""Get name or name_inverse from underlying model."""
return [
(this.id,
this.is_inverse and this.type_id.name_inverse or
this.type_id.display_name)
for this in self
]
@api.model
def name_search(self, name='', args=None, operator='ilike', limit=100):
"""Search for name or inverse name in underlying model."""
# pylint: disable=no-value-for-parameter
return self.search(
[
'|',
('type_id.name', operator, name),
('type_id.name_inverse', operator, name),
] + (args or []),
limit=limit
).name_get()

8
security/ir.model.access.csv

@ -0,0 +1,8 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
read_res_partner_relation,access_res_partner_relation,model_res_partner_relation,,1,0,0,0
read_res_partner_relation_all,access_res_partner_relation,model_res_partner_relation_all,,1,0,0,0
read_res_partner_relation_type,access_res_partner_relation_type,model_res_partner_relation_type,,1,0,0,0
read_res_partner_relation_type_selection,access_res_partner_relation_type,model_res_partner_relation_type_selection,,1,0,0,0
crud_res_partner_relation,access_res_partner_relation,model_res_partner_relation,base.group_partner_manager,1,1,1,1
crud_res_partner_relation_all,access_res_partner_relation,model_res_partner_relation_all,base.group_partner_manager,1,1,1,1
crud_res_partner_relation_type,access_res_partner_relation_type,model_res_partner_relation_type,base.group_sale_manager,1,1,1,1

BIN
static/description/icon.png

After

Width: 90  |  Height: 90  |  Size: 13 KiB

7
tests/__init__.py

@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Therp BV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import test_partner_relation_common
from . import test_partner_relation
from . import test_partner_relation_all
from . import test_partner_search

280
tests/test_partner_relation.py

@ -0,0 +1,280 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Therp BV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from datetime import date
from dateutil.relativedelta import relativedelta
from openerp import fields
from openerp.exceptions import ValidationError
from .test_partner_relation_common import TestPartnerRelationCommon
class TestPartnerRelation(TestPartnerRelationCommon):
def test_selection_name_search(self):
"""Test wether we can find type selection on reverse name."""
selection_types = self.selection_model.name_search(
name=self.selection_person2company.name
)
self.assertTrue(selection_types)
self.assertTrue(
(self.selection_person2company.id,
self.selection_person2company.name) in selection_types
)
def test_self_allowed(self):
"""Test creation of relation to same partner when type allows."""
type_allow = self.type_model.create({
'name': 'allow',
'name_inverse': 'allow_inverse',
'contact_type_left': 'p',
'contact_type_right': 'p',
'allow_self': True
})
self.assertTrue(type_allow)
reflexive_relation = self.relation_model.create({
'type_id': type_allow.id,
'left_partner_id': self.partner_01_person.id,
'right_partner_id': self.partner_01_person.id,
})
self.assertTrue(reflexive_relation)
def test_self_disallowed(self):
"""Test creating relation to same partner when disallowed.
Attempt to create a relation of a partner to the same partner should
raise an error when the type of relation explicitly disallows this.
"""
type_disallow = self.type_model.create({
'name': 'disallow',
'name_inverse': 'disallow_inverse',
'contact_type_left': 'p',
'contact_type_right': 'p',
'allow_self': False
})
self.assertTrue(type_disallow)
with self.assertRaises(ValidationError):
self.relation_model.create({
'type_id': type_disallow.id,
'left_partner_id': self.partner_01_person.id,
'right_partner_id': self.partner_01_person.id,
})
def test_self_default(self):
"""Test default not to allow relation with same partner.
Attempt to create a relation of a partner to the same partner
raise an error when the type of relation does not explicitly allow
this.
"""
type_default = self.type_model.create({
'name': 'default',
'name_inverse': 'default_inverse',
'contact_type_left': 'p',
'contact_type_right': 'p',
})
self.assertTrue(type_default)
with self.assertRaises(ValidationError):
self.relation_model.create({
'type_id': type_default.id,
'left_partner_id': self.partner_01_person.id,
'right_partner_id': self.partner_01_person.id,
})
def test_self_mixed(self):
"""Test creation of relation with wrong types.
Trying to create a relation between partners with an inappropiate
type should raise an error.
"""
with self.assertRaises(ValidationError):
self.relation_model.create({
'type_id': self.type_company2person.id,
'left_partner_id': self.partner_01_person.id,
'right_partner_id': self.partner_02_company.id,
})
def test_symmetric(self):
"""Test creating symmetric relation."""
# Start out with non symmetric relation:
type_symmetric = self.type_model.create({
'name': 'not yet symmetric',
'name_inverse': 'the other side of not symmetric',
'is_symmetric': False,
'contact_type_left': False,
'contact_type_right': 'p',
})
# not yet symmetric relation should result in two records in
# selection:
selection_symmetric = self.selection_model.search([
('type_id', '=', type_symmetric.id),
])
self.assertEqual(len(selection_symmetric), 2)
# Now change to symmetric and test name and inverse name:
with self.env.do_in_draft():
type_symmetric.write(
vals={
'name': 'sym',
'is_symmetric': True,
}
)
with self.env.do_in_onchange():
type_symmetric.onchange_is_symmetric()
self.assertEqual(type_symmetric.is_symmetric, True)
self.assertEqual(
type_symmetric.name_inverse,
type_symmetric.name
)
self.assertEqual(
type_symmetric.contact_type_right,
type_symmetric.contact_type_left
)
# now update the database:
type_symmetric.write(
vals={
'name': type_symmetric.name,
'is_symmetric': type_symmetric.is_symmetric,
'name_inverse': type_symmetric.name_inverse,
'contact_type_right': type_symmetric.contact_type_right,
}
)
# symmetric relation should result in only one record in
# selection:
selection_symmetric = self.selection_model.search([
('type_id', '=', type_symmetric.id),
])
self.assertEqual(len(selection_symmetric), 1)
relation = self.relation_all_model.create({
'type_selection_id': selection_symmetric.id,
'this_partner_id': self.partner_02_company.id,
'other_partner_id': self.partner_01_person.id,
})
partners = self.partner_model.search([
('search_relation_type_id', '=', relation.type_selection_id.id)
])
self.assertTrue(self.partner_01_person in partners)
self.assertTrue(self.partner_02_company in partners)
def test_category_domain(self):
"""Test check on category in relations."""
# Check on left side:
with self.assertRaises(ValidationError):
self.relation_model.create({
'type_id': self.type_ngo2volunteer.id,
'left_partner_id': self.partner_02_company.id,
'right_partner_id': self.partner_04_volunteer.id,
})
# Check on right side:
with self.assertRaises(ValidationError):
self.relation_model.create({
'type_id': self.type_ngo2volunteer.id,
'left_partner_id': self.partner_03_ngo.id,
'right_partner_id': self.partner_01_person.id,
})
def test_relation_type_change(self):
"""Test change in relation type conditions."""
# First create a relation type having no particular conditions.
(type_school2student,
school2student,
school2student_inverse) = (
self._create_relation_type_selection({
'name': 'school has student',
'name_inverse': 'studies at school',
})
)
# Second create relations based on those conditions.
partner_school = self.partner_model.create({
'name': 'Test School',
'is_company': True,
'ref': 'TS',
})
partner_bart = self.partner_model.create({
'name': 'Bart Simpson',
'is_company': False,
'ref': 'BS',
})
partner_lisa = self.partner_model.create({
'name': 'Lisa Simpson',
'is_company': False,
'ref': 'LS',
})
relation_school2bart = self.relation_all_model.create({
'this_partner_id': partner_school.id,
'type_selection_id': school2student.id,
'other_partner_id': partner_bart.id,
})
self.assertTrue(relation_school2bart)
relation_school2lisa = self.relation_all_model.create({
'this_partner_id': partner_school.id,
'type_selection_id': school2student.id,
'other_partner_id': partner_lisa.id,
})
self.assertTrue(relation_school2lisa)
relation_bart2lisa = self.relation_all_model.create({
'this_partner_id': partner_bart.id,
'type_selection_id': school2student.id,
'other_partner_id': partner_lisa.id,
})
self.assertTrue(relation_bart2lisa)
# Third creata a category and make it a condition for the
# relation type.
# - Test restriction
# - Test ignore
category_student = self.category_model.create({
'name': 'Student',
})
with self.assertRaises(ValidationError):
type_school2student.write({
'partner_category_right': category_student.id,
})
self.assertFalse(type_school2student.partner_category_right.id)
type_school2student.write({
'handle_invalid_onchange': 'ignore',
'partner_category_right': category_student.id,
})
self.assertEqual(
type_school2student.partner_category_right.id,
category_student.id
)
# Fourth make company type a condition for left partner
# - Test ending
# - Test deletion
partner_bart.write({
'category_id': [(4, category_student.id)],
})
partner_lisa.write({
'category_id': [(4, category_student.id)],
})
# Future student to be deleted by end action:
partner_homer = self.partner_model.create({
'name': 'Homer Simpson',
'is_company': False,
'ref': 'HS',
'category_id': [(4, category_student.id)],
})
relation_lisa2homer = self.relation_all_model.create({
'this_partner_id': partner_lisa.id,
'type_selection_id': school2student.id,
'other_partner_id': partner_homer.id,
'date_start': fields.Date.to_string(
date.today() + relativedelta(months=+6)
),
})
self.assertTrue(relation_lisa2homer)
type_school2student.write({
'handle_invalid_onchange': 'end',
'contact_type_left': 'c',
})
self.assertEqual(
relation_bart2lisa.date_end,
fields.Date.today()
)
self.assertFalse(relation_lisa2homer.exists())
type_school2student.write({
'handle_invalid_onchange': 'delete',
'contact_type_left': 'c',
'contact_type_right': 'p',
})
self.assertFalse(relation_bart2lisa.exists())

241
tests/test_partner_relation_all.py

@ -0,0 +1,241 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Therp BV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp.exceptions import ValidationError
from .test_partner_relation_common import TestPartnerRelationCommon
class TestPartnerRelation(TestPartnerRelationCommon):
def setUp(self):
super(TestPartnerRelation, self).setUp()
# Create a new relation type which will not have valid relations:
category_nobody = self.category_model.create({
'name': 'Nobody',
})
(self.type_nobody,
self.selection_nobody,
self.selection_nobody_inverse) = (
self._create_relation_type_selection({
'name': 'has relation with nobody',
'name_inverse': 'nobody has relation with',
'contact_type_left': 'c',
'contact_type_right': 'p',
'partner_category_left': category_nobody.id,
'partner_category_right': category_nobody.id,
})
)
def _get_empty_relation(self):
"""Get empty relation record for onchange tests."""
# Need English, because we will compare text
return self.relation_all_model.with_context(lang='en_US').new({})
def test_create_with_active_id(self):
"""Test creation with this_partner_id from active_id."""
# Check wether we can create connection from company to person,
# taking the particular company from the active records:
relation = self.relation_all_model.with_context(
active_id=self.partner_02_company.id,
active_ids=self.partner_02_company.ids,
).create({
'other_partner_id': self.partner_01_person.id,
'type_selection_id': self.selection_company2person.id,
})
self.assertTrue(relation)
self.assertEqual(relation.this_partner_id, self.partner_02_company)
# Partner should have one relation now:
self.assertEqual(self.partner_01_person.relation_count, 1)
def test_display_name(self):
"""Test display name"""
relation = self._create_company2person_relation()
self.assertEqual(
relation.display_name, '%s %s %s' % (
relation.this_partner_id.name,
relation.type_selection_id.name,
relation.other_partner_id.name,
)
)
def test__regular_write(self):
"""Test write with valid data."""
relation = self._create_company2person_relation()
relation.write({
'date_start': '2014-09-01',
})
relation.invalidate_cache(ids=relation.ids)
self.assertEqual(relation.date_start, '2014-09-01')
def test_write_incompatible_dates(self):
"""Test write with date_end before date_start."""
relation = self._create_company2person_relation()
with self.assertRaises(ValidationError):
relation.write({
'date_start': '2016-09-01',
'date_end': '2016-08-01',
})
def test_validate_overlapping_01(self):
"""Test create overlapping with no start / end dates."""
relation = self._create_company2person_relation()
with self.assertRaises(ValidationError):
# New relation with no start / end should give error
self.relation_all_model.create({
'this_partner_id': relation.this_partner_id.id,
'type_selection_id': relation.type_selection_id.id,
'other_partner_id': relation.other_partner_id.id,
})
def test_validate_overlapping_02(self):
"""Test create overlapping with start / end dates."""
relation = self.relation_all_model.create({
'this_partner_id': self.partner_02_company.id,
'type_selection_id': self.selection_company2person.id,
'other_partner_id': self.partner_01_person.id,
'date_start': '2015-09-01',
'date_end': '2016-08-31',
})
# New relation with overlapping start / end should give error
with self.assertRaises(ValidationError):
self.relation_all_model.create({
'this_partner_id': relation.this_partner_id.id,
'type_selection_id': relation.type_selection_id.id,
'other_partner_id': relation.other_partner_id.id,
'date_start': '2016-08-01',
'date_end': '2017-07-30',
})
def test_validate_overlapping_03(self):
"""Test create not overlapping."""
relation = self.relation_all_model.create({
'this_partner_id': self.partner_02_company.id,
'type_selection_id': self.selection_company2person.id,
'other_partner_id': self.partner_01_person.id,
'date_start': '2015-09-01',
'date_end': '2016-08-31',
})
relation_another_record = self.relation_all_model.create({
'this_partner_id': relation.this_partner_id.id,
'type_selection_id': relation.type_selection_id.id,
'other_partner_id': relation.other_partner_id.id,
'date_start': '2016-09-01',
'date_end': '2017-08-31',
})
self.assertTrue(relation_another_record)
def test_inverse_record(self):
"""Test creation of inverse record."""
relation = self._create_company2person_relation()
inverse_relation = self.relation_all_model.search([
('this_partner_id', '=', relation.other_partner_id.id),
('other_partner_id', '=', relation.this_partner_id.id),
])
self.assertEqual(len(inverse_relation), 1)
self.assertEqual(
inverse_relation.type_selection_id.name,
self.selection_person2company.name
)
def test_inverse_creation(self):
"""Test creation of record through inverse selection."""
relation = self.relation_all_model.create({
'this_partner_id': self.partner_01_person.id,
'type_selection_id': self.selection_person2company.id,
'other_partner_id': self.partner_02_company.id,
})
# Check wether display name is what we should expect:
self.assertEqual(
relation.display_name, '%s %s %s' % (
self.partner_01_person.name,
self.selection_person2company.name,
self.partner_02_company.name,
)
)
def test_unlink(self):
"""Unlinking derived relation should unlink base relation."""
# Check wether underlying record is removed when record is removed:
relation = self._create_company2person_relation()
base_relation = relation.relation_id
relation.unlink()
self.assertFalse(base_relation.exists())
def test_on_change_type_selection(self):
"""Test on_change_type_selection."""
# 1. Test call with empty relation
relation_empty = self._get_empty_relation()
result = relation_empty.onchange_type_selection_id()
self.assertTrue('domain' in result)
self.assertFalse('warning' in result)
self.assertTrue('this_partner_id' in result['domain'])
self.assertFalse(result['domain']['this_partner_id'])
self.assertTrue('other_partner_id' in result['domain'])
self.assertFalse(result['domain']['other_partner_id'])
# 2. Test call with company 2 person relation
relation = self._create_company2person_relation()
domain = relation.onchange_type_selection_id()['domain']
self.assertTrue(
('is_company', '=', False) in domain['other_partner_id']
)
# 3. Test with relation needing categories.
relation_ngo_volunteer = self.relation_all_model.create({
'this_partner_id': self.partner_03_ngo.id,
'type_selection_id': self.selection_ngo2volunteer.id,
'other_partner_id': self.partner_04_volunteer.id,
})
domain = relation_ngo_volunteer.onchange_type_selection_id()['domain']
self.assertTrue(
('category_id', 'in', [self.category_01_ngo.id]) in
domain['this_partner_id']
)
self.assertTrue(
('category_id', 'in', [self.category_02_volunteer.id]) in
domain['other_partner_id']
)
# 4. Test with invalid or impossible combinations
relation_nobody = self._get_empty_relation()
with self.env.do_in_draft():
relation_nobody.type_selection_id = self.selection_nobody
warning = relation_nobody.onchange_type_selection_id()['warning']
self.assertTrue('message' in warning)
self.assertTrue('No this partner available' in warning['message'])
with self.env.do_in_draft():
relation_nobody.this_partner_id = self.partner_02_company
warning = relation_nobody.onchange_type_selection_id()['warning']
self.assertTrue('message' in warning)
self.assertTrue('incompatible' in warning['message'])
# Allow left partner and check message for other partner:
self.type_nobody.write({
'partner_category_left': False,
})
self.selection_nobody.invalidate_cache(ids=self.selection_nobody.ids)
warning = relation_nobody.onchange_type_selection_id()['warning']
self.assertTrue('message' in warning)
self.assertTrue('No other partner available' in warning['message'])
def test_on_change_partner_id(self):
"""Test on_change_partner_id."""
# 1. Test call with empty relation
relation_empty = self._get_empty_relation()
result = relation_empty.onchange_partner_id()
self.assertTrue('domain' in result)
self.assertFalse('warning' in result)
self.assertTrue('type_selection_id' in result['domain'])
self.assertFalse(result['domain']['type_selection_id'])
# 2. Test call with company 2 person relation
relation = self._create_company2person_relation()
domain = relation.onchange_partner_id()['domain']
self.assertTrue(
('contact_type_this', '=', 'c') in domain['type_selection_id']
)
# 3. Test with invalid or impossible combinations
relation_nobody = self._get_empty_relation()
with self.env.do_in_draft():
relation_nobody.this_partner_id = self.partner_02_company
relation_nobody.type_selection_id = self.selection_nobody
warning = relation_nobody.onchange_partner_id()['warning']
self.assertTrue('message' in warning)
self.assertTrue('incompatible' in warning['message'])

113
tests/test_partner_relation_common.py

@ -0,0 +1,113 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Therp BV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp.tests import common
class TestPartnerRelationCommon(common.TransactionCase):
def setUp(self):
super(TestPartnerRelationCommon, self).setUp()
self.partner_model = self.env['res.partner']
self.category_model = self.env['res.partner.category']
self.type_model = self.env['res.partner.relation.type']
self.selection_model = self.env['res.partner.relation.type.selection']
self.relation_model = self.env['res.partner.relation']
self.relation_all_model = self.env['res.partner.relation.all']
self.partner_01_person = self.partner_model.create({
'name': 'Test User 1',
'is_company': False,
'ref': 'PR01',
})
self.partner_02_company = self.partner_model.create({
'name': 'Test Company',
'is_company': True,
'ref': 'PR02',
})
# Create partners with specific categories:
self.category_01_ngo = self.category_model.create({
'name': 'NGO',
})
self.partner_03_ngo = self.partner_model.create({
'name': 'Test NGO',
'is_company': True,
'ref': 'PR03',
'category_id': [(4, self.category_01_ngo.id)],
})
self.category_02_volunteer = self.category_model.create({
'name': 'Volunteer',
})
self.partner_04_volunteer = self.partner_model.create({
'name': 'Test Volunteer',
'is_company': False,
'ref': 'PR04',
'category_id': [(4, self.category_02_volunteer.id)],
})
# Create a new relation type withouth categories:
(self.type_company2person,
self.selection_company2person,
self.selection_person2company) = (
self._create_relation_type_selection({
'name': 'mixed',
'name_inverse': 'mixed_inverse',
'contact_type_left': 'c',
'contact_type_right': 'p',
})
)
# Create a new relation type with categories:
(self.type_ngo2volunteer,
self.selection_ngo2volunteer,
self.selection_volunteer2ngo) = (
self._create_relation_type_selection({
'name': 'NGO has volunteer',
'name_inverse': 'volunteer works for NGO',
'contact_type_left': 'c',
'contact_type_right': 'p',
'partner_category_left': self.category_01_ngo.id,
'partner_category_right': self.category_02_volunteer.id,
})
)
def _create_relation_type_selection(self, vals):
"""Create relation type and return this with selection types."""
assert 'name' in vals, (
"Name missing in vals to create relation type. Vals: %s."
% vals
)
assert 'name' in vals, (
"Name_inverse missing in vals to create relation type. Vals: %s."
% vals
)
new_type = self.type_model.create(vals)
self.assertTrue(
new_type,
msg="No relation type created with vals %s." % vals
)
selection_types = self.selection_model.search([
('type_id', '=', new_type.id),
])
for st in selection_types:
if st.is_inverse:
inverse_type_selection = st
else:
type_selection = st
self.assertTrue(
inverse_type_selection,
msg="Failed to find inverse type selection based on"
" relation type created with vals %s." % vals
)
self.assertTrue(
type_selection,
msg="Failed to find type selection based on"
" relation type created with vals %s." % vals
)
return (new_type, type_selection, inverse_type_selection)
def _create_company2person_relation(self):
"""Utility function to get a relation from company 2 partner."""
return self.relation_all_model.create({
'type_selection_id': self.selection_company2person.id,
'this_partner_id': self.partner_02_company.id,
'other_partner_id': self.partner_01_person.id,
})

76
tests/test_partner_search.py

@ -0,0 +1,76 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Camptocamp SA
# Copyright 2016 Therp BV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import fields
from openerp.exceptions import ValidationError
from .test_partner_relation_common import TestPartnerRelationCommon
class TestPartnerSearch(TestPartnerRelationCommon):
def test_search_relation_type(self):
"""Test searching on relation type."""
relation = self._create_company2person_relation()
partners = self.partner_model.search([
('search_relation_type_id', '=', relation.type_selection_id.id)
])
self.assertTrue(self.partner_02_company in partners)
partners = self.partner_model.search([
('search_relation_type_id', '!=', relation.type_selection_id.id)
])
self.assertTrue(self.partner_01_person in partners)
partners = self.partner_model.search([
('search_relation_type_id', '=', self.type_company2person.name)
])
self.assertTrue(self.partner_01_person in partners)
self.assertTrue(self.partner_02_company in partners)
partners = self.partner_model.search([
('search_relation_type_id', '=', 'unknown relation')
])
self.assertFalse(partners)
# Check error with invalid search operator:
with self.assertRaises(ValidationError):
partners = self.partner_model.search([
('search_relation_type_id', 'child_of', 'some parent')
])
def test_search_relation_partner(self):
"""Test searching on related partner."""
self._create_company2person_relation()
partners = self.partner_model.search([
('search_relation_partner_id', '=', self.partner_02_company.id),
])
self.assertTrue(self.partner_01_person in partners)
def test_search_relation_date(self):
"""Test searching on relations valid on a certain date."""
self._create_company2person_relation()
partners = self.partner_model.search([
('search_relation_date', '=', fields.Date.today()),
])
self.assertTrue(self.partner_01_person in partners)
self.assertTrue(self.partner_02_company in partners)
def test_search_any_partner(self):
"""Test searching for partner left or right."""
self._create_company2person_relation()
both_relations = self.relation_all_model.search([
('any_partner_id', '=', self.partner_02_company.id),
])
self.assertEqual(len(both_relations), 2)
def test_search_partner_category(self):
"""Test searching for partners related to partners having category."""
relation_ngo_volunteer = self.relation_all_model.create({
'this_partner_id': self.partner_03_ngo.id,
'type_selection_id': self.selection_ngo2volunteer.id,
'other_partner_id': self.partner_04_volunteer.id,
})
self.assertTrue(relation_ngo_volunteer)
partners = self.partner_model.search([
('search_relation_partner_category_id', '=',
self.category_02_volunteer.id)
])
self.assertTrue(self.partner_03_ngo in partners)

25
views/menu.xml

@ -0,0 +1,25 @@
<openerp>
<data>
<menuitem
id="menu_res_partner_relation_sales"
sequence="2"
parent="base.menu_sales"
action="action_res_partner_relation_all"
/>
<act_window
id="action_res_partner_relation_type"
res_model="res.partner.relation.type"
view_mode="tree,form"
name="Partner Relations Types"
/>
<menuitem
id="menu_res_partner_relation_type"
parent="base.menu_config_address_book"
action="action_res_partner_relation_type"
/>
</data>
</openerp>

59
views/res_partner.xml

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="view_res_partner_filter" model="ir.ui.view">
<field name="name">partner_multi_relation.view_partner_filter</field>
<field name="inherit_id" ref="base.view_res_partner_filter" />
<field name="model">res.partner</field>
<field type="xml" name="arch">
<data>
<field name="parent_id" position="after">
<field name="search_relation_partner_id" />
<field name="search_relation_type_id" />
<field name="search_relation_date" />
<field name="search_relation_partner_category_id" />
</field>
</data>
</field>
</record>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">partner_multi_relation.view_partner_form</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="model">res.partner</field>
<field type="xml" name="arch">
<xpath expr="//div[@name='button_box']" position="inside">
<button
class="oe_inline oe_stat_button"
type="action"
context="{
'search_default_this_partner_id': active_id,
'default_this_partner_id': active_id,
'active_model': 'res.partner',
'active_id': id,
'active_ids': [id],
'active_test': False,
}"
name="%(action_res_partner_relation_all)d"
icon="fa-users"
>
<field
string="Relations"
name="relation_count"
widget="statinfo"
/>
</button>
</xpath>
</field>
</record>
<act_window id="action_show_partner_multi_relation"
name="Show partner's relations"
src_model="res.partner"
res_model="res.partner.relation.all"
domain="[('this_partner_id', 'in', active_ids)]"
key2="client_action_multi" />
</data>
</openerp>

96
views/res_partner_relation_all.xml

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="tree_res_partner_relation_all" model="ir.ui.view">
<field name="model">res.partner.relation.all</field>
<field name="arch" type="xml">
<tree
string="Partner Relations"
colors="gray:not active; blue:date_start &gt; current_date"
editable="top"
>
<field
name="this_partner_id"
required="True"
options="{'no_create': True}"
/>
<field
name="type_selection_id"
required="True"
options="{'no_create': True}"
/>
<field
name="other_partner_id"
required="True"
options="{'no_create': True}"
/>
<field name="date_start" />
<field name="date_end" />
<field name="active" invisible="1" />
</tree>
</field>
</record>
<record id="search_res_partner_relation_all" model="ir.ui.view">
<field name="model">res.partner.relation.all</field>
<field name="arch" type="xml">
<search string="Search Relations">
<field name="any_partner_id" widget="many2one"/>
<field name="this_partner_id"/>
<field name="other_partner_id"/>
<field name="type_selection_id"/>
<filter
string="Left to right"
domain="[('record_type', '=', 'a')]"
/>
<filter
string="Right to left"
domain="[('record_type', '=', 'b')]"
/>
<filter
string="Include past records"
context="{'active_test': False}"
/>
<group expand="0" string="Group By">
<filter
string="One Partner"
context="{'group_by': 'this_partner_id'}"
/>
<filter
string="Relationship Type"
context="{'group_by': 'type_selection_id'}"
/>
<filter
string="Other Partner"
context="{'group_by': 'other_partner_id'}"
/>
</group>
</search>
</field>
</record>
<record
id="action_res_partner_relation_all"
model="ir.actions.act_window"
>
<field name="name">Relations</field>
<field name="res_model">res.partner.relation.all</field>
<field name="view_type">form</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="tree_res_partner_relation_all"/>
<field
name="search_view_id"
ref="search_res_partner_relation_all"
/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Record and track your partners' relations. Relations may
be linked to other partners with a type either directly
or inversely.
</p>
</field>
</record>
</data>
</openerp>

51
views/res_partner_relation_type.xml

@ -0,0 +1,51 @@
<openerp>
<data>
<record id="tree_res_partner_relation_type" model="ir.ui.view">
<field name="model">res.partner.relation.type</field>
<field type="xml" name="arch">
<tree>
<field name="name" />
<field name="name_inverse" />
<field name="contact_type_left" />
<field name="contact_type_right" />
<field name="allow_self" />
<field name="is_symmetric" />
</tree>
</field>
</record>
<record id="form_res_partner_relation_type" model="ir.ui.view">
<field name="model">res.partner.relation.type</field>
<field type="xml" name="arch">
<form>
<sheet>
<group>
<group
string="Left side of relation"
name="left"
>
<field name="name" />
<field name="contact_type_left" />
<field name="partner_category_left" />
</group>
<group
string="Right side of relation"
name="right"
attrs="{'invisible': [('is_symmetric', '=', True)]}"
>
<field name="name_inverse" />
<field name="contact_type_right" />
<field name="partner_category_right" />
</group>
</group>
<group name="properties" string="Properties">
<field name="allow_self" />
<field name="is_symmetric" />
<field name="handle_invalid_onchange" />
</group>
</sheet>
</form>
</field>
</record>
</data>
</openerp>
Loading…
Cancel
Save