Skip to content

Commit

Permalink
Merge PR #2602 into 16.0
Browse files Browse the repository at this point in the history
Signed-off-by pedrobaeza
  • Loading branch information
OCA-git-bot committed Aug 8, 2023
2 parents bdb0d9e + b17f10c commit 84f015e
Show file tree
Hide file tree
Showing 24 changed files with 1,370 additions and 0 deletions.
148 changes: 148 additions & 0 deletions sales_team_security/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
===============================================
Sales documents permissions by channels (teams)
===============================================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
:alt: Production/Stable
.. |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%2Fsale--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/sale-workflow/tree/16.0/sales_team_security
:alt: OCA/sale-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sales_team_security
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/167/16.0
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|

This module adds a new "Sale" group called "User: Team documents", that
includes the proper permissions for showing only the information related to
that user sale team (having assigned that team/channel or no team at all,
independently from the assigned salesman):

* Contacts.
* Quotations/Sales Orders (implemented in sales_team_security_sale)
* Leads/Opportunities (implemented in sales_team_security_crm)

It also handles the propagation of the sales team from commercial partners to
the contacts, which standard doesn't do.

It also handles the sync (auto-creation and remove) of followers in company partners
and childs of them according to salesmans. Any example about it:
- Partner company > Salesman: Admin
- Partner company, Contact 1 > Without salesman
- Partner company, Contact 2 > Salesman: Demo
All these partners have these followers: Admin + Demo

And finally, there are rules for partners to be restricted to the own ones for
the group "User: Own Documents Only" for being coherent with the permission
scheme. Someone with this permission will see:

- Contacts without salesman nor team assigned.
- Contacts without salesman assigned, but the same team.
- Contacts with them as salesman, independently from the team.
- Contacts with them as follower.

For keeping consistent accesses, followers of the main and shipping/invoice
contacts are synced according the salesman of the children contacts

**Table of contents**

.. contents::
:local:

Installation
============

At installation time, this module sets in all the contacts that have the sales
team empty the sales team of the parent, and sync followers in parent contacts
and invoice/shipping addresses. If you have a lot of contacts, this
operation can take a while.

Configuration
=============

#. Go to *Configuration > Users & Companies > Users*.
#. Open or create a user.
#. On the section "Sale", select "User: Team documents".

Known issues / Roadmap
======================

* This module modifies sales security groups hierarchy, so any other module
doing something similar might conflict with this one.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-workflow/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 <https://github.com/OCA/sale-workflow/issues/new?body=module:%20sales_team_security%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

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

Credits
=======

Authors
~~~~~~~

* Tecnativa

Contributors
~~~~~~~~~~~~

* `Tecnativa <https://www.tecnativa.com>`__:

* Pedro M. Baeza
* Víctor Martínez
* César A. Sánchez

* `Guadaltech <https://www.guadaltech.es>`__:

* Ramón Bajona

* Iván Todorovich <[email protected]>

* `Pesol <https://www.pesol.es>`__:

* Jonathan Oscategui Taza <[email protected]>

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.

.. |maintainer-pedrobaeza| image:: https://github.com/pedrobaeza.png?size=40px
:target: https://github.com/pedrobaeza
:alt: pedrobaeza
.. |maintainer-ivantodorovich| image:: https://github.com/ivantodorovich.png?size=40px
:target: https://github.com/ivantodorovich
:alt: ivantodorovich

Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-pedrobaeza| |maintainer-ivantodorovich|

