Initial commit: OCA Workflow Process packages (456 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:00 +02:00
commit d366e42934
18799 changed files with 1284507 additions and 0 deletions

View file

@ -0,0 +1,5 @@
from . import ir_rule
from . import purchase_order
from . import purchase_team
from . import res_partner
from . import res_users

View file

@ -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

View file

@ -0,0 +1,54 @@
# © 2023 Solvos Consultoría Informática (<http://www.solvos.es>)
# 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
class PurchaseOrder(models.Model):
_inherit = "purchase.order"
is_user_id_editable = fields.Boolean(
compute="_compute_is_user_id_editable",
)
team_id = fields.Many2one(
"purchase.team",
string="Team",
index=True,
auto_join=True,
compute="_compute_team_id",
store=True,
readonly=False,
)
def _compute_is_user_id_editable(self):
is_user_id_editable = self.env.user.has_group(
"purchase.group_purchase_manager"
) or not self.env.user.has_group("purchase_security.group_purchase_own_orders")
self.is_user_id_editable = is_user_id_editable
@api.depends("user_id")
def _compute_team_id(self):
"""When a user is assigned, the first team which the user belongs to is
assigned, and if no one, the first purchase team.
"""
first_team = self.env["purchase.team"].search([], limit=1)
for record in self:
record.team_id = record.user_id.purchase_team_ids[:1] or first_team
@api.onchange("partner_id")
def onchange_partner_id(self):
res = super().onchange_partner_id()
if self.partner_id:
partner = 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)
)
return res

View file

@ -0,0 +1,21 @@
# Copyright 2023 Tecnativa - Stefan Ungureanu
# Copyright 2023 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class PurchaseTeam(models.Model):
_name = "purchase.team"
_description = "Purchase Team"
_order = "sequence,id"
name = fields.Char(required=True)
sequence = fields.Integer(default=10)
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",
)

View file

@ -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,
)

View file

@ -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,
)