diff --git a/partner_financial_risk/models/account_invoice.py b/partner_financial_risk/models/account_invoice.py index d2f00c967..44e27acd9 100644 --- a/partner_financial_risk/models/account_invoice.py +++ b/partner_financial_risk/models/account_invoice.py @@ -10,29 +10,31 @@ class AccountInvoice(models.Model): @api.multi def action_invoice_open(self): - if not self.env.context.get('bypass_risk', False): - for invoice in self: - partner = invoice.partner_id.commercial_partner_id - exception_msg = "" - if partner.risk_exception: - exception_msg = _("Financial risk exceeded.\n") - elif partner.risk_invoice_open_limit and ( - (partner.risk_invoice_open + invoice.amount_total) > - partner.risk_invoice_open_limit): - exception_msg = _( - "This invoice exceeds the open invoices risk.\n") - elif not partner.risk_invoice_draft_include and ( - partner.risk_invoice_open_include and - (partner.risk_total + invoice.amount_total) > - partner.credit_limit): - exception_msg = _( - "This invoice exceeds the financial risk.\n") - if exception_msg: - return self.env['partner.risk.exceeded.wiz'].create({ - 'exception_msg': exception_msg, - 'partner_id': partner.id, - 'origin_reference': - '%s,%s' % ('account.invoice', invoice.id), - 'continue_method': 'action_invoice_open', - }).action_show() + if self.env.context.get('bypass_risk', False): + return super(AccountInvoice, self).action_invoice_open() + for invoice in self: + partner = invoice.partner_id.commercial_partner_id + exception_msg = "" + if partner.risk_exception: + exception_msg = _("Financial risk exceeded.\n") + elif partner.risk_invoice_open_limit and ( + (partner.risk_invoice_open + invoice.amount_total) > + partner.risk_invoice_open_limit): + exception_msg = _( + "This invoice exceeds the open invoices risk.\n") + # If risk_invoice_draft_include this invoice included in risk_total + elif not partner.risk_invoice_draft_include and ( + partner.risk_invoice_open_include and + (partner.risk_total + invoice.amount_total) > + partner.credit_limit): + exception_msg = _( + "This invoice exceeds the financial risk.\n") + if exception_msg: + return self.env['partner.risk.exceeded.wiz'].create({ + 'exception_msg': exception_msg, + 'partner_id': partner.id, + 'origin_reference': + '%s,%s' % ('account.invoice', invoice.id), + 'continue_method': 'action_invoice_open', + }).action_show() return super(AccountInvoice, self).action_invoice_open() diff --git a/partner_financial_risk/models/res_partner.py b/partner_financial_risk/models/res_partner.py index 12da191ff..399d5d701 100644 --- a/partner_financial_risk/models/res_partner.py +++ b/partner_financial_risk/models/res_partner.py @@ -114,7 +114,7 @@ class ResPartner(models.Model): @api.multi @api.depends( - 'invoice_ids', 'invoice_ids.state', + 'customer', 'invoice_ids', 'invoice_ids.state', 'invoice_ids.amount_total', 'child_ids.invoice_ids', 'child_ids.invoice_ids.state', 'child_ids.invoice_ids.amount_total') @@ -122,11 +122,13 @@ class ResPartner(models.Model): all_partners_and_children = {} all_partner_ids = [] for partner in self.filtered('customer'): + if not partner.id: + continue all_partners_and_children[partner] = self.with_context( active_test=False).search([('id', 'child_of', partner.id)]).ids all_partner_ids += all_partners_and_children[partner] if not all_partner_ids: - return # pragma: no cover + return total_group = self.env['account.invoice'].sudo().read_group( [('type', 'in', ['out_invoice', 'out_refund']), ('state', 'in', ['draft', 'proforma', 'proforma2']), diff --git a/partner_financial_risk/tests/test_partner_financial_risk.py b/partner_financial_risk/tests/test_partner_financial_risk.py index 70024962d..bba50dd1f 100644 --- a/partner_financial_risk/tests/test_partner_financial_risk.py +++ b/partner_financial_risk/tests/test_partner_financial_risk.py @@ -70,6 +70,7 @@ class TestPartnerFinancialRisk(SavepointCase): 'invoice_line_tax_ids': [(6, 0, [cls.tax.id])], })], }) + cls.env.user.lang = False def test_invoices(self): self.partner.risk_invoice_draft_include = True @@ -142,3 +143,8 @@ class TestPartnerFinancialRisk(SavepointCase): line.date_maturity = '2017-01-01' self.assertAlmostEqual(self.partner.risk_account_amount, 0.0) self.assertAlmostEqual(self.partner.risk_account_amount_unpaid, 100.0) + + def test_recompute_newid(self): + """Computing risk shouldn't fail if record is a NewId.""" + new = self.env['res.partner'].new({'customer': True}) + new._compute_risk_invoice() diff --git a/partner_financial_risk/views/res_partner_view.xml b/partner_financial_risk/views/res_partner_view.xml index 76fa76b8a..7326cac06 100644 --- a/partner_financial_risk/views/res_partner_view.xml +++ b/partner_financial_risk/views/res_partner_view.xml @@ -28,10 +28,13 @@ + + - + @@ -41,6 +44,8 @@ attrs="{'readonly': [('risk_allow_edit', '=', False)]}"/> +