Skip to content

Commit

Permalink
[MIG] account_financial_report: Migration to 14.0
Browse files Browse the repository at this point in the history
  • Loading branch information
tupaq committed Oct 21, 2020
1 parent c18e0db commit 4259085
Show file tree
Hide file tree
Showing 19 changed files with 342 additions and 221 deletions.
3 changes: 2 additions & 1 deletion account_financial_report/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Account Financial Reports",
"version": "13.0.1.4.1",
"version": "14.0.1.0.0",
"category": "Reporting",
"summary": "OCA Financial Reports",
"author": "Camptocamp SA,"
Expand All @@ -16,6 +16,7 @@
"website": "https://odoo-community.org/",
"depends": ["account", "date_range", "report_xlsx"],
"data": [
"security/ir.model.access.csv",
"wizard/aged_partner_balance_wizard_view.xml",
"wizard/general_ledger_wizard_view.xml",
"wizard/journal_ledger_wizard_view.xml",
Expand Down
2 changes: 1 addition & 1 deletion account_financial_report/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from . import account
from . import account_group
from . import account
from . import account_move_line
from . import ir_actions_report
12 changes: 6 additions & 6 deletions account_financial_report/models/account_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class AccountGroup(models.Model):
group_child_ids = fields.One2many(
comodel_name="account.group", inverse_name="parent_id", string="Child Groups"
)
level = fields.Integer(string="Level", compute="_compute_level", store=True)
level = fields.Integer(string="Level", compute="_compute_level")
account_ids = fields.One2many(
comodel_name="account.account", inverse_name="group_id", string="Accounts"
)
Expand All @@ -31,15 +31,15 @@ def _compute_complete_name(self):
else:
self.complete_name = self.name

@api.depends("code_prefix", "parent_id.complete_code")
@api.depends("code_prefix_start", "parent_id.complete_code")
def _compute_complete_code(self):
""" Forms complete code of location from parent location to child location. """
if self.parent_id.complete_code:
self.complete_code = "{}/{}".format(
self.parent_id.complete_code, self.code_prefix
self.parent_id.complete_code, self.code_prefix_start
)
else:
self.complete_code = self.code_prefix
self.complete_code = self.code_prefix_start

@api.depends("parent_id", "parent_id.level")
def _compute_level(self):
Expand All @@ -50,7 +50,7 @@ def _compute_level(self):
group.level = group.parent_id.level + 1

@api.depends(
"code_prefix",
"code_prefix_start",
"account_ids",
"account_ids.code",
"group_child_ids",
Expand All @@ -60,6 +60,6 @@ def _compute_group_accounts(self):
account_obj = self.env["account.account"]
accounts = account_obj.search([])
for group in self:
prefix = group.code_prefix if group.code_prefix else group.name
prefix = group.code_prefix_start if group.code_prefix_start else group.name
gr_acc = accounts.filtered(lambda a: a.code.startswith(prefix)).ids
group.compute_account_ids = [(6, 0, gr_acc)]
166 changes: 118 additions & 48 deletions account_financial_report/report/abstract_report_xlsx.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,43 +10,107 @@ class AbstractReportXslx(models.AbstractModel):
_inherit = "report.report_xlsx.abstract"

def __init__(self, pool, cr):
self._set_default_attributes()

@classmethod
def _set_default_attributes(cls):
# main sheet which will contains report
self.sheet = None
cls.sheet = None

# columns of the report
self.columns = None
cls.columns = None

# row_pos must be incremented at each writing lines
self.row_pos = None
cls.row_pos = None

# Formats
self.format_right = None
self.format_left = None
self.format_right_bold_italic = None
self.format_bold = None
self.format_header_left = None
self.format_header_center = None
self.format_header_right = None
self.format_header_amount = None
self.format_amount = None
self.format_percent_bold_italic = None
cls.format_right = None
cls.format_left = None
cls.format_right_bold_italic = None
cls.format_bold = None
cls.format_header_left = None
cls.format_header_center = None
cls.format_header_right = None
cls.format_header_amount = None
cls.format_amount = None
cls.format_percent_bold_italic = None

@classmethod
def set_sheet(cls, sheet):
cls.sheet = sheet

@classmethod
def set_columns(cls, columns):
cls.columns = columns

@classmethod
def set_row_pos(cls, row_pos):
cls.row_pos = row_pos

@classmethod
def set_format_right(cls, format_right):
cls.format_right = format_right

@classmethod
def set_format_left(cls, format_left):
cls.format_left = format_left

@classmethod
def set_format_right_bold_italic(cls, format_right_bold_italic):
cls.format_right_bold_italic = format_right_bold_italic

@classmethod
def set_format_bold(cls, format_bold):
cls.format_bold = format_bold

@classmethod
def set_format_header_left(cls, format_header_left):
cls.format_header_left = format_header_left

@classmethod
def set_format_header_center(cls, format_header_center):
cls.format_header_center = format_header_center

@classmethod
def set_format_header_right(cls, format_header_right):
cls.format_header_right = format_header_right

@classmethod
def set_format_header_amount(cls, format_header_amount):
cls.format_header_amount = format_header_amount

@classmethod
def set_format_amount(cls, format_amount):
cls.format_amount = format_amount

@classmethod
def set_format_percent_bold_italic(cls, format_percent_bold_italic):
cls.format_percent_bold_italic = format_percent_bold_italic

@classmethod
def set_format_amount_bold(cls, format_amount_bold):
cls.format_amount_bold = format_amount_bold

@classmethod
def set_workbook(cls, workbook):
cls.workbook = workbook

def get_workbook_options(self):
return {"constant_memory": True}

def generate_xlsx_report(self, workbook, data, objects):
report = objects

self.row_pos = 0
self.set_row_pos(0)

self._define_formats(workbook)

report_name = self._get_report_name(report, data=data)
report_footer = self._get_report_footer()
filters = self._get_report_filters(report)
self.columns = self._get_report_columns(report)
self.workbook = workbook
self.sheet = workbook.add_worksheet(report_name[:31])
self.set_columns(self._get_report_columns(report))
self.set_workbook(workbook)
self.set_sheet(workbook.add_worksheet(report_name[:31]))

self._set_column_width()

Expand All @@ -72,36 +136,42 @@ def _define_formats(self, workbook):
* format_amount
* format_percent_bold_italic
"""
self.format_bold = workbook.add_format({"bold": True})
self.format_right = workbook.add_format({"align": "right"})
self.format_left = workbook.add_format({"align": "left"})
self.format_right_bold_italic = workbook.add_format(
{"align": "right", "bold": True, "italic": True}
self.set_format_bold(workbook.add_format({"bold": True}))
self.set_format_right(workbook.add_format({"align": "right"}))
self.set_format_left(workbook.add_format({"align": "left"}))
self.set_format_right_bold_italic(
workbook.add_format({"align": "right", "bold": True, "italic": True})
)
self.format_header_left = workbook.add_format(
{"bold": True, "border": True, "bg_color": "#FFFFCC"}
self.set_format_header_left(
workbook.add_format({"bold": True, "border": True, "bg_color": "#FFFFCC"})
)
self.format_header_center = workbook.add_format(
{"bold": True, "align": "center", "border": True, "bg_color": "#FFFFCC"}
self.set_format_header_center(
workbook.add_format(
{"bold": True, "align": "center", "border": True, "bg_color": "#FFFFCC"}
)
)
self.format_header_right = workbook.add_format(
{"bold": True, "align": "right", "border": True, "bg_color": "#FFFFCC"}
self.set_format_header_right(
workbook.add_format(
{"bold": True, "align": "right", "border": True, "bg_color": "#FFFFCC"}
)
)
self.format_header_amount = workbook.add_format(
{"bold": True, "border": True, "bg_color": "#FFFFCC"}
self.set_format_header_amount(
workbook.add_format({"bold": True, "border": True, "bg_color": "#FFFFCC"})
)
currency_id = self.env["res.company"]._get_user_currency()
currency_id = (
self.env.company.currency_id
) # self.env["res.company"]._get_user_currency()
self.format_header_amount.set_num_format(
"#,##0." + "0" * currency_id.decimal_places
)
self.format_amount = workbook.add_format()
self.set_format_amount(workbook.add_format())
self.format_amount.set_num_format("#,##0." + "0" * currency_id.decimal_places)
self.format_amount_bold = workbook.add_format({"bold": True})
self.set_format_amount_bold(workbook.add_format({"bold": True}))
self.format_amount_bold.set_num_format(
"#,##0." + "0" * currency_id.decimal_places
)
self.format_percent_bold_italic = workbook.add_format(
{"bold": True, "italic": True}
self.set_format_percent_bold_italic(
workbook.add_format({"bold": True, "italic": True})
)
self.format_percent_bold_italic.set_num_format("#,##0.00%")

Expand All @@ -124,14 +194,14 @@ def _write_report_title(self, title):
title,
self.format_bold,
)
self.row_pos += 3
self.set_row_pos(self.row_pos + 3)

def _write_report_footer(self, footer):
"""Write report footer .
Columns are defined with `_get_report_columns` method.
"""
if footer:
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)
self.sheet.merge_range(
self.row_pos,
0,
Expand All @@ -140,7 +210,7 @@ def _write_report_footer(self, footer):
footer,
self.format_left,
)
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)

def _write_filters(self, filters):
"""Write one line per filters on starting on current line.
Expand Down Expand Up @@ -169,8 +239,8 @@ def _write_filters(self, filters):
col_value + col_count_filter_value - 1,
value,
)
self.row_pos += 1
self.row_pos += 2
self.set_row_pos(self.row_pos + 1)
self.set_row_pos(self.row_pos + 2)

def write_array_title(self, title):
"""Write array title on current line using all defined columns width.
Expand All @@ -184,7 +254,7 @@ def write_array_title(self, title):
title,
self.format_bold,
)
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)

def write_array_header(self):
"""Write array header on current line using all defined columns name.
Expand All @@ -194,7 +264,7 @@ def write_array_header(self):
self.sheet.write(
self.row_pos, col_pos, column["header"], self.format_header_center
)
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)

