diff --git a/README.rst b/README.rst new file mode 100644 index 000000000..5b891c692 --- /dev/null +++ b/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 +* Stefan Rijnhart +* Ronald Portier +* Sandy Carter +* Bruno Joliveau +* Adriana Ierfino + +Maintainer +---------- + +.. image:: http://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: http://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/__init__.py b/__init__.py new file mode 100644 index 000000000..91d6405f3 --- /dev/null +++ b/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import models +from . import tests diff --git a/__openerp__.py b/__openerp__.py new file mode 100644 index 000000000..ad8c8ff5d --- /dev/null +++ b/__openerp__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Therp BV +# 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, +} diff --git a/data/demo.xml b/data/demo.xml new file mode 100644 index 000000000..73f8f1e2c --- /dev/null +++ b/data/demo.xml @@ -0,0 +1,118 @@ + + + + + + + + Is assistant of + Has assistant + p + p + + + Is competitor of + Is competitor of + c + c + + + + Has worked for + Has former employee + p + c + + + + + Washing Companies + + + Washing Gold + + + + Washing Silver + + + + Washing Services + + + + + + Great Washing Powder Company + + 1 + 1 + 1 + Le Bourget du Lac + 73377 + +33 4 49 23 44 54 + + 93, Press Avenue + great@yourcompany.example.com + http://www.great.com + + + Best Washing Powder Company + + 1 + 1 + Champs sur Marne + 77420 + + best@yourcompany.example.com + +33 1 64 61 04 01 + 12 rue Albert Einstein + http://www.best.com/ + + + Super Washing Powder Company + + 1 + + 1 + 3rd Floor, Room 3-C, + Carretera Panamericana, Km 1, Urb. Delgado Chalbaud + Caracas + 1090 + super@yourcompany.example.com + +58 212 681 0538 + + super.com + + + + + + + + + + + + + + + + + + + + diff --git a/i18n/da.po b/i18n/da.po new file mode 100644 index 000000000..cb7a6748c --- /dev/null +++ b/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 , 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 \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 "" +"

\n" +" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n" +"

\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 "" diff --git a/i18n/de.po b/i18n/de.po new file mode 100644 index 000000000..414f0d1c3 --- /dev/null +++ b/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 , 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 \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 "" +"

\n" +" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n" +"

\n" +" " +msgstr "

\n Aufzeichnen und Beobachten der Beziehungen des Partners. Beziehungen mit anderen Partnern können entweder direkt oder rückwirkend hergestellt werden.\n

\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\"" diff --git a/i18n/es.po b/i18n/es.po new file mode 100644 index 000000000..2d475f926 --- /dev/null +++ b/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 , 2015 +# Oihane Crucelaegui , 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 \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 "" +"

\n" +" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n" +"

\n" +" " +msgstr "

\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

\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\"" diff --git a/i18n/fi.po b/i18n/fi.po new file mode 100644 index 000000000..f6a7a59a9 --- /dev/null +++ b/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 \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 "" +"

\n" +" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n" +"

\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 "" diff --git a/i18n/fr.po b/i18n/fr.po new file mode 100644 index 000000000..c15908f77 --- /dev/null +++ b/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 , 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 \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 "" +"

\n" +" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n" +"

\n" +" " +msgstr "

\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

\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 »" diff --git a/i18n/it.po b/i18n/it.po new file mode 100644 index 000000000..991f9df46 --- /dev/null +++ b/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 \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 "" +"

\n" +" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n" +"

\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 "" diff --git a/i18n/nl.po b/i18n/nl.po new file mode 100644 index 000000000..3e1448eb8 --- /dev/null +++ b/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 , 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 \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 "" +"

\n" +" Record and track your partners' relations. Relations " +"may\n" +" be linked to other partners with a type either directly\n" +" or inversely.\n" +"

\n" +" " +msgstr "" +"

\n" +"Onderhoud de connecties tussen uw relaties. Relaties mogen gekoppeld\n" +"worden zowel via een normale connectie, als met een omgekeerde\n" +"connectie.

" + +#. 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" diff --git a/i18n/partner_multi_relation.pot b/i18n/partner_multi_relation.pot new file mode 100644 index 000000000..91e2c7ce9 --- /dev/null +++ b/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 "

\n" +" Record and track your partners' relations. Relations may\n" +" be linked to other partners with a type either directly\n" +" or inversely.\n" +"

\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 "" + diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po new file mode 100644 index 000000000..e39a02a79 --- /dev/null +++ b/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 , 2015 +# danimaribeiro , 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 \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 "" +"

\n" +" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n" +"

\n" +" " +msgstr "

