51 lines
2.1 KiB
Python
51 lines
2.1 KiB
Python
# © 2016 Chafique DELLI @ Akretion
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo import models
|
|
from odoo.tools import float_compare
|
|
|
|
|
|
class AccountMoveLine(models.Model):
|
|
_inherit = "account.move.line"
|
|
|
|
def _get_supplierinfo(self):
|
|
"""Given an invoice line, return the supplierinfo that matches
|
|
with product and supplier, if exist"""
|
|
self.ensure_one()
|
|
supplierinfos = self.product_id.seller_ids.filtered(
|
|
lambda seller: seller.partner_id == self.move_id.supplier_partner_id
|
|
)
|
|
return supplierinfos and supplierinfos[0] or False
|
|
|
|
def _is_matching_supplierinfo(self, supplierinfo):
|
|
"""Return True if the partner information matches with line information"""
|
|
self.ensure_one()
|
|
res = (
|
|
not self.product_uom_id or self.product_uom_id == supplierinfo.product_uom
|
|
) and not float_compare(
|
|
self.price_unit,
|
|
supplierinfo.price,
|
|
precision_rounding=self.move_id.currency_id.rounding,
|
|
)
|
|
precision = self.env["decimal.precision"].precision_get("Discount")
|
|
return res and not float_compare(
|
|
self.discount, supplierinfo.discount, precision_digits=precision
|
|
)
|
|
|
|
def _prepare_supplier_wizard_line(self, supplierinfo):
|
|
"""Prepare the value that will proposed to user in the wizard
|
|
to update supplierinfo"""
|
|
self.ensure_one()
|
|
return {
|
|
"product_id": self.product_id.id,
|
|
"supplierinfo_id": supplierinfo and supplierinfo.id or False,
|
|
"current_price": supplierinfo and supplierinfo.price or False,
|
|
"new_price": self.price_unit,
|
|
"current_uom_id": supplierinfo and supplierinfo.product_uom.id or False,
|
|
"new_uom_id": self.product_uom_id.id or self.product_id.uom_po_id.id,
|
|
"current_min_quantity": supplierinfo and supplierinfo.min_qty or False,
|
|
"new_min_quantity": supplierinfo and supplierinfo.min_qty or False,
|
|
"current_discount": supplierinfo and supplierinfo.discount,
|
|
"new_discount": self.discount,
|
|
}
|