summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2017-06-01 00:37:30 +0200
committerOlivier Dony <odo@openerp.com>2017-06-01 00:37:30 +0200
commit5dd2cc8e6320c631a511c6dac98ae40e54d4a94d (patch)
treead5f44653ac11d4a8bdec256de4d20adda94091d
parent20c724479f2092f2d5f0b3c96f15bd6162e07968 (diff)
parentb9e220726730e2e0c25dae9952fa90e783fadc16 (diff)
[MERGE] Forward-port saas-14 up to b9e220726730e2e0c25dae9952fa90e783fadc16
-rw-r--r--addons/account/models/account.py6
-rw-r--r--addons/account/models/account_bank_statement.py2
-rw-r--r--addons/account/models/account_invoice.py36
-rw-r--r--addons/account/models/account_move.py4
-rw-r--r--addons/account/models/account_payment.py14
-rw-r--r--addons/account/static/src/js/account_payment_widget.js5
-rw-r--r--addons/account/views/account_invoice_view.xml2
-rw-r--r--addons/account/views/account_view.xml3
-rw-r--r--addons/account/wizard/account_invoice_refund.py14
-rw-r--r--addons/account_bank_statement_import/account_bank_statement_import.py5
-rw-r--r--addons/account_bank_statement_import/i18n/account_bank_statement_import.pot6
-rw-r--r--addons/account_check_printing/models/account_payment.py24
-rw-r--r--addons/analytic/views/analytic_account_views.xml2
-rw-r--r--addons/barcodes/models/barcodes.py4
-rw-r--r--addons/barcodes/tests/__init__.py1
-rw-r--r--addons/barcodes/tests/test_barcode_nomenclature.py15
-rw-r--r--addons/base_vat/models/res_partner.py8
-rw-r--r--addons/board/static/src/less/dashboard.less1
-rw-r--r--addons/calendar/models/mail_message.py2
-rw-r--r--addons/crm/models/crm_lead.py43
-rw-r--r--addons/crm/models/res_config.py5
-rw-r--r--addons/crm/wizard/crm_lead_to_opportunity.py7
-rw-r--r--addons/hr_expense/views/hr_expense_views.xml1
-rw-r--r--addons/hr_expense/wizard/hr_expense_register_payment.py2
-rw-r--r--addons/hr_expense_check/__init__.py1
-rw-r--r--addons/hr_expense_check/__manifest__.py16
-rw-r--r--addons/hr_expense_check/models/__init__.py1
-rw-r--r--addons/hr_expense_check/models/payment.py39
-rw-r--r--addons/hr_expense_check/views/payment.xml18
-rw-r--r--addons/hr_holidays/controllers/main.py2
-rw-r--r--addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot7
-rw-r--r--addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py2
-rw-r--r--addons/l10n_be_invoice_bba/i18n/l10n_be_invoice_bba.pot2
-rw-r--r--addons/l10n_be_invoice_bba/models/account_invoice.py2
-rw-r--r--addons/l10n_cn/__manifest__.py1
-rw-r--r--addons/l10n_cn_small_business/__manifest__.py1
-rw-r--r--addons/l10n_cn_small_business/data/l10n_cn_small_business_chart_data.xml6
-rw-r--r--addons/l10n_cn_standard/__manifest__.py1
-rw-r--r--addons/l10n_do/__manifest__.py2
-rw-r--r--addons/l10n_do/data/account.account.template.csv525
-rw-r--r--addons/l10n_do/data/account.tax.template.xml2
-rw-r--r--addons/l10n_do/data/account_account_tag_data.xml555
-rw-r--r--addons/l10n_do/data/account_chart_template_data.xml8
-rw-r--r--addons/l10n_do/data/l10n_do_chart_data.xml1
-rw-r--r--addons/l10n_mx/data/account_tax_data.xml16
-rw-r--r--addons/l10n_mx/data/fiscal_position_data.xml100
-rw-r--r--addons/l10n_mx/models/chart_template.py38
-rw-r--r--addons/mail/models/res_partner.py3
-rw-r--r--addons/mail/static/src/js/chatter.js5
-rw-r--r--addons/maintenance/views/maintenance_views.xml2
-rw-r--r--addons/marketing_campaign/models/marketing_campaign.py2
-rw-r--r--addons/mass_mailing/data/mass_mailing_data.xml12
-rw-r--r--addons/mass_mailing/static/src/less/themes/theme_default.less7
-rw-r--r--addons/mass_mailing/views/mass_mailing_views.xml13
-rw-r--r--addons/membership/wizard/membership_invoice.py3
-rw-r--r--addons/mrp/models/stock_move.py2
-rw-r--r--addons/mrp/report/mrp_production_templates.xml3
-rw-r--r--addons/mrp/views/mrp_bom_views.xml2
-rw-r--r--addons/payment/models/account_payment.py4
-rw-r--r--addons/payment/models/payment_acquirer.py6
-rw-r--r--addons/payment_authorize/i18n/payment_authorize.pot19
-rw-r--r--addons/payment_authorize/models/authorize_request.py2
-rw-r--r--addons/payment_authorize/models/payment.py4
-rw-r--r--addons/payment_paypal/views/payment_paypal_templates.xml2
-rw-r--r--addons/payment_sips/__manifest__.py22
-rw-r--r--addons/payment_sips/controllers/main.py2
-rw-r--r--addons/payment_sips/models/payment.py2
-rw-r--r--addons/point_of_sale/i18n/point_of_sale.pot6
-rw-r--r--addons/point_of_sale/models/pos_order.py3
-rw-r--r--addons/point_of_sale/models/pos_session.py6
-rw-r--r--addons/point_of_sale/static/src/js/screens.js1
-rw-r--r--addons/point_of_sale/static/src/xml/pos.xml2
-rw-r--r--addons/point_of_sale/wizard/pos_payment.xml2
-rw-r--r--addons/portal/i18n/portal.pot6
-rw-r--r--addons/portal/wizard/portal_wizard.py2
-rw-r--r--addons/pos_mercury/i18n/pos_mercury.pot26
-rw-r--r--addons/pos_mercury/models/pos_mercury_transaction.py5
-rw-r--r--addons/pos_mercury/static/src/js/pos_mercury.js4
-rw-r--r--addons/product/models/product_attribute.py2
-rw-r--r--addons/product/models/product_uom.py2
-rw-r--r--addons/product/views/product_views.xml6
-rw-r--r--addons/product_margin/views/product_product_views.xml5
-rw-r--r--addons/project/views/project_views.xml2
-rw-r--r--addons/purchase/models/account_invoice.py8
-rw-r--r--addons/purchase/models/purchase.py33
-rw-r--r--addons/purchase/views/purchase_views.xml2
-rw-r--r--addons/purchase_requisition/models/purchase_requisition.py2
-rw-r--r--addons/report/static/src/less/layout_background.less2
-rw-r--r--addons/sale/models/account_invoice.py3
-rw-r--r--addons/sale/models/sale.py2
-rw-r--r--addons/sale/tests/test_sale_order.py2
-rw-r--r--addons/sale_stock/models/stock.py2
-rw-r--r--addons/stock/models/procurement.py2
-rw-r--r--addons/stock/models/product.py6
-rw-r--r--addons/stock/models/stock_incoterms.py2
-rw-r--r--addons/stock/report/report_deliveryslip.xml3
-rw-r--r--addons/stock/views/product_views.xml27
-rw-r--r--addons/stock/views/stock_quant_views.xml2
-rw-r--r--addons/stock_account/models/account_invoice.py4
-rw-r--r--addons/web/static/src/js/views/list_view_editable.js1
-rw-r--r--addons/web/static/src/js/views/pivot_view.js4
-rw-r--r--addons/web_editor/static/src/js/rte.summernote.js7
-rw-r--r--addons/web_editor/static/src/js/snippets.editor.js22
-rw-r--r--addons/web_editor/static/src/js/transcoder.js10
-rw-r--r--addons/website/models/ir_http.py4
-rw-r--r--addons/website/static/src/less/website.snippets.less1
-rw-r--r--addons/website/static/src/less/website.ui.less6
-rw-r--r--addons/website_blog/static/src/js/contentshare.js9
-rw-r--r--addons/website_blog/static/src/js/website_blog.js2
-rw-r--r--addons/website_form/static/src/js/website_form.js12
-rw-r--r--addons/website_mail/controllers/main.py1
-rw-r--r--addons/website_portal_sale/controllers/main.py4
-rw-r--r--addons/website_quote/models/sale_order.py7
-rw-r--r--addons/website_sale/controllers/main.py3
-rw-r--r--addons/website_sale/models/product.py2
-rw-r--r--addons/website_sale/models/sale_order.py9
-rw-r--r--addons/website_sale/static/src/js/website_sale.js1
-rw-r--r--addons/website_sale/views/templates.xml2
-rw-r--r--doc/cla/corporate/acsone.md1
-rw-r--r--doc/cla/corporate/bloopark.md1
-rw-r--r--doc/cla/corporate/eficent.md19
-rw-r--r--doc/cla/corporate/iterativo.md15
-rw-r--r--doc/cla/corporate/landoo.md16
-rw-r--r--doc/cla/corporate/maao.md14
-rw-r--r--doc/cla/corporate/merchise.md21
-rw-r--r--doc/cla/corporate/vauxoo.md4
-rw-r--r--doc/cla/individual/Giuliano69.md11
-rw-r--r--doc/cla/individual/bima_wijaya.md10
-rw-r--r--doc/cla/individual/celm1990.md11
-rw-r--r--doc/cla/individual/sum1201.md11
-rw-r--r--doc/reference/views.rst13
-rw-r--r--doc/setup/install.rst12
-rw-r--r--odoo/addons/base/ir/ir_translation.py3
-rw-r--r--odoo/addons/base/ir/ir_ui_view.py3
-rw-r--r--odoo/addons/base/res/res.country.state.csv2
-rw-r--r--odoo/addons/base/tests/test_translate.py10
-rw-r--r--odoo/models.py2
-rw-r--r--odoo/tools/translate.py53
-rw-r--r--requirements.txt2
139 files changed, 1648 insertions, 550 deletions
diff --git a/addons/account/models/account.py b/addons/account/models/account.py
index 32e90d115eb..718aef311e7 100644
--- a/addons/account/models/account.py
+++ b/addons/account/models/account.py
@@ -464,6 +464,12 @@ class AccountJournal(models.Model):
res += [(journal.id, name)]
return res
+ @api.model
+ def name_search(self, name='', args=None, operator='ilike', limit=100):
+ args = args or []
+ recs = self.search(['|', ('code', operator, name), ('name', operator, name)] + args, limit=limit)
+ return recs.name_get()
+
@api.multi
@api.depends('company_id')
def _belong_to_company(self):
diff --git a/addons/account/models/account_bank_statement.py b/addons/account/models/account_bank_statement.py
index ab7fa0f307f..857ffc3e71d 100644
--- a/addons/account/models/account_bank_statement.py
+++ b/addons/account/models/account_bank_statement.py
@@ -403,8 +403,6 @@ class AccountBankStatementLine(models.Model):
for line in self:
if line.journal_entry_ids.ids:
raise UserError(_('In order to delete a bank statement line, you must first cancel it to delete related journal items.'))
- if line.move_name:
- raise UserError(_('It is not allowed to delete a bank statement line that already created a journal entry since it would create a gap in the numbering. You should create the journal entry again and cancel it thanks to a regular revert.'))
return super(AccountBankStatementLine, self).unlink()
@api.multi
diff --git a/addons/account/models/account_invoice.py b/addons/account/models/account_invoice.py
index 458dfa2f34a..cb013f403db 100644
--- a/addons/account/models/account_invoice.py
+++ b/addons/account/models/account_invoice.py
@@ -481,6 +481,8 @@ class AccountInvoice(models.Model):
payment_term_id = False
fiscal_position = False
bank_id = False
+ warning = {}
+ domain = {}
company_id = self.company_id.id
p = self.partner_id if not company_id else self.partner_id.with_context(force_company=company_id)
type = self.type
@@ -515,7 +517,6 @@ class AccountInvoice(models.Model):
}
if p.invoice_warn == 'block':
self.partner_id = False
- return {'warning': warning}
self.account_id = account_id
self.payment_term_id = payment_term_id
@@ -525,8 +526,14 @@ class AccountInvoice(models.Model):
bank_ids = p.commercial_partner_id.bank_ids
bank_id = bank_ids[0].id if bank_ids else False
self.partner_bank_id = bank_id
- return {'domain': {'partner_bank_id': [('id', 'in', bank_ids.ids)]}}
- return {}
+ domain = {'partner_bank_id': [('id', 'in', bank_ids.ids)]}
+
+ res = {}
+ if warning:
+ res['warning'] = warning
+ if domain:
+ res['domain'] = domain
+ return res
@api.multi
def get_delivery_partner_id(self):
@@ -1019,6 +1026,20 @@ class AccountInvoice(models.Model):
result.append((0, 0, values))
return result
+ def _get_refund_common_fields(self):
+ return ['partner_id', 'payment_term_id', 'account_id', 'currency_id', 'journal_id']
+
+ def _get_refund_prepare_fields(self):
+ return ['name', 'reference', 'comment', 'date_due']
+
+ def _get_refund_modify_read_fields(self):
+ read_fields = ['type', 'number', 'invoice_line_ids', 'tax_line_ids', 'date']
+ return self._get_refund_common_fields() + self._get_refund_prepare_fields() + read_fields
+
+ def _get_refund_copy_fields(self):
+ copy_fields = ['company_id', 'user_id', 'fiscal_position_id']
+ return self._get_refund_common_fields() + self._get_refund_prepare_fields() + copy_fields
+
@api.model
def _prepare_refund(self, invoice, date_invoice=None, date=None, description=None, journal_id=None):
""" Prepare the dict of values to create the new refund from the invoice.
@@ -1034,8 +1055,7 @@ class AccountInvoice(models.Model):
:return: dict of value to create() the refund
"""
values = {}
- for field in ['name', 'reference', 'comment', 'date_due', 'partner_id', 'company_id',
- 'account_id', 'currency_id', 'payment_term_id', 'user_id', 'fiscal_position_id']:
+ for field in self._get_refund_copy_fields():
if invoice._fields[field].type == 'many2one':
values[field] = invoice[field].id
else:
@@ -1369,6 +1389,12 @@ class AccountInvoiceLine(models.Model):
"""
pass
+ @api.multi
+ def unlink(self):
+ if self.filtered(lambda r: r.invoice_id and r.invoice_id.state != 'draft'):
+ raise UserError(_('You can only delete an invoice line if the invoice is in draft state.'))
+ return super(AccountInvoiceLine, self).unlink()
+
class AccountInvoiceTax(models.Model):
_name = "account.invoice.tax"
_description = "Invoice Tax"
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index edd0a547b29..7ab0343ed2c 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -228,8 +228,8 @@ class AccountMove(models.Model):
'date': date,
'journal_id': journal_id.id if journal_id else self.journal_id.id,
'ref': _('reversal of: ') + self.name})
- for acm_line in reversed_move.line_ids:
- acm_line.with_context(check_move_validity=False).write({
+ for acm_line in reversed_move.line_ids.with_context(check_move_validity=False):
+ acm_line.write({
'debit': acm_line.credit,
'credit': acm_line.debit,
'amount_currency': -acm_line.amount_currency
diff --git a/addons/account/models/account_payment.py b/addons/account/models/account_payment.py
index 38c5a2a9380..13705d23ca2 100644
--- a/addons/account/models/account_payment.py
+++ b/addons/account/models/account_payment.py
@@ -52,7 +52,7 @@ class account_abstract_payment(models.AbstractModel):
@api.constrains('amount')
def _check_amount(self):
if not self.amount > 0.0:
- raise ValidationError('The payment amount must be strictly positive.')
+ raise ValidationError(_('The payment amount must be strictly positive.'))
@api.one
@api.depends('payment_type', 'journal_id')
@@ -410,8 +410,16 @@ class account_payment(models.Model):
amount_wo = total_payment_company_signed - total_residual_company_signed
else:
amount_wo = total_residual_company_signed - total_payment_company_signed
- debit_wo = amount_wo > 0 and amount_wo or 0.0
- credit_wo = amount_wo < 0 and -amount_wo or 0.0
+ # Align the sign of the secondary currency writeoff amount with the sign of the writeoff
+ # amount in the company currency
+ if amount_wo > 0:
+ debit_wo = amount_wo
+ credit_wo = 0.0
+ amount_currency_wo = abs(amount_currency_wo)
+ else:
+ debit_wo = 0.0
+ credit_wo = -amount_wo
+ amount_currency_wo = -abs(amount_currency_wo)
writeoff_line['name'] = self.writeoff_label
writeoff_line['account_id'] = self.writeoff_account_id.id
writeoff_line['debit'] = debit_wo
diff --git a/addons/account/static/src/js/account_payment_widget.js b/addons/account/static/src/js/account_payment_widget.js
index a7f2b64c413..2c9e947d32a 100644
--- a/addons/account/static/src/js/account_payment_widget.js
+++ b/addons/account/static/src/js/account_payment_widget.js
@@ -7,6 +7,7 @@ var formats = require('web.formats');
var Model = require('web.Model');
var QWeb = core.qweb;
+var _t = core._t;
var ShowPaymentLineWidget = form_common.AbstractField.extend({
render_value: function() {
@@ -49,7 +50,7 @@ var ShowPaymentLineWidget = form_common.AbstractField.extend({
}),
'html': true,
'placement': 'left',
- 'title': 'Payment Information',
+ 'title': _t('Payment Information'),
'trigger': 'focus',
'delay': { "show": 0, "hide": 100 },
};
@@ -89,4 +90,4 @@ var ShowPaymentLineWidget = form_common.AbstractField.extend({
core.form_widget_registry.add('payment', ShowPaymentLineWidget);
-}); \ No newline at end of file
+});
diff --git a/addons/account/views/account_invoice_view.xml b/addons/account/views/account_invoice_view.xml
index 41f7de14856..35a95b5d45e 100644
--- a/addons/account/views/account_invoice_view.xml
+++ b/addons/account/views/account_invoice_view.xml
@@ -321,7 +321,7 @@
<field domain="[('company_id', '=', company_id), ('internal_type', '=', 'payable'), ('deprecated', '=', False)]"
name="account_id" groups="account.group_account_manager"/>
<field name="name" invisible="1"/>
- <field name="payment_term_id" options="{'no_create': True}" attrs="{'invisible': [('payment_term_id','=',False)]}"/>
+ <field name="payment_term_id" options="{'no_create': True}"/>
</group>
<group>
<field name="fiscal_position_id" options="{'no_create': True}" placeholder="Auto-detect"/>
diff --git a/addons/account/views/account_view.xml b/addons/account/views/account_view.xml
index fb34e891b0b..c880899b0fa 100644
--- a/addons/account/views/account_view.xml
+++ b/addons/account/views/account_view.xml
@@ -141,7 +141,7 @@
id="account.action_all_partner_invoices"
name="All Invoices"
res_model="account.invoice"
- domain="[('partner_id', '=', active_id)]"
+ domain="[('partner_id', 'child_of', active_id)]"
src_model="res.partner"/>
<act_window
@@ -210,6 +210,7 @@
<record id="view_account_journal_tree" model="ir.ui.view">
<field name="name">account.journal.tree</field>
<field name="model">account.journal</field>
+ <field name="priority">1</field>
<field name="arch" type="xml">
<tree string="Account Journal">
<field name='sequence' widget='handle'/>
diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py
index bea13ffbf35..c449bbfcb6b 100644
--- a/addons/account/wizard/account_invoice_refund.py
+++ b/addons/account/wizard/account_invoice_refund.py
@@ -76,13 +76,7 @@ class AccountInvoiceRefund(models.TransientModel):
to_reconcile_lines += tmpline
to_reconcile_lines.filtered(lambda l: l.reconciled == False).reconcile()
if mode == 'modify':
- invoice = inv.read(
- ['name', 'type', 'number', 'reference',
- 'comment', 'date_due', 'partner_id',
- 'partner_insite', 'partner_contact',
- 'partner_ref', 'payment_term_id', 'account_id',
- 'currency_id', 'invoice_line_ids', 'tax_line_ids',
- 'journal_id', 'date'])
+ invoice = inv.read(inv_obj._get_refund_modify_read_fields())
invoice = invoice[0]
del invoice['id']
invoice_lines = inv_line_obj.browse(invoice['invoice_line_ids'])
@@ -100,9 +94,11 @@ class AccountInvoiceRefund(models.TransientModel):
'origin': inv.origin,
'fiscal_position_id': inv.fiscal_position_id.id,
})
- for field in ('partner_id', 'account_id', 'currency_id',
- 'payment_term_id', 'journal_id'):
+ for field in inv_obj._get_refund_common_fields():
+ if inv_obj._fields[field].type == 'many2one':
invoice[field] = invoice[field] and invoice[field][0]
+ else:
+ invoice[field] = invoice[field] or False
inv_refund = inv_obj.create(invoice)
if inv_refund.payment_term_id.id:
inv_refund._onchange_payment_term_date_invoice()
diff --git a/addons/account_bank_statement_import/account_bank_statement_import.py b/addons/account_bank_statement_import/account_bank_statement_import.py
index 2d45a95612d..07ab4c7dc6e 100644
--- a/addons/account_bank_statement_import/account_bank_statement_import.py
+++ b/addons/account_bank_statement_import/account_bank_statement_import.py
@@ -43,6 +43,8 @@ class AccountBankStatementImport(models.TransientModel):
if not journal:
# The active_id is passed in context so the wizard can call import_file again once the journal is created
return self.with_context(active_id=self.ids[0])._journal_creation_wizard(currency, account_number)
+ if not journal.default_debit_account_id or not journal.default_credit_account_id:
+ raise UserError(_('You have to set a Default Debit Account and a Default Credit Account for the journal: %s') % (journal.name,))
# Prepare statement data to be used for bank statements creation
stmts_vals = self._complete_stmts_vals(stmts_vals, journal, account_number)
# Create the bank statements
@@ -220,6 +222,9 @@ class AccountBankStatementImport(models.TransientModel):
filtered_st_lines.append(line_vals)
else:
ignored_statement_lines_import_ids.append(line_vals['unique_import_id'])
+ if 'balance_start' in st_vals:
+ st_vals['balance_start'] += line_vals['amount']
+
if len(filtered_st_lines) > 0:
# Remove values that won't be used to create records
st_vals.pop('transactions', None)
diff --git a/addons/account_bank_statement_import/i18n/account_bank_statement_import.pot b/addons/account_bank_statement_import/i18n/account_bank_statement_import.pot
index 43cc6e38d59..32c6952c711 100644
--- a/addons/account_bank_statement_import/i18n/account_bank_statement_import.pot
+++ b/addons/account_bank_statement_import/i18n/account_bank_statement_import.pot
@@ -469,6 +469,12 @@ msgid "You have already imported that file."
msgstr ""
#. module: account_bank_statement_import
+#: code:addons/account_bank_statement_import/account_bank_statement_import.py:47
+#, python-format
+msgid "You have to set a Default Debit Account and a Default Credit Account for the journal: %s"
+msgstr ""
+
+#. module: account_bank_statement_import
#: model:ir.ui.view,arch_db:account_bank_statement_import.account_bank_statement_import_view
msgid "_Import"
msgstr ""
diff --git a/addons/account_check_printing/models/account_payment.py b/addons/account_check_printing/models/account_payment.py
index 13b9e39cb22..ef33dc05ae4 100644
--- a/addons/account_check_printing/models/account_payment.py
+++ b/addons/account_check_printing/models/account_payment.py
@@ -29,13 +29,7 @@ class AccountRegisterPayments(models.TransientModel):
def _onchange_amount(self):
if hasattr(super(AccountRegisterPayments, self), '_onchange_amount'):
super(AccountRegisterPayments, self)._onchange_amount()
- # TODO: merge, refactor and complete the amount_to_text and amount_to_text_en classes
- check_amount_in_words = amount_to_text_en.amount_to_text(math.floor(self.amount), lang='en', currency='')
- check_amount_in_words = check_amount_in_words.replace(' and Zero Cent', '') # Ugh
- decimals = self.amount % 1
- if decimals >= 10**-2:
- check_amount_in_words += _(' and %s/100') % str(int(round(float_round(decimals*100, precision_rounding=1))))
- self.check_amount_in_words = check_amount_in_words
+ self.check_amount_in_words = self.env['account.payment']._get_check_amount_in_words(self.amount)
def get_payment_vals(self):
res = super(AccountRegisterPayments, self).get_payment_vals()
@@ -56,6 +50,15 @@ class AccountPayment(models.Model):
help="The selected journal is configured to print check numbers. If your pre-printed check paper already has numbers "
"or if the current numbering is wrong, you can change it in the journal configuration page.")
+ def _get_check_amount_in_words(self, amount):
+ # TODO: merge, refactor and complete the amount_to_text and amount_to_text_en classes
+ check_amount_in_words = amount_to_text_en.amount_to_text(math.floor(amount), lang='en', currency='')
+ check_amount_in_words = check_amount_in_words.replace(' and Zero Cent', '') # Ugh
+ decimals = amount % 1
+ if decimals >= 10**-2:
+ check_amount_in_words += _(' and %s/100') % str(int(round(float_round(decimals*100, precision_rounding=1))))
+ return check_amount_in_words
+
@api.onchange('journal_id')
def _onchange_journal_id(self):
if hasattr(super(AccountPayment, self), '_onchange_journal_id'):
@@ -67,12 +70,7 @@ class AccountPayment(models.Model):
def _onchange_amount(self):
if hasattr(super(AccountPayment, self), '_onchange_amount'):
super(AccountPayment, self)._onchange_amount()
- check_amount_in_words = amount_to_text_en.amount_to_text(math.floor(self.amount), lang='en', currency='')
- check_amount_in_words = check_amount_in_words.replace(' and Zero Cent', '') # Ugh
- decimals = self.amount % 1
- if decimals >= 10**-2:
- check_amount_in_words += _(' and %s/100') % str(int(round(float_round(decimals*100, precision_rounding=1))))
- self.check_amount_in_words = check_amount_in_words
+ self.check_amount_in_words = self._get_check_amount_in_words(self.amount)
def _check_communication(self, payment_method_id, communication):
super(AccountPayment, self)._check_communication(payment_method_id, communication)
diff --git a/addons/analytic/views/analytic_account_views.xml b/addons/analytic/views/analytic_account_views.xml
index f061e1c5133..b6269c89ca3 100644
--- a/addons/analytic/views/analytic_account_views.xml
+++ b/addons/analytic/views/analytic_account_views.xml
@@ -51,7 +51,7 @@
</record>
<record model="ir.actions.act_window" id="account_analytic_line_action">
- <field name="context">{'search_default_group_date': 1, 'search_default_group_journal': 1, 'default_account_id': active_id}</field>
+ <field name="context">{'search_default_group_date': 1, 'default_account_id': active_id}</field>
<field name="domain">[('account_id','=', active_id)]</field>
<field name="name">Costs &amp; Revenues</field>
<field name="res_model">account.analytic.line</field>
diff --git a/addons/barcodes/models/barcodes.py b/addons/barcodes/models/barcodes.py
index 08482581bb5..6c3d228895e 100644
--- a/addons/barcodes/models/barcodes.py
+++ b/addons/barcodes/models/barcodes.py
@@ -44,8 +44,8 @@ class BarcodeNomenclature(models.Model):
if len(code) != 8:
return -1
- sum1 = ean[1] + ean[3] + ean[5]
- sum2 = ean[0] + ean[2] + ean[4] + ean[6]
+ sum1 = int(ean[1]) + int(ean[3]) + int(ean[5])
+ sum2 = int(ean[0]) + int(ean[2]) + int(ean[4]) + int(ean[6])
total = sum1 + 3 * sum2
return int((10 - total % 10) % 10)
diff --git a/addons/barcodes/tests/__init__.py b/addons/barcodes/tests/__init__.py
new file mode 100644
index 00000000000..6188e48fb99
--- /dev/null
+++ b/addons/barcodes/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_barcode_nomenclature
diff --git a/addons/barcodes/tests/test_barcode_nomenclature.py b/addons/barcodes/tests/test_barcode_nomenclature.py
new file mode 100644
index 00000000000..d3ef2903d79
--- /dev/null
+++ b/addons/barcodes/tests/test_barcode_nomenclature.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+from odoo.tests import common
+
+
+class TestBarcodeNomenclature(common.TransactionCase):
+
+ def test_ean8_checksum(self):
+ barcode_nomenclature = self.env['barcode.nomenclature']
+ ean8 = "87111125"
+ checksum = barcode_nomenclature.ean8_checksum(ean8)
+ self.assertEqual(checksum, int(ean8[-1]))
+ checksum = barcode_nomenclature.ean8_checksum("8711112")
+ self.assertEqual(checksum, -1)
+ checksum = barcode_nomenclature.ean8_checksum("871111256")
+ self.assertEqual(checksum, -1)
diff --git a/addons/base_vat/models/res_partner.py b/addons/base_vat/models/res_partner.py
index 1d051bcfd82..4eed2ef8472 100644
--- a/addons/base_vat/models/res_partner.py
+++ b/addons/base_vat/models/res_partner.py
@@ -223,10 +223,14 @@ class ResPartner(models.Model):
return True
# Norway VAT validation, contributed by Rolv Råen (adEgo) <rora@adego.no>
+ # Support for MVA suffix contributed by Bringsvor Consulting AS (bringsvor@bringsvor.com)
def check_vat_no(self, vat):
- '''
+ """
Check Norway VAT number.See http://www.brreg.no/english/coordination/number.html
- '''
+ """
+ if len(vat) == 12 and vat.upper().endswith('MVA'):
+ vat = vat[:-3] # Strictly speaking we should enforce the suffix MVA but...
+
if len(vat) != 9:
return False
try:
diff --git a/addons/board/static/src/less/dashboard.less b/addons/board/static/src/less/dashboard.less
index 36f0727c0ac..b0b41e65e34 100644
--- a/addons/board/static/src/less/dashboard.less
+++ b/addons/board/static/src/less/dashboard.less
@@ -139,4 +139,5 @@
// Favorites menu in control panel
.o_add_to_dashboard {
display: none; // hidden by default
+ .o-search-options-dropdown-custom-li;
}
diff --git a/addons/calendar/models/mail_message.py b/addons/calendar/models/mail_message.py
index df6810ebbf3..4d5c15ead18 100644
--- a/addons/calendar/models/mail_message.py
+++ b/addons/calendar/models/mail_message.py
@@ -25,7 +25,7 @@ class Message(models.Model):
@api.model
def _find_allowed_model_wise(self, doc_model, doc_dict):
if doc_model == 'calendar.event':
- order = self._context.get('order', self._order)
+ order = self._context.get('order', self.env[doc_model]._order)
for virtual_id in self.env[doc_model].browse(doc_dict.keys()).get_recurrent_ids([], order=order):
doc_dict.setdefault(virtual_id, doc_dict[get_real_ids(virtual_id)])
return super(Message, self)._find_allowed_model_wise(doc_model, doc_dict)
diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py
index 49d2738fbef..2d45d6b6801 100644
--- a/addons/crm/models/crm_lead.py
+++ b/addons/crm/models/crm_lead.py
@@ -99,7 +99,7 @@ class Lead(models.Model):
user_id = fields.Many2one('res.users', string='Salesperson', index=True, track_visibility='onchange', default=lambda self: self.env.user)
referred = fields.Char('Referred By')
- date_open = fields.Datetime('Assigned', readonly=True)
+ date_open = fields.Datetime('Assigned', readonly=True, default=fields.Datetime.now)
day_open = fields.Float(compute='_compute_day_open', string='Days to Assign', store=True)
day_close = fields.Float(compute='_compute_day_close', string='Days to Close', store=True)
date_last_stage_update = fields.Datetime(string='Last Stage Update', index=True, default=fields.Datetime.now)
@@ -690,7 +690,7 @@ class Lead(models.Model):
email_split = tools.email_split(self.email_from)
values = {
'name': name,
- 'user_id': self.user_id.id,
+ 'user_id': self.env.context.get('default_user_id') or self.user_id.id,
'comment': self.description,
'team_id': self.team_id.id,
'parent_id': parent_id,
@@ -896,29 +896,30 @@ class Lead(models.Model):
'nb_opportunities': 0,
}
- opportunities = self.search([('type', '=', 'opportunity'), ('user_id', '=', self._uid), ('activity_date_deadline', '!=', False)])
+ opportunities = self.search([('type', '=', 'opportunity'), ('user_id', '=', self._uid)])
for opp in opportunities:
# Expected closing
- if opp.date_deadline:
- date_deadline = fields.Date.from_string(opp.date_deadline)
- if date_deadline == date.today():
- result['closing']['today'] += 1
- if date.today() <= date_deadline <= date.today() + timedelta(days=7):
- result['closing']['next_7_days'] += 1
- if date_deadline < date.today():
- result['closing']['overdue'] += 1
- # Next activities
- for activity in opp.activity_ids:
- date_deadline = fields.Date.from_string(activity.date_deadline)
- if date_deadline == date.today():
- result['activity']['today'] += 1
- if date.today() <= date_deadline <= date.today() + timedelta(days=7):
- result['activity']['next_7_days'] += 1
- if date_deadline < date.today():
- result['activity']['overdue'] += 1
+ if opp.activity_date_deadline:
+ if opp.date_deadline:
+ date_deadline = fields.Date.from_string(opp.date_deadline)
+ if date_deadline == date.today():
+ result['closing']['today'] += 1
+ if date.today() <= date_deadline <= date.today() + timedelta(days=7):
+ result['closing']['next_7_days'] += 1
+ if date_deadline < date.today() and not opp.date_closed:
+ result['closing']['overdue'] += 1
+ # Next activities
+ for activity in opp.activity_ids:
+ date_deadline = fields.Date.from_string(activity.date_deadline)
+ if date_deadline == date.today():
+ result['activity']['today'] += 1
+ if date.today() <= date_deadline <= date.today() + timedelta(days=7):
+ result['activity']['next_7_days'] += 1
+ if date_deadline < date.today():
+ result['activity']['overdue'] += 1
# Won in Opportunities
- if opp.date_closed:
+ if opp.date_closed and opp.stage_id.probability == 100:
date_closed = fields.Date.from_string(opp.date_closed)
if date.today().replace(day=1) <= date_closed <= date.today():
if opp.planned_revenue:
diff --git a/addons/crm/models/res_config.py b/addons/crm/models/res_config.py
index b3bed2ba043..49f901b4140 100644
--- a/addons/crm/models/res_config.py
+++ b/addons/crm/models/res_config.py
@@ -59,7 +59,10 @@ class CRMSettings(models.TransientModel):
@api.onchange('default_generate_lead_from_alias')
def _onchange_default_generate_lead_from_alias(self):
- self.alias_prefix = 'info' if self.default_generate_lead_from_alias else False
+ if self.default_generate_lead_from_alias:
+ self.alias_prefix = self.alias_prefix or 'info'
+ else:
+ self.alias_prefix = False
@api.model
def get_default_alias_prefix(self, fields):
diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py
index 4a46498c881..5f7442002a6 100644
--- a/addons/crm/wizard/crm_lead_to_opportunity.py
+++ b/addons/crm/wizard/crm_lead_to_opportunity.py
@@ -95,7 +95,9 @@ class Lead2OpportunityPartner(models.TransientModel):
leads = self.env['crm.lead'].browse(vals.get('lead_ids'))
for lead in leads:
- partner_id = self._create_partner(lead.id, self.action, vals.get('partner_id') or lead.partner_id.id)
+ self_def_user = self.with_context(default_user_id=self.user_id.id)
+ partner_id = self_def_user._create_partner(
+ lead.id, self.action, vals.get('partner_id') or lead.partner_id.id)
res = lead.convert_opportunity(partner_id, [], False)
user_ids = vals.get('user_ids')
@@ -135,9 +137,6 @@ class Lead2OpportunityPartner(models.TransientModel):
leads = self.env['crm.lead'].browse(self._context.get('active_ids', []))
values.update({'lead_ids': leads.ids, 'user_ids': [self.user_id.id]})
self._convert_opportunity(values)
- for lead in leads:
- if lead.partner_id and lead.partner_id.user_id != lead.user_id:
- self.env['res.partner'].browse(lead.partner_id.id).write({'user_id': lead.user_id.id})
return leads[0].redirect_opportunity_view()
diff --git a/addons/hr_expense/views/hr_expense_views.xml b/addons/hr_expense/views/hr_expense_views.xml
index 0fc37dd778f..efed47fd890 100644
--- a/addons/hr_expense/views/hr_expense_views.xml
+++ b/addons/hr_expense/views/hr_expense_views.xml
@@ -461,7 +461,6 @@
<field name="state" invisible="1"/>
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
<field name="message_unread" invisible="1"/>
- <field name="attachment_number" invisible="1"/>
<field name="attachment_number" string=" "/>
<button name="action_get_attachment_view" string="View Attachments" type="object" icon="fa-paperclip"/>
<field name="tax_ids" widget="many2many_tags"/>
diff --git a/addons/hr_expense/wizard/hr_expense_register_payment.py b/addons/hr_expense/wizard/hr_expense_register_payment.py
index c8677b3bc35..b608b234144 100644
--- a/addons/hr_expense/wizard/hr_expense_register_payment.py
+++ b/addons/hr_expense/wizard/hr_expense_register_payment.py
@@ -32,7 +32,7 @@ class HrExpenseRegisterPaymentWizard(models.TransientModel):
@api.constrains('amount')
def _check_amount(self):
if not self.amount > 0.0:
- raise ValidationError('The payment amount must be strictly positive.')
+ raise ValidationError(_('The payment amount must be strictly positive.'))
@api.one
@api.depends('journal_id')
diff --git a/addons/hr_expense_check/__init__.py b/addons/hr_expense_check/__init__.py
new file mode 100644
index 00000000000..bff786c0885
--- /dev/null
+++ b/addons/hr_expense_check/__init__.py
@@ -0,0 +1 @@
+import models
diff --git a/addons/hr_expense_check/__manifest__.py b/addons/hr_expense_check/__manifest__.py
new file mode 100644
index 00000000000..90320ac6f64
--- /dev/null
+++ b/addons/hr_expense_check/__manifest__.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Check Printing in Expenses",
+ 'summary': """Print amount in words on checks issued for expenses""",
+ 'category': 'Accounting',
+ 'description': """
+ Print amount in words on checks issued for expenses
+ """,
+ 'category': 'Accounting &amp; Finance',
+ 'version': '1.0',
+ 'depends': ['account_check_printing', 'hr_expense'],
+ 'auto_install': True,
+ 'data': [
+ 'views/payment.xml',
+ ],
+}
diff --git a/addons/hr_expense_check/models/__init__.py b/addons/hr_expense_check/models/__init__.py
new file mode 100644
index 00000000000..d33d6b388d7
--- /dev/null
+++ b/addons/hr_expense_check/models/__init__.py
@@ -0,0 +1 @@
+import payment
diff --git a/addons/hr_expense_check/models/payment.py b/addons/hr_expense_check/models/payment.py
new file mode 100644
index 00000000000..e5041d05dc9
--- /dev/null
+++ b/addons/hr_expense_check/models/payment.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+from odoo import models, fields, api
+
+
+class HrExpenseRegisterPaymentWizard(models.TransientModel):
+ _inherit = "hr.expense.register.payment.wizard"
+
+ check_amount_in_words = fields.Char(string="Amount in Words")
+ check_manual_sequencing = fields.Boolean(related='journal_id.check_manual_sequencing')
+ # Note: a check_number == 0 means that it will be attributed when the check is printed
+ check_number = fields.Integer(string="Check Number", readonly=True, copy=False, default=0,
+ help="Number of the check corresponding to this payment. If your pre-printed check are not already numbered, "
+ "you can manage the numbering in the journal configuration page.")
+ payment_method_code_2 = fields.Char(related='payment_method_id.code',
+ help="Technical field used to adapt the interface to the payment type selected.",
+ readonly=True)
+
+ @api.onchange('journal_id')
+ def _onchange_journal_id(self):
+ if hasattr(super(HrExpenseRegisterPaymentWizard, self), '_onchange_journal_id'):
+ super(HrExpenseRegisterPaymentWizard, self)._onchange_journal_id()
+ if self.journal_id.check_manual_sequencing:
+ self.check_number = self.journal_id.check_sequence_id.number_next_actual
+
+ @api.onchange('amount')
+ def _onchange_amount(self):
+ if hasattr(super(HrExpenseRegisterPaymentWizard, self), '_onchange_amount'):
+ super(HrExpenseRegisterPaymentWizard, self)._onchange_amount()
+ self.check_amount_in_words = self.env['account.payment']._get_check_amount_in_words(self.amount)
+
+ def get_payment_vals(self):
+ res = super(HrExpenseRegisterPaymentWizard, self).get_payment_vals()
+ if self.payment_method_id == self.env.ref('account_check_printing.account_payment_method_check'):
+ res.update({
+ 'check_amount_in_words': self.check_amount_in_words,
+ 'check_manual_sequencing': self.check_manual_sequencing,
+ })
+ return res
diff --git a/addons/hr_expense_check/views/payment.xml b/addons/hr_expense_check/views/payment.xml
new file mode 100644
index 00000000000..8f1ce4981a6
--- /dev/null
+++ b/addons/hr_expense_check/views/payment.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data>
+ <record id="hr_expense_register_payment_view_form_check_inherit" model="ir.ui.view">
+ <field name="name">hr.expense.register.payment.wizard.form.check.inherited</field>
+ <field name="model">hr.expense.register.payment.wizard</field>
+ <field name="inherit_id" ref="hr_expense.hr_expense_register_payment_view_form" />
+ <field name="arch" type="xml">
+ <xpath expr="//div[@name='amount_div']" position="after">
+ <field name="check_amount_in_words" attrs="{'invisible': [('payment_method_code_2', '!=', 'check_printing')]}" groups="base.group_no_one"/>
+ </xpath>
+ <xpath expr="//field[@name='communication']" position="after">
+ <field name="payment_method_code_2" invisible="1"/>
+ <field name="check_manual_sequencing" invisible="1"/>
+ <field name="check_number" attrs="{'invisible': ['|', ('payment_method_code_2', '!=', 'check_printing'), ('check_manual_sequencing', '=', False)]}"/>
+ </xpath>
+ </field>
+ </record>
+</data>
diff --git a/addons/hr_holidays/controllers/main.py b/addons/hr_holidays/controllers/main.py
index bc517b71476..3b0b5ee1b0d 100644
--- a/addons/hr_holidays/controllers/main.py
+++ b/addons/hr_holidays/controllers/main.py
@@ -12,7 +12,7 @@ class HrHolidaysController(http.Controller):
comparison, record, redirect = MailController._check_token_and_record_or_redirect('hr.holidays', int(res_id), token)
if comparison and record:
try:
- record.action_validate()
+ record.action_approve()
except Exception:
return MailController._redirect_to_messaging()
return redirect
diff --git a/addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot b/addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot
index a8fea75234e..2b71d25a60a 100644
--- a/addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot
+++ b/addons/hr_timesheet_sheet/i18n/hr_timesheet_sheet.pot
@@ -467,6 +467,13 @@ msgid "You cannot duplicate a timesheet."
msgstr ""
#. module: hr_timesheet_sheet
+#: code:addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py:85
+#, python-format
+msgid "You cannot have 2 timesheets that overlap!\n"
+"Please use the menu 'My Current Timesheet' to avoid this problem."
+msgstr ""
+
+#. module: hr_timesheet_sheet
#: code:addons/hr_timesheet_sheet/models/account_analytic_line.py:60
#, python-format
msgid "You cannot modify an entry in a confirmed timesheet."
diff --git a/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py
index cc94bd6aec5..4b65828897c 100644
--- a/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/models/hr_timesheet_sheet.py
@@ -85,7 +85,7 @@ class HrTimesheetSheet(models.Model):
AND id <> %s''',
(sheet.date_to, sheet.date_from, new_user_id, sheet.id))
if any(self.env.cr.fetchall()):
- raise ValidationError('You cannot have 2 timesheets that overlap!\nPlease use the menu \'My Current Timesheet\' to avoid this problem.')
+ raise ValidationError(_('You cannot have 2 timesheets that overlap!\nPlease use the menu \'My Current Timesheet\' to avoid this problem.'))
@api.onchange('employee_id')
def onchange_employee_id(self):
diff --git a/addons/l10n_be_invoice_bba/i18n/l10n_be_invoice_bba.pot b/addons/l10n_be_invoice_bba/i18n/l10n_be_invoice_bba.pot
index 3c6a42e32e4..b3d5a858448 100644
--- a/addons/l10n_be_invoice_bba/i18n/l10n_be_invoice_bba.pot
+++ b/addons/l10n_be_invoice_bba/i18n/l10n_be_invoice_bba.pot
@@ -44,6 +44,8 @@ msgstr ""
#. module: l10n_be_invoice_bba
#: constraint:account.invoice:0
+#: code:addons/l10n_be_invoice_bba/models/account_invoice.py:34
+#, python-format
msgid "Invalid BBA Structured Communication !"
msgstr ""
diff --git a/addons/l10n_be_invoice_bba/models/account_invoice.py b/addons/l10n_be_invoice_bba/models/account_invoice.py
index b477cde7d10..d65d655268f 100644
--- a/addons/l10n_be_invoice_bba/models/account_invoice.py
+++ b/addons/l10n_be_invoice_bba/models/account_invoice.py
@@ -34,7 +34,7 @@ class AccountInvoice(models.Model):
def _check_communication(self):
for inv in self:
if inv.reference_type == 'bba' and not self.check_bbacomm(inv.reference):
- raise ValidationError('Invalid BBA Structured Communication !')
+ raise ValidationError(_('Invalid BBA Structured Communication !'))
def check_bbacomm(self, val):
supported_chars = '0-9+*/ '
diff --git a/addons/l10n_cn/__manifest__.py b/addons/l10n_cn/__manifest__.py
index 02b2fcb1551..80c479ba517 100644
--- a/addons/l10n_cn/__manifest__.py
+++ b/addons/l10n_cn/__manifest__.py
@@ -27,5 +27,4 @@
'data/res_country_state_data.xml',
'data/account_account_type_data.xml',
],
- 'license': 'GPL-3',
}
diff --git a/addons/l10n_cn_small_business/__manifest__.py b/addons/l10n_cn_small_business/__manifest__.py
index 1e45d2de892..c5e504f2da7 100644
--- a/addons/l10n_cn_small_business/__manifest__.py
+++ b/addons/l10n_cn_small_business/__manifest__.py
@@ -27,5 +27,4 @@
'data/l10n_cn_small_business_chart_data.xml',
'data/account_chart_template_data.yml',
],
- 'license': 'GPL-3',
}
diff --git a/addons/l10n_cn_small_business/data/l10n_cn_small_business_chart_data.xml b/addons/l10n_cn_small_business/data/l10n_cn_small_business_chart_data.xml
index 1bb56ba6c77..370ef50f5dc 100644
--- a/addons/l10n_cn_small_business/data/l10n_cn_small_business_chart_data.xml
+++ b/addons/l10n_cn_small_business/data/l10n_cn_small_business_chart_data.xml
@@ -550,7 +550,7 @@ http://kjs.mof.gov.cn/zhengwuxinxi/zhengcefabu/201111/t20111107_605525.html
<!-- Account Tax Tags-->
<record id="tax_tag1" model="account.account.tag">
- <field name="name">17%的增值税销项税</field>
+ <field name="name">增值税17%销项税</field>
</record>
<record id="tax_tag2" model="account.account.tag">
<field name="name">增值税17%进项税</field>
@@ -559,8 +559,8 @@ http://kjs.mof.gov.cn/zhengwuxinxi/zhengcefabu/201111/t20111107_605525.html
<!-- 增值税 -->
<record id="vats_small_business" model="account.tax.template">
<field name="chart_template_id" ref="l10n_chart_china_small_business"/>
- <field name="name">17%的增值税销项税 - 中国小企业会计科目表</field>
- <field name="description">17%的增值税销项税</field>
+ <field name="name">增值税17%销项税 - 中国小企业会计科目表</field>
+ <field name="description">增值税17%销项税</field>
<field eval="17" name="amount"/>
<field name="amount_type">percent</field>
<field name="refund_account_id" ref="small_business_chart2221"/>
diff --git a/addons/l10n_cn_standard/__manifest__.py b/addons/l10n_cn_standard/__manifest__.py
index e29a1a4ecc1..d770d4eaa0f 100644
--- a/addons/l10n_cn_standard/__manifest__.py
+++ b/addons/l10n_cn_standard/__manifest__.py
@@ -36,5 +36,4 @@ Including the following data in the Accounting Standards for Business Enterprise
'data/account_chart_template_data.xml',
'data/account_chart_template_data.yml',
],
- 'license': 'GPL-3',
}
diff --git a/addons/l10n_do/__manifest__.py b/addons/l10n_do/__manifest__.py
index cf4af681219..9aac8992d2e 100644
--- a/addons/l10n_do/__manifest__.py
+++ b/addons/l10n_do/__manifest__.py
@@ -90,9 +90,9 @@ en Odoo):
'data': [
# Basic accounting data
'data/l10n_do_chart_data.xml',
+ 'data/account_account_tag_data.xml',
'data/account.account.template.csv',
'data/account_chart_template_data.xml',
- 'data/account_account_tag_data.xml',
'data/account.tax.template.xml',
# Country States
'data/l10n_do_state_data.xml',
diff --git a/addons/l10n_do/data/account.account.template.csv b/addons/l10n_do/data/account.account.template.csv
index 2879acc2e86..c24b83d6e1d 100644
--- a/addons/l10n_do/data/account.account.template.csv
+++ b/addons/l10n_do/data/account.account.template.csv
@@ -1,254 +1,271 @@
-id,code,name,user_type_id/id,reconcile,chart_template_id/id
-do_niif_11010301,11010301,Depósitos a Corto Plazo,account.data_account_type_liquidity,FALSE,do_chart_template
-do_niif_11020100,11020100,Bonos y Acciones Temporales,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11020200,11020200,Operaciones en Bolsa,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11020300,11020300,Otros Valores Negociables,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11030101,11030101,Cheques Devueltos por Cobrar,account.data_account_type_receivable,TRUE,do_chart_template
-do_niif_11030102,11030102,Intereses por Cobrar,account.data_account_type_receivable,TRUE,do_chart_template
-do_niif_11030201,11030201,Cuenta por Cobrar a Clientes,account.data_account_type_receivable,TRUE,do_chart_template
-do_niif_11030202,11030202,Cuenta por Cobrar a Funcionarios y Empleados,account.data_account_type_receivable,TRUE,do_chart_template
-do_niif_11030203,11030203,Cuenta por Cobrar a Afiliadas,account.data_account_type_receivable,TRUE,do_chart_template
-do_niif_11030204,11030204,Cuenta por Cobrar a Accionistas,account.data_account_type_receivable,TRUE,do_chart_template
-do_niif_11030205,11030205,Otras Cuentas por Cobrar,account.data_account_type_receivable,TRUE,do_chart_template
-do_niif_11040100,11040100,Provisión Incobrables a Clientes,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11040200,11040200,Provisión Incobrables a Funcionarios y Empleados,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11040300,11040300,Provisión Incobrables a Afiliadas,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11040400,11040400,Provisión Incobrables a Accionistas,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11040500,11040500,Provisión Otras Cuentas Incobrables,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11050100,11050100,Inventario de Mercancías o Productos Terminados,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11050200,11050200,Inventario de Materia Prima,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11050300,11050300,Inventario en Tránsito,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11050400,11050400,Materiales y Suministros en Inventario,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11050500,11050500,Combustibles en Inventario,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11060100,11060100,Deterioro Acum. de Inventario en Almacen,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11060200,11060200,Deterioro Acum. de Materiales y Suministros,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11060300,11060300,Deterioro Acum. de Combustibles,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11070100,11070100,Obsolescencia Inventario en Almacen,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11070200,11070200,Obsolescencia Materiales y Suministros,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11070300,11070300,Obsolescencia Combustibles,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11080101,11080101,ITBIS Pagado en Compras Locales,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11080102,11080102,ITBIS Pagado en Servicios Locales,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11080103,11080103,ITBIS Pagado por Importaciones,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11080301,11080301,ITBIS Pagado en Ventas con Tarjeta de Crédito (Norma 08-04),account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11080302,11080302,Saldo a Favor ITBIS,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11080303,11080303,Saldo a Favor ISR,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11090100,11090100,Acciones Temporales,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11090200,11090200,Depósitos a Plazo Temporales,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11090300,11090300,Bonos Temporales,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_11100100,11100100,Gastos Pagados por Anticipado,account.data_account_type_prepayments,FALSE,do_chart_template
-do_niif_11100200,11100200,Renta Pagada por Anticipado,account.data_account_type_prepayments,FALSE,do_chart_template
-do_niif_11100300,11100300,Seguros Pagados por Anticipado,account.data_account_type_prepayments,FALSE,do_chart_template
-do_niif_11100400,11100400,Anticipos ISR,account.data_account_type_prepayments,FALSE,do_chart_template
-do_niif_11100500,11100500,Anticipos Gastos,account.data_account_type_prepayments,FALSE,do_chart_template
-do_niif_12010101,12010101,Terrenos,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12010102,12010102,Edificaciones,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12010201,12010201,Equipo de Transporte,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12010202,12010202,Mobiliario y Equipos,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12010301,12010301,Maquinaria,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12010302,12010302,Herramientas,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12010303,12010303,Instalaciones,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12010304,12010304,Misceláneos u otros activos,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12020100,12020100,Depreciación Acum. de Edificios,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12020200,12020200,Depreciación Acum. de Equipo de Transporte,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12020300,12020300,Depreciación Acum. de Mobiliario y Equipos,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12020400,12020400,Depreciación Acum. de Maquinaria,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12020500,12020500,Depreciación Acum. de Herramientas,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12020600,12020600,Depreciación Acum. de Instalaciones,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12040100,12040100,Marcas y Patentes,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12040200,12040200,Programas Informáticos,account.data_account_type_fixed_assets,FALSE,do_chart_template
-do_niif_12050100,12050100,Edificios y Locales Arrendados,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_12050200,12050200,Maquinaria y Equipo Arrendados,account.data_account_type_current_assets,FALSE,do_chart_template
-do_niif_12050300,12050300,Instalaciones Arrendadas,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12060100,12060100,Depreciación Acum. Edificios y Locales,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12060200,12060200,Depreciación Acum. Maquinaria y Equipo,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12060300,12060300,Depreciación Acum. Instalaciones,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12070100,12070100,Deterioro Valor Acum. Edificios y Locales,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12070200,12070200,Deterioro Valor Acum. Maquinaria y Equipo,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12070300,12070300,Deterioro Valor Acum. Instalaciones,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12080100,12080100,Acciones en otras sociedades,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12090100,12090100,Diferencias temporales deducibles,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12090200,12090200,Gastos Organizacionales Diferidos,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_12090300,12090300,ISR Deducible,account.data_account_type_non_current_assets,FALSE,do_chart_template
-do_niif_21010100,21010100,Préstamos Bancarios por Pagar,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21010200,21010200,Cuenta por Pagar Proveedores Locales,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21010300,21010300,Cuenta por Pagar Proveedores del Exterior,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21010400,21010400,Nóminas por Pagar,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21010500,21010500,Intereses por Pagar,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21010600,21010600,Otras Cuentas por Pagar,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21020100,21020100,Dividendos por Pagar,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21020200,21020200,Comisiones por Pagar,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21020300,21020300,Bonificaciones por Pagar,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21020400,21020400,Regalía Pascual por Pagar,account.data_account_type_payable,TRUE,do_chart_template
-do_niif_21030101,21030101,ITBIS por Venta Servicios,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030102,21030102,ITBIS por Venta Bienes,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030103,21030103,ITBIS por Venta Bienes - al Exterior,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030201,21030201,ITBIS Retenido Persona Jurídica (N 02-05),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030202,21030202,ITBIS Retenido Persona Física (R 293-11),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030203,21030203,ITBIS Retenido a Entidades No Lucrativas (N 01-2011),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030204,21030204,ITBIS Retenido por Servicios Profesionales Liberales (N 02-05),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030205,21030205,ITBIS Retenido a Proveedores Informales de Bienes (N 08-10),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030301,21030301,ISR Retenido por Honorarios Profesionales de Personas Físicas,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030302,21030302,ISR Retenido por Alquileres Pagados a Personas Físicas,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030303,21030303,ISR Retenido por Dividendos Pagados,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030304,21030304,ISR Retenido por Intereses Pagados al Exterior,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030305,21030305,ISR Retenido por Intereses Pagados,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030306,21030306,ISR Retenido por Transferencias de Títulos y Propiedades,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030307,21030307,ISR Retenido por Remesas al Exterior (Ley 253-12),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030308,21030308,Otras Retenciones (N 07-07),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030309,21030309,Otras Retenciones,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030401,21030401,Retención de Seguro Familiar de Salud (SFS),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030402,21030402,"Seguro de vejez, Discapacidad y Sobre Vivencia (AFP)",account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030404,21030404,Impuesto al Salario (ISR),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030501,21030501,ISR por Pagar,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030502,21030502,Anticipos ISR por Pagar,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030503,21030503,Seguro de Riesgo Laboral (SRL),account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030504,21030504,INFOTEP,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21030505,21030505,Otros Impuestos por Pagar,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21040100,21040100,Provisión Pago Alquileres,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21040200,21040200,Provisión Arrendamiento Financiero,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21040300,21040300,Provisión Gastos Fijos,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21050100,21050100,Tarjeta de Crédito Empresarial,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_21050200,21050200,Prima de Tarjetas de Crédito,account.data_account_type_current_liabilities,FALSE,do_chart_template
-do_niif_22010100,22010100,Préstamos Bancarios Largo Plazo,account.data_account_type_non_current_liabilities,FALSE,do_chart_template
-do_niif_22010200,22010200,Préstamos Hipotecarios LP,account.data_account_type_non_current_liabilities,FALSE,do_chart_template
-do_niif_22012300,22012300,Otros Préstamos LP,account.data_account_type_non_current_liabilities,FALSE,do_chart_template
-do_niif_22020100,22020100,Provisión Beneficios de Empleados LP,account.data_account_type_non_current_liabilities,FALSE,do_chart_template
-do_niif_22020200,22020200,Provisión Prestaciones Laborales,account.data_account_type_non_current_liabilities,FALSE,do_chart_template
-do_niif_22020300,22020300,Provisión Indemnizaciones,account.data_account_type_non_current_liabilities,FALSE,do_chart_template
-do_niif_22030100,22030100,Anticipos de Clientes,account.data_account_type_non_current_liabilities,FALSE,do_chart_template
-do_niif_22030200,22030200,Garantías de Clientes,account.data_account_type_non_current_liabilities,FALSE,do_chart_template
-do_niif_22040100,22040100,Provisión Arrendamiento Financiero LP,account.data_account_type_non_current_liabilities,FALSE,do_chart_template
-do_niif_31010100,31010100,Capital Social Autorizado,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_31010200,31010200,Capital Social en Acciones no Emitidas,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_31010300,31010300,Capital Social Pagado,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_31010400,31010400,Capital Social No Pagado,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_31010500,31010500,Acciones o Participaciones en Tesorería,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_31020100,31020100,Superávit por Revaluación de Terrenos,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_31020200,31020200,Superávit por Revaluación de Edificaciones,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_31020300,31020300,Superávit por Revaluación de Instalaciones,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_31020400,31020400,Superávit por Revaluación de Mobiliario y Equipo,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_32010100,32010100,Reserva Legal,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_33010100,33010100,Utilidades de Ejercicios Anteriores,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_33010200,33010200,Pérdidas de Ejercicios Anteriores,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_33020100,33020100,Utilidad del Ejercicio,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_33020200,33020200,Pérdidas del Ejercicio,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_33040100,33040100,Superávit en Reserva,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_33040200,33040200,Déficit en Reserva,account.data_account_type_equity,FALSE,do_chart_template
-do_niif_41010100,41010100,Ventas Bienes,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_41010200,41010200,Ventas Bienes - Al Exterior,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_41020100,41020100,Ventas Servicios,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_41020200,41020200,Ventas Servicios - Al Exterior,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_41030100,41030100,Devoluciones de Bienes,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_41030200,41030200,Devoluciones por Servicios,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_41040100,41040100,Descuentos por Ventas (por NC),account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_42010100,42010100,Intereses sobre Certificados,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_42010200,42010200,Intereses en Cuentas Bancarias,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_42010300,42010300,Intereses por Financiamientos,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_42020100,42020100,Ingresos por Ventas de Activos,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_42030100,42030100,Ingresos por Dividendos Ganados,account.data_account_type_revenue,FALSE,do_chart_template
-do_niif_42040100,42040100,Ingresos por Diferencia Cambiaria,account.data_account_type_other_income,FALSE,do_chart_template
-do_niif_42040200,42040200,Cobro de Cuentas Incobrables,account.data_account_type_other_income,FALSE,do_chart_template
-do_niif_42040300,42040300,Otros Ingresos,account.data_account_type_other_income,FALSE,do_chart_template
-do_niif_51010100,51010100,Costos de Bienes,account.data_account_type_direct_costs,FALSE,do_chart_template
-do_niif_51010200,51010200,Otros Costos de Venta,account.data_account_type_direct_costs,FALSE,do_chart_template
-do_niif_51020100,51020100,Materia Prima,account.data_account_type_direct_costs,FALSE,do_chart_template
-do_niif_51020200,51020200,Mano de Obra,account.data_account_type_direct_costs,FALSE,do_chart_template
-do_niif_51020300,51020300,Costos Indirectos,account.data_account_type_direct_costs,FALSE,do_chart_template
-do_niif_52010100,52010100,Sueldos y Salarios,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010200,52010200,Regalía Pascual,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010300,52010300,Retribuciones Complementarias,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010400,52010400,Bono Vacacional,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010500,52010500,Bono por Desempeño,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010600,52010600,Comisiones,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010700,52010700,Indemnizaciones,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010800,52010800,Bonificaciones y Gratificaciones,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010900,52010900,Dietas al Personal,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52011000,52011000,Cursos y Entrenamientos,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52011100,52011100,Prestaciones Laborales (Preaviso y Cesantia),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52011200,52011200,Incentivos,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52011300,52011300,Horas Extras,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52011400,52011400,Otros Gastos de Personal,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010102,52010102,Aportes a la Administradora de Fondos de Pensiones (AFP),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010103,52010103,Aportes al Seguro Riesgo Laboral (SRL),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010104,52010104,Seguro Familiar de Salud (SFS),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010201,52010201,Aportes a la Administradora de Riesgos de Salud (ARS),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010202,52010202,Seguros al Personal,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010203,52010203,Planes Complementarios de Salud,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010204,52010204,Seguros de Vida,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52010205,52010205,Aportes al Infotep,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52020100,52020100,Energía Eléctrica,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52020200,52020200,Comunicaciones,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52020300,52020300,Papelería y útiles,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52020400,52020400,Útiles de Aseo y Limpieza,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52020500,52020500,Material de Empaque,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52020600,52020600,Seguro de Edificio,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52020700,52020700,Combustibles y Lubricantes,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52020800,52020800,Alquileres,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52020900,52020900,Franquicias,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52021000,52021000,Inducción a Vendedores,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52021100,52021100,Seguros,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52021200,52021200,Servicios de Mensajería,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52021300,52021300,Flete y Carga,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52021400,52021400,Cuotas y Suscripciones,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52021500,52021500,Otros Gastos de Administración,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030101,52030101,Legales (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030102,52030102,Contabilidad y Auditoría (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030103,52030103,Tecnología (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030104,52030104,Mantenimiento de Planta (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030105,52030105,Mantenimiento del Local (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030106,52030106,Mantenimiento Mobiliario y Equipos (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030107,52030107,Asesorías (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030108,52030108,Fumigaciones (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030109,52030109,Copias y Escaneos (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030110,52030110,Servicios de Vigilancia (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030111,52030111,Otros Servicios Profesionales (P. Física),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030201,52030201,Legales (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030202,52030202,Contabilidad y Auditoría (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030203,52030203,Tecnología (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030204,52030204,Mantenimiento de Planta (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030205,52030205,Mantenimiento del Local (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030206,52030206,Mantenimiento Mobiliario y Equipos (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030207,52030207,Asesorías (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030208,52030208,Fumigaciones (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030209,52030209,Copias y Escaneos (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030210,52030210,Servicios de Vigilancia (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030211,52030211,Otros Servicios Profesionales (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030301,52030301,Honorarios por Servicios del Exterior - Relacionadas,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52030302,52030302,Honorarios por Servicios del Exterior - Terceros,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52040100,52040100,Gastos por Depreciación de Edificios,account.data_account_type_depreciation,FALSE,do_chart_template
-do_niif_52040200,52040200,Gastos por Depreciación de Equipo de Transporte,account.data_account_type_depreciation,FALSE,do_chart_template
-do_niif_52040300,52040300,Gastos por Depreciación de Mobiliario y Equipos,account.data_account_type_depreciation,FALSE,do_chart_template
-do_niif_52040400,52040400,Gastos por Depreciación de Maquinaria,account.data_account_type_depreciation,FALSE,do_chart_template
-do_niif_52040500,52040500,Gastos por Depreciación de Herramientas,account.data_account_type_depreciation,FALSE,do_chart_template
-do_niif_52040600,52040600,Gastos por Depreciación de Instalaciones,account.data_account_type_depreciation,FALSE,do_chart_template
-do_niif_52050100,52050100,Gastos por Reparación de Edificios,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52050200,52050200,Gastos por Reparación de Equipo de Transporte,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52050300,52050300,Gastos por Reparación de Mobiliario y Equipos,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52050400,52050400,Gastos por Reparación de Maquinaria,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52050500,52050500,Gastos por Reparación de Herramientas,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52050600,52050600,Gastos por Reparación de Instalaciones,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52060100,52060100,Relaciones Públicas,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52060200,52060200,Publicidad,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52060300,52060300,Viajes,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52060400,52060400,Donaciones,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52060500,52060500,Donaciones a ProIndustria (Ley 392-07),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52060600,52060600,Promociones,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52060700,52060700,Otros Gastos de Representación,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52070100,52070100,Gastos por Préstamos Bancarios,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52070200,52070200,Retención por Cheques y Transacciones Electrónicas (0.015%),account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52070300,52070300,Intereses Bancarios,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52070400,52070400,Comisiones Bancarias,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52070500,52070500,Comisión de Tarjeta de Crédito,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52070600,52070600,Nota de Cargos por Banco,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52070700,52070700,Seguro sobre Préstamos Bancarios,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52070800,52070800,Diferencia Negativa Cambiaria,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52070900,52070900,Otro Gastos Financieros,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52080100,52080100,Gastos por Siniestros,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52080200,52080200,Pérdidas por Ventas de Activos Fijos,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52080300,52080300,Pérdidas por Cuentas Incobrables,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52080400,52080400,Gastos por ISR,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52080500,52080500,Impuestos a los Activos,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52080600,52080600,Penalidades/Recargos de DGII,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52080700,52080700,Penalidades/Recargos de TSS,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_52080800,52080800,Gastos Sin Comprobante,account.data_account_type_expenses,FALSE,do_chart_template
-do_niif_61010100,61010100,Pérdidas y Ganancias,account.data_unaffected_earnings,FALSE,do_chart_template
+id,code,name,user_type_id/id,reconcile,chart_template_id/id,tag_ids/id
+do_niif_11010301,11010301,Depósitos a corto plazo en RD$,account.data_account_type_liquidity,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1101,account_tag_110103"
+do_niif_11010302,11010302,Depósitos a corto plazo en USD$,account.data_account_type_liquidity,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1101,account_tag_110103"
+do_niif_11020100,11020100,Bonos y Acciones Temporales,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1102"
+do_niif_11020200,11020200,Operaciones en Bolsa,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1102"
+do_niif_11020300,11020300,Otros Valores Negociables,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1102"
+do_niif_11030101,11030101,Cheques Devueltos por Cobrar,account.data_account_type_receivable,TRUE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1103,account_tag_110301"
+do_niif_11030102,11030102,Intereses por Cobrar,account.data_account_type_receivable,TRUE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1103,account_tag_110301"
+do_niif_11030201,11030201,Cuenta por Cobrar a Clientes,account.data_account_type_receivable,TRUE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1103,account_tag_110302"
+do_niif_11030202,11030202,Cuenta por Cobrar a Funcionarios y Empleados,account.data_account_type_receivable,TRUE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1103,account_tag_110302"
+do_niif_11030203,11030203,Cuenta por Cobrar a Afiliadas,account.data_account_type_receivable,TRUE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1103,account_tag_110302"
+do_niif_11030204,11030204,Cuenta por Cobrar a Accionistas,account.data_account_type_receivable,TRUE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1103,account_tag_110302"
+do_niif_11030205,11030205,Otras Cuentas por Cobrar,account.data_account_type_receivable,TRUE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1103,account_tag_110302"
+do_niif_11040100,11040100,Provisión Incobrables a Clientes,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1104"
+do_niif_11040200,11040200,Provisión Incobrables a Funcionarios y Empleados,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1104"
+do_niif_11040300,11040300,Provisión Incobrables a Afiliadas,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1104"
+do_niif_11040400,11040400,Provisión Incobrables a Accionistas,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1104"
+do_niif_11040500,11040500,Provisión Otras Cuentas Incobrables,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1104"
+do_niif_11050100,11050100,Inventario de Mercancías o Productos Terminados,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1105"
+do_niif_11050200,11050200,Inventario de Materia Prima,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1105"
+do_niif_11050300,11050300,Inventario en Tránsito,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1105"
+do_niif_11050400,11050400,Materiales y Suministros en Inventario,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1105"
+do_niif_11050500,11050500,Combustibles en Inventario,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1105"
+do_niif_11050600,11050600,Bienes Enviados No Facturados,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1105"
+do_niif_11060100,11060100,Deterioro Acum. de Inventario en Almacen,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1106"
+do_niif_11060200,11060200,Deterioro Acum. de Materiales y Suministros,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1106"
+do_niif_11060300,11060300,Deterioro Acum. de Combustibles,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1106"
+do_niif_11070100,11070100,Obsolescencia Inventario en Almacen,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1107"
+do_niif_11070200,11070200,Obsolescencia Materiales y Suministros,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1107"
+do_niif_11070300,11070300,Obsolescencia Combustibles,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1107"
+do_niif_11080101,11080101,ITBIS Pagado en Compras Locales,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1108,account_tag_110801"
+do_niif_11080102,11080102,ITBIS Pagado en Servicios Locales,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1108,account_tag_110801"
+do_niif_11080103,11080103,ITBIS Pagado por Importaciones,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1108,account_tag_110801"
+do_niif_11080301,11080301,ITBIS Pagado en Ventas con Tarjeta de Crédito (Norma 08-04),account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1108,account_tag_110803"
+do_niif_11080302,11080302,Saldo a Favor ITBIS,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1108,account_tag_110803"
+do_niif_11080303,11080303,Saldo a Favor ISR,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1108,account_tag_110803"
+do_niif_11090100,11090100,Acciones Temporales,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1109"
+do_niif_11090200,11090200,Depósitos a Plazo Temporales,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1109"
+do_niif_11090300,11090300,Bonos Temporales,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1109"
+do_niif_11090400,11090400,Fianzas y Depósitos,account.data_account_type_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1109"
+do_niif_11100100,11100100,Gastos Pagados por Anticipado,account.data_account_type_prepayments,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1110"
+do_niif_11100200,11100200,Renta Pagada por Anticipado,account.data_account_type_prepayments,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1110"
+do_niif_11100300,11100300,Seguros Pagados por Anticipado,account.data_account_type_prepayments,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1110"
+do_niif_11100400,11100400,Anticipos ISR,account.data_account_type_prepayments,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1110"
+do_niif_11100500,11100500,Anticipos Gastos,account.data_account_type_prepayments,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1110"
+do_niif_11100600,11100600,Anticipos 1% Activos,account.data_account_type_prepayments,FALSE,do_chart_template,"account_tag_1,account_tag_11,account_tag_1110"
+do_niif_12010101,12010101,Terrenos,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1201,account_tag_120101"
+do_niif_12010102,12010102,Edificaciones,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1201,account_tag_120101"
+do_niif_12010103,12010103,Mejoras en Edificaciones,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1201,account_tag_120101"
+do_niif_12010201,12010201,Equipo de Transporte,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1201,account_tag_120102"
+do_niif_12010202,12010202,Mobiliario y Equipos,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1201,account_tag_120102"
+do_niif_12010301,12010301,Maquinaria,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1201,account_tag_120103"
+do_niif_12010302,12010302,Herramientas,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1201,account_tag_120103"
+do_niif_12010303,12010303,Instalaciones,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1201,account_tag_120103"
+do_niif_12010304,12010304,Misceláneos u otros activos,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1201,account_tag_120103"
+do_niif_12020100,12020100,Depreciación Acum. de Edificios,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1202"
+do_niif_12020200,12020200,Depreciación Acum. de Equipo de Transporte,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1202"
+do_niif_12020300,12020300,Depreciación Acum. de Mobiliario y Equipos,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1202"
+do_niif_12020400,12020400,Depreciación Acum. de Maquinaria,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1202"
+do_niif_12020500,12020500,Depreciación Acum. de Herramientas,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1202"
+do_niif_12020600,12020600,Depreciación Acum. de Instalaciones,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1202"
+do_niif_12040100,12040100,Marcas y Patentes,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1204"
+do_niif_12040200,12040200,Programas Informáticos,account.data_account_type_fixed_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1204"
+do_niif_12050100,12050100,Edificios y Locales Arrendados,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1205"
+do_niif_12050200,12050200,Maquinaria y Equipo Arrendados,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1205"
+do_niif_12050300,12050300,Instalaciones Arrendadas,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1205"
+do_niif_12060100,12060100,Depreciación Acum. Edificios y Locales Arrendados,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1206"
+do_niif_12060200,12060200,Depreciación Acum. Maquinaria y Equipo Arrendados,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1206"
+do_niif_12060300,12060300,Depreciación Acum. Instalaciones Arrendadas,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1206"
+do_niif_12070100,12070100,Deterioro Valor Acum. Edificios y Locales Arrendados,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1207"
+do_niif_12070200,12070200,Deterioro Valor Acum. Maquinaria y Equipo Arrendado,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1207"
+do_niif_12070300,12070300,Deterioro Valor Acum. Instalaciones Arrendadas,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1207"
+do_niif_12080100,12080100,Acciones en otras sociedades,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1208"
+do_niif_12090100,12090100,Diferencias temporales deducibles,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1209"
+do_niif_12090200,12090200,Gastos Organizacionales Diferidos,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1209"
+do_niif_12090300,12090300,ISR Deducible,account.data_account_type_non_current_assets,FALSE,do_chart_template,"account_tag_1,account_tag_12,account_tag_1209"
+do_niif_21010100,21010100,Préstamos Bancarios por Pagar,account.data_account_type_payable,TRUE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2101"
+do_niif_21010200,21010200,Cuenta por Pagar Proveedores Locales,account.data_account_type_payable,TRUE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2101"
+do_niif_21010300,21010300,Cuenta por Pagar Proveedores del Exterior,account.data_account_type_payable,TRUE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2101"
+do_niif_21010400,21010400,Cuenta por Pagar a Afiliadas,account.data_account_type_payable,TRUE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2101"
+do_niif_21010500,21010500,Cuenta por Pagar a Accionistas,account.data_account_type_payable,TRUE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2101"
+do_niif_21010600,21010600,Nóminas por Pagar,account.data_account_type_payable,TRUE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2101"
+do_niif_21010700,21010700,Intereses por Pagar,account.data_account_type_payable,TRUE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2101"
+do_niif_21010800,21010800,Otras Cuentas por Pagar,account.data_account_type_payable,TRUE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2101"
+do_niif_21020100,21020100,Dividendos por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21020200,21020200,Comisiones por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21020300,21020300,Vacaciones por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21020400,21020400,Bonificaciones por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21020500,21020500,Regalía Pascual por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21020600,21020600,Seguro Médico por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21020700,21020700,Seguro Familiar de Salud (SFS) por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21020800,21020800,Aporte a Fondo de Pensiones (AFP) por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21020900,21020900,Seguro de Riesgo Laboral (SRL) por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21021000,21021000,INFOTEP por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21021100,21021100,Otras Remuneraciones por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21021200,21021200,Bienes Recibidos no Pagados,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2102"
+do_niif_21030101,21030101,ITBIS por Venta Servicios,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210301"
+do_niif_21030102,21030102,ITBIS por Venta Bienes,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210301"
+do_niif_21030103,21030103,ITBIS por Venta Bienes - al Exterior,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210301"
+do_niif_21030201,21030201,ITBIS Retenido Persona Jurídica (N 02-05),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210302"
+do_niif_21030202,21030202,ITBIS Retenido Persona Física (R 293-11),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210302"
+do_niif_21030203,21030203,ITBIS Retenido a Entidades No Lucrativas (N 01-2011),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210302"
+do_niif_21030204,21030204,ITBIS Retenido por Servicios Profesionales Liberales (N 02-05),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210302"
+do_niif_21030205,21030205,ITBIS Retenido a Proveedores Informales de Bienes (N 08-10),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210302"
+do_niif_21030301,21030301,ISR Retenido por Honorarios Profesionales de Personas Físicas,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210303"
+do_niif_21030302,21030302,ISR Retenido por Alquileres Pagados a Personas Físicas,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210303"
+do_niif_21030303,21030303,ISR Retenido por Dividendos Pagados,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210303"
+do_niif_21030304,21030304,ISR Retenido por Intereses Pagados al Exterior,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210303"
+do_niif_21030305,21030305,ISR Retenido por Intereses Pagados,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210303"
+do_niif_21030306,21030306,ISR Retenido por Transferencias de Títulos y Propiedades,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210303"
+do_niif_21030307,21030307,ISR Retenido por Remesas al Exterior (Ley 253-12),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210303"
+do_niif_21030308,21030308,Otras Retenciones (N 07-07),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210303"
+do_niif_21030309,21030309,Otras Retenciones,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210303"
+do_niif_21030401,21030401,Impuesto al Salario (ISR),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210304"
+do_niif_21030402,21030402,Retención de Seguro Familiar de Salud (SFS),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210304"
+do_niif_21030403,21030403,Retención de Fondo de Pensiones (AFP),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210304"
+do_niif_21030404,21030404,Retención de INFOTEP (0.5%),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210304"
+do_niif_21030501,21030501,ISR por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210305"
+do_niif_21030502,21030502,Anticipos ISR por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210305"
+do_niif_21030503,21030503,Propina por Pagar (Ley 16-92),account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210305"
+do_niif_21030504,21030504,Otros Impuestos por Pagar,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2103,account_tag_210305"
+do_niif_21040100,21040100,Provisión Pago Alquileres,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2104"
+do_niif_21040200,21040200,Provisión Arrendamiento Financiero,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2104"
+do_niif_21040300,21040300,Provisión Gastos Fijos,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2104"
+do_niif_21050100,21050100,Tarjeta de Crédito Empresarial,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2105"
+do_niif_21050200,21050200,Prima de Tarjetas de Crédito,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_21,account_tag_2105"
+do_niif_22010100,22010100,Préstamos Bancarios Largo Plazo,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_22,account_tag_2201"
+do_niif_22010200,22010200,Préstamos Hipotecarios LP,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_22,account_tag_2201"
+do_niif_22012300,22012300,Préstamos Accionistas / Particulares,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_22,account_tag_2201"
+do_niif_22020100,22020100,Provisión Beneficios de Empleados LP,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_22,account_tag_2202"
+do_niif_22020200,22020200,Provisión Prestaciones Laborales,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_22,account_tag_2202"
+do_niif_22020300,22020300,Provisión Indemnizaciones,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_22,account_tag_2202"
+do_niif_22030100,22030100,Anticipos de Clientes,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_22,account_tag_2203"
+do_niif_22030200,22030200,Garantías de Clientes,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_22,account_tag_2203"
+do_niif_22040100,22040100,Provisión Arrendamiento Financiero LP,account.data_account_type_non_current_liabilities,FALSE,do_chart_template,"account_tag_2,account_tag_22,account_tag_2204"
+do_niif_31010100,31010100,Capital Social Autorizado,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_31,account_tag_3101"
+do_niif_31010200,31010200,Capital Social en Acciones no Emitidas,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_31,account_tag_3101"
+do_niif_31010300,31010300,Capital Social Pagado,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_31,account_tag_3101"
+do_niif_31010400,31010400,Capital Social No Pagado,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_31,account_tag_3101"
+do_niif_31010500,31010500,Acciones o Participaciones en Tesorería,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_31,account_tag_3101"
+do_niif_31020100,31020100,Superávit por Revaluación de Terrenos,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_31,account_tag_3102"
+do_niif_31020200,31020200,Superávit por Revaluación de Edificaciones,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_31,account_tag_3102"
+do_niif_31020300,31020300,Superávit por Revaluación de Instalaciones,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_31,account_tag_3102"
+do_niif_31020400,31020400,Superávit por Revaluación de Mobiliario y Equipo,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_31,account_tag_3102"
+do_niif_32010100,32010100,Reserva Legal,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_32,account_tag_3201"
+do_niif_33010100,33010100,Utilidades de Ejercicios Anteriores,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_33,account_tag_3301"
+do_niif_33010200,33010200,Pérdidas de Ejercicios Anteriores,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_33,account_tag_3301"
+do_niif_33020100,33020100,Utilidad del Ejercicio,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_33,account_tag_3302"
+do_niif_33020200,33020200,Pérdidas del Ejercicio,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_33,account_tag_3302"
+do_niif_33040100,33040100,Superávit en Reserva,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_33,account_tag_3304"
+do_niif_33040200,33040200,Déficit en Reserva,account.data_account_type_equity,FALSE,do_chart_template,"account_tag_3,account_tag_33,account_tag_3304"
+do_niif_41010100,41010100,Ventas Bienes,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_41,account_tag_4101"
+do_niif_41010200,41010200,Ventas Bienes - Al Exterior,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_41,account_tag_4101"
+do_niif_41020100,41020100,Ventas Servicios,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_41,account_tag_4102"
+do_niif_41020200,41020200,Ventas Servicios - Al Exterior,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_41,account_tag_4102"
+do_niif_41030100,41030100,Devoluciones de Bienes,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_41,account_tag_4103"
+do_niif_41030200,41030200,Devoluciones por Servicios,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_41,account_tag_4103"
+do_niif_41040100,41040100,Descuentos por Ventas (por NC),account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_41,account_tag_4104"
+do_niif_42010100,42010100,Intereses sobre Certificados,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_42,account_tag_4201"
+do_niif_42010200,42010200,Intereses en Cuentas Bancarias,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_42,account_tag_4201"
+do_niif_42010300,42010300,Intereses por Financiamientos,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_42,account_tag_4201"
+do_niif_42020100,42020100,Ingresos por Ventas de Activos,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_42,account_tag_4202"
+do_niif_42030100,42030100,Ingresos por Dividendos Ganados,account.data_account_type_revenue,FALSE,do_chart_template,"account_tag_4,account_tag_42,account_tag_4203"
+do_niif_42040100,42040100,Ingresos por Diferencia Cambiaria,account.data_account_type_other_income,FALSE,do_chart_template,"account_tag_4,account_tag_42,account_tag_4204"
+do_niif_42040200,42040200,Cobro de Cuentas Incobrables,account.data_account_type_other_income,FALSE,do_chart_template,"account_tag_4,account_tag_42,account_tag_4204"
+do_niif_42040300,42040300,Otros Ingresos,account.data_account_type_other_income,FALSE,do_chart_template,"account_tag_4,account_tag_42,account_tag_4204"
+do_niif_51010100,51010100,Costos de Bienes,account.data_account_type_direct_costs,FALSE,do_chart_template,"account_tag_5,account_tag_51,account_tag_5101"
+do_niif_51010200,51010200,Costos de Servicios,account.data_account_type_direct_costs,FALSE,do_chart_template,"account_tag_5,account_tag_51,account_tag_5101"
+do_niif_51010300,51010300,Diferencia de Precio,account.data_account_type_direct_costs,FALSE,do_chart_template,"account_tag_5,account_tag_51,account_tag_5101"
+do_niif_51020100,51020100,Costos de Materia Prima,account.data_account_type_direct_costs,FALSE,do_chart_template,"account_tag_5,account_tag_51,account_tag_5102"
+do_niif_51020200,51020200,Costos de Mano de Obra,account.data_account_type_direct_costs,FALSE,do_chart_template,"account_tag_5,account_tag_51,account_tag_5102"
+do_niif_51020300,51020300,Costos Indirectos,account.data_account_type_direct_costs,FALSE,do_chart_template,"account_tag_5,account_tag_51,account_tag_5102"
+do_niif_52010100,52010100,Sueldos y Salarios,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52010200,52010200,Regalía Pascual,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52010300,52010300,Retribuciones Complementarias,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52010400,52010400,Bono Vacacional,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52010500,52010500,Bono por Desempeño,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52010600,52010600,Comisiones,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52010700,52010700,Indemnizaciones,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52010800,52010800,Bonificaciones y Gratificaciones,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52010900,52010900,Dietas al Personal,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52011000,52011000,Cursos y Entrenamientos,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52011100,52011100,Prestaciones Laborales (Preaviso y Cesantia),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52011200,52011200,Incentivos,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52011300,52011300,Horas Extras,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52011400,52011400,Otros Gastos de Personal,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201"
+do_niif_52010102,52010102,Contribución a la Administradora de Fondos de Pensiones (AFP),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201,account_tag_520101"
+do_niif_52010103,52010103,Contribución al Seguro Riesgo Laboral (SRL),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201,account_tag_520101"
+do_niif_52010104,52010104,Contribución al Seguro Familiar de Salud (SFS),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201,account_tag_520101"
+do_niif_52010201,52010201,Contribución a la Administradora de Riesgos de Salud (ARS),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201,account_tag_520102"
+do_niif_52010202,52010202,Contribución a Seguros del Personal,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201,account_tag_520102"
+do_niif_52010203,52010203,Contribución a Planes Complementarios de Salud,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201,account_tag_520102"
+do_niif_52010204,52010204,Contribución Seguros de Vida,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201,account_tag_520102"
+do_niif_52010205,52010205,Contribución al INFOTEP,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5201,account_tag_520102"
+do_niif_52020100,52020100,Energía Eléctrica,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52020200,52020200,Comunicaciones,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52020300,52020300,Papelería y útiles,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52020400,52020400,Útiles de Aseo y Limpieza,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52020500,52020500,Agua y Basura,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52020600,52020600,Seguro de Edificio,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52020700,52020700,Combustibles y Lubricantes,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52020800,52020800,Alquileres,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52020900,52020900,Franquicias,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52021000,52021000,Eventos,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52021100,52021100,Seguros,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52021200,52021200,Servicios de Mensajería,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52021300,52021300,Flete y Carga,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52021400,52021400,Cuotas y Suscripciones,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52021500,52021500,Otros Gastos de Administración,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5202"
+do_niif_52030101,52030101,Legales (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030102,52030102,Contabilidad y Auditoría (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030103,52030103,Tecnología (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030104,52030104,Mantenimiento de Planta (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030105,52030105,Mantenimiento del Local (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030106,52030106,Mantenimiento Mobiliario y Equipos (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030107,52030107,Asesorías (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030108,52030108,Fumigaciones (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030109,52030109,Copias y Escaneos (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030110,52030110,Servicios de Vigilancia (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030111,52030111,Otros Servicios Profesionales (P. Física),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520301"
+do_niif_52030201,52030201,Legales (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030202,52030202,Contabilidad y Auditoría (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030203,52030203,Tecnología (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030204,52030204,Mantenimiento de Planta (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030205,52030205,Mantenimiento del Local (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030206,52030206,Mantenimiento Mobiliario y Equipos (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030207,52030207,Asesorías (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030208,52030208,Fumigaciones (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030209,52030209,Copias y Escaneos (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030210,52030210,Servicios de Vigilancia (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030211,52030211,Otros Servicios Profesionales (P. Jurídica),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520302"
+do_niif_52030301,52030301,Honorarios por Servicios del Exterior - Relacionadas,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520303"
+do_niif_52030302,52030302,Honorarios por Servicios del Exterior - Terceros,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5203,account_tag_520303"
+do_niif_52040100,52040100,Gastos por Depreciación de Edificios,account.data_account_type_depreciation,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5204"
+do_niif_52040200,52040200,Gastos por Depreciación de Equipo de Transporte,account.data_account_type_depreciation,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5204"
+do_niif_52040300,52040300,Gastos por Depreciación de Mobiliario y Equipos,account.data_account_type_depreciation,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5204"
+do_niif_52040400,52040400,Gastos por Depreciación de Maquinaria,account.data_account_type_depreciation,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5204"
+do_niif_52040500,52040500,Gastos por Depreciación de Herramientas,account.data_account_type_depreciation,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5204"
+do_niif_52040600,52040600,Gastos por Depreciación de Instalaciones,account.data_account_type_depreciation,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5204"
+do_niif_52050100,52050100,Gastos por Reparación de Edificios,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5205"
+do_niif_52050200,52050200,Gastos por Reparación de Equipo de Transporte,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5205"
+do_niif_52050300,52050300,Gastos por Reparación de Mobiliario y Equipos,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5205"
+do_niif_52050400,52050400,Gastos por Reparación de Maquinaria,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5205"
+do_niif_52050500,52050500,Gastos por Reparación de Herramientas,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5205"
+do_niif_52050600,52050600,Gastos por Reparación de Instalaciones,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5205"
+do_niif_52060100,52060100,Relaciones Públicas,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5206"
+do_niif_52060200,52060200,Publicidad,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5206"
+do_niif_52060300,52060300,Viajes,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5206"
+do_niif_52060400,52060400,Donaciones,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5206"
+do_niif_52060500,52060500,Donaciones a ProIndustria (Ley 392-07),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5206"
+do_niif_52060600,52060600,Promociones,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5206"
+do_niif_52060700,52060700,Otros Gastos de Representación,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5206"
+do_niif_52070100,52070100,Gastos por Préstamos Financieros,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5207"
+do_niif_52070200,52070200,Retención por Cheques y Transferencias Electrónicas (0.15%),account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5207"
+do_niif_52070300,52070300,Intereses Bancarios,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5207"
+do_niif_52070400,52070400,Comisiones Bancarias,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5207"
+do_niif_52070500,52070500,Comisión de Tarjeta de Crédito,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5207"
+do_niif_52070600,52070600,Nota de Cargos por Banco,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5207"
+do_niif_52070700,52070700,Seguro sobre Préstamos Bancarios,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5207"
+do_niif_52070800,52070800,Pérdidas por Diferencia Cambiaria,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5207"
+do_niif_52070900,52070900,Otro Gastos Financieros,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5207"
+do_niif_52080100,52080100,Gastos por Siniestros,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5208"
+do_niif_52080200,52080200,Pérdidas por Ventas de Activos Fijos,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5208"
+do_niif_52080300,52080300,Pérdidas por Cuentas Incobrables,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5208"
+do_niif_52080400,52080400,Gastos por ISR,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5208"
+do_niif_52080500,52080500,Impuestos a los Activos,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5208"
+do_niif_52080600,52080600,Penalidades/Recargos de DGII,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5208"
+do_niif_52080700,52080700,Penalidades/Recargos de TSS,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5208"
+do_niif_52080800,52080800,Gastos Sin Comprobante,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5208"
+do_niif_52080900,52080900,Gastos por Impuestos,account.data_account_type_expenses,FALSE,do_chart_template,"account_tag_5,account_tag_52,account_tag_5208"
+do_niif_61010100,61010100,Pérdidas y Ganancias,account.data_unaffected_earnings,FALSE,do_chart_template,"account_tag_6,account_tag_61,account_tag_6101"
diff --git a/addons/l10n_do/data/account.tax.template.xml b/addons/l10n_do/data/account.tax.template.xml
index 166bb85294b..10e6c6edc69 100644
--- a/addons/l10n_do/data/account.tax.template.xml
+++ b/addons/l10n_do/data/account.tax.template.xml
@@ -183,7 +183,7 @@
<field eval="0" name="amount"/>
<field name="amount_type">group</field>
<field name="type_tax_use">purchase</field>
- <field eval="[(6, 0, [ref('tax_10_telco'), ref('tax_2_telco')])]" name="children_tax_ids"/>
+ <field eval="[(6, 0, [ref('tax_18_purch_serv'), ref('tax_10_telco'), ref('tax_2_telco')])]" name="children_tax_ids"/>
</record>
<record id="ret_100_tax_nonprofit" model="account.tax.template">
<field name="chart_template_id" ref="do_chart_template"/>
diff --git a/addons/l10n_do/data/account_account_tag_data.xml b/addons/l10n_do/data/account_account_tag_data.xml
index 7e95735f9b3..db5bf0864ac 100644
--- a/addons/l10n_do/data/account_account_tag_data.xml
+++ b/addons/l10n_do/data/account_account_tag_data.xml
@@ -2,9 +2,562 @@
<odoo>
<data noupdate="1">
-
<!-- Account Tags -->
+ <record id='account_tag_1' model='account.account.tag'>
+ <field name='name'>1 Activos</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_11' model='account.account.tag'>
+ <field name='name'>11 Activos Corrientes</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1101' model='account.account.tag'>
+ <field name='name'>1101 Efectivo y Equivalentes de Efectivo</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_110101' model='account.account.tag'>
+ <field name='name'>110101 Caja</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_110102' model='account.account.tag'>
+ <field name='name'>110102 Bancos</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_110103' model='account.account.tag'>
+ <field name='name'>110103 Inversiones Temporales Plazo Menor 90 días</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1102' model='account.account.tag'>
+ <field name='name'>1102 Inversiones en Valores a Corto Plazo</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1103' model='account.account.tag'>
+ <field name='name'>1103 Cuentas y Documentos por Cobrar</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_110301' model='account.account.tag'>
+ <field name='name'>110301 Documentos por Cobrar</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_110302' model='account.account.tag'>
+ <field name='name'>110302 Cuentas por Cobrar</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1104' model='account.account.tag'>
+ <field name='name'>1104 Provisión para Cuentas Incobrables</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1105' model='account.account.tag'>
+ <field name='name'>1105 Inventarios</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1106' model='account.account.tag'>
+ <field name='name'>1106 Deterioro Acumulado de Valor de Inventarios</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1107' model='account.account.tag'>
+ <field name='name'>1107 Estimación por Obsolecencia de Inventario</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1108' model='account.account.tag'>
+ <field name='name'>1108 Impuestos Adelantados</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_110801' model='account.account.tag'>
+ <field name='name'>110801 ITBIS Pagado en Compras</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_110803' model='account.account.tag'>
+ <field name='name'>110803 Otros Impuestos y Saldos</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1109' model='account.account.tag'>
+ <field name='name'>1109 Inversiones Temporales</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1110' model='account.account.tag'>
+ <field name='name'>1110 Pagos Anticipados</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_12' model='account.account.tag'>
+ <field name='name'>12 Activos Fijos</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1201' model='account.account.tag'>
+ <field name='name'>1201 Propiedades, Planta y Equipo</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_120101' model='account.account.tag'>
+ <field name='name'>120101 Bienes Inmuebles (CAT 1)</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_120102' model='account.account.tag'>
+ <field name='name'>120102 Bienes Muebles (CAT 2)</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_120103' model='account.account.tag'>
+ <field name='name'>120103 Bienes Muebles (CAT 3)</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1202' model='account.account.tag'>
+ <field name='name'>1202 Depreciación Acumulada de Propiedades, Planta y Equipo</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1203' model='account.account.tag'>
+ <field name='name'> 1203 Deterioro de Valor Acumulado de Propiedades, Planta y Equipo</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1204' model='account.account.tag'>
+ <field name='name'>1204 Activos Intangibles</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1205' model='account.account.tag'>
+ <field name='name'>1205 Bienes en Arrendamiento</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1206' model='account.account.tag'>
+ <field name='name'>1206 Depreciación Acumulada de Bienes en Arrendamiento</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1207' model='account.account.tag'>
+ <field name='name'>1207 Deterioro de Valor Acumulado de Bienes en Arrendamiento</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1208' model='account.account.tag'>
+ <field name='name'>1208 Inversiones Permanentes</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_1209' model='account.account.tag'>
+ <field name='name'>1209 Activos Diferidos</field>
+ <field name='color'>1</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2' model='account.account.tag'>
+ <field name='name'>2 Pasivos</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_21' model='account.account.tag'>
+ <field name='name'>21 Pasivo Corriente</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2101' model='account.account.tag'>
+ <field name='name'>2101 Cuentas y Documentos por Pagar a Corto Plazo</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2102' model='account.account.tag'>
+ <field name='name'>2102 Beneficios por Pagar a Corto Plazo</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2103' model='account.account.tag'>
+ <field name='name'>2103 Impuestos y Retenciones</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_210301' model='account.account.tag'>
+ <field name='name'>210301 ITBIS por Pagar</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_210302' model='account.account.tag'>
+ <field name='name'>210302 ITBIS Retenido</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_210303' model='account.account.tag'>
+ <field name='name'>210303 ISR Retenido</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_210304' model='account.account.tag'>
+ <field name='name'>210304 Retenciones en Nómina</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_210305' model='account.account.tag'>
+ <field name='name'>210305 Otros Impuestos o Retenciones</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2104' model='account.account.tag'>
+ <field name='name'>2104 Provisiones a Corto Plazo</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2105' model='account.account.tag'>
+ <field name='name'>2105 Tarjetas de Crédito</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_22' model='account.account.tag'>
+ <field name='name'>22 Pasivo No Corriente</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2201' model='account.account.tag'>
+ <field name='name'>2201 Cuentas y Documentos por Pagar a Largo Plazo</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2202' model='account.account.tag'>
+ <field name='name'>2202 Provisión para Obligaciones Laborales</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2203' model='account.account.tag'>
+ <field name='name'>2203 Anticipos y Garantías de Clientes</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_2204' model='account.account.tag'>
+ <field name='name'>2204 Provisiones a Largo Plazo</field>
+ <field name='color'>8</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_3' model='account.account.tag'>
+ <field name='name'>3 Capital</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_31' model='account.account.tag'>
+ <field name='name'>31 Capital Contable</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_3101' model='account.account.tag'>
+ <field name='name'>3101 Capital Social</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_3102' model='account.account.tag'>
+ <field name='name'>3102 Superávit por Revaluación de Activos</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_32' model='account.account.tag'>
+ <field name='name'>32 Utilidades Restringidas</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_3201' model='account.account.tag'>
+ <field name='name'>3201 Reserva Legal</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_33' model='account.account.tag'>
+ <field name='name'>33 Resultados</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_3301' model='account.account.tag'>
+ <field name='name'>3301 Resultados Acumulados</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_3302' model='account.account.tag'>
+ <field name='name'>3302 Resultados del Ejercicio</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_3304' model='account.account.tag'>
+ <field name='name'>3304 Otras Reservas de Patrimonio</field>
+ <field name='color'>6</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_4' model='account.account.tag'>
+ <field name='name'>4 Ingresos y Ganancias</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_41' model='account.account.tag'>
+ <field name='name'>41 Ingresos por Operaciones</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_4101' model='account.account.tag'>
+ <field name='name'>4101 Ventas de Bienes</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_4102' model='account.account.tag'>
+ <field name='name'>4102 Ventas de Servicios</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_4103' model='account.account.tag'>
+ <field name='name'>4103 Devoluciones</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_4104' model='account.account.tag'>
+ <field name='name'>4104 Descuentos</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_42' model='account.account.tag'>
+ <field name='name'>42 Ingresos No Operacionales</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_4201' model='account.account.tag'>
+ <field name='name'>4201 Intereses Ganados</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_4202' model='account.account.tag'>
+ <field name='name'>4202 Ventas de Activos</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_4203' model='account.account.tag'>
+ <field name='name'>4203 Dividendos Ganados</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_4204' model='account.account.tag'>
+ <field name='name'>4204 Ingresos Extraordinarios</field>
+ <field name='color'>7</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5' model='account.account.tag'>
+ <field name='name'>5 Costos, Gastos y Pérdidas</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_51' model='account.account.tag'>
+ <field name='name'>51 Costos y Gastos de Operación</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5101' model='account.account.tag'>
+ <field name='name'>5101 Costos de Ventas</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5102' model='account.account.tag'>
+ <field name='name'>5102 Costos de Producción</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_52' model='account.account.tag'>
+ <field name='name'>52 Gastos de Operación</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5201' model='account.account.tag'>
+ <field name='name'>5201 Gastos de Personal</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_520101' model='account.account.tag'>
+ <field name='name'>520101 Aportes a la Seguridad Social</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_520102' model='account.account.tag'>
+ <field name='name'>520102 Otras Cargas Patronales</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5202' model='account.account.tag'>
+ <field name='name'>5202 Gastos de Administración</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5203' model='account.account.tag'>
+ <field name='name'>5203 Gastos por Trabajo, Suministros y Servicios</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_520301' model='account.account.tag'>
+ <field name='name'>520301 Gastos Honorarios por Servicios Profesionales (P. Física)</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_520302' model='account.account.tag'>
+ <field name='name'>520302 Gastos Honorarios por Servicios Profesionales (P. Jurídica)</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_520303' model='account.account.tag'>
+ <field name='name'>520303 Gastos Honorarios por Servicios Profesionales (P. Jurídica)</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5204' model='account.account.tag'>
+ <field name='name'>5204 Gastos por Depreciación</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5205' model='account.account.tag'>
+ <field name='name'>5205 Gastos por Reparaciones</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5206' model='account.account.tag'>
+ <field name='name'>5206 Gastos de Representación</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5207' model='account.account.tag'>
+ <field name='name'>5207 Gastos Financieros</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_5208' model='account.account.tag'>
+ <field name='name'>5208 Gastos Extraordinarios</field>
+ <field name='color'>4</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_6' model='account.account.tag'>
+ <field name='name'>6 Cuentas Liquidadoras de Resultados</field>
+ <field name='color'>5</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_61' model='account.account.tag'>
+ <field name='name'>61 Cuenta Liquidadora</field>
+ <field name='color'>5</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_6101' model='account.account.tag'>
+ <field name='name'>6101 Pérdidas y Ganancias</field>
+ <field name='color'>5</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <record id='account_tag_6102' model='account.account.tag'>
+ <field name='name'>6102 Gastos por Impuestos</field>
+ <field name='color'>5</field>
+ <field name='applicability'>accounts</field>
+ </record>
+
+ <!-- Tax Tags -->
+
<record id="tag_R_ISR_10" model="account.account.tag">
<field name="name">R-ISR 10%</field>
<field name="applicability">taxes</field>
diff --git a/addons/l10n_do/data/account_chart_template_data.xml b/addons/l10n_do/data/account_chart_template_data.xml
index 0123c1d897b..696cae7b228 100644
--- a/addons/l10n_do/data/account_chart_template_data.xml
+++ b/addons/l10n_do/data/account_chart_template_data.xml
@@ -4,12 +4,12 @@
<record id="do_chart_template" model="account.chart.template">
<field name="property_account_receivable_id" ref="do_niif_11030201"/>
<field name="property_account_payable_id" ref="do_niif_21010200"/>
- <field name="property_account_expense_categ_id" ref="do_niif_52021500"/>
+ <field name="property_account_expense_categ_id" ref="do_niif_51010100"/>
<field name="property_account_income_categ_id" ref="do_niif_41010100"/>
<field eval="False" name="use_anglo_saxon"/>
- <field name="property_stock_account_input_categ_id" ref="do_niif_11050300"/>
- <field name="property_stock_account_output_categ_id" ref="do_niif_11050300"/>
- <field name="property_stock_valuation_account_id" ref="do_niif_11060100"/>
+ <field name="property_stock_account_input_categ_id" ref="do_niif_21021200"/>
+ <field name="property_stock_account_output_categ_id" ref="do_niif_11050600"/>
+ <field name="property_stock_valuation_account_id" ref="do_niif_11050100"/>
<field name="expense_currency_exchange_account_id" ref="do_niif_52070800"/>
<field name="income_currency_exchange_account_id" ref="do_niif_42040100"/>
</record>
diff --git a/addons/l10n_do/data/l10n_do_chart_data.xml b/addons/l10n_do/data/l10n_do_chart_data.xml
index 9075d92a621..e08e4a38ae4 100644
--- a/addons/l10n_do/data/l10n_do_chart_data.xml
+++ b/addons/l10n_do/data/l10n_do_chart_data.xml
@@ -16,7 +16,6 @@
<field name="bank_account_code_prefix">110102</field>
<field name="transfer_account_id" ref="cash_transfer_account"/>
<field name="currency_id" ref="base.DOP"/>
- <field name="spoken_languages" eval="'es_DO'"/>
</record>
<record id="cash_transfer_account" model="account.account.template">
<field name="chart_template_id" ref="do_chart_template"/>
diff --git a/addons/l10n_mx/data/account_tax_data.xml b/addons/l10n_mx/data/account_tax_data.xml
index 8bd16cf1dc7..6cf8c3d0589 100644
--- a/addons/l10n_mx/data/account_tax_data.xml
+++ b/addons/l10n_mx/data/account_tax_data.xml
@@ -26,6 +26,8 @@
<field name="refund_account_id" ref="cuenta209_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tag_iva')])]"/>
<field name="tax_group_id" ref="tax_group_iva"/>
+ <field name="use_cash_basis" eval="True"/>
+ <field name="cash_basis_account" ref="cuenta208_01"/>
</record>
<record id="tax12" model="account.tax.template">
@@ -39,6 +41,8 @@
<field name="refund_account_id" ref="cuenta209_01"/>
<field name="tag_ids" eval="[(6,0,[ref('tag_iva')])]"/>
<field name="tax_group_id" ref="tax_group_iva"/>
+ <field name="use_cash_basis" eval="True"/>
+ <field name="cash_basis_account" ref="cuenta208_01"/>
</record>
<record id="tax1" model="account.tax.template">
@@ -51,6 +55,8 @@
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tax_group_id" ref="tax_group_iva_ret"/>
+ <field name="use_cash_basis" eval="True"/>
+ <field name="cash_basis_account" ref="cuenta216_10_20"/>
</record>
<record id="tax2" model="account.tax.template">
@@ -63,6 +69,8 @@
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tax_group_id" ref="tax_group_iva_ret"/>
+ <field name="use_cash_basis" eval="True"/>
+ <field name="cash_basis_account" ref="cuenta216_10_20"/>
</record>
<record id="tax3" model="account.tax.template">
@@ -99,6 +107,8 @@
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tax_group_id" ref="tax_group_iva_ret"/>
+ <field name="use_cash_basis" eval="True"/>
+ <field name="cash_basis_account" ref="cuenta216_10_20"/>
</record>
<record id="tax8" model="account.tax.template">
@@ -111,6 +121,8 @@
<field name="account_id" ref="cuenta216_10"/>
<field name="refund_account_id" ref="cuenta216_10"/>
<field name="tax_group_id" ref="tax_group_iva_ret"/>
+ <field name="use_cash_basis" eval="True"/>
+ <field name="cash_basis_account" ref="cuenta216_10_20"/>
</record>
<record id="tax13" model="account.tax.template">
@@ -123,6 +135,8 @@
<field name="account_id" ref="cuenta119_01"/>
<field name="refund_account_id" ref="cuenta119_01"/>
<field name="tax_group_id" ref="tax_group_iva"/>
+ <field name="use_cash_basis" eval="True"/>
+ <field name="cash_basis_account" ref="cuenta118_01"/>
</record>
<record id="tax14" model="account.tax.template">
@@ -135,6 +149,8 @@
<field name="account_id" ref="cuenta119_01"/>
<field name="refund_account_id" ref="cuenta119_01"/>
<field name="tax_group_id" ref="tax_group_iva"/>
+ <field name="use_cash_basis" eval="True"/>
+ <field name="cash_basis_account" ref="cuenta118_01"/>
</record>
</data>
</odoo>
diff --git a/addons/l10n_mx/data/fiscal_position_data.xml b/addons/l10n_mx/data/fiscal_position_data.xml
index 9b12c53cd4a..4247460e340 100644
--- a/addons/l10n_mx/data/fiscal_position_data.xml
+++ b/addons/l10n_mx/data/fiscal_position_data.xml
@@ -1,28 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
- <record id="account_fiscal_position_personasmoralesdelrgimengeneral0" model="account.fiscal.position.template">
- <field name="name">Personas morales del régimen general</field>
+ <record id="account_fiscal_position_601_fr" model="account.fiscal.position.template">
+ <field name="name">601 - General de Ley Personas Morales</field>
<field name="chart_template_id" ref="mx_coa"/>
</record>
- <record id="account_fiscal_position_personasmoralesconfinesnolucrativos0" model="account.fiscal.position.template">
- <field name="name">Personas morales con fines no lucrativos</field>
+ <record id="account_fiscal_position_603_fr" model="account.fiscal.position.template">
+ <field name="name">603 - Personas Morales con Fines no Lucrativos</field>
<field name="chart_template_id" ref="mx_coa"/>
</record>
- <record id="account_fiscal_position_asociacionesreligiosas0" model="account.fiscal.position.template">
- <field name="name">Asociaciones Religiosas</field>
+ <record id="account_fiscal_position_605_fr" model="account.fiscal.position.template">
+ <field name="name">605 - Sueldos y Salarios e Ingresos Asimilados a Salarios</field>
<field name="chart_template_id" ref="mx_coa"/>
</record>
- <record id="account_fiscal_position_personasmoralesdelrgimensimplificado0" model="account.fiscal.position.template">
- <field name="name">Personas morales del régimen simplificado</field>
+ <record id="account_fiscal_position_606_fr" model="account.fiscal.position.template">
+ <field name="name">606 - Arrendamiento</field>
<field name="chart_template_id" ref="mx_coa"/>
</record>
- <record id="account_fiscal_position_personafisicaconactividadempresarial0" model="account.fiscal.position.template">
- <field name="name">Persona física con actividad empresarial</field>
+ <record id="account_fiscal_position_607_fr" model="account.fiscal.position.template">
+ <field name="name">607 - Régimen de Enajenación o Adquisición de Bienes</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_608_fr" model="account.fiscal.position.template">
+ <field name="name">608 - Demás ingresos</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_609_fr" model="account.fiscal.position.template">
+ <field name="name">609 - Consolidación</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_610_fr" model="account.fiscal.position.template">
+ <field name="name">610 - Residentes en el Extranjero sin Establecimiento Permanente en México</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_611_fr" model="account.fiscal.position.template">
+ <field name="name">611 - Ingresos por Dividendos (socios y accionistas)</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_612_fr" model="account.fiscal.position.template">
+ <field name="name">612 - Personas Físicas con Actividades Empresariales y Profesionales</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_614_fr" model="account.fiscal.position.template">
+ <field name="name">614 - Ingresos por intereses</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_615_fr" model="account.fiscal.position.template">
+ <field name="name">615 - Régimen de los ingresos por obtención de premios</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_616_fr" model="account.fiscal.position.template">
+ <field name="name">616 - Sin obligaciones fiscales</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_620_fr" model="account.fiscal.position.template">
+ <field name="name">620 - Sociedades Cooperativas de Producción que optan por diferir sus ingresos</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_621_fr" model="account.fiscal.position.template">
+ <field name="name">621 - Incorporación Fiscal</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_622_fr" model="account.fiscal.position.template">
+ <field name="name">622 - Actividades Agrícolas, Ganaderas, Silvícolas y Pesqueras</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_623_fr" model="account.fiscal.position.template">
+ <field name="name">623 - Opcional para Grupos de Sociedades</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_624_fr" model="account.fiscal.position.template">
+ <field name="name">624 - Coordinados</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_628_fr" model="account.fiscal.position.template">
+ <field name="name">628 - Hidrocarburos</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_629_fr" model="account.fiscal.position.template">
+ <field name="name">629 - De los Regímenes Fiscales Preferentes y de las Empresas Multinacionales</field>
+ <field name="chart_template_id" ref="mx_coa"/>
+ </record>
+
+ <record id="account_fiscal_position_630_fr" model="account.fiscal.position.template">
+ <field name="name">630 - Enajenación de acciones en bolsa de valores</field>
<field name="chart_template_id" ref="mx_coa"/>
</record>
diff --git a/addons/l10n_mx/models/chart_template.py b/addons/l10n_mx/models/chart_template.py
index 155877b2761..4e1397073ba 100644
--- a/addons/l10n_mx/models/chart_template.py
+++ b/addons/l10n_mx/models/chart_template.py
@@ -8,44 +8,6 @@ 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 = {
- 'IVA': account_obj.search([('code', '=', '208.01.01')]),
- 'ITAXR_04-OUT': account_obj.search([('code', '=', '216.10.20')]),
- 'ITAXR_10-OUT': account_obj.search([('code', '=', '216.10.20')]),
- 'ITAX_1067-OUT': account_obj.search([('code', '=', '216.10.20')]),
- 'ITAX_167-OUT': account_obj.search([('code', '=', '216.10.20')]),
- '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"""
diff --git a/addons/mail/models/res_partner.py b/addons/mail/models/res_partner.py
index 1f2a30af659..b46a29e83af 100644
--- a/addons/mail/models/res_partner.py
+++ b/addons/mail/models/res_partner.py
@@ -213,11 +213,12 @@ class Partner(models.Model):
(not self.pool._init or test_mode):
email_ids = emails.ids
dbname = self.env.cr.dbname
+ _context = self._context
def send_notifications():
db_registry = registry(dbname)
with api.Environment.manage(), db_registry.cursor() as cr:
- env = api.Environment(cr, SUPERUSER_ID, {})
+ env = api.Environment(cr, SUPERUSER_ID, _context)
env['mail.mail'].browse(email_ids).send()
# unless asked specifically, send emails after the transaction to
diff --git a/addons/mail/static/src/js/chatter.js b/addons/mail/static/src/js/chatter.js
index f04bd497067..51036e66aee 100644
--- a/addons/mail/static/src/js/chatter.js
+++ b/addons/mail/static/src/js/chatter.js
@@ -474,11 +474,12 @@ var Chatter = form_common.AbstractField.extend({
pyeval.eval('contexts', this.build_context())
);
this.context = _.extend({
- default_res_id: this.view.datarecord.id || false,
+ // expect integer ID or false
+ default_res_id: parseInt(this.view.datarecord.id, 10) || false,
default_model: this.view.model || false,
}, context);
this.thread_dataset = this.view.dataset;
- this.res_id = this.view.datarecord.id;
+ this.res_id = this.context.default_res_id;
this.record_name = this.view.datarecord.display_name;
this.msg_ids = this.get_value() || [];
diff --git a/addons/maintenance/views/maintenance_views.xml b/addons/maintenance/views/maintenance_views.xml
index 446ae2c877d..3c1281a07a5 100644
--- a/addons/maintenance/views/maintenance_views.xml
+++ b/addons/maintenance/views/maintenance_views.xml
@@ -39,7 +39,7 @@
<separator/>
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<separator/>
- <filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
+ <filter string="Archived" name="inactive" domain="[('archive','=',True)]"/>
<group expand='0' string='Group by...'>
<filter string='Assigned' domain="[]" context="{'group_by': 'technician_user_id'}"/>
<filter string='Category' domain="[]" context="{'group_by' : 'category_id'}"/>
diff --git a/addons/marketing_campaign/models/marketing_campaign.py b/addons/marketing_campaign/models/marketing_campaign.py
index de60ed86e4f..1d2709230aa 100644
--- a/addons/marketing_campaign/models/marketing_campaign.py
+++ b/addons/marketing_campaign/models/marketing_campaign.py
@@ -442,7 +442,7 @@ class MarketingCampaignWorkitem(models.Model):
for workitem in self:
proxy = self.env[workitem.object_id.model]
record = proxy.browse(workitem.res_id)
- if not workitem.res_id or not record:
+ if not workitem.res_id or not record.exists():
workitem.res_name = '/'
continue
workitem.res_name = record.name_get()[0][1]
diff --git a/addons/mass_mailing/data/mass_mailing_data.xml b/addons/mass_mailing/data/mass_mailing_data.xml
index 2e165a52806..f92fa8e9036 100644
--- a/addons/mass_mailing/data/mass_mailing_data.xml
+++ b/addons/mass_mailing/data/mass_mailing_data.xml
@@ -21,5 +21,17 @@
<field name="name">Newsletter</field>
</record>
+ <!-- Cron that process the mass mailing queue -->
+ <record id="ir_cron_mass_mailing_queue" model="ir.cron">
+ <field name="name">Mass Mailing: Process queue</field>
+ <field name="model_id" ref="model_mail_mass_mailing"/>
+ <field name="state">code</field>
+ <field name="code">model._process_mass_mailing_queue()</field>
+ <field name="user_id" ref="base.user_root" />
+ <field name="interval_number">60</field>
+ <field name="interval_type">minutes</field>
+ <field name="numbercall">-1</field>
+ <field eval="False" name="doall" />
+ </record>
</data>
</odoo>
diff --git a/addons/mass_mailing/static/src/less/themes/theme_default.less b/addons/mass_mailing/static/src/less/themes/theme_default.less
index 74f71191db2..cfd1264e0c7 100644
--- a/addons/mass_mailing/static/src/less/themes/theme_default.less
+++ b/addons/mass_mailing/static/src/less/themes/theme_default.less
@@ -55,9 +55,12 @@
background-color: @o_mm_def_color_alpha;
padding: 24px 3%;
- // Forces on <p/> elements as several mail clients does not correctly
- // inherit font properties
+ // Forces on <p/> and <hx/> elements as several mail clients does not
+ // correctly inherit font properties
&, p {
+ font-size: 14px; // force bootstrap default
+ }
+ &, p, h1, h2, h3, h4, h5, h6 {
font-family: @o_mm_def_font;
color: lighten(@o_mm_def_text_color, 20%);
}
diff --git a/addons/mass_mailing/views/mass_mailing_views.xml b/addons/mass_mailing/views/mass_mailing_views.xml
index 386a1c111ac..7fe7eb7435e 100644
--- a/addons/mass_mailing/views/mass_mailing_views.xml
+++ b/addons/mass_mailing/views/mass_mailing_views.xml
@@ -794,19 +794,6 @@
</field>
</record>
- <!-- Cron that process the mass mailing queue -->
- <record id="ir_cron_mass_mailing_queue" model="ir.cron">
- <field name="name">Mass Mailing: Process queue</field>
- <field name="model_id" ref="model_mail_mass_mailing"/>
- <field name="state">code</field>
- <field name="code">model._process_mass_mailing_queue()</field>
- <field name="user_id" ref="base.user_root" />
- <field name="interval_number">60</field>
- <field name="interval_type">minutes</field>
- <field name="numbercall">-1</field>
- <field eval="False" name="doall" />
- </record>
-
<menuitem name="Campaigns" id="menu_email_campaigns"
parent="mass_mailing_menu_root" sequence="5"
action="action_view_mass_mailing_campaigns"
diff --git a/addons/membership/wizard/membership_invoice.py b/addons/membership/wizard/membership_invoice.py
index dd77e54f0a1..ee247b3fcca 100644
--- a/addons/membership/wizard/membership_invoice.py
+++ b/addons/membership/wizard/membership_invoice.py
@@ -30,12 +30,13 @@ class MembershipInvoice(models.TransientModel):
search_view_ref = self.env.ref('account.view_account_invoice_filter', False)
form_view_ref = self.env.ref('account.invoice_form', False)
+ tree_view_ref = self.env.ref('account.invoice_tree', False)
return {
'domain': [('id', 'in', invoice_list)],
'name': 'Membership Invoices',
'res_model': 'account.invoice',
'type': 'ir.actions.act_window',
- 'views': [(False, 'tree'), (form_view_ref and form_view_ref.id, 'form')],
+ 'views': [(tree_view_ref.id, 'tree'), (form_view_ref.id, 'form')],
'search_view_id': search_view_ref and search_view_ref.id,
}
diff --git a/addons/mrp/models/stock_move.py b/addons/mrp/models/stock_move.py
index 1fee94e7f5f..b115fc2c16e 100644
--- a/addons/mrp/models/stock_move.py
+++ b/addons/mrp/models/stock_move.py
@@ -154,7 +154,7 @@ class StockMove(models.Model):
lots = self.env['stock.move.lots']
for move in self:
unlink_move_lots = move.move_lot_ids.filtered(lambda x : (x.quantity_done == 0) and not x.workorder_id)
- unlink_move_lots.unlink()
+ unlink_move_lots.sudo().unlink()
group_new_quant = {}
old_move_lot = {}
for movelot in move.move_lot_ids:
diff --git a/addons/mrp/report/mrp_production_templates.xml b/addons/mrp/report/mrp_production_templates.xml
index 90e430c9099..483ef283194 100644
--- a/addons/mrp/report/mrp_production_templates.xml
+++ b/addons/mrp/report/mrp_production_templates.xml
@@ -40,7 +40,8 @@
</div>
<div class="col-xs-3">
<strong>Printing date:</strong><br/>
- <span t-esc="time.strftime('%Y-%m-%d')"/>
+ <span t-esc="time.strftime('%Y-%m-%d')"
+ t-options='{"widget": "date"}'/>
</div>
<div class="col-xs-3" t-if="'sale_ref' in o">
<strong>Partner Ref:</strong><br/>
diff --git a/addons/mrp/views/mrp_bom_views.xml b/addons/mrp/views/mrp_bom_views.xml
index aeccdbfc1ad..1baf8c794f4 100644
--- a/addons/mrp/views/mrp_bom_views.xml
+++ b/addons/mrp/views/mrp_bom_views.xml
@@ -47,7 +47,7 @@
<button name="action_see_attachments" type="object" icon="fa-file" attrs="{'invisible': [('has_attachments', '=', True)]}"/>
<field name="product_qty"/>
<field name="product_uom_id" options="{'no_open':True,'no_create':True}" groups="product.group_uom"/>
- <field name="attribute_value_ids" widget="many2many_tags" domain="[('product_ids.product_tmpl_id', '=', parent.product_tmpl_id)]" groups="product.group_product_variant"/>
+ <field name="attribute_value_ids" widget="many2many_tags" domain="[('product_ids.product_tmpl_id', '=', parent.product_tmpl_id)]" options="{'no_create':True}" groups="product.group_product_variant"/>
<field name="operation_id" groups="mrp.group_mrp_routings" domain="[('routing_id', '=', parent.routing_id)]" options="{'no_quick_create':True,'no_create_edit':True}"/>
</tree>
</field>
diff --git a/addons/payment/models/account_payment.py b/addons/payment/models/account_payment.py
index d507666f35f..60ddcc60b4d 100644
--- a/addons/payment/models/account_payment.py
+++ b/addons/payment/models/account_payment.py
@@ -39,8 +39,8 @@ class AccountPayment(models.Model):
def _do_payment(self):
if self.payment_token_id.acquirer_id.auto_confirm == 'authorize':
- raise ValidationError('This feature is not available for payment acquirers set to the "Authorize" mode.\n'
- 'Please use a token from another provider than %s.' % self.payment_token_id.acquirer_id.name)
+ raise ValidationError(_('This feature is not available for payment acquirers set to the "Authorize" mode.\n'
+ 'Please use a token from another provider than %s.') % self.payment_token_id.acquirer_id.name)
reference = "P-%s-%s" % (self.id, datetime.datetime.now().strftime('%y%m%d_%H%M%S'))
tx = self.env['payment.transaction'].create({
'amount': self.amount,
diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py
index b2fd5ea0ab6..b0f1c2312e9 100644
--- a/addons/payment/models/payment_acquirer.py
+++ b/addons/payment/models/payment_acquirer.py
@@ -163,7 +163,7 @@ class PaymentAcquirer(models.Model):
def _check_authorization_support(self):
for acquirer in self:
if acquirer.auto_confirm == 'authorize' and acquirer.provider not in self._get_feature_support()['authorize']:
- raise ValidationError('Transaction Authorization is not supported by this payment provider.')
+ raise ValidationError(_('Transaction Authorization is not supported by this payment provider.'))
return True
_constraints = [
@@ -653,14 +653,14 @@ class PaymentTransaction(models.Model):
@api.multi
def action_capture(self):
if any(self.mapped(lambda tx: tx.state != 'authorized')):
- raise ValidationError('Only transactions in the Authorized status can be captured.')
+ raise ValidationError(_('Only transactions in the Authorized status can be captured.'))
for tx in self:
tx.s2s_capture_transaction()
@api.multi
def action_void(self):
if any(self.mapped(lambda tx: tx.state != 'authorized')):
- raise ValidationError('Only transactions in the Authorized status can be voided.')
+ raise ValidationError(_('Only transactions in the Authorized status can be voided.'))
for tx in self:
tx.s2s_void_transaction()
diff --git a/addons/payment_authorize/i18n/payment_authorize.pot b/addons/payment_authorize/i18n/payment_authorize.pot
index f155720d7d6..373fadac77b 100644
--- a/addons/payment_authorize/i18n/payment_authorize.pot
+++ b/addons/payment_authorize/i18n/payment_authorize.pot
@@ -26,11 +26,24 @@ msgid "API Transaction Key"
msgstr ""
#. module: payment_authorize
+#: code:addons/payment_authorize/models/authorize_request.py:66
+#, python-format
+msgid "Authorize.net Error Message(s):\n"
+" %s"
+msgstr ""
+
+#. module: payment_authorize
#: model:ir.model.fields,field_description:payment_authorize.field_payment_token_authorize_profile
msgid "Authorize.net Profile ID"
msgstr ""
#. module: payment_authorize
+#: code:addons/payment_authorize/models/payment.py:167
+#, python-format
+msgid "Authorize: received data with missing reference (%s) or trans_id (%s) or fingerprint (%s)"
+msgstr ""
+
+#. module: payment_authorize
#: model:ir.ui.view,arch_db:payment_authorize.authorize_s2s_form
msgid "CVC"
msgstr ""
@@ -76,6 +89,12 @@ msgid "Payment Transaction"
msgstr ""
#. module: payment_authorize
+#: code:addons/payment_authorize/models/payment.py:347
+#, python-format
+msgid "The Customer Profile creation in Authorize.NET failed."
+msgstr ""
+
+#. module: payment_authorize
#: model:ir.model.fields,help:payment_authorize.field_payment_token_authorize_profile
msgid "This contains the unique reference for this partner/payment token combination in the Authorize.net backend"
msgstr ""
diff --git a/addons/payment_authorize/models/authorize_request.py b/addons/payment_authorize/models/authorize_request.py
index 6eef3ae80cc..f32518ff238 100644
--- a/addons/payment_authorize/models/authorize_request.py
+++ b/addons/payment_authorize/models/authorize_request.py
@@ -63,7 +63,7 @@ class AuthorizeAPI():
response = strip_ns(response, XMLNS)
if response.find('messages/resultCode').text == 'Error':
messages = map(lambda m: m.text, response.findall('messages/message/text'))
- raise ValidationError('Authorize.net Error Message(s):\n %s' % '\n'.join(messages))
+ raise ValidationError(_('Authorize.net Error Message(s):\n %s') % '\n'.join(messages))
return response
def _base_tree(self, requestType):
diff --git a/addons/payment_authorize/models/payment.py b/addons/payment_authorize/models/payment.py
index 4eee88524df..232d73b2a50 100644
--- a/addons/payment_authorize/models/payment.py
+++ b/addons/payment_authorize/models/payment.py
@@ -164,7 +164,7 @@ class TxAuthorize(models.Model):
transaction record. """
reference, trans_id, fingerprint = data.get('x_invoice_num'), data.get('x_trans_id'), data.get('x_MD5_Hash')
if not reference or not trans_id or not fingerprint:
- error_msg = 'Authorize: received data with missing reference (%s) or trans_id (%s) or fingerprint (%s)' % (reference, trans_id, fingerprint)
+ error_msg = _('Authorize: received data with missing reference (%s) or trans_id (%s) or fingerprint (%s)') % (reference, trans_id, fingerprint)
_logger.info(error_msg)
raise ValidationError(error_msg)
tx = self.search([('reference', '=', reference)])
@@ -343,6 +343,6 @@ class PaymentToken(models.Model):
'acquirer_ref': res.get('payment_profile_id'),
}
else:
- raise ValidationError('The Customer Profile creation in Authorize.NET failed.')
+ raise ValidationError(_('The Customer Profile creation in Authorize.NET failed.'))
else:
return values
diff --git a/addons/payment_paypal/views/payment_paypal_templates.xml b/addons/payment_paypal/views/payment_paypal_templates.xml
index 495aac7158e..9ba50a2b249 100644
--- a/addons/payment_paypal/views/payment_paypal_templates.xml
+++ b/addons/payment_paypal/views/payment_paypal_templates.xml
@@ -20,6 +20,8 @@
<input type="hidden" name="first_name" t-att-value="first_name"/>
<input type="hidden" name="last_name" t-att-value="last_name"/>
<input type="hidden" name="zip" t-att-value="zip_code"/>
+ <input t-if='state' type='hidden' name="state"
+ t-att-value='state'/>
<!-- after payment parameters -->
<input t-if='custom' type='hidden' name="custom"
t-att-value='custom'/>
diff --git a/addons/payment_sips/__manifest__.py b/addons/payment_sips/__manifest__.py
index a8c608d8774..6039f962009 100644
--- a/addons/payment_sips/__manifest__.py
+++ b/addons/payment_sips/__manifest__.py
@@ -1,22 +1,8 @@
# -*- encoding: utf-8 -*-
-##############################################################################
-#
-# Copyright Eezee-It
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+# Copyright 2015 Eezee-It
+
{
'name': 'Worldline SIPS',
'version': '1.0',
diff --git a/addons/payment_sips/controllers/main.py b/addons/payment_sips/controllers/main.py
index c5b21fbf517..3af8e2c7b3e 100644
--- a/addons/payment_sips/controllers/main.py
+++ b/addons/payment_sips/controllers/main.py
@@ -1,5 +1,7 @@
# -*- coding: utf-8 -*-
+# Copyright 2015 Eezee-It
+
import json
import logging
import werkzeug
diff --git a/addons/payment_sips/models/payment.py b/addons/payment_sips/models/payment.py
index e9cd4d40e6b..f7024d3b025 100644
--- a/addons/payment_sips/models/payment.py
+++ b/addons/payment_sips/models/payment.py
@@ -1,5 +1,7 @@
# coding: utf-8
+# Copyright 2015 Eezee-It
+
import json
import logging
from hashlib import sha256
diff --git a/addons/point_of_sale/i18n/point_of_sale.pot b/addons/point_of_sale/i18n/point_of_sale.pot
index e3be0ce22a9..77c4a996ec8 100644
--- a/addons/point_of_sale/i18n/point_of_sale.pot
+++ b/addons/point_of_sale/i18n/point_of_sale.pot
@@ -3513,6 +3513,12 @@ msgid "You have to select a pricelist in the sale form !\n"
msgstr ""
#. module: point_of_sale
+#: code:addons/point_of_sale/models/pos_session.py:24
+#, python-format
+msgid "You have to set a Sale Journal for the POS:%s"
+msgstr ""
+
+#. module: point_of_sale
#: model:ir.actions.act_window,help:point_of_sale.product_product_action
msgid "You must define a product for everything you sell through\n"
" the point of sale interface."
diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py
index 4a68468c5a0..acd6d87999e 100644
--- a/addons/point_of_sale/models/pos_order.py
+++ b/addons/point_of_sale/models/pos_order.py
@@ -292,7 +292,8 @@ class PosOrder(models.Model):
taxes = line.tax_ids_after_fiscal_position.filtered(lambda t: t.company_id.id == current_company.id)
if not taxes:
continue
- for tax in taxes.compute_all(line.price_unit * (100.0 - line.discount) / 100.0, cur, line.qty)['taxes']:
+ price = line.price_unit * (1 - (line.discount or 0.0) / 100.0)
+ for tax in taxes.compute_all(price, cur, line.qty)['taxes']:
insert_data('tax', {
'name': _('Tax') + ' ' + tax['name'],
'product_id': line.product_id.id,
diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py
index 22ca547c55d..735d5e3e599 100644
--- a/addons/point_of_sale/models/pos_session.py
+++ b/addons/point_of_sale/models/pos_session.py
@@ -22,6 +22,8 @@ class PosSession(models.Model):
orders = session.order_ids.filtered(lambda order: order.state == 'paid')
journal_id = self.env['ir.config_parameter'].sudo().get_param(
'pos.closing.journal_id_%s' % company_id, default=session.config_id.journal_id.id)
+ if not journal_id:
+ raise UserError(_("You have to set a Sale Journal for the POS:%s") % (session.config_id.name,))
move = self.env['pos.order'].with_context(force_company=company_id)._create_account_move(session.start_at, session.name, int(journal_id), company_id)
orders.with_context(force_company=company_id)._create_account_move_line(session, move)
@@ -121,7 +123,7 @@ class PosSession(models.Model):
action['domain'] = [('id', 'in', pickings.ids)]
return action
- @api.depends('config_id.cash_control')
+ @api.depends('config_id', 'statement_ids')
def _compute_cash_all(self):
for session in self:
session.cash_journal_id = session.cash_register_id = session.cash_control = False
@@ -131,7 +133,7 @@ class PosSession(models.Model):
session.cash_control = True
session.cash_journal_id = statement.journal_id.id
session.cash_register_id = statement.id
- if not session.cash_control:
+ if not session.cash_control and session.state != 'closed':
raise UserError(_("Cash control can only be applied to cash journals."))
@api.constrains('user_id', 'state')
diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js
index 8c4efac4d0e..301b6e667bd 100644
--- a/addons/point_of_sale/static/src/js/screens.js
+++ b/addons/point_of_sale/static/src/js/screens.js
@@ -1447,6 +1447,7 @@ var ReceiptScreenWidget = ScreenWidget.extend({
print_xml: function() {
var env = {
widget: this,
+ pos: this.pos,
order: this.pos.get_order(),
receipt: this.pos.get_order().export_for_printing(),
paymentlines: this.pos.get_order().get_paymentlines()
diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml
index 84cd88591f4..b1292d47d86 100644
--- a/addons/point_of_sale/static/src/xml/pos.xml
+++ b/addons/point_of_sale/static/src/xml/pos.xml
@@ -738,7 +738,7 @@
<t t-if='simple'>
<line>
<left><t t-esc='line.product_name_wrapped[0]' /></left>
- <right><value t-att-value-decimals='pos.currency.decimals'>><t t-esc='line.price_display' /></value></right>
+ <right><value t-att-value-decimals='pos.currency.decimals'><t t-esc='line.price_display' /></value></right>
</line>
<t t-call="XmlReceiptWrappedProductNameLines"/>
</t>
diff --git a/addons/point_of_sale/wizard/pos_payment.xml b/addons/point_of_sale/wizard/pos_payment.xml
index 1889653fb73..a00ad3957db 100644
--- a/addons/point_of_sale/wizard/pos_payment.xml
+++ b/addons/point_of_sale/wizard/pos_payment.xml
@@ -7,7 +7,7 @@
<form string="Pay Order">
<group>
<field name="session_id" invisible="True"/>
- <field name="journal_id" />
+ <field name="journal_id" domain="[('journal_user', '=', True)]"/>
<field name="amount" />
<field name="payment_name"/>
</group>
diff --git a/addons/portal/i18n/portal.pot b/addons/portal/i18n/portal.pot
index a826837ffa1..a6729e5c40a 100644
--- a/addons/portal/i18n/portal.pot
+++ b/addons/portal/i18n/portal.pot
@@ -91,6 +91,12 @@ msgid "Email"
msgstr ""
#. module: portal
+#: code:addons/portal/wizard/portal_wizard.py:130
+#, python-format
+msgid "Group %s is not a portal"
+msgstr ""
+
+#. module: portal
#: model:ir.model.fields,field_description:portal.field_portal_wizard_id
#: model:ir.model.fields,field_description:portal.field_portal_wizard_user_id
msgid "ID"
diff --git a/addons/portal/wizard/portal_wizard.py b/addons/portal/wizard/portal_wizard.py
index 6161cc1de20..0c8206c86f6 100644
--- a/addons/portal/wizard/portal_wizard.py
+++ b/addons/portal/wizard/portal_wizard.py
@@ -127,7 +127,7 @@ class PortalWizardUser(models.TransientModel):
for wizard_user in self.sudo().with_context(active_test=False):
group_portal = wizard_user.wizard_id.portal_id
if not group_portal.is_portal:
- raise UserError('Not a portal: ' + group_portal.name)
+ raise UserError(_('Group %s is not a portal') % group_portal.name)
user = wizard_user.partner_id.user_ids[0] if wizard_user.partner_id.user_ids else None
# update partner email, if a new one was introduced
if wizard_user.partner_id.email != wizard_user.email:
diff --git a/addons/pos_mercury/i18n/pos_mercury.pot b/addons/pos_mercury/i18n/pos_mercury.pot
index 9848ee5058e..2dd02dd8356 100644
--- a/addons/pos_mercury/i18n/pos_mercury.pot
+++ b/addons/pos_mercury/i18n/pos_mercury.pot
@@ -140,6 +140,13 @@ msgid "Could Not Encrypt Response- Call Provider"
msgstr ""
#. module: pos_mercury
+#. openerp-web
+#: code:addons/pos_mercury/static/src/js/pos_mercury.js:357
+#, python-format
+msgid "Could not read card"
+msgstr ""
+
+#. module: pos_mercury
#: model:ir.model.fields,field_description:pos_mercury.field_pos_mercury_configuration_create_uid
#: model:ir.model.fields,field_description:pos_mercury.field_pos_mercury_mercury_transaction_create_uid
msgid "Created by"
@@ -193,6 +200,13 @@ msgstr ""
#. module: pos_mercury
#. openerp-web
+#: code:addons/pos_mercury/static/src/js/pos_mercury.js:638
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: pos_mercury
+#. openerp-web
#: code:addons/pos_mercury/static/src/js/pos_mercury.js:198
#, python-format
msgid "Error Occurred While Decrypting Request"
@@ -595,6 +609,18 @@ msgid "Name of this Mercury configuration"
msgstr ""
#. module: pos_mercury
+#: code:addons/pos_mercury/models/pos_mercury_transaction.py:35
+#, python-format
+msgid "No Mercury configuration associated with the journal."
+msgstr ""
+
+#. module: pos_mercury
+#: code:addons/pos_mercury/models/pos_mercury_transaction.py:23
+#, python-format
+msgid "No opened point of sale session for user %s found"
+msgstr ""
+
+#. module: pos_mercury
#. openerp-web
#: code:addons/pos_mercury/static/src/js/pos_mercury.js:334
#, python-format
diff --git a/addons/pos_mercury/models/pos_mercury_transaction.py b/addons/pos_mercury/models/pos_mercury_transaction.py
index ca392c4d895..cca78872ac5 100644
--- a/addons/pos_mercury/models/pos_mercury_transaction.py
+++ b/addons/pos_mercury/models/pos_mercury_transaction.py
@@ -9,6 +9,7 @@ import ssl
import werkzeug
from odoo import models, api, service
+from odoo.tools.translate import _
from odoo.exceptions import UserError
from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
@@ -19,7 +20,7 @@ class MercuryTransaction(models.Model):
def _get_pos_session(self):
pos_session = self.env['pos.session'].search([('state', '=', 'opened'), ('user_id', '=', self.env.uid)], limit=1)
if not pos_session:
- raise UserError("No POS session")
+ raise UserError(_("No opened point of sale session for user %s found") % self.env.user.name)
pos_session.login()
@@ -31,7 +32,7 @@ class MercuryTransaction(models.Model):
if journal and journal.pos_mercury_config_id:
return journal.pos_mercury_config_id
else:
- raise UserError("No Mercury configuration associated with the journal.")
+ raise UserError(_("No Mercury configuration associated with the journal."))
def _setup_request(self, data):
# todo: in master make the client include the pos.session id and use that
diff --git a/addons/pos_mercury/static/src/js/pos_mercury.js b/addons/pos_mercury/static/src/js/pos_mercury.js
index 20e602c7aa2..3a1f47b5ee2 100644
--- a/addons/pos_mercury/static/src/js/pos_mercury.js
+++ b/addons/pos_mercury/static/src/js/pos_mercury.js
@@ -354,7 +354,7 @@ PaymentScreenWidget.include({
if (! decodedMagtek) {
this.gui.show_popup('error',{
- 'title': 'Could not read card',
+ 'title': _t('Could not read card'),
'body': _t('This can be caused by a badly executed swipe or by not having your keyboard layout set to US QWERTY (not US International).'),
});
return;
@@ -635,7 +635,7 @@ PaymentScreenWidget.include({
if (already_swipe_pending) {
this.gui.show_popup('error',{
- 'title': 'Error',
+ 'title': _t('Error'),
'body': _t('One credit card swipe already pending.'),
});
} else {
diff --git a/addons/product/models/product_attribute.py b/addons/product/models/product_attribute.py
index bdedd9d7f9d..20465d47c49 100644
--- a/addons/product/models/product_attribute.py
+++ b/addons/product/models/product_attribute.py
@@ -76,7 +76,7 @@ class ProductAttributevalue(models.Model):
@api.multi
def _variant_name(self, variable_attributes):
- return ", ".join([v.name for v in self.sorted(key=lambda r: r.name) if v.attribute_id in variable_attributes])
+ return ", ".join([v.name for v in self.sorted(key=lambda r: r.attribute_id.name) if v.attribute_id in variable_attributes])
class ProductAttributePrice(models.Model):
diff --git a/addons/product/models/product_uom.py b/addons/product/models/product_uom.py
index 23acd5a5294..d4a5cd422f0 100644
--- a/addons/product/models/product_uom.py
+++ b/addons/product/models/product_uom.py
@@ -90,6 +90,8 @@ class ProductUoM(models.Model):
@api.multi
def _compute_quantity(self, qty, to_unit, round=True, rounding_method='UP'):
+ if not self:
+ return qty
self.ensure_one()
if self.category_id.id != to_unit.category_id.id:
if self._context.get('raise-exception', True):
diff --git a/addons/product/views/product_views.xml b/addons/product/views/product_views.xml
index 7c245ff55dd..b5389153168 100644
--- a/addons/product/views/product_views.xml
+++ b/addons/product/views/product_views.xml
@@ -214,10 +214,10 @@
<field name="currency_id" invisible='1'/>
</group>
<group name="weight">
- <group name="weight" string="Weights">
- <label for="volume"/>
+ <group name="weight" string="Weights" attrs="{'invisible':[('type', 'not in', ['product', 'consu'])]}">
+ <label for="volume"/>
<div class="o_row">
- <field digits="(14, 3)" name="volume"/>
+ <field name="volume"/>
<span>m³</span>
</div>
<label for="weight"/>
diff --git a/addons/product_margin/views/product_product_views.xml b/addons/product_margin/views/product_product_views.xml
index c229f770eb9..8612b355a1d 100644
--- a/addons/product_margin/views/product_product_views.xml
+++ b/addons/product_margin/views/product_product_views.xml
@@ -7,8 +7,7 @@
<field name="arch" type="xml">
<graph string="Product Margins" type="bar">
<field name="product_tmpl_id"/>
- <field name="turnover" operator="+"/>
- <field name="total_cost" operator="+"/>
+ <field name="total_margin" type="measure" operator="+"/>
</graph>
</field>
</record>
@@ -73,7 +72,7 @@
<field name="sales_gap" sum="Sales Gap"/>
<field name="total_cost" sum="Total Cost"/>
<field name="purchase_num_invoiced" string="# Purchased"/>
- <field name="total_margin"/>
+ <field name="total_margin" sum="Total Margin"/>
<field name="expected_margin"/>
<field name="total_margin_rate" widget="progressbar"/>
<field name="expected_margin_rate" widget="progressbar"/>
diff --git a/addons/project/views/project_views.xml b/addons/project/views/project_views.xml
index eeba7d224cc..118bb860b61 100644
--- a/addons/project/views/project_views.xml
+++ b/addons/project/views/project_views.xml
@@ -333,7 +333,7 @@ action = model.activate_sample_project()
<field name="res_model">project.project</field>
<field name="view_type">form</field>
<field name="domain">[]</field>
- <field name="view_mode">list,form</field>
+ <field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_project_project_filter"/>
<field name="context">{}</field>
<field name="help" type="html">
diff --git a/addons/purchase/models/account_invoice.py b/addons/purchase/models/account_invoice.py
index 9c1cf48312c..31c1c948d5c 100644
--- a/addons/purchase/models/account_invoice.py
+++ b/addons/purchase/models/account_invoice.py
@@ -75,6 +75,8 @@ class AccountInvoice(models.Model):
new_lines += new_line
self.invoice_line_ids += new_lines
+ self.payment_term_id = self.purchase_id.payment_term_id
+ self.env.context = dict(self.env.context, from_purchase_order_change=True)
self.purchase_id = False
return {}
@@ -92,7 +94,10 @@ class AccountInvoice(models.Model):
@api.onchange('partner_id', 'company_id')
def _onchange_partner_id(self):
+ payment_term_id = self.env.context.get('from_purchase_order_change') and self.payment_term_id or False
res = super(AccountInvoice, self)._onchange_partner_id()
+ if payment_term_id:
+ self.payment_term_id = payment_term_id
if not self.env.context.get('default_journal_id') and self.partner_id and self.currency_id and\
self.type in ['in_invoice', 'in_refund'] and\
self.currency_id != self.partner_id.property_purchase_currency_id:
@@ -144,6 +149,7 @@ class AccountInvoice(models.Model):
valuation_price_unit = i_line.product_id.uom_id._compute_price(i_line.product_id.standard_price, i_line.uom_id)
if i_line.product_id.cost_method != 'standard' and i_line.purchase_line_id:
#for average/fifo/lifo costing method, fetch real cost price from incomming moves
+ valuation_price_unit = i_line.purchase_line_id.product_uom._compute_price(i_line.purchase_line_id.price_unit, i_line.uom_id)
stock_move_obj = self.env['stock.move']
valuation_stock_move = stock_move_obj.search([('purchase_line_id', '=', i_line.purchase_line_id.id), ('state', '=', 'done')])
if valuation_stock_move:
@@ -155,7 +161,7 @@ class AccountInvoice(models.Model):
valuation_price_unit = valuation_price_unit_total / valuation_total_qty
valuation_price_unit = i_line.product_id.uom_id._compute_price(valuation_price_unit, i_line.uom_id)
if inv.currency_id.id != company_currency.id:
- valuation_price_unit = company_currency.with_context(date=inv.date_invoice).compute(valuation_price_unit, inv.currency_id)
+ valuation_price_unit = company_currency.with_context(date=inv.date_invoice).compute(valuation_price_unit, inv.currency_id, round=False)
if valuation_price_unit != i_line.price_unit and line['price_unit'] == i_line.price_unit and acc:
# price with discount and without tax included
price_unit = i_line.price_unit * (1 - (i_line.discount or 0.0) / 100.0)
diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py
index 4d1ad503c31..6eaa3161eb6 100644
--- a/addons/purchase/models/purchase.py
+++ b/addons/purchase/models/purchase.py
@@ -578,6 +578,11 @@ class PurchaseOrderLine(models.Model):
msg += _("Billed Quantity") + ": %s <br/></li>" % (line.qty_invoiced,)
msg += "</ul>"
order.message_post(body=msg)
+ # Update expectged date of corresponding moves
+ if 'date_planned' in values:
+ self.env['stock.move'].search([
+ ('purchase_line_id', 'in', self.ids), ('state', '!=', 'done')
+ ]).write({'date_expected': values['date_planned']})
result = super(PurchaseOrderLine, self).write(values)
if orders:
orders._create_picking()
@@ -986,6 +991,21 @@ class ProcurementOrder(models.Model):
"""
return suppliers[0]
+ def _make_po_get_domain(self, partner):
+ gpo = self.rule_id.group_propagation_option
+ group = (gpo == 'fixed' and self.rule_id.group_id) or \
+ (gpo == 'propagate' and self.group_id) or False
+
+ domain = (
+ ('partner_id', '=', partner.id),
+ ('state', '=', 'draft'),
+ ('picking_type_id', '=', self.rule_id.picking_type_id.id),
+ ('company_id', '=', self.company_id.id),
+ ('dest_address_id', '=', self.partner_dest_id.id))
+ if group:
+ domain += (('group_id', '=', group.id),)
+ return domain
+
@api.multi
def make_po(self):
cache = {}
@@ -999,18 +1019,7 @@ class ProcurementOrder(models.Model):
supplier = procurement._make_po_select_supplier(suppliers)
partner = supplier.name
- gpo = procurement.rule_id.group_propagation_option
- group = (gpo == 'fixed' and procurement.rule_id.group_id) or \
- (gpo == 'propagate' and procurement.group_id) or False
-
- domain = (
- ('partner_id', '=', partner.id),
- ('state', '=', 'draft'),
- ('picking_type_id', '=', procurement.rule_id.picking_type_id.id),
- ('company_id', '=', procurement.company_id.id),
- ('dest_address_id', '=', procurement.partner_dest_id.id))
- if group:
- domain += (('group_id', '=', group.id),)
+ domain = procurement._make_po_get_domain(partner)
if domain in cache:
po = cache[domain]
diff --git a/addons/purchase/views/purchase_views.xml b/addons/purchase/views/purchase_views.xml
index df918b60dd1..c5f7d88ffef 100644
--- a/addons/purchase/views/purchase_views.xml
+++ b/addons/purchase/views/purchase_views.xml
@@ -321,7 +321,7 @@
<separator/>
<filter name="not_invoiced" string="Waiting Bills" domain="[('invoice_status','=', 'to invoice')]" help="Purchase orders that include lines not invoiced."/>
<filter name="invoiced" string="Bills Received" domain="[('invoice_status','=', 'invoiced')]" help="Purchase orders that have been invoiced."/>
- <filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
+ <filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<separator/>
<filter string="My Activities" name="activities_my"
domain="[('activity_ids.user_id', '=', uid)]"/>
diff --git a/addons/purchase_requisition/models/purchase_requisition.py b/addons/purchase_requisition/models/purchase_requisition.py
index aefb01460ce..084423847a3 100644
--- a/addons/purchase_requisition/models/purchase_requisition.py
+++ b/addons/purchase_requisition/models/purchase_requisition.py
@@ -189,7 +189,7 @@ class PurchaseOrder(models.Model):
# Compute taxes
if fpos:
- taxes_ids = fpos.map_tax(line.product_id.supplier_taxes_id.filtered(lambda tax: tax.company_id == requisition.company_id))
+ taxes_ids = fpos.map_tax(line.product_id.supplier_taxes_id.filtered(lambda tax: tax.company_id == requisition.company_id)).ids
else:
taxes_ids = line.product_id.supplier_taxes_id.filtered(lambda tax: tax.company_id == requisition.company_id).ids
diff --git a/addons/report/static/src/less/layout_background.less b/addons/report/static/src/less/layout_background.less
index f00fec6b33e..fbbd6e19115 100644
--- a/addons/report/static/src/less/layout_background.less
+++ b/addons/report/static/src/less/layout_background.less
@@ -34,7 +34,7 @@
background-size: cover;
background-position: bottom center;
background-repeat: no-repeat;
- min-height: 920px;
+ min-height: 900px;
thead tr th, h2 {
color: @odoo-brand-primary;
}
diff --git a/addons/sale/models/account_invoice.py b/addons/sale/models/account_invoice.py
index 815fa85c77d..57e2dc7d70a 100644
--- a/addons/sale/models/account_invoice.py
+++ b/addons/sale/models/account_invoice.py
@@ -89,6 +89,9 @@ class AccountInvoice(models.Model):
self.ensure_one()
return self.partner_shipping_id.id or super(AccountInvoice, self).get_delivery_partner_id()
+ def _get_refund_common_fields(self):
+ return super(AccountInvoice, self)._get_refund_common_fields() + ['team_id', 'partner_shipping_id']
+
class AccountInvoiceLine(models.Model):
_inherit = 'account.invoice.line'
_order = 'invoice_id, layout_category_id, sequence, id'
diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py
index 81ddeea08d8..0f85ebc7d34 100644
--- a/addons/sale/models/sale.py
+++ b/addons/sale/models/sale.py
@@ -53,7 +53,7 @@ class SaleOrder(models.Model):
# Search for invoices which have been 'cancelled' (filter_refund = 'modify' in
# 'account.invoice.refund')
# use like as origin may contains multiple references (e.g. 'SO01, SO02')
- refunds = invoice_ids.search([('origin', 'like', order.name)])
+ refunds = invoice_ids.search([('origin', 'like', order.name)]).filtered(lambda r: r.type in ['out_invoice', 'out_refund'])
invoice_ids |= refunds.filtered(lambda r: order.name in [origin.strip() for origin in r.origin.split(',')])
# Search for refunds as well
refund_ids = self.env['account.invoice'].browse()
diff --git a/addons/sale/tests/test_sale_order.py b/addons/sale/tests/test_sale_order.py
index 64805ca5b7e..f319b00b093 100644
--- a/addons/sale/tests/test_sale_order.py
+++ b/addons/sale/tests/test_sale_order.py
@@ -133,4 +133,4 @@ class TestSaleOrder(TestSale):
inv.action_invoice_open()
sol = so.order_line.filtered(lambda l: l.product_id == serv_cost)
self.assertTrue(sol, 'Sale: cost invoicing does not add lines when confirming vendor invoice')
- self.assertTrue(sol.price_unit == 160 and sol.qty_delivered == 2 and sol.product_uom_qty == sol.qty_invoiced == 0, 'Sale: line is wrong after confirming vendor invoice')
+ self.assertEquals((sol.price_unit, sol.qty_delivered, sol.product_uom_qty, sol.qty_invoiced), (160, 2, 0, 0), 'Sale: line is wrong after confirming vendor invoice')
diff --git a/addons/sale_stock/models/stock.py b/addons/sale_stock/models/stock.py
index 41d1c3b0d13..f3137623aac 100644
--- a/addons/sale_stock/models/stock.py
+++ b/addons/sale_stock/models/stock.py
@@ -33,7 +33,7 @@ class StockMove(models.Model):
for move in self:
if move.picking_id and move.picking_id.group_id:
picking = move.picking_id
- order = self.env['sale.order'].search([('procurement_group_id', '=', picking.group_id.id)])
+ order = self.env['sale.order'].sudo().search([('procurement_group_id', '=', picking.group_id.id)])
picking.message_post_with_view(
'mail.message_origin_link',
values={'self': picking, 'origin': order},
diff --git a/addons/stock/models/procurement.py b/addons/stock/models/procurement.py
index 1e6956b2ba6..6eb41e45e5c 100644
--- a/addons/stock/models/procurement.py
+++ b/addons/stock/models/procurement.py
@@ -315,6 +315,8 @@ class ProcurementOrder(models.Model):
substract_quantity = location_orderpoints.subtract_procurements_from_orderpoints()
for group in location_data['groups']:
+ if group.get('from_date'):
+ product_context['from_date'] = group['from_date'].strftime(DEFAULT_SERVER_DATETIME_FORMAT)
if group['to_date']:
product_context['to_date'] = group['to_date'].strftime(DEFAULT_SERVER_DATETIME_FORMAT)
product_quantity = location_data['products'].with_context(product_context)._product_available()
diff --git a/addons/stock/models/product.py b/addons/stock/models/product.py
index a661169296f..c3386476adb 100644
--- a/addons/stock/models/product.py
+++ b/addons/stock/models/product.py
@@ -254,11 +254,11 @@ class Product(models.Model):
# TDE FIXME: should probably clean the search methods
# to prevent sql injections
if field not in ('qty_available', 'virtual_available', 'incoming_qty', 'outgoing_qty'):
- raise UserError('Invalid domain left operand')
+ raise UserError(_('Invalid domain left operand %s') % field)
if operator not in ('<', '>', '=', '!=', '<=', '>='):
- raise UserError('Invalid domain operator')
+ raise UserError(_('Invalid domain operator %s') % operator)
if not isinstance(value, (float, int)):
- raise UserError('Invalid domain right operand')
+ raise UserError(_('Invalid domain right operand %s') % value)
# TODO: Still optimization possible when searching virtual quantities
ids = []
diff --git a/addons/stock/models/stock_incoterms.py b/addons/stock/models/stock_incoterms.py
index 0d8a1258fbf..c315e36abe5 100644
--- a/addons/stock/models/stock_incoterms.py
+++ b/addons/stock/models/stock_incoterms.py
@@ -9,7 +9,7 @@ class Incoterms(models.Model):
_description = "Incoterms"
name = fields.Char(
- 'Name', required=True,
+ 'Name', required=True, translate=True,
help="Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices.")
code = fields.Char(
'Code', size=3, required=True,
diff --git a/addons/stock/report/report_deliveryslip.xml b/addons/stock/report/report_deliveryslip.xml
index 014869345c2..c36ba994f7d 100644
--- a/addons/stock/report/report_deliveryslip.xml
+++ b/addons/stock/report/report_deliveryslip.xml
@@ -19,9 +19,6 @@
<div t-field="o.partner_id"
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True}'/>
</div>
- <div t-if="not (o.move_lines and o.move_lines[0].partner_id) and o.partner_id" name="partner_header">
- t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true}'/>
- </div>
</div>
</div>
<h2>
diff --git a/addons/stock/views/product_views.xml b/addons/stock/views/product_views.xml
index 6fe6c489083..6e783b4b4fb 100644
--- a/addons/stock/views/product_views.xml
+++ b/addons/stock/views/product_views.xml
@@ -118,6 +118,7 @@
</field>
</record>
+ <!-- view common to both template and product -->
<record id="view_template_property_form" model="ir.ui.view">
<field name="name">product.template.stock.property.form.inherit</field>
<field name="model">product.template</field>
@@ -130,13 +131,13 @@
<field name="route_from_categ_ids" widget="many2many_tags" readonly="1" attrs="{'invisible':[('route_from_categ_ids', '=', [])]}"/>
</group>
<group name="group_lots_and_weight">
- <label for="weight" attrs="{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '&gt;', 1)]}"/>
- <div class="o_row" name="weight" attrs="{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '&gt;', 1)]}">
+ <label for="weight" attrs="{'invisible':[('type', 'not in', ['product', 'consu'])]}"/>
+ <div class="o_row" name="weight" attrs="{'invisible':[('type', 'not in', ['product', 'consu'])]}">
<field name="weight"/>
</div>
<field name="tracking" widget="radio" attrs="{'invisible':[('type', 'in', ['service', 'digital'])]}" groups="stock.group_production_lot"/>
- <label for="volume" attrs="{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '&gt;', 1)]}"/>
- <div class="o_row" name="volume" attrs="{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '&gt;', 1)]}">
+ <label for="volume" attrs="{'invisible':[('type', 'not in', ['product', 'consu'])]}"/>
+ <div class="o_row" name="volume" attrs="{'invisible':[('type', 'not in', ['product', 'consu'])]}">
<field name="volume" string="Volume"/>
</div>
</group>
@@ -266,6 +267,7 @@
</field>
</record>
+ <!-- view used for product.product only -->
<record model="ir.ui.view" id="product_form_view_procurement_button">
<field name="name">product.product.procurement</field>
<field name="model">product.product</field>
@@ -336,6 +338,7 @@
</field>
</record>
+ <!-- view used for product.template only -->
<record model="ir.ui.view" id="product_template_form_view_procurement_button">
<field name="name">product.template_procurement</field>
<field name="model">product.template</field>
@@ -397,6 +400,22 @@
class="oe_stat_button" icon="fa-cogs"
groups="stock.group_adv_location"/>
</button>
+
+ <!-- change attrs of fields added in view_template_property_form
+ to restrict the display for templates -->
+ <xpath expr="//label[@for='weight']" position="attributes">
+ <attribute name="attrs">{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '&gt;', 1)]}</attribute>
+ </xpath>
+ <xpath expr="//div[@name='weight']" position="attributes">
+ <attribute name="attrs">{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '&gt;', 1)]}</attribute>
+ </xpath>
+ <xpath expr="//label[@for='volume']" position="attributes">
+ <attribute name="attrs">{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '&gt;', 1)]}</attribute>
+ </xpath>
+ <xpath expr="//div[@name='volume']" position="attributes">
+ <attribute name="attrs">{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '&gt;', 1)]}</attribute>
+ </xpath>
+
</data>
</field>
</record>
diff --git a/addons/stock/views/stock_quant_views.xml b/addons/stock/views/stock_quant_views.xml
index a33039ce7bd..67997c74854 100644
--- a/addons/stock/views/stock_quant_views.xml
+++ b/addons/stock/views/stock_quant_views.xml
@@ -86,7 +86,7 @@
<field name="package_id" groups="stock.group_tracking_lot"/>
<field name="packaging_type_id" invisible="1"/>
<field name="in_date"/>
- <field name="inventory_value"/>
+ <field name="inventory_value" sum="Total"/>
<field name="reservation_id" invisible='1'/>
<field name="propagated_from_id" invisible='1'/>
<field name='company_id' groups="base.group_multi_company"/>
diff --git a/addons/stock_account/models/account_invoice.py b/addons/stock_account/models/account_invoice.py
index aacdd6c7177..6291da2922f 100644
--- a/addons/stock_account/models/account_invoice.py
+++ b/addons/stock_account/models/account_invoice.py
@@ -38,7 +38,7 @@ class AccountInvoice(models.Model):
cacc = accounts['expense'].id
if dacc and cacc:
price_unit = i_line._get_anglo_saxon_price_unit()
- if inv.currency_id.id != company_currency:
+ if inv.currency_id != company_currency:
currency_id = inv.currency_id.id
amount_currency = i_line._get_price(company_currency, price_unit)
else:
@@ -99,6 +99,6 @@ class AccountInvoiceLine(models.Model):
def get_invoice_line_account(self, type, product, fpos, company):
if company.anglo_saxon_accounting and type in ('in_invoice', 'in_refund') and product and product.type == 'product':
accounts = product.product_tmpl_id.get_product_accounts(fiscal_pos=fpos)
- if accounts['stock_input']:
+ if product.categ_id.property_valuation != 'manual_periodic' and accounts['stock_input']:
return accounts['stock_input']
return super(AccountInvoiceLine, self).get_invoice_line_account(type, product, fpos, company)
diff --git a/addons/web/static/src/js/views/list_view_editable.js b/addons/web/static/src/js/views/list_view_editable.js
index 6beb6a7a044..42987a64af1 100644
--- a/addons/web/static/src/js/views/list_view_editable.js
+++ b/addons/web/static/src/js/views/list_view_editable.js
@@ -634,6 +634,7 @@ ListView.include(/** @lends instance.web.ListView# */{
* @return {*}
*/
_next: function (next_record, options) {
+ options = options || {};
next_record = next_record || 'succ';
var self = this;
return this.save_edition().then(function (saveInfo) {
diff --git a/addons/web/static/src/js/views/pivot_view.js b/addons/web/static/src/js/views/pivot_view.js
index 95e8d13e5ff..c40d17b41e2 100644
--- a/addons/web/static/src/js/views/pivot_view.js
+++ b/addons/web/static/src/js/views/pivot_view.js
@@ -201,8 +201,8 @@ var PivotView = View.extend({
this.initial_col_groupby = context.pivot_col_groupby || this.initial_col_groupby;
}
this.main_row.groupbys = group_by.length ? group_by : (context.pivot_row_groupby || this.initial_row_groupby.slice(0));
- this.main_col.groupbys = context.pivot_column_groupby || this.initial_col_groupby.slice(0);
- this.active_measures = context.pivot_measures || this.active_measures;
+ this.main_col.groupbys = context.col_group_by || context.pivot_column_groupby || this.initial_col_groupby.slice(0);
+ this.active_measures = context.measures || context.pivot_measures || this.active_measures;
this.domain = domain;
this.context = context;
diff --git a/addons/web_editor/static/src/js/rte.summernote.js b/addons/web_editor/static/src/js/rte.summernote.js
index 60c096603d8..4ab1e7bed06 100644
--- a/addons/web_editor/static/src/js/rte.summernote.js
+++ b/addons/web_editor/static/src/js/rte.summernote.js
@@ -511,7 +511,12 @@ function prettify_html(html) {
level--;
}
- result += token.trim().replace(/\s+/, ' ');
+ // don't trim inline content (which could change appearance)
+ if (!inline) {
+ token = token.trim();
+ }
+
+ result += token.replace(/\s+/, ' ');
if (inline_level > level) {
result += '\n';
diff --git a/addons/web_editor/static/src/js/snippets.editor.js b/addons/web_editor/static/src/js/snippets.editor.js
index 20a96a91e84..42f2103f95f 100644
--- a/addons/web_editor/static/src/js/snippets.editor.js
+++ b/addons/web_editor/static/src/js/snippets.editor.js
@@ -107,7 +107,7 @@ data.Class = Widget.extend({
return $from.closest(selector, parentNode);
},
all: function ($from) {
- return $from ? $from.find(selector) : $(selector);
+ return $from ? cssFind($from, selector) : $(selector);
},
is: function ($from) {
return $from.is(selector);
@@ -130,15 +130,31 @@ data.Class = Widget.extend({
});
},
all: is_children ? function ($from) {
- return ($from || self.$editable).find(selector);
+ return cssFind($from || self.$editable, selector);
} : function ($from) {
- return $from ? $from.find(selector) : self.$editable.filter(selector).add(self.$editable.find(selector));
+ $from = $from || self.$editable;
+ return $from.filter(selector).add(cssFind($from, selector));
},
is: function ($from) {
return $from.is(selector);
}
};
}
+
+ /**
+ * jQuery find function behavior is:
+ * $('A').find('A B') <=> $('A A B')
+ * The searches behavior to find options' DOM needs to be
+ * $('A').find('A B') <=> $('A B')
+ * This is what this function does.
+ *
+ * @param {jQuery} $from - the jQuery element(s) from which to search
+ * @param {string} selector - the CSS selector to match
+ * @returns {jQuery}
+ */
+ function cssFind($from, selector) {
+ return $from.find('*').filter(selector);
+ }
},
fetch_snippet_templates: function () {
diff --git a/addons/web_editor/static/src/js/transcoder.js b/addons/web_editor/static/src/js/transcoder.js
index 05068972532..6b42e028b3a 100644
--- a/addons/web_editor/static/src/js/transcoder.js
+++ b/addons/web_editor/static/src/js/transcoder.js
@@ -121,6 +121,16 @@ var getMatchedCSSRules = function (a) {
}
});
+ // text-decoration rule is decomposed in -line, -color and -style. This is
+ // however not supported by many browser/mail clients and the editor does
+ // not allow to change -color and -style rule anyway
+ if (style['text-decoration-line']) {
+ style['text-decoration'] = style['text-decoration-line'];
+ delete style['text-decoration-line'];
+ delete style['text-decoration-color'];
+ delete style['text-decoration-style'];
+ }
+
return style;
};
diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py
index c62486d34a0..1e65fd256a8 100644
--- a/addons/website/models/ir_http.py
+++ b/addons/website/models/ir_http.py
@@ -179,8 +179,8 @@ class Http(models.AbstractModel):
nearest_lang = not func and cls.get_nearest_lang(path[1])
url_lang = nearest_lang and path[1]
preferred_lang = ((cook_lang if cook_lang in langs else False)
- or (not is_a_bot and cls.get_nearest_lang(request.lang))
- or request.website.default_lang_code)
+ or request.website.default_lang_code
+ or (not is_a_bot and cls.get_nearest_lang(request.lang)))
request.lang = context['lang'] = nearest_lang or preferred_lang
# if lang in url but not the displayed or default language --> change or remove
diff --git a/addons/website/static/src/less/website.snippets.less b/addons/website/static/src/less/website.snippets.less
index 5f96bbac0e6..cde2501e605 100644
--- a/addons/website/static/src/less/website.snippets.less
+++ b/addons/website/static/src/less/website.snippets.less
@@ -391,6 +391,7 @@ div.carousel {
// Parallax Theme
.parallax {
position: relative;
+ z-index: 0;
.oe_structure {
> :first-child {
diff --git a/addons/website/static/src/less/website.ui.less b/addons/website/static/src/less/website.ui.less
index 8f4732024b4..b515ad40096 100644
--- a/addons/website/static/src/less/website.ui.less
+++ b/addons/website/static/src/less/website.ui.less
@@ -47,4 +47,10 @@ body.o_connected_user {
font-size: 20px;
}
}
+ @media only screen and (max-width: @screen-xs-max) {
+ #oe_applications {
+ position: inherit;
+ z-index: 1002;
+ }
+ }
}
diff --git a/addons/website_blog/static/src/js/contentshare.js b/addons/website_blog/static/src/js/contentshare.js
index 47cd88fc4a7..cfc02470f7f 100644
--- a/addons/website_blog/static/src/js/contentshare.js
+++ b/addons/website_blog/static/src/js/contentshare.js
@@ -22,9 +22,12 @@
popover_content += '<a class="o_share_comment mr12"><i class="fa fa-comment fa-lg mr4 ml4"/></a>';
}
if($('.blog_title, .blog_content').hasClass('js_tweet')){
- var current_url = window.location.href;
- var tweet_selected_text = this.getSelection('string').substring(0,option.maxLength-(current_url.length+option.author_name.length+7));
- var text = encodeURIComponent(_.str.sprintf('\"%s\" --@%s %s', tweet_selected_text, option.author_name, current_url));
+ var tweet = '"%s" - %s';
+ var baseLength = tweet.replace(/%s/g, '').length;
+ // Shorten the selected text to match the tweet max length
+ // Note: all (non-localhost) urls in a tweet have 23 characters https://support.twitter.com/articles/78124
+ var selectedText = this.getSelection('string').substring(0, option.maxLength - baseLength - 23);
+ var text = encodeURIComponent(_.str.sprintf(tweet, selectedText, window.location.href));
popover_content += '<a onclick="window.open(\''+option.shareLink+text+'\',\'_'+option.target+'\',\'location=yes,height=570,width=520,scrollbars=yes,status=yes\')"><i class="ml4 mr4 fa fa-twitter fa-lg"/></a>';
}
return popover_content;
diff --git a/addons/website_blog/static/src/js/website_blog.js b/addons/website_blog/static/src/js/website_blog.js
index 5c2d82f7646..7985e0ebecc 100644
--- a/addons/website_blog/static/src/js/website_blog.js
+++ b/addons/website_blog/static/src/js/website_blog.js
@@ -58,7 +58,7 @@ function shareArticle(event){
$(document).ready(function() {
if ($('.website_blog').length) {
- $(".js_tweet, .js_comment").share({'author_name': $('#blog_author').text()});
+ $(".js_tweet, .js_comment").share({});
$('.cover_footer').on('click', page_transist);
$('a[href^="#blog_content"]').on('click', animate);
$('.o_twitter, .o_facebook, .o_linkedin, .o_google, .o_twitter_complete, .o_facebook_complete, .o_linkedin_complete, .o_google_complete').on('click', shareArticle);
diff --git a/addons/website_form/static/src/js/website_form.js b/addons/website_form/static/src/js/website_form.js
index f94371261d9..38f37a27340 100644
--- a/addons/website_form/static/src/js/website_form.js
+++ b/addons/website_form/static/src/js/website_form.js
@@ -167,13 +167,15 @@ odoo.define('website_form.animation', function (require) {
// Special cases for dates and datetimes
} else if ($(input).hasClass('o_website_form_date')) {
- return !self.is_datetime_valid(input.value, 'date');
+ if (!self.is_datetime_valid(input.value, 'date')) {
+ return true;
+ }
} else if ($(input).hasClass('o_website_form_datetime')) {
- return !self.is_datetime_valid(input.value, 'datetime');
-
- } else {
- return !input.checkValidity();
+ if (!self.is_datetime_valid(input.value, 'datetime')) {
+ return true;
+ }
}
+ return !input.checkValidity();
})
// Update field color if invalid or erroneous
diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py
index c6fc592e3d8..546def6890a 100644
--- a/addons/website_mail/controllers/main.py
+++ b/addons/website_mail/controllers/main.py
@@ -34,6 +34,7 @@ def _message_post_helper(res_model='', res_id=None, message='', token='', token_
else:
if not author_id:
raise NotFound()
+ kw.pop('csrf_token', None)
return record.with_context(mail_create_nosubscribe=nosubscribe).message_post(body=message,
message_type=kw.pop('message_type', "comment"),
subtype=kw.pop('subtype', "mt_comment"),
diff --git a/addons/website_portal_sale/controllers/main.py b/addons/website_portal_sale/controllers/main.py
index a83a15ce6a4..79d5d424313 100644
--- a/addons/website_portal_sale/controllers/main.py
+++ b/addons/website_portal_sale/controllers/main.py
@@ -223,10 +223,10 @@ class website_account(website_account):
partner = request.env['res.users'].browse(request.uid).partner_id
invoices = request.env['account.invoice'].sudo().search_count([('partner_id', '=', partner.id), ('state', 'not in', ['draft', 'cancel'])])
if invoices:
- if (data.get('vat', partner.vat) or False) != partner.vat:
+ if 'vat' in partner and (data['vat'] or False) != (partner.vat or False):
error['vat'] = 'error'
error_message.append(_('Changing VAT number is not allowed once invoices have been issued for your account. Please contact us directly for this operation.'))
- if data.get('name', partner.name) != partner.name:
+ if 'name' in data and (data['name'] or False) != (partner.name or False):
error['name'] = 'error'
error_message.append(_('Changing your name is not allowed once invoices have been issued for your account. Please contact us directly for this operation.'))
return error, error_message
diff --git a/addons/website_quote/models/sale_order.py b/addons/website_quote/models/sale_order.py
index d84b6b6766b..d5f3f2483ab 100644
--- a/addons/website_quote/models/sale_order.py
+++ b/addons/website_quote/models/sale_order.py
@@ -76,6 +76,13 @@ class SaleOrder(models.Model):
(2, 'Immediate after website order validation and save a token'),
], 'Payment', help="Require immediate payment by the customer when validating the order from the website quote")
+ @api.multi
+ def copy(self, default=None):
+ if self.template_id and self.template_id.number_of_days > 0:
+ default = dict(default or {})
+ default['validity_date'] = fields.Date.to_string(datetime.now() + timedelta(self.template_id.number_of_days))
+ return super(SaleOrder, self).copy(default=default)
+
@api.one
def _compute_amount_undiscounted(self):
total = 0.0
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index 407a2e7cd11..1208625bc9f 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -321,7 +321,8 @@ class WebsiteSale(http.Controller):
@http.route(['/shop/change_pricelist/<model("product.pricelist"):pl_id>'], type='http', auth="public", website=True)
def pricelist_change(self, pl_id, **post):
- if request.website.is_pricelist_available(pl_id.id):
+ if (pl_id.selectable or pl_id == request.env.user.partner_id.property_product_pricelist) \
+ and request.website.is_pricelist_available(pl_id.id):
request.session['website_sale_current_pl'] = pl_id.id
request.website.sale_get_order(force_pricelist=pl_id.id)
return request.redirect(request.httprequest.referrer or '/shop')
diff --git a/addons/website_sale/models/product.py b/addons/website_sale/models/product.py
index d5a8f77a72d..d3e1c6b893a 100644
--- a/addons/website_sale/models/product.py
+++ b/addons/website_sale/models/product.py
@@ -19,7 +19,7 @@ class ProductPricelist(models.Model):
return self.env['website'].search([], limit=1)
website_id = fields.Many2one('website', string="website", default=_default_website)
- code = fields.Char(string='E-commerce Promotional Code')
+ code = fields.Char(string='E-commerce Promotional Code', groups="base.group_user")
selectable = fields.Boolean(help="Allow the end user to choose this price list")
def clear_cache(self):
diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py
index 7e4e3c42bcf..15030fc510e 100644
--- a/addons/website_sale/models/sale_order.py
+++ b/addons/website_sale/models/sale_order.py
@@ -71,7 +71,7 @@ class SaleOrder(models.Model):
if order.pricelist_id and order.partner_id:
order_line = order._cart_find_product_line(product.id)
if order_line:
- pu = self.env['account.tax']._fix_tax_included_price(pu, product.taxes_id, order_line.tax_id)
+ pu = self.env['account.tax']._fix_tax_included_price(pu, product.taxes_id, order_line[0].tax_id)
return {
'product_id': product_id,
@@ -228,7 +228,7 @@ class Website(models.Model):
if not pricelists: # no pricelist for this country, or no GeoIP
pricelists |= all_pl.filtered(lambda pl: not show_visible or pl.selectable or pl.id in (current_pl, order_pl))
else:
- pricelists |= all_pl.filtered(lambda pl: not show_visible and pl.code)
+ pricelists |= all_pl.filtered(lambda pl: not show_visible and pl.sudo().code)
# This method is cached, must not return records! See also #8795
return pricelists.ids
@@ -397,6 +397,9 @@ class Website(models.Model):
partner.write({'last_website_so_id': sale_order.id})
if sale_order:
+ # case when user emptied the cart
+ if not request.session.get('sale_order_id'):
+ request.session['sale_order_id'] = sale_order.id
# check for change of pricelist with a coupon
pricelist_id = pricelist_id or partner.property_product_pricelist.id
@@ -435,7 +438,7 @@ class Website(models.Model):
update_pricelist = True
if code and code != sale_order.pricelist_id.code:
- code_pricelist = self.env['product.pricelist'].search([('code', '=', code)], limit=1)
+ code_pricelist = self.env['product.pricelist'].sudo().search([('code', '=', code)], limit=1)
if code_pricelist:
pricelist_id = code_pricelist.id
update_pricelist = True
diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js
index 1df1fcd0e97..6ac948b4fe1 100644
--- a/addons/website_sale/static/src/js/website_sale.js
+++ b/addons/website_sale/static/src/js/website_sale.js
@@ -250,6 +250,7 @@ odoo.define('website_sale.website_sale', function (require) {
if ($(".decimal_precision").length) {
precision = parseInt($(".decimal_precision").last().data('precision'));
+ if (!precision) { precision = 0; } //todo: remove me in master/saas-17
}
var formatted = _.str.sprintf('%.' + precision + 'f', price).split('.');
formatted[0] = utils.insert_thousand_seps(formatted[0]);
diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml
index 6dcff342f5a..0387badeaa8 100644
--- a/addons/website_sale/views/templates.xml
+++ b/addons/website_sale/views/templates.xml
@@ -600,7 +600,7 @@
<span itemprop="price" style="display:none;" t-esc="product.website_price"/>
<span itemprop="priceCurrency" style="display:none;" t-esc="website.currency_id.name"/>
</h4>
- <h4 class="css_non_editable_mode_hidden decimal_precision" t-att-data-precision="product.currency_id.decimal_places">
+ <h4 class="css_non_editable_mode_hidden decimal_precision" t-att-data-precision="str(product.currency_id.decimal_places)">
<span t-field="product.lst_price"
t-options='{
"widget": "monetary",
diff --git a/doc/cla/corporate/acsone.md b/doc/cla/corporate/acsone.md
index 1e64c996e74..cb97dc6b20d 100644
--- a/doc/cla/corporate/acsone.md
+++ b/doc/cla/corporate/acsone.md
@@ -24,3 +24,4 @@ Olivier Laurent olivier.laurent@acsone.eu https://github.com/Olivier-LAURENT
Philippe Schmidt philippe.schmidt@acsone.eu https://github.com/phschmidt
Stéphane Bidoul stephane.bidoul@acsone.eu https://github.com/sbidoul
Thomas Binsfeld thomas.binsfeld@acsone.eu https://github.com/ThomasBinsfeld
+Benjamin Willig benjamin.willig@acsone.eu https://github.com/benwillig
diff --git a/doc/cla/corporate/bloopark.md b/doc/cla/corporate/bloopark.md
index 2664bbe3006..f6eeb53698b 100644
--- a/doc/cla/corporate/bloopark.md
+++ b/doc/cla/corporate/bloopark.md
@@ -18,3 +18,4 @@ Benjamin Bachmann bBachmann@bloopark.de https://github.com/benniphx
Robert Rübner rruebner@bloopark.de https://github.com/rruebner
Florian Fischer ffischer@bloopark.de https://github.com/florianfischer
Mercerdes Scenna mscenna@bloopark.de https://github.com/mscenna
+Andrei Poehlmann andrei.poehlmann90@gmail.com https://github.com/reinka
diff --git a/doc/cla/corporate/eficent.md b/doc/cla/corporate/eficent.md
new file mode 100644
index 00000000000..3723fbf0740
--- /dev/null
+++ b/doc/cla/corporate/eficent.md
@@ -0,0 +1,19 @@
+Spain, 2017-03-21
+
+Eficent Business and IT Consulting Services, S.L. agrees to the terms of the
+Odoo Corporate Contributor License Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Jordi Ballester jordi.ballester@eficent.com https://github.com/jbeficent
+
+List of contributors:
+
+Aarón Henríquez ahenriquez@eficent.com https://github.com/aheficent
+Lois Rilo lois.rilo@eficent.com https://github.com/lreficent
+Gisela Mora gisela.mora@eficent.com https://github.com/gmeficent
+Miquel Raich miquel.raich@eficent.com https://github.com/mreficent
+Jordi Ballester jordi.ballester@eficent.com https://github.com/jbeficent
diff --git a/doc/cla/corporate/iterativo.md b/doc/cla/corporate/iterativo.md
new file mode 100644
index 00000000000..83075996389
--- /dev/null
+++ b/doc/cla/corporate/iterativo.md
@@ -0,0 +1,15 @@
+Dominican Republic, 2017-05-13
+
+iterativo SRL agrees to the terms of the Odoo Corporate Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Edser G. Solís edser@iterativo.do https://github.com/edsersolis
+
+List of contributors:
+
+Gustavo A. Valverde gustavo@iterativo.do https://github.com/gustavovalverde
diff --git a/doc/cla/corporate/landoo.md b/doc/cla/corporate/landoo.md
new file mode 100644
index 00000000000..89c63976560
--- /dev/null
+++ b/doc/cla/corporate/landoo.md
@@ -0,0 +1,16 @@
+Spain, 2017-05-28
+
+LANDOO S.L. agrees to the terms of the Odoo Corporate Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Josean Soroa js@landoo.es https://github.com/js-landoo
+
+List of contributors:
+
+Josean Soroa js@landoo.es https://github.com/js-landoo
+Ignacio Garbizu ig@landoo.es https://github.com/ig-landoo
diff --git a/doc/cla/corporate/maao.md b/doc/cla/corporate/maao.md
new file mode 100644
index 00000000000..efe0f66faab
--- /dev/null
+++ b/doc/cla/corporate/maao.md
@@ -0,0 +1,14 @@
+Kyiv, Ukraine, 2017-05-29
+
+Management and Accouting online llc agrees to the terms of the Odoo Corporate Contributor License Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this declaration.
+
+Signed,
+
+Management and Accouting online llc info@maao.com.ua https://github.com/management-and-acounting-on-line
+
+List of contributors:
+
+Ostap Yakovenko ostap.yakovenko@maao.com.ua https://github.com/OstapYakovenko
+Dmytro Katyukha dmytro.katyukha@maao.com.ua https://github.com/katyukha
diff --git a/doc/cla/corporate/merchise.md b/doc/cla/corporate/merchise.md
new file mode 100644
index 00000000000..829864e2b50
--- /dev/null
+++ b/doc/cla/corporate/merchise.md
@@ -0,0 +1,21 @@
+Havana, 2017-05-05
+
+Merchise Autrement (https://github.com/merchise/ and
+https://github.com/merchise-autrement/) agrees to the terms of the Odoo
+Corporate Contributor License Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Manuel Vázquez Acosta manuel@merchise.org https://github.com/mvaled
+
+List of contributors (some members don't have a github account yet):
+
+Manuel Vázquez Acosta manuel@merchise.org https://github.com/mvaled
+Johanny Rivera johanny@merchise.org
+Henrik Pestano henrik@merchise.org https://github.com/hpestano
+Oraldo Jacinto Simón oraldo@merchise.org
+Sergio Valdés sergiov@merchise.org
+Medardo Rodríguez med@merchise.org https://github.com/med-merchise
diff --git a/doc/cla/corporate/vauxoo.md b/doc/cla/corporate/vauxoo.md
index d651412fb9d..036e1a63620 100644
--- a/doc/cla/corporate/vauxoo.md
+++ b/doc/cla/corporate/vauxoo.md
@@ -33,3 +33,7 @@ Jose Angel Fentanez Delfin joseangel@vauxoo.com https://github.com/Angelfentanez
Osval Reyes osval@vauxoo.com https://github.com/osvalr
Jose Suniaga josemiguel@vauxoo.com https://github.com/suniagajose
Luis González lgonzalez@vauxoo.com https://github.com/luisg123v
+Oriana Maita oriana@vauxoo.com https://github.com/maitaoriana
+Gabriela Mogollon gmogollon@vauxoo.com https://github.com/GavyMG
+Jesus Zapata jesus@vauxoo.com https://github.com/JesusZapata
+Germana Oliveira germana@vauxoo.com https://github.com/goliveirab \ No newline at end of file
diff --git a/doc/cla/individual/Giuliano69.md b/doc/cla/individual/Giuliano69.md
new file mode 100644
index 00000000000..93a358ad260
--- /dev/null
+++ b/doc/cla/individual/Giuliano69.md
@@ -0,0 +1,11 @@
+Italy, 1st March 2017
+
+I hereby agree to the terms of the Odoo Individual Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Giuliano Lotta giuliano.lotta@gmail.com https://github.com/Giuliano69
diff --git a/doc/cla/individual/bima_wijaya.md b/doc/cla/individual/bima_wijaya.md
new file mode 100644
index 00000000000..490d5f34e0a
--- /dev/null
+++ b/doc/cla/individual/bima_wijaya.md
@@ -0,0 +1,10 @@
+Indonesia, 2017-05-19
+
+I hereby agree to the terms of the Odoo Individual Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+Bima Jati Wijaya bimajatiwijaya@gmail.com https://github.com/bimajatiwijaya
diff --git a/doc/cla/individual/celm1990.md b/doc/cla/individual/celm1990.md
new file mode 100644
index 00000000000..245c0e93869
--- /dev/null
+++ b/doc/cla/individual/celm1990.md
@@ -0,0 +1,11 @@
+Ecuador, 2017-05-19
+
+I hereby agree to the terms of the Odoo Individual Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Carlos Lopez celm1990@hotmail.com https://github.com/celm1990
diff --git a/doc/cla/individual/sum1201.md b/doc/cla/individual/sum1201.md
new file mode 100644
index 00000000000..f5535bcf050
--- /dev/null
+++ b/doc/cla/individual/sum1201.md
@@ -0,0 +1,11 @@
+Chinese, 2017-05-25
+
+I hereby agree to the terms of the Odoo Individual Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Lin Jun sum1201@gmail.com https://github.com/sum1201
diff --git a/doc/reference/views.rst b/doc/reference/views.rst
index 853104bfaa6..8d9b231b2b1 100644
--- a/doc/reference/views.rst
+++ b/doc/reference/views.rst
@@ -819,6 +819,12 @@ attributes:
the list view)
``class``
adds HTML classes to the root HTML element of the Kanban view
+``group_create``
+ whether the "Add a new column" bar is visible or not. Default: true.
+``group_delete``
+ whether groups can be deleted via the context menu. Default: true.
+``group_edit``
+ whether groups can be edited via the context menu. Default: true.
``quick_create``
whether it should be possible to create records without switching to the
form view. By default, ``quick_create`` is enabled when the Kanban view is
@@ -930,11 +936,8 @@ Javascript API
caching entirely
:returns: an image URL
- .. js:function:: kanban_text_ellipsis(string[, size=160])
-
- clips text beyond the specified size and appends an ellipsis to it. Can
- be used to display the initial part of potentially very long fields
- (e.g. descriptions) without the risk of unwieldy cards
+ .. warning::
+ ``kanban_text_ellipsis`` has been removed in Odoo 9. CSS ``text-overflow`` should be used instead.
.. _reference/views/calendar:
diff --git a/doc/setup/install.rst b/doc/setup/install.rst
index 389050dd4bb..de21d6c53ab 100644
--- a/doc/setup/install.rst
+++ b/doc/setup/install.rst
@@ -335,9 +335,15 @@ For example:
$ odoo-bin --addons-path=~/src/custom_modules,~/src/enterprise,~/src/odoo/addons
.. warning:: The Enterprise git repository **does not contain the full Odoo
- source code**. You need to clone both the Community and Enterprise repository to
- have a working Odoo installation. The Download_ page contains the entire
- source code but is not updateable as easily.
+ source code**. It is only a collection of extra add-ons. The main server
+ code is in the Community version. Running the Enterprise version actually
+ means running the server from the Community version with the addons-path option
+ set to the folder with the Enterprise version.
+
+ You need to clone both the Community and Enterprise repository to have a working
+ Odoo installation. The Download_ page contains the entire source code but is not
+ updateable as easily.
+
Installing dependencies
diff --git a/odoo/addons/base/ir/ir_translation.py b/odoo/addons/base/ir/ir_translation.py
index 4cbd41b013a..2cebb72e5fa 100644
--- a/odoo/addons/base/ir/ir_translation.py
+++ b/odoo/addons/base/ir/ir_translation.py
@@ -542,6 +542,9 @@ class IrTranslation(models.Model):
# (trans.value -> trans.src) gives the original value back
value0 = field.translate(lambda term: None, record[fname])
value1 = field.translate({trans.src: trans.value}.get, value0)
+ # don't check the reverse if no translation happened
+ if value0 == value1:
+ continue
value2 = field.translate({trans.value: trans.src}.get, value1)
if value2 != value0:
raise ValidationError(_("Translation is not valid:\n%s") % trans.value)
diff --git a/odoo/addons/base/ir/ir_ui_view.py b/odoo/addons/base/ir/ir_ui_view.py
index 8414d933f9b..4d890494aa8 100644
--- a/odoo/addons/base/ir/ir_ui_view.py
+++ b/odoo/addons/base/ir/ir_ui_view.py
@@ -457,7 +457,8 @@ actual arch.
# cannot currently use relationships that are
# not required. The root cause is the INNER JOIN
# used to implement it.
- views = self.search(conditions + [('model_ids.module', 'in', tuple(self.pool._init_modules))])
+ modules = tuple(self.pool._init_modules) + (self._context.get('install_mode_data', {}).get('module'),)
+ views = self.search(conditions + [('model_ids.module', 'in', modules)])
views = self.search(conditions + [('id', 'in', list(self._context.get('check_view_ids') or (0,)) + map(int, views))])
else:
views = self.search(conditions)
diff --git a/odoo/addons/base/res/res.country.state.csv b/odoo/addons/base/res/res.country.state.csv
index 877834a77ca..c48ed49141d 100644
--- a/odoo/addons/base/res/res.country.state.csv
+++ b/odoo/addons/base/res/res.country.state.csv
@@ -436,7 +436,7 @@ state_es_cu,es,"Cuenca","CU"
state_es_gi,es,"Girona (Gerona)","GI"
state_es_gr,es,"Granada","GR"
state_es_gu,es,"Guadalajara","GU"
-state_es_ss,es,"Guipuzkoa (Guipúzcoa)","SS"
+state_es_ss,es,"Gipuzkoa (Guipúzcoa)","SS"
state_es_h,es,"Huelva","H"
state_es_hu,es,"Huesca","HU"
state_es_j,es,"Jaén","J"
diff --git a/odoo/addons/base/tests/test_translate.py b/odoo/addons/base/tests/test_translate.py
index 1cd833c9df6..de607798a82 100644
--- a/odoo/addons/base/tests/test_translate.py
+++ b/odoo/addons/base/tests/test_translate.py
@@ -205,10 +205,16 @@ class TranslationToolsTestCase(unittest.TestCase):
self.assertEquals(result, expect)
def test_translate_html(self):
+ """ Test html_translate(). """
+ source = """<blockquote>A <h2>B</h2> C</blockquote>"""
+ result = html_translate(lambda term: term, source)
+ self.assertEquals(result, source)
+
+ def test_translate_html_i(self):
""" Test xml_translate() and html_translate() with <i> elements. """
- source = """<i class="fa-check"></i>"""
+ source = """<p>A <i class="fa-check"></i> B</p>"""
result = xml_translate(lambda term: term, source)
- self.assertEquals(result, """<i class="fa-check"/>""")
+ self.assertEquals(result, """<p>A <i class="fa-check"/> B</p>""")
result = html_translate(lambda term: term, source)
self.assertEquals(result, source)
diff --git a/odoo/models.py b/odoo/models.py
index cb9f32c9c94..be607bb72e2 100644
--- a/odoo/models.py
+++ b/odoo/models.py
@@ -3818,7 +3818,7 @@ class BaseModel(object):
del vals['source'] # remove source to avoid triggering _set_src
del vals['module'] # duplicated vals is not linked to any module
vals['res_id'] = target_id
- if vals['lang'] == old.env.lang:
+ if vals['lang'] == old.env.lang and field.translate is True:
# 'source' to force the call to _set_src
# 'value' needed if value is changed in copy(), want to see the new_value
vals['source'] = old_wo_lang[name]
diff --git a/odoo/tools/translate.py b/odoo/tools/translate.py
index c947ae5e75d..fbef3443929 100644
--- a/odoo/tools/translate.py
+++ b/odoo/tools/translate.py
@@ -17,7 +17,7 @@ from datetime import datetime
from os.path import join
from babel.messages import extract
-from lxml import etree
+from lxml import etree, html
import odoo
from odoo.tools import config
@@ -153,8 +153,13 @@ avoid_pattern = re.compile(r"\s*<!DOCTYPE", re.IGNORECASE | re.MULTILINE | re.UN
node_pattern = re.compile(r"<[^>]*>(.*)</[^<]*>", re.DOTALL | re.MULTILINE | re.UNICODE)
-def translate_xml_node(node, callback, method, parser=None):
- """ Return the translation of the given XML/HTML node. """
+def translate_xml_node(node, callback, parse, serialize):
+ """ Return the translation of the given XML/HTML node.
+
+ :param callback: callback(text) returns translated text or None
+ :param parse: parse(text) returns a node (text is unicode)
+ :param serialize: serialize(node) returns unicode text
+ """
def nonspace(text):
return bool(text) and not text.isspace()
@@ -182,7 +187,7 @@ def translate_xml_node(node, callback, method, parser=None):
def translate_content(node):
""" Return ``node`` with its content translated inline. """
# serialize the node that contains the stuff to translate
- text = etree.tostring(node, method=method, encoding='utf8').decode('utf8')
+ text = serialize(node)
# retrieve the node's content and translate it
match = node_pattern.match(text)
trans = translate_text(match.group(1))
@@ -190,7 +195,7 @@ def translate_xml_node(node, callback, method, parser=None):
# replace the content, and convert it back to an XML node
text = text[:match.start(1)] + trans + text[match.end(1):]
try:
- node = etree.fromstring(encode(text), parser=parser)
+ node = parse(text)
except etree.ParseError:
# fallback: escape the translation as text
node = etree.Element(node.tag, node.attrib, node.nsmap)
@@ -275,6 +280,21 @@ def translate_xml_node(node, callback, method, parser=None):
return node
+def parse_xml(text):
+ return etree.fromstring(encode(text))
+
+def serialize_xml(node):
+ return etree.tostring(node, method='xml', encoding='utf8').decode('utf8')
+
+_HTML_PARSER = etree.HTMLParser(encoding='utf8')
+
+def parse_html(text):
+ return html.fragment_fromstring(encode(text), parser=_HTML_PARSER)
+
+def serialize_html(node):
+ return etree.tostring(node, method='html', encoding='utf8').decode('utf8')
+
+
def xml_translate(callback, value):
""" Translate an XML value (string), using `callback` for translating text
appearing in `value`.
@@ -283,17 +303,15 @@ def xml_translate(callback, value):
return value
try:
- root = etree.fromstring(encode(value))
- result = translate_xml_node(root, callback, 'xml')
- return etree.tostring(result, method='xml', encoding='utf8').decode('utf8')
+ root = parse_xml(value)
+ result = translate_xml_node(root, callback, parse_xml, serialize_xml)
+ return serialize_xml(result)
except etree.ParseError:
# fallback for translated terms: use an HTML parser and wrap the term
- wrapped = "<div>%s</div>" % encode(value)
- root = etree.fromstring(wrapped, etree.HTMLParser(encoding='utf-8'))
- # root is html > body > div; translate the div only
- result = translate_xml_node(root[0][0], callback, 'xml')
+ root = parse_html("<div>%s</div>" % value)
+ result = translate_xml_node(root, callback, parse_xml, serialize_xml)
# remove tags <div> and </div> from result
- return etree.tostring(result, method='xml', encoding='utf8').decode('utf8')[5:-6]
+ return serialize_xml(result)[5:-6]
def html_translate(callback, value):
""" Translate an HTML value (string), using `callback` for translating text
@@ -303,14 +321,11 @@ def html_translate(callback, value):
return value
try:
- parser = etree.HTMLParser(encoding='utf-8')
# value may be some HTML fragment, wrap it into a div
- wrapped = "<div>%s</div>" % encode(value)
- root = etree.fromstring(wrapped, parser)
- # root is html > body > div; translate the div only
- result = translate_xml_node(root[0][0], callback, 'html', parser)
+ root = parse_html("<div>%s</div>" % value)
+ result = translate_xml_node(root, callback, parse_html, serialize_html)
# remove tags <div> and </div> from result
- value = etree.tostring(result, method='html', encoding='utf8').decode('utf8')[5:-6]
+ value = serialize_html(result)[5:-6]
except ValueError:
_logger.exception("Cannot translate malformed HTML, using source value instead")
diff --git a/requirements.txt b/requirements.txt
index 51325155af2..9109a29a8c7 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -12,7 +12,7 @@ Mako==1.0.4
MarkupSafe==0.23
mock==2.0.0
num2words==0.5.4
-ofxparse==0.15
+ofxparse==0.16
passlib==1.6.5
Pillow==3.4.1
psutil==4.3.1