65 lines
2.2 KiB
Python
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()
|