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.
77 lines
3.1 KiB
77 lines
3.1 KiB
# Copyright 2020 Coop IT Easy SCRL fs
|
|
# Houssine BAKKALI <houssine@coopiteasy.be>
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
|
from odoo import api, fields, models
|
|
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class LoanEndOfYearOperation(models.TransientModel):
|
|
_name = "loan.end.of.year.operation"
|
|
operation_type = fields.Selection(
|
|
[("eoy_operation", "End of year operation"),
|
|
("loan_due", "Loan payment account move lines")],
|
|
required=True,
|
|
string="Operation type"
|
|
)
|
|
ongoing_fy_id = fields.Many2one(
|
|
comodel_name="account.fiscal.year",
|
|
string="Ongoing fiscal year",
|
|
required=True
|
|
)
|
|
due_date = fields.Date(
|
|
string="Due date"
|
|
)
|
|
|
|
@api.multi
|
|
def run(self):
|
|
self.ensure_one()
|
|
afy_obj = self.env["account.fiscal.year"]
|
|
interest_line_obj = self.env["loan.interest.line"]
|
|
|
|
loan_issues = self.env["loan.issue"].browse(
|
|
self._context.get("active_ids")
|
|
)
|
|
|
|
last_fy_day = self.ongoing_fy_id.date_to
|
|
next_fy = afy_obj.get_next_fiscal_year(last_fy_day)
|
|
|
|
if self.ongoing_fy_id == "eoy_operation":
|
|
if next_fy:
|
|
interest_lines_loan = interest_line_obj.search([
|
|
("due_date", ">=", next_fy.date_from),
|
|
("due_date", "<=", next_fy.date_to),
|
|
("due_loan_amount", ">", 0),
|
|
("loan_issue_id", "in", loan_issues.ids),
|
|
("loan_reimbursment_move", "=", False)
|
|
])
|
|
|
|
interest_lines_loan.generate_loan_due_fy(last_fy_day)
|
|
interest_lines = interest_line_obj.search([
|
|
("due_date", ">=", next_fy.date_from),
|
|
("due_date", "<=", next_fy.date_to),
|
|
("interest", ">", 0),
|
|
("loan_issue_id", "in", loan_issues.ids),
|
|
("interest_closing_fy", "=", False),
|
|
("interest_opening_fy", "=", False)
|
|
])
|
|
|
|
interest_lines.generate_interest_move_lines_fy(last_fy_day,
|
|
next_fy)
|
|
# interest_lines.write({"state": "scheduled"})
|
|
# interest_lines_loan.write({"state": "scheduled"})
|
|
(interest_lines + interest_lines_loan).write({"state":
|
|
"scheduled"})
|
|
if not interest_lines_loan and not interest_lines:
|
|
raise UserError("There is no end of year account move"
|
|
" lines to generate for the selected loan"
|
|
" issue")
|
|
elif self.ongoing_fy_id == "loan_due":
|
|
interest_lines = interest_line_obj.search([
|
|
("due_date", ">=", next_fy.date_from),
|
|
("due_date", "<=", next_fy.date_to),
|
|
("interest", ">", 0),
|
|
("loan_issue_id", "in", loan_issues.ids),
|
|
("interest_closing_fy", "=", False),
|
|
("interest_opening_fy", "=", False)
|
|
])
|