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.
 
 
 

51 lines
2.0 KiB

# -*- coding: utf-8 -*-
# © 2016 Binovo IT Human Project SL <elacunza@binovo.es>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import models, fields, api
from dateutil.relativedelta import relativedelta
import datetime
import time
class AccountAnalyticAccount(models.Model):
_inherit = 'account.analytic.account'
recurring_rule_type = fields.Selection(
selection_add=[('monthlylastday', 'Month(s) - Last day')])
@api.multi
def _recurring_create_invoice(self, automatic=False):
invoice_ids = []
current_date = time.strftime('%Y-%m-%d')
if self.ids:
contracts = self
else:
contracts = self.search(
[('recurring_next_date', '<=', current_date),
('state', '=', 'open'),
('recurring_invoices', '=', True),
('type', '=', 'contract')])
for contract in contracts:
is_monthlylastday = False
orig_next_date = contract.recurring_next_date
if contract.recurring_rule_type == 'monthlylastday':
is_monthlylastday = True
contract.recurring_rule_type = 'monthly'
try:
invoice_ids.append(super(AccountAnalyticAccount, contract)
._recurring_create_invoice(automatic))
finally:
if is_monthlylastday:
contract.recurring_rule_type = 'monthlylastday'
# Note: recurring_next_day has been already incremented by super if
# invoice was created. Adjust it to month's last day
if is_monthlylastday \
and contract.recurring_next_date != orig_next_date:
next_date = datetime.datetime.strptime(
contract.recurring_next_date,
"%Y-%m-%d")
new_date = next_date + relativedelta(day=31)
contract.write(
{'recurring_next_date': new_date.strftime('%Y-%m-%d')})
return invoice_ids