Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Syncing from upstream OCA/purchase-workflow (15.0) #1371

Merged
merged 7 commits into from
Feb 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ addon | version | maintainers | summary
[purchase_requisition_order_remaining_qty](purchase_requisition_order_remaining_qty/) | 15.0.1.0.0 | [![victoralmau](https://github.com/victoralmau.png?size=30px)](https://github.com/victoralmau) | Purchase Requisition Order Remaining Qty
[purchase_requisition_tier_validation](purchase_requisition_tier_validation/) | 15.0.1.0.0 | | Extends the functionality of Purchase Agreements to support a tier validation process.
[purchase_rfq_number](purchase_rfq_number/) | 15.0.1.0.1 | | Different sequence for purchase for quotations
[purchase_security](purchase_security/) | 15.0.3.1.0 | [![pilarvargas-tecnativa](https://github.com/pilarvargas-tecnativa.png?size=30px)](https://github.com/pilarvargas-tecnativa) | See only your purchase orders
[purchase_security](purchase_security/) | 15.0.4.0.0 | [![pilarvargas-tecnativa](https://github.com/pilarvargas-tecnativa.png?size=30px)](https://github.com/pilarvargas-tecnativa) | See only your purchase orders
[purchase_stock_price_unit_sync](purchase_stock_price_unit_sync/) | 15.0.1.0.4 | | Update cost price in stock moves already done
[purchase_stock_return_request](purchase_stock_return_request/) | 15.0.1.0.1 | | Purchase Stock Return Request
[purchase_stock_secondary_unit](purchase_stock_secondary_unit/) | 15.0.1.1.1 | | Get product quantities in a secondary unit
Expand Down
4 changes: 2 additions & 2 deletions purchase_request_tier_validation/i18n/it.po
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-12-22 19:34+0000\n"
"PO-Revision-Date: 2024-02-14 16:41+0000\n"
"Last-Translator: mymage <[email protected]>\n"
"Language-Team: none\n"
"Language: it\n"
Expand Down Expand Up @@ -100,7 +100,7 @@ msgstr ""
#: model:ir.model.fields,field_description:purchase_request_tier_validation.field_purchase_request__validated
#: model_terms:ir.ui.view,arch_db:purchase_request_tier_validation.view_purchase_request_filter
msgid "Validated"
msgstr "Approvato"
msgstr "Approvata"

#. module: purchase_request_tier_validation
#: model:ir.model.fields,field_description:purchase_request_tier_validation.field_purchase_request__validated_message
Expand Down
2 changes: 1 addition & 1 deletion purchase_security/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Purchase Order security
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:84710bf6088628111e60464b0ef87243c926a836f3a0849bb2f4d8cc38d64223
!! source digest: sha256:42fcbc71ab83444a9fa147761ca8754acb9f77fee0ca0ea3cdfd1a81ad4425f2
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
Expand Down
3 changes: 2 additions & 1 deletion purchase_security/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

{
"name": "Purchase Order security",
"version": "15.0.3.1.0",
"version": "15.0.4.0.0",
"category": "Purchase",
"development_status": "Production/Stable",
"author": "Tecnativa, Odoo Community Association (OCA)",
Expand All @@ -16,6 +16,7 @@
"security/ir.model.access.csv",
"views/purchase_order_views.xml",
"views/purchase_team_views.xml",
"views/res_partner_views.xml",
],
"installable": True,
"auto_install": False,
Expand Down
45 changes: 39 additions & 6 deletions purchase_security/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2023-07-24 20:25+0200\n"
"Last-Translator: \n"
"POT-Creation-Date: 2024-02-13 13:34+0000\n"
"PO-Revision-Date: 2024-02-14 19:35+0000\n"
"Last-Translator: Ivorra78 <[email protected]>\n"
"Language-Team: \n"
"Language: es_ES\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.0.1\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"

#. module: purchase_security
#: model_terms:ir.ui.view,arch_db:purchase_security.purchase_team_form
Expand All @@ -31,6 +31,11 @@ msgstr ""
msgid "Avatar"
msgstr "Avatar"

#. module: purchase_security
#: model:ir.model,name:purchase_security.model_res_partner
msgid "Contact"
msgstr "Contacto"

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_purchase_team__create_uid
msgid "Created by"
Expand Down Expand Up @@ -98,6 +103,29 @@ msgstr "Equipos de compra"
msgid "Purchase Users"
msgstr "Usuarios de compra"

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_res_partner__purchase_user_id
#: model:ir.model.fields,field_description:purchase_security.field_res_users__purchase_user_id
#: model_terms:ir.ui.view,arch_db:purchase_security.view_res_partner_filter
msgid "Purchase representative"
msgstr "Representante de compra"

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_res_partner__purchase_team_id
#: model:ir.model.fields,field_description:purchase_security.field_res_users__purchase_team_id
msgid "Purchase team"
msgstr "Equipo de compra"

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_res_users__purchase_team_ids
msgid "Purchases Teams"
msgstr "Equipos de compras"

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

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_purchase_team__sequence
msgid "Sequence"
Expand All @@ -118,6 +146,11 @@ msgstr "Usuario (pedidos propios)"
msgid "User (team orders)"
msgstr "Usuario (pedidos del equipo)"

#. module: purchase_security
#: model:ir.model,name:purchase_security.model_res_users
msgid "Users"
msgstr "Usuarios"

#. module: purchase_security
#: model_terms:ir.ui.view,arch_db:purchase_security.purchase_team_form
msgid "e.g. Europe"
Expand Down
33 changes: 33 additions & 0 deletions purchase_security/i18n/it.po
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ msgstr ""
msgid "Avatar"
msgstr ""

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

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_purchase_team__create_uid
msgid "Created by"
Expand Down Expand Up @@ -95,6 +100,29 @@ msgstr ""
msgid "Purchase Users"
msgstr ""

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_res_partner__purchase_user_id
#: model:ir.model.fields,field_description:purchase_security.field_res_users__purchase_user_id
#: model_terms:ir.ui.view,arch_db:purchase_security.view_res_partner_filter
msgid "Purchase representative"
msgstr ""

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_res_partner__purchase_team_id
#: model:ir.model.fields,field_description:purchase_security.field_res_users__purchase_team_id
msgid "Purchase team"
msgstr ""

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_res_users__purchase_team_ids
msgid "Purchases Teams"
msgstr ""

#. module: purchase_security
#: model:ir.model,name:purchase_security.model_ir_rule
msgid "Record Rule"
msgstr ""

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_purchase_team__sequence
msgid "Sequence"
Expand All @@ -115,6 +143,11 @@ msgstr "Utente (solo propri ordini)"
msgid "User (team orders)"
msgstr ""

#. module: purchase_security
#: model:ir.model,name:purchase_security.model_res_users
msgid "Users"
msgstr ""

#. module: purchase_security
#: model_terms:ir.ui.view,arch_db:purchase_security.purchase_team_form
msgid "e.g. Europe"
Expand Down
33 changes: 33 additions & 0 deletions purchase_security/i18n/purchase_security.pot
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ msgstr ""
msgid "Avatar"
msgstr ""

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

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_purchase_team__create_uid
msgid "Created by"
Expand Down Expand Up @@ -90,6 +95,29 @@ msgstr ""
msgid "Purchase Users"
msgstr ""

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_res_partner__purchase_user_id
#: model:ir.model.fields,field_description:purchase_security.field_res_users__purchase_user_id
#: model_terms:ir.ui.view,arch_db:purchase_security.view_res_partner_filter
msgid "Purchase representative"
msgstr ""

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_res_partner__purchase_team_id
#: model:ir.model.fields,field_description:purchase_security.field_res_users__purchase_team_id
msgid "Purchase team"
msgstr ""

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_res_users__purchase_team_ids
msgid "Purchases Teams"
msgstr ""

#. module: purchase_security
#: model:ir.model,name:purchase_security.model_ir_rule
msgid "Record Rule"
msgstr ""

#. module: purchase_security
#: model:ir.model.fields,field_description:purchase_security.field_purchase_team__sequence
msgid "Sequence"
Expand All @@ -110,6 +138,11 @@ msgstr ""
msgid "User (team orders)"
msgstr ""

#. module: purchase_security
#: model:ir.model,name:purchase_security.model_res_users
msgid "Users"
msgstr ""

#. module: purchase_security
#: model_terms:ir.ui.view,arch_db:purchase_security.purchase_team_form
msgid "e.g. Europe"
Expand Down
3 changes: 3 additions & 0 deletions purchase_security/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
from . import ir_rule
from . import purchase_order
from . import purchase_team
from . import res_partner
from . import res_users
57 changes: 57 additions & 0 deletions purchase_security/models/ir_rule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html

from odoo import api, models, tools
from odoo.osv import expression
from odoo.tools import config


class IrRule(models.Model):
_inherit = "ir.rule"

@api.model
@tools.conditional(
"xml" not in config["dev_mode"],
tools.ormcache(
"self.env.uid",
"self.env.su",
"model_name",
"mode",
"tuple(self._compute_domain_context_values())",
),
)
def _compute_domain(self, model_name, mode="read"):
"""Inject extra domain for restricting partners when the user
has the group 'Purchase / User (own orders)."""
res = super()._compute_domain(model_name, mode=mode)
user = self.env.user
group1 = "purchase_security.group_purchase_own_orders"
group2 = "purchase_security.group_purchase_group_orders"
group3 = "purchase.group_purchase_manager"
if model_name == "res.partner" and not self.env.su:
if user.has_group(group1) and not user.has_group(group3):
extra_domain = [
"|",
("message_partner_ids", "in", user.partner_id.ids),
"|",
("id", "=", user.partner_id.id),
]
if user.has_group(group2):
extra_domain += [
"|",
("purchase_team_id", "=", user.purchase_team_ids[:1].id),
("purchase_team_id", "=", False),
]
else:
extra_domain += [
"|",
("purchase_user_id", "=", user.id),
"&",
("purchase_user_id", "=", False),
"|",
("purchase_team_id", "=", False),
("purchase_team_id", "=", user.purchase_team_ids[:1].id),
]
extra_domain = expression.normalize_domain(extra_domain)
res = expression.AND([extra_domain] + [res])
return res
22 changes: 15 additions & 7 deletions purchase_security/models/purchase_order.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Copyright 2023 Tecnativa - Stefan Ungureanu
# Copyright 2023 Tecnativa - Pedro M. Baeza
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import api, fields, models
Expand All @@ -25,11 +26,18 @@ def _compute_team_id(self):
"""
first_team = self.env["purchase.team"].search([], limit=1)
for record in self:
if record.user_id:
team = self.env["purchase.team"].search(
[("user_ids", "=", record.user_id.id)], limit=1
record.team_id = record.user_id.purchase_team_ids[:1] or first_team

def onchange_partner_id(self):
res = super().onchange_partner_id()
if self.partner_id:
partner = self.partner_id or self.partner_id.commercial_partner_id
if not self.env.context.get("default_user_id"):
self.user_id = partner.purchase_user_id or self.env.user
if not self.env.context.get("default_team_id"):
self.team_id = (
partner.purchase_team_id
or self.user_id.purchase_team_ids[:1]
or self.env["purchase.team"].search([], limit=1)
)
if team:
record.team_id = team.id
continue
record.team_id = first_team.id
return res
8 changes: 7 additions & 1 deletion purchase_security/models/purchase_team.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,10 @@ class PurchaseTeam(models.Model):

name = fields.Char(required=True)
sequence = fields.Integer(default=10)
user_ids = fields.Many2many("res.users", string="Purchase Users")
user_ids = fields.Many2many(
comodel_name="res.users",
relation="purchase_team_res_users_rel",
column1="purchase_team_id",
column2="res_users_id",
string="Purchase Users",
)
20 changes: 20 additions & 0 deletions purchase_security/models/res_partner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html

from odoo import fields, models


class ResPartner(models.Model):
_inherit = "res.partner"

purchase_user_id = fields.Many2one(
comodel_name="res.users",
domain="[('share', '=', False)]",
string="Purchase representative",
index=True,
)
purchase_team_id = fields.Many2one(
comodel_name="purchase.team",
string="Purchase team",
index=True,
)
19 changes: 19 additions & 0 deletions purchase_security/models/res_users.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import fields, models


class ResUsers(models.Model):
_inherit = "res.users"

purchase_team_ids = fields.Many2many(
comodel_name="purchase.team",
relation="purchase_team_res_users_rel",
column1="res_users_id",
column2="purchase_team_id",
string="Purchases Teams",
check_company=True,
copy=False,
readonly=True,
)
Loading
Loading