[MERGE] forward port branch 10.0 up to 72fa3e8bda
This commit is contained in:
@@ -2,7 +2,8 @@
|
||||
Create demo bank statement
|
||||
-
|
||||
!python {model: ir.model.data, id: False} : |
|
||||
journal = self.env['account.journal'].search([('type', '=', 'bank')], limit=1)
|
||||
default_company = self.env['res.company']._company_default_get('account.journal')
|
||||
journal = self.env['account.journal'].search([('type', '=', 'bank'), ('company_id', '=', default_company.id)], limit=1)
|
||||
import time
|
||||
if journal:
|
||||
vals = {
|
||||
@@ -11,7 +12,6 @@
|
||||
'date': time.strftime('%Y')+'-01-01',
|
||||
'name': "BNK/2014/001",
|
||||
'balance_end_real': '8998.2',
|
||||
'company_id': ref('base.main_company'),
|
||||
'balance_start': 5103.0
|
||||
}
|
||||
self._update('account.bank.statement', 'account', vals, 'demo_bank_statement_1')
|
||||
@@ -19,7 +19,6 @@
|
||||
'ref': '',
|
||||
'statement_id': ref('account.demo_bank_statement_1'),
|
||||
'sequence': 1,
|
||||
'company_id': ref('base.main_company'),
|
||||
'name': "SAJ/2014/002 and SAJ/2014/003",
|
||||
'journal_id': journal.id,
|
||||
'amount': 1175.0,
|
||||
@@ -31,7 +30,6 @@
|
||||
'ref': '',
|
||||
'statement_id': ref('account.demo_bank_statement_1'),
|
||||
'sequence': 2,
|
||||
'company_id': ref('base.main_company'),
|
||||
'name': "Bank fees",
|
||||
'journal_id': journal.id,
|
||||
'amount': -32.58,
|
||||
@@ -42,7 +40,6 @@
|
||||
'ref': '',
|
||||
'statement_id': ref('account.demo_bank_statement_1'),
|
||||
'sequence': 3,
|
||||
'company_id': ref('base.main_company'),
|
||||
'name': "Prepayment",
|
||||
'journal_id': journal.id,
|
||||
'amount': 650.0,
|
||||
@@ -54,7 +51,6 @@
|
||||
'ref': '',
|
||||
'statement_id': ref('account.demo_bank_statement_1'),
|
||||
'sequence': 4,
|
||||
'company_id': ref('base.main_company'),
|
||||
'name': "First 2000 € of SAJ/2014/001",
|
||||
'journal_id': journal.id,
|
||||
'amount': 2000.0,
|
||||
@@ -66,7 +62,6 @@
|
||||
'ref': '',
|
||||
'statement_id': ref('account.demo_bank_statement_1'),
|
||||
'sequence': 5,
|
||||
'company_id': ref('base.main_company'),
|
||||
'name': "Last Year Interests",
|
||||
'journal_id': journal.id,
|
||||
'amount': 102.78,
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
Set the context for customer invoices because the 'type' field is readonly in invoice form views, so it value won't be considered by the yaml import
|
||||
-
|
||||
!record {model: account.invoice, id: demo_invoice_1}:
|
||||
company_id: base.main_company
|
||||
partner_id: base.res_partner_12
|
||||
user_id: base.user_demo
|
||||
reference_type: none
|
||||
@@ -21,7 +20,6 @@
|
||||
self.action_invoice_open()
|
||||
-
|
||||
!record {model: account.invoice, id: demo_invoice_2}:
|
||||
company_id: base.main_company
|
||||
partner_id: base.res_partner_2
|
||||
type: 'out_invoice'
|
||||
date_invoice: !eval time.strftime('%Y-%m')+'-08'
|
||||
@@ -37,7 +35,6 @@
|
||||
self.action_invoice_open()
|
||||
-
|
||||
!record {model: account.invoice, id: demo_invoice_3}:
|
||||
company_id: base.main_company
|
||||
partner_id: base.res_partner_2
|
||||
type: 'out_invoice'
|
||||
date_invoice: !eval time.strftime('%Y-%m')+'-08'
|
||||
@@ -79,7 +76,6 @@
|
||||
type: 'in_invoice'
|
||||
-
|
||||
!record {model: account.invoice, id: demo_invoice_0}:
|
||||
company_id: base.main_company
|
||||
partner_id: base.res_partner_12
|
||||
user_id: base.user_demo
|
||||
reference_type: none
|
||||
@@ -97,7 +93,6 @@
|
||||
uom_id: product.product_uom_unit
|
||||
-
|
||||
!record {model: account.invoice, id: demo_invoice_january_wages}:
|
||||
company_id: base.main_company
|
||||
partner_id: base.res_partner_12
|
||||
type: 'in_invoice'
|
||||
date_invoice: !eval time.strftime('%Y-%m')+'-01'
|
||||
@@ -108,16 +103,16 @@
|
||||
'name': "CEO wages",
|
||||
'price_unit': 10000,
|
||||
}
|
||||
account = self.env['account.account'].search([('tag_ids', 'in', [ref('account.demo_ceo_wages_account')])], limit=1)
|
||||
default_company = self.env['res.company']._company_default_get('account.account')
|
||||
account = self.env['account.account'].search([('tag_ids', 'in', [ref('account.demo_ceo_wages_account')]), ('company_id', '=', default_company.id)], limit=1)
|
||||
if not account:
|
||||
account = self.env['account.account'].search([('user_type_id', '=', ref('account.data_account_type_expenses'))], limit=1)
|
||||
account = self.env['account.account'].search([('user_type_id', '=', ref('account.data_account_type_expenses')), ('company_id', '=', default_company.id)], limit=1)
|
||||
if account:
|
||||
line_vals['account_id'] = account.id
|
||||
self._update('account.invoice.line', 'account', line_vals, 'ceo_wages_line')
|
||||
self.env['account.invoice'].browse(ref('demo_invoice_january_wages')).action_invoice_open()
|
||||
-
|
||||
!record {model: account.invoice, id: demo_invoice_equipment_purchase}:
|
||||
company_id: base.main_company
|
||||
partner_id: base.res_partner_1
|
||||
type: 'in_invoice'
|
||||
date_invoice: !eval time.strftime('%Y-%m')+'-15'
|
||||
@@ -128,22 +123,27 @@
|
||||
'name': "Coffee Machine with huge 'employee\'s performances boosting perk'",
|
||||
'price_unit': 4999.99,
|
||||
}
|
||||
account_id = self.env['account.account'].search([('tag_ids', 'in', [ref('account.demo_coffee_machine_account')])], limit=1).id
|
||||
account_default_company = self.env['res.company']._company_default_get('account.account')
|
||||
account_id = self.env['account.account'].search([('tag_ids', 'in', [ref('account.demo_coffee_machine_account')]), ('company_id', '=', account_default_company.id)], limit=1).id
|
||||
if not account_id:
|
||||
account_id = self.env['account.account'].search([('user_type_id', '=', ref('account.data_account_type_expenses'))], limit=1).id
|
||||
account_id = self.env['account.account'].search([('user_type_id', '=', ref('account.data_account_type_expenses')), ('company_id', '=', account_default_company.id)], limit=1).id
|
||||
if account_id:
|
||||
line_vals['account_id'] = account_id
|
||||
tax_id = self.env['account.tax'].search([('type_tax_use', '=', 'purchase'), ('amount', '>', 0)], limit=1).id
|
||||
tax_default_company = self.env['res.company']._company_default_get('account.tax')
|
||||
tax_id = self.env['account.tax'].search([('type_tax_use', '=', 'purchase'), ('amount', '>', 0), ('company_id', '=', tax_default_company.id)], limit=1).id
|
||||
if tax_id:
|
||||
line_vals['invoice_line_tax_ids'] = [(6, 0, [tax_id])]
|
||||
self._update('account.invoice.line', 'account', line_vals, 'coffee_machine_line')
|
||||
self.env['account.invoice'].browse(ref('demo_invoice_equipment_purchase'))._onchange_invoice_line_ids()
|
||||
self.env['account.invoice'].browse(ref('demo_invoice_equipment_purchase')).action_invoice_open()
|
||||
|
||||
-
|
||||
!python {model: account.bank.statement.line, id: False} : |
|
||||
default_company = self.env['res.company']._company_default_get('account.account')
|
||||
account = self.env['account.account'].search([
|
||||
('user_type_id', '=', ref('account.data_account_type_revenue')),
|
||||
('tag_ids', 'in', [ref('account.account_tag_financing')])], limit=1)
|
||||
('tag_ids', 'in', [ref('account.account_tag_financing')]),
|
||||
('company_id', '=', default_company.id)], limit=1)
|
||||
line = self.env.ref('account.demo_bank_statement_line_5')
|
||||
if not line.journal_entry_ids and account:
|
||||
line.write({'account_id': account.id})
|
||||
@@ -152,20 +152,22 @@
|
||||
!python {model: ir.model.data, id: False} : |
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
default_company = self.env['res.company']._company_default_get('account.journal')
|
||||
vals = {
|
||||
'company_id': ref('base.main_company'),
|
||||
'journal_id': self.env['account.journal'].search([('type', '=', 'general')], limit=1).id,
|
||||
'journal_id': self.env['account.journal'].search([('type', '=', 'general'), ('company_id', '=', default_company.id)], limit=1).id,
|
||||
'date': datetime.now().replace(day=1,month=1) - relativedelta(days=1),
|
||||
'ref': 'Company Creation',
|
||||
}
|
||||
self._update('account.move', 'account', vals, 'demo_opening_move')
|
||||
-
|
||||
!python {model: ir.model.data, id: False} : |
|
||||
bank_journal = self.env['account.journal'].search([('type', '=', 'bank')], limit=1)
|
||||
journal_default_company = self.env['res.company']._company_default_get('account.journal')
|
||||
bank_journal = self.env['account.journal'].search([('type', '=', 'bank'), ('company_id', '=', journal_default_company.id)], limit=1)
|
||||
if bank_journal:
|
||||
bank_account_id = bank_journal.default_debit_account_id.id
|
||||
fixed_asset_account_id = self.env['account.account'].search([('user_type_id', 'in', (ref('account.data_account_type_fixed_assets'),ref('account.data_account_type_current_assets')))], limit=1).id
|
||||
equity_account_id = self.env['account.account'].search([('user_type_id', '=', ref('account.data_account_type_equity')), ('tag_ids', 'in', [ref('account.demo_capital_account')])], limit=1).id
|
||||
account_default_company = self.env['res.company']._company_default_get('account.account')
|
||||
fixed_asset_account_id = self.env['account.account'].search([('user_type_id', 'in', (ref('account.data_account_type_fixed_assets'),ref('account.data_account_type_current_assets'))), ('company_id', '=', account_default_company.id)], limit=1).id
|
||||
equity_account_id = self.env['account.account'].search([('user_type_id', '=', ref('account.data_account_type_equity')), ('tag_ids', 'in', [ref('account.demo_capital_account')]), ('company_id', '=', account_default_company.id)], limit=1).id
|
||||
if bank_account_id and fixed_asset_account_id and equity_account_id:
|
||||
self.with_context({'check_move_validity': False})._update('account.move.line', 'account', {
|
||||
'move_id': ref('account.demo_opening_move'),
|
||||
|
||||
@@ -327,6 +327,15 @@ class AccountJournal(models.Model):
|
||||
if 'bank_acc_number' in vals:
|
||||
for journal in self.filtered(lambda r: r.type == 'bank' and not r.bank_account_id):
|
||||
journal.set_bank_account(vals.get('bank_acc_number'), vals.get('bank_id'))
|
||||
# create the relevant refund sequence
|
||||
if vals.get('refund_sequence'):
|
||||
for journal in self.filtered(lambda j: j.type in ('sale', 'purchase') and not j.refund_sequence_id):
|
||||
journal_vals = {
|
||||
'name': journal.name,
|
||||
'company_id': journal.company_id.id,
|
||||
'code': journal.code
|
||||
}
|
||||
journal.refund_sequence_id = self.sudo()._create_sequence(journal_vals, refund=True).id
|
||||
|
||||
return result
|
||||
|
||||
@@ -342,7 +351,7 @@ class AccountJournal(models.Model):
|
||||
""" Create new no_gap entry sequence for every new Journal"""
|
||||
prefix = self._get_sequence_prefix(vals['code'], refund)
|
||||
seq = {
|
||||
'name': vals['name'],
|
||||
'name': refund and vals['name'] + _(': Refund') or vals['name'],
|
||||
'implementation': 'no_gap',
|
||||
'prefix': prefix,
|
||||
'padding': 4,
|
||||
|
||||
@@ -560,7 +560,7 @@ class AccountBankStatementLine(models.Model):
|
||||
domain_reconciliation = ['&', '&', ('statement_line_id', '=', False), ('account_id', 'in', reconciliation_aml_accounts), ('payment_id','<>', False)]
|
||||
|
||||
# Black lines = unreconciled & (not linked to a payment or open balance created by statement
|
||||
domain_matching = ['&', ('reconciled', '=', False), '|', ('payment_id','=',False), ('statement_id', '<>', False)]
|
||||
domain_matching = [('reconciled', '=', False)]
|
||||
if self.partner_id.id or overlook_partner:
|
||||
domain_matching = expression.AND([domain_matching, [('account_id.internal_type', 'in', ['payable', 'receivable'])]])
|
||||
else:
|
||||
|
||||
@@ -314,7 +314,7 @@ class AccountInvoice(models.Model):
|
||||
default=lambda self: self.env.user)
|
||||
fiscal_position_id = fields.Many2one('account.fiscal.position', string='Fiscal Position', oldname='fiscal_position',
|
||||
readonly=True, states={'draft': [('readonly', False)]})
|
||||
commercial_partner_id = fields.Many2one('res.partner', string='Commercial Entity',
|
||||
commercial_partner_id = fields.Many2one('res.partner', string='Commercial Entity', compute_sudo=True,
|
||||
related='partner_id.commercial_partner_id', store=True, readonly=True,
|
||||
help="The commercial entity that will be used on Journal Entries for this invoice")
|
||||
|
||||
|
||||
@@ -307,6 +307,8 @@ class account_journal(models.Model):
|
||||
[action] = self.env.ref('account.%s' % action_name).read()
|
||||
action['context'] = ctx
|
||||
action['domain'] = self._context.get('use_domain', [])
|
||||
action['views'] = False
|
||||
action['view_id'] = False
|
||||
return action
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import fields, models, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
@@ -79,6 +80,14 @@ Best Regards,''')
|
||||
|
||||
@api.multi
|
||||
def write(self, values):
|
||||
#restrict the closing of FY if there are still unposted entries
|
||||
if values.get('fiscalyear_lock_date'):
|
||||
nb_draft_entries = self.env['account.move'].search([
|
||||
('company_id', 'in', [c.id for c in self]),
|
||||
('state', '=', 'draft'),
|
||||
('date', '<=', values['fiscalyear_lock_date'])])
|
||||
if nb_draft_entries:
|
||||
raise ValidationError(_('There are still unposted entries in the period you want to lock. You should either post or delete them.'))
|
||||
# Reflect the change on accounts
|
||||
for company in self:
|
||||
digits = values.get('accounts_code_digits') or company.accounts_code_digits
|
||||
|
||||
@@ -10,10 +10,15 @@ class TestPeriodState(AccountingTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestPeriodState, self).setUp()
|
||||
self.user_id = self.env.user
|
||||
self.day_before_yesterday = datetime.now() - timedelta(2)
|
||||
self.yesterday = datetime.now() - timedelta(1)
|
||||
self.user_id = self.env.user
|
||||
self.user_id.company_id.write({'fiscalyear_lock_date': self.yesterday.strftime(DEFAULT_SERVER_DATE_FORMAT)})
|
||||
self.yesterday_str = self.yesterday.strftime(DEFAULT_SERVER_DATE_FORMAT)
|
||||
#make sure there is no unposted entry
|
||||
draft_entries = self.env['account.move'].search([('date', '<=', self.yesterday_str), ('state', '=', 'draft')])
|
||||
if draft_entries:
|
||||
draft_entries.post()
|
||||
self.user_id.company_id.write({'fiscalyear_lock_date': self.yesterday_str})
|
||||
self.sale_journal_id = self.env['account.journal'].search([('type', '=', 'sale')])[0]
|
||||
self.account_id = self.env['account.account'].search([('internal_type', '=', 'receivable')])[0]
|
||||
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
<field name="code"/>
|
||||
<field name="refund_sequence" attrs="{'invisible': [('type', 'not in', ['sale', 'purchase'])]}" groups="base.group_no_one"/>
|
||||
<field name="sequence_id" required="0" attrs="{'readonly': 1}" groups="base.group_no_one"/>
|
||||
<field name="refund_sequence_id" attrs="{'invisible': ['|',('type', 'not in', ['sale', 'purchase']), ('refund_sequence', '!=', True)], 'required': [('type', 'in', ['sale', 'purchase']), ('refund_sequence', '=', True)]}"/>
|
||||
<field name="refund_sequence_id" required="0" attrs="{'readonly': 1, 'invisible': ['|',('type', 'not in', ['sale', 'purchase']), ('refund_sequence', '!=', True)]}" groups="base.group_no_one"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="default_debit_account_id" domain="[('deprecated', '=', False)]" />
|
||||
|
||||
@@ -80,8 +80,6 @@ class AccountInvoiceLine(models.Model):
|
||||
|
||||
@api.onchange('asset_category_id')
|
||||
def onchange_asset_category_id(self):
|
||||
if not self.asset_category_id:
|
||||
self.account_id = self.get_invoice_line_account(self.invoice_id.type, self.product_id, self.invoice_id.fiscal_position_id, self.invoice_id.company_id)
|
||||
if self.invoice_id.type == 'out_invoice' and self.asset_category_id:
|
||||
self.account_id = self.asset_category_id.account_asset_id.id
|
||||
elif self.invoice_id.type == 'in_invoice' and self.asset_category_id:
|
||||
|
||||
@@ -123,7 +123,6 @@ class AccountPayment(models.Model):
|
||||
}
|
||||
else:
|
||||
self.filtered(lambda r: r.state == 'draft').post()
|
||||
self.write({'state': 'sent'})
|
||||
return self.do_print_checks()
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -113,6 +113,7 @@ var BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, {
|
||||
if (e.key === "ArrowLeft" || e.key === "ArrowRight" ||
|
||||
e.key === "ArrowUp" || e.key === "ArrowDown" ||
|
||||
e.key === "Escape" || e.key === "Tab" ||
|
||||
e.key === "Backspace" || e.key === "Delete" ||
|
||||
/F\d\d?/.test(e.key)) {
|
||||
return true;
|
||||
} else {
|
||||
|
||||
@@ -23,6 +23,10 @@ var FieldFloatScannable = form_widgets.FieldFloat.extend({
|
||||
},
|
||||
|
||||
simulateKeypress: function (e) {
|
||||
/* only simulate a keypress if it has been previously prevented */
|
||||
if (e.originalEvent.dispatched_by_barcode_reader !== true) {
|
||||
return;
|
||||
}
|
||||
var character = String.fromCharCode(e.which);
|
||||
var current_str = e.target.value;
|
||||
var str_before_carret = current_str.substring(0, e.target.selectionStart);
|
||||
|
||||
@@ -52,6 +52,19 @@
|
||||
<field name="filter_domain">[('customer', '=', True)]</field>
|
||||
</record>
|
||||
|
||||
<record id="test_rule_recursive" model="base.automation">
|
||||
<field name="name">Base Automation: test recursive rule</field>
|
||||
<field name="model_id" ref="base_automation.model_base_automation_lead_test"/>
|
||||
<field name="trigger">on_write</field>
|
||||
<field name="active" eval="True"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
record = model.browse(env.context['active_id'])
|
||||
if 'partner_id' in env.context['old_values'][record.id]:
|
||||
record.write({'state': 'draft'})
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="test_rule_on_line" model="base.automation">
|
||||
<field name="name">Base Automation: test rule on secondary model</field>
|
||||
<field name="model_id" ref="base_automation.model_base_automation_line_test"/>
|
||||
@@ -61,4 +74,18 @@
|
||||
<field name="active" eval="True"/>
|
||||
<field name="model_id" ref="base_automation.model_base_automation_line_test"/>
|
||||
</record>
|
||||
|
||||
<record id="test_rule_on_write_check_context" model="base.automation">
|
||||
<field name="name">Base Automation: test rule on write check context</field>
|
||||
<field name="model_id" ref="base_automation.model_base_automation_lead_test"/>
|
||||
<field name="trigger">on_write</field>
|
||||
<field name="active" eval="True"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
record = model.browse(env.context['active_id'])
|
||||
if 'user_id' in env.context['old_values'][record.id]:
|
||||
record.write({'is_assigned_to_admin': (record.user_id.id == 1)})
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
||||
@@ -179,13 +179,18 @@ class BaseAutomation(models.Model):
|
||||
|
||||
def _process(self, records):
|
||||
""" Process action ``self`` on the ``records`` that have not been done yet. """
|
||||
# filter out the records on which self has already been done, then mark
|
||||
# remaining records as done (to avoid recursive processing)
|
||||
# filter out the records on which self has already been done
|
||||
action_done = self._context['__action_done']
|
||||
records -= action_done.setdefault(self, records.browse())
|
||||
records_done = action_done.get(self, records.browse())
|
||||
records -= records_done
|
||||
if not records:
|
||||
return
|
||||
action_done[self] |= records
|
||||
|
||||
# mark the remaining records as done (to avoid recursive processing)
|
||||
action_done = dict(action_done)
|
||||
action_done[self] = records_done + records
|
||||
self = self.with_context(__action_done=action_done)
|
||||
records = records.with_context(__action_done=action_done)
|
||||
|
||||
# modify records
|
||||
values = {}
|
||||
|
||||
@@ -92,6 +92,30 @@ class base_automation_test(common.TransactionCase):
|
||||
self.assertTrue(lead.customer, "Customer field should updated to True")
|
||||
self.assertEqual(lead.user_id, self.user_demo, "Responsible should be change on write of Lead when Customer becomes True.")
|
||||
|
||||
def test_11_recomputed_field(self):
|
||||
"""
|
||||
Check that a rule is executed whenever a field is recomputed and the
|
||||
context contains the target field
|
||||
"""
|
||||
partner = self.env.ref('base.res_partner_1')
|
||||
lead = self.create_lead(state='draft', partner_id=partner.id)
|
||||
self.assertFalse(lead.deadline, 'There should not be a deadline defined')
|
||||
# change priority and user; this triggers deadline recomputation, and
|
||||
# the server action should set the boolean field to True
|
||||
lead.write({'priority': True, 'user_id': self.user_admin.id})
|
||||
self.assertTrue(lead.deadline, 'Deadline should be defined')
|
||||
self.assertTrue(lead.is_assigned_to_admin, 'Lead should be assigned to admin')
|
||||
|
||||
def test_12_recursive(self):
|
||||
""" Check that a rule is executed recursively by a secondary change. """
|
||||
lead = self.create_lead(state='open')
|
||||
self.assertEqual(lead.state, 'open')
|
||||
self.assertEqual(lead.user_id, self.user_admin)
|
||||
# change partner; this should trigger the rule that modifies the state
|
||||
partner = self.env.ref('base.res_partner_1')
|
||||
lead.write({'partner_id': partner.id})
|
||||
self.assertEqual(lead.state, 'draft')
|
||||
|
||||
def test_20_direct_line(self):
|
||||
"""
|
||||
Check that a rule is executed after creating a line record.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models
|
||||
from dateutil import relativedelta
|
||||
from odoo import fields, models, api
|
||||
|
||||
|
||||
class LeadTest(models.Model):
|
||||
@@ -19,6 +20,17 @@ class LeadTest(models.Model):
|
||||
customer = fields.Boolean(related='partner_id.customer', readonly=True, store=True)
|
||||
line_ids = fields.One2many('base.automation.line.test', 'lead_id')
|
||||
|
||||
priority = fields.Boolean()
|
||||
deadline = fields.Boolean(compute='_compute_deadline', store=True)
|
||||
is_assigned_to_admin = fields.Boolean(string='Assigned to admin user')
|
||||
|
||||
@api.depends('priority')
|
||||
def _compute_deadline(self):
|
||||
for record in self:
|
||||
if not record.priority:
|
||||
record.deadline = False
|
||||
else:
|
||||
record.deadline = fields.Datetime.from_string(record.create_date) + relativedelta.relativedelta(days=3)
|
||||
|
||||
class LineTest(models.Model):
|
||||
_name = "base.automation.line.test"
|
||||
|
||||
@@ -1066,7 +1066,7 @@ class Meeting(models.Model):
|
||||
|
||||
if [True for item in new_pile if not item]:
|
||||
continue
|
||||
result_data.append(meeting.get_search_fields(order_fields, r_date=r_date))
|
||||
result_data.append(meeting.get_search_fields(order_fields, r_date=r_start_date))
|
||||
|
||||
if order_fields:
|
||||
uniq = lambda it: collections.OrderedDict((id(x), x) for x in it).values()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo.tests import common
|
||||
from odoo.addons.calendar.models.calendar import calendar_id2real_id
|
||||
|
||||
|
||||
class TestRecurrentEvent(common.TransactionCase):
|
||||
@@ -145,3 +146,26 @@ class TestRecurrentEvent(common.TransactionCase):
|
||||
('start', '>=', '2017-06-30 08:00:00'), ('name', '=', 'Review code with programmer')
|
||||
])
|
||||
self.assertEqual(meetings_count, 1, "Last recurrent weekly meetings are not found without stop filter !")
|
||||
|
||||
def test_recurrent_meeting5(self):
|
||||
# I create a recurrent event and I check if the virtual_id are correct
|
||||
self.CalendarEvent.create({
|
||||
'count': 5,
|
||||
'start': '2012-04-13 11:00:00',
|
||||
'stop': '2012-04-13 12:00:00',
|
||||
'duration': 1.0,
|
||||
'name': 'Test Meeting',
|
||||
'recurrency': True,
|
||||
'rrule_type': 'daily'
|
||||
})
|
||||
# I search for the first recurrent meeting
|
||||
meeting = self.CalendarEvent.with_context({'virtual_id': True}).search([
|
||||
('start', '=', '2012-04-13 11:00:00'), ('stop', '=', '2012-04-13 12:00:00')
|
||||
])
|
||||
virutal_dates = calendar_id2real_id(meeting.id, with_date=True)
|
||||
|
||||
# virtual_dates are used by the calendar view and I check if the start date for the first virtual event is correct.
|
||||
self.assertEqual(virutal_dates[1], '2012-04-13 11:00:00', "The virtual event doesn't have the correct start date !")
|
||||
|
||||
# virtual_dates are used by the calendar view and I check if the stop date for the first virtual event is correct.
|
||||
self.assertEqual(virutal_dates[2], '2012-04-13 12:00:00', "The virtual event doesn't have the correct stop date !")
|
||||
|
||||
@@ -26,15 +26,15 @@ class HrAttendance(models.Model):
|
||||
result = []
|
||||
for attendance in self:
|
||||
if not attendance.check_out:
|
||||
result.append((self.id, _("%(empl_name)s from %(check_in)s") % {
|
||||
'empl_name': self.employee_id.name_related,
|
||||
'check_in': fields.Datetime.to_string(fields.Datetime.context_timestamp(self, fields.Datetime.from_string(self.check_in))),
|
||||
result.append((attendance.id, _("%(empl_name)s from %(check_in)s") % {
|
||||
'empl_name': attendance.employee_id.name_related,
|
||||
'check_in': fields.Datetime.to_string(fields.Datetime.context_timestamp(attendance, fields.Datetime.from_string(attendance.check_in))),
|
||||
}))
|
||||
else:
|
||||
result.append((self.id, _("%(empl_name)s from %(check_in)s to %(check_out)s") % {
|
||||
'empl_name': self.employee_id.name_related,
|
||||
'check_in': fields.Datetime.to_string(fields.Datetime.context_timestamp(self, fields.Datetime.from_string(self.check_in))),
|
||||
'check_out': fields.Datetime.to_string(fields.Datetime.context_timestamp(self, fields.Datetime.from_string(self.check_out))),
|
||||
result.append((attendance.id, _("%(empl_name)s from %(check_in)s to %(check_out)s") % {
|
||||
'empl_name': attendance.employee_id.name_related,
|
||||
'check_in': fields.Datetime.to_string(fields.Datetime.context_timestamp(attendance, fields.Datetime.from_string(attendance.check_in))),
|
||||
'check_out': fields.Datetime.to_string(fields.Datetime.context_timestamp(attendance, fields.Datetime.from_string(attendance.check_out))),
|
||||
}))
|
||||
return result
|
||||
|
||||
|
||||
@@ -172,19 +172,24 @@ class HrExpense(models.Model):
|
||||
'''
|
||||
main function that is called when trying to create the accounting entries related to an expense
|
||||
'''
|
||||
move_group_by_sheet = {}
|
||||
for expense in self:
|
||||
journal = expense.sheet_id.bank_journal_id if expense.payment_mode == 'company_account' else expense.sheet_id.journal_id
|
||||
#create the move that will contain the accounting entries
|
||||
acc_date = expense.sheet_id.accounting_date or expense.date
|
||||
move = self.env['account.move'].create({
|
||||
'journal_id': journal.id,
|
||||
'company_id': self.env.user.company_id.id,
|
||||
'date': acc_date,
|
||||
'ref': expense.sheet_id.name,
|
||||
# force the name to the default value, to avoid an eventual 'default_name' in the context
|
||||
# to set it to '' which cause no number to be given to the account.move when posted.
|
||||
'name': '/',
|
||||
})
|
||||
if not expense.sheet_id.id in move_group_by_sheet:
|
||||
move = self.env['account.move'].create({
|
||||
'journal_id': journal.id,
|
||||
'company_id': self.env.user.company_id.id,
|
||||
'date': acc_date,
|
||||
'ref': expense.sheet_id.name,
|
||||
# force the name to the default value, to avoid an eventual 'default_name' in the context
|
||||
# to set it to '' which cause no number to be given to the account.move when posted.
|
||||
'name': '/',
|
||||
})
|
||||
move_group_by_sheet[expense.sheet_id.id] = move
|
||||
else:
|
||||
move = move_group_by_sheet[expense.sheet_id.id]
|
||||
company_currency = expense.company_id.currency_id
|
||||
diff_currency_p = expense.currency_id != company_currency
|
||||
#one account.move.line per expense (+taxes..)
|
||||
@@ -235,9 +240,10 @@ class HrExpense(models.Model):
|
||||
lines = map(lambda x: (0, 0, expense._prepare_move_line(x)), move_lines)
|
||||
move.with_context(dont_create_taxes=True).write({'line_ids': lines})
|
||||
expense.sheet_id.write({'account_move_id': move.id})
|
||||
move.post()
|
||||
if expense.payment_mode == 'company_account':
|
||||
expense.sheet_id.paid_expense_sheets()
|
||||
for move in move_group_by_sheet.values():
|
||||
move.post()
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
@@ -272,7 +278,7 @@ class HrExpense(models.Model):
|
||||
# Calculate tax lines and adjust base line
|
||||
taxes = expense.tax_ids.compute_all(expense.unit_amount, expense.currency_id, expense.quantity, expense.product_id)
|
||||
account_move[-1]['price'] = taxes['total_excluded']
|
||||
account_move[-1]['tax_ids'] = expense.tax_ids.ids
|
||||
account_move[-1]['tax_ids'] = [(6, 0, expense.tax_ids.ids)]
|
||||
for tax in taxes['taxes']:
|
||||
account_move.append({
|
||||
'type': 'tax',
|
||||
@@ -511,14 +517,14 @@ class HrExpenseSheet(models.Model):
|
||||
if any(not sheet.journal_id for sheet in self):
|
||||
raise UserError(_("Expenses must have an expense journal specified to generate accounting entries."))
|
||||
|
||||
res = self.mapped('expense_line_ids')\
|
||||
.filtered(lambda r: not float_is_zero(r.total_amount, precision_rounding=(r.currency_id or self.env.user.company_id.currency_id).rounding))\
|
||||
.action_move_create()
|
||||
expense_line_ids = self.mapped('expense_line_ids')\
|
||||
.filtered(lambda r: not float_is_zero(r.total_amount, precision_rounding=(r.currency_id or self.env.user.company_id.currency_id).rounding))
|
||||
res = expense_line_ids.action_move_create()
|
||||
|
||||
if not self.accounting_date:
|
||||
self.accounting_date = self.account_move_id.date
|
||||
|
||||
if self.payment_mode=='own_account':
|
||||
if self.payment_mode == 'own_account' and expense_line_ids:
|
||||
self.write({'state': 'post'})
|
||||
else:
|
||||
self.write({'state': 'done'})
|
||||
|
||||
@@ -241,6 +241,7 @@ class Holidays(models.Model):
|
||||
('date_to', '>=', holiday.date_from),
|
||||
('employee_id', '=', holiday.employee_id.id),
|
||||
('id', '!=', holiday.id),
|
||||
('type', '=', holiday.type),
|
||||
('state', 'not in', ['cancel', 'refuse']),
|
||||
]
|
||||
nholidays = self.search_count(domain)
|
||||
@@ -283,7 +284,7 @@ class Holidays(models.Model):
|
||||
|
||||
if employee_id:
|
||||
employee = self.env['hr.employee'].browse(employee_id)
|
||||
resource = employee.resource_id
|
||||
resource = employee.resource_id.sudo()
|
||||
if resource and resource.calendar_id:
|
||||
hours = resource.calendar_id.get_working_hours(from_dt, to_dt, resource_id=resource.id, compute_leaves=True)
|
||||
uom_hour = resource.calendar_id.uom_id
|
||||
|
||||
@@ -79,6 +79,12 @@
|
||||
<xpath expr="//img[@t-att-title='record.owner_user_id.value']" position='replace'>
|
||||
<img t-att-src="kanban_image('hr.employee', 'image_small', record.employee_id.raw_value)" t-att-title="record.employee_id.value" width="27" height="27" class="oe_kanban_avatar"/>
|
||||
</xpath>
|
||||
<div t-if="!record.owner_user_id.raw_value" position='replace'/>
|
||||
<div t-if="record.owner_user_id.raw_value" position='replace'>
|
||||
<div t-if="record.employee_id.value"><field name="employee_id"/></div>
|
||||
<div t-if="record.department_id.value"><field name="department_id"/>
|
||||
</div>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
<field name="user_id" type="row"/>
|
||||
<field name="date" interval="day" type="col"/>
|
||||
<field name="total_difference" type="measure" widget="float_time"/>
|
||||
<field name="total_timesheet" type="measure" widget="float_time"/>
|
||||
<field name="total_attendance" type="measure" widget="float_time"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -56,7 +56,10 @@ index_template = """
|
||||
If you need to grant remote debugging access to a developer, you can do it <a href='/remote_connect'>here</a>.
|
||||
</p>
|
||||
<p>
|
||||
The PosBox software installed on this posbox is <b>version 15</b>,
|
||||
If you need to display the current customer basket on another device, you can do it <a href='/point_of_sale/display'>here</a>.
|
||||
</p>
|
||||
<p>
|
||||
The PosBox software installed on this posbox is <b>version 16</b>,
|
||||
the posbox version number is independent from Odoo. You can upgrade
|
||||
the software on the <a href='/hw_proxy/upgrade/'>upgrade page</a>.
|
||||
</p>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import controllers
|
||||
@@ -0,0 +1,21 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
{
|
||||
'name': 'Screen Driver',
|
||||
'version': '1.0',
|
||||
'category': 'Hardware Drivers',
|
||||
'sequence': 6,
|
||||
'summary': 'Provides support for customer facing displays',
|
||||
'website': 'https://www.odoo.com/page/point-of-sale',
|
||||
'description': """
|
||||
Screen Driver
|
||||
=============
|
||||
|
||||
This module allows the POS client to send rendered HTML to a remotely
|
||||
installed screen. This module then displays this HTML using a web
|
||||
browser.
|
||||
""",
|
||||
'depends': ['hw_proxy'],
|
||||
'installable': False,
|
||||
'auto_install': False,
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import main
|
||||
@@ -0,0 +1,166 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import http
|
||||
from odoo.tools import config
|
||||
from odoo.addons.web.controllers import main as web
|
||||
|
||||
import logging
|
||||
import netifaces as ni
|
||||
import os
|
||||
from subprocess import call
|
||||
import time
|
||||
import threading
|
||||
|
||||
self_port = str(config['xmlrpc_port'] or 8069)
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class HardwareScreen(web.Home):
|
||||
|
||||
event_data = threading.Event()
|
||||
pos_client_data = {'rendered_html': False,
|
||||
'ip_from': False}
|
||||
display_in_use = ''
|
||||
failure_count = {}
|
||||
|
||||
def _call_xdotools(self, keystroke):
|
||||
os.environ['DISPLAY'] = ":0.0"
|
||||
os.environ['XAUTHORITY'] = "/run/lightdm/pi/xauthority"
|
||||
try:
|
||||
call(['xdotool', 'key', keystroke])
|
||||
return "xdotool succeeded in stroking " + keystroke
|
||||
except:
|
||||
return "xdotool threw an error, maybe it is not installed on the posbox"
|
||||
|
||||
@http.route('/hw_proxy/display_refresh', type='json', auth='none', cors='*')
|
||||
def display_refresh(self):
|
||||
return self._call_xdotools('F5')
|
||||
|
||||
# POS CASHIER'S ROUTES
|
||||
@http.route('/hw_proxy/customer_facing_display', type='json', auth='none', cors='*')
|
||||
def update_user_facing_display(self, html=None):
|
||||
request_ip = http.request.httprequest.remote_addr
|
||||
if request_ip == HardwareScreen.pos_client_data.get('ip_from', ''):
|
||||
HardwareScreen.pos_client_data['rendered_html'] = html
|
||||
HardwareScreen.event_data.set()
|
||||
|
||||
return {'status': 'updated'}
|
||||
else:
|
||||
return {'status': 'failed'}
|
||||
|
||||
@http.route('/hw_proxy/take_control', type='json', auth='none', cors='*')
|
||||
def take_control(self, html=None):
|
||||
# ALLOW A CASHIER TO TAKE CONTROL OVER THE POSBOX, IN CASE OF MULTIPLE CASHIER PER POSBOX
|
||||
HardwareScreen.pos_client_data['rendered_html'] = html
|
||||
HardwareScreen.pos_client_data['ip_from'] = http.request.httprequest.remote_addr
|
||||
HardwareScreen.event_data.set()
|
||||
|
||||
return {'status': 'success',
|
||||
'message': 'You now have access to the display'}
|
||||
|
||||
@http.route('/hw_proxy/test_ownership', type='json', auth='none', cors='*')
|
||||
def test_ownership(self):
|
||||
if HardwareScreen.pos_client_data.get('ip_from') == http.request.httprequest.remote_addr:
|
||||
return {'status': 'OWNER'}
|
||||
else:
|
||||
return {'status': 'NOWNER'}
|
||||
|
||||
# POSBOX ROUTES (SELF)
|
||||
@http.route('/point_of_sale/display', type='http', auth='none')
|
||||
def render_main_display(self):
|
||||
return self._get_html()
|
||||
|
||||
@http.route('/point_of_sale/get_serialized_order', type='json', auth='none')
|
||||
def get_serialized_order(self):
|
||||
request_addr = http.request.httprequest.remote_addr
|
||||
result = HardwareScreen.pos_client_data
|
||||
if HardwareScreen.display_in_use and request_addr != HardwareScreen.display_in_use:
|
||||
if not HardwareScreen.failure_count.get(request_addr):
|
||||
HardwareScreen.failure_count[request_addr] = 0
|
||||
if HardwareScreen.failure_count[request_addr] > 0:
|
||||
time.sleep(10)
|
||||
HardwareScreen.failure_count[request_addr] += 1
|
||||
return {'rendered_html': """<div class="pos-customer_facing_display"><p>Not Authorized. Another browser is in use to display for the client. Please refresh.</p></div> """,
|
||||
'stop_longpolling': True,
|
||||
'ip_from': request_addr}
|
||||
|
||||
# IMPLEMENTATION OF LONGPOLLING
|
||||
# Times out 2 seconds before the JS request does
|
||||
if HardwareScreen.event_data.wait(28):
|
||||
HardwareScreen.event_data.clear()
|
||||
HardwareScreen.failure_count[request_addr] = 0
|
||||
return result
|
||||
return {'rendered_html': False,
|
||||
'ip_from': HardwareScreen.pos_client_data['ip_from']}
|
||||
|
||||
def _get_html(self):
|
||||
cust_js = None
|
||||
interfaces = ni.interfaces()
|
||||
my_ip = '127.0.0.1'
|
||||
HardwareScreen.display_in_use = http.request.httprequest.remote_addr
|
||||
|
||||
with open(os.path.join(os.path.dirname(__file__), "../static/src/js/worker.js")) as js:
|
||||
cust_js = js.read()
|
||||
|
||||
with open(os.path.join(os.path.dirname(__file__), "../static/src/css/cust_css.css")) as css:
|
||||
cust_css = css.read()
|
||||
|
||||
display_ifaces = ""
|
||||
for iface_id in interfaces:
|
||||
iface_obj = ni.ifaddresses(iface_id)
|
||||
ifconfigs = iface_obj.get(ni.AF_INET, [])
|
||||
for conf in ifconfigs:
|
||||
if conf.get('addr'):
|
||||
display_ifaces += "<tr><td>" + iface_id + "</td>"
|
||||
display_ifaces += "<td>" + conf.get('addr') + "</td>"
|
||||
display_ifaces += "<td>" + conf.get('netmask') + "</td></tr>"
|
||||
# What is my external IP ?
|
||||
if iface_id != 'lo':
|
||||
my_ip = conf.get('addr')
|
||||
|
||||
my_ip_port = my_ip + ":" + self_port
|
||||
|
||||
html = """
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title class="origin">Odoo -- Point of Sale</title>
|
||||
<script type="text/javascript" class="origin" src="http://""" + my_ip_port + """/web/static/lib/jquery/jquery.js" >
|
||||
</script>
|
||||
<script type="text/javascript" class="origin">
|
||||
""" + cust_js + """
|
||||
</script>
|
||||
<link rel="stylesheet" class="origin" href="http://""" + my_ip_port + """/web/static/lib/bootstrap/css/bootstrap.css" >
|
||||
</link>
|
||||
<script class="origin" src="http://""" + my_ip_port + """/web/static/lib/bootstrap/js/bootstrap.min.js"></script>
|
||||
<style class="origin">
|
||||
""" + cust_css + """
|
||||
</style>
|
||||
</head>
|
||||
<body class="original_body">
|
||||
<div hidden class="shadow"></div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-4 col-md-offset-4">
|
||||
<h1>Odoo Point of Sale</h1>
|
||||
<h2>POSBox Client display</h2>
|
||||
<h3>My IPs</h3>
|
||||
<table id="table_ip" class="table table-condensed">
|
||||
<tr>
|
||||
<th>Interface</th>
|
||||
<th>IP</th>
|
||||
<th>Netmask</th>
|
||||
</tr>
|
||||
""" + display_ifaces + """
|
||||
</table>
|
||||
<p>The customer cart will be displayed here once a Point of Sale session is started.</p>
|
||||
<p>Odoo version 11 or above is required.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
return html
|
||||
@@ -0,0 +1,21 @@
|
||||
html {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.original_body {
|
||||
background-color: #797083;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.ajax_got_body {
|
||||
color: black;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
$(function() {
|
||||
"use strict";
|
||||
// mergedHead will be turned to true the first time we receive something from a new host
|
||||
// It allows to transform the <head> only once
|
||||
var mergedHead = false;
|
||||
var current_client_url = "";
|
||||
var stop_longpolling = false;
|
||||
|
||||
function longpolling() {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: 'http://'+window.location.host+'/point_of_sale/get_serialized_order',
|
||||
dataType: 'json',
|
||||
beforeSend: function(xhr){xhr.setRequestHeader('Content-Type', 'application/json');},
|
||||
data: JSON.stringify({jsonrpc: '2.0'}),
|
||||
|
||||
success: function(data) {
|
||||
if (typeof data.result.stop_longpolling !== 'undefined') {
|
||||
stop_longpolling = data.result.stop_longpolling;
|
||||
}
|
||||
if (data.result.ip_from && data.result.rendered_html) {
|
||||
var trimmed = $.trim(data.result.rendered_html);
|
||||
var $parsedHTML = $('<div>').html($.parseHTML(trimmed,true)); // WARNING: the true here will executes any script present in the string to parse
|
||||
var new_client_url = $parsedHTML.find(".resources > base").attr('href');
|
||||
|
||||
if (!mergedHead || (current_client_url !== new_client_url)) {
|
||||
|
||||
mergedHead = true;
|
||||
current_client_url = new_client_url;
|
||||
$("body").removeClass('original_body').addClass('ajax_got_body');
|
||||
$("head").children().not('.origin').remove();
|
||||
$("head").append($parsedHTML.find(".resources").html());
|
||||
}
|
||||
|
||||
$(".container").html($parsedHTML.find('.pos-customer_facing_display').html());
|
||||
$(".container").attr('class', 'container').addClass($parsedHTML.find('.pos-customer_facing_display').attr('class'));
|
||||
|
||||
var d = $('.pos_orderlines_list');
|
||||
d.scrollTop(d.prop("scrollHeight"));
|
||||
|
||||
// Here we execute the code coming from the pos, apparently $.parseHTML() executes scripts right away,
|
||||
// Since we modify the dom afterwards, the script might not have any effect
|
||||
if (typeof foreign_js !== 'undefined' && $.isFunction(foreign_js)) {
|
||||
foreign_js();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
complete: function(jqXHR,err) {
|
||||
if (!stop_longpolling) {
|
||||
longpolling();
|
||||
}
|
||||
},
|
||||
|
||||
timeout: 30000,
|
||||
});
|
||||
};
|
||||
|
||||
longpolling();
|
||||
});
|
||||
@@ -278,7 +278,7 @@
|
||||
<field name="price_include" eval="0"/>
|
||||
<field name="amount">0</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">none</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field name="chart_template_id" ref="l10nbe_chart_template"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_46L'), ref('tax_tag_48s46L')])]"/>
|
||||
</record>
|
||||
@@ -291,7 +291,7 @@
|
||||
<field name="account_id" ref="a451054"/>
|
||||
<field name="amount">0</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">none</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field name="chart_template_id" ref="l10nbe_chart_template"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_46T'), ref('tax_tag_48s46T')])]"/>
|
||||
</record>
|
||||
@@ -369,7 +369,7 @@
|
||||
<field name="price_include" eval="1"/>
|
||||
<field name="amount">21</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">none</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="chart_template_id" ref="l10nbe_chart_template"/>
|
||||
<field name="tag_ids" eval="[(6,0,[ref('tax_tag_82'), ref('tax_tag_85'), ref('tax_tag_63'), ref('tax_tag_59')])]"/>
|
||||
</record>
|
||||
|
||||
+577
-30
File diff suppressed because it is too large
Load Diff
@@ -1,2 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
||||
|
||||
@@ -1,37 +1,103 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
# First author: Jose Ernesto Mendez <tecnologia@obsdr.com> (Open Business Solutions SRL.)
|
||||
# Copyright (c) 2012 -TODAY Open Business Solutions, SRL. (http://obsdr.com). All rights reserved.
|
||||
# This is a fork to upgrade to odoo 8.0
|
||||
# by Marcos Organizador de Negocios - Eneldo Serrata - www.marcos.org.do
|
||||
# Author: Gustavo Valverde <gvalverde@iterativo.do> iterativo | Consultores
|
||||
# Contributors: Edser Solis - iterativo
|
||||
|
||||
# Odoo 8.0 author: Eneldo Serrata <eneldo@marcos.do>
|
||||
# (Marcos Organizador de Negocios SRL..)
|
||||
# Odoo 7.0 author: Jose Ernesto Mendez <tecnologia@obsdr.com>
|
||||
# (Open Business Solutions SRL.)
|
||||
|
||||
# Copyright (c) 2016 - Present | iterativo, SRL. - http://iterativo.do
|
||||
# All rights reserved.
|
||||
|
||||
{
|
||||
'name': 'Dominican Republic - Accounting',
|
||||
'version': '1.0',
|
||||
'version': '2.0',
|
||||
'category': 'Localization',
|
||||
'description': """
|
||||
This is the base module to manage the accounting chart for Dominican Republic.
|
||||
==============================================================================
|
||||
|
||||
* Chart of Accounts.
|
||||
* The Tax Code Chart for Domincan Republic
|
||||
* The main taxes used in Domincan Republic
|
||||
* Fiscal position for local """,
|
||||
'author': 'Eneldo Serrata - Marcos Organizador de Negocios, SRL.',
|
||||
'website': 'http://marcos.do',
|
||||
'depends': ['account', 'base_iban'],
|
||||
Localization Module for Dominican Republic
|
||||
===========================================
|
||||
|
||||
Catálogo de Cuentas e Impuestos para República Dominicana, Compatible para
|
||||
**Internacionalización** con **NIIF** y alineado a las normas y regulaciones
|
||||
de la Dirección General de Impuestos Internos (**DGII**).
|
||||
|
||||
**Este módulo consiste de:**
|
||||
|
||||
- Catálogo de Cuentas Estándar (alineado a DGII y NIIF)
|
||||
- Catálogo de Impuestos con la mayoría de Impuestos Preconfigurados
|
||||
- ITBIS para compras y ventas
|
||||
- Retenciones de ITBIS
|
||||
- Retenciones de ISR
|
||||
- Grupos de Impuestos y Retenciones:
|
||||
- Telecomunicaiones
|
||||
- Proveedores de Materiales de Construcción
|
||||
- Personas Físicas Proveedoras de Servicios
|
||||
- Otros impuestos
|
||||
- Secuencias Preconfiguradas para manejo de todos los NCF
|
||||
- Facturas con Valor Fiscal (para Ventas)
|
||||
- Facturas para Consumidores Finales
|
||||
- Notas de Débito y Crédito
|
||||
- Registro de Proveedores Informales
|
||||
- Registro de Ingreso Único
|
||||
- Registro de Gastos Menores
|
||||
- Gubernamentales
|
||||
- Posiciones Fiscales para automatización de impuestos y retenciones
|
||||
- Cambios de Impuestos a Exenciones (Ej. Ventas al Estado)
|
||||
- Cambios de Impuestos a Retenciones (Ej. Compra Servicios al Exterior)
|
||||
- Entre otros
|
||||
|
||||
**Nota:**
|
||||
Esta localización, aunque posee las secuencias para NCF, las mismas no pueden
|
||||
ser utilizadas sin la instalación de módulos de terceros o desarrollo
|
||||
adicional.
|
||||
|
||||
Estructura de Codificación del Catálogo de Cuentas:
|
||||
===================================================
|
||||
|
||||
**Un dígito** representa la categoría/tipo de cuenta del del estado financiero.
|
||||
**1** - Activo **4** - Cuentas de Ingresos y Ganancias
|
||||
**2** - Pasivo **5** - Costos, Gastos y Pérdidas
|
||||
**3** - Capital **6** - Cuentas Liquidadoras de Resultados
|
||||
|
||||
**Dos dígitos** representan los rubros de agrupación:
|
||||
11- Activo Corriente
|
||||
21- Pasivo Corriente
|
||||
31- Capital Contable
|
||||
|
||||
**Cuatro dígitos** se asignan a las cuentas de mayor: cuentas de primer orden
|
||||
1101- Efectivo y Equivalentes de Efectivo
|
||||
2101- Cuentas y Documentos por pagar
|
||||
3101- Capital Social
|
||||
|
||||
**Seis dígitos** se asignan a las sub-cuentas: cuentas de segundo orden
|
||||
110101 - Caja
|
||||
210101 - Proveedores locales
|
||||
|
||||
**Ocho dígitos** son para las cuentas de tercer orden (las visualizadas
|
||||
en Odoo):
|
||||
1101- Efectivo y Equivalentes
|
||||
110101- Caja
|
||||
11010101 Caja General
|
||||
""",
|
||||
'author': 'Gustavo Valverde - iterativo | Consultores de Odoo',
|
||||
'website': 'http://iterativo.do',
|
||||
'depends': ['account',
|
||||
'base_iban'
|
||||
],
|
||||
'data': [
|
||||
# basic accounting data
|
||||
# Basic accounting data
|
||||
'data/l10n_do_chart_data.xml',
|
||||
'data/account.account.template.csv',
|
||||
'data/account_chart_template_data.xml',
|
||||
'data/account_account_tag_data.xml',
|
||||
'data/account.tax.template.csv',
|
||||
'data/account.tax.template.xml',
|
||||
# Country States
|
||||
'data/l10n_do_state_data.xml',
|
||||
# Adds fiscal position
|
||||
'data/account.fiscal.position.template.csv',
|
||||
'data/account.fiscal.position.tax.template.csv',
|
||||
'data/fiscal_position_template.xml',
|
||||
# configuration wizard, views, reports...
|
||||
'data/account_chart_template_data.yml',
|
||||
],
|
||||
|
||||
@@ -1,198 +1,254 @@
|
||||
id,code,name,user_type_id/id,reconcile,chart_template_id/id
|
||||
default_chart_a_account_528,61121,"Agua, Luz y Basura",account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_529,61122,Telecomunicaciones,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_721,61123,Otros Gastos Administrativos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_531,61131,Depreciación Edificio,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_532,61132,Depreciación Mobiliario y Equipos de Oficina,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_533,61133,Depreciación Equipos de Cómputos y Telecomunicaciones,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_534,61134,Depreciación Equipos de Transporte,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_535,61135,Depreciación Maquinarias y Equipos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_536,61136,Depreciación Otros Activos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_537,61137,Amortización Mejoras en Propiedad Arrendada,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_538,61138,Amortización Gastos de Organización y Constitución,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_539,61139,Amortización Patentes y Derechos de Explotación,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_542,61141,Alquiler de Locales ,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_543,61142,Alquiler de Equipos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_544,61143,Alquiler de Vehículos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_545,61144,Alquileres Generales,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_722,61160,Otras Deducciones Admitidas,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_586,61161,Impuesto de Fiscalización,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_587,61162,Retenciones de Impuesto sobre la Rentas Asumidas,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_588,61163,"Penalidades, Mora e Interés Indemnizatorios",account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_589,61164,Gastos Sin Comprobantes No Admitidos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_590,61165,Gastos de Años Anteriores No Admitidos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_591,61166,Otros Gastos No Deducible ISR,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_592,61167,Otros Gastos Generales y Administrativos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_594,61171,Cargos Bancarios,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_595,61172,Cargos Carnet,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_596,61173,Pérdida en Ajuste por Tipo de Cambio,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_597,61174,Intereses sobre Prestamos Bancarios,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_598,61175,Intereses sobre Prestamos Particulares,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_600,61181,Impuestos sobre la Renta Corrientes,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_601,61182,Impuestos sobre Activos Corrientes,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_602,61183,Impuestos Sobre la Renta Diferidos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_603,61184,Crédito Fiscal por Retención de Dividendos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_604,61185,Impuestos de años anteriores,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_605,61186,Impuestos sobre Activos de años anteriores,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_152,112050,Efectivo en transito,account.data_account_type_current_assets,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_13,113010,Cuentas por Cobrar Clientes,account.data_account_type_receivable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_14,113020,Cuentas por Cobrar Funcionarios y Empleados,account.data_account_type_receivable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_15,113030,Otras Cuentas por Cobrar,account.data_account_type_receivable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_707,113040,Pendientes de conciliar,account.data_account_type_current_assets,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_709,113050,Operaciones bancarias en transito,account.data_account_type_current_assets,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_716,113060,Gastos Pagados Por Adelantado,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_17,114010,Mercancias,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_18,114020,Materia Prima,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_19,114030,Productos en procesos,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_20,114040,Productos terminados,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_22,115010,Seguros,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_23,115020,Placas y Patentes,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_24,115030,I.S.R.,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_25,115040,Intereses cobrados por adelantados,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_26,115050,Otros,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_182,123100,Mobiliario y Equipos de Oficina,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_183,123200,Deprec. Acumulada Mobiliario y Equipos de Oficina,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_184,124100,Equipos de Cómputos y Telecomunicaciones,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_185,124200,Deprec. Acumulada Equipos de Cómputos y Telecomunicaciones,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_187,125100,Equipos de Transporte Livianos,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_188,125200,Deprec. Acumulada Equipos de Transporte Livianos,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_190,125300,Equipos de Transporte Pesados,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_191,125400,Deprec. Acumulada Equipos de Transporte Pesados,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_194,127100,Otros Activos Depreciables,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_195,127200,Deprec. Acumulada Otros Activos Depreciables,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_197,128100,Mejoras en Propiedad Arrendada,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_198,128200,Amortización Mejoras en Propiedad Arrendada,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_200,129100,Terreno en Proceso de Capitalización,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_201,129200,Edificio en Proceso de Capitalización,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_203,129400,Equipos de Cómputos y Telecom. en Proceso de Instalación,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_204,129500,Equipos de Transporte en Proceso de Liquidación,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_205,129700,Otros Activos Depreciables en Proceso de Instalación,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_38,131000,Mejoras Propiedad Arrendadas,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_39,132000,Gastos de Organizacion,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_40,133000,Gastos Legales,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_42,141000,Acciones,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_43,142000,bonos,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_44,143000,Bienes Muebles e Inmuebles,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_46,151000,Fianzas,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_47,152000,Depositos,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_48,153000,Codetel,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_49,154000,CDEEE,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_50,155000,CAASD,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_51,156000,Telecable Nacional,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_719,157000,Obras de Arte,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_53,161000,ITBIS Pagado en compras,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_54,162000,Anticipos ISR,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_55,163000,ITBIS retenido cobros con tarjetas,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_56,164000,ITBIS Pagado en importaciones,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_57,165000,ITBIS por servicios deducibles,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_70,201050,Retencion Empleados SFS,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_61,211010,Suplidores,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_62,211020,Proveedores,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_63,211030,Instituciones Estatales,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_64,211040,Prestamos por Pagar,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_713,211050,Cheques popular en transito,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_714,211060,Caja Chica por pagar,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_715,211070,Sueldo y Salarios por Pagar,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_717,211080,Otras Cuentas Por Pagar,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_718,211090,Cobros anticipados,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_66,212010,Retención Empleados SVDS,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_67,212020,I.S.R.,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_723,212021,I.S.R. RETENCIONES DE ASALARIADOS,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_68,212030,Infotep,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_69,212040,TSS,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_71,212060,ITBIS,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_163,212061,ITBIS 18% retenido a personas fisicas,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_712,212062,ISR 10% retenido a personas fisicas,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_72,212070,Otras Retenciones,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_720,212080,Otros Impuestos Por Pagar,account.data_account_type_payable,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_75,311000,Capital Autorizado,account.data_account_type_equity,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_76,312000,Acciones no emitidas,account.data_account_type_equity,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_77,313000,Capital Social,account.data_account_type_equity,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_79,321000,Reserva Legal,account.data_account_type_equity,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_80,322000,Reservas para Contingencias,account.data_account_type_equity,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_82,331000,Ganancias retenidas años anteriores,account.data_account_type_equity,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_83,332000,Ajustes años anteriores,account.data_account_type_equity,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_84,333000,Ganancia del periodo,account.data_account_type_equity,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_87,411000,Ventas,account.data_account_type_revenue,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_89,421000,Ingresos por Servicios,account.data_account_type_revenue,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_90,422000,Intereses Cobrados,account.data_account_type_revenue,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_91,423000,Donaciones,account.data_account_type_revenue,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_92,424000,Ingresos en Ventas de Activos Fijos,account.data_account_type_revenue,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_93,430000,Devoluciones en Ventas,account.data_account_type_revenue,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_94,440000,Descuentos en Ventas,account.data_account_type_revenue,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_148,450000,Ingresos por diferencia de cambio,account.data_account_type_revenue,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_724,460000,Otros Ingresos,account.data_account_type_revenue,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_97,511000,Materiales Directos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_98,512000,Mano de Obra Directa,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_99,513000,Costos Indirectos de Fabricacion,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_101,521000,Compras de mercancias,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_162,522000,Compras de mercancías en US,account.data_account_type_expenses,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_102,523000,Devoluciones en compras,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_103,524000,Descuentos en Compras,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_104,525000,Transporte en Compras,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_150,526000,Costo en ventas,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_507,611110,Salarios,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_516,611111,Infotep,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_517,611112,Aporte Plan Básico de Salud (SFS),account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_518,611113,Aporte Plan de Pensiones (AFP),account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_519,611114,Aporte Riesgos Laborales (ARL) ,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_520,611115,Seguro Medico y de Vida Privado,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_521,611116,Uniforme,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_522,611117,Dietas y Viáticos a Empleados,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_523,611118,Actividades Sociales Empleados,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_525,611120,Impuesto de Retribuciones Complementarias,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_508,611121,Comisiones Funcionarios y Empleados,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_526,611122,Otros Beneficios Empleados,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_509,611123,Incentivos y Horas Extras,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_510,611124,Bonificación,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_511,611125,Salario de Navidad,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_512,611126,Vacaciones,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_513,611127,Preaviso y Cesantía,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_514,611128,Compensación uso de vehículos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_515,611129,Entrenamiento y Capacitación,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_524,611130,Gasto de Retribuciones Complementarias,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_547,611501,Honorarios por Servicios Profesionales Sociedades,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_548,611502,Honorarios por Servicios Profesionales Personas Físicas,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_549,611503,Comisiones por Venta a Terceros Personas Físicas,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_550,611504,Transporte y Acarreo,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_551,611505,Combustible y Lubricantes Vehículos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_552,611506,Combustible Planta Eléctrica,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_553,611507,Estadía Hoteles,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_554,611508,Gastos por Cuentas Malas,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_555,611509,Reparaciones de Edificio,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_556,611510,Reparaciones de Activos Fijos Categoría 2 y 3,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_557,611511,Mantenimiento de Activos Fijos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_558,611512,Promociones,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_559,611513,Publicidad,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_560,611514,Viáticos y Representación,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_561,611515,Patrocinio y aportes,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_562,611516,Participación en concursos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_563,611517,Material Gastable y Papelería,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_564,611518,Material de Limpieza,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_565,611519,Atenciones a Clientes,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_566,611520,Gastos de Correo y Envíos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_567,611521,Gastos Legales,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_568,611522,Seguridad Electrónica,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_569,611523,Guardianes y Vigilancia,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_570,611524,Fumigación y Control de Plagas,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_571,611525,Suscripciones y Membresías,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_572,611526,Donaciones,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_573,611527,Gastos de Representación,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_574,611528,Pérdida por Obsolescencia de Inventarios,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_575,611529,Pérdida en Venta de Inversiones,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_576,611530,Pérdida en Venta de Activos Fijos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_577,611531,Pérdida en Venta de Terreno,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_578,611532,Pérdida en Venta de Edificio,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_579,611533,Pérdida en Venta de Mobiliario y Equipos de Oficina,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_580,611534,Pérdida en Venta de Maquinarias y Equipos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_581,611535,Pérdida en Venta de Otros Activos Fijos,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_582,611536,Pérdida en Participación Patrimonial en Subsidiarias,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_583,611537,Pérdida en Indemnización de Seguros,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_584,611538,Consulta de Datos e Formación Crediticia,account.data_account_type_expenses,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_143,711000,"Beneficio en retiro de Propiedad, Planta y Equipos",account.data_account_type_current_assets,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_144,712000,"Perdida en retiro de Propiedad, Planta y Equipos",account.data_account_type_current_assets,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_145,720000,Resumen de Ganancias y Perdidas,account.data_account_type_current_assets,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_173,11103002,Cheques en caja,account.data_account_type_current_assets,true,l10n_do.default_chart_a
|
||||
default_chart_a_account_174,11103003,Diferencia en caja,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_175,11103004,Sobrante en caja,account.data_account_type_current_assets,false,l10n_do.default_chart_a
|
||||
default_chart_a_account_176,11103005,Caja en transito,account.data_account_type_current_assets,true,l10n_do.default_chart_a
|
||||
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
|
||||
|
||||
|
@@ -1,17 +0,0 @@
|
||||
id,name,report_type
|
||||
default_chart_a_type_1,Root/View,none
|
||||
default_chart_a_type_2,Receivable,asset
|
||||
default_chart_a_type_3,Payable,liability
|
||||
default_chart_a_type_4,Bank,asset
|
||||
default_chart_a_type_5,Cash,asset
|
||||
default_chart_a_type_6,Asset,asset
|
||||
default_chart_a_type_7,Liability,liability
|
||||
default_chart_a_type_8,Income,income
|
||||
default_chart_a_type_9,Expense,expense
|
||||
default_chart_a_type_10,Income View,income
|
||||
default_chart_a_type_11,Expense View,expense
|
||||
default_chart_a_type_12,Asset View,asset
|
||||
default_chart_a_type_13,Liability View,liability
|
||||
default_chart_a_type_14,Tax,expense
|
||||
default_chart_a_type_15,Equity,liability
|
||||
default_chart_a_type_16,Check,asset
|
||||
|
@@ -1,4 +0,0 @@
|
||||
id,position_id:id,tax_src_id:id,tax_dest_id:id
|
||||
default_chart_a_position_tax_1,default_chart_a_position_4,default_chart_a_tax_14,default_chart_a_tax_7
|
||||
default_chart_a_position_tax_2,default_chart_a_position_17,default_chart_a_tax_8,default_chart_a_tax_15
|
||||
default_chart_a_position_tax_3,default_chart_a_position_13,default_chart_a_tax_15,
|
||||
|
@@ -1,18 +0,0 @@
|
||||
id,name,chart_template_id:id
|
||||
default_chart_a_position_1,"Para Crédito Fiscal",default_chart_a,
|
||||
default_chart_a_position_2,"Cosumidor Final",default_chart_a,
|
||||
default_chart_a_position_3,Gubernamental,default_chart_a,
|
||||
default_chart_a_position_4,"Regímenes Especiales",default_chart_a,
|
||||
default_chart_a_position_5,"Gastos de personal",default_chart_a,
|
||||
default_chart_a_position_6,"Gastos por trabajo, suministros y servicios",default_chart_a,
|
||||
default_chart_a_position_7,Arrendamientos,default_chart_a,
|
||||
default_chart_a_position_8,"Gastos de Activos Fijos",default_chart_a,
|
||||
default_chart_a_position_9,"Gastos de Representación",default_chart_a,
|
||||
default_chart_a_position_10,"Otras Deducciones Admitidas",default_chart_a,
|
||||
default_chart_a_position_11,"Gastos Financieros",default_chart_a,
|
||||
default_chart_a_position_12,"Gastos Extraordinarios",default_chart_a,
|
||||
default_chart_a_position_13,"Proveedores de mercancía impuesto no incluido",default_chart_a,
|
||||
default_chart_a_position_14,"Adquisiciones de Activos",default_chart_a,
|
||||
default_chart_a_position_15,"Gastos Menores",default_chart_a,
|
||||
default_chart_a_position_16,"Gastos de Seguro",default_chart_a,
|
||||
default_chart_a_position_17,"Proveedores de mercancía impuesto incluido",default_chart_a,
|
||||
|
@@ -1,19 +0,0 @@
|
||||
id,name,description,type_tax_use,amount_type,amount,sequence,refund_account_id:id,account_id:id,chart_template_id:id,tag_ids:id
|
||||
default_chart_a_tax_1,10% Honorarios por Servicios Independientes,R-ISR 10%,purchase,percent,-10,1,default_chart_a_account_712,default_chart_a_account_712,default_chart_a,tag_R_ISR_10
|
||||
default_chart_a_tax_2,ITBIS Exento en compras,C-EXENTA,purchase,percent,0,1,,,default_chart_a,tag_C_EXENTA
|
||||
default_chart_a_tax_3,ITBIS 8% Ventas,V-ITBIS 8%,sale,percent,11,1,,,default_chart_a,tag_V_ITBIS_8
|
||||
default_chart_a_tax_4,ITBIS 8% Compras,C-ITBIS 8%,purchase,percent,11,1,,,default_chart_a,tag_C_ITBIS_8
|
||||
default_chart_a_tax_5,ITBIS 11% Ventas,V-ITBIS 11%,sale,percent,11,1,,,default_chart_a,tag_V_ITBIS_11
|
||||
default_chart_a_tax_6,ITBIS 11% Compras,C-ITBIS 11%,purchase,percent,11,1,,,default_chart_a,tag_C_ITBIS_11
|
||||
default_chart_a_tax_7,ITBIS Exento en ventas,V-EXENTA,sale,percent,18,1,,,default_chart_a,tag_V_EXENTA
|
||||
default_chart_a_tax_8,ITBIS 18% Compras,C-ITBIS 18%,purchase,percent,18,1,default_chart_a_account_53,default_chart_a_account_53,default_chart_a,tag_C_ITBIS_18
|
||||
default_chart_a_tax_9,ITBIS 18% Compras Servicios,CS-ITBIS 18%,purchase,percent,18,1,default_chart_a_account_57,default_chart_a_account_57,default_chart_a,tag_CS_ITBIS_18
|
||||
default_chart_a_tax_10,ITBIS 18% Compras Importaciones,IMP-ITBIS 18%,purchase,percent,18,1,default_chart_a_account_56,default_chart_a_account_56,default_chart_a,tag_IMP_ITBIS_18
|
||||
default_chart_a_tax_12,2% Otras Retenciones (Norma 07-2007),R-ISR 2%,purchase,percent,-2,1,,,default_chart_a,tag_R_ISR_2
|
||||
default_chart_a_tax_13,18% ITBIS Retenido,R-ITBIS 18%,purchase,percent,-18,1,default_chart_a_account_163,default_chart_a_account_163,default_chart_a,tag_R_ITBIS_18
|
||||
default_chart_a_tax_14,ITBIS 18% Ventas,V-ITBIS 18%,sale,percent,18,10,default_chart_a_account_71,default_chart_a_account_71,default_chart_a,tag_V_ITBIS_18
|
||||
default_chart_a_tax_15,ITBIS 18% Compras Includo,C-ITBIS 18% Incluido,purchase,percent,18,1,default_chart_a_account_53,default_chart_a_account_53,default_chart_a,tag_C_ITBIS_18_Incluido
|
||||
default_chart_a_tax_16,ITBIS 18% Compras Servicios Incluido,CS-ITBIS 18% Incluido,purchase,percent,18,1,default_chart_a_account_57,,default_chart_a,tag_CS_ITBIS_18_Incluido
|
||||
default_chart_a_tax_19,ISC Telecomunicacones,TELE-ISC,purchase,percent,10,1,default_chart_a_account_529,,default_chart_a,tag_TELE_ISC
|
||||
default_chart_a_tax_20,CDT Telecomunicacones,TELE-CDT,purchase,percent,2,1,default_chart_a_account_529,,default_chart_a,tag_TELE_CDT
|
||||
default_chart_a_tax_23,10% Retencion por alquileres,R-Alquileres 10%,purchase,percent,-10,1,default_chart_a_account_712,default_chart_a_account_712,default_chart_a,tag_R_Alquileres_10
|
||||
|
@@ -0,0 +1,364 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- Chart template for Taxes -->
|
||||
<!-- Taxes Groups -->
|
||||
<record id="group_itbis" model="account.tax.group">
|
||||
<field name="name">ITBIS</field>
|
||||
</record>
|
||||
<record id="group_ret" model="account.tax.group">
|
||||
<field name="name">Retenciones</field>
|
||||
</record>
|
||||
<record id="group_tax" model="account.tax.group">
|
||||
<field name="name">Otros Impuestos</field>
|
||||
</record>
|
||||
<!-- Taxes Template -->
|
||||
<record id="tax_0_sale" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">50</field>
|
||||
<field name="name">Exento ITBIS Ventas</field>
|
||||
<field name="description">Exento</field>
|
||||
<field name="amount">0</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_V_EXENTA')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_0_purch" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">50</field>
|
||||
<field name="name">Exento ITBIS Compras</field>
|
||||
<field name="description">Exento</field>
|
||||
<field name="amount">0</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_C_EXENTA')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_18_sale" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">1</field>
|
||||
<field name="name">18% ITBIS Ventas</field>
|
||||
<field name="description">18%</field>
|
||||
<field name="amount">18</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field name="account_id" ref="do_niif_21030102"/>
|
||||
<field name="refund_account_id" ref="do_niif_21030102"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_V_ITBIS_18')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_18_sale_incl" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">10</field>
|
||||
<field name="name">18% ITBIS Incl. Ventas</field>
|
||||
<field name="description">18% Incl</field>
|
||||
<field name="amount">18</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">sale</field>
|
||||
<field name="account_id" ref="do_niif_21030102"/>
|
||||
<field name="refund_account_id" ref="do_niif_21030102"/>
|
||||
<field eval="1" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_V_ITBIS_18')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_18_purch" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">18% ITBIS Compras</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="description">18%</field>
|
||||
<field name="amount">18</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_11080101"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080302"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_C_ITBIS_18')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_18_purch_incl" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">20</field>
|
||||
<field name="name">18% ITBIS Incl. Compras</field>
|
||||
<field name="description">18%</field>
|
||||
<field name="amount">18</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_11080101"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080302"/>
|
||||
<field eval="1" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_C_ITBIS_18_Incluido')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_18_purch_serv" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">20</field>
|
||||
<field name="name">18% ITBIS Compras - Servicios</field>
|
||||
<field name="description">18%</field>
|
||||
<field name="amount">18</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_11080102"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080302"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_C_ITBIS_18')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_18_purch_serv_incl" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">20</field>
|
||||
<field name="name">18% ITBIS Incl. Compras - Servicios</field>
|
||||
<field name="description">18%</field>
|
||||
<field name="amount">18</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_11080102"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080302"/>
|
||||
<field eval="1" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_C_ITBIS_18_Incluido')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_18_importation" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">20</field>
|
||||
<field name="name">18% ITBIS - Importaciones</field>
|
||||
<field name="description">18%</field>
|
||||
<field name="amount">18</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_11080103"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080302"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_IMP_ITBIS_18')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_18_of_10" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">20</field>
|
||||
<field name="name">18% ITBIS sobre el 10% del Monto Total</field>
|
||||
<field name="description">18% del 10%</field>
|
||||
<field name="amount">1.8</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_11080101"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080302"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
</record>
|
||||
<record id="tax_0015_bank" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">30</field>
|
||||
<field name="name">Impuesto 0.15% Transferencia Bancaria</field>
|
||||
<field name="description">0.15%</field>
|
||||
<field name="amount">0.0015</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_52070200"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080303"/>
|
||||
<field eval="1" name="price_include"/>
|
||||
</record>
|
||||
<record id="tax_10_telco" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">30</field>
|
||||
<field name="name">Impuesto 10% Telecomunicaciones (ISC)</field>
|
||||
<field name="description">ISC</field>
|
||||
<field name="amount">10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_52020200"/>
|
||||
<field name="refund_account_id" ref="do_niif_52020200"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_TELE_ISC')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_2_telco" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">30</field>
|
||||
<field name="name">Impuesto 2% Telecomunicaciones (CDT)</field>
|
||||
<field name="description">CDT</field>
|
||||
<field name="amount">2</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_52020200"/>
|
||||
<field name="refund_account_id" ref="do_niif_52020200"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_TELE_CDT')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="tax_group_telco" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">30</field>
|
||||
<field name="name">Impuestos a las Telecomunicaciones</field>
|
||||
<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"/>
|
||||
</record>
|
||||
<record id="ret_100_tax_nonprofit" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ITBIS 100% a No Lucrativas (Servicios)</field>
|
||||
<field name="description">100% del ITBIS</field>
|
||||
<field name="amount">-18</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030203"/>
|
||||
<field name="refund_account_id" ref="do_niif_21030203"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_R_ITBIS_18')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="ret_100_tax_person" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ITBIS 100% a Persona Física</field>
|
||||
<field name="description">100% del ITBIS</field>
|
||||
<field name="amount">-18</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030202"/>
|
||||
<field name="refund_account_id" ref="do_niif_21030202"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_R_ITBIS_18')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="ret_30_tax_moral" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ITBIS 30% a Persona Jurídica (Construcción)</field>
|
||||
<field name="description">30% del ITBIS</field>
|
||||
<field name="amount">-5.4</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030201"/>
|
||||
<field name="refund_account_id" ref="do_niif_21030201"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
</record>
|
||||
<record id="ret_30_tax_freelance" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ITBIS 30% a Profesionales Liberales (Servicios)</field>
|
||||
<field name="description">30% del ITBIS</field>
|
||||
<field name="amount">-5.4</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030204"/>
|
||||
<field name="refund_account_id" ref="do_niif_21030204"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
</record>
|
||||
<record id="ret_75_tax_nonformal" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ITBIS 75% a Proveedores Informales (Bienes)</field>
|
||||
<field name="description">75% del ITBIS</field>
|
||||
<field name="amount">-13.5</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030205"/>
|
||||
<field name="refund_account_id" ref="do_niif_21030205"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
</record>
|
||||
<record id="ret_10_income_person" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ISR 10% Honorarios a Persona Física (Servicios)</field>
|
||||
<field name="description">10% ISR</field>
|
||||
<field name="amount">-10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030301"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080303"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_R_ISR_10')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="ret_10_income_rent" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ISR 10% a Persona Física (Alquiler)</field>
|
||||
<field name="description">10% ISR</field>
|
||||
<field name="amount">-10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030302"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080303"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_R_ISR_10')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="ret_10_income_dividend" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ISR 10% por Dividendos</field>
|
||||
<field name="description">10% ISR</field>
|
||||
<field name="amount">-10</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030303"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080303"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_R_ISR_10')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="ret_2_income_person" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ISR 2% a Persona Física (Servicios)</field>
|
||||
<field name="description">2% ISR (N 07-07)</field>
|
||||
<field name="amount">-2</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030308"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080303"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_R_ISR_2')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="ret_2_income_transfer" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ISR 2% por Transferencia de Títulos</field>
|
||||
<field name="description">2% ISR</field>
|
||||
<field name="amount">-2</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030306"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080303"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
<field eval="[(6,0,[ref('tag_R_ISR_2')])]" name="tag_ids"/>
|
||||
</record>
|
||||
<record id="ret_27_income_remittance" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">40</field>
|
||||
<field name="name">Retención ISR 27% por Remesas al Exterior</field>
|
||||
<field name="description">27% ISR</field>
|
||||
<field name="amount">-27</field>
|
||||
<field name="amount_type">percent</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="account_id" ref="do_niif_21030307"/>
|
||||
<field name="refund_account_id" ref="do_niif_11080303"/>
|
||||
<field eval="0" name="price_include"/>
|
||||
</record>
|
||||
<record id="tax_group_nonformal" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">60</field>
|
||||
<field name="name">Retención a Proveedores Informales (Bienes)</field>
|
||||
<field name="amount_type">group</field>
|
||||
<field eval="0" name="amount"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field eval="[(6, 0, [ref('ret_75_tax_nonformal'), ref('tax_18_purch')])]" name="children_tax_ids"/>
|
||||
</record>
|
||||
<record id="tax_group_person_construction" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">60</field>
|
||||
<field name="name">Retención a Persona Física (Servicios Construcción con Materiales)</field>
|
||||
<field name="amount_type">group</field>
|
||||
<field eval="0" name="amount"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field eval="[(6, 0, [ref('tax_18_of_10'), ref('ret_2_income_person'), ref('ret_100_tax_person')])]" name="children_tax_ids"/>
|
||||
</record>
|
||||
<record id="tax_group_moral_construction" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">60</field>
|
||||
<field name="name">Retención a Jurídica (Servicios Construcción con Materiales)</field>
|
||||
<field name="amount_type">group</field>
|
||||
<field eval="0" name="amount"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field eval="[(6, 0, [ref('ret_30_tax_moral'), ref('tax_18_of_10')])]" name="children_tax_ids"/>
|
||||
</record>
|
||||
<record id="tax_group_person_services" model="account.tax.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="sequence">60</field>
|
||||
<field name="name">Retención a Persona Física por Servicios Profesionales</field>
|
||||
<field name="amount_type">group</field>
|
||||
<field eval="0" name="amount"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field eval="[(6, 0, [ref('ret_2_income_person'), ref('ret_100_tax_person')])]" name="children_tax_ids"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -1,11 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="default_chart_a" model="account.chart.template">
|
||||
<field name="property_account_receivable_id" ref="default_chart_a_account_13"/>
|
||||
<field name="property_account_payable_id" ref="default_chart_a_account_61"/>
|
||||
<field name="property_account_expense_categ_id" ref="default_chart_a_account_101"/>
|
||||
<field name="property_account_income_categ_id" ref="default_chart_a_account_87"/>
|
||||
<field name="income_currency_exchange_account_id" ref="default_chart_a_account_148"/>
|
||||
<field name="expense_currency_exchange_account_id" ref="default_chart_a_account_596"/>
|
||||
</record>
|
||||
<!-- Chart Template for Defaults -->
|
||||
<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_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="expense_currency_exchange_account_id" ref="do_niif_52070800"/>
|
||||
<field name="income_currency_exchange_account_id" ref="do_niif_42040100"/>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
-
|
||||
!python {model: account.chart.template, id: default_chart_a}: |
|
||||
!python {model: account.chart.template, id: do_chart_template}: |
|
||||
self[0].try_loading_for_current_company()
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- = = = = = = = = = = = = = = = -->
|
||||
<!-- Fiscal Position Templates -->
|
||||
<!-- = = = = = = = = = = = = = = = -->
|
||||
<!-- Principal Fiscal Position for Dominican Republic internally -->
|
||||
<record id="position_buyer_final" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Consumidor Final</field>
|
||||
</record>
|
||||
<record id="position_buyer_moral" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Crédito Fiscal</field>
|
||||
</record>
|
||||
<record id="position_provider_moral" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Proveedor Fiscal</field>
|
||||
</record>
|
||||
<record id="position_construction_moral" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Proveedor Fiscal (Construcción)</field>
|
||||
</record>
|
||||
<record id="position_construction_person" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Persona Física (Construcción)</field>
|
||||
</record>
|
||||
<record id="position_person" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Persona Física</field>
|
||||
</record>
|
||||
<record id="position_nonformal" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Proveedor Informal (Bienes)</field>
|
||||
</record>
|
||||
<record id="position_exterior" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Proveedor del Exterior</field>
|
||||
</record>
|
||||
<record id="position_expenses" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Gastos Menores</field>
|
||||
</record>
|
||||
<record id="position_gov" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Gubernamental</field>
|
||||
</record>
|
||||
<record id="position_nonprofit" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">No lucrativas</field>
|
||||
</record>
|
||||
<record id="position_especial" model="account.fiscal.position.template">
|
||||
<field name="chart_template_id" ref="do_chart_template"/>
|
||||
<field name="name">Regímenes Especiales</field>
|
||||
</record>
|
||||
<!-- = = = = = = = = = = = = = = = -->
|
||||
<!-- Fiscal Position Tax Templates -->
|
||||
<!-- = = = = = = = = = = = = = = = -->
|
||||
<!-- Locales -->
|
||||
<!-- Proveedor Informal Bienes -->
|
||||
<record id="fiscal_position_tax_3" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch"/>
|
||||
<field name="position_id" ref="position_nonformal"/>
|
||||
<field name="tax_dest_id" ref="tax_group_nonformal"/>
|
||||
</record>
|
||||
<record id="fiscal_position_tax_4" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch_incl"/>
|
||||
<field name="position_id" ref="position_nonformal"/>
|
||||
<field name="tax_dest_id" ref="tax_group_nonformal"/>
|
||||
</record>
|
||||
<!-- Persona Física>-->
|
||||
<record id="fiscal_position_tax_9" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch"/>
|
||||
<field name="position_id" ref="position_person"/>
|
||||
<field name="tax_dest_id" ref="tax_group_person_services"/>
|
||||
</record>
|
||||
<record id="fiscal_position_tax_10" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch_serv"/>
|
||||
<field name="position_id" ref="position_person"/>
|
||||
<field name="tax_dest_id" ref="tax_group_person_services"/>
|
||||
</record>
|
||||
<!-- Gubernamental -->
|
||||
<record id="fiscal_position_tax_1" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_sale"/>
|
||||
<field name="position_id" ref="position_gov"/>
|
||||
<field name="tax_dest_id" ref="tax_0_sale"/>
|
||||
</record>
|
||||
<record id="fiscal_position_tax_2" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch"/>
|
||||
<field name="position_id" ref="position_gov"/>
|
||||
<field name="tax_dest_id" ref="tax_0_purch"/>
|
||||
</record>
|
||||
<!-- No Lucrativas -->
|
||||
<record id="fiscal_position_tax_12" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch"/>
|
||||
<field name="position_id" ref="position_nonprofit"/>
|
||||
<field name="tax_dest_id" ref="tax_0_purch"/>
|
||||
</record>
|
||||
<record id="fiscal_position_tax_13" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch_serv"/>
|
||||
<field name="position_id" ref="position_nonprofit"/>
|
||||
<field name="tax_dest_id" ref="ret_100_tax_nonprofit"/>
|
||||
</record>
|
||||
<!-- Proveedor Moral Construcción -->
|
||||
<record id="fiscal_position_tax_8" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch"/>
|
||||
<field name="position_id" ref="position_construction_moral"/>
|
||||
<field name="tax_dest_id" ref="tax_group_moral_construction"/>
|
||||
</record>
|
||||
<!-- Persona Física Construcción -->
|
||||
<record id="fiscal_position_tax_7" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch"/>
|
||||
<field name="position_id" ref="position_construction_person"/>
|
||||
<field name="tax_dest_id" ref="tax_group_person_construction"/>
|
||||
</record>
|
||||
<!-- Importación / Exportación -->
|
||||
<!-- Proveedo del Exterior -->
|
||||
<record id="fiscal_position_tax_5" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch_serv"/>
|
||||
<field name="position_id" ref="position_exterior"/>
|
||||
<field name="tax_dest_id" ref="ret_27_income_remittance"/>
|
||||
</record>
|
||||
<record id="fiscal_position_tax_6" model="account.fiscal.position.tax.template">
|
||||
<field name="tax_src_id" ref="tax_18_purch"/>
|
||||
<field name="position_id" ref="position_exterior"/>
|
||||
<field name="tax_dest_id" ref="tax_0_purch"/>
|
||||
</record>
|
||||
<!-- = = = = = = = = = = = = = = = = = -->
|
||||
<!-- Fiscal Position Accounts Template -->
|
||||
<!-- = = = = = = = = = = = = = = = = = -->
|
||||
<!-- Locales -->
|
||||
<!-- Persona Física de Servicios -->
|
||||
<record id="fiscal_position_account_2" model="account.fiscal.position.account.template">
|
||||
<field name="position_id" ref="position_person"/>
|
||||
<field name="account_dest_id" ref="do_niif_52030111"/>
|
||||
<field name="account_src_id" ref="do_niif_52021500"/>
|
||||
</record>
|
||||
<!-- Importación / Exportación -->
|
||||
<!-- Proveedor del Exterior -->
|
||||
<record id="fiscal_position_account_1" model="account.fiscal.position.account.template">
|
||||
<field name="position_id" ref="position_exterior"/>
|
||||
<field name="account_dest_id" ref="do_niif_21010300"/>
|
||||
<field name="account_src_id" ref="do_niif_21010200"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -1,25 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<menuitem id="account_reports_do_statements_menu" name="Dominican Statements" parent="account.menu_finance_reports" sequence="3" groups="account.group_account_user"/>
|
||||
|
||||
<record model="account.account.template" id="default_chart_a_account_152">
|
||||
<field name="name">Efectivo en transito</field>
|
||||
<field name="code">112050</field>
|
||||
<field name="reconcile" eval="True"/>
|
||||
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="default_chart_a" model="account.chart.template">
|
||||
<field name="name">Catálogo de Cuentas Empresas Privadas</field>
|
||||
<field name="currency_id" ref="base.DOP"/>
|
||||
<field name="code_digits" eval="8"/>
|
||||
<field name="transfer_account_id" ref="default_chart_a_account_152"/>
|
||||
<field name="bank_account_code_prefix">112</field>
|
||||
<field name="cash_account_code_prefix">111</field>
|
||||
</record>
|
||||
|
||||
<record model="account.account.template" id="default_chart_a_account_152">
|
||||
<field name="chart_template_id" ref="default_chart_a"/>
|
||||
</record>
|
||||
<data noupdate="1">
|
||||
<!-- Chart of Accounts Template -->
|
||||
<record id="cash_transfer_account" model="account.account.template">
|
||||
<field name="name">Transferencias de Efectivo</field>
|
||||
<field name="code">11010100</field>
|
||||
<field eval="True" name="reconcile"/>
|
||||
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
|
||||
</record>
|
||||
<record id="do_chart_template" model="account.chart.template">
|
||||
<field name="name">Catálogo de Cuentas Dominicano (NIIF)</field>
|
||||
<field name="code_digits">8</field>
|
||||
<field name="cash_account_code_prefix">110101</field>
|
||||
<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"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -1,173 +1,177 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!--
|
||||
Resource: res.country.state
|
||||
Update states using ISO 3166-2:DO codes
|
||||
-->
|
||||
Resource: res.country.state
|
||||
Update states. This one is not using ISO 3166-2:DO codes,
|
||||
as those codes are not used or known in Dominican Republic.
|
||||
The new codes are more friendly and easier to identify by
|
||||
the users.
|
||||
-->
|
||||
<record id="state_DO_01" model="res.country.state">
|
||||
<field name="code">01</field>
|
||||
<field name="code">DN</field>
|
||||
<field name="name">Distrito Nacional</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_02" model="res.country.state">
|
||||
<field name="code">02</field>
|
||||
<field name="code">AZU</field>
|
||||
<field name="name">Azua</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_03" model="res.country.state">
|
||||
<field name="code">03</field>
|
||||
<field name="code">BAH</field>
|
||||
<field name="name">Bahoruco</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_4" model="res.country.state">
|
||||
<field name="code">04</field>
|
||||
<field name="code">BAR</field>
|
||||
<field name="name">Barahona</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_05" model="res.country.state">
|
||||
<field name="code">05</field>
|
||||
<field name="name">Dajabon</field>
|
||||
<field name="code">DAJ</field>
|
||||
<field name="name">Dajabón</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_06" model="res.country.state">
|
||||
<field name="code">06</field>
|
||||
<field name="code">DUA</field>
|
||||
<field name="name">Duarte</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_07" model="res.country.state">
|
||||
<field name="code">07</field>
|
||||
<field name="name">Elias Piña</field>
|
||||
<field name="code">ELP</field>
|
||||
<field name="name">Elías Piña</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_08" model="res.country.state">
|
||||
<field name="code">08</field>
|
||||
<field name="name">El Seybo</field>
|
||||
<field name="code">ELS</field>
|
||||
<field name="name">El Seibo</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_09" model="res.country.state">
|
||||
<field name="code">09</field>
|
||||
<field name="code">ESP</field>
|
||||
<field name="name">Espaillat</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_10" model="res.country.state">
|
||||
<field name="code">10</field>
|
||||
<field name="code">IND</field>
|
||||
<field name="name">Independencia</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_11" model="res.country.state">
|
||||
<field name="code">11</field>
|
||||
<field name="code">LA</field>
|
||||
<field name="name">La Altagracia</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_12" model="res.country.state">
|
||||
<field name="code">12</field>
|
||||
<field name="code">LR</field>
|
||||
<field name="name">La Romana</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_13" model="res.country.state">
|
||||
<field name="code">13</field>
|
||||
<field name="code">LV</field>
|
||||
<field name="name">La Vega</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_14" model="res.country.state">
|
||||
<field name="code">14</field>
|
||||
<field name="name">Maria Trinidad Sanchez</field>
|
||||
<field name="code">MTS</field>
|
||||
<field name="name">María Trinidad Sánchez</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_15" model="res.country.state">
|
||||
<field name="code">15</field>
|
||||
<field name="code">MC</field>
|
||||
<field name="name">Monte Cristi</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_16" model="res.country.state">
|
||||
<field name="code">16</field>
|
||||
<field name="code">PED</field>
|
||||
<field name="name">Pedernales</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_17" model="res.country.state">
|
||||
<field name="code">17</field>
|
||||
<field name="code">PER</field>
|
||||
<field name="name">Peravia</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_18" model="res.country.state">
|
||||
<field name="code">18</field>
|
||||
<field name="code">PP</field>
|
||||
<field name="name">Puerto Plata</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_19" model="res.country.state">
|
||||
<field name="code">19</field>
|
||||
<field name="code">HEM</field>
|
||||
<field name="name">Hermanas Mirabal</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_20" model="res.country.state">
|
||||
<field name="code">20</field>
|
||||
<field name="name">Samana</field>
|
||||
<field name="code">SAM</field>
|
||||
<field name="name">Samaná</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_21" model="res.country.state">
|
||||
<field name="code">21</field>
|
||||
<field name="name">San Cristobal</field>
|
||||
<field name="code">SC</field>
|
||||
<field name="name">San Cristóbal</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_22" model="res.country.state">
|
||||
<field name="code">22</field>
|
||||
<field name="name">San Juan de la Maguana</field>
|
||||
<field name="code">SJ</field>
|
||||
<field name="name">San Juan</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_23" model="res.country.state">
|
||||
<field name="code">23</field>
|
||||
<field name="name">San Pedro de Macoris</field>
|
||||
<field name="code">SPM</field>
|
||||
<field name="name">San Pedro de Macorís</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_24" model="res.country.state">
|
||||
<field name="code">24</field>
|
||||
<field name="name">Sanchez Ramirez</field>
|
||||
<field name="code">SRA</field>
|
||||
<field name="name">Sánchez Ramírez</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_25" model="res.country.state">
|
||||
<field name="code">25</field>
|
||||
<field name="code">STGO</field>
|
||||
<field name="name">Santiago</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_26" model="res.country.state">
|
||||
<field name="code">26</field>
|
||||
<field name="name">Santiago Rodriguez</field>
|
||||
<field name="code">SRO</field>
|
||||
<field name="name">Santiago Rodríguez</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_27" model="res.country.state">
|
||||
<field name="code">27</field>
|
||||
<field name="code">VAL</field>
|
||||
<field name="name">Valverde</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_28" model="res.country.state">
|
||||
<field name="code">28</field>
|
||||
<field name="code">MON</field>
|
||||
<field name="name">Monseñor Nouel</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_29" model="res.country.state">
|
||||
<field name="code">29</field>
|
||||
<field name="code">MP</field>
|
||||
<field name="name">Monte Plata</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_30" model="res.country.state">
|
||||
<field name="code">30</field>
|
||||
<field name="code">HAM</field>
|
||||
<field name="name">Hato Mayor</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_31" model="res.country.state">
|
||||
<field name="code">31</field>
|
||||
<field name="name">San Jose de Ocoa</field>
|
||||
<field name="code">SJO</field>
|
||||
<field name="name">San José de Ocoa</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<record id="state_DO_32" model="res.country.state">
|
||||
<field name="code">32</field>
|
||||
<field name="code">SD</field>
|
||||
<field name="name">Santo Domingo</field>
|
||||
<field name="country_id" ref="base.do"/>
|
||||
</record>
|
||||
<!--
|
||||
Resource: res.partner.title
|
||||
Update partner titles
|
||||
-->
|
||||
Resource: res.partner.title
|
||||
Update partner titles
|
||||
-->
|
||||
<record id="base.res_partner_title_dra" model="res.partner.title">
|
||||
<field name="name">Doctora</field>
|
||||
<field name="shortcut">Dra.</field>
|
||||
@@ -192,4 +196,5 @@
|
||||
<field name="name">Ingeniero/a</field>
|
||||
<field name="shortcut">Ing.</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
# coding: utf-8
|
||||
# Copyright 2016 iterativo (https://www.iterativo.do) <info@iterativo.do>
|
||||
|
||||
from . import chart_template
|
||||
@@ -0,0 +1,18 @@
|
||||
# coding: utf-8
|
||||
# Copyright 2016 iterativo (https://www.iterativo.do) <info@iterativo.do>
|
||||
|
||||
from openerp import models, api, _
|
||||
|
||||
|
||||
class WizardMultiChartsAccounts(models.TransientModel):
|
||||
_inherit = 'wizard.multi.charts.accounts'
|
||||
|
||||
@api.model
|
||||
def _get_default_bank_account_ids(self):
|
||||
if self.env.user.company_id.country_id and self.env.user.company_id.country_id.code.upper() == 'DO':
|
||||
return [
|
||||
{'acc_name': _('Cash'), 'account_type': 'cash'},
|
||||
{'acc_name': _('Caja Chica'), 'account_type': 'cash'},
|
||||
{'acc_name': _('Bank'), 'account_type': 'bank'}
|
||||
]
|
||||
return super(WizardMultiChartsAccounts, self)._get_default_bank_account_ids()
|
||||
@@ -590,7 +590,7 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
|
||||
var self = this;
|
||||
var options = this.selected_message ? {} : {channel_id: this.channel.id};
|
||||
if (this.selected_message) {
|
||||
message.subtype = 'mail.mt_comment';
|
||||
message.subtype = this.selected_message.is_note ? 'mail.mt_note': 'mail.mt_comment';
|
||||
message.subtype_id = false;
|
||||
message.message_type = 'comment';
|
||||
message.content_subtype = 'html';
|
||||
|
||||
@@ -5,6 +5,7 @@ var core = require('web.core');
|
||||
var form_common = require('web.form_common');
|
||||
var form_relational = require('web.form_relational');
|
||||
var Model = require('web.DataModel');
|
||||
var utils = require('web.utils');
|
||||
|
||||
var _t = core._t;
|
||||
|
||||
@@ -16,51 +17,49 @@ var _t = core._t;
|
||||
var FieldMany2ManyTagsEmail = form_relational.FieldMany2ManyTags.extend({
|
||||
|
||||
start: function() {
|
||||
this.values = [];
|
||||
this.values_checking = [];
|
||||
this.mutex = new utils.Mutex();
|
||||
|
||||
// This widget will indirectly trigger a change:value to it's parent widget
|
||||
// when setting the value of valid partners. For this reason we have to keep an
|
||||
// internal state of the last value in order to compute the effective value changes.
|
||||
this.last_processed_value = [];
|
||||
|
||||
this.on("change:value", this, this.on_change_value_check);
|
||||
this.trigger("change:value");
|
||||
|
||||
this._super.apply(this, arguments);
|
||||
},
|
||||
|
||||
on_change_value_check : function () {
|
||||
this.values = _.uniq(this.values);
|
||||
var self = this;
|
||||
var values = this.get('value').slice(0); // Clone the array
|
||||
|
||||
// filter for removed values
|
||||
var values_removed = _.difference(this.values, this.get('value'));
|
||||
if (values_removed.length) {
|
||||
this.values = _.difference(this.values, values_removed);
|
||||
this.set({'value': this.values});
|
||||
return false;
|
||||
}
|
||||
|
||||
// find not checked values that are not currently on checking
|
||||
var not_checked = _.difference(this.get('value'), this.values, this.values_checking);
|
||||
if (not_checked.length) {
|
||||
// remember values on checking for cheked only one time
|
||||
this.values_checking = this.values_checking.concat(not_checked);
|
||||
// check values
|
||||
this._check_email_popup(not_checked);
|
||||
// We only validate partners emails in case the value is not empty
|
||||
// and is different from the last processed value
|
||||
var effective_change = _.difference(values, self.last_processed_value).length;
|
||||
if (values.length && effective_change) {
|
||||
this.mutex.exec(function() {
|
||||
return self._check_email_popup(values);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_check_email_popup: function (ids) {
|
||||
var self = this;
|
||||
new Model('res.partner').call("search", [[
|
||||
["id", "in", ids],
|
||||
["email", "=", false],
|
||||
["notify_email", "=", 'always'] ]],
|
||||
var valid_partners;
|
||||
|
||||
return new Model('res.partner').call("search", [[
|
||||
["id", "in", ids],
|
||||
["email", "=", false],
|
||||
["notify_email", "=", 'always'] ]],
|
||||
{context: this.build_context()})
|
||||
.then(function (record_ids) {
|
||||
// valid partner
|
||||
var valid_partner = _.difference(ids, record_ids);
|
||||
self.values = self.values.concat(valid_partner);
|
||||
self.values_checking = _.difference(self.values_checking, valid_partner);
|
||||
var popups_deferreds = [];
|
||||
self.valid_partners = _.difference(ids, record_ids);
|
||||
|
||||
// unvalid partner
|
||||
// Propose the user to correct invalid partners
|
||||
_.each(record_ids, function (id) {
|
||||
var popup_def = $.Deferred();
|
||||
popups_deferreds.push(popup_def);
|
||||
|
||||
var pop = new form_common.FormViewDialog(self, {
|
||||
res_model: 'res.partner',
|
||||
res_id: id,
|
||||
@@ -68,15 +67,19 @@ var FieldMany2ManyTagsEmail = form_relational.FieldMany2ManyTags.extend({
|
||||
title: _t("Please complete partner's informations and Email"),
|
||||
}).open();
|
||||
pop.on('write_completed', self, function () {
|
||||
this.values.push(id);
|
||||
this.values_checking = _.without(this.values_checking, id);
|
||||
this.set({'value': this.values});
|
||||
self.valid_partners.push(id);
|
||||
});
|
||||
pop.on('closed', self, function () {
|
||||
this.values_checking = _.without(this.values_checking, id);
|
||||
this.set({'value': this.values});
|
||||
popup_def.resolve();
|
||||
});
|
||||
});
|
||||
return $.when.apply($, popups_deferreds).then(function() {
|
||||
// All popups have been processed for the given ids
|
||||
// It is now time to set the final value with valid partners ids.
|
||||
var filtered_value = _.uniq(self.valid_partners);
|
||||
self.last_processed_value = filtered_value;
|
||||
self.set({'value': filtered_value});
|
||||
});
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
@@ -126,6 +126,9 @@ class MrpProduction(models.Model):
|
||||
('none', 'None')], string='Availability',
|
||||
compute='_compute_availability', store=True)
|
||||
|
||||
unreserve_visible = fields.Boolean(
|
||||
'Inventory Unreserve Visible', compute='_compute_unreserve_visible',
|
||||
help='Technical field to check when we can unreserve')
|
||||
post_visible = fields.Boolean(
|
||||
'Inventory Post Visible', compute='_compute_post_visible',
|
||||
help='Technical field to check when we can post')
|
||||
@@ -193,6 +196,14 @@ class MrpProduction(models.Model):
|
||||
assigned_list = [x.state in ('assigned', 'done', 'cancel') for x in order.move_raw_ids]
|
||||
order.availability = (all(assigned_list) and 'assigned') or (any(partial_list) and 'partially_available') or 'waiting'
|
||||
|
||||
@api.depends('state', 'move_raw_ids.reserved_quant_ids')
|
||||
def _compute_unreserve_visible(self):
|
||||
for order in self:
|
||||
if order.state in ['done', 'cancel'] or not order.move_raw_ids.mapped('reserved_quant_ids'):
|
||||
order.unreserve_visible = False
|
||||
else:
|
||||
order.unreserve_visible = True
|
||||
|
||||
@api.multi
|
||||
@api.depends('move_raw_ids.quantity_done', 'move_finished_ids.quantity_done')
|
||||
def _compute_post_visible(self):
|
||||
|
||||
@@ -37,8 +37,15 @@ class ProductTemplate(models.Model):
|
||||
class ProductProduct(models.Model):
|
||||
_inherit = "product.product"
|
||||
|
||||
bom_count = fields.Integer('# Bill of Material', compute='_compute_bom_count')
|
||||
mo_count = fields.Integer('# Manufacturing Orders', compute='_compute_mo_count')
|
||||
|
||||
def _compute_bom_count(self):
|
||||
read_group_res = self.env['mrp.bom'].read_group([('product_id', 'in', self.ids)], ['product_id'], ['product_id'])
|
||||
mapped_data = dict([(data['product_id'][0], data['product_id_count']) for data in read_group_res])
|
||||
for product in self:
|
||||
product.bom_count = mapped_data.get(product.id, 0)
|
||||
|
||||
def _compute_mo_count(self):
|
||||
read_group_res = self.env['mrp.production'].read_group([('product_id', 'in', self.ids)], ['product_id'], ['product_id'])
|
||||
mapped_data = dict([(data['product_id'][0], data['product_id_count']) for data in read_group_res])
|
||||
|
||||
@@ -29,13 +29,15 @@ class StockMoveLots(models.Model):
|
||||
plus_visible = fields.Boolean("Plus Visible", compute='_compute_plus')
|
||||
|
||||
@api.one
|
||||
@api.constrains('lot_id')
|
||||
@api.constrains('lot_id', 'quantity_done')
|
||||
def _check_lot_id(self):
|
||||
if self.move_id.product_id.tracking == 'serial':
|
||||
lots = set([])
|
||||
for move_lot in self.move_id.move_lot_ids.filtered(lambda r: not r.lot_produced_id):
|
||||
if move_lot.lot_id in lots:
|
||||
raise exceptions.UserError(_('You cannot use the same serial number in two different lines.'))
|
||||
if float_compare(move_lot.quantity_done, 1.0, precision_rounding=move_lot.product_id.uom_id.rounding) == 1:
|
||||
raise exceptions.UserError(_('You can only produce 1.0 %s for products with unique serial number.') % move_lot.product_id.uom_id.name)
|
||||
lots.add(move_lot.lot_id)
|
||||
|
||||
def _compute_plus(self):
|
||||
|
||||
@@ -57,5 +57,6 @@ access_resource_calendar_manufacturinguser,resource.calendar manufacturing.user,
|
||||
access_mrp_unbuild,mrp.unbuild,model_mrp_unbuild,group_mrp_user,1,0,0,0
|
||||
access_mrp_unbuild_manager,mrp.unbuild manager,model_mrp_unbuild,group_mrp_manager,1,1,1,1
|
||||
access_mrp_message_mrp_user,mrp.message,model_mrp_message,group_mrp_user,1,0,0,0
|
||||
access_mrp_message_mrp_manager,mrp.message,model_mrp_message,group_mrp_manager,1,1,1,1
|
||||
access_stock_move_lots,stock.move.lots,model_stock_move_lots,group_mrp_user,1,1,1,0
|
||||
access_stock_move_lots_manager,stock.move.lots,model_stock_move_lots,group_mrp_manager,1,1,1,1
|
||||
|
||||
|
@@ -51,12 +51,13 @@
|
||||
<button name="post_inventory" string="Post Inventory" type="object" attrs="{'invisible': [('post_visible', '=', False)]}"/>
|
||||
<button name="action_cancel" type="object" string="Cancel" attrs="{'invisible': ['|', ('state', 'in', ('done','cancel')), ('check_to_done', '=', True)]}"/>
|
||||
<button name="button_scrap" type="object" string="Scrap" attrs="{'invisible': ['|', ('availability', '=', 'none'), ('state', 'in', ('cancel'))]}"/>
|
||||
<button name="button_unreserve" type="object" string="Unreserve" attrs="{'invisible': ['|', ('state', 'in', ['done', 'cancel']), ('availability', 'in', ['none', 'waiting'])]}"/>
|
||||
<button name="button_unreserve" type="object" string="Unreserve" attrs="{'invisible': [('unreserve_visible', '=', False)]}"/>
|
||||
<span class="label label-danger" attrs="{'invisible': ['|', ('availability', 'in', ('assigned', 'none')), ('state', 'not in', ('confirmed','progress'))]}">Raw materials not available!</span>
|
||||
<field name="state" widget="statusbar" statusbar_visible="confirmed,progress,done"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<field name="post_visible" invisible="1"/>
|
||||
<field name="unreserve_visible" invisible="1"/>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="%(action_mrp_workorder_production_specific)d" type="action" attrs="{'invisible': [('workorder_count', '=', 0)]}" class="oe_stat_button" icon="fa-play-circle-o">
|
||||
<div class="o_form_field o_stat_info">
|
||||
@@ -264,7 +265,7 @@
|
||||
<separator/>
|
||||
<filter string="No Routing" domain="[('routing_id','=', False)]" name="norouting" groups="mrp.group_mrp_routings"/>
|
||||
<field name="product_id"/>
|
||||
<field name="product_id" string="Raw Material" filter_domain="[('move_raw_ids.product_id','ilike',self)]"/>
|
||||
<field name="move_raw_ids" string="Raw Material" filter_domain="[('move_raw_ids.product_id','ilike',self)]"/>
|
||||
<field name="name" string="Work Center" filter_domain="[('routing_id.operation_ids.workcenter_id','ilike',self)]"/>
|
||||
<field name="routing_id" groups="mrp.group_mrp_routings"/>
|
||||
<separator/>
|
||||
|
||||
@@ -184,12 +184,22 @@ var Gui = core.Class.extend({
|
||||
close_other_tabs: function() {
|
||||
var self = this;
|
||||
|
||||
// avoid closing itself
|
||||
var now = Date.now();
|
||||
|
||||
localStorage['message'] = '';
|
||||
localStorage['message'] = JSON.stringify({
|
||||
'message':'close_tabs',
|
||||
'session': this.pos.pos_session.id,
|
||||
'window_uid': now,
|
||||
});
|
||||
|
||||
// storage events are (most of the time) triggered only when the
|
||||
// localstorage is updated in a different tab.
|
||||
// some browsers (e.g. IE) does trigger an event in the same tab
|
||||
// This may be a browser bug or a different interpretation of the HTML spec
|
||||
// cf https://connect.microsoft.com/IE/feedback/details/774798/localstorage-event-fired-in-source-window
|
||||
// Use window_uid parameter to exclude the current window
|
||||
window.addEventListener("storage", function(event) {
|
||||
var msg = event.data;
|
||||
|
||||
@@ -197,7 +207,8 @@ var Gui = core.Class.extend({
|
||||
|
||||
var msg = JSON.parse(event.newValue);
|
||||
if ( msg.message === 'close_tabs' &&
|
||||
msg.session == self.pos.pos_session.id ) {
|
||||
msg.session == self.pos.pos_session.id &&
|
||||
msg.window_uid != now) {
|
||||
|
||||
console.info('POS / Session opened in another window. EXITING POS')
|
||||
self._close();
|
||||
|
||||
@@ -11,7 +11,7 @@ create_ramdisk () {
|
||||
echo "Creating ramdisk for ${1} of size ${SIZE}..."
|
||||
|
||||
mount -t tmpfs -o size="${SIZE}" tmpfs "${RAMDISK}"
|
||||
rsync -a --exclude="swap" --exclude="apt" --exclude="dpkg" "${ORIGINAL}/" "${RAMDISK}/"
|
||||
rsync -a --exclude="swap" --exclude="apt" --exclude="dpkg" --exclude=".mozilla" "${ORIGINAL}/" "${RAMDISK}/"
|
||||
mount --bind "${RAMDISK}" "${ORIGINAL}"
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
[LightDM]
|
||||
user-authority-in-system-dir=true
|
||||
|
||||
[SeatDefaults]
|
||||
xserver-command=/usr/bin/X -s 0 dpms -nolisten tcp
|
||||
greeter-hide-users=false
|
||||
autologin-user=pi
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
xset s off
|
||||
xset -dpms
|
||||
|
||||
export HOME=/tmp
|
||||
/usr/bin/firefox http://localhost:8069/point_of_sale/display &
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
Manifest-Version: 1.0
|
||||
|
||||
Name: install.rdf
|
||||
Digest-Algorithms: MD5 SHA1
|
||||
MD5-Digest: xnFKNbJgc33dy/FJ+4cmHA==
|
||||
SHA1-Digest: 4YLgHgdgCw4lGCfsX7+r4zVmKJ4=
|
||||
|
||||
Name: chrome.manifest
|
||||
Digest-Algorithms: MD5 SHA1
|
||||
MD5-Digest: O5ce4bajAqUxG6iVul0K2w==
|
||||
SHA1-Digest: wb6VleWnV5GgLypmg1ij9TfmPLE=
|
||||
|
||||
Name: content/rkioskbrowser.js
|
||||
Digest-Algorithms: MD5 SHA1
|
||||
MD5-Digest: /cF15tfVnbkfbxRVTL5N+g==
|
||||
SHA1-Digest: lvbY92PbsjwY+0TguEYoXWw0lxQ=
|
||||
|
||||
Name: content/rkioskbrowser.xul
|
||||
Digest-Algorithms: MD5 SHA1
|
||||
MD5-Digest: NFOIpAmZtn20Y+XfTo4cpw==
|
||||
SHA1-Digest: VVIo7GdG+4mvAOtgR0DJUsSc/yg=
|
||||
|
||||
Name: content/rkioskunknownContentType.xul
|
||||
Digest-Algorithms: MD5 SHA1
|
||||
MD5-Digest: 6cNGoHJS9Xvm+wmvo4IesQ==
|
||||
SHA1-Digest: T8i1MkMKjmn5HICqWv+iXSPRKIU=
|
||||
|
||||
Name: content/rkioskxpinstallConfirm.xul
|
||||
Digest-Algorithms: MD5 SHA1
|
||||
MD5-Digest: SxN1YnRJiuood2WhU85v9g==
|
||||
SHA1-Digest: Msj21u4bTAKUi496xld5YCGdjiA=
|
||||
|
||||
BIN
Binary file not shown.
+4
@@ -0,0 +1,4 @@
|
||||
Signature-Version: 1.0
|
||||
MD5-Digest-Manifest: 7hFyhNW67+H+rf9OhWGDkA==
|
||||
SHA1-Digest-Manifest: HvfAQQLXphSZ9m8KBorJMX8MUnE=
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
The R-kiosk module has been downloaded from https://addons.mozilla.org/en-US/firefox/addon/r-kiosk/
|
||||
It is in the public domain as stated on https://addons.mozilla.org/en-US/firefox/addon/r-kiosk/eula/
|
||||
This mozilla module is shipped by Odoo to provide out of the box Client facing display to Odoo's Posbox
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
content RKiosk content/
|
||||
overlay chrome://browser/content/browser.xul chrome://rkiosk/content/rkioskbrowser.xul
|
||||
overlay chrome://mozapps/content/xpinstall/xpinstallConfirm.xul chrome://rkiosk/content/rkioskxpinstallConfirm.xul
|
||||
overlay chrome://mozapps/content/downloads/unknownContentType.xul chrome://rkiosk/content/rkioskunknownContentType.xul
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
function Rkiosk_donothing()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
function rkioskclose()
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
||||
function Rkiosk_navbar_setting()
|
||||
{
|
||||
var rkiosk_navbar_enable="true";
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"].
|
||||
getService(Components.interfaces.nsIPrefBranch);
|
||||
if (prefs.getPrefType("rkiosk.navbar") == prefs.PREF_BOOL){
|
||||
if (prefs.getBoolPref("rkiosk.navbar")) rkiosk_navbar_enable = "false";
|
||||
}
|
||||
var rkiosk_element = document.getElementById("navigator-toolbox");
|
||||
rkiosk_element.setAttribute("hidden", rkiosk_navbar_enable);
|
||||
}
|
||||
|
||||
function RkioskBrowserStartup()
|
||||
{
|
||||
Rkiosk_navbar_setting();
|
||||
BrowserStartup();
|
||||
setTimeout(RkioskdelayedStartup, 1000);
|
||||
}
|
||||
|
||||
function RkioskdelayedStartup()
|
||||
{
|
||||
window.fullScreen = true;
|
||||
}
|
||||
+175
@@ -0,0 +1,175 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<window id="main-window"
|
||||
onload="RkioskBrowserStartup()">
|
||||
</window>
|
||||
|
||||
<script type="application/x-javascript" src="rkioskbrowser.js"/>
|
||||
|
||||
<menubar id="main-menubar" hidden="true" fullscreentoolbar="false" disabled="true">
|
||||
<menuitem id="menu_preferences" disabled="true"/>
|
||||
</menubar>
|
||||
|
||||
<popup id="contentAreaContextMenu"
|
||||
onpopupshowing="if (event.target != this) return true; return false;"
|
||||
onpopuphiding="if (event.target == this) gContextMenu = null;">
|
||||
</popup>
|
||||
|
||||
<commandset id="mainCommandSet">
|
||||
<command id="cmd_newNavigator" disabled="true"/>
|
||||
<command id="cmd_handleBackspace" disabled="true"/>
|
||||
<command id="cmd_handleShiftBackspace" disabled="true"/>
|
||||
<command id="cmd_newNavigatorTab" disabled="true"/>
|
||||
<command id="Browser:OpenFile" disabled="true"/>
|
||||
<command id="Browser:SavePage" disabled="true"/>
|
||||
<command id="Browser:SaveFrame" disabled="true"/>
|
||||
<command id="Browser:SendLink" disabled="true"/>
|
||||
<command id="cmd_pageSetup" disabled="true"/>
|
||||
<command id="cmd_print" oncommand="PrintUtils.print();"/>
|
||||
<command id="cmd_printPreview" disabled="true"/>
|
||||
<command id="cmd_close" disabled="true"/>
|
||||
<command id="cmd_closeWindow" disabled="true"/>
|
||||
<command id="cmd_ToggleTabsOnTop" disabled="true"/>
|
||||
<command id="cmd_quitApplication" disabled="true"/>
|
||||
<command id="cmd_toggleTaskbar" disabled="true"/>
|
||||
<command id="cmd_CustomizeToolbars" disabled="true"/>
|
||||
<commandset id="editMenuCommands"/>
|
||||
<command id="View:PageSource" disabled="true"/>
|
||||
<command id="View:PageInfo" disabled="true"/>
|
||||
<command id="View:FullScreen" disabled="true"/>
|
||||
<command id="cmd_find" disabled="true"/>
|
||||
<command id="cmd_findAgain" disabled="true"/>
|
||||
<command id="cmd_findPrevious" disabled="true"/>
|
||||
<command id="Browser:AddBookmarkAs" disabled="true"/>
|
||||
<command id="Browser:BookmarkAllTabs" disabled="true"/>
|
||||
<command id="Browser:Home" oncommand="BrowserHome();"/>
|
||||
<command id="Browser:Back" disabled="true"/>
|
||||
<command id="Browser:Forward" disabled="true"/>
|
||||
<command id="Browser:Stop" disabled="true"/>
|
||||
<command id="Browser:Reload" disabled="true"/>
|
||||
<command id="Browser:ReloadSkipCache" disabled="true"/>
|
||||
<command id="Browser:BackOrBackDuplicate" disabled="true"/>
|
||||
<command id="Browser:Forward" disabled="true"/>
|
||||
<command id="Browser:ForwardOrForwardDuplicate" disabled="true"/>
|
||||
<command id="Browser:ReloadOrDuplicate" disabled="true"/>
|
||||
<command id="Browser:NextTab" disabled="true"/>
|
||||
<command id="Browser:PrevTab" disabled="true"/>
|
||||
<command id="Browser:ShowAllTabs" disabled="true"/>
|
||||
<command id="Browser:ToggleTabView" disabled="true"/>
|
||||
<command id="Browser:ToggleAddonBar" disabled="true"/>
|
||||
<command id="cmd_fullZoomReduce" disabled="true"/>
|
||||
<command id="cmd_fullZoomEnlarge" disabled="true"/>
|
||||
<command id="cmd_fullZoomReset" disabled="true"/>
|
||||
<command id="cmd_fullZoomToggle" disabled="true"/>
|
||||
<command id="Browser:OpenLocation" disabled="true"/>
|
||||
<command id="Tools:Search" disabled="true"/>
|
||||
<command id="Tools:Downloads" disabled="true"/>
|
||||
<command id="Tools:Addons" disabled="true"/>
|
||||
<command id="Tools:Sanitize" disabled="true"/>
|
||||
<command id="Tools:Inspect" disabled="true"/>
|
||||
<command id="Tools:PrivateBrowsing" disabled="true"/>
|
||||
<command id="History:UndoCloseTab" disabled="true"/>
|
||||
<command id="History:UndoCloseWindow" disabled="true"/>
|
||||
<command id="cmd_bm_open" disabled="true"/>
|
||||
<command id="cmd_bm_openinnewwindow" disabled="true"/>
|
||||
<command id="cmd_bm_openinnewtab" disabled="true"/>
|
||||
<command id="cmd_bm_openfolder" disabled="true"/>
|
||||
<command id="cmd_bm_managefolder" disabled="true"/>
|
||||
<command id="cmd_bm_newfolder" disabled="true"/>
|
||||
<command id="cmd_bm_newbookmark" disabled="true"/>
|
||||
<command id="cmd_bm_newseparator" disabled="true"/>
|
||||
<command id="cmd_bm_properties" disabled="true"/>
|
||||
<command id="cmd_bm_refreshlivemark" disabled="true"/>
|
||||
<command id="cmd_bm_refreshmicrosummary" disabled="true"/>
|
||||
<command id="cmd_bm_rename" disabled="true"/>
|
||||
<command id="cmd_bm_moveBookmark" disabled="true"/>
|
||||
<command id="cmd_bm_sortbyname" disabled="true"/>
|
||||
<command id="cmd_copyLink" disabled="true"/>
|
||||
<command id="cmd_copyImageLocation" disabled="true"/>
|
||||
<command id="cmd_copyImageContents" disabled="true"/>
|
||||
<command id="cmd_undo" disabled="true"/>
|
||||
<command id="cmd_redo" disabled="true"/>
|
||||
<command id="cmd_cut" disabled="true"/>
|
||||
<command id="cmd_copy" disabled="true"/>
|
||||
<command id="cmd_paste" disabled="true"/>
|
||||
<command id="cmd_delete" disabled="true"/>
|
||||
<command id="cmd_selectAll" disabled="true"/>
|
||||
<command id="cmd_switchTextDirection" disabled="true"/>
|
||||
<command id="cmd_textZoomReduce" disabled="true"/>
|
||||
<command id="cmd_textZoomEnlarge" disabled="true"/>
|
||||
<command id="cmd_textZoomReset" disabled="true"/>
|
||||
</commandset>
|
||||
<commandset id="placesCommands">
|
||||
<command id="Browser:ShowAllBookmarks" disabled="true"/>
|
||||
<command id="Browser:ShowAllHistory" disabled="true"/>
|
||||
</commandset>
|
||||
|
||||
<keyset id="mainKeyset">
|
||||
<key id="rkiosk_f1" keycode="VK_F1" oncommand="Rkiosk_donothing();"/>
|
||||
<key id="key_newNavigator" disabled="true"/>
|
||||
<key id="key_newNavigatorTab" disabled="true"/>
|
||||
<key id="focusURLBar" disabled="true"/>
|
||||
<key id="focusURLBar2" disabled="true"/>
|
||||
<key id="key_search" disabled="true"/>
|
||||
<key id="key_search2" disabled="true"/>
|
||||
<key id="key_openDownloads" disabled="true"/>
|
||||
<key id="openFileKb" disabled="true"/>
|
||||
<key id="key_savePage" disabled="true"/>
|
||||
<key id="printKb" disabled="true"/>
|
||||
<key id="key_close" disabled="true"/>
|
||||
<key id="key_closeWindow" disabled="true"/>
|
||||
<key id="key_undo" disabled="true"/>
|
||||
<key id="key_redo" disabled="true"/>
|
||||
<key id="key_cut" disabled="true"/>
|
||||
<key id="key_copy" disabled="true"/>
|
||||
<key id="key_paste" disabled="true"/>
|
||||
<key id="key_delete" disabled="true"/>
|
||||
<key id="key_selectAll" disabled="true"/>
|
||||
<key id="goBackKb" disabled="true"/>
|
||||
<key id="goForwardKb" disabled="true"/>
|
||||
<key id="goHome" keycode="VK_HOME" command="Browser:Home" modifiers="alt"/>
|
||||
<key id="key_viewSource" disabled="true"/>
|
||||
<key id="key_find" disabled="true"/>
|
||||
<key id="key_findAgain" disabled="true"/>
|
||||
<key id="key_findPrevious" disabled="true"/>
|
||||
<key id="addBookmarkAsKb" disabled="true"/>
|
||||
<key id="bookmarkAllTabsKb" disabled="true"/>
|
||||
<key id="key_stop" disabled="true"/>
|
||||
<key id="key_gotoHistory" command="Rkiosk_donothing();"/>
|
||||
<key id="key_switchTextDirection" disabled="true"/>
|
||||
<key id="key_sanitize" disabled="true"/>
|
||||
<key id="key_undoCloseTab" disabled="true"/>
|
||||
<key id="viewBookmarksSidebarKb" command="Rkiosk_donothing();"/>
|
||||
<key id="viewBookmarksSidebarWinKb" command="Rkiosk_donothing();"/>
|
||||
<key id="key_fullScreen" disabled="true"/>
|
||||
<key id="key_textZoomReduce" disabled="true"/>
|
||||
<key id="key_textZoomEnlarge" disabled="true"/>
|
||||
<key id="key_textZoomReset" disabled="true"/>
|
||||
<key id="showAllHistoryKb" disabled="true"/>
|
||||
<key id="key_errorConsole" disabled="true"/>
|
||||
<key id="manBookmarkKb" disabled="true"/>
|
||||
<key id="key_fullZoomReduce" disabled="true"/>
|
||||
<key id="key_fullZoomEnlarge" disabled="true"/>
|
||||
<key id="key_fullZoomReset" disabled="true"/>
|
||||
<key id="key_openAddons" disabled="true"/>
|
||||
<key id="key_webConsole" disabled="true"/>
|
||||
<key id="key_inspect" disabled="true"/>
|
||||
<key id="key_scratchpad" disabled="true"/>
|
||||
<key id="key_showAllTabs" disabled="true"/>
|
||||
<key id="key_tabview" disabled="true"/>
|
||||
<key id="key_privatebrowsing" disabled="true"/>
|
||||
<key id="key_undoCloseWindow" disabled="true"/>
|
||||
<key id="key_selectTab1" disabled="true"/>
|
||||
<key id="key_selectTab2" disabled="true"/>
|
||||
<key id="key_selectTab3" disabled="true"/>
|
||||
<key id="key_selectTab4" disabled="true"/>
|
||||
<key id="key_selectTab5" disabled="true"/>
|
||||
<key id="key_selectTab6" disabled="true"/>
|
||||
<key id="key_selectTab7" disabled="true"/>
|
||||
<key id="key_selectTab8" disabled="true"/>
|
||||
<key id="key_selectLastTab" disabled="true"/>
|
||||
<key id="key_toggleAddonBar" disabled="true"/>
|
||||
</keyset>
|
||||
</overlay>
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<overlay>
|
||||
<dialog id="unknownContentType"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="rkioskclose();">
|
||||
<script src="rkioskbrowser.js"/>
|
||||
</dialog>
|
||||
</overlay>
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<overlay>
|
||||
<dialog id="xpinstallConfirm"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="rkioskclose();">
|
||||
<script src="rkioskbrowser.js"/>
|
||||
</dialog>
|
||||
</overlay>
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
|
||||
|
||||
<Description about="urn:mozilla:install-manifest">
|
||||
|
||||
<em:id>{4D498D0A-05AD-4fdb-97B5-8A0AABC1FC5B}</em:id>
|
||||
<em:name>R-kiosk</em:name>
|
||||
<em:version>0.9.0.1-signed.1-signed</em:version>
|
||||
<em:description>RKiosk (Real Kiosk), fullscreen kiosk mode: all menus, keys etc. disabled</em:description>
|
||||
<em:creator>Kimmo Heinaaro</em:creator>
|
||||
<em:targetApplication>
|
||||
<Description>
|
||||
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
|
||||
<em:minVersion>2.0</em:minVersion>
|
||||
<em:maxVersion>6.*</em:maxVersion>
|
||||
</Description>
|
||||
</em:targetApplication>
|
||||
</Description>
|
||||
</RDF>
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
// Preferences to allow unattended install of R-Kiosk extension
|
||||
// Needed for Odoo posbox Client display
|
||||
pref("app.update.checkInstallTime", false);
|
||||
pref("devtools.webide.widget.autoinstall", false);
|
||||
pref("xpinstall.customConfirmationUI", false);
|
||||
pref("xpinstall.signatures.required", false);
|
||||
pref("browser.shell.checkDefaultBrowser",false)
|
||||
@@ -26,7 +26,7 @@ test -x $DAEMON || exit 0
|
||||
set -e
|
||||
|
||||
function _start() {
|
||||
start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER:$USER --background --make-pidfile --exec $DAEMON -- --config $CONFIG --logfile $LOGFILE --load=web,hw_proxy,hw_posbox_homepage,hw_posbox_upgrade,hw_scale,hw_scanner,hw_escpos,hw_blackbox_be
|
||||
start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER:$USER --background --make-pidfile --exec $DAEMON -- --config $CONFIG --logfile $LOGFILE --load=web,hw_proxy,hw_posbox_homepage,hw_posbox_upgrade,hw_scale,hw_scanner,hw_escpos,hw_blackbox_be,hw_screen
|
||||
}
|
||||
|
||||
function _stop() {
|
||||
|
||||
@@ -8,17 +8,25 @@ __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
__file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
|
||||
__base="$(basename ${__file} .sh)"
|
||||
|
||||
# Since we are emulating, the real /boot is not mounted,
|
||||
# leading to mismatch between kernel image and modules.
|
||||
mount /dev/sda1 /boot
|
||||
|
||||
# Recommends: antiword, graphviz, ghostscript, postgresql, python-gevent, poppler-utils
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
|
||||
|
||||
mount /dev/sda1 /boot
|
||||
|
||||
apt-get update
|
||||
apt-get -y dist-upgrade
|
||||
# Do not be too fast to upgrade to more recent firmware and kernel than 4.38
|
||||
# Firmware 4.44 seems to prevent the LED mechanism from working
|
||||
|
||||
PKGS_TO_INSTALL="adduser postgresql-client python python-dateutil python-decorator python-docutils python-feedparser python-imaging python-jinja2 python-ldap python-libxslt1 python-lxml python-mako python-mock python-openid python-passlib python-psutil python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-pypdf python-reportlab python-requests python-tz python-vatnumber python-vobject python-werkzeug python-xlwt python-yaml postgresql python-gevent python-serial python-pip python-dev localepurge vim mc mg screen iw hostapd isc-dhcp-server git rsync console-data"
|
||||
PKGS_TO_INSTALL="adduser postgresql-client python python-dateutil python-decorator python-docutils python-feedparser python-imaging python-jinja2 python-ldap python-libxslt1 python-lxml python-mako python-mock python-openid python-passlib python-psutil python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-pypdf python-reportlab python-requests python-tz python-vatnumber python-vobject python-werkzeug python-xlwt python-yaml postgresql python-gevent python-serial python-pip python-dev localepurge vim mc mg screen iw hostapd isc-dhcp-server git rsync console-data lightdm xserver-xorg-video-fbdev xserver-xorg-input-evdev iceweasel xdotool unclutter x11-utils openbox python-netifaces rpi-update"
|
||||
|
||||
apt-get -y install ${PKGS_TO_INSTALL}
|
||||
# KEEP OWN CONFIG FILES DURING PACKAGE CONFIGURATION
|
||||
# http://serverfault.com/questions/259226/automatically-keep-current-version-of-config-files-when-apt-get-install
|
||||
apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes install ${PKGS_TO_INSTALL}
|
||||
|
||||
apt-get clean
|
||||
localepurge
|
||||
@@ -32,13 +40,20 @@ pip install pyusb==1.0.0b1
|
||||
pip install qrcode
|
||||
pip install evdev
|
||||
|
||||
# --upgrade because websocket_client in wheezy is bad:
|
||||
# https://github.com/docker/compose/issues/1288
|
||||
pip install --upgrade websocket_client
|
||||
|
||||
groupadd usbusers
|
||||
usermod -a -G usbusers pi
|
||||
usermod -a -G lp pi
|
||||
usermod -a -G input lightdm
|
||||
|
||||
sudo -u postgres createuser -s pi
|
||||
mkdir /var/log/odoo
|
||||
chown pi:pi /var/log/odoo
|
||||
chown pi:pi -R /home/pi/odoo/
|
||||
chmod 770 -R /home/pi/odoo/
|
||||
|
||||
# logrotate is very picky when it comes to file permissions
|
||||
chown -R root:root /etc/logrotate.d/
|
||||
@@ -54,6 +69,31 @@ update-rc.d -f isc-dhcp-server remove
|
||||
systemctl daemon-reload
|
||||
systemctl enable ramdisks.service
|
||||
systemctl disable dphys-swapfile.service
|
||||
systemctl enable ssh
|
||||
|
||||
# USER PI AUTO LOGIN (from nano raspi-config)
|
||||
# We take the whole algorithm from raspi-config in order to stay compatible with raspbian infrastructure
|
||||
if command -v systemctl > /dev/null && systemctl | grep -q '\-\.mount'; then
|
||||
SYSTEMD=1
|
||||
elif [ -f /etc/init.d/cron ] && [ ! -h /etc/init.d/cron ]; then
|
||||
SYSTEMD=0
|
||||
else
|
||||
echo "Unrecognised init system"
|
||||
return 1
|
||||
fi
|
||||
if [ $SYSTEMD -eq 1 ]; then
|
||||
systemctl set-default graphical.target
|
||||
ln -fs /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
|
||||
else
|
||||
update-rc.d lightdm enable 2
|
||||
fi
|
||||
|
||||
# disable overscan in /boot/config.txt, we can't use
|
||||
# overwrite_after_init because it's on a different device
|
||||
# (/dev/mmcblk0p1) and we don't mount that afterwards.
|
||||
# This option disables any black strips around the screen
|
||||
# cf: https://www.raspberrypi.org/documentation/configuration/raspi-config.md
|
||||
echo "disable_overscan=1" >> /boot/config.txt
|
||||
|
||||
# https://www.raspberrypi.org/forums/viewtopic.php?p=79249
|
||||
# to not have "setting up console font and keymap" during boot take ages
|
||||
@@ -68,5 +108,6 @@ create_ramdisk_dir "/var"
|
||||
create_ramdisk_dir "/etc"
|
||||
create_ramdisk_dir "/tmp"
|
||||
mkdir /root_bypass_ramdisks
|
||||
umount /dev/sda1
|
||||
|
||||
reboot
|
||||
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
SUBSYSTEM=="input", GROUP="input", MODE="0660"
|
||||
KERNEL=="tty[0-9]*", GROUP="tty", MODE="0660"
|
||||
@@ -36,20 +36,25 @@ fi
|
||||
cp -a *raspbian*.img posbox.img
|
||||
|
||||
CLONE_DIR="${OVERWRITE_FILES_BEFORE_INIT_DIR}/home/pi/odoo"
|
||||
|
||||
rm -rf "${CLONE_DIR}"
|
||||
mkdir "${CLONE_DIR}"
|
||||
git clone -b 8.0 --no-checkout --depth 1 https://github.com/odoo/odoo.git "${CLONE_DIR}"
|
||||
cd "${CLONE_DIR}"
|
||||
git config core.sparsecheckout true
|
||||
echo "addons/web
|
||||
|
||||
if [ ! -d $CLONE_DIR ]; then
|
||||
echo "Clone Github repo"
|
||||
mkdir -p "${CLONE_DIR}"
|
||||
git clone -b 8.0 --no-local --no-checkout --depth 1 https://github.com/odoo/odoo.git "${CLONE_DIR}"
|
||||
cd "${CLONE_DIR}"
|
||||
git config core.sparsecheckout true
|
||||
echo "addons/web
|
||||
addons/web_kanban
|
||||
addons/hw_*
|
||||
addons/point_of_sale/tools/posbox/configuration
|
||||
openerp/
|
||||
odoo.py" | tee --append .git/info/sparse-checkout > /dev/null
|
||||
git read-tree -mu HEAD
|
||||
cd "${__dir}"
|
||||
git read-tree -mu HEAD
|
||||
fi
|
||||
|
||||
cd "${__dir}"
|
||||
USR_BIN="${OVERWRITE_FILES_BEFORE_INIT_DIR}/usr/bin/"
|
||||
mkdir -p "${USR_BIN}"
|
||||
cd "/tmp"
|
||||
@@ -60,9 +65,11 @@ cd "${__dir}"
|
||||
mv /tmp/ngrok "${USR_BIN}"
|
||||
|
||||
# zero pad the image to be around 3.5 GiB, by default the image is only ~1.3 GiB
|
||||
echo "Enlarging the image..."
|
||||
dd if=/dev/zero bs=1M count=2048 >> posbox.img
|
||||
|
||||
# resize partition table
|
||||
echo "Fdisking"
|
||||
START_OF_ROOT_PARTITION=$(fdisk -l posbox.img | tail -n 1 | awk '{print $2}')
|
||||
(echo 'p'; # print
|
||||
echo 'd'; # delete
|
||||
@@ -75,7 +82,7 @@ START_OF_ROOT_PARTITION=$(fdisk -l posbox.img | tail -n 1 | awk '{print $2}')
|
||||
echo 'p'; # print
|
||||
echo 'w') | fdisk posbox.img # write and quit
|
||||
|
||||
LOOP_MAPPER_PATH=$(kpartx -av posbox.img | tail -n 1 | cut -d ' ' -f 3)
|
||||
LOOP_MAPPER_PATH=$(kpartx -avs posbox.img | tail -n 1 | cut -d ' ' -f 3)
|
||||
LOOP_MAPPER_PATH="/dev/mapper/${LOOP_MAPPER_PATH}"
|
||||
sleep 5
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class PurchaseOrder(models.Model):
|
||||
if min_date:
|
||||
order.date_planned = min_date
|
||||
|
||||
@api.depends('state', 'order_line.qty_invoiced', 'order_line.product_qty')
|
||||
@api.depends('state', 'order_line.qty_invoiced', 'order_line.qty_received', 'order_line.product_qty')
|
||||
def _get_invoiced(self):
|
||||
precision = self.env['decimal.precision'].precision_get('Product Unit of Measure')
|
||||
for order in self:
|
||||
@@ -50,9 +50,9 @@ class PurchaseOrder(models.Model):
|
||||
order.invoice_status = 'no'
|
||||
continue
|
||||
|
||||
if any(float_compare(line.qty_invoiced, line.product_qty, precision_digits=precision) == -1 for line in order.order_line):
|
||||
if any(float_compare(line.qty_invoiced, line.product_qty if line.product_id.purchase_method == 'purchase' else line.qty_received, precision_digits=precision) == -1 for line in order.order_line):
|
||||
order.invoice_status = 'to invoice'
|
||||
elif all(float_compare(line.qty_invoiced, line.product_qty, precision_digits=precision) >= 0 for line in order.order_line):
|
||||
elif all(float_compare(line.qty_invoiced, line.product_qty if line.product_id.purchase_method == 'purchase' else line.qty_received, precision_digits=precision) >= 0 for line in order.order_line):
|
||||
order.invoice_status = 'invoiced'
|
||||
else:
|
||||
order.invoice_status = 'no'
|
||||
@@ -521,7 +521,10 @@ class PurchaseOrderLine(models.Model):
|
||||
qty = 0.0
|
||||
for inv_line in line.invoice_lines:
|
||||
if inv_line.invoice_id.state not in ['cancel']:
|
||||
qty += inv_line.uom_id._compute_quantity(inv_line.quantity, line.product_uom)
|
||||
if inv_line.invoice_id.type == 'in_invoice':
|
||||
qty += inv_line.uom_id._compute_quantity(inv_line.quantity, line.product_uom)
|
||||
elif inv_line.invoice_id.type == 'in_refund':
|
||||
qty -= inv_line.uom_id._compute_quantity(inv_line.quantity, line.product_uom)
|
||||
line.qty_invoiced = qty
|
||||
|
||||
@api.depends('order_id.state', 'move_ids.state')
|
||||
@@ -579,8 +582,8 @@ class PurchaseOrderLine(models.Model):
|
||||
invoice_lines = fields.One2many('account.invoice.line', 'purchase_line_id', string="Bill Lines", readonly=True, copy=False)
|
||||
|
||||
# Replace by invoiced Qty
|
||||
qty_invoiced = fields.Float(compute='_compute_qty_invoiced', string="Billed Qty", store=True)
|
||||
qty_received = fields.Float(compute='_compute_qty_received', string="Received Qty", store=True)
|
||||
qty_invoiced = fields.Float(compute='_compute_qty_invoiced', string="Billed Qty", digits=dp.get_precision('Product Unit of Measure'), store=True)
|
||||
qty_received = fields.Float(compute='_compute_qty_received', string="Received Qty", digits=dp.get_precision('Product Unit of Measure'), store=True)
|
||||
|
||||
partner_id = fields.Many2one('res.partner', related='order_id.partner_id', string='Partner', readonly=True, store=True)
|
||||
currency_id = fields.Many2one(related='order_id.currency_id', store=True, string='Currency', readonly=True)
|
||||
@@ -1041,7 +1044,7 @@ class ProductTemplate(models.Model):
|
||||
|
||||
@api.model
|
||||
def _get_buy_route(self):
|
||||
buy_route = self.env.ref('purchase.route_warehouse0_buy')
|
||||
buy_route = self.env.ref('purchase.route_warehouse0_buy', raise_if_not_found=False)
|
||||
if buy_route:
|
||||
return buy_route.ids
|
||||
return []
|
||||
|
||||
@@ -22,6 +22,7 @@ class TestPurchaseOrder(AccountingTestCase):
|
||||
self.product_id_1 = self.env.ref('product.product_product_8')
|
||||
self.product_id_2 = self.env.ref('product.product_product_11')
|
||||
|
||||
(self.product_id_1 | self.product_id_2).write({'purchase_method': 'purchase'})
|
||||
# Ensure product_id_2 doesn't have res_partner_1 as supplier
|
||||
if self.partner_id in self.product_id_2.seller_ids.mapped('name'):
|
||||
id_to_remove = self.product_id_2.seller_ids.filtered(lambda r: r.name == self.partner_id).ids[0] if self.product_id_2.seller_ids.filtered(lambda r: r.name == self.partner_id) else False
|
||||
@@ -80,6 +81,7 @@ class TestPurchaseOrder(AccountingTestCase):
|
||||
'partner_id': self.partner_id.id,
|
||||
'purchase_id': self.po.id,
|
||||
'account_id': self.partner_id.property_account_payable_id.id,
|
||||
'type': 'in_invoice',
|
||||
})
|
||||
self.invoice.purchase_order_change()
|
||||
self.assertEqual(self.po.order_line.mapped('qty_invoiced'), [5.0, 5.0], 'Purchase: all products should be invoiced"')
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
</tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
<tr><td style="padding:15px 20px 10px 20px;">${object.user_id.signature or ''| safe}</td></tr>
|
||||
<tr><td style="padding:15px 20px 10px 20px;">${(object.user_id.signature or '')| safe}</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="width:600px;margin:auto;text-align:center;font-size:12px;">
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
odoo.define('report.editor', function (require) {
|
||||
'use strict';
|
||||
|
||||
var ajax = require('web.ajax');
|
||||
var core = require('web.core');
|
||||
var utils = require('report.utils');
|
||||
var editor = require('web_editor.editor');
|
||||
var options = require('web_editor.snippets.options');
|
||||
@@ -10,6 +12,8 @@ var trusted_host = utils.get_host_from_url(web_base_url);
|
||||
var trusted_protocol = utils.get_protocol_from_url(web_base_url);
|
||||
var trusted_origin = utils.build_origin(trusted_protocol, trusted_host);
|
||||
|
||||
ajax.loadXML('/web/static/src/xml/base_common.xml', core.qweb);
|
||||
|
||||
// Patch the editor's behavior when it is launched inside an iframe.
|
||||
if (window.self !== window.top) {
|
||||
$(document.body).addClass('o_in_iframe'); // in order to apply css rules
|
||||
|
||||
@@ -820,6 +820,7 @@ class SaleOrderLine(models.Model):
|
||||
|
||||
@api.multi
|
||||
def _get_display_price(self, product):
|
||||
# TO DO: move me in master/saas-16 on sale.order
|
||||
if self.order_id.pricelist_id.discount_policy == 'without_discount':
|
||||
from_currency = self.order_id.company_id.currency_id
|
||||
return from_currency.compute(product.lst_price, self.order_id.pricelist_id.currency_id)
|
||||
|
||||
@@ -375,7 +375,7 @@ class StockMove(models.Model):
|
||||
rules = Push.search(domain + [('route_id', 'in', move.picking_id.picking_type_id.warehouse_id.route_ids.ids)], order='route_sequence, sequence', limit=1)
|
||||
if not rules:
|
||||
# if no specialized push rule has been found yet, we try to find a general one (without route)
|
||||
rules = Push.search(domain + [('route_id', '=', False)], order='sequence')
|
||||
rules = Push.search(domain + [('route_id', '=', False)], order='sequence', limit=1)
|
||||
# Make sure it is not returning the return
|
||||
if rules and (not move.origin_returned_move_id or move.origin_returned_move_id.location_dest_id.id != rules.location_dest_id.id):
|
||||
rules._apply(move)
|
||||
@@ -564,6 +564,7 @@ class StockMove(models.Model):
|
||||
moves_to_assign = self.env['stock.move']
|
||||
moves_to_do = self.env['stock.move']
|
||||
operations = self.env['stock.pack.operation']
|
||||
ancestors_list = {}
|
||||
|
||||
# work only on in progress moves
|
||||
moves = self.filtered(lambda move: move.state in ['confirmed', 'waiting', 'assigned'])
|
||||
@@ -586,6 +587,7 @@ class StockMove(models.Model):
|
||||
# we always search for yet unassigned quants
|
||||
main_domain[move.id] = [('reservation_id', '=', False), ('qty', '>', 0)]
|
||||
|
||||
ancestors_list[move.id] = True if ancestors else False
|
||||
if move.state == 'waiting' and not ancestors:
|
||||
# if the waiting move hasn't yet any ancestor (PO/MO not confirmed yet), don't find any quant available in stock
|
||||
main_domain[move.id] += [('id', '=', False)]
|
||||
@@ -629,7 +631,9 @@ class StockMove(models.Model):
|
||||
lot_qty[lot] -= qty
|
||||
move_qty -= qty
|
||||
|
||||
for move in moves_to_do:
|
||||
# Sort moves to reserve first the ones with ancestors, in case the same product is listed in
|
||||
# different stock moves.
|
||||
for move in sorted(moves_to_do, key=lambda x: -1 if ancestors_list.get(x.id) else 0):
|
||||
# then if the move isn't totally assigned, try to find quants without any specific domain
|
||||
if move.state != 'assigned' and not self.env.context.get('reserve_only_ops'):
|
||||
qty_already_assigned = move.reserved_availability
|
||||
|
||||
@@ -74,4 +74,4 @@ access_barcode_rule_stock_user,barcode.rule.stock.user,barcodes.model_barcode_ru
|
||||
access_barcode_rule_stock_manager,barcode.rule.stock.manager,barcodes.model_barcode_rule,stock.group_stock_manager,1,1,1,1
|
||||
access_stock_forecast_user,report.stock.forecast.user,model_report_stock_forecast,stock.group_stock_user,1,0,0,0
|
||||
access_stock_forecast_manager,report.stock.forecast.manager,model_report_stock_forecast,stock.group_stock_manager,1,1,1,1
|
||||
access_stock_scrap_user,stock.scrap.user,model_stock_scrap,stock.group_stock_user,1,0,0,0
|
||||
access_stock_scrap_user,stock.scrap.user,model_stock_scrap,stock.group_stock_user,1,1,1,0
|
||||
|
||||
|
@@ -1,4 +1,6 @@
|
||||
#wrapwrap {
|
||||
width: 85%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
@media (min-width: @screen-sm-min){
|
||||
width: 85%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -850,31 +850,62 @@ function eval_contexts (contexts, evaluation_context) {
|
||||
function eval_domains (domains, evaluation_context) {
|
||||
evaluation_context = _.extend(pycontext(), evaluation_context || {});
|
||||
var result_domain = [];
|
||||
// Normalize only if the first domain is the array ["|"] or ["!"]
|
||||
var need_normalization = (
|
||||
domains &&
|
||||
domains.length > 0 &&
|
||||
domains[0].length === 1 &&
|
||||
(domains[0][0] === "|" || domains[0][0] === "!")
|
||||
);
|
||||
_(domains).each(function (domain) {
|
||||
if (_.isString(domain)) {
|
||||
// wrap raw strings in domain
|
||||
domain = { __ref: 'domain', __debug: domain };
|
||||
}
|
||||
var domain_array_to_combine;
|
||||
switch(domain.__ref) {
|
||||
case 'domain':
|
||||
evaluation_context.context = evaluation_context;
|
||||
result_domain.push.apply(
|
||||
result_domain, py.eval(domain.__debug, wrap_context(evaluation_context)));
|
||||
domain_array_to_combine = py.eval(domain.__debug, wrap_context(evaluation_context));
|
||||
break;
|
||||
case 'compound_domain':
|
||||
var eval_context = eval_contexts([domain.__eval_context]);
|
||||
result_domain.push.apply(
|
||||
result_domain, eval_domains(
|
||||
domain.__domains, _.extend(
|
||||
{}, evaluation_context, eval_context)));
|
||||
domain_array_to_combine = eval_domains(
|
||||
domain.__domains, _.extend({}, evaluation_context, eval_context)
|
||||
);
|
||||
break;
|
||||
default:
|
||||
result_domain.push.apply(result_domain, domain);
|
||||
domain_array_to_combine = domain;
|
||||
}
|
||||
if (need_normalization) {
|
||||
domain_array_to_combine = get_normalized_domain(domain_array_to_combine);
|
||||
}
|
||||
result_domain.push.apply(result_domain, domain_array_to_combine);
|
||||
});
|
||||
return result_domain;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a normalized copy of the given domain array. Normalization is
|
||||
* is making the implicit "&" at the start of the domain explicit, e.g.
|
||||
* [A, B, C] would become ["&", "&", A, B, C].
|
||||
*
|
||||
* @param {Array} domain_array
|
||||
* @returns {Array} normalized copy of the given array
|
||||
*/
|
||||
function get_normalized_domain(domain_array) {
|
||||
var expected = 1; // Holds the number of expected domain expressions
|
||||
_.each(domain_array, function (item) {
|
||||
if (item === "&" || item === "|") {
|
||||
expected++;
|
||||
} else if (item !== "!") {
|
||||
expected--;
|
||||
}
|
||||
});
|
||||
var new_explicit_ands = _.times(-expected, _.constant("&"));
|
||||
return new_explicit_ands.concat(domain_array);
|
||||
}
|
||||
|
||||
function eval_groupbys (contexts, evaluation_context) {
|
||||
evaluation_context = _.extend(pycontext(), evaluation_context || {});
|
||||
var result_group = [];
|
||||
|
||||
@@ -959,7 +959,8 @@ var X2ManyListView = ListView.extend({
|
||||
field.no_rerender = true;
|
||||
current_values[field.name] = field.get('value');
|
||||
});
|
||||
var cached_records = _.filter(this.dataset.cache, function(item){return !_.isEmpty(item.values) && !item.to_delete;});
|
||||
var ids = _.map(this.records.records, function (item) { return item.attributes.id; });
|
||||
var cached_records = _.filter(this.dataset.cache, function(item){return _.contains(ids, item.id) && !_.isEmpty(item.values) && !item.to_delete;});
|
||||
var valid = _.every(cached_records, function(record){
|
||||
_.each(fields, function(field){
|
||||
var value = record.values[field.name];
|
||||
|
||||
@@ -55,7 +55,6 @@ var FormView = View.extend(common.FieldManagerMixin, {
|
||||
this.fields = {};
|
||||
this.fields_order = [];
|
||||
this.datarecord = {};
|
||||
this._onchange_specs = {};
|
||||
this.onchanges_mutex = new utils.Mutex();
|
||||
this.default_focus_field = null;
|
||||
this.default_focus_button = null;
|
||||
@@ -75,7 +74,6 @@ var FormView = View.extend(common.FieldManagerMixin, {
|
||||
this.rendering_engine = new FormRenderingEngine(this);
|
||||
this.set({actual_mode: this.options.initial_mode});
|
||||
this.has_been_loaded.done(function() {
|
||||
self._build_onchange_specs();
|
||||
self.on("change:actual_mode", self, self.toggle_buttons);
|
||||
self.on("change:actual_mode", self, self.toggle_sidebar);
|
||||
});
|
||||
@@ -318,8 +316,11 @@ var FormView = View.extend(common.FieldManagerMixin, {
|
||||
this.update_pager(); // the mode must be actualized before updating the pager
|
||||
return $.when.apply(null, set_values).then(function() {
|
||||
if (!record.id) {
|
||||
// trigger onchanges
|
||||
self.do_onchange(null);
|
||||
// trigger onchange for new record after x2many with non-embedded views are loaded
|
||||
var fields_loaded = _.pluck(self.fields, 'is_loaded');
|
||||
$.when.apply(null, fields_loaded).done(function() {
|
||||
self.do_onchange(null);
|
||||
});
|
||||
}
|
||||
self.on_form_changed();
|
||||
self.rendering_engine.init_fields().then(function() {
|
||||
@@ -333,7 +334,7 @@ var FormView = View.extend(common.FieldManagerMixin, {
|
||||
} else {
|
||||
self.do_push_state({});
|
||||
}
|
||||
self.$el.removeClass('oe_form_dirty');
|
||||
self.$el.removeClass('oe_form_dirty');
|
||||
});
|
||||
});
|
||||
},
|
||||
@@ -381,7 +382,24 @@ var FormView = View.extend(common.FieldManagerMixin, {
|
||||
_.each(this.fields, function(field, name) {
|
||||
self._onchange_fields.push(name);
|
||||
self._onchange_specs[name] = find(name, field.node);
|
||||
_.each(field.field.views, function(view) {
|
||||
|
||||
// we get the list of first-level fields of x2many firstly by
|
||||
// getting them from the field embedded views, then if no embedded
|
||||
// view is present for a loaded view, we get them from the default
|
||||
// view that has been loaded
|
||||
|
||||
// gather embedded view objects
|
||||
var views = _.clone(field.field.views);
|
||||
// also gather default view objects
|
||||
if (field.viewmanager) {
|
||||
_.each(field.viewmanager.views, function(view, view_type) {
|
||||
// add default view if it was not embedded and it is loaded
|
||||
if (views[view_type] === undefined && view.controller) {
|
||||
views[view_type] = view.controller.fields_view;
|
||||
}
|
||||
});
|
||||
}
|
||||
_.each(views, function(view) {
|
||||
_.each(view.fields, function(_, subname) {
|
||||
self._onchange_specs[name + '.' + subname] = find(subname, view.arch);
|
||||
});
|
||||
@@ -410,6 +428,9 @@ var FormView = View.extend(common.FieldManagerMixin, {
|
||||
|
||||
do_onchange: function(widget) {
|
||||
var self = this;
|
||||
if (self._onchange_specs === undefined) {
|
||||
self._build_onchange_specs();
|
||||
}
|
||||
var onchange_specs = self._onchange_specs;
|
||||
try {
|
||||
var def = $.when({});
|
||||
|
||||
@@ -948,9 +948,11 @@ ListView.List = Class.extend({
|
||||
$row = self.$current.children(
|
||||
'[data-id=' + record.get('id') + ']');
|
||||
}
|
||||
var $newRow = $(self.render_record(record));
|
||||
$newRow.find('.o_list_record_selector input').prop('checked', !!$row.find('.o_list_record_selector input').prop('checked'));
|
||||
$row.replaceWith($newRow);
|
||||
if ($row.length) {
|
||||
var $newRow = $(self.render_record(record));
|
||||
$newRow.find('.o_list_record_selector input').prop('checked', !!$row.find('.o_list_record_selector input').prop('checked'));
|
||||
$row.replaceWith($newRow);
|
||||
}
|
||||
},
|
||||
'add': function (ev, records, record, index) {
|
||||
var $new_row = $(self.render_record(record));
|
||||
|
||||
@@ -828,6 +828,10 @@ ListView.List.include(/** @lends instance.web.ListView.List# */{
|
||||
if (!this.view.editable() || !this.view.is_action_enabled('edit')) {
|
||||
return this._super.apply(this, arguments);
|
||||
}
|
||||
if (this.__is_starting_edition) {
|
||||
return;
|
||||
}
|
||||
this.__is_starting_edition = true;
|
||||
|
||||
var self = this;
|
||||
var args = arguments;
|
||||
@@ -839,6 +843,8 @@ ListView.List.include(/** @lends instance.web.ListView.List# */{
|
||||
focus_field: $(event.target).not(".o_readonly").data('field'),
|
||||
}).fail(function() {
|
||||
return _super.apply(self, args); // The record can't be edited so open it in a modal (use-case: readonly mode)
|
||||
}).always(function () {
|
||||
self.__is_starting_edition = false;
|
||||
});
|
||||
},
|
||||
/**
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
opacity: 1;
|
||||
|
||||
.tooltip-inner {
|
||||
max-width: 300px; // fallback for browsers which do not support "vw" unit
|
||||
max-width: 100vw;
|
||||
background-color: @odoo-tooltip-background-color;
|
||||
color: @odoo-tooltip-color;
|
||||
border-radius: @border-radius-base;
|
||||
|
||||
@@ -534,7 +534,7 @@ odoo.define_section('eval.edc.nonliterals', ['web.pyeval', 'web.session'], funct
|
||||
var result = pyeval.sync_eval_domains_and_contexts({
|
||||
domains: [
|
||||
[['type', '=', 'contract']],
|
||||
{ "__domains": [["|"], [["state", "in", ["open", "draft"]]], [["state", "=", "pending"]]],
|
||||
{ "__domains": [["|"], [["state", "in", ["open", "draft"]]], [["type", "=", "contract"], ["state", "=", "pending"]]],
|
||||
"__eval_context": null,
|
||||
"__ref": "compound_domain"
|
||||
},
|
||||
@@ -550,7 +550,8 @@ odoo.define_section('eval.edc.nonliterals', ['web.pyeval', 'web.session'], funct
|
||||
assert.deepEqual(result.domain, [
|
||||
["type", "=", "contract"],
|
||||
"|", ["state", "in", ["open", "draft"]],
|
||||
["state", "=", "pending"],
|
||||
"&", ["type", "=", "contract"],
|
||||
["state", "=", "pending"],
|
||||
"|",
|
||||
"&", ["date", "!=", false],
|
||||
["date", "<=", today],
|
||||
|
||||
@@ -332,7 +332,7 @@ var CalendarView = View.extend({
|
||||
self.proxy('update_record')(event._id, data);
|
||||
},
|
||||
eventRender: function (event, element, view) {
|
||||
element.find('.fc-event-title').html(event.title);
|
||||
element.find('.fc-event-title').html(event.title + event.attendee_avatars);
|
||||
},
|
||||
eventAfterRender: function (event, element, view) {
|
||||
if ((view.name !== 'month') && (((event.end-event.start)/60000)<=30)) {
|
||||
@@ -633,7 +633,6 @@ var CalendarView = View.extend({
|
||||
if (attendee_other.length>2) {
|
||||
the_title_avatar += '<span class="o_attendee_head" title="' + attendee_other.slice(0, -2) + '">+</span>';
|
||||
}
|
||||
the_title = the_title_avatar + the_title;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -642,9 +641,10 @@ var CalendarView = View.extend({
|
||||
date_stop = m_start.toDate();
|
||||
}
|
||||
var r = {
|
||||
'start': moment(date_start).toISOString(),
|
||||
'end': moment(date_stop).toISOString(),
|
||||
'start': moment(date_start).toString(),
|
||||
'end': moment(date_stop).toString(),
|
||||
'title': the_title,
|
||||
'attendee_avatars': the_title_avatar,
|
||||
'allDay': (this.fields[this.date_start].type == 'date' || (this.all_day && evt[this.all_day]) || false),
|
||||
'id': evt.id,
|
||||
'attendees':attendees
|
||||
|
||||
@@ -182,7 +182,7 @@ class IrUiView(models.Model):
|
||||
"""
|
||||
user_groups = set(self.env.user.groups_id)
|
||||
views = self.with_context(active_test=False)._views_get(key, bundles=bundles)
|
||||
views = views.filtered(lambda v: user_groups.issuperset(v.groups_id))
|
||||
views = views.filtered(lambda v: not v.groups_id or len(user_groups.intersection(v.groups_id)))
|
||||
return views
|
||||
|
||||
@api.model
|
||||
|
||||
@@ -131,7 +131,7 @@ var font_to_img = function ($editable) {
|
||||
var icon, content;
|
||||
_.find(widget.fontIcons, function (font) {
|
||||
return _.find(widget.getCssSelectors(font.parser), function (css) {
|
||||
if ($font.is(css[0].replace(/::?before$/, ''))) {
|
||||
if ($font.is(css[0].replace(/::?before/g, ''))) {
|
||||
icon = css[2].split("-").shift();
|
||||
content = css[1].match(/content:\s*['"]?(.)['"]?/)[1];
|
||||
return true;
|
||||
|
||||
@@ -564,6 +564,7 @@ var getCssSelectors = function (filter) {
|
||||
if (!data) {
|
||||
data = [match[1], rules[r].cssText.replace(/(^.*\{\s*)|(\s*\}\s*$)/g, ''), clean, [clean]];
|
||||
} else {
|
||||
data[0] += (", " + match[1]);
|
||||
data[3].push(clean);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@ var KanbanView = View.extend({
|
||||
|
||||
// fetch group data (display information)
|
||||
var group_ids = _.without(_.map(groups, function (elem) { return elem.attributes.value[0];}), undefined);
|
||||
if (options.grouped_by_m2o && group_ids.length) {
|
||||
if (options.grouped_by_m2o && group_ids.length && group_by_fields_to_read.length) {
|
||||
return new data.DataSet(self, options.relation)
|
||||
.read_ids(group_ids, _.union(['display_name'], group_by_fields_to_read))
|
||||
.then(function(results) {
|
||||
|
||||
@@ -566,9 +566,11 @@
|
||||
<ul>
|
||||
<li>Set a clear, explicit and concise question title
|
||||
(check
|
||||
<a href="#" data-placement="top" data-trigger="focus" data-toggle="popover" data-content="Inventory Date Problem, Task remaining hours, Can you help solve solve my tax computation problem in Canada?" title="Click to get bad question samples">bad examples</a>
|
||||
<t t-set="message_content_01">Inventory Date Problem, Task remaining hours, Can you help solve solve my tax computation problem in Canada?</t>
|
||||
<a href="#" data-placement="top" data-trigger="focus" data-toggle="popover" t-att-data-content="message_content_01" title="Click to get bad question samples">bad examples</a>
|
||||
and
|
||||
<a href="#" data-placement="bottom" data-trigger="focus" data-toggle="popover" data-content="How to create a physical inventory at an anterior date?, How is the 'remaining hours' field computed on tasks?, How to configure TPS and TVQ's canadian taxes?" title="Click to get good question titles">good examples</a>
|
||||
<t t-set="message_content_02">How to create a physical inventory at an anterior date?, How is the 'remaining hours' field computed on tasks?, How to configure TPS and TVQ's canadian taxes?</t>
|
||||
<a href="#" data-placement="bottom" data-trigger="focus" data-toggle="popover" t-att-data-content="message_content_02" title="Click to get good question titles">good examples</a>
|
||||
),
|
||||
</li>
|
||||
<li>Avoid unnecessary introductions (Hi,... Please... Thanks...),</li>
|
||||
|
||||
@@ -58,7 +58,7 @@ class SaleQuoteLine(models.Model):
|
||||
def _onchange_product_id(self):
|
||||
self.ensure_one()
|
||||
if self.product_id:
|
||||
name = self.product_id.name
|
||||
name = self.product_id.name_get()[0][1]
|
||||
if self.product_id.description_sale:
|
||||
name += '\n' + self.product_id.description_sale
|
||||
self.name = name
|
||||
|
||||
@@ -530,17 +530,18 @@ class WebsiteSale(http.Controller):
|
||||
@http.route(['/shop/address'], type='http', methods=['GET', 'POST'], auth="public", website=True)
|
||||
def address(self, **kw):
|
||||
Partner = request.env['res.partner'].with_context(show_address=1).sudo()
|
||||
order = request.website.sale_get_order(force_create=1)
|
||||
order = request.website.sale_get_order()
|
||||
|
||||
redirection = self.checkout_redirection(order)
|
||||
if redirection:
|
||||
return redirection
|
||||
|
||||
mode = (False, False)
|
||||
def_country_id = order.partner_id.country_id
|
||||
values, errors = {}, {}
|
||||
|
||||
partner_id = int(kw.get('partner_id', -1))
|
||||
|
||||
redirection = self.checkout_redirection(order)
|
||||
if redirection:
|
||||
return redirection
|
||||
|
||||
# IF PUBLIC ORDER
|
||||
if order.partner_id.id == request.website.user_id.sudo().partner_id.id:
|
||||
mode = ('new', 'billing')
|
||||
|
||||
@@ -68,12 +68,18 @@ class SaleOrder(models.Model):
|
||||
})
|
||||
product = self.env['product.product'].with_context(product_context).browse(product_id)
|
||||
|
||||
pu = product.price
|
||||
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(order_line._get_display_price(product), product.taxes_id, order_line.tax_id)
|
||||
|
||||
return {
|
||||
'product_id': product_id,
|
||||
'product_uom_qty': qty,
|
||||
'order_id': order_id,
|
||||
'product_uom': product.uom_id.id,
|
||||
'price_unit': product.price,
|
||||
'price_unit': pu,
|
||||
}
|
||||
|
||||
@api.multi
|
||||
@@ -144,10 +150,12 @@ class SaleOrder(models.Model):
|
||||
# update line
|
||||
values = self._website_product_id_change(self.id, product_id, qty=quantity)
|
||||
|
||||
|
||||
|
||||
if self.pricelist_id.discount_policy == 'with_discount' and not self.env.context.get('fixed_price'):
|
||||
values['price_unit'] = order_line._get_display_price(order_line.product_id)
|
||||
values['price_unit'] = self.env['account.tax']._fix_tax_included_price(
|
||||
order_line._get_display_price(order_line.product_id),
|
||||
order_line.product_id.taxes_id,
|
||||
order_line.tax_id
|
||||
)
|
||||
|
||||
order_line.write(values)
|
||||
|
||||
|
||||
@@ -32,3 +32,4 @@ Leonardo Astros leonardo@vauxoo.com https://github.com/Codemaker83
|
||||
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
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
France, 2017-03-24
|
||||
|
||||
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,
|
||||
|
||||
Sébastien Le Ray <sebastien-github@orniz.org> https://github.com/beuss
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user