From 67836c63ff97d94dc7f10f08ddf0ae0e9c98062a Mon Sep 17 00:00:00 2001 From: campos Date: Tue, 17 Feb 2015 18:34:53 +0100 Subject: [PATCH 01/12] [ADD] . --- hr_commission/README.rst | 4 +++ hr_commission/__init__.py | 20 +++++++++++++ hr_commission/__openerp__.py | 37 +++++++++++++++++++++++++ hr_commission/i18n/hr_commission.pot | 32 +++++++++++++++++++++ hr_commission/models/__init__.py | 20 +++++++++++++ hr_commission/models/sale_agent.py | 12 ++++++++ hr_commission/views/sale_agent_view.xml | 16 +++++++++++ 7 files changed, 141 insertions(+) create mode 100644 hr_commission/README.rst create mode 100644 hr_commission/__init__.py create mode 100644 hr_commission/__openerp__.py create mode 100644 hr_commission/i18n/hr_commission.pot create mode 100644 hr_commission/models/__init__.py create mode 100644 hr_commission/models/sale_agent.py create mode 100644 hr_commission/views/sale_agent_view.xml diff --git a/hr_commission/README.rst b/hr_commission/README.rst new file mode 100644 index 000000000..ee5a32704 --- /dev/null +++ b/hr_commission/README.rst @@ -0,0 +1,4 @@ +HR Commission +================== + +This module links sale_commision with hr module. diff --git a/hr_commission/__init__.py b/hr_commission/__init__.py new file mode 100644 index 000000000..2053d71ba --- /dev/null +++ b/hr_commission/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################## +from . import models diff --git a/hr_commission/__openerp__.py b/hr_commission/__openerp__.py new file mode 100644 index 000000000..d26c81c2d --- /dev/null +++ b/hr_commission/__openerp__.py @@ -0,0 +1,37 @@ + +# -*- encoding: utf-8 -*- +############################################################################## +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +############################################################################## + +{ + 'name': 'HR commission', + 'version': '1.0', + 'author': 'Pexego', + "category": "Generic Modules/Sales & Purchases", + 'depends': ['sale_commission', 'hr'], + 'contributors': [ + "Davide Corio ", + "Joao Alfredo Gama Batista ", + "Sandy Carter ", + "Giorgio Borelli ", + "Daniel Campos ", + "Pedro M. Baeza ", + "Ana Juaristi "], + "data": ["views/sale_agent_view.xml"], + "active": True, + "installable": True, + "auto_install": True, +} diff --git a/hr_commission/i18n/hr_commission.pot b/hr_commission/i18n/hr_commission.pot new file mode 100644 index 000000000..7fd9c9202 --- /dev/null +++ b/hr_commission/i18n/hr_commission.pot @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_commission +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-02-17 16:05+0000\n" +"PO-Revision-Date: 2015-02-17 16:05+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: hr_commission +#: help:sale.agent,employee_id:0 +msgid "Employee associated to agent, is necessary for set an employee to settle commissions in wage." +msgstr "" + +#. module: hr_commission +#: field:sale.agent,employee_id:0 +msgid "Employee id" +msgstr "" + +#. module: hr_commission +#: model:ir.model,name:hr_commission.model_sale_agent +msgid "Sale agent" +msgstr "" + diff --git a/hr_commission/models/__init__.py b/hr_commission/models/__init__.py new file mode 100644 index 000000000..b552d0bdc --- /dev/null +++ b/hr_commission/models/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################## + +from . import sale_agent diff --git a/hr_commission/models/sale_agent.py b/hr_commission/models/sale_agent.py new file mode 100644 index 000000000..abc1504ca --- /dev/null +++ b/hr_commission/models/sale_agent.py @@ -0,0 +1,12 @@ + +from openerp import models, fields + + +class sale_agent(models.Model): + _inherit = "sale.agent" + + employee_id = fields.Many2one( + "hr.employee", + help="Employee associated to agent, is necessary for set an employee " + "to settle commissions in wage." + ) diff --git a/hr_commission/views/sale_agent_view.xml b/hr_commission/views/sale_agent_view.xml new file mode 100644 index 000000000..2bdda0066 --- /dev/null +++ b/hr_commission/views/sale_agent_view.xml @@ -0,0 +1,16 @@ + + + + + saleagent.info.form.hr + sale.agent + + + + + + + + + From d18b02c29d1363463c67fd12b0fd675efd338320 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 19 Feb 2015 10:12:38 +0100 Subject: [PATCH 02/12] [IMP] *_commission: Total refactorization of the modules --- hr_commission/README.rst | 47 +- hr_commission/__openerp__.py | 30 +- hr_commission/i18n/es.po | 37 + hr_commission/i18n/hr_commission.pot | 32 - hr_commission/models/__init__.py | 2 +- hr_commission/models/res_partner.py | 55 + hr_commission/models/sale_agent.py | 12 - hr_commission/static/description/icon.png | Bin 0 -> 23824 bytes hr_commission/static/description/icon.svg | 2965 +++++++++++++++++++++ hr_commission/views/res_partner_view.xml | 18 + hr_commission/views/sale_agent_view.xml | 16 - 11 files changed, 3137 insertions(+), 77 deletions(-) create mode 100644 hr_commission/i18n/es.po delete mode 100644 hr_commission/i18n/hr_commission.pot create mode 100644 hr_commission/models/res_partner.py delete mode 100644 hr_commission/models/sale_agent.py create mode 100644 hr_commission/static/description/icon.png create mode 100644 hr_commission/static/description/icon.svg create mode 100644 hr_commission/views/res_partner_view.xml delete mode 100644 hr_commission/views/sale_agent_view.xml diff --git a/hr_commission/README.rst b/hr_commission/README.rst index ee5a32704..851c9f07a 100644 --- a/hr_commission/README.rst +++ b/hr_commission/README.rst @@ -1,4 +1,47 @@ -HR Commission +Commissions in HR ================== -This module links sale_commision with hr module. +This module links sale_commission with hr module. For now, it only adds another +type of agent whose commissions are not invoiced in the corresponding wizard. + +Known issues / Roadmap +====================== +* Add demo data. +* Restore all 6.1 functionality about linking with wages. + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback +`here `_. + + +Credits +======= + +Contributors +------------ +* Pedro M. Baeza + +Icon +---- +* http://commons.wikimedia.org/wiki/File:Percent_18e.svg +* https://openclipart.org/detail/43969/pile-of-golden-coins-by-j_alves + +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/hr_commission/__openerp__.py b/hr_commission/__openerp__.py index d26c81c2d..faee4b54f 100644 --- a/hr_commission/__openerp__.py +++ b/hr_commission/__openerp__.py @@ -1,6 +1,8 @@ - # -*- encoding: utf-8 -*- ############################################################################## +# +# Copyright (C) 2015 Pedro M. Baeza () +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or @@ -17,21 +19,21 @@ ############################################################################## { - 'name': 'HR commission', - 'version': '1.0', - 'author': 'Pexego', - "category": "Generic Modules/Sales & Purchases", - 'depends': ['sale_commission', 'hr'], + 'name': 'HR commissions', + 'version': '8.0.1.0.0', + 'author': 'Serv. Tecnol. Avanzados - Pedro M. Baeza', + "category": "Human Resources", + 'depends': [ + 'sale_commission', + 'hr' + ], + 'license': 'AGPL-3', 'contributors': [ - "Davide Corio ", - "Joao Alfredo Gama Batista ", - "Sandy Carter ", - "Giorgio Borelli ", - "Daniel Campos ", "Pedro M. Baeza ", - "Ana Juaristi "], - "data": ["views/sale_agent_view.xml"], - "active": True, + ], + "data": [ + "views/res_partner_view.xml", + ], "installable": True, "auto_install": True, } diff --git a/hr_commission/i18n/es.po b/hr_commission/i18n/es.po new file mode 100644 index 000000000..8be8b948b --- /dev/null +++ b/hr_commission/i18n/es.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_commission +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-02-19 08:46+0000\n" +"PO-Revision-Date: 2015-02-19 08:46+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: hr_commission +#: code:addons/hr_commission/models/res_partner.py:47 +#, python-format +msgid "There must one (and only one) employee linked to this partner. To do this, go to 'Human Resources' and check 'Employees'" +msgstr "Debe haber un (y sólo un) empleado enlazado a esta empresa. Para hacer esto, vaya a 'Recursos humanos' y compruebe la sección 'Empleados'" + +#. module: hr_commission +#: field:res.partner,users:0 +msgid "Users" +msgstr "Usuarios" + +#. module: hr_commission +#: field:res.partner,employee:0 +msgid "Employee" +msgstr "Empleado" + +#. module: sale_commission +#: selection:res.partner,agent_type:0 +msgid "Salesman (employee)" +msgstr "Comercial (empleado)" diff --git a/hr_commission/i18n/hr_commission.pot b/hr_commission/i18n/hr_commission.pot deleted file mode 100644 index 7fd9c9202..000000000 --- a/hr_commission/i18n/hr_commission.pot +++ /dev/null @@ -1,32 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * hr_commission -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-17 16:05+0000\n" -"PO-Revision-Date: 2015-02-17 16:05+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: hr_commission -#: help:sale.agent,employee_id:0 -msgid "Employee associated to agent, is necessary for set an employee to settle commissions in wage." -msgstr "" - -#. module: hr_commission -#: field:sale.agent,employee_id:0 -msgid "Employee id" -msgstr "" - -#. module: hr_commission -#: model:ir.model,name:hr_commission.model_sale_agent -msgid "Sale agent" -msgstr "" - diff --git a/hr_commission/models/__init__.py b/hr_commission/models/__init__.py index b552d0bdc..39e41f93f 100644 --- a/hr_commission/models/__init__.py +++ b/hr_commission/models/__init__.py @@ -17,4 +17,4 @@ # ############################################################################## -from . import sale_agent +from . import res_partner diff --git a/hr_commission/models/res_partner.py b/hr_commission/models/res_partner.py new file mode 100644 index 000000000..347b8f1e7 --- /dev/null +++ b/hr_commission/models/res_partner.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2015 Avanzosc () +# Copyright (C) 2015 Pedro M. Baeza () +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################## +from openerp import models, fields, api, exceptions, _ + + +class ResPartner(models.Model): + """Add some fields related to commissions""" + _inherit = "res.partner" + + agent_type = fields.Selection( + selection_add=[("salesman", "Salesman (employee)")]) + employee = fields.Many2one( + comodel_name="hr.employee", compute="_get_employee") + users = fields.One2many(comodel_name="res.users", + inverse_name="partner_id") + + @api.one + @api.depends('users') + def _get_employee(self): + self.employee = False + if len(self.users) == 1 and len(self.users[0].employee_ids) == 1: + self.employee = self.users[0].employee_ids[0] + + @api.constrains('agent_type', 'employee') + def _check_employee(self): + if self.agent_type == 'salesman' and not self.employee: + raise exceptions.ValidationError( + _("There must one (and only one) employee linked to this " + "partner. To do this, go to 'Human Resources' and check " + "'Employees'")) + + @api.onchange('agent_type') + def onchange_agent_type(self): + if self.agent_type == 'salesman': + self.supplier = False + return super(ResPartner, self).onchange_agent_type() diff --git a/hr_commission/models/sale_agent.py b/hr_commission/models/sale_agent.py deleted file mode 100644 index abc1504ca..000000000 --- a/hr_commission/models/sale_agent.py +++ /dev/null @@ -1,12 +0,0 @@ - -from openerp import models, fields - - -class sale_agent(models.Model): - _inherit = "sale.agent" - - employee_id = fields.Many2one( - "hr.employee", - help="Employee associated to agent, is necessary for set an employee " - "to settle commissions in wage." - ) diff --git a/hr_commission/static/description/icon.png b/hr_commission/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..50f6af42ceacde597a656754b699ac23eb109038 GIT binary patch literal 23824 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 v$xkXg-~a#F` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + Pile of Golden Coins + 2010-04-09T03:27:45 + A pile of hypothetical golden coins, drawn in Inkscape. + https://openclipart.org/detail/43969/pile-of-golden-coins-by-j_alves + + + J_Alves + + + + + coin + currency + gold + money + thaler + + + + + + + + + + + diff --git a/hr_commission/views/res_partner_view.xml b/hr_commission/views/res_partner_view.xml new file mode 100644 index 000000000..04237bed7 --- /dev/null +++ b/hr_commission/views/res_partner_view.xml @@ -0,0 +1,18 @@ + + + + + + res.partner.form.agent.hr + res.partner + + + + + + + + + + diff --git a/hr_commission/views/sale_agent_view.xml b/hr_commission/views/sale_agent_view.xml deleted file mode 100644 index 2bdda0066..000000000 --- a/hr_commission/views/sale_agent_view.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - saleagent.info.form.hr - sale.agent - - - - - - - - - From d4e5f0c3829532efb6ba4f7af032092f45951604 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 6 Aug 2018 12:17:35 +0200 Subject: [PATCH 03/12] [MIG] hr_commission: Migration to 11.0 --- hr_commission/README.rst | 71 +++- hr_commission/__init__.py | 19 - hr_commission/__manifest__.py | 19 + hr_commission/__openerp__.py | 39 -- hr_commission/i18n/es.po | 44 +- hr_commission/i18n/hr_commission.pot | 39 ++ hr_commission/models/__init__.py | 20 +- hr_commission/models/hr_employee.py | 19 + hr_commission/models/res_partner.py | 58 +-- hr_commission/readme/CONTRIBUTORS.rst | 3 + hr_commission/readme/DESCRIPTION.rst | 2 + hr_commission/readme/ROADMAP.rst | 2 + hr_commission/static/description/index.html | 431 ++++++++++++++++++++ hr_commission/tests/__init__.py | 1 + hr_commission/tests/test_hr_commission.py | 33 ++ hr_commission/views/res_partner_view.xml | 26 +- 16 files changed, 661 insertions(+), 165 deletions(-) create mode 100644 hr_commission/__manifest__.py delete mode 100644 hr_commission/__openerp__.py create mode 100644 hr_commission/i18n/hr_commission.pot create mode 100644 hr_commission/models/hr_employee.py create mode 100644 hr_commission/readme/CONTRIBUTORS.rst create mode 100644 hr_commission/readme/DESCRIPTION.rst create mode 100644 hr_commission/readme/ROADMAP.rst create mode 100644 hr_commission/static/description/index.html create mode 100644 hr_commission/tests/__init__.py create mode 100644 hr_commission/tests/test_hr_commission.py diff --git a/hr_commission/README.rst b/hr_commission/README.rst index 851c9f07a..91aea289f 100644 --- a/hr_commission/README.rst +++ b/hr_commission/README.rst @@ -1,47 +1,82 @@ -Commissions in HR -================== +============== +HR commissions +============== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcommission-lightgray.png?logo=github + :target: https://github.com/OCA/commission/tree/11.0/hr_commission + :alt: OCA/commission +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/commission-11-0/commission-11-0-hr_commission + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/165/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| This module links sale_commission with hr module. For now, it only adds another type of agent whose commissions are not invoiced in the corresponding wizard. +**Table of contents** + +.. contents:: + :local: + Known issues / Roadmap ====================== -* Add demo data. -* Restore all 6.1 functionality about linking with wages. +* Add demo data. +* Link settlements with wages. Bug Tracker =========== Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed feedback -`here `_. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. +Do not contact contributors directly about support or help with technical issues. Credits ======= +Authors +~~~~~~~ + +* Tecnativa + Contributors ------------- -* Pedro M. Baeza +~~~~~~~~~~~~ -Icon ----- -* http://commons.wikimedia.org/wiki/File:Percent_18e.svg -* https://openclipart.org/detail/43969/pile-of-golden-coins-by-j_alves +* `Tecnativa `_ -Maintainer ----------- + * Pedro M. Baeza -.. image:: http://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: http://odoo-community.org +Maintainers +~~~~~~~~~~~ This module is maintained by the OCA. +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + 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. +This module is part of the `OCA/commission `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_commission/__init__.py b/hr_commission/__init__.py index 2053d71ba..0650744f6 100644 --- a/hr_commission/__init__.py +++ b/hr_commission/__init__.py @@ -1,20 +1 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -############################################################################## from . import models diff --git a/hr_commission/__manifest__.py b/hr_commission/__manifest__.py new file mode 100644 index 000000000..4f8e8f23d --- /dev/null +++ b/hr_commission/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2015-2018 Tecnativa - Pedro M. Baeza +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html + +{ + 'name': 'HR commissions', + 'version': '11.0.1.0.0', + 'author': 'Tecnativa,' + 'Odoo Community Association (OCA)', + "category": "Commissions", + 'depends': [ + 'sale_commission', + 'hr' + ], + 'license': 'AGPL-3', + "data": [ + "views/res_partner_view.xml", + ], + "installable": True, +} diff --git a/hr_commission/__openerp__.py b/hr_commission/__openerp__.py deleted file mode 100644 index faee4b54f..000000000 --- a/hr_commission/__openerp__.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2015 Pedro M. Baeza () -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -############################################################################## - -{ - 'name': 'HR commissions', - 'version': '8.0.1.0.0', - 'author': 'Serv. Tecnol. Avanzados - Pedro M. Baeza', - "category": "Human Resources", - 'depends': [ - 'sale_commission', - 'hr' - ], - 'license': 'AGPL-3', - 'contributors': [ - "Pedro M. Baeza ", - ], - "data": [ - "views/res_partner_view.xml", - ], - "installable": True, - "auto_install": True, -} diff --git a/hr_commission/i18n/es.po b/hr_commission/i18n/es.po index 8be8b948b..01f4b0e51 100644 --- a/hr_commission/i18n/es.po +++ b/hr_commission/i18n/es.po @@ -1,37 +1,45 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * hr_commission +# * hr_commission # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-19 08:46+0000\n" -"PO-Revision-Date: 2015-02-19 08:46+0000\n" +"POT-Creation-Date: 2018-08-07 11:26+0000\n" +"PO-Revision-Date: 2018-08-07 11:26+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" #. module: hr_commission -#: code:addons/hr_commission/models/res_partner.py:47 -#, python-format -msgid "There must one (and only one) employee linked to this partner. To do this, go to 'Human Resources' and check 'Employees'" -msgstr "Debe haber un (y sólo un) empleado enlazado a esta empresa. Para hacer esto, vaya a 'Recursos humanos' y compruebe la sección 'Empleados'" - -#. module: hr_commission -#: field:res.partner,users:0 -msgid "Users" -msgstr "Usuarios" +#: model:ir.model,name:hr_commission.model_res_partner +msgid "Contact" +msgstr "Contacto" #. module: hr_commission -#: field:res.partner,employee:0 +#: model:ir.model,name:hr_commission.model_hr_employee +#: model:ir.model.fields,field_description:hr_commission.field_res_partner_employee_id +#: model:ir.model.fields,field_description:hr_commission.field_res_users_employee_id msgid "Employee" msgstr "Empleado" -#. module: sale_commission -#: selection:res.partner,agent_type:0 -msgid "Salesman (employee)" -msgstr "Comercial (empleado)" +#. module: hr_commission +#: code:addons/hr_commission/models/res_partner.py:30 +#, python-format +msgid "" +"There must one (and only one) employee linked to this partner. To do this, " +"go to 'Human Resources' and check 'Employees'" +msgstr "" +"Debe haber un (y sólo un) empleado enlazado a esta empresa. Para hacer esto, " +"vaya a 'Recursos humanos' y compruebe la sección 'Empleados'" + +#. module: hr_commission +#: code:addons/hr_commission/models/hr_employee.py:16 +#, python-format +msgid "You can't remove the user, as it's linked to a commission agent." +msgstr "No puede eliminar el usuario, ya que está enlazado a un comisionista." diff --git a/hr_commission/i18n/hr_commission.pot b/hr_commission/i18n/hr_commission.pot new file mode 100644 index 000000000..1c999b319 --- /dev/null +++ b/hr_commission/i18n/hr_commission.pot @@ -0,0 +1,39 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_commission +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: hr_commission +#: model:ir.model,name:hr_commission.model_res_partner +msgid "Contact" +msgstr "" + +#. module: hr_commission +#: model:ir.model,name:hr_commission.model_hr_employee +#: model:ir.model.fields,field_description:hr_commission.field_res_partner_employee_id +#: model:ir.model.fields,field_description:hr_commission.field_res_users_employee_id +msgid "Employee" +msgstr "" + +#. module: hr_commission +#: code:addons/hr_commission/models/res_partner.py:30 +#, python-format +msgid "There must one (and only one) employee linked to this partner. To do this, go to 'Human Resources' and check 'Employees'" +msgstr "" + +#. module: hr_commission +#: code:addons/hr_commission/models/hr_employee.py:16 +#, python-format +msgid "You can't remove the user, as it's linked to a commission agent." +msgstr "" + diff --git a/hr_commission/models/__init__.py b/hr_commission/models/__init__.py index 39e41f93f..625892201 100644 --- a/hr_commission/models/__init__.py +++ b/hr_commission/models/__init__.py @@ -1,20 +1,2 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -############################################################################## - +from . import hr_employee from . import res_partner diff --git a/hr_commission/models/hr_employee.py b/hr_commission/models/hr_employee.py new file mode 100644 index 000000000..819175de9 --- /dev/null +++ b/hr_commission/models/hr_employee.py @@ -0,0 +1,19 @@ +# Copyright 2018 Tecnativa - Pedro M. Baeza +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html + +from odoo import _, exceptions, models + + +class HrEmployee(models.Model): + _inherit = "hr.employee" + + def write(self, vals): + """Check if there's an agent linked to that employee.""" + if 'user_id' in vals and not vals['user_id']: + for emp in self: + if emp.user_id.partner_id.agent_type == 'salesman': + raise exceptions.ValidationError( + _("You can't remove the user, as it's linked to " + "a commission agent.") + ) + return super().write(vals) diff --git a/hr_commission/models/res_partner.py b/hr_commission/models/res_partner.py index 347b8f1e7..f9e462c7e 100644 --- a/hr_commission/models/res_partner.py +++ b/hr_commission/models/res_partner.py @@ -1,55 +1,37 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2015 Avanzosc () -# Copyright (C) 2015 Pedro M. Baeza () -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp import models, fields, api, exceptions, _ +# Copyright 2015-2018 Tecnativa - Pedro M. Baeza +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html + +from odoo import _, api, fields, exceptions, models class ResPartner(models.Model): - """Add some fields related to commissions""" _inherit = "res.partner" agent_type = fields.Selection( - selection_add=[("salesman", "Salesman (employee)")]) - employee = fields.Many2one( - comodel_name="hr.employee", compute="_get_employee") - users = fields.One2many(comodel_name="res.users", - inverse_name="partner_id") + selection_add=[("salesman", "Salesman (employee)")], + ) + employee_id = fields.Many2one( + comodel_name="hr.employee", + compute="_compute_employee_id", + compute_sudo=True, + ) - @api.one - @api.depends('users') - def _get_employee(self): - self.employee = False - if len(self.users) == 1 and len(self.users[0].employee_ids) == 1: - self.employee = self.users[0].employee_ids[0] + @api.depends('user_ids') + def _compute_employee_id(self): + for partner in self: + if (len(partner.user_ids) == 1 and + len(partner.user_ids[0].employee_ids) == 1): + partner.employee_id = partner.user_ids[0].employee_ids[0] - @api.constrains('agent_type', 'employee') + @api.constrains('agent_type') def _check_employee(self): - if self.agent_type == 'salesman' and not self.employee: + if self.agent_type == 'salesman' and not self.employee_id: raise exceptions.ValidationError( _("There must one (and only one) employee linked to this " "partner. To do this, go to 'Human Resources' and check " "'Employees'")) @api.onchange('agent_type') - def onchange_agent_type(self): + def onchange_agent_type_hr_commission(self): if self.agent_type == 'salesman': self.supplier = False - return super(ResPartner, self).onchange_agent_type() diff --git a/hr_commission/readme/CONTRIBUTORS.rst b/hr_commission/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..526b471bb --- /dev/null +++ b/hr_commission/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Tecnativa `_ + + * Pedro M. Baeza diff --git a/hr_commission/readme/DESCRIPTION.rst b/hr_commission/readme/DESCRIPTION.rst new file mode 100644 index 000000000..bc88dfe7d --- /dev/null +++ b/hr_commission/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module links sale_commission with hr module. For now, it only adds another +type of agent whose commissions are not invoiced in the corresponding wizard. diff --git a/hr_commission/readme/ROADMAP.rst b/hr_commission/readme/ROADMAP.rst new file mode 100644 index 000000000..5a24916f4 --- /dev/null +++ b/hr_commission/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +* Add demo data. +* Link settlements with wages. diff --git a/hr_commission/static/description/index.html b/hr_commission/static/description/index.html new file mode 100644 index 000000000..91b320d8d --- /dev/null +++ b/hr_commission/static/description/index.html @@ -0,0 +1,431 @@ + + + + + + +HR commissions + + + +
+

