diff --git a/partner_financial_risk/__init__.py b/partner_financial_risk/__init__.py index 35e7c9600..cde864bae 100644 --- a/partner_financial_risk/__init__.py +++ b/partner_financial_risk/__init__.py @@ -1,4 +1,3 @@ # -*- coding: utf-8 -*- from . import models -from . import wizard diff --git a/partner_financial_risk/__openerp__.py b/partner_financial_risk/__openerp__.py index b97b714d1..063611c2b 100644 --- a/partner_financial_risk/__openerp__.py +++ b/partner_financial_risk/__openerp__.py @@ -3,19 +3,17 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Partner Risk', + 'name': 'Partner Financial Risk', 'summary': 'Manage partner risk', 'version': '9.0.1.0.0', 'category': 'Sales Management', 'license': 'AGPL-3', 'author': 'Tecnativa, Odoo Community Association (OCA)', 'website': 'https://www.tecnativa.com', - 'depends': ['sale'], + 'depends': ['account'], 'data': [ 'views/res_config_view.xml', 'views/res_partner_view.xml', - 'views/sale_view.xml', - 'wizard/sale_order_risk_exceeded_view.xml', ], 'installable': True, } diff --git a/partner_financial_risk/models/__init__.py b/partner_financial_risk/models/__init__.py index bb47cf60d..f24a00fb1 100644 --- a/partner_financial_risk/models/__init__.py +++ b/partner_financial_risk/models/__init__.py @@ -3,4 +3,3 @@ from . import res_company from . import res_config from . import res_partner -from . import sale diff --git a/partner_financial_risk/models/res_partner.py b/partner_financial_risk/models/res_partner.py index 5b99fcdf5..41ae93247 100644 --- a/partner_financial_risk/models/res_partner.py +++ b/partner_financial_risk/models/res_partner.py @@ -10,15 +10,6 @@ from openerp import api, fields, models class ResPartner(models.Model): _inherit = 'res.partner' - risk_sale_order_include = fields.Boolean( - string='Include Sales Orders', help='Full risk computation') - risk_sale_order_limit = fields.Monetary( - string='Limit Sales Orders', help='Set 0 if it is not locked') - risk_sale_order = fields.Monetary( - compute='_compute_risk_sale_order', store=True, - string='Total Sales Orders Not Invoiced', - help='Total not invoiced of sales orders in Sale Order state') - risk_invoice_draft_include = fields.Boolean( string='Include Draft Invoices', help='Full risk computation') risk_invoice_draft_limit = fields.Monetary( @@ -64,13 +55,6 @@ class ResPartner(models.Model): string='Risk Exception', help='It Indicate if partner risk exceeded') - @api.multi - @api.depends('sale_order_ids', 'sale_order_ids.invoice_pending_amount') - def _compute_risk_sale_order(self): - for partner in self: - partner.risk_sale_order = sum( - partner.sale_order_ids.mapped('invoice_pending_amount')) - @api.multi @api.depends('invoice_ids', 'invoice_ids.state', 'invoice_ids.amount_total', 'invoice_ids.residual', @@ -78,13 +62,15 @@ class ResPartner(models.Model): def _compute_risk_invoice(self): max_date = self._max_risk_date_due() for partner in self: - invoices = partner.invoice_ids.filtered( + invoices_out = partner.invoice_ids.filtered( + lambda x: x.type == 'out_invoice') + invoices = invoices_out.filtered( lambda x: x.state in ['draft', 'proforma', 'proforma2']) partner.risk_invoice_draft = sum(invoices.mapped('amount_total')) - invoices = partner.invoice_ids.filtered( + invoices = invoices_out.filtered( lambda x: x.state == 'open' and x.date_due >= max_date) partner.risk_invoice_open = sum(invoices.mapped('residual')) - invoices = partner.invoice_ids.filtered( + invoices = invoices_out.filtered( lambda x: x.state == 'open' and x.date_due < max_date) partner.risk_invoice_unpaid = sum(invoices.mapped('residual')) @@ -97,16 +83,7 @@ class ResPartner(models.Model): partner.risk_invoice_unpaid) @api.multi - @api.depends('risk_sale_order', 'risk_sale_order_include', - 'risk_sale_order_limit', - 'risk_invoice_draft', 'risk_invoice_draft_include', - 'risk_invoice_draft_limit', 'risk_invoice_open', - 'risk_invoice_open_include', 'risk_invoice_open_limit', - 'risk_invoice_unpaid', 'risk_invoice_unpaid_include', - 'risk_invoice_unpaid_limit', 'risk_account_amount', - 'risk_account_amount_include', 'risk_account_amount_limit', - 'credit_limit') - # @api.depends(lambda x: x._depends_list) + @api.depends(lambda x: x._get_depends_compute_risk_exception()) def _compute_risk_exception(self): risk_field_list = self._risk_field_list() for partner in self: @@ -130,27 +107,22 @@ class ResPartner(models.Model): @api.model def _risk_field_list(self): return [ - ('risk_sale_order', 'risk_sale_order_limit', - 'risk_sale_order_include'), ('risk_invoice_draft', 'risk_invoice_draft_limit', - 'risk_invoice_draft_include'), + 'risk_invoice_draft_include'), ('risk_invoice_open', 'risk_invoice_open_limit', 'risk_invoice_open_include'), ('risk_invoice_unpaid', 'risk_invoice_unpaid_limit', - 'risk_invoice_unpaid_include'), + 'risk_invoice_unpaid_include'), ('risk_account_amount', 'risk_account_amount_limit', 'risk_account_amount_include'), ] @api.model - def _depends_list(self): - ss = ( - 'risk_sale_order', 'risk_sale_order_include', 'risk_sale_order_limit', - 'risk_invoice_draft', 'risk_invoice_draft_include', - 'risk_invoice_draft_limit', 'risk_invoice_open', - 'risk_invoice_open_include', 'risk_invoice_open_limit', - 'risk_invoice_unpaid', 'risk_invoice_unpaid_include', - 'risk_invoice_unpaid_limit', 'risk_account_amount', - 'risk_account_amount_include', 'risk_account_amount_limit', - 'credit_limit') - return ss \ No newline at end of file + def _get_depends_compute_risk_exception(self): + # TODO: Improve code without lose performance + tuple_list = self._risk_field_list() + res = [x[0] for x in tuple_list] + res.extend([x[1] for x in tuple_list]) + res.extend([x[2] for x in tuple_list]) + res.append('credit_limit') + return res diff --git a/partner_financial_risk/tests/test_partner_financial_risk.py b/partner_financial_risk/tests/test_partner_financial_risk.py index 6bbeec83f..616e91c3d 100644 --- a/partner_financial_risk/tests/test_partner_financial_risk.py +++ b/partner_financial_risk/tests/test_partner_financial_risk.py @@ -2,8 +2,6 @@ # © 2016 Carlos Dauden # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import fields -from openerp.exceptions import UserError from openerp.tests.common import TransactionCase @@ -14,8 +12,6 @@ class TestPartnerFinancialRisk(TransactionCase): 'name': 'Partner test', 'customer': True, }) - self.product = self.env.ref('product.product_product_2') - self.product.invoice_policy = 'order' self.journal = self.env['account.journal'].create({ 'type': 'sale', 'name': 'Test Sales', @@ -23,19 +19,8 @@ class TestPartnerFinancialRisk(TransactionCase): }) self.prod_account = self.env.ref('account.demo_coffee_machine_account') self.inv_account = self.env.ref('account.demo_sale_of_land_account') - self.sale_order = self.env['sale.order'].create({ - 'partner_id': self.partner.id, - 'pricelist_id': self.env.ref('product.list0').id, - 'order_line': [(0, 0, { - 'name': self.product.name, - 'product_id': self.product.id, - 'product_uom_qty': 1, - 'product_uom': self.product.uom_id.id, - 'price_unit': 100.0})], - }) self.invoice = self.env['account.invoice'].create({ 'journal_id': self.journal.id, - # 'account_id': self.inv_account.id, 'company_id': self.env.user.company_id.id, 'currency_id': self.env.user.company_id.currency_id.id, 'partner_id': self.partner.id, @@ -47,23 +32,6 @@ class TestPartnerFinancialRisk(TransactionCase): })] }) - def test_sale_order(self): - self.sale_order.action_confirm() - self.assertAlmostEqual(self.partner.risk_sale_order, 100.0) - - invoice_so_id = self.sale_order.action_invoice_create() - self.assertAlmostEqual(self.partner.risk_invoice_draft, 600.0) - invoice_so = self.invoice.browse(invoice_so_id) - invoice_so.date_due = fields.Date.today() - invoice_so.signal_workflow('invoice_open') - self.assertAlmostEqual(self.partner.risk_invoice_open, 100.0) - - self.partner.risk_invoice_open_include = True - self.assertAlmostEqual(self.partner.risk_total, 100.0) - self.assertTrue(self.partner.risk_exception) - self.partner.credit_limit = 100.0 - self.assertFalse(self.partner.risk_exception) - def test_invoices(self): self.partner.risk_invoice_draft_include = True self.assertAlmostEqual(self.partner.risk_invoice_draft, 500.0) @@ -73,6 +41,9 @@ class TestPartnerFinancialRisk(TransactionCase): self.assertFalse(self.invoice.date_due) self.partner.risk_invoice_unpaid_include = True self.assertAlmostEqual(self.partner.risk_total, 500.0) - self.partner.risk_total = 100.0 - with self.assertRaises(UserError): - self.sale_order.action_confirm() + self.partner.credit_limit = 100.0 + self.assertTrue(self.partner.risk_exception) + self.partner.credit_limit = 1000.0 + self.assertFalse(self.partner.risk_exception) + self.partner.risk_invoice_unpaid_limit = 499.0 + self.assertTrue(self.partner.risk_exception) diff --git a/partner_financial_risk/views/res_company_view.xml b/partner_financial_risk/views/res_company_view.xml deleted file mode 100644 index 7ec47bb8d..000000000 --- a/partner_financial_risk/views/res_company_view.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - res.company.form.partner.risk - - res.company - - - - - - - - diff --git a/partner_financial_risk/views/res_partner_view.xml b/partner_financial_risk/views/res_partner_view.xml index 2f8525006..d13521e9d 100644 --- a/partner_financial_risk/views/res_partner_view.xml +++ b/partner_financial_risk/views/res_partner_view.xml @@ -12,14 +12,12 @@
- +

