mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
Add new module for monthly recurring invoices, on month's last day (#25)
[ADD] contract_recurring_invoicing_monthly_last_day New module for monthly recurring invoices, on month's last day
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# -*- 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
|
||||
Reference in New Issue
Block a user