[FIX][mis_builder] Better with company
parent
5a2d226c03
commit
7203d99252
|
@ -72,7 +72,7 @@ class AccountingExpressionProcessor(object):
|
||||||
# - NNN for a code with an exact match
|
# - NNN for a code with an exact match
|
||||||
self._account_ids_by_code = defaultdict(set)
|
self._account_ids_by_code = defaultdict(set)
|
||||||
|
|
||||||
def _load_account_codes(self, account_codes):
|
def _load_account_codes(self, account_codes, company):
|
||||||
account_model = self.env['account.account']
|
account_model = self.env['account.account']
|
||||||
exact_codes = set()
|
exact_codes = set()
|
||||||
for account_code in account_codes:
|
for account_code in account_codes:
|
||||||
|
@ -85,13 +85,13 @@ class AccountingExpressionProcessor(object):
|
||||||
self._account_ids_by_code[account_code].update(account_ids)
|
self._account_ids_by_code[account_code].update(account_ids)
|
||||||
elif '%' in account_code:
|
elif '%' in account_code:
|
||||||
account_ids = account_model.\
|
account_ids = account_model.\
|
||||||
search([('code', 'like', account_code)]).mapped('id')
|
search([('code', 'like', account_code), ('company_id', '=', company.id)]).mapped('id')
|
||||||
self._account_ids_by_code[account_code].update(account_ids)
|
self._account_ids_by_code[account_code].update(account_ids)
|
||||||
else:
|
else:
|
||||||
# search exact codes after the loop to do less queries
|
# search exact codes after the loop to do less queries
|
||||||
exact_codes.add(account_code)
|
exact_codes.add(account_code)
|
||||||
for account in account_model.\
|
for account in account_model.\
|
||||||
search([('code', 'in', list(exact_codes))]):
|
search([('code', 'in', list(exact_codes)), ('company_id', '=', company.id)]):
|
||||||
self._account_ids_by_code[account.code].add(account.id)
|
self._account_ids_by_code[account.code].add(account.id)
|
||||||
|
|
||||||
def _parse_match_object(self, mo):
|
def _parse_match_object(self, mo):
|
||||||
|
@ -128,13 +128,13 @@ class AccountingExpressionProcessor(object):
|
||||||
key = (domain, mode)
|
key = (domain, mode)
|
||||||
self._map_account_ids[key].update(account_codes)
|
self._map_account_ids[key].update(account_codes)
|
||||||
|
|
||||||
def done_parsing(self):
|
def done_parsing(self, company):
|
||||||
"""Load account codes and replace account codes by
|
"""Load account codes and replace account codes by
|
||||||
account ids in map."""
|
account ids in map."""
|
||||||
for key, account_codes in self._map_account_ids.items():
|
for key, account_codes in self._map_account_ids.items():
|
||||||
# TODO _load_account_codes could be done
|
# TODO _load_account_codes could be done
|
||||||
# for all account_codes at once (also in v8)
|
# for all account_codes at once (also in v8)
|
||||||
self._load_account_codes(account_codes)
|
self._load_account_codes(account_codes, company)
|
||||||
account_ids = set()
|
account_ids = set()
|
||||||
for account_code in account_codes:
|
for account_code in account_codes:
|
||||||
account_ids.update(self._account_ids_by_code[account_code])
|
account_ids.update(self._account_ids_by_code[account_code])
|
||||||
|
@ -147,7 +147,7 @@ class AccountingExpressionProcessor(object):
|
||||||
|
|
||||||
def get_aml_domain_for_expr(self, expr,
|
def get_aml_domain_for_expr(self, expr,
|
||||||
date_from, date_to,
|
date_from, date_to,
|
||||||
target_move):
|
target_move, company):
|
||||||
""" Get a domain on account.move.line for an expression.
|
""" Get a domain on account.move.line for an expression.
|
||||||
|
|
||||||
Prerequisite: done_parsing() must have been invoked.
|
Prerequisite: done_parsing() must have been invoked.
|
||||||
|
@ -171,13 +171,14 @@ class AccountingExpressionProcessor(object):
|
||||||
if mode not in date_domain_by_mode:
|
if mode not in date_domain_by_mode:
|
||||||
date_domain_by_mode[mode] = \
|
date_domain_by_mode[mode] = \
|
||||||
self.get_aml_domain_for_dates(date_from, date_to,
|
self.get_aml_domain_for_dates(date_from, date_to,
|
||||||
mode, target_move)
|
mode, target_move,
|
||||||
|
company)
|
||||||
return expression.OR(aml_domains) + \
|
return expression.OR(aml_domains) + \
|
||||||
expression.OR(date_domain_by_mode.values())
|
expression.OR(date_domain_by_mode.values())
|
||||||
|
|
||||||
def get_aml_domain_for_dates(self, date_from, date_to,
|
def get_aml_domain_for_dates(self, date_from, date_to,
|
||||||
mode,
|
mode,
|
||||||
target_move):
|
target_move, company):
|
||||||
if mode == MODE_VARIATION:
|
if mode == MODE_VARIATION:
|
||||||
domain = [('date', '>=', date_from), ('date', '<=', date_to)]
|
domain = [('date', '>=', date_from), ('date', '<=', date_to)]
|
||||||
else:
|
else:
|
||||||
|
@ -198,7 +199,7 @@ class AccountingExpressionProcessor(object):
|
||||||
return expression.normalize_domain(domain)
|
return expression.normalize_domain(domain)
|
||||||
|
|
||||||
def do_queries(self, date_from, date_to,
|
def do_queries(self, date_from, date_to,
|
||||||
target_move, additional_move_line_filter=None):
|
target_move, company, additional_move_line_filter=None):
|
||||||
"""Query sums of debit and credit for all accounts and domains
|
"""Query sums of debit and credit for all accounts and domains
|
||||||
used in expressions.
|
used in expressions.
|
||||||
|
|
||||||
|
@ -213,7 +214,7 @@ class AccountingExpressionProcessor(object):
|
||||||
if mode not in domain_by_mode:
|
if mode not in domain_by_mode:
|
||||||
domain_by_mode[mode] = \
|
domain_by_mode[mode] = \
|
||||||
self.get_aml_domain_for_dates(date_from, date_to,
|
self.get_aml_domain_for_dates(date_from, date_to,
|
||||||
mode, target_move)
|
mode, target_move, company)
|
||||||
domain = list(domain) + domain_by_mode[mode]
|
domain = list(domain) + domain_by_mode[mode]
|
||||||
domain.append(('account_id', 'in', self._map_account_ids[key]))
|
domain.append(('account_id', 'in', self._map_account_ids[key]))
|
||||||
if additional_move_line_filter:
|
if additional_move_line_filter:
|
||||||
|
|
|
@ -297,12 +297,12 @@ class MisReport(models.Model):
|
||||||
# TODO: kpi name cannot be start with query name
|
# TODO: kpi name cannot be start with query name
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def _prepare_aep(self):
|
def _prepare_aep(self, company):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
aep = AEP(self.env)
|
aep = AEP(self.env)
|
||||||
for kpi in self.kpi_ids:
|
for kpi in self.kpi_ids:
|
||||||
aep.parse_expr(kpi.expression)
|
aep.parse_expr(kpi.expression)
|
||||||
aep.done_parsing()
|
aep.done_parsing(company)
|
||||||
return aep
|
return aep
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
|
@ -366,6 +366,7 @@ class MisReport(models.Model):
|
||||||
def _compute(self, lang_id, aep,
|
def _compute(self, lang_id, aep,
|
||||||
date_from, date_to,
|
date_from, date_to,
|
||||||
target_move,
|
target_move,
|
||||||
|
company,
|
||||||
get_additional_move_line_filter=None,
|
get_additional_move_line_filter=None,
|
||||||
get_additional_query_filter=None,
|
get_additional_query_filter=None,
|
||||||
period_id=None):
|
period_id=None):
|
||||||
|
@ -425,6 +426,7 @@ class MisReport(models.Model):
|
||||||
additional_move_line_filter = get_additional_move_line_filter()
|
additional_move_line_filter = get_additional_move_line_filter()
|
||||||
aep.do_queries(date_from, date_to,
|
aep.do_queries(date_from, date_to,
|
||||||
target_move,
|
target_move,
|
||||||
|
company,
|
||||||
additional_move_line_filter)
|
additional_move_line_filter)
|
||||||
|
|
||||||
compute_queue = self.kpi_ids
|
compute_queue = self.kpi_ids
|
||||||
|
@ -630,7 +632,8 @@ class MisReportInstancePeriod(models.Model):
|
||||||
domain = aep.get_aml_domain_for_expr(
|
domain = aep.get_aml_domain_for_expr(
|
||||||
expr,
|
expr,
|
||||||
self.date_from, self.date_to,
|
self.date_from, self.date_to,
|
||||||
self.report_instance_id.target_move)
|
self.report_instance_id.target_move,
|
||||||
|
self.report_instance_id.company_id)
|
||||||
domain.extend(self._get_additional_move_line_filter())
|
domain.extend(self._get_additional_move_line_filter())
|
||||||
return {
|
return {
|
||||||
'name': expr + ' - ' + self.name,
|
'name': expr + ' - ' + self.name,
|
||||||
|
@ -652,6 +655,7 @@ class MisReportInstancePeriod(models.Model):
|
||||||
lang_id, aep,
|
lang_id, aep,
|
||||||
self.date_from, self.date_to,
|
self.date_from, self.date_to,
|
||||||
self.report_instance_id.target_move,
|
self.report_instance_id.target_move,
|
||||||
|
self.report_instance_id.company_id,
|
||||||
self._get_additional_move_line_filter,
|
self._get_additional_move_line_filter,
|
||||||
self._get_additional_query_filter,
|
self._get_additional_query_filter,
|
||||||
period_id=self.id,
|
period_id=self.id,
|
||||||
|
@ -701,7 +705,8 @@ class MisReportInstance(models.Model):
|
||||||
default='posted')
|
default='posted')
|
||||||
company_id = fields.Many2one(comodel_name='res.company',
|
company_id = fields.Many2one(comodel_name='res.company',
|
||||||
string='Company',
|
string='Company',
|
||||||
default=_default_company)
|
default=_default_company,
|
||||||
|
required=True)
|
||||||
landscape_pdf = fields.Boolean(string='Landscape PDF')
|
landscape_pdf = fields.Boolean(string='Landscape PDF')
|
||||||
|
|
||||||
@api.one
|
@api.one
|
||||||
|
@ -773,7 +778,7 @@ class MisReportInstance(models.Model):
|
||||||
@api.multi
|
@api.multi
|
||||||
def compute(self):
|
def compute(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
aep = self.report_id._prepare_aep()
|
aep = self.report_id._prepare_aep(self.company_id)
|
||||||
|
|
||||||
# fetch user language only once
|
# fetch user language only once
|
||||||
# TODO: is this necessary?
|
# TODO: is this necessary?
|
||||||
|
|
Loading…
Reference in New Issue