[IMP] l10n_mx: Completely refactored Mexican CoA Template. Courtesy of Vauxoo.
* Added accounts provided following the structure provided by the SAT this accounts are only the minimal necessary ones, with the objective to set the first easiest engagement to new users and tags will represent the actual information from the document linked. * The name of the tag is the concatenation of tag.code + tag.name, because the account.tag model have not the code field. Note: we will need more accounts but some of them for special operations which are not basic at all, then it is better just propose the operational accounts once we understand a proper closing process. * Set the proper user-types on accounts in order to be able to use it with the official reports this CoA for operational purpose. * Added nature field and data in tags to allow set this value in electronic account report, and set this value with data pre loaded, we did not use user.type for this due to the fact that the same user type can have different nature (if it grows for credit or debit), I do not know if this field brakes the stable rule we can discuse about that. * Assign the account tags with in the Mexican CoA template installation, and with an onchange(account.code) when manually modifying/creating accounts. Rationale: If the code of the accounts follows the pattern 111.00.00 or 111-00-00 then it will set the tag 111.00 if the tag exists, if not then this will be ignored. * Generate an account tag by each second level account in SAT catalog, and assign to the corresponding account.
This commit is contained in:
committed by
qdp-odoo
parent
d6ead3dbe0
commit
9a0e3a11db
@@ -1,2 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
||||
|
||||
@@ -30,8 +30,13 @@ With this module you will have:
|
||||
|
||||
.. SAT: http://www.sat.gob.mx/
|
||||
""",
|
||||
"depends": ["account", "base_vat"],
|
||||
"depends": [
|
||||
"account",
|
||||
"base_vat",
|
||||
"account_tax_cash_basis",
|
||||
],
|
||||
"data": [
|
||||
"data/account_tag_data.xml",
|
||||
"data/l10n_mx_chart_data.xml",
|
||||
"data/account_tax_data.xml",
|
||||
"data/account_chart_template_data.yml",
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
-
|
||||
!python {model: account.chart.template, id: vauxoo_mx_chart_template}: |
|
||||
self[0].try_loading_for_current_company()
|
||||
!python {model: account.chart.template, id: mx_coa}: |
|
||||
self[0].try_loading_for_current_company()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,10 +6,6 @@
|
||||
<field name="name">IVA(0%) VENTAS</field>
|
||||
<field name="applicability">taxes</field>
|
||||
</record>
|
||||
<record id="tax_tag_02" model="account.account.tag">
|
||||
<field name="name">IVA(11%) VENTAS</field>
|
||||
<field name="applicability">taxes</field>
|
||||
</record>
|
||||
<record id="tax_tag_03" model="account.account.tag">
|
||||
<field name="name">IVA(16%) VENTAS</field>
|
||||
<field name="applicability">taxes</field>
|
||||
@@ -42,157 +38,129 @@
|
||||
<field name="name">IVA(0%) COMPRAS</field>
|
||||
<field name="applicability">taxes</field>
|
||||
</record>
|
||||
<record id="tax_tag_11" model="account.account.tag">
|
||||
<field name="name">IVA(11%) COMPRAS</field>
|
||||
<field name="applicability">taxes</field>
|
||||
</record>
|
||||
<record id="tax_tag_12" model="account.account.tag">
|
||||
<field name="name">IVA(16%) COMPRAS</field>
|
||||
<field name="applicability">taxes</field>
|
||||
</record>
|
||||
|
||||
<record id="tax9" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax9" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">IVA(0%) VENTAS</field>
|
||||
<field name="description">ITAX_010-IN</field>
|
||||
<field name="amount">0</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field name="account_id" ref="cuenta2202113000"/>
|
||||
<field name="refund_account_id" ref="cuenta2202113000"/>
|
||||
<field name="amount">0</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field name="account_id" ref="cuenta209_01"/>
|
||||
<field name="refund_account_id" ref="cuenta209_01"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_01')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="tax11" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<field name="name">IVA(11%) VENTAS</field>
|
||||
<field name="description">ITAX_110-IN</field>
|
||||
<field name="amount">11</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field name="account_id" ref="cuenta2202113000"/>
|
||||
<field name="refund_account_id" ref="cuenta2202113000"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_02')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="tax12" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax12" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">IVA(16%) VENTAS</field>
|
||||
<field name="description">ITAX_160-IN</field>
|
||||
<field name="amount">16</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field name="account_id" ref="cuenta2202113000"/>
|
||||
<field name="refund_account_id" ref="cuenta2202113000"/>
|
||||
<field name="amount">16</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field name="account_id" ref="cuenta209_01"/>
|
||||
<field name="refund_account_id" ref="cuenta209_01"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_03')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="tax1" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax1" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">RET IVA FLETES 4%</field>
|
||||
<field name="description">ITAXR_04-OUT</field>
|
||||
<field name="amount">-4</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta2201112000"/>
|
||||
<field name="refund_account_id" ref="cuenta2201112000"/>
|
||||
<field name="amount">-4</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta216_10"/>
|
||||
<field name="refund_account_id" ref="cuenta216_10"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_04')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="tax2" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax2" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">RET IVA ARRENDAMIENTO 10%</field>
|
||||
<field name="description">ITAXR_10-OUT</field>
|
||||
<field name="amount">-10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta2201117000"/>
|
||||
<field name="refund_account_id" ref="cuenta2201117000"/>
|
||||
<field name="amount">-10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta216_10"/>
|
||||
<field name="refund_account_id" ref="cuenta216_10"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_05')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="tax3" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax3" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">RET ISR ARRENDAMIENTO 10%</field>
|
||||
<field name="description">ITAXA_10-OUT</field>
|
||||
<field name="amount">-10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta2201116000"/>
|
||||
<field name="refund_account_id" ref="cuenta2201116000"/>
|
||||
<field name="amount">-10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta216_03"/>
|
||||
<field name="refund_account_id" ref="cuenta216_03"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_06')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="tax5" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax5" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">RET ISR HONORARIOS 10%</field>
|
||||
<field name="description">ITAXH_10-OUT</field>
|
||||
<field name="amount">-10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta2201115000"/>
|
||||
<field name="refund_account_id" ref="cuenta2201115000"/>
|
||||
<field name="amount">-10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta216_04"/>
|
||||
<field name="refund_account_id" ref="cuenta216_04"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_07')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="tax7" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax7" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">RETENCION IVA ARRENDAMIENTO 10.67%</field>
|
||||
<field name="description">ITAX_1067-OUT</field>
|
||||
<field name="amount">-10.67</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta2201116000"/>
|
||||
<field name="refund_account_id" ref="cuenta2201116000"/>
|
||||
<field name="amount">-10.67</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta216_10"/>
|
||||
<field name="refund_account_id" ref="cuenta216_10"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_08')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="tax8" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax8" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">RETENCION IVA HONORARIOS 10.67%</field>
|
||||
<field name="description">ITAX_167-OUT</field>
|
||||
<field name="amount">-10.67</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta2201118000"/>
|
||||
<field name="refund_account_id" ref="cuenta2201118000"/>
|
||||
<field name="amount">-10.67</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta216_10"/>
|
||||
<field name="refund_account_id" ref="cuenta216_10"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_09')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="tax13" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax13" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">IVA(0%) COMPRAS</field>
|
||||
<field name="description">ITAX_010-OUT</field>
|
||||
<field name="amount">0</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta1151004000"/>
|
||||
<field name="refund_account_id" ref="cuenta1151004000"/>
|
||||
<field name="amount">0</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta119_01"/>
|
||||
<field name="refund_account_id" ref="cuenta119_01"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_10')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
|
||||
<record id="tax10" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<field name="name">IVA(11%) COMPRAS</field>
|
||||
<field name="description">ITAX_110-OUT</field>
|
||||
<field name="amount">11</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta1151004000"/>
|
||||
<field name="refund_account_id" ref="cuenta1151004000"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_11')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="tax14" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="vauxoo_mx_chart_template"/>
|
||||
<record id="tax14" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="mx_coa"/>
|
||||
<field name="name">IVA(16%) COMPRAS</field>
|
||||
<field name="description">ITAX_160-OUT</field>
|
||||
<field name="amount">16</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta1151004000"/>
|
||||
<field name="refund_account_id" ref="cuenta1151004000"/>
|
||||
<field name="amount">16</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="cuenta119_01"/>
|
||||
<field name="refund_account_id" ref="cuenta119_01"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_12')])]"/>
|
||||
</record>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
# coding: utf-8
|
||||
# Copyright 2016 Vauxoo (https://www.vauxoo.com) <info@vauxoo.com>
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from . import chart_template
|
||||
from . import account
|
||||
@@ -0,0 +1,59 @@
|
||||
# coding: utf-8
|
||||
# Copyright 2016 Vauxoo (https://www.vauxoo.com) <info@vauxoo.com>
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
import re
|
||||
from odoo import models, api, fields, _
|
||||
|
||||
|
||||
class AccountJournal(models.Model):
|
||||
_inherit = 'account.journal'
|
||||
|
||||
@api.model
|
||||
def _prepare_liquidity_account(self, name, company, currency_id, type):
|
||||
'''
|
||||
When preparing the values to use when creating the default debit and credit accounts of a
|
||||
liquidity journal, set the correct tags for the mexican localization.
|
||||
'''
|
||||
res = super(AccountJournal, self)._prepare_liquidity_account(name, company, currency_id, type)
|
||||
if company.country_id.id == self.env.ref('base.mx').id:
|
||||
mx_tags = self.env['account.account'].mx_search_tags(res.get('code', ''))
|
||||
if mx_tags:
|
||||
res.update({
|
||||
'tag_ids': [(6, 0, [tag.id for tag in mx_tags])]
|
||||
})
|
||||
return res
|
||||
|
||||
class AccountAccount(models.Model):
|
||||
_inherit = 'account.account'
|
||||
|
||||
@api.model
|
||||
def mx_search_tags(self, code):
|
||||
account_tag = self.env['account.account.tag']
|
||||
#search if the code is compliant with the regexp we have for tags auto-assignation
|
||||
re_res = re.search(
|
||||
'^(?P<first>[1-8][0-9][0-9])[,.]'
|
||||
'(?P<second>[0-9][0-9])[,.]'
|
||||
'(?P<third>[0-9]{2,3})$', code)
|
||||
if not re_res:
|
||||
return account_tag
|
||||
|
||||
#get the elements of that code divided with separation declared in the regexp
|
||||
account = re_res.groups()
|
||||
return account_tag.search([
|
||||
('name', '=like', "%s.%s%%" % (account[0], account[1])),
|
||||
('color', '=', 4)], limit=1)
|
||||
|
||||
@api.onchange('code')
|
||||
def _onchange_code(self):
|
||||
if self.company_id.country_id.id == self.env.ref('base.mx').id and self.code:
|
||||
tags = self.mx_search_tags(self.code)
|
||||
self.tag_ids = tags
|
||||
|
||||
|
||||
class AccountAccountTag(models.Model):
|
||||
_inherit = 'account.account.tag'
|
||||
|
||||
nature = fields.Selection([
|
||||
('D', _('Debitable Account')), ('A', _('Creditable Account'))],
|
||||
help='Used in Mexican report of electronic accounting (account nature).')
|
||||
@@ -0,0 +1,81 @@
|
||||
# coding: utf-8
|
||||
# Copyright 2016 Vauxoo (https://www.vauxoo.com) <info@vauxoo.com>
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from odoo import models, api, _
|
||||
|
||||
|
||||
class AccountChartTemplate(models.Model):
|
||||
_inherit = "account.chart.template"
|
||||
|
||||
@api.multi
|
||||
def _load_template(
|
||||
self, company, code_digits=None, transfer_account_id=None,
|
||||
account_ref=None, taxes_ref=None):
|
||||
"""
|
||||
Set the 'use_cash_basis' and 'cash_basis_account' fields on account.account. This hack is needed due to the fact
|
||||
that the tax template does not have the fields 'use_cash_basis' and 'cash_basis_account'.
|
||||
|
||||
This hunk should be removed in master, as the account_tax_cash_basis module has been merged already in account
|
||||
module
|
||||
"""
|
||||
self.ensure_one()
|
||||
accounts, taxes = super(AccountChartTemplate, self)._load_template(
|
||||
company, code_digits=code_digits,
|
||||
transfer_account_id=transfer_account_id, account_ref=account_ref,
|
||||
taxes_ref=taxes_ref)
|
||||
if not self == self.env.ref('l10n_mx.mx_coa'):
|
||||
return accounts, taxes
|
||||
account_tax_obj = self.env['account.tax']
|
||||
account_obj = self.env['account.account']
|
||||
taxes_acc = {
|
||||
'ITAX_010-IN': account_obj.search([('code', '=', '208.01.01')]),
|
||||
'ITAX_160-IN': account_obj.search([('code', '=', '208.01.01')]),
|
||||
'ITAXR_04-OUT': account_obj.search([('code', '=', '216.13.01')]),
|
||||
'ITAXR_10-OUT': account_obj.search([('code', '=', '216.13.01')]),
|
||||
'ITAX_1067-OUT': account_obj.search([('code', '=', '216.13.01')]),
|
||||
'ITAX_167-OUT': account_obj.search([('code', '=', '216.13.01')]),
|
||||
'ITAX_010-OUT': account_obj.search([('code', '=', '208.01.01')]),
|
||||
'ITAX_160-OUT': account_obj.search([('code', '=', '208.01.01')])}
|
||||
|
||||
for tax in self.tax_template_ids:
|
||||
if tax.description not in taxes_acc:
|
||||
continue
|
||||
account_tax_obj.browse(taxes.get(tax.id)).write({
|
||||
'use_cash_basis': True,
|
||||
'cash_basis_account': taxes_acc.get(tax.description).id,
|
||||
})
|
||||
return accounts, taxes
|
||||
|
||||
@api.model
|
||||
def generate_journals(self, acc_template_ref, company, journals_dict=None):
|
||||
"""Set the tax_cash_basis_journal_id on the company"""
|
||||
res = super(AccountChartTemplate, self).generate_journals(
|
||||
acc_template_ref, company, journals_dict=journals_dict)
|
||||
if not self == self.env.ref('l10n_mx.mx_coa'):
|
||||
return res
|
||||
journal_basis = self.env['account.journal'].search([
|
||||
('type', '=', 'general'),
|
||||
('code', '=', 'CBMX')], limit=1)
|
||||
company.write({'tax_cash_basis_journal_id': journal_basis.id})
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def _prepare_all_journals(self, acc_template_ref, company, journals_dict=None):
|
||||
"""Create the tax_cash_basis_journal_id"""
|
||||
res = super(AccountChartTemplate, self)._prepare_all_journals(
|
||||
acc_template_ref, company, journals_dict=journals_dict)
|
||||
if not self == self.env.ref('l10n_mx.mx_coa'):
|
||||
return res
|
||||
res.append({
|
||||
'type': 'general',
|
||||
'name': _('Effectively Paid'),
|
||||
'code': 'CBMX',
|
||||
'company_id': company.id,
|
||||
'default_credit_account_id': acc_template_ref.get(
|
||||
self.income_currency_exchange_account_id.id),
|
||||
'default_debit_account_id': acc_template_ref.get(
|
||||
self.expense_currency_exchange_account_id.id),
|
||||
'show_on_dashboard': True,
|
||||
})
|
||||
return res
|
||||
Reference in New Issue
Block a user