42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
# Fusion Accounting - Currency Extensions
|
|
# Incorporates manual fiscal year boundaries into the currency rate table
|
|
|
|
from odoo import models
|
|
|
|
|
|
class FusionResCurrency(models.Model):
|
|
"""Extends the currency rate table generation to honour manually
|
|
defined fiscal years when computing period boundaries."""
|
|
|
|
_inherit = 'res.currency'
|
|
|
|
def _get_currency_table_fiscal_year_bounds(self, main_company):
|
|
"""Merge automatically computed fiscal-year boundaries with
|
|
any manually defined ``account.fiscal.year`` records, ensuring
|
|
that manual periods take precedence within their date ranges."""
|
|
auto_bounds = super()._get_currency_table_fiscal_year_bounds(main_company)
|
|
|
|
manual_fy_records = self.env['account.fiscal.year'].search(
|
|
self.env['account.fiscal.year']._check_company_domain(main_company),
|
|
order='date_from ASC',
|
|
)
|
|
manual_periods = manual_fy_records.mapped(lambda fy: (fy.date_from, fy.date_to))
|
|
|
|
merged = []
|
|
for auto_start, auto_end in auto_bounds:
|
|
# Pop manual periods that fall within this automatic boundary
|
|
while (
|
|
manual_periods
|
|
and (
|
|
not auto_end
|
|
or (auto_start and auto_start <= manual_periods[0][0] and auto_end >= manual_periods[0][0])
|
|
or auto_end >= manual_periods[0][1]
|
|
)
|
|
):
|
|
merged.append(manual_periods.pop(0))
|
|
|
|
if not merged or merged[-1][1] < auto_start:
|
|
merged.append((auto_start, auto_end))
|
|
|
|
return merged
|