Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 40 additions & 1 deletion sale_financial_risk/models/sale.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import _, api, fields, models
from odoo.tools import float_round
from odoo.tools import float_compare, float_round


class SaleOrder(models.Model):
Expand All @@ -15,6 +15,12 @@ class SaleOrder(models.Model):

def evaluate_risk_message(self, partner):
self.ensure_one()
# A. riesgo disminuyó o se mantuvo. Permitido sin aviso.
exception_msg = ""
risk_difference = self.env.context.get("current_risk_difference")
if risk_difference is not None and risk_difference <= 0:
return exception_msg

risk_amount = self.currency_id._convert(
self.amount_total,
partner.risk_currency_id,
Expand Down Expand Up @@ -65,6 +71,39 @@ def _get_risk_states(self):
risk_states.append("done")
return risk_states

def write(self, vals):
# 1. IDENTIFICAR PEDIDOS CONFIRMADOS
orders_to_check = self.filtered(lambda so: so.state in self._get_risk_states())
old_risk_totals = {order.id: order.partner_invoice_id.commercial_partner_id.risk_total for order in orders_to_check}


# 2.actualizar líneas y recalcular riesgo
res = super(SaleOrder, self).write(vals)
# 3. VALIDAR RIESGO DESPUÉS CAMBIOS
warnings = []
for order in orders_to_check:
partner = order.partner_invoice_id.commercial_partner_id
new_risk_total = partner.risk_total
if float_compare(new_risk_total, old_risk_totals.get(order.id, 0.0), precision_digits=2) > 0:
exception_msg = order.with_context(
current_risk_difference=(new_risk_total - old_risk_totals.get(order.id, 0.0))
).evaluate_risk_message(partner)
if exception_msg:
msg = _(
"RISK EXCEEDED: A confirmed order has been modified and saved. "
"This operation increases the client's consumed risk. %s"
)% (order.name, exception_msg)
warnings.append(msg)

if warnings:
return {
'warning': {
'title': _("RISK EXCEEDED"),
'message': "\n".join(warnings),
}
}
return res


class SaleOrderLine(models.Model):
_inherit = "sale.order.line"
Expand Down
Loading