Files
Odoo-Modules/fusion_inventory/models/account_move.py
gsinghpal e9cf75ee48 changes
2026-03-14 12:04:20 -04:00

60 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2026 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
import logging
from odoo import models, fields, api
_logger = logging.getLogger(__name__)
class AccountMove(models.Model):
_inherit = 'account.move'
def _post(self, soft=True):
posted = super()._post(soft=soft)
posted._fi_update_product_costs()
return posted
def _fi_update_product_costs(self):
"""Update product costs from vendor bill lines when bills are posted."""
auto_update = self.env['ir.config_parameter'].sudo().get_param(
'fusion_inventory.auto_update_cost', 'True'
)
if auto_update != 'True':
return
for move in self.filtered(lambda m: m.move_type == 'in_invoice'):
for line in move.invoice_line_ids:
if not line.product_id or line.price_unit <= 0:
continue
variant = line.product_id
old_cost = variant.standard_price
if abs(old_cost - line.price_unit) > 0.001:
variant.standard_price = line.price_unit
_logger.info(
'Cost updated for %s: %.2f -> %.2f (from bill %s)',
variant.display_name, old_cost, line.price_unit,
move.name)
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'
x_fi_suggested_price = fields.Float(
string='Suggested Price',
compute='_compute_suggested_price',
help='Selling price based on cost and the product margin percentage')
@api.depends('price_unit', 'product_id')
def _compute_suggested_price(self):
for line in self:
margin = 0
if line.product_id and line.product_id.product_tmpl_id:
margin = line.product_id.product_tmpl_id.x_fi_margin_pct or 0
if 0 < margin < 100 and line.price_unit > 0:
line.x_fi_suggested_price = round(
line.price_unit / (1 - margin / 100), 2)
else:
line.x_fi_suggested_price = line.price_unit