216 lines
7.9 KiB
Python
216 lines
7.9 KiB
Python
# Copyright 2018-2019 ForgeFlow, S.L.
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
import logging
|
|
|
|
from psycopg2 import IntegrityError
|
|
|
|
from odoo import Command, fields
|
|
from odoo.tests.common import TransactionCase
|
|
from odoo.tools import mute_logger
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class TestAccountMoveTemplate(TransactionCase):
|
|
def with_context(self, *args, **kwargs):
|
|
context = dict(args[0] if args else self.env.context, **kwargs)
|
|
self.env = self.env(context=context)
|
|
return self
|
|
|
|
def _chart_of_accounts_create(self, company, chart):
|
|
_logger.debug("Creating chart of account")
|
|
self.env.user.write(
|
|
{"company_ids": [Command.link(company.id)], "company_id": company.id}
|
|
)
|
|
self.with_context(company_id=company.id, force_company=company.id)
|
|
wizard = self.env["wizard.multi.charts.accounts"].create(
|
|
{
|
|
"company_id": company.id,
|
|
"chart_template_id": chart.id,
|
|
"code_digits": 6,
|
|
"currency_id": self.env.ref("base.EUR").id,
|
|
"transfer_account_id": chart.transfer_account_id.id,
|
|
}
|
|
)
|
|
wizard.onchange_chart_template_id()
|
|
wizard.execute()
|
|
return True
|
|
|
|
def setUp(self):
|
|
super(TestAccountMoveTemplate, self).setUp()
|
|
employees_group = self.env.ref("base.group_user")
|
|
multi_company_group = self.env.ref("base.group_multi_company")
|
|
account_user_group = self.env.ref("account.group_account_user")
|
|
account_manager_group = self.env.ref("account.group_account_manager")
|
|
self.company = self.env["res.company"].create({"name": "Test company"})
|
|
self.company_2 = self.env["res.company"].create(
|
|
{"name": "Test company 2", "parent_id": self.company.id}
|
|
)
|
|
self.env.user.company_ids += self.company
|
|
self.env.user.company_ids += self.company_2
|
|
|
|
self.user = (
|
|
self.env["res.users"]
|
|
.with_user(self.env.user)
|
|
.with_context(no_reset_password=True)
|
|
.create(
|
|
{
|
|
"name": "Test User",
|
|
"login": "test_user",
|
|
"email": "test@oca.com",
|
|
"groups_id": [
|
|
(
|
|
6,
|
|
0,
|
|
[
|
|
employees_group.id,
|
|
account_user_group.id,
|
|
account_manager_group.id,
|
|
multi_company_group.id,
|
|
],
|
|
)
|
|
],
|
|
"company_id": self.company.id,
|
|
"company_ids": [Command.link(self.company.id)],
|
|
}
|
|
)
|
|
)
|
|
|
|
self.chart = self.env["account.chart.template"].search([], limit=1)
|
|
self._chart_of_accounts_create(self.company, self.chart)
|
|
account_template = self.env["account.account.template"].create(
|
|
{"name": "Test 1", "code": "Code_test", "account_type": "asset_cash"}
|
|
)
|
|
self.env["ir.model.data"].create(
|
|
{
|
|
"name": account_template.name,
|
|
"module": "account",
|
|
"model": "account.account.template",
|
|
"res_id": account_template.id,
|
|
"noupdate": 0,
|
|
}
|
|
)
|
|
|
|
self.chart_2 = self.env["account.chart.template"].create(
|
|
{
|
|
"name": "Test Chart",
|
|
"currency_id": self.env.ref("base.EUR").id,
|
|
"transfer_account_id": account_template.id,
|
|
}
|
|
)
|
|
|
|
account_template.chart_template_id = self.chart_2
|
|
self.chart_2.tax_template_ids |= self.chart.tax_template_ids
|
|
|
|
self._chart_of_accounts_create(self.company_2, self.chart_2)
|
|
|
|
self.chart.company_id = self.company
|
|
self.chart_2.company_id = self.company_2
|
|
|
|
self.account_company_1 = self.env["account.account"].search(
|
|
[("company_id", "=", self.company.id)], limit=1
|
|
)
|
|
self.account_journal_1 = self.env["account.journal"].create(
|
|
{
|
|
"name": "Journal Company 1",
|
|
"company_id": self.company.id,
|
|
"code": "TST",
|
|
"type": "general",
|
|
}
|
|
)
|
|
self.partner = self.env["res.partner"].create(
|
|
{"name": "Test partner", "company_id": False}
|
|
)
|
|
self.partner2 = self.env["res.partner"].create(
|
|
{"name": "Test partner 2", "company_id": False}
|
|
)
|
|
|
|
self.tax_account_id = self.env["account.account"].create(
|
|
{
|
|
"name": "tax account",
|
|
"code": "TAX",
|
|
"account_type": "income_other",
|
|
"company_id": self.company.id,
|
|
}
|
|
)
|
|
self.tax = self.env["account.tax"].create(
|
|
{
|
|
"name": "Tax 10.0%",
|
|
"amount": 10.0,
|
|
"amount_type": "percent",
|
|
"account_id": self.tax_account_id.id,
|
|
}
|
|
)
|
|
|
|
def test_create_template(self):
|
|
"""Test that I can create a template"""
|
|
template = (
|
|
self.env["account.move.template"]
|
|
.with_user(self.user)
|
|
.create(
|
|
{
|
|
"name": "Test Move Template",
|
|
"company_id": self.company.id,
|
|
"journal_id": self.account_journal_1.id,
|
|
"template_line_ids": [
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"name": "L1",
|
|
"sequence": 1,
|
|
"account_id": self.account_company_1.id,
|
|
"partner_id": self.partner.id,
|
|
"tax_line_id": self.tax.id,
|
|
"move_line_type": "dr",
|
|
"type": "input",
|
|
},
|
|
),
|
|
(
|
|
0,
|
|
0,
|
|
{
|
|
"name": "L2",
|
|
"sequence": 2,
|
|
"account_id": self.account_company_1.id,
|
|
"move_line_type": "cr",
|
|
"tax_ids": [Command.link(self.tax.id)],
|
|
"type": "input",
|
|
},
|
|
),
|
|
],
|
|
}
|
|
)
|
|
)
|
|
|
|
self.assertEqual(template.company_id, self.user.company_id)
|
|
|
|
template_2 = template.copy()
|
|
self.assertEqual(template_2.name, "%s (copy)" % template.name)
|
|
|
|
wiz = (
|
|
self.env["wizard.select.move.template"]
|
|
.with_user(self.user)
|
|
.create(
|
|
{
|
|
"company_id": self.company.id,
|
|
"template_id": template.id,
|
|
"partner_id": self.partner2.id,
|
|
"date": fields.Date.today(),
|
|
}
|
|
)
|
|
)
|
|
wiz.load_lines()
|
|
res = wiz.load_template()
|
|
aml = self.env["account.move.line"].search(
|
|
[("account_id", "=", self.account_company_1.id)], limit=1
|
|
)
|
|
self.assertEqual(res["domain"], ([("id", "in", aml.move_id.ids)]))
|
|
aml = self.env["account.move.line"].search([("name", "=", "L1")], limit=1)
|
|
self.assertEqual(aml.tax_line_id, self.tax)
|
|
self.assertEqual(aml.partner_id, self.partner)
|
|
aml = self.env["account.move.line"].search([("name", "=", "L2")], limit=1)
|
|
self.assertEqual(aml.tax_ids[0], self.tax)
|
|
with self.assertRaises(IntegrityError), mute_logger("odoo.sql_db"):
|
|
template_2.name = template.name
|