mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
[FIX] contract: Process invoices limit in a lower method
To avoid blocking the queue when there are more than the specified limit of contracts, we process the limit while creating invoices instead of while searching for contracts, and break the process when the max of invoices has been created. See https://github.com/OCA/contract/pull/260#pullrequestreview-192187022 for more details. In case you need to use this new feature in the cron, it is also modified as `noupdate=1`.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding='UTF-8'?>
|
||||
<odoo>
|
||||
<odoo noupdate="1">
|
||||
|
||||
<record model="ir.cron" id="account_analytic_cron_for_invoice">
|
||||
<field name="name">Generate Recurring Invoices from Contracts</field>
|
||||
|
||||
@@ -260,13 +260,18 @@ class AccountAnalyticAccount(models.Model):
|
||||
return invoice
|
||||
|
||||
@api.multi
|
||||
def recurring_create_invoice(self):
|
||||
def recurring_create_invoice(self, limit=None):
|
||||
"""Create invoices from contracts
|
||||
|
||||
:param int limit:
|
||||
Max of invoices to create.
|
||||
|
||||
:return: invoices created
|
||||
"""
|
||||
invoices = self.env['account.invoice']
|
||||
for contract in self:
|
||||
if limit and len(invoices) >= limit:
|
||||
break
|
||||
ref_date = contract.recurring_next_date or fields.Date.today()
|
||||
if (contract.date_start > ref_date or
|
||||
contract.date_end and contract.date_end < ref_date):
|
||||
@@ -302,8 +307,8 @@ class AccountAnalyticAccount(models.Model):
|
||||
'|',
|
||||
('date_end', '=', False),
|
||||
('date_end', '>=', today),
|
||||
], limit=limit)
|
||||
return contracts.recurring_create_invoice()
|
||||
])
|
||||
return contracts.recurring_create_invoice(limit)
|
||||
|
||||
@api.multi
|
||||
def action_contract_send(self):
|
||||
|
||||
Reference in New Issue
Block a user