\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

" + +#. 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\"" diff --git a/i18n/sl.po b/i18n/sl.po new file mode 100644 index 000000000..e7a20bcc2 --- /dev/null +++ b/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č , 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č \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 "" +"

\n" +" Record and track your partners' relations. Relations may be linked to other partners with a type either directly or inversely.\n" +"

\n" +" " +msgstr "

\n Beležite in sledite odnosom med partnerji. Odnosi se lahko povezani s partnerji direktno ali inverzno.\n

\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\"" diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 000000000..8aef17344 --- /dev/null +++ b/models/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Therp BV +# 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 diff --git a/models/res_partner.py b/models/res_partner.py new file mode 100644 index 000000000..3545a299c --- /dev/null +++ b/models/res_partner.py @@ -0,0 +1,172 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Therp BV +# 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' diff --git a/models/res_partner_relation.py b/models/res_partner_relation.py new file mode 100644 index 000000000..0176fe9b2 --- /dev/null +++ b/models/res_partner_relation.py @@ -0,0 +1,156 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Therp BV +# 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') + ) diff --git a/models/res_partner_relation_all.py b/models/res_partner_relation_all.py new file mode 100644 index 000000000..eeef17346 --- /dev/null +++ b/models/res_partner_relation_all.py @@ -0,0 +1,345 @@ +# -*- coding: utf-8 -*- +# © 2014-2016 Therp BV +# 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 diff --git a/models/res_partner_relation_type.py b/models/res_partner_relation_type.py new file mode 100644 index 000000000..5cfee5c6c --- /dev/null +++ b/models/res_partner_relation_type.py @@ -0,0 +1,175 @@ +# -*- coding: utf-8 -*- +# © 2013-2016 Therp BV +# 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) diff --git a/models/res_partner_relation_type_selection.py b/models/res_partner_relation_type_selection.py new file mode 100644 index 000000000..43ea80f94 --- /dev/null +++ b/models/res_partner_relation_type_selection.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- +# © 2014-2016 Therp BV +# 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() diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv new file mode 100644 index 000000000..45744e5d8 --- /dev/null +++ b/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 diff --git a/static/description/icon.png b/static/description/icon.png new file mode 100644 index 000000000..c6863a3e4 Binary files /dev/null and b/static/description/icon.png differ diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 000000000..272f6d49f --- /dev/null +++ b/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 diff --git a/tests/test_partner_relation.py b/tests/test_partner_relation.py new file mode 100644 index 000000000..b3ba3bd7b --- /dev/null +++ b/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()) diff --git a/tests/test_partner_relation_all.py b/tests/test_partner_relation_all.py new file mode 100644 index 000000000..e2c48f46a --- /dev/null +++ b/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']) diff --git a/tests/test_partner_relation_common.py b/tests/test_partner_relation_common.py new file mode 100644 index 000000000..94249c6c7 --- /dev/null +++ b/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, + }) diff --git a/tests/test_partner_search.py b/tests/test_partner_search.py new file mode 100644 index 000000000..153b35b78 --- /dev/null +++ b/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) diff --git a/views/menu.xml b/views/menu.xml new file mode 100644 index 000000000..b60842f67 --- /dev/null +++ b/views/menu.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + diff --git a/views/res_partner.xml b/views/res_partner.xml new file mode 100644 index 000000000..5085efb74 --- /dev/null +++ b/views/res_partner.xml @@ -0,0 +1,59 @@ + + + + + + partner_multi_relation.view_partner_filter + + res.partner + + + + + + + + + + + + + + partner_multi_relation.view_partner_form + + res.partner + + + + + + + + + + + diff --git a/views/res_partner_relation_all.xml b/views/res_partner_relation_all.xml new file mode 100644 index 000000000..6f529984f --- /dev/null +++ b/views/res_partner_relation_all.xml @@ -0,0 +1,96 @@ + + + + + + res.partner.relation.all + + + + + + + + + + + + + + res.partner.relation.all + + + + + + + + + + + + + + + + + + + + Relations + res.partner.relation.all + form + tree + + + +

+ Record and track your partners' relations. Relations may + be linked to other partners with a type either directly + or inversely. +

+
+
+ +
+
diff --git a/views/res_partner_relation_type.xml b/views/res_partner_relation_type.xml new file mode 100644 index 000000000..56f883959 --- /dev/null +++ b/views/res_partner_relation_type.xml @@ -0,0 +1,51 @@ + + + + res.partner.relation.type + + + + + + + + + + + + + + res.partner.relation.type + +
+ + + + + + + + + + + + + + + + + + + +
+
+
+
+