Files
Odoo-18.0-20251222/account_invoice_supplierinfo_update/models/account_move.py
tocmo0nlord adbe430761
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled
Initial commit: Odoo 18.0-20251222 extra-addons
2026-03-13 20:43:25 +00:00

87 lines
2.9 KiB
Python

# Copyright 2016 Chafique DELLI @ Akretion
# Copyright 2016-Today: GRAP (http://www.grap.coop)
# Copyright Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import Command, fields, models
class AccountMove(models.Model):
_inherit = "account.move"
# Column Section
supplier_partner_id = fields.Many2one(
comodel_name="res.partner",
string="Supplier Partner",
compute="_compute_supplier_partner_id",
)
supplierinfo_ok = fields.Boolean(
string="Supplier Informations Checked",
copy=False,
help="Checked if the check of supplierinfo has been done.\n"
" - Uncheck this box, if you want to check again this invoice\n"
" - Check this box, if you want to mark this invoice as checked",
)
# Compute Section
def _compute_supplier_partner_id(self):
for invoice in self:
invoice.supplier_partner_id = (
invoice.partner_id.commercial_partner_id or invoice.partner_id
)
# Custom Section
def _get_update_supplierinfo_lines(self):
self.ensure_one()
lines = []
product_ids = []
for line in self.invoice_line_ids.filtered(lambda x: x.product_id):
# We the invoice has two or more lines with the same product,
# the computation will be based only on the first line.
if line.product_id.id in product_ids:
continue
product_ids.append(line.product_id.id)
# Get supplierinfo if exist
supplierinfo = line._get_supplierinfo()
# Test if supplierinfo matches with line info
if supplierinfo:
if line._is_matching_supplierinfo(supplierinfo):
continue
# Propose updating, if needed
lines.append(
Command.create(line._prepare_supplier_wizard_line(supplierinfo))
)
return lines
# View Section
def check_supplierinfo(self):
self.ensure_one()
lines_for_update = self._get_update_supplierinfo_lines()
if lines_for_update:
ctx = {
"default_line_ids": lines_for_update,
"default_invoice_id": self.id,
}
view_form = self.env.ref(
"account_invoice_supplierinfo_update."
"view_wizard_update_invoice_supplierinfo_form"
)
return {
"name": self.env._("Update supplier informations of products"),
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "wizard.update.invoice.supplierinfo",
"views": [(view_form.id, "form")],
"view_id": view_form.id,
"target": "new",
"context": ctx,
}
else:
self.write({"supplierinfo_ok": True})