Initial commit: Odoo 18.0-20251222 extra-addons
This commit is contained in:
4
account_move_tier_validation_approver/models/__init__.py
Normal file
4
account_move_tier_validation_approver/models/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from . import account_move
|
||||
from . import res_partner
|
||||
from . import res_config_settings
|
||||
from . import res_company
|
||||
45
account_move_tier_validation_approver/models/account_move.py
Normal file
45
account_move_tier_validation_approver/models/account_move.py
Normal file
@@ -0,0 +1,45 @@
|
||||
# Copyright 2021 ForgeFlow, S.L.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class AccountMove(models.Model):
|
||||
_inherit = "account.move"
|
||||
|
||||
approver_id = fields.Many2one(
|
||||
"res.users",
|
||||
string="Responsible for Approval",
|
||||
compute="_compute_approver_id",
|
||||
readonly=False,
|
||||
store=True,
|
||||
)
|
||||
|
||||
@api.depends("partner_id")
|
||||
def _compute_approver_id(self):
|
||||
for rec in self:
|
||||
if rec.approver_id:
|
||||
# assign a value in any case
|
||||
rec.approver_id = rec.approver_id
|
||||
elif rec.partner_id.approver_id:
|
||||
rec.approver_id = rec.partner_id.approver_id
|
||||
else:
|
||||
rec.approver_id = False
|
||||
|
||||
def _post(self, soft=True):
|
||||
for move in self:
|
||||
require_approver_in_vendor_bills = (
|
||||
move.company_id.require_approver_in_vendor_bills
|
||||
)
|
||||
if (
|
||||
move.is_purchase_document(include_receipts=True)
|
||||
and require_approver_in_vendor_bills
|
||||
and not move.approver_id
|
||||
):
|
||||
raise UserError(
|
||||
self.env._(
|
||||
"It is mandatory to indicate a Responsible for Approval (in {})"
|
||||
).format(move.name)
|
||||
)
|
||||
return super()._post(soft)
|
||||
15
account_move_tier_validation_approver/models/res_company.py
Normal file
15
account_move_tier_validation_approver/models/res_company.py
Normal file
@@ -0,0 +1,15 @@
|
||||
# Copyright 2020 ForgeFlow, S.L.
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResCompany(models.Model):
|
||||
_inherit = "res.company"
|
||||
|
||||
require_approver_in_vendor_bills = fields.Boolean(
|
||||
string="Require approver in vendor bills"
|
||||
)
|
||||
validation_approver_tier_definition_id = fields.Many2one(
|
||||
comodel_name="tier.definition", string="Bill approval tier definition"
|
||||
)
|
||||
@@ -0,0 +1,41 @@
|
||||
# Copyright 2020 ForgeFlow, S.L.
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = "res.config.settings"
|
||||
|
||||
require_approver_in_vendor_bills = fields.Boolean(
|
||||
string="Require Approver In Vendor Bills",
|
||||
help="Requires adding an approver before a vendor bill can be posted.",
|
||||
related="company_id.require_approver_in_vendor_bills",
|
||||
readonly=False,
|
||||
)
|
||||
|
||||
def set_values(self):
|
||||
tier_definition = self.company_id.validation_approver_tier_definition_id
|
||||
if not tier_definition:
|
||||
field = self.env["ir.model.fields"].search(
|
||||
[("model", "=", "account.move"), ("name", "=", "approver_id")]
|
||||
)
|
||||
tier_definition = self.env["tier.definition"].create(
|
||||
{
|
||||
"model_id": self.env["ir.model"]
|
||||
.search([("model", "=", "account.move")])
|
||||
.id,
|
||||
"review_type": "field",
|
||||
"name": "Validation with Approver field",
|
||||
"reviewer_field_id": field.id,
|
||||
"definition_domain": "[('move_type', '=', 'in_invoice')]",
|
||||
"approve_sequence": True,
|
||||
"active": self.require_approver_in_vendor_bills,
|
||||
}
|
||||
)
|
||||
self.company_id.validation_approver_tier_definition_id = tier_definition
|
||||
if self.require_approver_in_vendor_bills:
|
||||
tier_definition.action_unarchive()
|
||||
else:
|
||||
tier_definition.action_archive()
|
||||
return super().set_values()
|
||||
10
account_move_tier_validation_approver/models/res_partner.py
Normal file
10
account_move_tier_validation_approver/models/res_partner.py
Normal file
@@ -0,0 +1,10 @@
|
||||
# Copyright 2021 ForgeFlow, S.L.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class Partner(models.Model):
|
||||
_inherit = "res.partner"
|
||||
|
||||
approver_id = fields.Many2one("res.users", string="Approver of Vendor Bills")
|
||||
Reference in New Issue
Block a user