|
2 | 2 | # Copyright 2016 Carlos Dauden <[email protected]> |
3 | 3 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
4 | 4 |
|
| 5 | +from collections import defaultdict |
5 | 6 | from datetime import datetime |
6 | 7 | from dateutil.relativedelta import relativedelta |
7 | 8 | from odoo import api, fields, models |
@@ -256,12 +257,24 @@ def process_unpaid_invoices(self): |
256 | 257 | ConfigParameter = self.env['ir.config_parameter'] |
257 | 258 | last_check = ConfigParameter.get_param( |
258 | 259 | 'partner_financial_risk.last_check', default='2016-01-01') |
259 | | - move_lines = self.env['account.move.line'].search([ |
260 | | - ('reconciled', '=', False), |
261 | | - ('account_id.internal_type', '=', 'receivable'), |
262 | | - ('date_maturity', '>=', last_check), |
263 | | - ('date_maturity', '<', max_date)]) |
264 | | - move_lines.mapped('partner_id')._compute_risk_account_amount() |
| 260 | + groups = self.env['account.move.line'].sudo().read_group( |
| 261 | + [('reconciled', '=', False), |
| 262 | + ('partner_id', '!=', False), |
| 263 | + ('account_id.internal_type', '=', 'receivable'), |
| 264 | + ('date_maturity', '>=', last_check), |
| 265 | + ('date_maturity', '<', max_date)], |
| 266 | + ['company_id', 'partner_id'], |
| 267 | + ['company_id', 'partner_id'], |
| 268 | + lazy=False, |
| 269 | + ) |
| 270 | + group_dic = defaultdict(list) |
| 271 | + for group in groups: |
| 272 | + group_dic[group['company_id'][0]].append(group['partner_id'][0]) |
| 273 | + for company_id, partner_ids in group_dic.iteritems(): |
| 274 | + partners = self.browse(partner_ids) |
| 275 | + partners.with_context( |
| 276 | + force_company=company_id, |
| 277 | + )._compute_risk_account_amount() |
265 | 278 | ConfigParameter.set_param( |
266 | 279 | 'partner_financial_risk.last_check', max_date) |
267 | 280 | return True |
0 commit comments