HR commissions

+ + +

Beta License: AGPL-3 OCA/commission Translate me on Weblate Try me on Runbot

+

This module links sale_commission with hr module. For now, it only adds another +type of agent whose commissions are not invoiced in the corresponding wizard.

+

Table of contents

+ +
+

Known issues / Roadmap

+
    +
  • Add demo data.
  • +
  • Link settlements with wages.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

This module is part of the OCA/commission project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/hr_commission/tests/__init__.py b/hr_commission/tests/__init__.py new file mode 100644 index 000000000..c8eaa6127 --- /dev/null +++ b/hr_commission/tests/__init__.py @@ -0,0 +1 @@ +from . import test_hr_commission diff --git a/hr_commission/tests/test_hr_commission.py b/hr_commission/tests/test_hr_commission.py new file mode 100644 index 000000000..f0e3e169e --- /dev/null +++ b/hr_commission/tests/test_hr_commission.py @@ -0,0 +1,33 @@ +# Copyright 2018 Tecnativa - Pedro M. Baeza +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html + +from odoo import exceptions +from odoo.tests import common + + +class TestHrCommission(common.TransactionCase): + def setUp(self): + super().setUp() + self.employee = self.env['hr.employee'].create({ + 'name': 'Test employee', + }) + self.user = self.env['res.users'].create({ + 'name': 'Test user', + 'login': 'test_hr_commission@example.org', + }) + self.partner = self.user.partner_id + + def test_hr_commission(self): + self.assertFalse(self.partner.employee_id) + with self.assertRaises(exceptions.ValidationError): + self.partner.agent_type = 'salesman' + self.employee.user_id = self.user.id + self.assertEqual(self.partner.employee_id, self.employee) + # This shouldn't trigger exception now + self.partner.agent_type = 'salesman' + self.partner.supplier = True + self.partner.onchange_agent_type_hr_commission() + self.assertFalse(self.partner.supplier) + # Check that un-assigning user in employee, it raises the constraint + with self.assertRaises(exceptions.ValidationError): + self.employee.user_id = False diff --git a/hr_commission/views/res_partner_view.xml b/hr_commission/views/res_partner_view.xml index 04237bed7..07c23beb6 100644 --- a/hr_commission/views/res_partner_view.xml +++ b/hr_commission/views/res_partner_view.xml @@ -1,18 +1,16 @@ - - + - - res.partner.form.agent.hr - res.partner - - - - - + + res.partner + + + + - + + - - + From 9e8224ddebdc485677eeab506b367906c1b16c32 Mon Sep 17 00:00:00 2001 From: kong Date: Mon, 1 Jul 2019 09:59:43 +0700 Subject: [PATCH 04/12] [12.0][MIG] hr_commission --- hr_commission/README.rst | 12 ++-- hr_commission/__manifest__.py | 2 +- hr_commission/i18n/es.po | 35 ++++++++--- hr_commission/i18n/hr_commission.pot | 28 +++++++-- hr_commission/i18n/pt_BR.po | 64 +++++++++++++++++++++ hr_commission/models/res_partner.py | 1 + hr_commission/readme/CONTRIBUTORS.rst | 2 + hr_commission/static/description/index.html | 9 +-- 8 files changed, 132 insertions(+), 21 deletions(-) create mode 100644 hr_commission/i18n/pt_BR.po diff --git a/hr_commission/README.rst b/hr_commission/README.rst index 91aea289f..8352f939c 100644 --- a/hr_commission/README.rst +++ b/hr_commission/README.rst @@ -14,13 +14,13 @@ HR commissions :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcommission-lightgray.png?logo=github - :target: https://github.com/OCA/commission/tree/11.0/hr_commission + :target: https://github.com/OCA/commission/tree/12.0/hr_commission :alt: OCA/commission .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/commission-11-0/commission-11-0-hr_commission + :target: https://translation.odoo-community.org/projects/commission-12-0/commission-12-0-hr_commission :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/165/11.0 + :target: https://runbot.odoo-community.org/runbot/165/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -45,7 +45,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -64,6 +64,8 @@ Contributors * Pedro M. Baeza +* Rattapong C. + Maintainers ~~~~~~~~~~~ @@ -77,6 +79,6 @@ 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. -This module is part of the `OCA/commission `_ project on GitHub. +This module is part of the `OCA/commission `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_commission/__manifest__.py b/hr_commission/__manifest__.py index 4f8e8f23d..dc20b9b6e 100644 --- a/hr_commission/__manifest__.py +++ b/hr_commission/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'HR commissions', - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'author': 'Tecnativa,' 'Odoo Community Association (OCA)', "category": "Commissions", diff --git a/hr_commission/i18n/es.po b/hr_commission/i18n/es.po index 01f4b0e51..2757fce68 100644 --- a/hr_commission/i18n/es.po +++ b/hr_commission/i18n/es.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-08-07 11:26+0000\n" -"PO-Revision-Date: 2018-08-07 11:26+0000\n" -"Last-Translator: <>\n" +"PO-Revision-Date: 2020-03-06 20:13+0000\n" +"Last-Translator: Dept. Técnico \n" "Language-Team: \n" -"Language: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" #. module: hr_commission #: model:ir.model,name:hr_commission.model_res_partner @@ -23,13 +24,27 @@ msgstr "Contacto" #. module: hr_commission #: model:ir.model,name:hr_commission.model_hr_employee -#: model:ir.model.fields,field_description:hr_commission.field_res_partner_employee_id -#: model:ir.model.fields,field_description:hr_commission.field_res_users_employee_id msgid "Employee" msgstr "Empleado" #. module: hr_commission -#: code:addons/hr_commission/models/res_partner.py:30 +#: model:ir.model.fields,field_description:hr_commission.field_res_partner__employee_id +#: model:ir.model.fields,field_description:hr_commission.field_res_users__employee_id +msgid "Employee." +msgstr "Empleado." + +#. module: hr_commission +#: selection:res.partner,agent_type:0 +msgid "External agent" +msgstr "" + +#. module: hr_commission +#: selection:res.partner,agent_type:0 +msgid "Salesman (employee)" +msgstr "" + +#. module: hr_commission +#: code:addons/hr_commission/models/res_partner.py:31 #, python-format msgid "" "There must one (and only one) employee linked to this partner. To do this, " @@ -38,6 +53,12 @@ msgstr "" "Debe haber un (y sólo un) empleado enlazado a esta empresa. Para hacer esto, " "vaya a 'Recursos humanos' y compruebe la sección 'Empleados'" +#. module: hr_commission +#: model:ir.model.fields,field_description:hr_commission.field_res_partner__agent_type +#: model:ir.model.fields,field_description:hr_commission.field_res_users__agent_type +msgid "Type" +msgstr "" + #. module: hr_commission #: code:addons/hr_commission/models/hr_employee.py:16 #, python-format diff --git a/hr_commission/i18n/hr_commission.pot b/hr_commission/i18n/hr_commission.pot index 1c999b319..fa216c677 100644 --- a/hr_commission/i18n/hr_commission.pot +++ b/hr_commission/i18n/hr_commission.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -20,17 +20,37 @@ msgstr "" #. module: hr_commission #: model:ir.model,name:hr_commission.model_hr_employee -#: model:ir.model.fields,field_description:hr_commission.field_res_partner_employee_id -#: model:ir.model.fields,field_description:hr_commission.field_res_users_employee_id msgid "Employee" msgstr "" #. module: hr_commission -#: code:addons/hr_commission/models/res_partner.py:30 +#: model:ir.model.fields,field_description:hr_commission.field_res_partner__employee_id +#: model:ir.model.fields,field_description:hr_commission.field_res_users__employee_id +msgid "Employee." +msgstr "" + +#. module: hr_commission +#: selection:res.partner,agent_type:0 +msgid "External agent" +msgstr "" + +#. module: hr_commission +#: selection:res.partner,agent_type:0 +msgid "Salesman (employee)" +msgstr "" + +#. module: hr_commission +#: code:addons/hr_commission/models/res_partner.py:31 #, python-format msgid "There must one (and only one) employee linked to this partner. To do this, go to 'Human Resources' and check 'Employees'" msgstr "" +#. module: hr_commission +#: model:ir.model.fields,field_description:hr_commission.field_res_partner__agent_type +#: model:ir.model.fields,field_description:hr_commission.field_res_users__agent_type +msgid "Type" +msgstr "" + #. module: hr_commission #: code:addons/hr_commission/models/hr_employee.py:16 #, python-format diff --git a/hr_commission/i18n/pt_BR.po b/hr_commission/i18n/pt_BR.po new file mode 100644 index 000000000..35f522590 --- /dev/null +++ b/hr_commission/i18n/pt_BR.po @@ -0,0 +1,64 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_commission +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-02-20 16:53+0000\n" +"Last-Translator: Marcel Savegnago \n" +"Language-Team: none\n" +"Language: pt_BR\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: Weblate 3.10\n" + +#. module: hr_commission +#: model:ir.model,name:hr_commission.model_res_partner +msgid "Contact" +msgstr "Contato" + +#. module: hr_commission +#: model:ir.model,name:hr_commission.model_hr_employee +msgid "Employee" +msgstr "Funcionario" + +#. module: hr_commission +#: model:ir.model.fields,field_description:hr_commission.field_res_partner__employee_id +#: model:ir.model.fields,field_description:hr_commission.field_res_users__employee_id +msgid "Employee." +msgstr "Funcionario." + +#. module: hr_commission +#: selection:res.partner,agent_type:0 +msgid "External agent" +msgstr "Agente externo" + +#. module: hr_commission +#: selection:res.partner,agent_type:0 +msgid "Salesman (employee)" +msgstr "Vendedor (funcionário)" + +#. module: hr_commission +#: code:addons/hr_commission/models/res_partner.py:31 +#, python-format +msgid "There must one (and only one) employee linked to this partner. To do this, go to 'Human Resources' and check 'Employees'" +msgstr "" +"Deve haver um (e apenas um) funcionário ligado a este parceiro. Para fazer " +"isso, vá para 'Recursos Humanos' e verifique 'Funcionários'" + +#. module: hr_commission +#: model:ir.model.fields,field_description:hr_commission.field_res_partner__agent_type +#: model:ir.model.fields,field_description:hr_commission.field_res_users__agent_type +msgid "Type" +msgstr "Tipo" + +#. module: hr_commission +#: code:addons/hr_commission/models/hr_employee.py:16 +#, python-format +msgid "You can't remove the user, as it's linked to a commission agent." +msgstr "" +"Você não pode remover o usuário, pois está ligado a um agente da comissão." diff --git a/hr_commission/models/res_partner.py b/hr_commission/models/res_partner.py index f9e462c7e..69b18c40b 100644 --- a/hr_commission/models/res_partner.py +++ b/hr_commission/models/res_partner.py @@ -11,6 +11,7 @@ class ResPartner(models.Model): selection_add=[("salesman", "Salesman (employee)")], ) employee_id = fields.Many2one( + string="Employee.", comodel_name="hr.employee", compute="_compute_employee_id", compute_sudo=True, diff --git a/hr_commission/readme/CONTRIBUTORS.rst b/hr_commission/readme/CONTRIBUTORS.rst index 526b471bb..4b4cb4ed6 100644 --- a/hr_commission/readme/CONTRIBUTORS.rst +++ b/hr_commission/readme/CONTRIBUTORS.rst @@ -1,3 +1,5 @@ * `Tecnativa `_ * Pedro M. Baeza + +* Rattapong C. diff --git a/hr_commission/static/description/index.html b/hr_commission/static/description/index.html index 91b320d8d..61e038e4c 100644 --- a/hr_commission/static/description/index.html +++ b/hr_commission/static/description/index.html @@ -3,7 +3,7 @@ - + HR commissions