Files
enterprise-addons/account_loans/__init__.py
T

65 lines
2.2 KiB
Python

import csv
import io
from dateutil.relativedelta import relativedelta
from odoo import fields
from . import models
from . import wizard
def _account_loans_post_init(env):
# If in demo, import the demo amortization schedule in the loan
if env.ref('base.module_account_loans').demo:
_account_loans_import_loan_demo(
env,
env.ref('account_loans.account_loans_loan_demo1'),
env.ref('account_loans.account_loans_loan_demo_file_csv')
)
_account_loans_import_loan_demo(
env,
env.ref('account_loans.account_loans_loan_demo2'),
env.ref('account_loans.account_loans_loan_demo_file_xlsx')
)
def _account_loans_add_date_column(csv_attachment):
# Modify the CSV such that one part of the loan lines are in the past (so their related
# generated entries are posted), and the other part in the future (so in draft)
data = io.StringIO()
writer = csv.writer(data, delimiter=',')
reader = csv.reader(io.StringIO(csv_attachment.raw.decode()), quotechar='"', delimiter=',')
current_date = fields.Date.today() - relativedelta(years=1)
for i, row in enumerate(reader):
if i == 0:
row.insert(0, 'Date')
else:
row.insert(0, current_date.strftime('%Y-%m-%d'))
current_date += relativedelta(months=1)
writer.writerow(row)
data.seek(0) # move offset back to beginning
generated_file = data.read()
data.close()
csv_attachment.raw = generated_file.encode()
return csv_attachment
def _account_loans_import_loan_demo(env, loan, attachment):
if attachment.mimetype == 'text/csv':
attachment = _account_loans_add_date_column(attachment)
action = loan.action_upload_amortization_schedule(attachment.id)
import_wizard = env['base_import.import'].browse(action.get('params', {}).get('context', {}).get('wizard_id'))
result = import_wizard.parse_preview({
'quoting': '"',
'separator': ',',
'date_format': '%Y-%m-%d',
'has_headers': True,
})
import_wizard.with_context(default_loan_id=loan.id).execute_import(
['date', 'principal', 'interest'],
[],
result.get("options", {}),
)
loan.action_file_uploaded()