houssine
4 years ago
5 changed files with 119 additions and 26 deletions
-
2easy_my_coop_loan_account/models/account_move.py
-
4easy_my_coop_loan_account/models/company.py
-
121easy_my_coop_loan_account/models/interest_line.py
-
16easy_my_coop_loan_account/models/loan_issue_line.py
-
2easy_my_coop_loan_account/views/res_company_view.xml
@ -1,18 +1,123 @@ |
|||||
# Copyright 2019 Coop IT Easy SCRL fs |
|
||||
|
# Copyright 2020 Coop IT Easy SCRL fs |
||||
# Houssine BAKKALI <houssine@coopiteasy.be> |
# Houssine BAKKALI <houssine@coopiteasy.be> |
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
from odoo import api, models |
|
||||
|
from odoo import api, fields, models |
||||
|
|
||||
|
|
||||
class LoanInterestLine(models.Model): |
class LoanInterestLine(models.Model): |
||||
_inherit = "loan.interest.line" |
_inherit = "loan.interest.line" |
||||
|
|
||||
|
loan_due_fy_move = fields.Many2one( |
||||
|
comodel_name="account.move", |
||||
|
string="Loan due this fiscal year account move" |
||||
|
) |
||||
|
loan_reimbursment_move = fields.Many2one( |
||||
|
comodel_name="account.move", |
||||
|
string="Loan reimbursement account move" |
||||
|
) |
||||
|
interest_payment_move = fields.Many2one( |
||||
|
comodel_name="account.move", |
||||
|
string="Interest payment account move" |
||||
|
) |
||||
|
|
||||
|
@api.multi |
||||
|
def get_move_line(self, move_id, partner=None): |
||||
|
self.ensure_one() |
||||
|
move_line = { |
||||
|
"date_maturity": self.due_date, |
||||
|
"date": self.due_date, |
||||
|
"move_id": move_id, |
||||
|
} |
||||
|
if partner: |
||||
|
move_line["partner_id"] = partner.id |
||||
|
return move_line |
||||
|
|
||||
|
@api.multi |
||||
|
def create_move(self, date=None): |
||||
|
self.ensure_one() |
||||
|
if date: |
||||
|
due_date = date |
||||
|
else: |
||||
|
due_date = self.due_date |
||||
|
|
||||
|
return self.env["account.move"].create({ |
||||
|
"ref": self.loan_issue_id.reference, |
||||
|
"date": due_date, |
||||
|
"journal_id": self.company_id.loan_journal.id, |
||||
|
}) |
||||
|
|
||||
|
@api.multi |
||||
|
def generate_interest_payement_move_lines(self): |
||||
|
self.ensure_one() |
||||
|
move_line_obj = self.env["account.move.line"] |
||||
|
|
||||
|
move = self.create_move() |
||||
|
debit_vals = self.get_move_line(self.partner_id) |
||||
|
loaner_vals = self.get_move_line(self.partner_id) |
||||
|
|
||||
|
debit_vals["debit"] = self.interest |
||||
|
debit_vals["account_id"] = self.company_id.interest_account.id |
||||
|
|
||||
|
loaner_vals["credit"] = self.due_amount |
||||
|
loaner_vals["account_id"] = self.company_id.loaner_account |
||||
|
vals_list = [debit_vals, loaner_vals] |
||||
|
if self.taxes_amount > 0: |
||||
|
tax_vals = self.get_move_line() |
||||
|
tax_vals["credit"] = self.taxes_amount |
||||
|
tax_vals["account_id"] = self.company_id.tax_account.id |
||||
|
vals_list.append(tax_vals) |
||||
|
|
||||
|
move_line_obj.create(vals_list) |
||||
|
|
||||
|
self.interest_payment_mpve = move |
||||
|
|
||||
|
@api.multi |
||||
|
def generate_loan_due_fy(self): |
||||
|
self.ensure_one() |
||||
|
|
||||
|
move_line_obj = self.env["account.move.line"] |
||||
|
|
||||
|
move = self.create_move(fields.Date.today()) |
||||
|
|
||||
|
debit_vals = self.get_move_line(self.partner_id) |
||||
|
credit_vals = self.get_move_line(self.partner_id) |
||||
|
|
||||
|
debit_vals["debit"] = self.due_amount |
||||
|
debit_vals["account_id"] = self.company_id.debt_long_term_account.id |
||||
|
|
||||
|
credit_vals["credit"] = self.due_amount |
||||
|
credit_vals["account_id"] = self.company_id.debt_long_term_fy_account |
||||
|
|
||||
|
move_line_obj.create([debit_vals, credit_vals]) |
||||
|
|
||||
|
self.loan_due_fy_move = move |
||||
|
|
||||
@api.model |
@api.model |
||||
def _generate_loan_reimbursement_fy(self): |
|
||||
#TODO get fiscal year begin and end dates |
|
||||
interest_lines = self.search([('due_date', '<=', ''), |
|
||||
('due_date', '<=', ) |
|
||||
]) |
|
||||
|
def _generate_move_line_debt_end_fy(self): |
||||
|
fy = self.env["account.fiscal.year"].get_next_fiscal_year() |
||||
|
if fy: |
||||
|
interest_lines = self.search([ |
||||
|
('due_date', '>=', fy.date_from), |
||||
|
('due_date', '<=', fy.date_to), |
||||
|
('due_loan_amount', '>', 0), |
||||
|
]) |
||||
|
|
||||
|
for line in interest_lines: |
||||
|
if (not line.loan_reimbursment_move |
||||
|
and not line.loan_due_fy_move): |
||||
|
self.generate_loan_due_fy() |
||||
|
|
||||
|
@api.model |
||||
|
def _generate_payment_move(self): |
||||
|
# TODO configure how many days before you want generate the move lines |
||||
|
interest_lines = self.search([ |
||||
|
('due_date', '>=', fy.date_from), |
||||
|
('due_date', '<=', fy.date_to), |
||||
|
('due_amount', '>', 0), |
||||
|
]) |
||||
for line in interest_lines: |
for line in interest_lines: |
||||
print() |
|
||||
|
if line.interest > 0 and not line.loan_reimbursment_move: |
||||
|
line.generate_interest_payement_move_lines() |
||||
|
|
||||
|
return True |
Write
Preview
Loading…
Cancel
Save
Reference in new issue