From 3f9c57e602ebe859a2e2dc9e1b1c2619be5559c0 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 18 Oct 2022 17:04:22 +0700 Subject: check credit limit from parent customer --- base_accounting_kit/models/credit_limit.py | 55 +++++++++++++++++++----------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/base_accounting_kit/models/credit_limit.py b/base_accounting_kit/models/credit_limit.py index 8cee2ed..766e1df 100755 --- a/base_accounting_kit/models/credit_limit.py +++ b/base_accounting_kit/models/credit_limit.py @@ -80,25 +80,34 @@ class SaleOrder(models.Model): paid_invoice_amount = 0 outstanding_amount = 0 - all_order_ids = self.env['sale.order'].search([ - ('state','in',['sale','done']), - ('partner_id','=',rec.partner_id.id), - ('id', '!=', rec.id) - ]) - - paid_invoice_ids = self.env['account.move'].search([ - ('payment_state','=','paid'), - ('partner_id','=',rec.partner_id.id), - ('move_type','=','out_invoice') - ]) - - if all_order_ids: - for order in all_order_ids: - all_order_amount += order.amount_total - - if paid_invoice_ids: - for invoice in paid_invoice_ids: - paid_invoice_amount += invoice.amount_total + # this is only outstanding per user, must add outstanding parent + if rec.partner_id.parent_id: + partners = self.env['res.partner'].search([ + ('active', '=', True), + ('parent_id', '=', rec.partner_id.parent_id.id) + ]) + else: + partners = rec.partner_id + for partner in partners: + all_order_ids = self.env['sale.order'].search([ + ('state', 'in', ['sale', 'done']), + ('partner_id', '=', partner.id), + ('id', '!=', rec.id) + ]) + + paid_invoice_ids = self.env['account.move'].search([ + ('payment_state', '=', 'paid'), + ('partner_id', '=', partner.id), + ('move_type', '=', 'out_invoice') + ]) + + if all_order_ids: + for order in all_order_ids: + all_order_amount += order.amount_total + + if paid_invoice_ids: + for invoice in paid_invoice_ids: + paid_invoice_amount += invoice.amount_total outstanding_amount = all_order_amount - paid_invoice_amount rec.outstanding_amount = outstanding_amount @@ -152,7 +161,13 @@ class SaleOrder(models.Model): ###### if rec.partner_id.active_limit \ and rec.partner_id.enable_credit_limit: - if (outstanding_amount + rec.amount_total) >= rec.partner_id.blocking_stage: + block_stage = 0 + if rec.partner_id.parent_id: + block_state = rec.partner_id.parent_id.blocking_stage + else: + block_stage = rec.partner_id.blocking_stage + + if (outstanding_amount + rec.amount_total) >= block_stage: if rec.partner_id.blocking_stage != 0: remaining_credit_limit = rec.partner_id.blocking_stage - outstanding_amount raise UserError(_("%s is in Blocking Stage, Remaining credit limit is %s %s") % (rec.partner_id.name, rec.currency_id.symbol, remaining_credit_limit)) -- cgit v1.2.3