diff --git a/account_financial_report_qweb/menuitems.xml b/account_financial_report_qweb/menuitems.xml
index a7e0c87f..ebaa9d7b 100644
--- a/account_financial_report_qweb/menuitems.xml
+++ b/account_financial_report_qweb/menuitems.xml
@@ -15,12 +15,6 @@
id="menu_general_ledger_wizard"
/>
-
-
@@ -40,6 +34,12 @@
id='menu_open_items_wizard'
/>
+
+
diff --git a/account_financial_report_qweb/report/aged_partner_balance.py b/account_financial_report_qweb/report/aged_partner_balance.py
index 374c85ff..731edce9 100644
--- a/account_financial_report_qweb/report/aged_partner_balance.py
+++ b/account_financial_report_qweb/report/aged_partner_balance.py
@@ -8,10 +8,19 @@ from openerp import models, fields, api
class AgedPartnerBalanceReport(models.TransientModel):
""" Here, we just define class fields.
For methods, go more bottom at this file.
+
+ The class hierarchy is :
+ * AgedPartnerBalanceReport
+ ** AgedPartnerBalanceAccount
+ *** AgedPartnerBalancePartner
+ **** AgedPartnerBalanceLine
+ **** AgedPartnerBalanceMoveLine
+ If "show_move_line_details" is selected
"""
_name = 'report_aged_partner_balance_qweb'
+ # Filters fields, used for data computation
date_at = fields.Date()
only_posted_moves = fields.Boolean()
company_id = fields.Many2one(comodel_name='res.company')
@@ -19,8 +28,10 @@ class AgedPartnerBalanceReport(models.TransientModel):
filter_partner_ids = fields.Many2many(comodel_name='res.partner')
show_move_line_details = fields.Boolean()
+ # Open Items Report Data fields, used as base for compute the data reports
open_items_id = fields.Many2one(comodel_name='report_open_items_qweb')
+ # Data fields, used to browse report data
account_ids = fields.One2many(
comodel_name='report_aged_partner_balance_qweb_account',
inverse_name='report_id'
@@ -37,10 +48,14 @@ class AgedPartnerBalanceAccount(models.TransientModel):
ondelete='cascade',
index=True
)
+
+ # Data fields, used to keep link with real object
account_id = fields.Many2one(
'account.account',
index=True
)
+
+ # Data fields, used for report display
code = fields.Char()
name = fields.Char()
@@ -59,6 +74,7 @@ class AgedPartnerBalanceAccount(models.TransientModel):
percent_age_120_days = fields.Float(digits=(16, 2))
percent_older = fields.Float(digits=(16, 2))
+ # Data fields, used to browse report data
partner_ids = fields.One2many(
comodel_name='report_aged_partner_balance_qweb_partner',
inverse_name='report_account_id'
@@ -74,17 +90,21 @@ class AgedPartnerBalancePartner(models.TransientModel):
ondelete='cascade',
index=True
)
+
+ # Data fields, used to keep link with real object
partner_id = fields.Many2one(
'res.partner',
index=True
)
+
+ # Data fields, used for report display
name = fields.Char()
+ # Data fields, used to browse report data
move_line_ids = fields.One2many(
comodel_name='report_aged_partner_balance_qweb_move_line',
inverse_name='report_partner_id'
)
-
line_ids = fields.One2many(
comodel_name='report_aged_partner_balance_qweb_line',
inverse_name='report_partner_id'
@@ -92,14 +112,16 @@ class AgedPartnerBalancePartner(models.TransientModel):
@api.model
def _generate_order_by(self, order_spec, query):
+ """Custom order to display "No partner allocated" at last position."""
return """
ORDER BY
-CASE
- WHEN "report_aged_partner_balance_qweb_partner"."partner_id" IS NOT NULL
- THEN 0
- ELSE 1
+ CASE
+ WHEN
+ "report_aged_partner_balance_qweb_partner"."partner_id" IS NOT NULL
+ THEN 0
+ ELSE 1
END,
-"report_aged_partner_balance_qweb_partner"."name"
+ "report_aged_partner_balance_qweb_partner"."name"
"""
@@ -112,6 +134,8 @@ class AgedPartnerBalanceLine(models.TransientModel):
ondelete='cascade',
index=True
)
+
+ # Data fields, used for report display
partner = fields.Char()
amount_residual = fields.Float(digits=(16, 2))
current = fields.Float(digits=(16, 2))
@@ -131,7 +155,11 @@ class AgedPartnerBalanceMoveLine(models.TransientModel):
ondelete='cascade',
index=True
)
+
+ # Data fields, used to keep link with real object
move_line_id = fields.Many2one('account.move.line')
+
+ # Data fields, used for report display
date = fields.Date()
date_due = fields.Date()
entry = fields.Char()
@@ -150,24 +178,30 @@ class AgedPartnerBalanceMoveLine(models.TransientModel):
class AgedPartnerBalanceReportCompute(models.TransientModel):
+ """ Here, we just define methods.
+ For class fields, go more top at this file.
+ """
_inherit = 'report_aged_partner_balance_qweb'
- @api.model
+ @api.multi
def print_report(self):
self.ensure_one()
self.compute_data_for_report()
+ report_name = 'account_financial_report_qweb.' \
+ 'report_aged_partner_balance_qweb'
return {
'type': 'ir.actions.report.xml',
- 'report_name':
- 'account_financial_report_qweb.'
- 'report_aged_partner_balance_qweb',
+ 'report_name': report_name,
'datas': {'ids': [self.id]},
}
- @api.model
+ @api.multi
def compute_data_for_report(self):
self.ensure_one()
+ # Compute Open Items Report Data.
+ # The data of Aged Partner Balance Report
+ # are based on Open Items Report data.
model = self.env['report_open_items_qweb']
self.open_items_id = model.create({
'date_at': self.date_at,
@@ -178,16 +212,18 @@ class AgedPartnerBalanceReportCompute(models.TransientModel):
})
self.open_items_id.compute_data_for_report()
- self.inject_account_values()
- self.inject_partner_values()
- self.inject_line_values()
- self.inject_line_values(only_empty_partner_line=True)
+ # Compute report data
+ self._inject_account_values()
+ self._inject_partner_values()
+ self._inject_line_values()
+ self._inject_line_values(only_empty_partner_line=True)
if self.show_move_line_details:
- self.inject_move_line_values()
- self.inject_move_line_values(only_empty_partner_line=True)
- self.compute_accounts_cumul()
+ self._inject_move_line_values()
+ self._inject_move_line_values(only_empty_partner_line=True)
+ self._compute_accounts_cumul()
- def inject_account_values(self):
+ def _inject_account_values(self):
+ """Inject report values for report_aged_partner_balance_qweb_account"""
query_inject_account = """
INSERT INTO
report_aged_partner_balance_qweb_account
@@ -218,7 +254,8 @@ WHERE
)
self.env.cr.execute(query_inject_account, query_inject_account_params)
- def inject_partner_values(self):
+ def _inject_partner_values(self):
+ """Inject report values for report_aged_partner_balance_qweb_partner"""
query_inject_partner = """
INSERT INTO
report_aged_partner_balance_qweb_partner
@@ -252,7 +289,12 @@ AND ra.report_id = %s
)
self.env.cr.execute(query_inject_partner, query_inject_partner_params)
- def inject_line_values(self, only_empty_partner_line=False):
+ def _inject_line_values(self, only_empty_partner_line=False):
+ """ Inject report values for report_aged_partner_balance_qweb_line.
+
+ The "only_empty_partner_line" value is used
+ to compute data without partner.
+ """
query_inject_line = """
WITH
date_range AS
@@ -363,7 +405,12 @@ GROUP BY
)
self.env.cr.execute(query_inject_line, query_inject_line_params)
- def inject_move_line_values(self, only_empty_partner_line=False):
+ def _inject_move_line_values(self, only_empty_partner_line=False):
+ """ Inject report values for report_aged_partner_balance_qweb_move_line
+
+ The "only_empty_partner_line" value is used
+ to compute data without partner.
+ """
query_inject_move_line = """
WITH
date_range AS
@@ -473,7 +520,10 @@ AND ra.report_id = %s
self.env.cr.execute(query_inject_move_line,
query_inject_move_line_params)
- def compute_accounts_cumul(self):
+ def _compute_accounts_cumul(self):
+ """ Compute cumulative amount for
+ report_aged_partner_balance_qweb_account.
+ """
query_compute_accounts_cumul = """
WITH
cumuls AS
diff --git a/account_financial_report_qweb/report/templates/aged_partner_balance.xml b/account_financial_report_qweb/report/templates/aged_partner_balance.xml
index 7ce179ef..47b83be9 100644
--- a/account_financial_report_qweb/report/templates/aged_partner_balance.xml
+++ b/account_financial_report_qweb/report/templates/aged_partner_balance.xml
@@ -4,54 +4,65 @@
+
+
+