diff --git a/account_tax_balance/models/account_tax.py b/account_tax_balance/models/account_tax.py
index fbcfbce2..2f6bdabd 100644
--- a/account_tax_balance/models/account_tax.py
+++ b/account_tax_balance/models/account_tax.py
@@ -2,7 +2,7 @@
# © 2016 Lorenzo Battistini - Agile Business Group
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from openerp import models, fields
+from openerp import models, fields, api
class AccountTax(models.Model):
@@ -13,31 +13,18 @@ class AccountTax(models.Model):
string="Base Balance", compute="_compute_balance")
def get_context_values(self):
- if not self.env.context.get('from_date'):
- from_date = fields.Date.context_today(self)
- else:
- from_date = self.env.context['from_date']
- if not self.env.context.get('to_date'):
- to_date = fields.Date.context_today(self)
- else:
- to_date = self.env.context['to_date']
- if not self.env.context.get('target_move'):
- target_move = 'posted'
- else:
- target_move = self.env.context['target_move']
- if not self.env.context.get('company_id'):
- company_id = self.env.user.company_id.id
- else:
- company_id = self.env.context['company_id']
- return from_date, to_date, company_id, target_move
+ context = self.env.context
+ return (
+ context.get('from_date', fields.Date.context_today(self)),
+ context.get('to_date', fields.Date.context_today(self)),
+ context.get('company_id', self.env.user.company_id.id),
+ context.get('target_move', 'posted')
+ )
def _compute_balance(self):
- from_date, to_date, company_id, target_move = self.get_context_values()
for tax in self:
- tax.balance = tax.compute_balance(
- from_date, to_date, company_id, target_move)
- tax.base_balance = tax.compute_base_balance(
- from_date, to_date, company_id, target_move)
+ tax.balance = tax.compute_balance(tax_or_base='tax')
+ tax.base_balance = tax.compute_balance(tax_or_base='base')
def get_target_state_list(self, target_move="posted"):
if target_move == 'posted':
@@ -48,39 +35,60 @@ class AccountTax(models.Model):
state = []
return state
- def get_move_line_domain(self, from_date, to_date, company_id):
+ def get_move_line_partial_domain(self, from_date, to_date, company_id):
return [
('date', '<=', to_date),
('date', '>=', from_date),
('company_id', '=', company_id),
]
- def compute_balance(
- self, from_date, to_date, company_id, target_move="posted"
- ):
+ def compute_balance(self, tax_or_base='tax'):
self.ensure_one()
- move_line_model = self.env['account.move.line']
- state_list = self.get_target_state_list(target_move)
- domain = self.get_move_line_domain(from_date, to_date, company_id)
- domain.extend([
- ('move_id.state', 'in', state_list),
- ('tax_line_id', '=', self.id),
- ])
- move_lines = move_line_model.search(domain)
+ move_lines = self.get_move_lines_domain(tax_or_base=tax_or_base)
total = sum([l.balance for l in move_lines])
return total
- def compute_base_balance(
- self, from_date, to_date, company_id, target_move="posted"
- ):
- self.ensure_one()
- move_line_model = self.env['account.move.line']
- state_list = self.get_target_state_list(target_move)
- domain = self.get_move_line_domain(from_date, to_date, company_id)
- domain.extend([
+ def get_balance_domain(self, state_list):
+ return [
+ ('move_id.state', 'in', state_list),
+ ('tax_line_id', '=', self.id),
+ ]
+
+ def get_base_balance_domain(self, state_list):
+ return [
('move_id.state', 'in', state_list),
('tax_ids', 'in', self.id),
- ])
- move_lines = move_line_model.search(domain)
- total = sum([l.balance for l in move_lines])
- return total
+ ]
+
+ def get_move_lines_domain(self, tax_or_base='tax'):
+ move_line_model = self.env['account.move.line']
+ from_date, to_date, company_id, target_move = self.get_context_values()
+ state_list = self.get_target_state_list(target_move)
+ domain = self.get_move_line_partial_domain(
+ from_date, to_date, company_id)
+ balance_domain = []
+ if tax_or_base == 'tax':
+ balance_domain = self.get_balance_domain(state_list)
+ elif tax_or_base == 'base':
+ balance_domain = self.get_base_balance_domain(state_list)
+ domain.extend(balance_domain)
+ return move_line_model.search(domain)
+
+ def get_lines_action(self, tax_or_base='tax'):
+ move_lines = self.get_move_lines_domain(tax_or_base=tax_or_base)
+ move_line_ids = [l.id for l in move_lines]
+ action = self.env.ref('account.action_account_moves_all_tree')
+ vals = action.read()[0]
+ vals['context'] = {}
+ vals['domain'] = [('id', 'in', move_line_ids)]
+ return vals
+
+ @api.multi
+ def view_tax_lines(self):
+ self.ensure_one()
+ return self.get_lines_action(tax_or_base='tax')
+
+ @api.multi
+ def view_base_lines(self):
+ self.ensure_one()
+ return self.get_lines_action(tax_or_base='base')
diff --git a/account_tax_balance/views/account_tax_view.xml b/account_tax_balance/views/account_tax_view.xml
index a204056d..ab6b6a35 100644
--- a/account_tax_balance/views/account_tax_view.xml
+++ b/account_tax_balance/views/account_tax_view.xml
@@ -13,6 +13,8 @@
+
+