Is there a way in Odoo 18 to stop processing a sales order when the customer exceeds their credit limit? I'd like a workflow to notify Credit Control that the order is being held until they approve the excess credit. Thanks.
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
- CRM
- e-Commerce
- Comptabilitat
- Inventari
- PoS
- Project
- MRP
This question has been flagged
Wonderful! Thanks for the help!
Hi,
Try the below steps,
1-On each sale order, you already have a field partner_credit_warning (boolean or selection) that indicates whether the partner has exceeded their credit limit.
2- When the user clicks Confirm on a sale order:
- If partner_credit_warning is False → the order confirms as usual.
- If partner_credit_warning is True → instead of confirming, Odoo will automatically create an Approval Request in the Approvals app (targeted to Credit Control team).
3- Credit Control reviews the approval.
4- If approved → the SO is confirmed. If rejected → the SO stays unconfirmed.
Sample code:
from odoo import models, api
class SaleOrder(models.Model):
_inherit = "sale.order"
@api.multi
def action_confirm(self):
for order in self:
if order.partner_credit_warning:
# Create an approval request
approval_category = self.env.ref('approvals.approval_category_credit_limit', raise_if_not_found=False)
approval_vals = {
'name': f"Credit approval for SO{order.name}",
'request_owner_id': self.env.user.id,
'category_id': approval_category.id if approval_category else False,
'reason': f"Customer {order.partner_id.name} exceeded credit limit. "
f"Order total: {order.amount_total}.",
'sale_order_id': order.id, # link back for traceability
}
self.env['approval.request'].create(approval_vals)
# Put order in waiting state instead of confirming
order.state = 'waiting_credit_approval'
else:
super(SaleOrder, order).action_confirm()
* Use the existing partner_credit_warning field to flag over-limit customers.
* Override action_confirm() so if the flag is set, the SO does not confirm but instead creates an Approval Request.
*Put the SO in a custom state (waiting_credit_approval) until Credit Control approves.
* With Approvals module + custom category, Credit Control can either approve (SO continues) or reject (SO stays blocked).
Hope it helps
Enjoying the discussion? Don't just read, join in!
Create an account today to enjoy exclusive features and engage with our awesome community!
Registrar-se
Thanks for the quick reply, Rani. I'll give it a try.