|
|
@ -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') |