Skip to content

Commit

Permalink
[17.0][MIG] sale_financial_risk: Migration to 17.0
Browse files Browse the repository at this point in the history
  • Loading branch information
sbiosca-s73 committed Jun 18, 2024
1 parent 35e7fe3 commit 0c79ab7
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 70 deletions.
2 changes: 1 addition & 1 deletion sale_financial_risk/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{
"name": "Sale Financial Risk",
"summary": "Manage partner risk in sales orders",
"version": "16.0.1.1.2",
"version": "17.0.1.0.0",
"category": "Sales Management",
"license": "AGPL-3",
"author": "Tecnativa, Odoo Community Association (OCA)",
Expand Down
13 changes: 6 additions & 7 deletions sale_financial_risk/hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,19 @@
logger = logging.getLogger(__name__)


def pre_init_hook(cr):
def pre_init_hook(env):
"""
The objective of this hook is to speed up the installation
of the module on an existing Odoo instance.
"""
create_risk_partner_id_column(cr)
create_risk_partner_id_column(env)


def create_risk_partner_id_column(cr):
if not sql.column_exists(cr, "sale_order_line", "risk_partner_id"):
sql.create_column(cr, "sale_order_line", "risk_partner_id", "int4")

def create_risk_partner_id_column(env):
if not sql.column_exists(env.cr, "sale_order_line", "risk_partner_id"):
sql.create_column(env.cr, "sale_order_line", "risk_partner_id", "int4")
logger.info("Computing field risk_partner_id on sale.order.line")
cr.execute(
env.cr.execute(
"""
UPDATE sale_order_line sol
SET risk_partner_id = p.commercial_partner_id
Expand Down
14 changes: 4 additions & 10 deletions sale_financial_risk/models/res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,15 @@ def _get_risk_sale_order_domain(self):
)
def _compute_risk_sale_order(self):
self.update({"risk_sale_order": 0.0})
orders_group = self.env["sale.order.line"].read_group(
orders_group = self.env["sale.order.line"]._read_group(
domain=self._get_risk_sale_order_domain(),
fields=["risk_partner_id", "company_id", "risk_amount"],
groupby=["risk_partner_id", "company_id"],
orderby="id",
lazy=False,
aggregates=["risk_amount:sum"],
)
for group in orders_group:
partner = self.browse(group["risk_partner_id"][0])
company = self.env["res.company"].browse(
group["company_id"][0] or self.env.company.id
)
for partner, company, risk_amount in orders_group:
company_currency = company.currency_id
partner.risk_sale_order = company_currency._convert(
group["risk_amount"],
risk_amount,
partner.risk_currency_id,
company,
fields.Date.context_today(self),
Expand Down
2 changes: 1 addition & 1 deletion sale_financial_risk/models/sale.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def action_confirm(self):
{
"exception_msg": exception_msg,
"partner_id": partner.id,
"origin_reference": "%s,%s" % ("sale.order", order.id),
"origin_reference": f"{order._name},{order.id}",
"continue_method": "action_confirm",
}
)
Expand Down
37 changes: 15 additions & 22 deletions sale_financial_risk/tests/test_partner_sale_risk.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
class TestPartnerSaleRisk(TransactionCase):
@classmethod
def setUpClass(cls):
super(TestPartnerSaleRisk, cls).setUpClass()
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT))
cls.env.user.groups_id |= cls.env.ref(
"account_financial_risk.group_account_financial_risk_manager"
Expand Down Expand Up @@ -56,7 +56,7 @@ def create_sale_order(cls, currency, company):

def test_sale_order(self):
self.sale_order.action_confirm()
self.assertAlmostEqual(self.partner.risk_sale_order, 100.0)
self.assertAlmostEqual(self.partner.risk_sale_order, 115.0)
self.assertFalse(self.partner.risk_exception)
self.partner.risk_sale_order_limit = 99.0
self.partner.risk_sale_order_include = True
Expand All @@ -76,12 +76,10 @@ def test_sale_order(self):
self.partner.credit_limit = 100.0
wiz_dic = sale_order2.action_confirm()
wiz = self.env[wiz_dic["res_model"]].browse(wiz_dic["res_id"])
self.assertEqual(
wiz.exception_msg, "This sale order exceeds the financial risk.\n"
)
self.assertEqual(wiz.exception_msg, "Financial risk exceeded.\n")
self.assertTrue(self.partner.risk_allow_edit)
wiz.button_continue()
self.assertAlmostEqual(self.partner.risk_sale_order, 200.0)
self.assertAlmostEqual(self.partner.risk_sale_order, 230.0)

def test_sale_order_auto_done(self):
self.env["ir.config_parameter"].create(
Expand All @@ -95,7 +93,7 @@ def test_sale_order_auto_done(self):
)
self.sale_order.action_confirm()
self.partner.risk_sale_order_include = True
self.assertAlmostEqual(self.partner.risk_sale_order, 100.0)
self.assertAlmostEqual(self.partner.risk_sale_order, 115.0)
self.assertFalse(self.partner.risk_exception)
self.partner.risk_sale_order_limit = 99.0
self.assertTrue(self.partner.risk_exception)
Expand All @@ -114,17 +112,15 @@ def test_sale_order_auto_done(self):
self.partner.credit_limit = 100.0
wiz_dic = sale_order2.action_confirm()
wiz = self.env[wiz_dic["res_model"]].browse(wiz_dic["res_id"])
self.assertEqual(
wiz.exception_msg, "This sale order exceeds the financial risk.\n"
)
self.assertEqual(wiz.exception_msg, "Financial risk exceeded.\n")
self.assertTrue(self.partner.risk_allow_edit)
wiz.button_continue()
self.assertAlmostEqual(self.partner.risk_sale_order, 200.0)
self.assertAlmostEqual(self.partner.risk_sale_order, 230.0)

def test_compute_risk_amount(self):
self.sale_order.action_confirm()
# Now the amount to be invoiced must 100
self.assertEqual(self.partner.risk_sale_order, 100.0)
# Now the amount to be invoiced must 115
self.assertEqual(self.partner.risk_sale_order, 115.0)
self.assertFalse(self.partner.risk_exception)
# If we set a risk_sale_order_limit to 99, risk_exception must be True
self.partner.risk_sale_order_limit = 99.0
Expand All @@ -138,13 +134,13 @@ def test_compute_risk_amount(self):
.create({})
)
inv_wiz.create_invoices()
self.assertAlmostEqual(self.partner.risk_invoice_draft, 100.0)
self.assertAlmostEqual(self.partner.risk_invoice_draft, 115.0)
self.assertAlmostEqual(self.partner.risk_sale_order, 0)
invoice = self.sale_order.invoice_ids
invoice.with_context(bypass_risk=True).action_post()
self.assertAlmostEqual(self.partner.risk_sale_order, 0)
self.assertAlmostEqual(self.partner.risk_invoice_draft, 0.0)
self.assertAlmostEqual(self.partner.risk_invoice_open, 100.0)
self.assertAlmostEqual(self.partner.risk_invoice_open, 115.0)
self.assertFalse(self.partner.risk_exception)
# After that, if we create and validate a Credit Note from the invoice
# then the amount to be invoiced must be 100 again
Expand All @@ -158,18 +154,15 @@ def test_compute_risk_amount(self):
ref_wiz_obj = self.env["account.move.reversal"].with_context(
active_model="account.move", active_ids=[invoice.id]
)
ref_wiz = ref_wiz_obj.create(
{"reason": "testing", "refund_method": "modify", "journal_id": journal.id}
)
ref_wiz = ref_wiz_obj.create({"reason": "testing", "journal_id": journal.id})
res = ref_wiz.reverse_moves()
self.assertAlmostEqual(self.partner.risk_invoice_draft, 100.0)
self.assertAlmostEqual(self.partner.risk_sale_order, 0.0)
self.assertAlmostEqual(self.partner.risk_invoice_draft, -115.0)
self.assertAlmostEqual(self.partner.risk_sale_order, 115)
# The way to re-invoice a sale order is creating a refund with
# modify option and cancel or remove draft invoice
modify_invoice = invoice.browse(res["res_id"])
modify_invoice.unlink()
self.assertAlmostEqual(self.partner.risk_sale_order, 100.0)
self.assertTrue(self.partner.risk_exception)
self.assertAlmostEqual(self.partner.risk_sale_order, 0.0)
line = self.sale_order.order_line[:1]
line.product_uom_qty = 0.0
self.assertAlmostEqual(line.risk_amount, 0.0)
Expand Down
30 changes: 15 additions & 15 deletions sale_financial_risk/tests/test_payment_financial_risk.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,22 +66,22 @@ def test_payment_risk_bypass(self):
"odoo.addons.payment.controllers.portal.PaymentPortal"
"._compute_show_tokenize_input_mapping"
) as patched:
tx_context = self._get_tx_checkout_context(**route_values)
patched.assert_called_once_with(ANY, logged_in=ANY, sale_order_id=ANY)
route_values.update(
{
"flow": "direct",
"payment_option_id": self.provider.id,
"tokenization_requested": False,
"validation_route": False,
"reference_prefix": None, # Force empty prefix to fallback on SO reference
"landing_route": tx_context["landing_route"],
"amount": tx_context["amount"],
"currency_id": tx_context["currency_id"],
}
)
tx_context = self._get_portal_pay_context(**route_values)
patched.assert_called_once_with(ANY, sale_order_id=ANY)
tx_route_values = {
"provider_id": self.provider.id,
"payment_method_id": self.payment_method_id,
"token_id": None,
"amount": tx_context["amount"],
"flow": "direct",
"tokenization_requested": False,
"landing_route": tx_context["landing_route"],
"access_token": tx_context["access_token"],
}
with mute_logger("odoo.addons.payment.models.payment_transaction"):
processing_values = self._get_processing_values(**route_values)
processing_values = self._get_processing_values(
tx_route=tx_context["transaction_route"], **tx_route_values
)
tx_sudo = self._get_tx(processing_values["reference"])
# Check validation of transaction correctly confirms the SO
self.assertEqual(self.order.state, "draft")
Expand Down
14 changes: 5 additions & 9 deletions sale_financial_risk/views/res_config_settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,15 @@
expr="//field[@name='allow_overrisk_invoice_validation']/../.."
position="inside"
>
<div class="o_setting_left_pane">

<setting
id="include_risk_sale_order_done"
string="Include orders in done state"
>
<field name="include_risk_sale_order_done" />
</div>
<div class="o_setting_right_pane">
<label
string="Include orders in done state"
for="include_risk_sale_order_done"
/>
<div class="text-muted">
Include locked sale orders into risk calculation
</div>
</div>
</setting>
</xpath>
</field>
</record>
Expand Down
7 changes: 2 additions & 5 deletions sale_financial_risk/views/res_partner_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@
<field name="inherit_id" ref="account_financial_risk.res_partner_view_risk" />
<field name="arch" type="xml">
<field name="risk_invoice_draft_include" position="before">
<field
name="risk_sale_order_include"
attrs="{'readonly': [('risk_allow_edit', '=', False)]}"
/>
<field name="risk_sale_order_include" readonly="not risk_allow_edit" />
<button
name="open_risk_pivot_info"
type="object"
Expand All @@ -29,7 +26,7 @@
<field name="risk_invoice_draft_limit" position="before">
<field
name="risk_sale_order_limit"
attrs="{'readonly': [('risk_allow_edit', '=', False)]}"
readonly="not risk_allow_edit"
widget='monetary'
options="{'currency_field': 'risk_currency_id'}"
/>
Expand Down

0 comments on commit 0c79ab7

Please sign in to comment.