[IMP] Refactor compute_period_domain
parent
bea9dd0229
commit
36292b757f
|
@ -179,8 +179,47 @@ class AccountingExpressionProcessor(object):
|
||||||
return [('date', '>=', date_start), ('date', '<=', date_end)]
|
return [('date', '>=', date_start), ('date', '<=', date_end)]
|
||||||
|
|
||||||
def get_aml_domain_for_periods(self, period_start, period_end, mode):
|
def get_aml_domain_for_periods(self, period_start, period_end, mode):
|
||||||
# TODO
|
period_obj = self.env['account.period']
|
||||||
raise RuntimeError("not implemented")
|
move_obj = self.env['account.move']
|
||||||
|
domain_list = []
|
||||||
|
if mode == MODE_VARIATION:
|
||||||
|
compute_period_ids = period_obj.build_ctx_periods(
|
||||||
|
period_start.id,
|
||||||
|
period_end.id)
|
||||||
|
domain_list.extend([('period_id', 'in', compute_period_ids)])
|
||||||
|
else:
|
||||||
|
period_to = period_end
|
||||||
|
if mode == MODE_INITIAL:
|
||||||
|
# Processing to get the first period which isn't special
|
||||||
|
# before end period
|
||||||
|
move = move_obj\
|
||||||
|
.search([('period_id.special', '=', False),
|
||||||
|
('period_id.date_start', '<',
|
||||||
|
period_to.date_start)],
|
||||||
|
order="period_id desc", limit=1)
|
||||||
|
if move.id:
|
||||||
|
computed_period_to = move.period_id
|
||||||
|
else:
|
||||||
|
computed_period_to = period_obj.search(
|
||||||
|
[('company_id', '=', period_start.company_id.id)],
|
||||||
|
order='date_start desc', limit=1)
|
||||||
|
# Change start period to search correctly period from
|
||||||
|
period_to = computed_period_to
|
||||||
|
move = move_obj.search(
|
||||||
|
[('period_id.special', '=', True),
|
||||||
|
('period_id.date_start', '<=',
|
||||||
|
period_to.date_start)],
|
||||||
|
order="period_id desc", limit=1)
|
||||||
|
if move.id:
|
||||||
|
computed_period_from = move.period_id
|
||||||
|
else:
|
||||||
|
computed_period_from = period_obj.search(
|
||||||
|
[('company_id', '=', period_start.company_id.id)],
|
||||||
|
order='date_start', limit=1)
|
||||||
|
compute_period_ids = period_obj.build_ctx_periods(
|
||||||
|
computed_period_from.id, period_to.id)
|
||||||
|
domain_list.extend([('period_id', 'in', compute_period_ids)])
|
||||||
|
return domain_list
|
||||||
|
|
||||||
def do_queries(self, period_domain, period_domain_i, period_domain_e):
|
def do_queries(self, period_domain, period_domain_i, period_domain_e):
|
||||||
aml_model = self.env['account.move.line']
|
aml_model = self.env['account.move.line']
|
||||||
|
|
|
@ -37,6 +37,9 @@ from openerp.tools.safe_eval import safe_eval
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
|
|
||||||
from .aep import AccountingExpressionProcessor
|
from .aep import AccountingExpressionProcessor
|
||||||
|
from .aep import MODE_VARIATION
|
||||||
|
from .aep import MODE_END
|
||||||
|
from .aep import MODE_INITIAL
|
||||||
|
|
||||||
|
|
||||||
class AutoStruct(object):
|
class AutoStruct(object):
|
||||||
|
@ -525,59 +528,25 @@ class mis_report_instance_period(orm.Model):
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def compute_period_domain(self, cr, uid, period_report, is_end,
|
def compute_period_domain(self, cr, uid, period_report, aep, mode,
|
||||||
is_initial, context=None):
|
context=None):
|
||||||
period_obj = self.pool['account.period']
|
domain = []
|
||||||
move_obj = self.pool['account.move']
|
|
||||||
domain_list = []
|
|
||||||
target_move = period_report.report_instance_id.target_move
|
target_move = period_report.report_instance_id.target_move
|
||||||
if target_move == 'posted':
|
if target_move == 'posted':
|
||||||
domain_list.append(('move_id.state', '=', target_move))
|
domain.append(('move_id.state', '=', target_move))
|
||||||
if not is_end and not is_initial:
|
if not period_report.period_from.id or not period_report.period_to.id:
|
||||||
if period_report.period_from:
|
aml_domain = aep\
|
||||||
compute_period_ids = period_obj.build_ctx_periods(
|
.get_aml_domain_for_periods(period_report.date_from,
|
||||||
cr, uid, period_report.period_from.id,
|
period_report.date_to,
|
||||||
period_report.period_to.id)
|
mode)
|
||||||
domain_list.extend([('period_id', 'in', compute_period_ids)])
|
domain.extend(aml_domain)
|
||||||
else:
|
elif period_report.period_from.id and period_report.period_to.id:
|
||||||
domain_list.extend([('date', '>=', period_report.date_from),
|
aml_domain = aep\
|
||||||
('date', '<=', period_report.date_to)])
|
.get_aml_domain_for_periods(period_report.period_from,
|
||||||
elif period_report.period_from and period_report.period_to:
|
period_report.period_to,
|
||||||
period_to = period_report.period_to
|
mode)
|
||||||
if is_initial:
|
domain.extend(aml_domain)
|
||||||
move_id = move_obj.search(
|
return domain
|
||||||
cr, uid, [('period_id.special', '=', False),
|
|
||||||
('period_id.date_start', '<',
|
|
||||||
period_to.date_start)],
|
|
||||||
order="period_id desc", limit=1, context=context)
|
|
||||||
if move_id:
|
|
||||||
computed_period_to = move_obj.browse(
|
|
||||||
cr, uid, move_id[0], context=context).period_id.id
|
|
||||||
else:
|
|
||||||
computed_period_to = self.pool['account.period'].search(
|
|
||||||
cr, uid, [('company_id', '=',
|
|
||||||
period_report.company_id.id)],
|
|
||||||
order='date_start desc', limit=1)[0]
|
|
||||||
# Change start period to search correctly period from
|
|
||||||
period_to = period_obj.browse(cr, uid, [computed_period_to],
|
|
||||||
context=context)[0]
|
|
||||||
move_id = move_obj.search(
|
|
||||||
cr, uid, [('period_id.special', '=', True),
|
|
||||||
('period_id.date_start', '<=',
|
|
||||||
period_to.date_start)],
|
|
||||||
order="period_id desc", limit=1, context=context)
|
|
||||||
if move_id:
|
|
||||||
computed_period_from = move_obj.browse(
|
|
||||||
cr, uid, move_id[0], context=context).period_id.id
|
|
||||||
else:
|
|
||||||
computed_period_from = self.pool['account.period'].search(
|
|
||||||
cr, uid, [('company_id', '=',
|
|
||||||
period_report.company_id.id)],
|
|
||||||
order='date_start', limit=1)[0]
|
|
||||||
compute_period_ids = period_obj.build_ctx_periods(
|
|
||||||
cr, uid, computed_period_from, period_to.id)
|
|
||||||
domain_list.extend([('period_id', 'in', compute_period_ids)])
|
|
||||||
return domain_list
|
|
||||||
|
|
||||||
def _fetch_queries(self, cr, uid, c, context):
|
def _fetch_queries(self, cr, uid, c, context):
|
||||||
res = {}
|
res = {}
|
||||||
|
@ -621,11 +590,11 @@ class mis_report_instance_period(orm.Model):
|
||||||
'len': len,
|
'len': len,
|
||||||
'avg': lambda l: sum(l) / float(len(l)),
|
'avg': lambda l: sum(l) / float(len(l)),
|
||||||
}
|
}
|
||||||
domain_p = self.compute_period_domain(cr, uid, c, False, False,
|
domain_p = self.compute_period_domain(cr, uid, c, aep, MODE_VARIATION,
|
||||||
context=context)
|
context=context)
|
||||||
domain_e = self.compute_period_domain(cr, uid, c, True, False,
|
domain_e = self.compute_period_domain(cr, uid, c, aep, MODE_END,
|
||||||
context=context)
|
context=context)
|
||||||
domain_i = self.compute_period_domain(cr, uid, c, False, True,
|
domain_i = self.compute_period_domain(cr, uid, c, aep, MODE_INITIAL,
|
||||||
context=context)
|
context=context)
|
||||||
aep.do_queries(domain_p, domain_i, domain_e)
|
aep.do_queries(domain_p, domain_i, domain_e)
|
||||||
localdict.update(self._fetch_queries(cr, uid, c,
|
localdict.update(self._fetch_queries(cr, uid, c,
|
||||||
|
|
Loading…
Reference in New Issue