def write_line(self, line_object):
"""Write a line on current line using all defined columns field name.
Expand Down Expand Up @@ -234,7 +304,7 @@ def write_line(self, line_object):
self.sheet.write_number(
self.row_pos, col_pos, float(value), format_amt
)
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)

def write_line_from_dict(self, line_dict):
"""Write a line on current line"""
Expand Down Expand Up @@ -278,7 +348,7 @@ def write_line_from_dict(self, line_dict):
self.sheet.write_string(
self.row_pos, col_pos, value or "", self.format_right
)
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)

def write_initial_balance(self, my_object, label):
"""Write a specific initial balance line on current line
Expand Down Expand Up @@ -311,7 +381,7 @@ def write_initial_balance(self, my_object, label):
self.sheet.write_string(
self.row_pos, col_pos, value.name or "", self.format_right
)
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)

def write_initial_balance_from_dict(self, my_object, label):
"""Write a specific initial balance line on current line
Expand Down Expand Up @@ -344,7 +414,7 @@ def write_initial_balance_from_dict(self, my_object, label):
self.sheet.write_string(
self.row_pos, col_pos, value.name or "", self.format_right
)
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)

def write_ending_balance(self, my_object, name, label):
"""Write a specific ending balance line on current line
Expand Down Expand Up @@ -393,7 +463,7 @@ def write_ending_balance(self, my_object, name, label):
value.name or "",
self.format_header_right,
)
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)

