[FIX] account_analytic_analysis: prevent enable recurring invoices if not of type contract. Avoid cron to not continue if one of the contract failed to create its recurring invoices
bzr revid: dle@openerp.com-20140418132917-ztvzinwn3kt786m2
This commit is contained in:
parent
cb4d2d16b5
commit
6e04c0c5eb
|
@ -22,6 +22,7 @@ from dateutil.relativedelta import relativedelta
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import osv, fields
|
||||||
from openerp.osv.orm import intersect, except_orm
|
from openerp.osv.orm import intersect, except_orm
|
||||||
|
@ -714,23 +715,40 @@ class account_analytic_account(osv.osv):
|
||||||
inv_obj.button_compute(cr, uid, [invoice_id], context=context)
|
inv_obj.button_compute(cr, uid, [invoice_id], context=context)
|
||||||
return invoice_id
|
return invoice_id
|
||||||
|
|
||||||
def recurring_create_invoice(self, cr, uid, automatic=False, context=None):
|
def recurring_create_invoice(self, cr, uid, ids, context=None):
|
||||||
|
return self._recurring_create_invoice(cr, uid, ids, context=context)
|
||||||
|
|
||||||
|
def _cron_recurring_create_invoice(self, cr, uid, context=None):
|
||||||
|
return self._recurring_create_invoice(cr, uid, [], automatic=True, context=context)
|
||||||
|
|
||||||
|
def _recurring_create_invoice(self, cr, uid, ids, automatic=False, context=None):
|
||||||
context = context or {}
|
context = context or {}
|
||||||
current_date = time.strftime('%Y-%m-%d')
|
current_date = time.strftime('%Y-%m-%d')
|
||||||
|
if ids:
|
||||||
contract_ids = self.search(cr, uid, [('recurring_next_date','<=', current_date), ('state','=', 'open'), ('recurring_invoices','=', True)])
|
contract_ids = ids
|
||||||
|
else:
|
||||||
|
contract_ids = self.search(cr, uid, [('recurring_next_date','<=', current_date), ('state','=', 'open'), ('recurring_invoices','=', True)])
|
||||||
for contract in self.browse(cr, uid, contract_ids, context=context):
|
for contract in self.browse(cr, uid, contract_ids, context=context):
|
||||||
invoice_id = self._prepare_invoice(cr, uid, contract, context=context)
|
try:
|
||||||
|
invoice_id = self._prepare_invoice(cr, uid, contract, context=context)
|
||||||
|
|
||||||
next_date = datetime.datetime.strptime(contract.recurring_next_date or current_date, "%Y-%m-%d")
|
next_date = datetime.datetime.strptime(contract.recurring_next_date or current_date, "%Y-%m-%d")
|
||||||
interval = contract.recurring_interval
|
interval = contract.recurring_interval
|
||||||
if contract.recurring_rule_type == 'daily':
|
if contract.recurring_rule_type == 'daily':
|
||||||
new_date = next_date+relativedelta(days=+interval)
|
new_date = next_date+relativedelta(days=+interval)
|
||||||
elif contract.recurring_rule_type == 'weekly':
|
elif contract.recurring_rule_type == 'weekly':
|
||||||
new_date = next_date+relativedelta(weeks=+interval)
|
new_date = next_date+relativedelta(weeks=+interval)
|
||||||
else:
|
else:
|
||||||
new_date = next_date+relativedelta(months=+interval)
|
new_date = next_date+relativedelta(months=+interval)
|
||||||
self.write(cr, uid, [contract.id], {'recurring_next_date': new_date.strftime('%Y-%m-%d')}, context=context)
|
self.write(cr, uid, [contract.id], {'recurring_next_date': new_date.strftime('%Y-%m-%d')}, context=context)
|
||||||
|
if automatic:
|
||||||
|
cr.commit()
|
||||||
|
except Exception:
|
||||||
|
if automatic:
|
||||||
|
cr.rollback()
|
||||||
|
_logger.error(traceback.format_exc())
|
||||||
|
else:
|
||||||
|
raise
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class account_analytic_account_summary_user(osv.osv):
|
class account_analytic_account_summary_user(osv.osv):
|
||||||
|
|
|
@ -93,7 +93,7 @@ OpenERP Automatic Email
|
||||||
<field name="interval_type">days</field>
|
<field name="interval_type">days</field>
|
||||||
<field name="numbercall">-1</field>
|
<field name="numbercall">-1</field>
|
||||||
<field name="model" eval="'account.analytic.account'"/>
|
<field name="model" eval="'account.analytic.account'"/>
|
||||||
<field name="function" eval="'recurring_create_invoice'"/>
|
<field name="function" eval="'_cron_recurring_create_invoice'"/>
|
||||||
<field name="args" eval="'()'"/>
|
<field name="args" eval="'()'"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -148,8 +148,10 @@
|
||||||
</group>
|
</group>
|
||||||
<separator string="Recurring Invoices" attrs="{'invisible': [('recurring_invoices','!=',True)]}"/>
|
<separator string="Recurring Invoices" attrs="{'invisible': [('recurring_invoices','!=',True)]}"/>
|
||||||
<div>
|
<div>
|
||||||
<field name="recurring_invoices" on_change="onchange_recurring_invoices(recurring_invoices, date_start)" class="oe_inline"/>
|
<div attrs="{'invisible': [('type','!=', 'contract'), ('recurring_invoices', '=', False)]}">
|
||||||
<label for="recurring_invoices" />
|
<field name="recurring_invoices" on_change="onchange_recurring_invoices(recurring_invoices, date_start)" class="oe_inline" />
|
||||||
|
<label for="recurring_invoices" />
|
||||||
|
</div>
|
||||||
<button class="oe_link" name="recurring_create_invoice" attrs="{'invisible': [('recurring_invoices','!=',True)]}" string="⇒ create invoices" type="object" groups="base.group_no_one"/>
|
<button class="oe_link" name="recurring_create_invoice" attrs="{'invisible': [('recurring_invoices','!=',True)]}" string="⇒ create invoices" type="object" groups="base.group_no_one"/>
|
||||||
</div>
|
</div>
|
||||||
<group attrs="{'invisible': [('recurring_invoices','!=',True)]}">
|
<group attrs="{'invisible': [('recurring_invoices','!=',True)]}">
|
||||||
|
|
Loading…
Reference in New Issue