General Limits


- - @@ -34,12 +32,11 @@
- +

Specific Limits


- @@ -47,24 +44,6 @@
- - - - - - - - - - - - - - - - - -
diff --git a/partner_financial_risk/wizard/__init__.py b/partner_financial_risk/wizard/__init__.py deleted file mode 100644 index 58f6a0f1f..000000000 --- a/partner_financial_risk/wizard/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import sale_order_risk_exceeded diff --git a/partner_financial_risk/wizard/sale_order_risk_exceeded.py b/partner_financial_risk/wizard/sale_order_risk_exceeded.py deleted file mode 100644 index 90776704e..000000000 --- a/partner_financial_risk/wizard/sale_order_risk_exceeded.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# © 2016 Carlos Dauden -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from openerp import api, fields, models - - -class SaleOrderRiskExceeded(models.TransientModel): - _name = 'sale.order.risk.exceeded' - - partner_id = fields.Many2one( - comodel_name='res.partner', readonly=True, string='Customer') - exception_msg = fields.Text(readonly=True) - - @api.multi - def button_continue(self): - self.ensure_one() - so = self.env['sale.order'].browse(self.env.context['active_id']) - return so.with_context(bypass_risk=True).action_confirm() diff --git a/partner_financial_risk/wizard/sale_order_risk_exceeded_view.xml b/partner_financial_risk/wizard/sale_order_risk_exceeded_view.xml deleted file mode 100644 index 909199379..000000000 --- a/partner_financial_risk/wizard/sale_order_risk_exceeded_view.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Partner risk exceeded - sale.order.risk.exceeded - -
-

The partner has exceeded his risk

- - - - - - -
-
-
\ No newline at end of file