This module is part of the `OCA/sale-workflow <https://github.com/OCA/sale-workflow/tree/16.0/sales_team_security>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
4 changes: 4 additions & 0 deletions sales_team_security/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import models
from .hooks import post_init_hook, uninstall_hook
19 changes: 19 additions & 0 deletions sales_team_security/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright 2016-2020 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "Sales documents permissions by channels (teams)",
"summary": "New group for seeing only sales channel's documents",
"version": "16.0.1.0.0",
"category": "Sales",
"website": "https://github.com/OCA/sale-workflow",
"author": "Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"installable": True,
"development_status": "Production/Stable",
"maintainers": ["pedrobaeza", "ivantodorovich"],
"depends": ["sales_team"],
"data": ["security/sales_team_security.xml", "views/res_partner_view.xml"],
"post_init_hook": "post_init_hook",
"uninstall_hook": "uninstall_hook",
}
46 changes: 46 additions & 0 deletions sales_team_security/hooks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Copyright 2018-2016 Tecnativa - Pedro M. Baeza
# Copyright 2020 - Iván Todorovich
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html

from odoo import SUPERUSER_ID, api


def post_init_hook(cr, registry):
"""At installation time, propagate the parent sales team to the children
contacts that have this field empty, as it's supposed that the intention
is to have the same.
"""
cr.execute(
"""UPDATE res_partner
SET team_id=parent.team_id
FROM res_partner AS parent
WHERE parent.team_id IS NOT NULL
AND res_partner.parent_id = parent.id
AND res_partner.team_id IS NULL"""
)


def uninstall_hook(cr, registry): # pragma: no cover
"""At uninstall, revert changes made to record rules"""
with api.Environment.manage():
env = api.Environment(cr, SUPERUSER_ID, {})
env.ref("sales_team.group_sale_salesman_all_leads").write(
{
"implied_ids": [
(6, 0, [env.ref("sales_team.group_sale_salesman").id]),
],
}
)
# At installation time, we need to sync followers
with api.Environment.manage():
env = api.Environment(cr, SUPERUSER_ID, {})
partners = env["res.partner"].search(
[
("parent_id", "=", False),
("is_company", "=", True),
"|",
("user_id", "!=", False),
("child_ids.user_id", "!=", False),
]
)
partners._add_followers_from_salesmans()
66 changes: 66 additions & 0 deletions sales_team_security/i18n/es.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sales_team_security
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-28 21:00+0000\n"
"PO-Revision-Date: 2022-06-28 21:00+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: sales_team_security
#: model:ir.model,name:sales_team_security.model_res_partner
msgid "Contact"
msgstr "Contacto"

#. module: sales_team_security
#: model:ir.model.fields,help:sales_team_security.field_res_partner__team_id
#: model:ir.model.fields,help:sales_team_security.field_res_users__team_id
msgid ""
"If set, this Sales Team will be used for sales and assignments related to "
"this partner"
msgstr ""
"Si está configurado, este equipo de ventas será usado para las ventas y "
"asignaciones relacionadas a este partner."

#. module: sales_team_security
#: model:ir.model,name:sales_team_security.model_ir_rule
msgid "Record Rule"
msgstr "Regla de registro"

#. module: sales_team_security
#: model:ir.model.fields,field_description:sales_team_security.field_res_partner__team_id
#: model:ir.model.fields,field_description:sales_team_security.field_res_users__team_id
msgid "Sales Team"
msgstr "Equipo de ventas"

#. module: sales_team_security
#: model:ir.model.fields,field_description:sales_team_security.field_res_partner__user_id
#: model:ir.model.fields,field_description:sales_team_security.field_res_users__user_id
msgid "Salesperson"
msgstr "Comercial"

#. module: sales_team_security
#: model:ir.model.fields,help:sales_team_security.field_res_partner__user_id
#: model:ir.model.fields,help:sales_team_security.field_res_users__user_id
msgid "The internal user in charge of this contact."
msgstr "El usuario interno a cargo de este contacto."

#. module: sales_team_security
#: model:res.groups,comment:sales_team_security.group_sale_team_manager
msgid ""
"The user will have an access to the documents of the sales teams he/she "
"belongs to."
msgstr "El usuario tendrá acceso a los documentos de los equipos comerciales a los que pertenece."

#. module: sales_team_security
#: model:res.groups,name:sales_team_security.group_sale_team_manager
msgid "User: Team Documents Only"
msgstr "Usuario: Solo documentos del equipo"
68 changes: 68 additions & 0 deletions sales_team_security/i18n/it.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sales_team_security
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-28 21:01+0000\n"
"PO-Revision-Date: 2023-03-20 12:23+0000\n"
"Last-Translator: Francesco Foresti <[email protected]>\n"
"Language-Team: \n"
"Language: it\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 4.14.1\n"

#. module: sales_team_security
#: model:ir.model,name:sales_team_security.model_res_partner
msgid "Contact"
msgstr "Contatto"

#. module: sales_team_security
#: model:ir.model.fields,help:sales_team_security.field_res_partner__team_id
#: model:ir.model.fields,help:sales_team_security.field_res_users__team_id
msgid ""
"If set, this Sales Team will be used for sales and assignments related to "
"this partner"
msgstr ""
"Se impostato, il team di vendita viene utilizzato per vendite e assegnazioni"
" correlate al partner"

#. module: sales_team_security
#: model:ir.model,name:sales_team_security.model_ir_rule
msgid "Record Rule"
msgstr "Regola su record"

#. module: sales_team_security
#: model:ir.model.fields,field_description:sales_team_security.field_res_partner__team_id
#: model:ir.model.fields,field_description:sales_team_security.field_res_users__team_id
msgid "Sales Team"
msgstr "Team di vendita"

#. module: sales_team_security
#: model:ir.model.fields,field_description:sales_team_security.field_res_partner__user_id
#: model:ir.model.fields,field_description:sales_team_security.field_res_users__user_id
msgid "Salesperson"
msgstr "Addetto vendite"

#. module: sales_team_security
#: model:ir.model.fields,help:sales_team_security.field_res_partner__user_id
#: model:ir.model.fields,help:sales_team_security.field_res_users__user_id
msgid "The internal user in charge of this contact."
msgstr "L'utente interno responsabile di questo contatto. "

#. module: sales_team_security
#: model:res.groups,comment:sales_team_security.group_sale_team_manager
msgid ""
"The user will have an access to the documents of the sales teams he/she "
"belongs to."
msgstr ""

#. module: sales_team_security
#: model:res.groups,name:sales_team_security.group_sale_team_manager
msgid "User: Team Documents Only"
msgstr ""
Loading

0 comments on commit 84f015e

Please sign in to comment.