You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.7 KiB
42 lines
1.7 KiB
# -*- coding: utf-8 -*-
|
|
# © 2016 Carlos Dauden <carlos.dauden@tecnativa.com>
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
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')
|
|
|
|
@api.multi
|
|
@api.depends('sale_order_ids', 'sale_order_ids.invoice_pending_amount',
|
|
'child_ids.sale_order_ids',
|
|
'child_ids.sale_order_ids.invoice_pending_amount')
|
|
def _compute_risk_sale_order(self):
|
|
customers = self.filtered('customer')
|
|
partners = customers | customers.mapped('child_ids')
|
|
orders_group = self.env['sale.order'].read_group(
|
|
[('state', '=', 'sale'), ('partner_id', 'in', partners.ids)],
|
|
['partner_id', 'invoice_pending_amount'],
|
|
['partner_id'])
|
|
for partner in customers:
|
|
partner_ids = (partner | partner.child_ids).ids
|
|
partner.risk_sale_order = sum(
|
|
[x['invoice_pending_amount']
|
|
for x in orders_group if x['partner_id'][0] in partner_ids])
|
|
|
|
@api.model
|
|
def _risk_field_list(self):
|
|
res = super(ResPartner, self)._risk_field_list()
|
|
res.append(('risk_sale_order', 'risk_sale_order_limit',
|
|
'risk_sale_order_include'))
|
|
return res
|