def write_ending_balance_from_dict(self, my_object, name, label):
"""Write a specific ending balance line on current line
Expand Down Expand Up @@ -443,7 +513,7 @@ def write_ending_balance_from_dict(self, my_object, name, label):
self.sheet.write_string(
self.row_pos, col_pos, value or "", self.format_header_right
)
self.row_pos += 1
self.set_row_pos(self.row_pos + 1)

def _get_currency_amt_format(self, line_object):
""" Return amount format specific for each currency. """
Expand Down
6 changes: 3 additions & 3 deletions account_financial_report/report/aged_partner_balance_xlsx.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ def _generate_report_content(self, workbook, report, data):
)

# 2 lines break
self.row_pos += 2
self.set_row_pos(self.row_pos + 2)
else:
# For each account
for account in aged_partner_balance:
Expand Down Expand Up @@ -264,7 +264,7 @@ def _generate_report_content(self, workbook, report, data):
)

# 2 lines break
self.row_pos += 2
self.set_row_pos(self.row_pos + 2)

def write_ending_balance_from_dict(self, my_object):
"""
Expand Down Expand Up @@ -312,4 +312,4 @@ def write_account_footer_from_dict(
else:
self.sheet.write_string(self.row_pos, col_pos, "", string_format)

self.row_pos += 1
self.set_row_pos(self.row_pos + 1)
Loading

0 comments on commit 4259085

Please sign in to comment.