changes
This commit is contained in:
59
fusion_inventory/models/account_move.py
Normal file
59
fusion_inventory/models/account_move.py
Normal file
@@ -0,0 +1,59 @@
|
||||
# -*- 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
|
||||
Reference in New Issue
Block a user