diff options
| author | Olivier Dony <odo@openerp.com> | 2017-06-01 00:15:27 +0200 |
|---|---|---|
| committer | Olivier Dony <odo@openerp.com> | 2017-06-01 00:15:27 +0200 |
| commit | b9e220726730e2e0c25dae9952fa90e783fadc16 (patch) | |
| tree | c083daa90cfa91548a775b53a14c3ededdaa10a6 | |
| parent | bb438a29354048be36fe973cd4eba11cee03ed26 (diff) | |
| parent | 7e44444878760ca44cf1b22bf05d77e26c477cab (diff) | |
[MERGE] Forward-port 10.0 up to 7e44444878760ca44cf1b22bf05d77e26c477cab
130 files changed, 1560 insertions, 455 deletions
diff --git a/addons/account/models/account.py b/addons/account/models/account.py index 1c16f0fe497..15f078c0f6b 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 3e6c1180b51..64426ac0db3 100644 --- a/addons/account/models/account_invoice.py +++ b/addons/account/models/account_invoice.py @@ -466,6 +466,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 @@ -500,7 +502,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 @@ -510,8 +511,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): @@ -1010,6 +1017,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. @@ -1025,8 +1046,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: @@ -1360,6 +1380,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 c7bf678a2d8..7b788876bd1 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 10f59568a7b..5023a7a2816 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') @@ -406,8 +406,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'] = _('Counterpart') writeoff_line['account_id'] = self.writeoff_account_id.id writeoff_line['debit'] = debit_wo diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py index 464e7912afe..9b25ec0c948 100644 --- a/addons/account/models/partner.py +++ b/addons/account/models/partner.py @@ -444,5 +444,5 @@ class ResPartner(models.Model): ''' action = self.env.ref('account.action_invoice_refund_out_tree') result = action.read()[0] - result['domain'] = [('partner_id', 'in', self.ids)] + result['domain'] = [('partner_id', 'child_of', self.ids)] return result 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_view.xml b/addons/account/views/account_view.xml index 1b1ec7e2799..49c17074d44 100644 --- a/addons/account/views/account_view.xml +++ b/addons/account/views/account_view.xml @@ -217,6 +217,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 bb30c799611..2d05512b0e3 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 & 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 773dd75bbb9..14b12a6afd2 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, @@ -907,7 +907,7 @@ class Lead(models.Model): 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(): + if date_deadline < date.today() and not opp.date_closed: result['closing']['overdue'] += 1 # Next activities for activity in opp.activity_ids: 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 & 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 9bf72ae7b0f..1cad1081a65 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/mail/models/res_partner.py b/addons/mail/models/res_partner.py index f7f2d3cd6ce..6dba7ca9f8d 100644 --- a/addons/mail/models/res_partner.py +++ b/addons/mail/models/res_partner.py @@ -234,11 +234,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 558782d7d2a..bb601f8ab8e 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 5e1a861ae8d..fe74f19e643 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 590527ef2cd..0b9ee40b7eb 100644 --- a/addons/payment/models/payment_acquirer.py +++ b/addons/payment/models/payment_acquirer.py @@ -161,7 +161,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 = [ @@ -620,14 +620,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 ffc2138e859..31444c38647 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)]) @@ -344,6 +344,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 688e2ceb6f9..a30894348fb 100644 --- a/addons/point_of_sale/i18n/point_of_sale.pot +++ b/addons/point_of_sale/i18n/point_of_sale.pot @@ -3382,6 +3382,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 0cea054bfd1..ca8ae53b32e 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 d16169232b4..c59da953235 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) @@ -114,7 +116,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 @@ -124,7 +126,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 5ab532b821f..4a784be0572 100644 --- a/addons/point_of_sale/wizard/pos_payment.xml +++ b/addons/point_of_sale/wizard/pos_payment.xml @@ -6,7 +6,7 @@ <field name="arch" type="xml"> <form string="Pay Order"> <group> - <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 0cff246f2b4..02b124d7074 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" @@ -590,6 +604,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 08f3b80c8c7..17acd332427 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 787e1b174ea..31c1c948d5c 100644 --- a/addons/purchase/models/account_invoice.py +++ b/addons/purchase/models/account_invoice.py @@ -149,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: @@ -160,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 ead966d349f..2bfb42560c0 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -576,6 +576,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() @@ -978,6 +983,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 = {} @@ -991,18 +1011,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 2eb2d9ba93f..26193ec547b 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/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 58caacb36bc..5d4d4e1826a 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 e0e96a32213..c782990b310 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/i18n/stock.pot b/addons/stock/i18n/stock.pot index 4a409b8be61..37ccefde9ac 100644 --- a/addons/stock/i18n/stock.pot +++ b/addons/stock/i18n/stock.pot @@ -877,6 +877,26 @@ msgid "By unchecking the active field, you may hide an INCOTERM you will not use msgstr "" #. module: stock +#: model:stock.incoterms,name:stock.incoterm_CIP +msgid "CARRIAGE AND INSURANCE PAID TO" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_CPT +msgid "CARRIAGE PAID TO" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_CFR +msgid "COST AND FREIGHT" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_CIF +msgid "COST, INSURANCE AND FREIGHT" +msgstr "" + +#. module: stock #: model:ir.ui.view,arch_db:stock.stock_picking_calendar msgid "Calendar View" msgstr "" @@ -1424,6 +1444,41 @@ msgid "Customers" msgstr "" #. module: stock +#: model:stock.incoterms,name:stock.incoterm_DAF +msgid "DELIVERED AT FRONTIER" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_DAP +msgid "DELIVERED AT PLACE" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_DAT +msgid "DELIVERED AT TERMINAL" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_DDP +msgid "DELIVERED DUTY PAID" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_DDU +msgid "DELIVERED DUTY UNPAID" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_DEQ +msgid "DELIVERED EX QUAY" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_DES +msgid "DELIVERED EX SHIP" +msgstr "" + +#. module: stock #: model:ir.model.fields,field_description:stock.field_stock_config_settings_module_delivery_dhl msgid "DHL integration" msgstr "" @@ -1845,6 +1900,11 @@ msgid "Dropshipping" msgstr "" #. module: stock +#: model:stock.incoterms,name:stock.incoterm_EXW +msgid "EX WORKS" +msgstr "" + +#. module: stock #: model:ir.ui.view,arch_db:stock.inventory_planner msgid "Edit its details or add new ones" msgstr "" @@ -1913,6 +1973,21 @@ msgid "FIFO, LIFO..." msgstr "" #. module: stock +#: model:stock.incoterms,name:stock.incoterm_FAS +msgid "FREE ALONGSIDE SHIP" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_FCA +msgid "FREE CARRIER" +msgstr "" + +#. module: stock +#: model:stock.incoterms,name:stock.incoterm_FOB +msgid "FREE ON BOARD" +msgstr "" + +#. module: stock #: model:ir.model.fields,field_description:stock.field_stock_config_settings_module_delivery_fedex msgid "Fedex integration" msgstr "" @@ -2459,6 +2534,24 @@ msgid "Internal reference number in case it differs from the manufacturer's lot/ msgstr "" #. module: stock +#: code:addons/stock/models/product.py:257 +#, python-format +msgid "Invalid domain left operand %s" +msgstr "" + +#. module: stock +#: code:addons/stock/models/product.py:259 +#, python-format +msgid "Invalid domain operator %s" +msgstr "" + +#. module: stock +#: code:addons/stock/models/product.py:261 +#, python-format +msgid "Invalid domain right operand %s" +msgstr "" + +#. module: stock #: model:ir.model.fields,field_description:stock.field_stock_inventory_category_id msgid "Inventoried Category" msgstr "" diff --git a/addons/stock/models/procurement.py b/addons/stock/models/procurement.py index 1de2be542d4..d8093fe068b 100644 --- a/addons/stock/models/procurement.py +++ b/addons/stock/models/procurement.py @@ -317,6 +317,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/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', '>', 1)]}"/> - <div class="o_row" name="weight" attrs="{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '>', 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', '>', 1)]}"/> - <div class="o_row" name="volume" attrs="{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '>', 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', '>', 1)]}</attribute> + </xpath> + <xpath expr="//div[@name='weight']" position="attributes"> + <attribute name="attrs">{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '>', 1)]}</attribute> + </xpath> + <xpath expr="//label[@for='volume']" position="attributes"> + <attribute name="attrs">{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '>', 1)]}</attribute> + </xpath> + <xpath expr="//div[@name='volume']" position="attributes"> + <attribute name="attrs">{'invisible':['|', ('type', 'not in', ['product', 'consu']), ('product_variant_count', '>', 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 f2460087b5d..16050b03530 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/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 a1d19f016b4..946a0f823f3 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.ui.less b/addons/website/static/src/less/website.ui.less index 75cada7ddba..b92e86a3274 100644 --- a/addons/website/static/src/less/website.ui.less +++ b/addons/website/static/src/less/website.ui.less @@ -44,4 +44,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 001bc5e44c0..ff59b6186b9 100644 --- a/addons/website_form/static/src/js/website_form.js +++ b/addons/website_form/static/src/js/website_form.js @@ -158,13 +158,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 57fb68e1330..4e85c240767 100644 --- a/addons/website_mail/controllers/main.py +++ b/addons/website_mail/controllers/main.py @@ -56,6 +56,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 c931b839177..0fe93347abf 100644 --- a/addons/website_portal_sale/controllers/main.py +++ b/addons/website_portal_sale/controllers/main.py @@ -217,10 +217,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 238a6eea0fd..dfc62dfe332 100644 --- a/addons/website_quote/models/sale_order.py +++ b/addons/website_quote/models/sale_order.py @@ -70,6 +70,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 0c8b7629af0..c175ee6cd4f 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -315,7 +315,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 7b2d4c88d24..fa4687c3853 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -598,7 +598,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 5c63e3c7244..257cfe4cb2d 100644 --- a/odoo/addons/base/ir/ir_translation.py +++ b/odoo/addons/base/ir/ir_translation.py @@ -562,6 +562,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 be62b95f87a..d2832c6580d 100644 --- a/odoo/addons/base/ir/ir_ui_view.py +++ b/odoo/addons/base/ir/ir_ui_view.py @@ -455,7 +455,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 f44b765a3ff..d87a1318daa 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/models.py b/odoo/models.py index d334fedf18d..82d68ee8f2a 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -4330,7 +4330,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/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 |
