diff --git a/addons/l10n_latam_base/__init__.py b/addons/l10n_latam_base/__init__.py
new file mode 100644
index 00000000000..94e496f8342
--- /dev/null
+++ b/addons/l10n_latam_base/__init__.py
@@ -0,0 +1,8 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import models
+from odoo import api, SUPERUSER_ID
+
+
+def _set_default_identification_type(cr, registry):
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ env['res.partner'].search([]).write({'l10n_latam_identification_type_id': env.ref('l10n_latam_base.it_vat').id})
diff --git a/addons/l10n_latam_base/__manifest__.py b/addons/l10n_latam_base/__manifest__.py
new file mode 100644
index 00000000000..3194f64401c
--- /dev/null
+++ b/addons/l10n_latam_base/__manifest__.py
@@ -0,0 +1,28 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+{
+ 'name': 'LATAM Localization Base',
+ 'version': '13.0.1.0.0',
+ 'category': 'Localization',
+ 'sequence': 14,
+ 'author': 'Odoo, ADHOC SA',
+ 'description': """
+Base Module for LATAM Localizations
+===================================
+
+* Add Identification Type model to represent valid identifications types in different countries: for AFIP (AR), SII (CL), ...
+* Add Countries code defined by government to identify legal entities and natural persons of foreign countries.""",
+ 'depends': [
+ 'contacts',
+ 'base_vat',
+ ],
+ 'data': [
+ 'data/l10n_latam.identification.type.csv',
+ 'views/res_partner_view.xml',
+ 'views/l10n_latam_identification_type_view.xml',
+ 'security/ir.model.access.csv',
+ ],
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+ 'post_init_hook': '_set_default_identification_type',
+}
diff --git a/addons/l10n_latam_base/data/l10n_latam.identification.type.csv b/addons/l10n_latam_base/data/l10n_latam.identification.type.csv
new file mode 100644
index 00000000000..88c95118a8e
--- /dev/null
+++ b/addons/l10n_latam_base/data/l10n_latam.identification.type.csv
@@ -0,0 +1,4 @@
+id,name,sequence,is_vat
+l10n_latam_base.it_vat,VAT,80,TRUE
+l10n_latam_base.it_pass,Passport,90,
+l10n_latam_base.it_fid,Foreign ID,100,
diff --git a/addons/l10n_latam_base/i18n/es.po b/addons/l10n_latam_base/i18n/es.po
new file mode 100644
index 00000000000..a58fb117604
--- /dev/null
+++ b/addons/l10n_latam_base/i18n/es.po
@@ -0,0 +1,164 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * l10n_latam_base
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0alpha1+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-08-02 16:26+0000\n"
+"PO-Revision-Date: 2019-08-02 16:26+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__active
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_l10n_latam_identification_type_search
+msgid "Active"
+msgstr "Activo"
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_l10n_latam_identification_type_search
+msgid "Archived"
+msgstr "Archivado"
+
+#. module: l10n_latam_base
+#: model:ir.model,name:l10n_latam_base.model_res_company
+msgid "Companies"
+msgstr "Compañías"
+
+#. module: l10n_latam_base
+#: model:ir.model,name:l10n_latam_base.model_res_partner
+msgid "Contact"
+msgstr "Contacto"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__country_id
+msgid "Country"
+msgstr "País"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__create_date
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__description
+msgid "Description"
+msgstr "Descripción"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__display_name
+msgid "Display Name"
+msgstr "Nombre a mostrar"
+
+#. module: l10n_latam_base
+#: model:l10n_latam.identification.type,name:l10n_latam_base.it_fid
+msgid "Foreign ID"
+msgstr "Cédula Extranjera"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__id
+msgid "ID"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_res_partner__vat
+#: model:ir.model.fields,field_description:l10n_latam_base.field_res_users__vat
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_partner_latam_form
+msgid "Identification Number"
+msgstr "Número de Identificación"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,help:l10n_latam_base.field_res_partner__vat
+#: model:ir.model.fields,help:l10n_latam_base.field_res_users__vat
+msgid "Identification Number for selected type"
+msgstr "Número de identificación para el tipo seleccionado"
+
+#. module: l10n_latam_base
+#: model:ir.actions.act_window,name:l10n_latam_base.action_l10n_latam_identification_type
+#: model:ir.model.fields,field_description:l10n_latam_base.field_res_partner__l10n_latam_identification_type_id
+#: model:ir.model.fields,field_description:l10n_latam_base.field_res_users__l10n_latam_identification_type_id
+#: model:ir.ui.menu,name:l10n_latam_base.menu_l10n_latam_identification_type
+msgid "Identification Type"
+msgstr "Tipo de Identificación"
+
+#. module: l10n_latam_base
+#: model:ir.model,name:l10n_latam_base.model_l10n_latam_identification_type
+msgid "Identification Types"
+msgstr "Tipos de Identificación"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__is_vat
+msgid "Is Vat"
+msgstr "Es Identificación Fiscal?"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type____last_update
+msgid "Last Modified on"
+msgstr "Última modificación en"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__write_uid
+msgid "Last Updated by"
+msgstr "Última actualización por"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__name
+msgid "Name"
+msgstr "Nombre"
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_partner_latam_form
+msgid "Number"
+msgstr "Número"
+
+#. module: l10n_latam_base
+#: model:l10n_latam.identification.type,name:l10n_latam_base.it_pass
+msgid "Passport"
+msgstr "Pasaporte"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__sequence
+msgid "Sequence"
+msgstr "Secuencia"
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_l10n_latam_identification_type_search
+msgid "Show active identification types"
+msgstr "Mostrar los tipos de identificación activos"
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_l10n_latam_identification_type_search
+msgid "Show archived identification types"
+msgstr "Mostrar los tipos de identificación archivados"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,help:l10n_latam_base.field_res_partner__l10n_latam_identification_type_id
+#: model:ir.model.fields,help:l10n_latam_base.field_res_users__l10n_latam_identification_type_id
+msgid "The type of identification"
+msgstr "Tipo de identificación"
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_partner_latam_form
+msgid "Type"
+msgstr "Tipo"
+
+#. module: l10n_latam_base
+#: model:l10n_latam.identification.type,name:l10n_latam_base.it_vat
+msgid "VAT"
+msgstr "VAT"
diff --git a/addons/l10n_latam_base/i18n/es_AR.po b/addons/l10n_latam_base/i18n/es_AR.po
new file mode 100644
index 00000000000..d927cf13495
--- /dev/null
+++ b/addons/l10n_latam_base/i18n/es_AR.po
@@ -0,0 +1,21 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * l10n_latam_base
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0alpha1+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-08-02 16:26+0000\n"
+"PO-Revision-Date: 2019-08-02 16:26+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: l10n_latam_base
+#: model:l10n_latam.identification.type,name:l10n_latam_base.it_fid
+msgid "Foreign ID"
+msgstr "CI Extranjera"
diff --git a/addons/l10n_latam_base/i18n/l10n_latam_base.pot b/addons/l10n_latam_base/i18n/l10n_latam_base.pot
new file mode 100644
index 00000000000..7151893fe04
--- /dev/null
+++ b/addons/l10n_latam_base/i18n/l10n_latam_base.pot
@@ -0,0 +1,164 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * l10n_latam_base
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0alpha1+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-08-02 16:28+0000\n"
+"PO-Revision-Date: 2019-08-02 16:28+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__active
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_l10n_latam_identification_type_search
+msgid "Active"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_l10n_latam_identification_type_search
+msgid "Archived"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model,name:l10n_latam_base.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model,name:l10n_latam_base.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__country_id
+msgid "Country"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__description
+msgid "Description"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:l10n_latam.identification.type,name:l10n_latam_base.it_fid
+msgid "Foreign ID"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__id
+msgid "ID"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_res_partner__vat
+#: model:ir.model.fields,field_description:l10n_latam_base.field_res_users__vat
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_partner_latam_form
+msgid "Identification Number"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,help:l10n_latam_base.field_res_partner__vat
+#: model:ir.model.fields,help:l10n_latam_base.field_res_users__vat
+msgid "Identification Number for selected type"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.actions.act_window,name:l10n_latam_base.action_l10n_latam_identification_type
+#: model:ir.model.fields,field_description:l10n_latam_base.field_res_partner__l10n_latam_identification_type_id
+#: model:ir.model.fields,field_description:l10n_latam_base.field_res_users__l10n_latam_identification_type_id
+#: model:ir.ui.menu,name:l10n_latam_base.menu_l10n_latam_identification_type
+msgid "Identification Type"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model,name:l10n_latam_base.model_l10n_latam_identification_type
+msgid "Identification Types"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__is_vat
+msgid "Is Vat"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__name
+msgid "Name"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_partner_latam_form
+msgid "Number"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:l10n_latam.identification.type,name:l10n_latam_base.it_pass
+msgid "Passport"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,field_description:l10n_latam_base.field_l10n_latam_identification_type__sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_l10n_latam_identification_type_search
+msgid "Show active identification types"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_l10n_latam_identification_type_search
+msgid "Show archived identification types"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:ir.model.fields,help:l10n_latam_base.field_res_partner__l10n_latam_identification_type_id
+#: model:ir.model.fields,help:l10n_latam_base.field_res_users__l10n_latam_identification_type_id
+msgid "The type of identification"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model_terms:ir.ui.view,arch_db:l10n_latam_base.view_partner_latam_form
+msgid "Type"
+msgstr ""
+
+#. module: l10n_latam_base
+#: model:l10n_latam.identification.type,name:l10n_latam_base.it_vat
+msgid "VAT"
+msgstr ""
diff --git a/addons/l10n_latam_base/models/__init__.py b/addons/l10n_latam_base/models/__init__.py
new file mode 100644
index 00000000000..3111eda0b16
--- /dev/null
+++ b/addons/l10n_latam_base/models/__init__.py
@@ -0,0 +1,4 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import l10n_latam_identification_type
+from . import res_partner
+from . import res_company
diff --git a/addons/l10n_latam_base/models/l10n_latam_identification_type.py b/addons/l10n_latam_base/models/l10n_latam_identification_type.py
new file mode 100644
index 00000000000..68af4f24b1c
--- /dev/null
+++ b/addons/l10n_latam_base/models/l10n_latam_identification_type.py
@@ -0,0 +1,22 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models, fields, api
+from odoo.osv import expression
+
+
+class L10nLatamIdentificationType(models.Model):
+ _name = 'l10n_latam.identification.type'
+ _description = "Identification Types"
+ _order = 'sequence'
+
+ sequence = fields.Integer(default=10)
+ name = fields.Char(translate=True, required=True,)
+ description = fields.Char()
+ active = fields.Boolean(default=True)
+ is_vat = fields.Boolean()
+ country_id = fields.Many2one('res.country')
+
+ def name_get(self):
+ multi_localization = len(self.search([]).mapped('country_id')) > 1
+ return [(rec.id, '%s%s' % (
+ rec.name, multi_localization and rec.country_id and ' (%s)' % rec.country_id.code or '')) for rec in self]
diff --git a/addons/l10n_latam_base/models/res_company.py b/addons/l10n_latam_base/models/res_company.py
new file mode 100644
index 00000000000..165d0afb5f6
--- /dev/null
+++ b/addons/l10n_latam_base/models/res_company.py
@@ -0,0 +1,18 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models, fields, api
+
+
+class ResCompany(models.Model):
+ _inherit = 'res.company'
+
+ @api.model
+ def create(self, vals):
+ """ If exists, use specific vat identification.type for the country of the company """
+ country_id = vals.get('country_id')
+ if country_id:
+ country_vat_type = self.env['l10n_latam.identification.type'].search(
+ [('is_vat', '=', True), ('country_id', '=', country_id)], limit=1)
+ if country_vat_type:
+ self = self.with_context(default_l10n_latam_identification_type_id=country_vat_type.id)
+ return super().create(vals)
diff --git a/addons/l10n_latam_base/models/res_partner.py b/addons/l10n_latam_base/models/res_partner.py
new file mode 100644
index 00000000000..67c4b77644d
--- /dev/null
+++ b/addons/l10n_latam_base/models/res_partner.py
@@ -0,0 +1,28 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models, fields, api
+
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ l10n_latam_identification_type_id = fields.Many2one('l10n_latam.identification.type',
+ string="Identification Type", index=True, auto_join=True,
+ default=lambda self: self.env.ref('l10n_latam_base.it_vat', raise_if_not_found=False),
+ help="The type of identification")
+ vat = fields.Char(string='Identification Number', help="Identification Number for selected type")
+
+ @api.model
+ def _commercial_fields(self):
+ return super()._commercial_fields() + ['l10n_latam_identification_type_id']
+
+ @api.constrains('vat', 'l10n_latam_identification_type_id')
+ def check_vat(self):
+ with_vat = self.filtered(lambda x: x.l10n_latam_identification_type_id.is_vat)
+ return super(ResPartner, with_vat).check_vat()
+
+ @api.onchange('country_id')
+ def _onchange_country(self):
+ country = self.country_id or self.company_id.country_id or self.env.company.country_id
+ self.l10n_latam_identification_type_id = self.env['l10n_latam.identification.type'].search(
+ [('country_id', '=', country.id), ('is_vat', '=', True)]) or self.env.ref('l10n_latam_base.it_vat', raise_if_not_found=False)
diff --git a/addons/l10n_latam_base/security/ir.model.access.csv b/addons/l10n_latam_base/security/ir.model.access.csv
new file mode 100644
index 00000000000..9e4bed68a7e
--- /dev/null
+++ b/addons/l10n_latam_base/security/ir.model.access.csv
@@ -0,0 +1,3 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_latam_identification_type_all","latam id type all","model_l10n_latam_identification_type",,1,0,0,0
+"access_latam_identification_type_manager","latam id type manager","model_l10n_latam_identification_type","base.group_partner_manager",1,1,0,0
diff --git a/addons/l10n_latam_base/views/l10n_latam_identification_type_view.xml b/addons/l10n_latam_base/views/l10n_latam_identification_type_view.xml
new file mode 100644
index 00000000000..dba31944f07
--- /dev/null
+++ b/addons/l10n_latam_base/views/l10n_latam_identification_type_view.xml
@@ -0,0 +1,46 @@
+
+
+
+
+ l10n_latam.identification.type.tree
+ l10n_latam.identification.type
+ tree
+
+
+
+
+
+
+
+
+
+
+
+ l10n_latam.identification.type.search
+ l10n_latam.identification.type
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+ Identification Type
+ l10n_latam.identification.type
+ tree
+
+ ['|', ('active', '=', True), ('active', '=', False)]
+ {"search_default_active":1}
+
+
+
+
+
diff --git a/addons/l10n_latam_base/views/res_partner_view.xml b/addons/l10n_latam_base/views/res_partner_view.xml
new file mode 100644
index 00000000000..e925faf968a
--- /dev/null
+++ b/addons/l10n_latam_base/views/res_partner_view.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ view_partner_latam_form
+
+ res.partner
+ 100
+
+
+ 1
+
+
+
+
+
+ -
+
+
+
+
+
+
+