[IMP] account_financial_report: Fix VAT Report and other improvements
parent
d9568ca272
commit
ad49b30099
|
@ -449,10 +449,10 @@ class AbstractReportXslx(models.AbstractModel):
|
|||
def _get_currency_amt_format(self, line_object):
|
||||
""" Return amount format specific for each currency. """
|
||||
if "account_group_id" in line_object and line_object["account_group_id"]:
|
||||
format_amt = getattr(self, "format_amount_bold")
|
||||
format_amt = self.format_amount_bold
|
||||
field_prefix = "format_amount_bold"
|
||||
else:
|
||||
format_amt = getattr(self, "format_amount")
|
||||
format_amt = self.format_amount
|
||||
field_prefix = "format_amount"
|
||||
if "currency_id" in line_object and line_object.get("currency_id", False):
|
||||
field_name = "{}_{}".format(field_prefix, line_object["currency_id"].name)
|
||||
|
@ -460,7 +460,7 @@ class AbstractReportXslx(models.AbstractModel):
|
|||
format_amt = getattr(self, field_name)
|
||||
else:
|
||||
format_amt = self.workbook.add_format()
|
||||
setattr(self, "field_name", format_amt)
|
||||
self.field_name = format_amt
|
||||
format_amount = "#,##0." + (
|
||||
"0" * line_object["currency_id"].decimal_places
|
||||
)
|
||||
|
@ -473,7 +473,7 @@ class AbstractReportXslx(models.AbstractModel):
|
|||
format_amt = self.format_amount_bold
|
||||
field_prefix = "format_amount_bold"
|
||||
else:
|
||||
format_amt = getattr(self, "format_amount")
|
||||
format_amt = self.format_amount
|
||||
field_prefix = "format_amount"
|
||||
if line_dict.get("currency_id", False) and line_dict["currency_id"]:
|
||||
if isinstance(line_dict["currency_id"], int):
|
||||
|
|
|
@ -386,6 +386,7 @@ class AgedPartnerBalanceReport(models.AbstractModel):
|
|||
)
|
||||
self._compute_maturity_date(ml, date_at_oject)
|
||||
move_lines.append(ml)
|
||||
move_lines = sorted(move_lines, key=lambda k: (k["date"]))
|
||||
partner.update({"move_lines": move_lines})
|
||||
account["partners"].append(partner)
|
||||
aged_partner_data.append(account)
|
||||
|
|
|
@ -6,7 +6,7 @@ import calendar
|
|||
import datetime
|
||||
import operator
|
||||
|
||||
from odoo import api, models
|
||||
from odoo import _, api, models
|
||||
|
||||
|
||||
class GeneralLedgerReport(models.AbstractModel):
|
||||
|
@ -556,7 +556,7 @@ class GeneralLedgerReport(models.AbstractModel):
|
|||
move_line["balance"] += last_cumul_balance
|
||||
last_cumul_balance = move_line["balance"]
|
||||
if move_line["rec_id"] in rec_after_date_to_ids:
|
||||
move_line["rec_name"] = str("*") + move_line["rec_name"]
|
||||
move_line["rec_name"] = "(" + _("future") + ") " + move_line["rec_name"]
|
||||
return move_lines
|
||||
|
||||
@api.model
|
||||
|
@ -763,6 +763,7 @@ class GeneralLedgerReport(models.AbstractModel):
|
|||
account["move_lines"] = self._recalculate_cumul_balance(
|
||||
account["move_lines"],
|
||||
gen_ld_data[account["id"]]["init_bal"]["balance"],
|
||||
rec_after_date_to_ids,
|
||||
)
|
||||
if account["partners"]:
|
||||
account["partners"] = False
|
||||
|
|
|
@ -31,7 +31,7 @@ class GeneralLedgerXslx(models.AbstractModel):
|
|||
6: {"header": _("Ref - Label"), "field": "ref_label", "width": 40},
|
||||
7: {"header": _("Cost center"), "field": "cost_center", "width": 15},
|
||||
8: {"header": _("Tags"), "field": "tags", "width": 10},
|
||||
9: {"header": _("Rec."), "field": "rec_name", "width": 5},
|
||||
9: {"header": _("Rec."), "field": "rec_name", "width": 15},
|
||||
10: {
|
||||
"header": _("Debit"),
|
||||
"field": "debit",
|
||||
|
|
|
@ -207,6 +207,128 @@ class TrialBalanceReport(models.AbstractModel):
|
|||
)
|
||||
return pl_initial_balance, pl_initial_currency_balance
|
||||
|
||||
@api.model
|
||||
def _compute_account_amount(
|
||||
self, total_amount, tb_initial_acc, tb_period_acc, foreign_currency
|
||||
):
|
||||
for tb in tb_period_acc:
|
||||
acc_id = tb["account_id"][0]
|
||||
total_amount[acc_id] = {}
|
||||
total_amount[acc_id]["credit"] = tb["credit"]
|
||||
total_amount[acc_id]["debit"] = tb["debit"]
|
||||
total_amount[acc_id]["balance"] = tb["balance"]
|
||||
total_amount[acc_id]["initial_balance"] = 0.0
|
||||
total_amount[acc_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id]["initial_currency_balance"] = 0.0
|
||||
total_amount[acc_id]["ending_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
for tb in tb_initial_acc:
|
||||
acc_id = tb["account_id"]
|
||||
if acc_id not in total_amount.keys():
|
||||
total_amount[acc_id] = {}
|
||||
total_amount[acc_id]["credit"] = 0.0
|
||||
total_amount[acc_id]["debit"] = 0.0
|
||||
total_amount[acc_id]["balance"] = 0.0
|
||||
total_amount[acc_id]["initial_balance"] = tb["balance"]
|
||||
total_amount[acc_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id]["initial_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
total_amount[acc_id]["ending_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
else:
|
||||
total_amount[acc_id]["initial_balance"] = tb["balance"]
|
||||
total_amount[acc_id]["ending_balance"] += tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id]["initial_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
total_amount[acc_id]["ending_currency_balance"] += round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
return total_amount
|
||||
|
||||
@api.model
|
||||
def _compute_partner_amount(
|
||||
self, total_amount, tb_initial_prt, tb_period_prt, foreign_currency
|
||||
):
|
||||
partners_ids = set()
|
||||
partners_data = {}
|
||||
for tb in tb_period_prt:
|
||||
acc_id = tb["account_id"][0]
|
||||
if tb["partner_id"]:
|
||||
prt_id = tb["partner_id"][0]
|
||||
if tb["partner_id"] not in partners_ids:
|
||||
partners_data.update(
|
||||
{prt_id: {"id": prt_id, "name": tb["partner_id"][1]}}
|
||||
)
|
||||
total_amount[acc_id][prt_id] = {}
|
||||
total_amount[acc_id][prt_id]["credit"] = tb["credit"]
|
||||
total_amount[acc_id][prt_id]["debit"] = tb["debit"]
|
||||
total_amount[acc_id][prt_id]["balance"] = tb["balance"]
|
||||
total_amount[acc_id][prt_id]["initial_balance"] = 0.0
|
||||
total_amount[acc_id][prt_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id][prt_id]["initial_currency_balance"] = 0.0
|
||||
total_amount[acc_id][prt_id]["ending_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
partners_ids.add(tb["partner_id"])
|
||||
for tb in tb_initial_prt:
|
||||
acc_id = tb["account_id"][0]
|
||||
if tb["partner_id"]:
|
||||
prt_id = tb["partner_id"][0]
|
||||
if tb["partner_id"] not in partners_ids:
|
||||
partners_data.update(
|
||||
{prt_id: {"id": prt_id, "name": tb["partner_id"][1]}}
|
||||
)
|
||||
if acc_id not in total_amount.keys():
|
||||
total_amount[acc_id][prt_id] = {}
|
||||
total_amount[acc_id][prt_id]["credit"] = 0.0
|
||||
total_amount[acc_id][prt_id]["debit"] = 0.0
|
||||
total_amount[acc_id][prt_id]["balance"] = 0.0
|
||||
total_amount[acc_id][prt_id]["initial_balance"] = tb["balance"]
|
||||
total_amount[acc_id][prt_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id][prt_id][
|
||||
"initial_currency_balance"
|
||||
] = round(tb["amount_currency"], 2)
|
||||
total_amount[acc_id][prt_id]["ending_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
partners_ids.add(tb["partner_id"])
|
||||
elif prt_id not in total_amount[acc_id].keys():
|
||||
total_amount[acc_id][prt_id] = {}
|
||||
total_amount[acc_id][prt_id]["credit"] = 0.0
|
||||
total_amount[acc_id][prt_id]["debit"] = 0.0
|
||||
total_amount[acc_id][prt_id]["balance"] = 0.0
|
||||
total_amount[acc_id][prt_id]["initial_balance"] = tb["balance"]
|
||||
total_amount[acc_id][prt_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id][prt_id][
|
||||
"initial_currency_balance"
|
||||
] = round(tb["amount_currency"], 2)
|
||||
total_amount[acc_id][prt_id]["ending_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
partners_ids.add(tb["partner_id"])
|
||||
else:
|
||||
total_amount[acc_id][prt_id]["initial_balance"] += tb["balance"]
|
||||
total_amount[acc_id][prt_id]["ending_balance"] += tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id][prt_id][
|
||||
"initial_currency_balance"
|
||||
] += round(tb["amount_currency"], 2)
|
||||
total_amount[acc_id][prt_id][
|
||||
"ending_currency_balance"
|
||||
] += round(tb["amount_currency"], 2)
|
||||
return total_amount, partners_data
|
||||
|
||||
@api.model
|
||||
def _get_data(
|
||||
self,
|
||||
account_ids,
|
||||
|
@ -321,116 +443,13 @@ class TrialBalanceReport(models.AbstractModel):
|
|||
)
|
||||
total_amount = {}
|
||||
partners_data = []
|
||||
for tb in tb_period_acc:
|
||||
acc_id = tb["account_id"][0]
|
||||
total_amount[acc_id] = {}
|
||||
total_amount[acc_id]["credit"] = tb["credit"]
|
||||
total_amount[acc_id]["debit"] = tb["debit"]
|
||||
total_amount[acc_id]["balance"] = tb["balance"]
|
||||
total_amount[acc_id]["initial_balance"] = 0.0
|
||||
total_amount[acc_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id]["initial_currency_balance"] = 0.0
|
||||
total_amount[acc_id]["ending_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
for tb in tb_initial_acc:
|
||||
acc_id = tb["account_id"]
|
||||
if acc_id not in total_amount.keys():
|
||||
total_amount[acc_id] = {}
|
||||
total_amount[acc_id]["credit"] = 0.0
|
||||
total_amount[acc_id]["debit"] = 0.0
|
||||
total_amount[acc_id]["balance"] = 0.0
|
||||
total_amount[acc_id]["initial_balance"] = tb["balance"]
|
||||
total_amount[acc_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id]["initial_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
total_amount[acc_id]["ending_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
else:
|
||||
total_amount[acc_id]["initial_balance"] = tb["balance"]
|
||||
total_amount[acc_id]["ending_balance"] += tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id]["initial_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
total_amount[acc_id]["ending_currency_balance"] += round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
total_amount = self._compute_account_amount(
|
||||
total_amount, tb_initial_acc, tb_period_acc, foreign_currency
|
||||
)
|
||||
if show_partner_details:
|
||||
partners_ids = set()
|
||||
partners_data = {}
|
||||
for tb in tb_period_prt:
|
||||
acc_id = tb["account_id"][0]
|
||||
if tb["partner_id"]:
|
||||
prt_id = tb["partner_id"][0]
|
||||
if tb["partner_id"] not in partners_ids:
|
||||
partners_data.update(
|
||||
{prt_id: {"id": prt_id, "name": tb["partner_id"][1]}}
|
||||
)
|
||||
total_amount[acc_id][prt_id] = {}
|
||||
total_amount[acc_id][prt_id]["credit"] = tb["credit"]
|
||||
total_amount[acc_id][prt_id]["debit"] = tb["debit"]
|
||||
total_amount[acc_id][prt_id]["balance"] = tb["balance"]
|
||||
total_amount[acc_id][prt_id]["initial_balance"] = 0.0
|
||||
total_amount[acc_id][prt_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id][prt_id]["initial_currency_balance"] = 0.0
|
||||
total_amount[acc_id][prt_id]["ending_currency_balance"] = round(
|
||||
tb["amount_currency"], 2
|
||||
)
|
||||
partners_ids.add(tb["partner_id"])
|
||||
for tb in tb_initial_prt:
|
||||
acc_id = tb["account_id"][0]
|
||||
if tb["partner_id"]:
|
||||
prt_id = tb["partner_id"][0]
|
||||
if tb["partner_id"] not in partners_ids:
|
||||
partners_data.update(
|
||||
{prt_id: {"id": prt_id, "name": tb["partner_id"][1]}}
|
||||
)
|
||||
if acc_id not in total_amount.keys():
|
||||
total_amount[acc_id][prt_id] = {}
|
||||
total_amount[acc_id][prt_id]["credit"] = 0.0
|
||||
total_amount[acc_id][prt_id]["debit"] = 0.0
|
||||
total_amount[acc_id][prt_id]["balance"] = 0.0
|
||||
total_amount[acc_id][prt_id]["initial_balance"] = tb["balance"]
|
||||
total_amount[acc_id][prt_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id][prt_id][
|
||||
"initial_currency_balance"
|
||||
] = round(tb["amount_currency"], 2)
|
||||
total_amount[acc_id][prt_id][
|
||||
"ending_currency_balance"
|
||||
] = round(tb["amount_currency"], 2)
|
||||
partners_ids.add(tb["partner_id"])
|
||||
elif prt_id not in total_amount[acc_id].keys():
|
||||
total_amount[acc_id][prt_id] = {}
|
||||
total_amount[acc_id][prt_id]["credit"] = 0.0
|
||||
total_amount[acc_id][prt_id]["debit"] = 0.0
|
||||
total_amount[acc_id][prt_id]["balance"] = 0.0
|
||||
total_amount[acc_id][prt_id]["initial_balance"] = tb["balance"]
|
||||
total_amount[acc_id][prt_id]["ending_balance"] = tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id][prt_id][
|
||||
"initial_currency_balance"
|
||||
] = round(tb["amount_currency"], 2)
|
||||
total_amount[acc_id][prt_id][
|
||||
"ending_currency_balance"
|
||||
] = round(tb["amount_currency"], 2)
|
||||
partners_ids.add(tb["partner_id"])
|
||||
else:
|
||||
total_amount[acc_id][prt_id]["initial_balance"] += tb["balance"]
|
||||
total_amount[acc_id][prt_id]["ending_balance"] += tb["balance"]
|
||||
if foreign_currency:
|
||||
total_amount[acc_id][prt_id][
|
||||
"initial_currency_balance"
|
||||
] += round(tb["amount_currency"], 2)
|
||||
total_amount[acc_id][prt_id][
|
||||
"ending_currency_balance"
|
||||
] += round(tb["amount_currency"], 2)
|
||||
total_amount, partners_data = self._compute_partner_amount(
|
||||
total_amount, tb_initial_prt, tb_period_prt, foreign_currency
|
||||
)
|
||||
accounts_ids = list(total_amount.keys())
|
||||
unaffected_id = unaffected_earnings_account
|
||||
if unaffected_id not in accounts_ids:
|
||||
|
|
|
@ -22,57 +22,82 @@ class VATReport(models.AbstractModel):
|
|||
"name": tax.name,
|
||||
"tax_group_id": tax.tax_group_id.id,
|
||||
"type_tax_use": tax.type_tax_use,
|
||||
"amount_type": tax.amount_type,
|
||||
"tags_ids": tax.invoice_repartition_line_ids.tag_ids.ids,
|
||||
}
|
||||
}
|
||||
)
|
||||
return tax_data
|
||||
|
||||
@api.model
|
||||
def _get_vat_report_domain(self, company_id, date_from, date_to):
|
||||
def _get_tax_report_domain(self, company_id, date_from, date_to, only_posted_moves):
|
||||
domain = [
|
||||
("company_id", "=", company_id),
|
||||
("date", ">=", date_from),
|
||||
("date", "<", date_to),
|
||||
("date", "<=", date_to),
|
||||
("tax_line_id", "!=", False),
|
||||
("tax_exigible", "=", True),
|
||||
]
|
||||
if only_posted_moves:
|
||||
domain += [("move_id.state", "=", "posted")]
|
||||
return domain
|
||||
|
||||
def _get_vat_report_data(self, company_id, date_from, date_to):
|
||||
domain = self._get_vat_report_domain(company_id, date_from, date_to)
|
||||
@api.model
|
||||
def _get_net_report_domain(self, company_id, date_from, date_to, only_posted_moves):
|
||||
domain = [
|
||||
("company_id", "=", company_id),
|
||||
("date", ">=", date_from),
|
||||
("date", "<=", date_to),
|
||||
("tax_ids", "!=", False),
|
||||
("tax_exigible", "=", True),
|
||||
]
|
||||
if only_posted_moves:
|
||||
domain += [("move_id.state", "=", "posted")]
|
||||
return domain
|
||||
|
||||
def _get_vat_report_data(self, company_id, date_from, date_to, only_posted_moves):
|
||||
tax_domain = self._get_tax_report_domain(
|
||||
company_id, date_from, date_to, only_posted_moves
|
||||
)
|
||||
ml_fields = [
|
||||
"id",
|
||||
"tax_base_amount",
|
||||
"balance",
|
||||
"tax_line_id",
|
||||
"tax_repartition_line_id",
|
||||
"tax_ids",
|
||||
"analytic_tag_ids",
|
||||
"tag_ids",
|
||||
]
|
||||
tax_move_lines = self.env["account.move.line"].search_read(
|
||||
domain=domain, fields=ml_fields
|
||||
domain=tax_domain, fields=ml_fields,
|
||||
)
|
||||
vat_data = {}
|
||||
tax_ids = list(map(operator.itemgetter("tax_line_id"), tax_move_lines))
|
||||
tax_ids = [i[0] for i in tax_ids]
|
||||
tax_data = self._get_tax_data(tax_ids)
|
||||
net_domain = self._get_net_report_domain(
|
||||
company_id, date_from, date_to, only_posted_moves
|
||||
)
|
||||
taxed_move_lines = self.env["account.move.line"].search_read(
|
||||
domain=net_domain, fields=ml_fields,
|
||||
)
|
||||
vat_data = []
|
||||
for tax_move_line in tax_move_lines:
|
||||
tax_ml_id = tax_move_line["id"]
|
||||
repartition = self.env["account.tax.repartition.line"].browse(
|
||||
tax_move_line["tax_repartition_line_id"][0]
|
||||
)
|
||||
tax_id = tax_move_line["tax_line_id"][0]
|
||||
vat_data[tax_ml_id] = {}
|
||||
vat_data[tax_ml_id].update(
|
||||
vat_data.append(
|
||||
{
|
||||
"id": tax_ml_id,
|
||||
"net": tax_move_line["tax_base_amount"],
|
||||
"tax": (-1) * tax_move_line["balance"]
|
||||
if tax_data[tax_id]["type_tax_use"] == "sale"
|
||||
else tax_move_line["balance"],
|
||||
"tax_line_id": tax_move_line["tax_line_id"],
|
||||
"tags_ids": repartition.tag_ids.ids,
|
||||
"net": 0.0,
|
||||
"tax": tax_move_line["balance"],
|
||||
"tax_line_id": tax_move_line["tax_line_id"][0],
|
||||
}
|
||||
)
|
||||
for taxed_move_line in taxed_move_lines:
|
||||
for tax_id in taxed_move_line["tax_ids"]:
|
||||
vat_data.append(
|
||||
{
|
||||
"net": taxed_move_line["balance"],
|
||||
"tax": 0.0,
|
||||
"tax_line_id": tax_id,
|
||||
}
|
||||
)
|
||||
tax_ids = list(map(operator.itemgetter("tax_line_id"), vat_data))
|
||||
tax_ids = list(set(tax_ids))
|
||||
tax_data = self._get_tax_data(tax_ids)
|
||||
return vat_data, tax_data
|
||||
|
||||
def _get_tax_group_data(self, tax_group_ids):
|
||||
|
@ -92,23 +117,28 @@ class VATReport(models.AbstractModel):
|
|||
|
||||
def _get_vat_report_group_data(self, vat_report_data, tax_data, tax_detail):
|
||||
vat_report = {}
|
||||
for tax_move_line in vat_report_data.values():
|
||||
tax_id = tax_move_line["tax_line_id"][0]
|
||||
tax_group_id = tax_data[tax_id]["tax_group_id"]
|
||||
if tax_group_id not in vat_report.keys():
|
||||
vat_report[tax_group_id] = {}
|
||||
vat_report[tax_group_id]["net"] = 0.0
|
||||
vat_report[tax_group_id]["tax"] = 0.0
|
||||
vat_report[tax_group_id][tax_id] = dict(tax_data[tax_id])
|
||||
vat_report[tax_group_id][tax_id].update({"net": 0.0, "tax": 0.0})
|
||||
for tax_move_line in vat_report_data:
|
||||
tax_id = tax_move_line["tax_line_id"]
|
||||
if tax_data[tax_id]["amount_type"] == "group":
|
||||
pass
|
||||
else:
|
||||
if tax_id not in vat_report[tax_group_id].keys():
|
||||
tax_group_id = tax_data[tax_id]["tax_group_id"]
|
||||
if tax_group_id not in vat_report.keys():
|
||||
vat_report[tax_group_id] = {}
|
||||
vat_report[tax_group_id]["net"] = 0.0
|
||||
vat_report[tax_group_id]["tax"] = 0.0
|
||||
vat_report[tax_group_id][tax_id] = dict(tax_data[tax_id])
|
||||
vat_report[tax_group_id][tax_id].update({"net": 0.0, "tax": 0.0})
|
||||
vat_report[tax_group_id]["net"] += tax_move_line["net"]
|
||||
vat_report[tax_group_id]["tax"] += tax_move_line["tax"]
|
||||
vat_report[tax_group_id][tax_id]["net"] += tax_move_line["net"]
|
||||
vat_report[tax_group_id][tax_id]["tax"] += tax_move_line["tax"]
|
||||
else:
|
||||
if tax_id not in vat_report[tax_group_id].keys():
|
||||
vat_report[tax_group_id][tax_id] = dict(tax_data[tax_id])
|
||||
vat_report[tax_group_id][tax_id].update(
|
||||
{"net": 0.0, "tax": 0.0}
|
||||
)
|
||||
vat_report[tax_group_id]["net"] += tax_move_line["net"]
|
||||
vat_report[tax_group_id]["tax"] += tax_move_line["tax"]
|
||||
vat_report[tax_group_id][tax_id]["net"] += tax_move_line["net"]
|
||||
vat_report[tax_group_id][tax_id]["tax"] += tax_move_line["tax"]
|
||||
tax_group_data = self._get_tax_group_data(vat_report.keys())
|
||||
vat_report_list = []
|
||||
for tax_group_id in vat_report.keys():
|
||||
|
@ -133,25 +163,30 @@ class VATReport(models.AbstractModel):
|
|||
|
||||
def _get_vat_report_tag_data(self, vat_report_data, tax_data, tax_detail):
|
||||
vat_report = {}
|
||||
for tax_move_line in vat_report_data.values():
|
||||
tax_id = tax_move_line["tax_line_id"][0]
|
||||
tags_ids = tax_move_line["tags_ids"]
|
||||
if tags_ids:
|
||||
for tag_id in tags_ids:
|
||||
if tag_id not in vat_report.keys():
|
||||
vat_report[tag_id] = {}
|
||||
vat_report[tag_id]["net"] = 0.0
|
||||
vat_report[tag_id]["tax"] = 0.0
|
||||
vat_report[tag_id][tax_id] = dict(tax_data[tax_id])
|
||||
vat_report[tag_id][tax_id].update({"net": 0.0, "tax": 0.0})
|
||||
else:
|
||||
if tax_id not in vat_report[tag_id].keys():
|
||||
for tax_move_line in vat_report_data:
|
||||
tax_id = tax_move_line["tax_line_id"]
|
||||
tags_ids = tax_data[tax_id]["tags_ids"]
|
||||
if tax_data[tax_id]["amount_type"] == "group":
|
||||
continue
|
||||
else:
|
||||
if tags_ids:
|
||||
for tag_id in tags_ids:
|
||||
if tag_id not in vat_report.keys():
|
||||
vat_report[tag_id] = {}
|
||||
vat_report[tag_id]["net"] = 0.0
|
||||
vat_report[tag_id]["tax"] = 0.0
|
||||
vat_report[tag_id][tax_id] = dict(tax_data[tax_id])
|
||||
vat_report[tag_id][tax_id].update({"net": 0.0, "tax": 0.0})
|
||||
vat_report[tag_id][tax_id]["net"] += tax_move_line["net"]
|
||||
vat_report[tag_id][tax_id]["tax"] += tax_move_line["tax"]
|
||||
vat_report[tag_id]["net"] += tax_move_line["net"]
|
||||
vat_report[tag_id]["tax"] += tax_move_line["tax"]
|
||||
else:
|
||||
if tax_id not in vat_report[tag_id].keys():
|
||||
vat_report[tag_id][tax_id] = dict(tax_data[tax_id])
|
||||
vat_report[tag_id][tax_id].update(
|
||||
{"net": 0.0, "tax": 0.0}
|
||||
)
|
||||
vat_report[tag_id][tax_id]["net"] += tax_move_line["net"]
|
||||
vat_report[tag_id][tax_id]["tax"] += tax_move_line["tax"]
|
||||
vat_report[tag_id]["net"] += tax_move_line["net"]
|
||||
vat_report[tag_id]["tax"] += tax_move_line["tax"]
|
||||
tags_data = self._get_tags_data(vat_report.keys())
|
||||
vat_report_list = []
|
||||
for tag_id in vat_report.keys():
|
||||
|
@ -173,8 +208,9 @@ class VATReport(models.AbstractModel):
|
|||
date_to = data["date_to"]
|
||||
based_on = data["based_on"]
|
||||
tax_detail = data["tax_detail"]
|
||||
only_posted_moves = data["only_posted_moves"]
|
||||
vat_report_data, tax_data = self._get_vat_report_data(
|
||||
company_id, date_from, date_to
|
||||
company_id, date_from, date_to, only_posted_moves
|
||||
)
|
||||
if based_on == "taxgroups":
|
||||
vat_report = self._get_vat_report_group_data(
|
||||
|
|
|
@ -267,16 +267,16 @@ class TestVATReport(common.TransactionCase):
|
|||
tax_10_net, tax_10_tax = self._get_tax_line(self.tax_10.name, vat_report)
|
||||
tax_20_net, tax_20_tax = self._get_tax_line(self.tax_20.name, vat_report)
|
||||
|
||||
self.assertEqual(tag_01_net, 100)
|
||||
self.assertEqual(tag_01_tax, 10)
|
||||
self.assertEqual(tag_02_net, 350)
|
||||
self.assertEqual(tag_02_tax, 60)
|
||||
self.assertEqual(tag_03_net, 250)
|
||||
self.assertEqual(tag_03_tax, 50)
|
||||
self.assertEqual(tax_10_net, 100)
|
||||
self.assertEqual(tax_10_tax, 10)
|
||||
self.assertEqual(tax_20_net, 250)
|
||||
self.assertEqual(tax_20_tax, 50)
|
||||
self.assertEqual(tag_01_net, -100)
|
||||
self.assertEqual(tag_01_tax, -10)
|
||||
self.assertEqual(tag_02_net, -350)
|
||||
self.assertEqual(tag_02_tax, -60)
|
||||
self.assertEqual(tag_03_net, -250)
|
||||
self.assertEqual(tag_03_tax, -50)
|
||||
self.assertEqual(tax_10_net, -100)
|
||||
self.assertEqual(tax_10_tax, -10)
|
||||
self.assertEqual(tax_20_net, -250)
|
||||
self.assertEqual(tax_20_tax, -50)
|
||||
|
||||
# Check report based on taxgroups
|
||||
res_data = self._get_report_lines(taxgroups=True)
|
||||
|
@ -304,14 +304,14 @@ class TestVATReport(common.TransactionCase):
|
|||
tax_10_net, tax_10_tax = self._get_tax_line(self.tax_10.name, vat_report)
|
||||
tax_20_net, tax_20_tax = self._get_tax_line(self.tax_20.name, vat_report)
|
||||
|
||||
self.assertEqual(group_10_net, 100)
|
||||
self.assertEqual(group_10_tax, 10)
|
||||
self.assertEqual(group_20_net, 250)
|
||||
self.assertEqual(group_20_tax, 50)
|
||||
self.assertEqual(tax_10_net, 100)
|
||||
self.assertEqual(tax_10_tax, 10)
|
||||
self.assertEqual(tax_20_net, 250)
|
||||
self.assertEqual(tax_20_tax, 50)
|
||||
self.assertEqual(group_10_net, -100)
|
||||
self.assertEqual(group_10_tax, -10)
|
||||
self.assertEqual(group_20_net, -250)
|
||||
self.assertEqual(group_20_tax, -50)
|
||||
self.assertEqual(tax_10_net, -100)
|
||||
self.assertEqual(tax_10_tax, -10)
|
||||
self.assertEqual(tax_20_net, -250)
|
||||
self.assertEqual(tax_20_tax, -50)
|
||||
|
||||
def test_wizard_date_range(self):
|
||||
vat_wizard = self.env["vat.report.wizard"]
|
||||
|
|
|
@ -47,7 +47,7 @@ class GeneralLedgerReportWizard(models.TransientModel):
|
|||
"If partners are filtered, "
|
||||
"debits and credits totals will not match the trial balance.",
|
||||
)
|
||||
show_analytic_tags = fields.Boolean(string="Show analytic tags")
|
||||
show_analytic_tags = fields.Boolean(string="Show analytic tags",)
|
||||
receivable_accounts_only = fields.Boolean()
|
||||
payable_accounts_only = fields.Boolean()
|
||||
partner_ids = fields.Many2many(
|
||||
|
|
|
@ -25,6 +25,12 @@ class VATReportWizard(models.TransientModel):
|
|||
default="taxtags",
|
||||
)
|
||||
tax_detail = fields.Boolean("Detail Taxes")
|
||||
target_move = fields.Selection(
|
||||
[("posted", "All Posted Entries"), ("all", "All Entries")],
|
||||
string="Target Moves",
|
||||
required=True,
|
||||
default="posted",
|
||||
)
|
||||
|
||||
@api.onchange("company_id")
|
||||
def onchange_company_id(self):
|
||||
|
@ -105,6 +111,7 @@ class VATReportWizard(models.TransientModel):
|
|||
"date_from": self.date_from,
|
||||
"date_to": self.date_to,
|
||||
"based_on": self.based_on,
|
||||
"only_posted_moves": self.target_move == "posted",
|
||||
"tax_detail": self.tax_detail,
|
||||
}
|
||||
|
||||
|
|
|
@ -18,10 +18,11 @@
|
|||
<field name="date_from" />
|
||||
<field name="date_to" />
|
||||
</group>
|
||||
<group name="other_filters">
|
||||
<field name="based_on" widget="radio" />
|
||||
<field name="tax_detail" />
|
||||
</group>
|
||||
</group>
|
||||
<group name="other_filters">
|
||||
<field name="target_move" widget="radio" />
|
||||
<field name="based_on" widget="radio" />
|
||||
<field name="tax_detail" />
|
||||
</group>
|
||||
<footer>
|
||||
<button
|
||||
|
|
Loading…
Reference in New Issue