summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2015-05-05 18:48:34 +0200
committerChristophe Simonis <chs@odoo.com>2015-05-05 18:48:34 +0200
commit22604968793a7cc12c8fcf89411ba5b79c0642b3 (patch)
tree7332814024d0a8f872e726b4f907020cc3a6a341
parent28b5d0da0d05b2f4cd68ffbd39288f9f01c8f57f (diff)
parenta939a272efa7cdd047e79a0a6da361e94ca93d4f (diff)
[MERGE] forward port of branch 8.0 up to a939a27
-rw-r--r--addons/account/account.py41
-rw-r--r--addons/account/account_bank_statement.py8
-rw-r--r--addons/account/report/account_invoice_report.py21
-rw-r--r--addons/account/report/report_vat.py7
-rw-r--r--addons/account/static/src/css/account_bank_statement_reconciliation.css1
-rw-r--r--addons/account/static/src/css/account_bank_statement_reconciliation.scss1
-rw-r--r--addons/account/static/src/js/account_widgets.js9
-rw-r--r--addons/account/static/src/xml/account_bank_statement_reconciliation.xml2
-rw-r--r--addons/account/tests/test_search.py15
-rw-r--r--addons/account/wizard/account_statement_from_invoice.py8
-rw-r--r--addons/account_followup/account_followup.py2
-rw-r--r--addons/account_followup/report/account_followup_print.py2
-rw-r--r--addons/auth_ldap/users_ldap.py4
-rw-r--r--addons/delivery/sale.py7
-rw-r--r--addons/hr_timesheet_invoice/hr_timesheet_invoice.py4
-rw-r--r--addons/l10n_ca/account_chart_en.xml655
-rw-r--r--addons/l10n_ca/account_chart_fr.xml691
-rw-r--r--addons/l10n_ca/account_tax_en.xml64
-rw-r--r--addons/l10n_ca/account_tax_fr.xml64
-rw-r--r--addons/mass_mailing/models/mass_mailing_stats.py2
-rw-r--r--addons/mrp/mrp.py14
-rw-r--r--addons/mrp/mrp_demo.xml50
-rw-r--r--addons/mrp/mrp_view.xml1
-rw-r--r--addons/mrp/stock.py37
-rw-r--r--addons/note/note.py2
-rw-r--r--addons/payment/models/res_config.py2
-rw-r--r--addons/payment/views/res_config_view.xml4
-rw-r--r--addons/payment_adyen/controllers/main.py7
-rw-r--r--addons/point_of_sale/wizard/pos_details.py4
-rw-r--r--addons/purchase/purchase.py7
-rw-r--r--addons/report/static/src/css/reset.min.css108
-rw-r--r--addons/sale_crm/wizard/crm_make_sale.py1
-rw-r--r--addons/sale_margin/sale_margin.py5
-rw-r--r--addons/sale_mrp/sale_mrp.py10
-rw-r--r--addons/sale_mrp/tests/test_move_explode.py34
-rw-r--r--addons/stock/stock.py12
-rw-r--r--addons/stock/wizard/stock_transfer_details.py3
-rw-r--r--addons/stock_account/wizard/stock_valuation_history.py4
-rw-r--r--addons/web/static/lib/datejs/globalization/bs-BA.js0
-rw-r--r--addons/web/static/lib/datejs/globalization/kab_DZ.js194
-rw-r--r--addons/web/static/lib/datejs/globalization/lo-LA.js0
-rw-r--r--addons/web/static/src/js/chrome.js2
-rw-r--r--addons/web/static/src/js/search.js4
-rw-r--r--addons/web/static/src/js/tour.js8
-rw-r--r--addons/web/static/src/js/view_graph.js1
-rw-r--r--addons/web/static/src/xml/base.xml6
-rw-r--r--addons/website/models/ir_http.py73
-rw-r--r--addons/website/static/src/js/website.editor.js6
-rw-r--r--addons/website/static/src/js/website.js5
-rw-r--r--addons/website_blog/views/website_blog_views.xml1
-rw-r--r--doc/business.rst2
-rw-r--r--doc/cla/corporate/iris-solutions.md13
-rw-r--r--doc/cla/corporate/makinacorpus.md16
-rw-r--r--doc/cla/corporate/teclib.md13
-rw-r--r--doc/cla/individual/belkacem77.md11
-rw-r--r--doc/cla/individual/kiorky.md11
-rw-r--r--doc/cla/individual/nedaszilinskas.md11
-rw-r--r--doc/cla/sign-cla.md2
-rw-r--r--openerp/addons/base/ir/ir_qweb.py8
-rw-r--r--openerp/addons/base/res/ir_property.py10
-rw-r--r--openerp/addons/test_converter/tests/test_html.py12
-rw-r--r--openerp/api.py8
-rw-r--r--openerp/fields.py6
-rw-r--r--openerp/models.py18
-rw-r--r--openerp/osv/fields.py12
-rw-r--r--openerp/report/report_sxw.py4
-rw-r--r--openerp/tools/misc.py1
67 files changed, 1752 insertions, 619 deletions
diff --git a/addons/account/account.py b/addons/account/account.py
index 24f955df06d..e92fa8c187c 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -234,30 +234,37 @@ class account_account(osv.osv):
_description = "Account"
_parent_store = True
- def search(self, cr, uid, args, offset=0, limit=None, order=None,
- context=None, count=False):
- if context is None:
- context = {}
+ def _where_calc(self, cr, uid, domain, active_test=True, context=None):
+ """ Convert domains to allow easier filtering:
+ code: force case insensitive and right side matching search
+ journal_id: restrict to the accounts sharing the same account.account.type
+ """
pos = 0
-
- while pos < len(args):
-
- if args[pos][0] == 'code' and args[pos][1] in ('like', 'ilike') and args[pos][2]:
- args[pos] = ('code', '=like', tools.ustr(args[pos][2].replace('%', ''))+'%')
- if args[pos][0] == 'journal_id':
- if not args[pos][2]:
- del args[pos]
+ while pos < len(domain):
+ if domain[pos][0] == 'code' and domain[pos][1] in ('like', 'ilike') and domain[pos][2]:
+ domain[pos] = ('code', '=like', tools.ustr(domain[pos][2].replace('%', '')) + '%')
+ if domain[pos][0] == 'journal_id':
+ if not domain[pos][2]:
+ del domain[pos]
continue
- jour = self.pool.get('account.journal').browse(cr, uid, args[pos][2], context=context)
- if (not (jour.account_control_ids or jour.type_control_ids)) or not args[pos][2]:
- args[pos] = ('type','not in',('consolidation','view'))
+ jour = self.pool.get('account.journal').browse(cr, uid, domain[pos][2], context=context)
+ if (not (jour.account_control_ids or jour.type_control_ids)) or not domain[pos][2]:
+ domain[pos] = ('type', 'not in', ('consolidation', 'view'))
continue
ids3 = map(lambda x: x.id, jour.type_control_ids)
ids1 = super(account_account, self).search(cr, uid, [('user_type', 'in', ids3)])
ids1 += map(lambda x: x.id, jour.account_control_ids)
- args[pos] = ('id', 'in', ids1)
+ domain[pos] = ('id', 'in', ids1)
pos += 1
+ return super(account_account, self)._where_calc(cr, uid, domain, active_test, context)
+
+ def search(self, cr, uid, args, offset=0, limit=None, order=None,
+ context=None, count=False):
+ """ Check presence of key 'consolidate_children' in context to include also the Consolidated Children
+ of found accounts into the result of the search
+ """
+
if context and context.has_key('consolidate_children'): #add consolidated children of accounts
ids = super(account_account, self).search(cr, uid, args, offset, limit,
order, context=context, count=count)
@@ -2003,7 +2010,7 @@ class account_tax(osv.osv):
for tax in taxes:
# we compute the amount for the current tax object and append it to the result
data = {'id':tax.id,
- 'name':tax.description and tax.description + " - " + tax.name or tax.name,
+ 'name': tax.name,
'account_collected_id':tax.account_collected_id.id,
'account_paid_id':tax.account_paid_id.id,
'account_analytic_collected_id': tax.account_analytic_collected_id.id,
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index 761bf8eec5c..a3769e08818 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -551,8 +551,8 @@ class account_bank_statement_line(osv.osv):
# Look for structured communication
if st_line.name:
domain = self._domain_reconciliation_proposition(cr, uid, st_line, excluded_ids=excluded_ids, context=context)
- match_id = mv_line_pool.search(cr, uid, domain, offset=0, limit=1, context=context)
- if match_id:
+ match_id = mv_line_pool.search(cr, uid, domain, offset=0, limit=2, context=context)
+ if match_id and len(match_id) == 1:
mv_line_br = mv_line_pool.browse(cr, uid, match_id, context=context)
target_currency = st_line.currency_id or st_line.journal_id.currency or st_line.journal_id.company_id.currency_id
mv_line = mv_line_pool.prepare_move_lines_for_reconciliation_widget(cr, uid, mv_line_br, target_currency=target_currency, target_date=st_line.date, context=context)[0]
@@ -583,8 +583,8 @@ class account_bank_statement_line(osv.osv):
# Look for a matching amount
exact_match_amount_field = amount_field in ('debit', 'credit') and 'amount_residual' or 'amount_residual_currency'
domain_exact_amount = domain + [(exact_match_amount_field, '=', float_round(amount, precision_digits=precision_digits))]
- match_id = self.get_move_lines_for_reconciliation(cr, uid, st_line, excluded_ids=excluded_ids, offset=0, limit=1, additional_domain=domain_exact_amount)
- if match_id:
+ match_id = self.get_move_lines_for_reconciliation(cr, uid, st_line, excluded_ids=excluded_ids, offset=0, limit=2, additional_domain=domain_exact_amount)
+ if match_id and len(match_id) == 1:
return match_id
if not st_line.partner_id.id:
diff --git a/addons/account/report/account_invoice_report.py b/addons/account/report/account_invoice_report.py
index db77531a176..c5f8831b874 100644
--- a/addons/account/report/account_invoice_report.py
+++ b/addons/account/report/account_invoice_report.py
@@ -205,18 +205,23 @@ class account_invoice_report(osv.osv):
# self._table = account_invoice_report
tools.drop_view_if_exists(cr, self._table)
cr.execute("""CREATE or REPLACE VIEW %s as (
+ WITH currency_rate (currency_id, rate, date_start, date_end) AS (
+ SELECT r.currency_id, r.rate, r.name AS date_start,
+ (SELECT name FROM res_currency_rate r2
+ WHERE r2.name > r.name AND
+ r2.currency_id = r.currency_id
+ ORDER BY r2.name ASC
+ LIMIT 1) AS date_end
+ FROM res_currency_rate r
+ )
%s
FROM (
%s %s %s
) AS sub
- JOIN res_currency_rate cr ON (cr.currency_id = sub.currency_id)
- WHERE
- cr.id IN (SELECT id
- FROM res_currency_rate cr2
- WHERE (cr2.currency_id = sub.currency_id)
- AND ((sub.date IS NOT NULL AND cr2.name <= sub.date)
- OR (sub.date IS NULL AND cr2.name <= NOW()))
- ORDER BY name DESC LIMIT 1)
+ JOIN currency_rate cr ON
+ (cr.currency_id = sub.currency_id AND
+ cr.date_start <= COALESCE(sub.date, NOW()) AND
+ (cr.date_end IS NULL OR cr.date_end > COALESCE(sub.date, NOW())))
)""" % (
self._table,
self._select(), self._sub_select(), self._from(), self._group_by()))
diff --git a/addons/account/report/report_vat.py b/addons/account/report/report_vat.py
index 70302b9d411..52a3b616cda 100644
--- a/addons/account/report/report_vat.py
+++ b/addons/account/report/report_vat.py
@@ -152,15 +152,18 @@ class tax_report(report_sxw.rml_parse, common_report_header):
account.name AS name, \
account.code AS code \
FROM account_move_line AS line, \
- account_account AS account \
+ account_account AS account, \
+ account_move as move \
WHERE line.state <> %s \
+ AND line.move_id = move.id \
AND line.tax_code_id = %s \
AND line.account_id = account.id \
AND account.company_id = %s \
AND line.period_id IN %s\
AND account.active \
+ AND move.state <> %s \
GROUP BY account.id,account.name,account.code', ('draft', tax_code_id,
- company_id, periods_ids,))
+ company_id, periods_ids, 'draft',))
res = self.cr.dictfetchall()
i = 0
diff --git a/addons/account/static/src/css/account_bank_statement_reconciliation.css b/addons/account/static/src/css/account_bank_statement_reconciliation.css
index 5c1db9379c8..bb0304f0ff9 100644
--- a/addons/account/static/src/css/account_bank_statement_reconciliation.css
+++ b/addons/account/static/src/css/account_bank_statement_reconciliation.css
@@ -324,6 +324,7 @@
.openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .create .oe_form > table.add_line_container {
width: 98%;
float: none;
+ clear: both;
margin: auto; }
.openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .create .oe_form > table.add_line_container td {
text-align: center; }
diff --git a/addons/account/static/src/css/account_bank_statement_reconciliation.scss b/addons/account/static/src/css/account_bank_statement_reconciliation.scss
index 1806924e798..83d1821c053 100644
--- a/addons/account/static/src/css/account_bank_statement_reconciliation.scss
+++ b/addons/account/static/src/css/account_bank_statement_reconciliation.scss
@@ -521,6 +521,7 @@ $aestetic_animation_speed: 300ms;
&.add_line_container {
width: 98%;
float: none;
+ clear: both;
margin: auto;
td {
diff --git a/addons/account/static/src/js/account_widgets.js b/addons/account/static/src/js/account_widgets.js
index fa7ebc11269..86a5172005d 100644
--- a/addons/account/static/src/js/account_widgets.js
+++ b/addons/account/static/src/js/account_widgets.js
@@ -183,7 +183,6 @@ openerp.account = function (instance) {
deferred_promises.push(self.model_bank_statement_line
.query(['id'])
.filter(lines_filter)
- .order_by('statement_id, id')
.all().then(function (data) {
self.st_lines = _(data).map(function(o){ return o.id });
})
@@ -322,7 +321,7 @@ openerp.account = function (instance) {
keyboardShortcutsHandler: function(e) {
var self = this;
if ((e.which === 13 || e.which === 10) && (e.ctrlKey || e.metaKey)) {
- self.persistReconciliations(_.filter(self.getChildren(), function(o) { return o.is_valid; }));
+ self.persistReconciliations(_.filter(self.getChildren(), function(o) { return o.get("balance").toFixed(3) === "0.000"; }));
}
},
@@ -546,7 +545,7 @@ openerp.account = function (instance) {
var time_taken;
if (sec_taken/60 >= 1) time_taken = Math.floor(sec_taken/60) +"' "+ sec_taken%60 +"''";
- else time_taken = sec_taken%60 +" seconds";
+ else time_taken = sec_taken%60 +_t(" seconds");
var title;
if (sec_per_item < 5) title = _t("Whew, that was fast !") + " <i class='fa fa-trophy congrats_icon'></i>";
@@ -1314,7 +1313,7 @@ openerp.account = function (instance) {
self.is_valid = false;
self.$(".tip_reconciliation_not_balanced").show();
self.$(".tbody_open_balance").empty();
- self.$(".button_ok").text("OK").removeClass("btn-primary").attr("disabled", "disabled");
+ self.$(".button_ok").text(_("OK")).removeClass("btn-primary").attr("disabled", "disabled");
// Find out if the counterpart is lower than, equal or greater than the transaction being reconciled
var balance_type = undefined;
@@ -1331,7 +1330,7 @@ openerp.account = function (instance) {
if (self.st_line.has_no_partner) {
createOpenBalance(_t("Choose counterpart"));
} else {
- displayValidState(false, "Keep open");
+ displayValidState(false, _t("Keep open"));
createOpenBalance(_t("Open balance"));
}
}
diff --git a/addons/account/static/src/xml/account_bank_statement_reconciliation.xml b/addons/account/static/src/xml/account_bank_statement_reconciliation.xml
index f7414d21e20..6322e56572e 100644
--- a/addons/account/static/src/xml/account_bank_statement_reconciliation.xml
+++ b/addons/account/static/src/xml/account_bank_statement_reconciliation.xml
@@ -35,7 +35,7 @@
<div class="notification_area"></div>
<div class="reconciliation_lines_container"></div>
<div class="show_more_container"><button class="show_more">Show more... (<span class="num_items_remaining"></span> remaining)</button></div>
- <p class='protip'>Tip : Hit ctrl-enter to validate the whole sheet.</p>
+ <p class='protip'>Tip : Hit ctrl-enter to reconcile all balanced items.</p>
</div></div>
</t>
diff --git a/addons/account/tests/test_search.py b/addons/account/tests/test_search.py
index 0e93da0c0bc..6f4a56cf8e6 100644
--- a/addons/account/tests/test_search.py
+++ b/addons/account/tests/test_search.py
@@ -12,6 +12,8 @@ class TestSearch(TransactionCase):
cr, uid = self.cr, self.uid
self.account_model = self.registry('account.account')
self.account_type_model = self.registry('account.account.type')
+ self.res_partner_model = self.registry('res.partner')
+ self.account_payment_term_model = self.registry('account.payment.term')
ac_ids = self.account_type_model.search(cr, uid, [], limit=1)
self.atax = (int(self.account_model.create(cr, uid, dict(
name="Tax Received",
@@ -33,6 +35,9 @@ class TestSearch(TransactionCase):
self.all_ids = [self.atax[0], self.apurchase[0], self.asale[0]]
+ self.a_partner = self.res_partner_model.create(cr, uid, {'name':'test partner'})
+ self.a_payment_term = self.account_payment_term_model.create(cr, uid, {'name':'test payment term'})
+
def test_name_search(self):
cr, uid = self.cr, self.uid
atax_ids = self.account_model.name_search(cr, uid, name="Tax", operator='ilike', args=[('id', 'in', self.all_ids)])
@@ -58,3 +63,13 @@ class TestSearch(TransactionCase):
asale_ids = self.account_model.name_search(cr, uid, name='Product Sales', operator='not ilike', args=[('id', 'in', self.all_ids)])
self.assertEqual(set([self.atax[0], self.apurchase[0]]), set([a[0] for a in asale_ids]), "name_search 'not ilike Product Sales' should have returned all but Product Sales account")
+
+ def test_property_unset_search(self):
+ cr, uid = self.cr, self.uid
+
+ partner_ids = self.res_partner_model.search(cr, uid, [('property_payment_term', '=', False), ('id', '=', self.a_partner)])
+ self.assertTrue(partner_ids, "unset property field 'propety_payment_term' should have been found")
+
+ self.res_partner_model.write(cr, uid, [self.a_partner], {'property_payment_term': self.a_payment_term})
+ partner_ids = self.res_partner_model.search(cr, uid, [('property_payment_term', '=', False), ('id', '=', self.a_partner)])
+ self.assertFalse(partner_ids, "set property field 'propety_payment_term' should not have been found")
diff --git a/addons/account/wizard/account_statement_from_invoice.py b/addons/account/wizard/account_statement_from_invoice.py
index 627d0286c6a..658e1b4d829 100644
--- a/addons/account/wizard/account_statement_from_invoice.py
+++ b/addons/account/wizard/account_statement_from_invoice.py
@@ -63,8 +63,12 @@ class account_statement_from_invoice_lines(osv.osv_memory):
amount = -line.credit
if line.amount_currency:
- amount = currency_obj.compute(cr, uid, line.currency_id.id,
- statement.currency.id, line.amount_currency, context=ctx)
+ if line.company_id.currency_id.id != statement.currency.id:
+ # In the specific case where the company currency and the statement currency are the same
+ # the debit/credit field already contains the amount in the right currency.
+ # We therefore avoid to re-convert the amount in the currency, to prevent Gain/loss exchanges
+ amount = currency_obj.compute(cr, uid, line.currency_id.id,
+ statement.currency.id, line.amount_currency, context=ctx)
elif (line.invoice and line.invoice.currency_id.id != statement.currency.id):
amount = currency_obj.compute(cr, uid, line.invoice.currency_id.id,
statement.currency.id, amount, context=ctx)
diff --git a/addons/account_followup/account_followup.py b/addons/account_followup/account_followup.py
index 3ed0c5cbadc..03cdc3ea269 100644
--- a/addons/account_followup/account_followup.py
+++ b/addons/account_followup/account_followup.py
@@ -310,7 +310,7 @@ class res_partner(osv.osv):
('reconcile_id', '=', False),
('state', '!=', 'draft'),
('company_id', '=', company_id),
- ('date_maturity', '<=', fields.date.context_today(self,cr,uid)),
+ '|', ('date_maturity', '=', False), ('date_maturity', '<=', fields.date.context_today(self, cr, uid)),
], context=context):
raise UserError(_("The partner does not have any accounting entries to print in the overdue report for the current company."))
self.message_post(cr, uid, [ids[0]], body=_('Printed overdue payments report'), context=context)
diff --git a/addons/account_followup/report/account_followup_print.py b/addons/account_followup/report/account_followup_print.py
index ab72b621788..5c9d9187821 100644
--- a/addons/account_followup/report/account_followup_print.py
+++ b/addons/account_followup/report/account_followup_print.py
@@ -56,7 +56,7 @@ class report_rappel(report_sxw.rml_parse):
('reconcile_id', '=', False),
('state', '!=', 'draft'),
('company_id', '=', company_id),
- ('date_maturity', '<=', fields.date.context_today(self,self.cr,self.uid)),
+ '|', ('date_maturity', '=', False), ('date_maturity', '<=', fields.date.context_today(self, self.cr, self.uid)),
])
# lines_per_currency = {currency: [line data, ...], ...}
diff --git a/addons/auth_ldap/users_ldap.py b/addons/auth_ldap/users_ldap.py
index 937e672ef89..6d2040d83c4 100644
--- a/addons/auth_ldap/users_ldap.py
+++ b/addons/auth_ldap/users_ldap.py
@@ -140,8 +140,8 @@ class CompanyLDAP(osv.osv):
results = []
try:
conn = self.connect(conf)
- conn.simple_bind_s(conf['ldap_binddn'] or '',
- conf['ldap_password'].encode('utf-8') or '')
+ ldap_password = conf['ldap_password'] or ''
+ conn.simple_bind_s(conf['ldap_binddn'] or '', ldap_password.encode('utf-8'))
results = conn.search_st(conf['ldap_base'], ldap.SCOPE_SUBTREE,
filter, retrieve_attributes, timeout=60)
conn.unbind()
diff --git a/addons/delivery/sale.py b/addons/delivery/sale.py
index b5645072db1..4b41c1be6e1 100644
--- a/addons/delivery/sale.py
+++ b/addons/delivery/sale.py
@@ -66,6 +66,7 @@ class sale_order(osv.Model):
carrier_obj = self.pool.get('delivery.carrier')
acc_fp_obj = self.pool.get('account.fiscal.position')
self._delivery_unset(cr, uid, ids, context=context)
+ currency_obj = self.pool.get('res.currency')
for order in self.browse(cr, uid, ids, context=context):
grid_id = carrier_obj.grid_get(cr, uid, [order.carrier_id.id], order.partner_shipping_id.id)
if not grid_id:
@@ -79,6 +80,10 @@ class sale_order(osv.Model):
taxes = grid.carrier_id.product_id.taxes_id
fpos = order.fiscal_position or False
taxes_ids = acc_fp_obj.map_tax(cr, uid, fpos, taxes)
+ price_unit = grid_obj.get_price(cr, uid, grid.id, order, time.strftime('%Y-%m-%d'), context)
+ if order.company_id.currency_id.id != order.pricelist_id.currency_id.id:
+ price_unit = currency_obj.compute(cr, uid, order.company_id.currency_id.id, order.pricelist_id.currency_id.id,
+ price_unit, context=dict(context or {}, date=order.date_order))
#create the sale order line
line_obj.create(cr, uid, {
'order_id': order.id,
@@ -86,7 +91,7 @@ class sale_order(osv.Model):
'product_uom_qty': 1,
'product_uom': grid.carrier_id.product_id.uom_id.id,
'product_id': grid.carrier_id.product_id.id,
- 'price_unit': grid_obj.get_price(cr, uid, grid.id, order, time.strftime('%Y-%m-%d'), context),
+ 'price_unit': price_unit,
'tax_id': [(6, 0, taxes_ids)],
'is_delivery': True
}, context=context)
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
index 9a4c4f00dbf..a1aa1eed26c 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
@@ -329,8 +329,8 @@ class hr_analytic_timesheet(osv.osv):
res['value']['to_invoice'] = st or False
if acc.state=='pending':
res['warning'] = {
- 'title': 'Warning',
- 'message': 'The analytic account is in pending state.\nYou should not work on this account !'
+ 'title': _('Warning'),
+ 'message': _('The analytic account is in pending state.\nYou should not work on this account !')
}
return res
diff --git a/addons/l10n_ca/account_chart_en.xml b/addons/l10n_ca/account_chart_en.xml
index a929e213842..fe4753e0928 100644
--- a/addons/l10n_ca/account_chart_en.xml
+++ b/addons/l10n_ca/account_chart_en.xml
@@ -339,133 +339,157 @@
<field name="name">LABOUR TAXES TO PAY</field>
</record>
- <record id="chart2141_en" model="account.account.template">
- <field name="code">2141</field>
- <field name="parent_id" ref="chart214_en"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">CANADIAN REVENU AGENCY</field>
- </record>
-
- <record id="chart21411_en" model="account.account.template">
- <field name="code">21411</field>
- <field name="parent_id" ref="chart2141_en"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">EMPLOYMENT INSURANCE TO PAY</field>
- </record>
-
- <record id="chart214111_en" model="account.account.template">
- <field name="code">214111</field>
- <field name="parent_id" ref="chart21411_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">EI - Employees Contribution</field>
- </record>
-
- <record id="chart214112_en" model="account.account.template">
- <field name="code">214112</field>
- <field name="parent_id" ref="chart21411_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">EI - Employer Contribution</field>
- </record>
-
- <record id="chart21412_en" model="account.account.template">
- <field name="code">21412</field>
- <field name="parent_id" ref="chart2141_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Federal Income Tax</field>
- </record>
-
- <record id="chart2142_en" model="account.account.template">
- <field name="code">2142</field>
- <field name="parent_id" ref="chart214_en"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">PROVINCIAL REVENU AGENCY</field>
- </record>
-
- <record id="chart21421_en" model="account.account.template">
- <field name="code">21421</field>
- <field name="parent_id" ref="chart2142_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Health Services Fund to pay</field>
- </record>
-
- <record id="chart21422_en" model="account.account.template">
- <field name="code">21422</field>
- <field name="parent_id" ref="chart2142_en"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">ANNUITIES TO PAY</field>
- </record>
-
- <record id="chart214221_en" model="account.account.template">
- <field name="code">214221</field>
- <field name="parent_id" ref="chart21422_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Annuities - Employees Contribution</field>
- </record>
-
- <record id="chart214222_en" model="account.account.template">
- <field name="code">214222</field>
- <field name="parent_id" ref="chart21422_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Annuities - Employer Contribution</field>
- </record>
-
- <record id="chart21423_en" model="account.account.template">
- <field name="code">21423</field>
- <field name="parent_id" ref="chart2142_en"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">PARENTAL INSURANCE PLAN TO PAY</field>
- </record>
-
- <record id="chart214231_en" model="account.account.template">
- <field name="code">214231</field>
- <field name="parent_id" ref="chart21423_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">PAP - Employee Contribution</field>
- </record>
-
- <record id="chart214232_en" model="account.account.template">
- <field name="code">214232</field>
- <field name="parent_id" ref="chart21423_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">PAP - Employer Contribution</field>
- </record>
-
- <record id="chart21424_en" model="account.account.template">
- <field name="code">21424</field>
- <field name="parent_id" ref="chart2142_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Labour Health and Safety to pay</field>
- </record>
-
- <record id="chart21425_en" model="account.account.template">
- <field name="code">21425</field>
- <field name="parent_id" ref="chart2142_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Labour Standards to pay</field>
- </record>
-
- <record id="chart21426_en" model="account.account.template">
- <field name="code">21426</field>
- <field name="parent_id" ref="chart2142_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Provincial Income Tax</field>
- </record>
+ <record id="chart2141_en" model="account.account.template">
+ <field name="code">2141</field>
+ <field name="parent_id" ref="chart214_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">CANADA REVENUE AGENCY</field>
+ </record>
+
+ <record id="chart21411_en" model="account.account.template">
+ <field name="code">21411</field>
+ <field name="parent_id" ref="chart2141_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">EMPLOYMENT INSURANCE TO PAY</field>
+ </record>
+
+ <record id="chart214111_en" model="account.account.template">
+ <field name="code">214111</field>
+ <field name="parent_id" ref="chart21411_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">EI - Employees Contribution</field>
+ </record>
+
+ <record id="chart214112_en" model="account.account.template">
+ <field name="code">214112</field>
+ <field name="parent_id" ref="chart21411_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">EI - Employer Contribution</field>
+ </record>
+
+ <record id="chart21412_en" model="account.account.template">
+ <field name="code">21412</field>
+ <field name="parent_id" ref="chart2141_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Federal Income Tax</field>
+ </record>
+
+ <record id="chart21413_en" model="account.account.template">
+ <field name="code">21413</field>
+ <field name="parent_id" ref="chart2141_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">CANADA PENSION PLAN TO PAY</field>
+ </record>
+
+ <record id="chart214131_en" model="account.account.template">
+ <field name="code">214131</field>
+ <field name="parent_id" ref="chart21413_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">CPP - Employees Contribution</field>
+ </record>
+
+ <record id="chart214132_en" model="account.account.template">
+ <field name="code">214132</field>
+ <field name="parent_id" ref="chart21413_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">CPP - Employer Contribution</field>
+ </record>
+
+ <record id="chart2142_en" model="account.account.template">
+ <field name="code">2142</field>
+ <field name="parent_id" ref="chart214_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">PROVINCIAL REVENU AGENCY</field>
+ </record>
+
+ <record id="chart21421_en" model="account.account.template">
+ <field name="code">21421</field>
+ <field name="parent_id" ref="chart2142_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Health Services Fund to pay</field>
+ </record>
+
+ <record id="chart21422_en" model="account.account.template">
+ <field name="code">21422</field>
+ <field name="parent_id" ref="chart2142_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">PROVINCIAL PENSION PLAN TO PAY</field>
+ </record>
+
+ <record id="chart214221_en" model="account.account.template">
+ <field name="code">214221</field>
+ <field name="parent_id" ref="chart21422_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Provincial Pension Plan - Employees Contribution</field>
+ </record>
+
+ <record id="chart214222_en" model="account.account.template">
+ <field name="code">214222</field>
+ <field name="parent_id" ref="chart21422_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Provincial Pension Plan - Employer Contribution</field>
+ </record>
+
+ <record id="chart21423_en" model="account.account.template">
+ <field name="code">21423</field>
+ <field name="parent_id" ref="chart2142_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">PROVINCIAL PARENTAL INSURANCE PLAN TO PAY</field>
+ </record>
+
+ <record id="chart214231_en" model="account.account.template">
+ <field name="code">214231</field>
+ <field name="parent_id" ref="chart21423_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Parental Insurance Plan - Employee Contribution</field>
+ </record>
+
+ <record id="chart214232_en" model="account.account.template">
+ <field name="code">214232</field>
+ <field name="parent_id" ref="chart21423_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Parental Insurance Plan - Employer Contribution</field>
+ </record>
+
+ <record id="chart21424_en" model="account.account.template">
+ <field name="code">21424</field>
+ <field name="parent_id" ref="chart2142_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Labour Health and Safety to pay</field>
+ </record>
+
+ <record id="chart21425_en" model="account.account.template">
+ <field name="code">21425</field>
+ <field name="parent_id" ref="chart2142_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Labour Standards to pay</field>
+ </record>
+
+ <record id="chart21426_en" model="account.account.template">
+ <field name="code">21426</field>
+ <field name="parent_id" ref="chart2142_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Provincial Income Tax</field>
+ </record>
<record id="chart215_en" model="account.account.template">
<field name="code">215</field>
@@ -499,6 +523,86 @@
<field name="name">Stock Received But Not Billed</field>
</record>
+ <record id="chart218_en" model="account.account.template">
+ <field name="code">218</field>
+ <field name="parent_id" ref="chart21_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">CURRENT LIABILITIES RELATED TO SALARIES</field>
+ </record>
+
+ <record id="chart2181_en" model="account.account.template">
+ <field name="code">2181</field>
+ <field name="parent_id" ref="chart218_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Salaries to pay</field>
+ </record>
+
+ <record id="chart2183_en" model="account.account.template">
+ <field name="code">2183</field>
+ <field name="parent_id" ref="chart218_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Bonus to pay</field>
+ </record>
+
+ <record id="chart2184_en" model="account.account.template">
+ <field name="code">2184</field>
+ <field name="parent_id" ref="chart218_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Retroactive Payment to pay</field>
+ </record>
+
+ <record id="chart2185_en" model="account.account.template">
+ <field name="code">2185</field>
+ <field name="parent_id" ref="chart218_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">GROUP PENSION PLAN TO PAY</field>
+ </record>
+
+ <record id="chart218501_en" model="account.account.template">
+ <field name="code">218501</field>
+ <field name="parent_id" ref="chart2185_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Group Pension Plan to pay - Employees Contribution</field>
+ </record>
+
+ <record id="chart218502_en" model="account.account.template">
+ <field name="code">218502</field>
+ <field name="parent_id" ref="chart2185_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Group Pension Plan to pay - Employer Contribution</field>
+ </record>
+
+ <record id="chart2186_en" model="account.account.template">
+ <field name="code">2186</field>
+ <field name="parent_id" ref="chart218_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">EMPLOYEE BENEFITS</field>
+ </record>
+
+ <record id="chart218601_en" model="account.account.template">
+ <field name="code">218601</field>
+ <field name="parent_id" ref="chart2186_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Employee Benefits Provision - Employees Contribution</field>
+ </record>
+
+ <record id="chart218602_en" model="account.account.template">
+ <field name="code">218602</field>
+ <field name="parent_id" ref="chart2186_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Employee Benefits Provision - Employer Contribution</field>
+ </record>
+
<record id="chart25_en" model="account.account.template">
<field name="code">25</field>
<field name="parent_id" ref="chart2_en"/>
@@ -523,14 +627,70 @@
<field name="name">PROVISIONS FOR PENSIONS AND OTHER POST-EMPLOYMENT ADVANTAGES</field>
</record>
- <record id="chart254_en" model="account.account.template">
- <field name="code">254</field>
+ <record id="chart2521_en" model="account.account.template">
+ <field name="code">2521</field>
+ <field name="parent_id" ref="chart252_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Provision for pension plans</field>
+ </record>
+
+ <record id="chart253_en" model="account.account.template">
+ <field name="code">253</field>
<field name="parent_id" ref="chart25_en"/>
<field name="type">view</field>
<field name="user_type" ref="account.data_account_type_view"/>
<field name="name">DEFERRED TAXES</field>
</record>
+ <record id="chart254_en" model="account.account.template">
+ <field name="code">254</field>
+ <field name="parent_id" ref="chart25_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">NON-CURRENT LIABILITIES RELATED TO SALARIES</field>
+ </record>
+
+ <record id="chart2541_en" model="account.account.template">
+ <field name="code">2541</field>
+ <field name="parent_id" ref="chart254_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">Leaves Accruded</field>
+ </record>
+
+ <record id="chart254101_en" model="account.account.template">
+ <field name="code">254101</field>
+ <field name="parent_id" ref="chart2541_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Vacations Accruded</field>
+ </record>
+
+ <record id="chart254102_en" model="account.account.template">
+ <field name="code">254102</field>
+ <field name="parent_id" ref="chart2541_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Compensatory Days Accruded</field>
+ </record>
+
+ <record id="chart254103_en" model="account.account.template">
+ <field name="code">254103</field>
+ <field name="parent_id" ref="chart2541_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Sick Leaves Accruded</field>
+ </record>
+
+ <record id="chart2542_en" model="account.account.template">
+ <field name="code">2542</field>
+ <field name="parent_id" ref="chart254_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Bonus Accruded</field>
+ </record>
+
<record id="chart259_en" model="account.account.template">
<field name="code">259</field>
<field name="parent_id" ref="chart25_en"/>
@@ -737,93 +897,158 @@
<field name="name">International Purchases</field>
</record>
- <record id="chart512_en" model="account.account.template">
- <field name="code">512</field>
- <field name="parent_id" ref="chart51_en"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">LABOUR EXPENSES</field>
- </record>
+ <record id="chart512_en" model="account.account.template">
+ <field name="code">512</field>
+ <field name="parent_id" ref="chart51_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">LABOUR EXPENSES</field>
+ </record>
+
+ <record id="chart5121_en" model="account.account.template">
+ <field name="code">5121</field>
+ <field name="parent_id" ref="chart512_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">Salaries</field>
+ </record>
+
+ <record id="chart512101_en" model="account.account.template">
+ <field name="code">512101</field>
+ <field name="parent_id" ref="chart5121_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Regular Salaries</field>
+ </record>
+
+ <record id="chart512102_en" model="account.account.template">
+ <field name="code">512102</field>
+ <field name="parent_id" ref="chart5121_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Bonus</field>
+ </record>
+
+ <record id="chart512103_en" model="account.account.template">
+ <field name="code">512103</field>
+ <field name="parent_id" ref="chart5121_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Retroactive Pay</field>
+ </record>
+
+ <record id="chart5122_en" model="account.account.template">
+ <field name="code">5122</field>
+ <field name="parent_id" ref="chart512_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">Leaves Accruded</field>
+ </record>
+
+ <record id="chart512201_en" model="account.account.template">
+ <field name="code">512201</field>
+ <field name="parent_id" ref="chart5122_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Vacations Accruded</field>
+ </record>
+
+ <record id="chart512202_en" model="account.account.template">
+ <field name="code">512202</field>
+ <field name="parent_id" ref="chart5122_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Compensatory Days Accruded</field>
+ </record>
+
+ <record id="chart512203_en" model="account.account.template">
+ <field name="code">512203</field>
+ <field name="parent_id" ref="chart5122_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Sick Leaves Accruded</field>
+ </record>
+
+ <record id="chart5123_en" model="account.account.template">
+ <field name="code">5123</field>
+ <field name="parent_id" ref="chart512_en"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">Employer Contributions</field>
+ </record>
+
+ <record id="chart512301_en" model="account.account.template">
+ <field name="code">512301</field>
+ <field name="parent_id" ref="chart5123_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Canada Pension Plan</field>
+ </record>
+
+ <record id="chart512302_en" model="account.account.template">
+ <field name="code">512302</field>
+ <field name="parent_id" ref="chart5123_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Employment Insurance</field>
+ </record>
+
+ <record id="chart512303_en" model="account.account.template">
+ <field name="code">512303</field>
+ <field name="parent_id" ref="chart5123_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Group Pension Plan</field>
+ </record>
+
+ <record id="chart512304_en" model="account.account.template">
+ <field name="code">512304</field>
+ <field name="parent_id" ref="chart5123_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Employee benefits expense</field>
+ </record>
+
+ <record id="chart512310_en" model="account.account.template">
+ <field name="code">512310</field>
+ <field name="parent_id" ref="chart5123_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Provincial Pension Plan</field>
+ </record>
+
+ <record id="chart512311_en" model="account.account.template">
+ <field name="code">512311</field>
+ <field name="parent_id" ref="chart5123_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Provincial Parental Insurance Plan</field>
+ </record>
+
+ <record id="chart512312_en" model="account.account.template">
+ <field name="code">512312</field>
+ <field name="parent_id" ref="chart5123_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Labour Health and Safety</field>
+ </record>
+
+ <record id="chart512313_en" model="account.account.template">
+ <field name="code">512313</field>
+ <field name="parent_id" ref="chart5123_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Labour Standards</field>
+ </record>
+
+ <record id="chart512314_en" model="account.account.template">
+ <field name="code">512314</field>
+ <field name="parent_id" ref="chart5123_en"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Health Service Fund</field>
+ </record>
- <record id="chart51201_en" model="account.account.template">
- <field name="code">51201</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Salaries, wages and commissions</field>
- </record>
-
- <record id="chart51202_en" model="account.account.template">
- <field name="code">51202</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Holidays</field>
- </record>
-
- <record id="chart51203_en" model="account.account.template">
- <field name="code">51203</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Employment Insurance</field>
- </record>
-
- <record id="chart51204_en" model="account.account.template">
- <field name="code">51204</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Health Services Fund</field>
- </record>
-
- <record id="chart51205_en" model="account.account.template">
- <field name="code">51205</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Annuities</field>
- </record>
-
- <record id="chart51206_en" model="account.account.template">
- <field name="code">51206</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Parental Insurance</field>
- </record>
-
- <record id="chart51207_en" model="account.account.template">
- <field name="code">51207</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Labour Health and Safety</field>
- </record>
-
- <record id="chart51208_en" model="account.account.template">
- <field name="code">51208</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Labour Standards</field>
- </record>
-
- <record id="chart51209_en" model="account.account.template">
- <field name="code">51209</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Federal Income Tax</field>
- </record>
-
- <record id="chart51210_en" model="account.account.template">
- <field name="code">51210</field>
- <field name="parent_id" ref="chart512_en"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Provincial Income Tax</field>
- </record>
<record id="chart513_en" model="account.account.template">
<field name="code">513</field>
<field name="parent_id" ref="chart51_en"/>
diff --git a/addons/l10n_ca/account_chart_fr.xml b/addons/l10n_ca/account_chart_fr.xml
index 57e6c84aa71..7d358f04bca 100644
--- a/addons/l10n_ca/account_chart_fr.xml
+++ b/addons/l10n_ca/account_chart_fr.xml
@@ -330,141 +330,165 @@
<field name="name">TVH à payer - 15%</field>
</record>
- <record id="chart214_fr" model="account.account.template">
- <field name="code">214</field>
- <field name="parent_id" ref="chart21_fr"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">IMPÔTS LIÉS AUX SALAIRES À PAYER</field>
- </record>
-
- <record id="chart2141_fr" model="account.account.template">
- <field name="code">2141</field>
- <field name="parent_id" ref="chart214_fr"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">AGENCE DU REVENU DU CANADA</field>
- </record>
-
- <record id="chart21411_fr" model="account.account.template">
- <field name="code">21411</field>
- <field name="parent_id" ref="chart2141_fr"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">ASSURANCE EMPLOI À PAYER</field>
- </record>
-
- <record id="chart214111_fr" model="account.account.template">
- <field name="code">214111</field>
- <field name="parent_id" ref="chart21411_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">AE - Contribution des employés</field>
- </record>
-
- <record id="chart214112_fr" model="account.account.template">
- <field name="code">214112</field>
- <field name="parent_id" ref="chart21411_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">AE - Contribution de l'employeur</field>
- </record>
-
- <record id="chart21412_fr" model="account.account.template">
- <field name="code">21412</field>
- <field name="parent_id" ref="chart2141_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Impôt fédéral sur les revenus</field>
- </record>
-
- <record id="chart2142_fr" model="account.account.template">
- <field name="code">2142</field>
- <field name="parent_id" ref="chart214_fr"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">AGENCE DU REVENU PROVINCIAL</field>
- </record>
-
- <record id="chart21421_fr" model="account.account.template">
- <field name="code">21421</field>
- <field name="parent_id" ref="chart2142_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Fond des Services de Santé à payer</field>
- </record>
-
- <record id="chart21422_fr" model="account.account.template">
- <field name="code">21422</field>
- <field name="parent_id" ref="chart2142_fr"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">RENTES À PAYER</field>
- </record>
-
- <record id="chart214221_fr" model="account.account.template">
- <field name="code">214221</field>
- <field name="parent_id" ref="chart21422_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Rentes - Contribution des employés</field>
- </record>
-
- <record id="chart214222_fr" model="account.account.template">
- <field name="code">214222</field>
- <field name="parent_id" ref="chart21422_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Rentes - Contribution de l'employeur</field>
- </record>
-
- <record id="chart21423_fr" model="account.account.template">
- <field name="code">21423</field>
- <field name="parent_id" ref="chart2142_fr"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">ASSURANCE PARENTALE À PAYER</field>
- </record>
-
- <record id="chart214231_fr" model="account.account.template">
- <field name="code">214231</field>
- <field name="parent_id" ref="chart21423_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">AP - Contribution des employés</field>
- </record>
-
- <record id="chart214232_fr" model="account.account.template">
- <field name="code">214232</field>
- <field name="parent_id" ref="chart21423_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">AP - Contribution de l'employeur</field>
- </record>
-
- <record id="chart21424_fr" model="account.account.template">
- <field name="code">21424</field>
- <field name="parent_id" ref="chart2142_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Santé et Sécurité au Travail à payer</field>
- </record>
-
- <record id="chart21425_fr" model="account.account.template">
- <field name="code">21425</field>
- <field name="parent_id" ref="chart2142_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Normes du Travail à payer</field>
- </record>
-
- <record id="chart21426_fr" model="account.account.template">
- <field name="code">21426</field>
- <field name="parent_id" ref="chart2142_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_liability"/>
- <field name="name">Impôt provincial sur les revenus</field>
- </record>
+ <record id="chart214_fr" model="account.account.template">
+ <field name="code">214</field>
+ <field name="parent_id" ref="chart21_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">DAS ET CONTRIBUTIONS DE L'EMPLOYEUR À PAYER</field>
+ </record>
+
+ <record id="chart2141_fr" model="account.account.template">
+ <field name="code">2141</field>
+ <field name="parent_id" ref="chart214_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">AGENCE DU REVENU DU CANADA</field>
+ </record>
+
+ <record id="chart21411_fr" model="account.account.template">
+ <field name="code">21411</field>
+ <field name="parent_id" ref="chart2141_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">ASSURANCE EMPLOI À PAYER</field>
+ </record>
+
+ <record id="chart214111_fr" model="account.account.template">
+ <field name="code">214111</field>
+ <field name="parent_id" ref="chart21411_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">AE - Contribution des employés</field>
+ </record>
+
+ <record id="chart214112_fr" model="account.account.template">
+ <field name="code">214112</field>
+ <field name="parent_id" ref="chart21411_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">AE - Contribution de l'employeur</field>
+ </record>
+
+ <record id="chart21412_fr" model="account.account.template">
+ <field name="code">21412</field>
+ <field name="parent_id" ref="chart2141_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Impôt fédéral sur les revenus</field>
+ </record>
+
+ <record id="chart21413_fr" model="account.account.template">
+ <field name="code">21413</field>
+ <field name="parent_id" ref="chart2141_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">RÉGIME DE PENSIONS DU CANADA À PAYER</field>
+ </record>
+
+ <record id="chart214131_fr" model="account.account.template">
+ <field name="code">214131</field>
+ <field name="parent_id" ref="chart21413_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">RPC - Contribution des employés</field>
+ </record>
+
+ <record id="chart214132_fr" model="account.account.template">
+ <field name="code">214132</field>
+ <field name="parent_id" ref="chart21413_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">RPC - Contribution de l'employeur</field>
+ </record>
+
+ <record id="chart2142_fr" model="account.account.template">
+ <field name="code">2142</field>
+ <field name="parent_id" ref="chart214_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">AGENCE PROVINCIALE</field>
+ </record>
+
+ <record id="chart21421_fr" model="account.account.template">
+ <field name="code">21421</field>
+ <field name="parent_id" ref="chart2142_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Fond des Services de Santé à payer</field>
+ </record>
+
+ <record id="chart21422_fr" model="account.account.template">
+ <field name="code">21422</field>
+ <field name="parent_id" ref="chart2142_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">RÉGIME DE PENSION PROVINCIAL À PAYER</field>
+ </record>
+
+ <record id="chart214221_fr" model="account.account.template">
+ <field name="code">214221</field>
+ <field name="parent_id" ref="chart21422_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Régime de pension provincial - Contribution des employés</field>
+ </record>
+
+ <record id="chart214222_fr" model="account.account.template">
+ <field name="code">214222</field>
+ <field name="parent_id" ref="chart21422_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Régime de pension provincial - Contribution de l'employeur</field>
+ </record>
+
+ <record id="chart21423_fr" model="account.account.template">
+ <field name="code">21423</field>
+ <field name="parent_id" ref="chart2142_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">RÉGIME PROVINCIAL D'ASSURANCE PARENTALE À PAYER</field>
+ </record>
+
+ <record id="chart214231_fr" model="account.account.template">
+ <field name="code">214231</field>
+ <field name="parent_id" ref="chart21423_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Assurance parentale - Contribution des employés</field>
+ </record>
+
+ <record id="chart214232_fr" model="account.account.template">
+ <field name="code">214232</field>
+ <field name="parent_id" ref="chart21423_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Assurance parentale - Contribution de l'employeur</field>
+ </record>
+
+ <record id="chart21424_fr" model="account.account.template">
+ <field name="code">21424</field>
+ <field name="parent_id" ref="chart2142_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Santé et Sécurité au Travail à payer</field>
+ </record>
+
+ <record id="chart21425_fr" model="account.account.template">
+ <field name="code">21425</field>
+ <field name="parent_id" ref="chart2142_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Normes du Travail à payer</field>
+ </record>
+
+ <record id="chart21426_fr" model="account.account.template">
+ <field name="code">21426</field>
+ <field name="parent_id" ref="chart2142_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Impôt provincial sur les revenus</field>
+ </record>
<record id="chart215_fr" model="account.account.template">
<field name="code">215</field>
@@ -498,6 +522,87 @@
<field name="name">Stock reçu non facturé</field>
</record>
+ <record id="chart218_fr" model="account.account.template">
+ <field name="code">218</field>
+ <field name="parent_id" ref="chart21_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">PASSIFS COURANTS LIÉS AUX SALAIRES</field>
+ </record>
+
+ <record id="chart2181_fr" model="account.account.template">
+ <field name="code">2181</field>
+ <field name="parent_id" ref="chart218_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Salaires à payer</field>
+ </record>
+
+ <record id="chart2183_fr" model="account.account.template">
+ <field name="code">2183</field>
+ <field name="parent_id" ref="chart218_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Bonis à payer</field>
+ </record>
+
+ <record id="chart2184_fr" model="account.account.template">
+ <field name="code">2184</field>
+ <field name="parent_id" ref="chart218_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Paie Rétroactive à payer</field>
+ </record>
+
+ <!-- Montants à verser dans un RVER, RPA ou autre régime collectif -->
+ <record id="chart2185_fr" model="account.account.template">
+ <field name="code">2185</field>
+ <field name="parent_id" ref="chart218_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">RÉGIMES DE PENSION COLLECTIFS À PAYER</field>
+ </record>
+
+ <record id="chart218501_fr" model="account.account.template">
+ <field name="code">218501</field>
+ <field name="parent_id" ref="chart2185_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Régimes de pension collectifs à payer - Contribution des employés</field>
+ </record>
+
+ <record id="chart218502_fr" model="account.account.template">
+ <field name="code">218502</field>
+ <field name="parent_id" ref="chart2185_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Régimes de pension collectifs à payer - Contribution de l'employeur</field>
+ </record>
+
+ <record id="chart2186_fr" model="account.account.template">
+ <field name="code">2186</field>
+ <field name="parent_id" ref="chart218_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">PROVISION POUR AVANTAGES SOCIAUX</field>
+ </record>
+
+ <record id="chart218601_fr" model="account.account.template">
+ <field name="code">218601</field>
+ <field name="parent_id" ref="chart2186_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Provision pour avantages sociaux - Contribution de l'employé</field>
+ </record>
+
+ <record id="chart218602_fr" model="account.account.template">
+ <field name="code">218602</field>
+ <field name="parent_id" ref="chart2186_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Provision pour avantages sociaux - Contribution de l'employeur</field>
+ </record>
+
<record id="chart25_fr" model="account.account.template">
<field name="code">25</field>
<field name="parent_id" ref="chart2_fr"/>
@@ -522,21 +627,69 @@
<field name="name">PROVISIONS POUR RETRAITES ET AUTRES AVANTAGES POSTÉRIEURS À L'EMPLOI</field>
</record>
- <record id="chart253_fr" model="account.account.template">
- <field name="code">253</field>
- <field name="parent_id" ref="chart25_fr"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">IMPÔTS DIFFÉRÉS</field>
- </record>
-
- <record id="chart254_fr" model="account.account.template">
- <field name="code">254</field>
- <field name="parent_id" ref="chart25_fr"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">AUTRES PASSIFS NON-COURANTS</field>
- </record>
+ <record id="chart253_fr" model="account.account.template">
+ <field name="code">253</field>
+ <field name="parent_id" ref="chart25_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">IMPÔTS DIFFÉRÉS</field>
+ </record>
+
+ <record id="chart254_fr" model="account.account.template">
+ <field name="code">254</field>
+ <field name="parent_id" ref="chart25_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">PASSIFS NON-COURANTS LIÉS AUX SALAIRES</field>
+ </record>
+
+ <record id="chart2541_fr" model="account.account.template">
+ <field name="code">2541</field>
+ <field name="parent_id" ref="chart254_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">Congés Accumulés</field>
+ </record>
+
+ <record id="chart254101_fr" model="account.account.template">
+ <field name="code">254101</field>
+ <field name="parent_id" ref="chart2541_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Vacances Accumulées</field>
+ </record>
+
+ <record id="chart254102_fr" model="account.account.template">
+ <field name="code">254102</field>
+ <field name="parent_id" ref="chart2541_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Jours Compensatoires Accumulés</field>
+ </record>
+
+ <record id="chart254103_fr" model="account.account.template">
+ <field name="code">254103</field>
+ <field name="parent_id" ref="chart2541_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Congés de Maladie Accumulés</field>
+ </record>
+
+ <record id="chart2542_fr" model="account.account.template">
+ <field name="code">2542</field>
+ <field name="parent_id" ref="chart254_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_liability"/>
+ <field name="name">Bonis Accumulés</field>
+ </record>
+
+ <record id="chart259_fr" model="account.account.template">
+ <field name="code">259</field>
+ <field name="parent_id" ref="chart25_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">AUTRES PASSIFS NON-COURANTS</field>
+ </record>
<!-- CAPITAUX PROPRES -->
@@ -744,93 +897,157 @@
<field name="name">Achats à l'étranger</field>
</record>
- <record id="chart512_fr" model="account.account.template">
- <field name="code">512</field>
- <field name="parent_id" ref="chart51_fr"/>
- <field name="type">view</field>
- <field name="user_type" ref="account.data_account_type_view"/>
- <field name="name">SALAIRES ET CHARGES SOCIALES</field>
- </record>
-
- <record id="chart51201_fr" model="account.account.template">
- <field name="code">51201</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Salaires</field>
- </record>
-
- <record id="chart51202_fr" model="account.account.template">
- <field name="code">51202</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Vacances</field>
- </record>
-
- <record id="chart51203_fr" model="account.account.template">
- <field name="code">51203</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Assurance Emploi</field>
- </record>
-
- <record id="chart51204_fr" model="account.account.template">
- <field name="code">51204</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Fonds des services de santé</field>
- </record>
-
- <record id="chart51205_fr" model="account.account.template">
- <field name="code">51205</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Rentes</field>
- </record>
-
- <record id="chart51206_fr" model="account.account.template">
- <field name="code">51206</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Assurance parentale</field>
- </record>
-
- <record id="chart51207_fr" model="account.account.template">
- <field name="code">51207</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Santé et sécurité au travail</field>
- </record>
-
- <record id="chart51208_fr" model="account.account.template">
- <field name="code">51208</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Normes du travail</field>
- </record>
-
- <record id="chart51209_fr" model="account.account.template">
- <field name="code">51209</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Impôt fédéral</field>
- </record>
-
- <record id="chart51210_fr" model="account.account.template">
- <field name="code">51210</field>
- <field name="parent_id" ref="chart512_fr"/>
- <field name="type">other</field>
- <field name="user_type" ref="account.data_account_type_expense"/>
- <field name="name">Impôt provincial</field>
- </record>
+ <record id="chart512_fr" model="account.account.template">
+ <field name="code">512</field>
+ <field name="parent_id" ref="chart51_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">SALAIRES ET CHARGES SOCIALES</field>
+ </record>
+
+ <record id="chart5121_fr" model="account.account.template">
+ <field name="code">5121</field>
+ <field name="parent_id" ref="chart512_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">Salaires</field>
+ </record>
+
+ <record id="chart512101_fr" model="account.account.template">
+ <field name="code">512101</field>
+ <field name="parent_id" ref="chart5121_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Salaires Réguliers</field>
+ </record>
+
+ <record id="chart512102_fr" model="account.account.template">
+ <field name="code">512102</field>
+ <field name="parent_id" ref="chart5121_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Bonis</field>
+ </record>
+
+ <record id="chart512103_fr" model="account.account.template">
+ <field name="code">512103</field>
+ <field name="parent_id" ref="chart5121_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Paies Rétroactives</field>
+ </record>
+
+ <record id="chart5122_fr" model="account.account.template">
+ <field name="code">5122</field>
+ <field name="parent_id" ref="chart512_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">Congés Accumulées</field>
+ </record>
+
+ <record id="chart512201_fr" model="account.account.template">
+ <field name="code">512201</field>
+ <field name="parent_id" ref="chart5122_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Vacances Accumulées</field>
+ </record>
+
+ <record id="chart512202_fr" model="account.account.template">
+ <field name="code">512202</field>
+ <field name="parent_id" ref="chart5122_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Jours Compensatoires Accumulées</field>
+ </record>
+
+ <record id="chart512203_fr" model="account.account.template">
+ <field name="code">512203</field>
+ <field name="parent_id" ref="chart5122_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Congés de Maladie Accumulés</field>
+ </record>
+
+ <record id="chart5123_fr" model="account.account.template">
+ <field name="code">5123</field>
+ <field name="parent_id" ref="chart512_fr"/>
+ <field name="type">view</field>
+ <field name="user_type" ref="account.data_account_type_view"/>
+ <field name="name">Contributions de l'Employeur</field>
+ </record>
+
+ <record id="chart512301_fr" model="account.account.template">
+ <field name="code">512301</field>
+ <field name="parent_id" ref="chart5123_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Régime de Pensions du Canada</field>
+ </record>
+
+ <record id="chart512302_fr" model="account.account.template">
+ <field name="code">512302</field>
+ <field name="parent_id" ref="chart5123_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Assurance Emploi</field>
+ </record>
+
+ <record id="chart512303_fr" model="account.account.template">
+ <field name="code">512303</field>
+ <field name="parent_id" ref="chart5123_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Régimes de pension collectifs</field>
+ </record>
+
+ <record id="chart512304_fr" model="account.account.template">
+ <field name="code">512304</field>
+ <field name="parent_id" ref="chart5123_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Dépense d'avantages sociaux</field>
+ </record>
+
+ <record id="chart512310_fr" model="account.account.template">
+ <field name="code">512310</field>
+ <field name="parent_id" ref="chart5123_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Régime de pension provincial</field>
+ </record>
+
+ <record id="chart512311_fr" model="account.account.template">
+ <field name="code">512311</field>
+ <field name="parent_id" ref="chart5123_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Régime d'assurance parental provincial</field>
+ </record>
+
+ <record id="chart512312_fr" model="account.account.template">
+ <field name="code">512312</field>
+ <field name="parent_id" ref="chart5123_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Santé et sécurité au travail</field>
+ </record>
+
+ <record id="chart512313_fr" model="account.account.template">
+ <field name="code">512313</field>
+ <field name="parent_id" ref="chart5123_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Normes du travail</field>
+ </record>
+
+ <record id="chart512314_fr" model="account.account.template">
+ <field name="code">512314</field>
+ <field name="parent_id" ref="chart5123_fr"/>
+ <field name="type">other</field>
+ <field name="user_type" ref="account.data_account_type_expense"/>
+ <field name="name">Fonds des services de santé</field>
+ </record>
<record id="chart513_fr" model="account.account.template">
<field name="code">513</field>
diff --git a/addons/l10n_ca/account_tax_en.xml b/addons/l10n_ca/account_tax_en.xml
index 4c15ebb68ed..810827b047e 100644
--- a/addons/l10n_ca/account_tax_en.xml
+++ b/addons/l10n_ca/account_tax_en.xml
@@ -14,6 +14,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend">1</field>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="gstpst_sale_bc_gst_en" model="account.tax.template">
@@ -32,6 +34,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_en"/>
<field name="parent_id" ref="gstpst_bc_sale_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="pst_bc_sale_en" model="account.tax.template">
@@ -49,6 +53,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_pst_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_pst_en"/>
<field name="parent_id" ref="gstpst_bc_sale_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- Manitoba PST -->
@@ -61,6 +67,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="gstpst_sale_mb_gst_en" model="account.tax.template">
@@ -79,6 +87,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_en"/>
<field name="parent_id" ref="gstpst_mb_sale_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="pst_mb_sale_en" model="account.tax.template">
@@ -96,6 +106,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_pst_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_pst_en"/>
<field name="parent_id" ref="gstpst_mb_sale_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- Quebec PST -->
@@ -108,6 +120,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="gstqst_sale_gst_en" model="account.tax.template">
@@ -125,6 +139,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_en"/>
<field name="parent_id" ref="gstqst_sale_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="qst_sale_en" model="account.tax.template">
@@ -142,6 +158,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_pst_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_pst_en"/>
<field name="parent_id" ref="gstqst_sale_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- Saskatchewan PST -->
@@ -154,6 +172,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="gstpst_sale_sk_gst_en" model="account.tax.template">
@@ -172,6 +192,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_en"/>
<field name="parent_id" ref="gstpst_sk_sale_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="pst_sk_sale_en" model="account.tax.template">
@@ -189,6 +211,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_pst_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_pst_en"/>
<field name="parent_id" ref="gstpst_sk_sale_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- HST -->
@@ -206,6 +230,8 @@
<field name="tax_code_id" ref="vat_code_payable_hst13_en"/>
<field name="ref_base_code_id" ref="vat_code_base_receivable_hst13_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_hst13_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="hst14_sale_en" model="account.tax.template">
@@ -221,6 +247,8 @@
<field name="tax_code_id" ref="vat_code_payable_hst14_en"/>
<field name="ref_base_code_id" ref="vat_code_base_receivable_hst14_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_hst14_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="hst15_sale_en" model="account.tax.template">
@@ -236,6 +264,8 @@
<field name="tax_code_id" ref="vat_code_payable_hst15_en"/>
<field name="ref_base_code_id" ref="vat_code_base_receivable_hst15_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_hst15_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- GST -->
@@ -253,6 +283,8 @@
<field name="tax_code_id" ref="vat_code_payable_gst_en"/>
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_en"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- PURCHASE TAXES -->
@@ -267,6 +299,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend">1</field>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="gstpst_purc_bc_gst_en" model="account.tax.template">
@@ -285,6 +319,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_en"/>
<field name="parent_id" ref="gstpst_bc_purc_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="pst_bc_purc_en" model="account.tax.template">
@@ -302,6 +338,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_pst_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_pst_en"/>
<field name="parent_id" ref="gstpst_bc_purc_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- Manitoba PST -->
@@ -314,6 +352,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="gstpst_purc_mb_gst_en" model="account.tax.template">
@@ -332,6 +372,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_en"/>
<field name="parent_id" ref="gstpst_mb_purc_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="pst_mb_purc_en" model="account.tax.template">
@@ -349,6 +391,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_pst_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_pst_en"/>
<field name="parent_id" ref="gstpst_mb_purc_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- Quebec PST -->
@@ -361,6 +405,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="gstqst_purc_gst_en" model="account.tax.template">
@@ -378,6 +424,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_en"/>
<field name="parent_id" ref="gstqst_purc_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="qst_purc_en" model="account.tax.template">
@@ -395,6 +443,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_pst_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_pst_en"/>
<field name="parent_id" ref="gstqst_purc_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- Saskatchewan PST -->
@@ -407,6 +457,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="gstpst_purc_sk_gst_en" model="account.tax.template">
@@ -425,6 +477,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_en"/>
<field name="parent_id" ref="gstpst_sk_purc_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="pst_sk_purc_en" model="account.tax.template">
@@ -442,6 +496,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_pst_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_pst_en"/>
<field name="parent_id" ref="gstpst_sk_purc_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- HST -->
@@ -459,6 +515,8 @@
<field name="tax_code_id" ref="vat_code_receivable_hst13_en"/>
<field name="ref_base_code_id" ref="vat_code_base_payable_hst13_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_hst13_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="hst14_purc_en" model="account.tax.template">
@@ -474,6 +532,8 @@
<field name="tax_code_id" ref="vat_code_receivable_hst14_en"/>
<field name="ref_base_code_id" ref="vat_code_base_payable_hst14_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_hst14_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="hst15_purc_en" model="account.tax.template">
@@ -489,6 +549,8 @@
<field name="tax_code_id" ref="vat_code_receivable_hst15_en"/>
<field name="ref_base_code_id" ref="vat_code_base_payable_hst15_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_hst15_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- GST -->
@@ -506,6 +568,8 @@
<field name="tax_code_id" ref="vat_code_receivable_gst_en"/>
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_en"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_en"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
</data>
diff --git a/addons/l10n_ca/account_tax_fr.xml b/addons/l10n_ca/account_tax_fr.xml
index 6c37befa139..8f01051c0ef 100644
--- a/addons/l10n_ca/account_tax_fr.xml
+++ b/addons/l10n_ca/account_tax_fr.xml
@@ -14,6 +14,8 @@
<field name="amount">1</field>
<field name="child_depend">1</field>
<field name="type">percent</field>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="gstpst_sale_bc_gst_fr" model="account.tax.template">
@@ -32,6 +34,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_fr"/>
<field name="parent_id" ref="gstpst_bc_sale_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="pst_bc_sale_fr" model="account.tax.template">
@@ -49,6 +53,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_pst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_pst_fr"/>
<field name="parent_id" ref="gstpst_bc_sale_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- Manitoba PST -->
@@ -61,6 +67,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="gstpst_sale_mb_gst_fr" model="account.tax.template">
@@ -79,6 +87,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_fr"/>
<field name="parent_id" ref="gstpst_mb_sale_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="pst_mb_sale_fr" model="account.tax.template">
@@ -96,6 +106,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_pst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_pst_fr"/>
<field name="parent_id" ref="gstpst_mb_sale_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- Quebec PST -->
@@ -108,6 +120,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="gstqst_sale_gst_fr" model="account.tax.template">
@@ -125,6 +139,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_fr"/>
<field name="parent_id" ref="gstqst_sale_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="tvq_sale_fr" model="account.tax.template">
@@ -142,6 +158,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_pst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_pst_fr"/>
<field name="parent_id" ref="gstqst_sale_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- Saskatchewan PST -->
@@ -154,6 +172,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="gstpst_sale_sk_gst_fr" model="account.tax.template">
@@ -172,6 +192,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_fr"/>
<field name="parent_id" ref="gstpst_sk_sale_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="pst_sk_sale_fr" model="account.tax.template">
@@ -189,6 +211,8 @@
<field name="ref_base_code_id" ref="vat_code_base_receivable_pst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_pst_fr"/>
<field name="parent_id" ref="gstpst_sk_sale_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- HST -->
@@ -206,6 +230,8 @@
<field name="tax_code_id" ref="vat_code_payable_hst13_fr"/>
<field name="ref_base_code_id" ref="vat_code_base_receivable_hst13_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_hst13_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="hst14_sale_fr" model="account.tax.template">
@@ -221,6 +247,8 @@
<field name="tax_code_id" ref="vat_code_payable_hst14_fr"/>
<field name="ref_base_code_id" ref="vat_code_base_receivable_hst14_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_hst14_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<record id="hst15_sale_fr" model="account.tax.template">
@@ -236,6 +264,8 @@
<field name="tax_code_id" ref="vat_code_payable_hst15_fr"/>
<field name="ref_base_code_id" ref="vat_code_base_receivable_hst15_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_hst15_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
<!-- GST -->
@@ -253,6 +283,8 @@
<field name="tax_code_id" ref="vat_code_payable_gst_fr"/>
<field name="ref_base_code_id" ref="vat_code_base_receivable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_payable_gst_fr"/>
+ <field name="ref_base_sign" eval="-1"/>
+ <field name="ref_tax_sign" eval="-1"/>
</record>
@@ -268,6 +300,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend">1</field>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="gstpst_purc_bc_gst_fr" model="account.tax.template">
@@ -286,6 +320,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_fr"/>
<field name="parent_id" ref="gstpst_bc_purc_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="pst_bc_purc_fr" model="account.tax.template">
@@ -303,6 +339,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_pst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_pst_fr"/>
<field name="parent_id" ref="gstpst_bc_purc_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- Manitoba PST -->
@@ -315,6 +353,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="gstpst_purc_mb_gst_fr" model="account.tax.template">
@@ -333,6 +373,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_fr"/>
<field name="parent_id" ref="gstpst_mb_purc_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="pst_mb_purc_fr" model="account.tax.template">
@@ -350,6 +392,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_pst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_pst_fr"/>
<field name="parent_id" ref="gstpst_mb_purc_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- Quebec PST -->
@@ -362,6 +406,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="gstqst_purc_gst_fr" model="account.tax.template">
@@ -379,6 +425,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_fr"/>
<field name="parent_id" ref="gstqst_purc_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="tvq_purc_fr" model="account.tax.template">
@@ -396,6 +444,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_pst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_pst_fr"/>
<field name="parent_id" ref="gstqst_purc_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- Saskatchewan PST -->
@@ -408,6 +458,8 @@
<field name="amount">1</field>
<field name="type">percent</field>
<field name="child_depend" eval="True"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="gstpst_purc_sk_gst_fr" model="account.tax.template">
@@ -426,6 +478,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_fr"/>
<field name="parent_id" ref="gstpst_sk_purc_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="pst_sk_purc_fr" model="account.tax.template">
@@ -443,6 +497,8 @@
<field name="ref_base_code_id" ref="vat_code_base_payable_pst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_pst_fr"/>
<field name="parent_id" ref="gstpst_sk_purc_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- HST -->
@@ -460,6 +516,8 @@
<field name="tax_code_id" ref="vat_code_receivable_hst13_fr"/>
<field name="ref_base_code_id" ref="vat_code_base_payable_hst13_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_hst13_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="hst14_purc_fr" model="account.tax.template">
@@ -475,6 +533,8 @@
<field name="tax_code_id" ref="vat_code_receivable_hst14_fr"/>
<field name="ref_base_code_id" ref="vat_code_base_payable_hst14_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_hst14_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<record id="hst15_purc_fr" model="account.tax.template">
@@ -490,6 +550,8 @@
<field name="tax_code_id" ref="vat_code_receivable_hst15_fr"/>
<field name="ref_base_code_id" ref="vat_code_base_payable_hst15_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_hst15_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
<!-- GST -->
@@ -507,6 +569,8 @@
<field name="tax_code_id" ref="vat_code_receivable_gst_fr"/>
<field name="ref_base_code_id" ref="vat_code_base_payable_gst_fr"/>
<field name="ref_tax_code_id" ref="vat_code_receivable_gst_fr"/>
+ <field name="base_sign" eval="-1"/>
+ <field name="tax_sign" eval="-1"/>
</record>
</data>
diff --git a/addons/mass_mailing/models/mass_mailing_stats.py b/addons/mass_mailing/models/mass_mailing_stats.py
index 7b929f5f24f..16973399a58 100644
--- a/addons/mass_mailing/models/mass_mailing_stats.py
+++ b/addons/mass_mailing/models/mass_mailing_stats.py
@@ -56,7 +56,7 @@ class MailMailStats(osv.Model):
return res
_columns = {
- 'mail_mail_id': fields.many2one('mail.mail', 'Mail', ondelete='set null'),
+ 'mail_mail_id': fields.many2one('mail.mail', 'Mail', ondelete='set null', select=True),
'mail_mail_id_int': fields.integer(
'Mail ID (tech)',
help='ID of the related mail_mail. This field is an integer field because'
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 93b5a1a107a..73d3fc1660b 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -234,16 +234,16 @@ class mrp_bom(osv.osv):
domain = domain + [ '|', ('date_start', '=', False), ('date_start', '<=', time.strftime(DEFAULT_SERVER_DATE_FORMAT)),
'|', ('date_stop', '=', False), ('date_stop', '>=', time.strftime(DEFAULT_SERVER_DATE_FORMAT))]
# order to prioritize bom with product_id over the one without
- ids = self.search(cr, uid, domain, order='product_id', context=context)
+ ids = self.search(cr, uid, domain, order='sequence, product_id', context=context)
# Search a BoM which has all properties specified, or if you can not find one, you could
- # pass a BoM without any properties
+ # pass a BoM without any properties with the smallest sequence
bom_empty_prop = False
for bom in self.pool.get('mrp.bom').browse(cr, uid, ids, context=context):
if not set(map(int, bom.property_ids or [])) - set(properties or []):
- if properties and not bom.property_ids:
- bom_empty_prop = bom.id
- else:
+ if not properties or bom.property_ids:
return bom.id
+ elif not bom_empty_prop:
+ bom_empty_prop = bom.id
return bom_empty_prop
def _bom_explode(self, cr, uid, bom, product, factor, properties=None, level=0, routing_id=False, previous_products=None, master_bom=None, context=None):
@@ -299,6 +299,9 @@ class mrp_bom(osv.osv):
if not product or (set(map(int,bom_line_id.attribute_value_ids or [])) - set(map(int,product.attribute_value_ids))):
continue
+ if set(map(int, bom_line_id.property_ids or [])) - set(properties or []):
+ continue
+
if previous_products and bom_line_id.product_id.product_tmpl_id.id in previous_products:
raise UserError(_('BoM "%s" contains a BoM line with a product recursion: "%s".') % (master_bom.name,bom_line_id.product_id.name_get()[0][1]))
@@ -420,6 +423,7 @@ class mrp_bom_line(osv.osv):
'product_rounding': lambda *a: 0.0,
'type': lambda *a: 'normal',
'product_uom': _get_uom_id,
+ 'sequence': 1,
}
_sql_constraints = [
('bom_qty_zero', 'CHECK (product_qty>0)', 'All product quantities must be greater than 0.\n' \
diff --git a/addons/mrp/mrp_demo.xml b/addons/mrp/mrp_demo.xml
index cca286a0341..349fa147901 100644
--- a/addons/mrp/mrp_demo.xml
+++ b/addons/mrp/mrp_demo.xml
@@ -454,6 +454,25 @@
<field name="type">normal</field>
</record>
+ <record id="mrp_bom_property_0" model="mrp.bom">
+ <field name="name">PC Assemble + DDR 512MB</field>
+ <field name="product_tmpl_id" ref="product.product_product_3_product_template"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="sequence">5</field>
+ <field name="type">normal</field>
+ <field name="property_ids" eval="[(6,0,[ref('mrp_property_0')])]"/>
+ </record>
+
+ <record id="mrp_bom_property_line" model="mrp.bom">
+ <field name="name">RAM SR2 PLUS</field>
+ <field name="product_id" ref="product.product_product_14"/>
+ <field name="product_tmpl_id" ref="product.product_product_14_product_template"/>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="sequence">5</field>
+ <field name="type">phantom</field>
+ <field name="property_ids" eval="[(6,0,[ref('mrp_property_0')])]"/>
+ </record>
+
<record id="mrp_bom_line_17" model="mrp.bom.line">
<field name="product_id" ref="product.product_product_6"/>
<field name="product_qty">1</field>
@@ -503,7 +522,7 @@
<field name="name">PC Assemble + 512MB RAM</field>
<field name="product_tmpl_id" ref="product.product_product_3_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
- <field name="sequence">5</field>
+ <field name="sequence">4</field>
<field name="routing_id" ref="mrp_routing_2"/>
<field name="type">phantom</field>
</record>
@@ -641,6 +660,35 @@
<field name="bom_id" ref="mrp_bom_11"/>
</record>
+ <record id="mrp_bom_line_prop_1" model="mrp.bom.line">
+ <field name="product_id" ref="product.product_product_13"/>
+ <field name="product_qty">1</field>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="sequence">1</field>
+ <field name="type">normal</field>
+ <field name="property_ids" eval="[(6,0,[ref('mrp_property_8')])]"/>
+ <field name="bom_id" ref="mrp_bom_property_line"/>
+ </record>
+
+ <record id="mrp_bom_line_prop_2" model="mrp.bom.line">
+ <field name="product_id" ref="product.product_product_12"/>
+ <field name="product_qty">1</field>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="sequence">1</field>
+ <field name="type">normal</field>
+ <field name="property_ids" eval="[(6,0,[ref('mrp_property_0')])]"/>
+ <field name="bom_id" ref="mrp_bom_property_line"/>
+ </record>
+
+ <record id="mrp_bom_line_prop_3" model="mrp.bom.line">
+ <field name="product_id" ref="product.product_product_11"/>
+ <field name="product_qty">1</field>
+ <field name="product_uom" ref="product.product_uom_unit"/>
+ <field name="sequence">1</field>
+ <field name="type">normal</field>
+ <field name="bom_id" ref="mrp_bom_property_line"/>
+ </record>
+
<record id="mrp_production_1" model="mrp.production">
<field name="product_id" ref="product.product_product_3"/>
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index b6c32fd1ac2..54be3f2418d 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -399,6 +399,7 @@
<field name="date_start"/>
<field name="date_stop"/>
<field name="attribute_value_ids" widget="many2many_tags" domain="[('product_ids.product_tmpl_id', '=', parent.product_tmpl_id)]"/>
+ <field name="property_ids" widget="many2many_tags"/>
</tree>
</field>
</page>
diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py
index 0aa91010c14..fa73c994a38 100644
--- a/addons/mrp/stock.py
+++ b/addons/mrp/stock.py
@@ -44,39 +44,27 @@ class StockMove(osv.osv):
if move.raw_material_production_id and move.location_dest_id.usage == 'production' and move.raw_material_production_id.product_id.track_production and not move.consumed_for:
raise UserError(_("Because the product %s requires it, you must assign a serial number to your raw material %s to proceed further in your production. Please use the 'Produce' button to do so.") % (move.raw_material_production_id.product_id.name, move.product_id.name))
- def _check_phantom_bom(self, cr, uid, move, context=None):
- """check if product associated to move has a phantom bom
- return list of ids of mrp.bom for that product """
- user_company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
- #doing the search as SUPERUSER because a user with the permission to write on a stock move should be able to explode it
- #without giving him the right to read the boms.
- domain = [
- '|', ('product_id', '=', move.product_id.id),
- '&', ('product_id', '=', False), ('product_tmpl_id.product_variant_ids', '=', move.product_id.id),
- ('type', '=', 'phantom'),
- '|', ('date_start', '=', False), ('date_start', '<=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)),
- '|', ('date_stop', '=', False), ('date_stop', '>=', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)),
- ('company_id', '=', user_company)]
- return self.pool.get('mrp.bom').search(cr, SUPERUSER_ID, domain, context=context)
-
def _action_explode(self, cr, uid, move, context=None):
""" Explodes pickings.
@param move: Stock moves
@return: True
"""
+ if context is None:
+ context = {}
bom_obj = self.pool.get('mrp.bom')
move_obj = self.pool.get('stock.move')
prod_obj = self.pool.get("product.product")
proc_obj = self.pool.get("procurement.order")
uom_obj = self.pool.get("product.uom")
to_explode_again_ids = []
- processed_ids = []
- bis = self._check_phantom_bom(cr, uid, move, context=context)
- if bis:
- bom_point = bom_obj.browse(cr, SUPERUSER_ID, bis[0], context=context)
+ property_ids = context.get('property_ids') or []
+ bis = bom_obj._bom_find(cr, SUPERUSER_ID, product_id=move.product_id.id, properties=property_ids)
+ bom_point = bom_obj.browse(cr, SUPERUSER_ID, bis, context=context)
+ if bis and bom_point.type == 'phantom':
+ processed_ids = []
factor = uom_obj._compute_qty(cr, SUPERUSER_ID, move.product_uom.id, move.product_uom_qty, bom_point.product_uom.id) / bom_point.product_qty
- res = bom_obj._bom_explode(cr, SUPERUSER_ID, bom_point, move.product_id, factor, [], context=context)
-
+ res = bom_obj._bom_explode(cr, SUPERUSER_ID, bom_point, move.product_id, factor, property_ids, context=context)
+
for line in res[0]:
product = prod_obj.browse(cr, uid, line['product_id'], context=context)
if product.type != 'service':
@@ -115,7 +103,6 @@ class StockMove(osv.osv):
else:
proc = proc_obj.create(cr, uid, valdef, context=context)
proc_obj.run(cr, uid, [proc], context=context) #could be omitted
-
#check if new moves needs to be exploded
if to_explode_again_ids:
@@ -134,8 +121,10 @@ class StockMove(osv.osv):
#delete the move with original product which is not relevant anymore
move_obj.unlink(cr, SUPERUSER_ID, [move.id], context=context)
- #return list of newly created move or the move id otherwise, unless there is no move anymore
- return processed_ids or (not bis and [move.id]) or []
+ #return list of newly created move
+ return processed_ids
+
+ return [move.id]
def action_confirm(self, cr, uid, ids, context=None):
move_ids = []
diff --git a/addons/note/note.py b/addons/note/note.py
index 2db3173a907..fa69b96050e 100644
--- a/addons/note/note.py
+++ b/addons/note/note.py
@@ -168,7 +168,7 @@ class note_note(osv.osv):
return result
else:
- return super(note_note, self).read_group(self, cr, uid, domain, fields, groupby,
+ return super(note_note, self).read_group(cr, uid, domain, fields, groupby,
offset=offset, limit=limit, context=context, orderby=orderby,lazy=lazy)
diff --git a/addons/payment/models/res_config.py b/addons/payment/models/res_config.py
index b64b698c83d..888e0a89fda 100644
--- a/addons/payment/models/res_config.py
+++ b/addons/payment/models/res_config.py
@@ -19,7 +19,7 @@ class AccountPaymentConfig(osv.TransientModel):
'module_payment_buckaroo': fields.boolean(
'Manage Payments Using Buckaroo',
help='-It installs the module payment_buckaroo.'),
- 'module_payment_authorize': fields.boolean(
+ 'module_payment_authorize': fields.dummy(
'Manage Payments Using Authorize.Net',
help='-It installs the module payment_authorize.'),
}
diff --git a/addons/payment/views/res_config_view.xml b/addons/payment/views/res_config_view.xml
index 8f5e5f31321..e4e6fc96652 100644
--- a/addons/payment/views/res_config_view.xml
+++ b/addons/payment/views/res_config_view.xml
@@ -24,10 +24,6 @@
<field name="module_payment_buckaroo" class="oe_inline"/>
<label for="module_payment_buckaroo"/>
</div>
- <div>
- <field name="module_payment_authorize" class="oe_inline"/>
- <label for="module_payment_authorize"/>
- </div>
</xpath>
</field>
</record>
diff --git a/addons/payment_adyen/controllers/main.py b/addons/payment_adyen/controllers/main.py
index e6e74eba9a7..63b8c9a8fb5 100644
--- a/addons/payment_adyen/controllers/main.py
+++ b/addons/payment_adyen/controllers/main.py
@@ -20,11 +20,10 @@ class AdyenController(http.Controller):
@http.route([
'/payment/adyen/return/',
], type='http', auth='none')
- def adyen_return(self, pspReference, **post):
- """ Paypal IPN."""
- post["pspReference"] = pspReference
+ def adyen_return(self, **post):
_logger.info('Beginning Adyen form_feedback with post data %s', pprint.pformat(post)) # debug
- request.registry['payment.transaction'].form_feedback(request.cr, SUPERUSER_ID, post, 'adyen', context=request.context)
+ if post.get('authResult') not in ['CANCELLED']:
+ request.registry['payment.transaction'].form_feedback(request.cr, SUPERUSER_ID, post, 'adyen', context=request.context)
return_url = post.pop('return_url', '')
if not return_url:
custom = json.loads(post.pop('merchantReturnData', '{}'))
diff --git a/addons/point_of_sale/wizard/pos_details.py b/addons/point_of_sale/wizard/pos_details.py
index 7b1dde7e0d6..db9dde51a4d 100644
--- a/addons/point_of_sale/wizard/pos_details.py
+++ b/addons/point_of_sale/wizard/pos_details.py
@@ -33,8 +33,8 @@ class pos_details(osv.osv_memory):
'user_ids': fields.many2many('res.users', 'pos_details_report_user_rel', 'user_id', 'wizard_id', 'Salespeople'),
}
_defaults = {
- 'date_start': lambda *a: time.strftime('%Y-%m-%d'),
- 'date_end': lambda *a: time.strftime('%Y-%m-%d'),
+ 'date_start': fields.date.context_today,
+ 'date_end': fields.date.context_today,
}
def print_report(self, cr, uid, ids, context=None):
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index ec611536c80..1b149a08069 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -401,11 +401,16 @@ class purchase_order(osv.osv):
'fiscal_position': False,
'payment_term_id': False,
}}
+
+ company_id = self.pool.get('res.users')._get_company(cr, uid, context=context)
+ if not company_id:
+ raise osv.except_osv(_('Error!'), _('There is no default company for the current user!'))
+ fp = self.pool['account.fiscal.position'].get_fiscal_position(cr, uid, company_id, partner_id, context=context)
supplier_address = partner.address_get(cr, uid, [partner_id], ['default'], context=context)
supplier = partner.browse(cr, uid, partner_id, context=context)
return {'value': {
'pricelist_id': supplier.property_product_pricelist_purchase.id,
- 'fiscal_position': supplier.property_account_position and supplier.property_account_position.id or False,
+ 'fiscal_position': fp or supplier.property_account_position and supplier.property_account_position.id,
'payment_term_id': supplier.property_supplier_payment_term.id or False,
}}
diff --git a/addons/report/static/src/css/reset.min.css b/addons/report/static/src/css/reset.min.css
index cc7842e37ef..ee21ad74e7d 100644
--- a/addons/report/static/src/css/reset.min.css
+++ b/addons/report/static/src/css/reset.min.css
@@ -1,2 +1,106 @@
-/* reset5 2011 opensource.736cs.com MIT - https://code.google.com/p/reset5 */
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,audio,canvas,details,figcaption,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,summary,time,video{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;}body{line-height:1;}article,aside,dialog,figure,footer,header,hgroup,nav,section,blockquote{display:block;}nav ul{list-style:none;}ol{list-style:decimal;}ul{list-style:disc;}ul ul{list-style:circle;}blockquote,q{quotes:none;}blockquote:before,blockquote:after,q:before,q:after{content:none;}ins{text-decoration:underline;}del{text-decoration:line-through;}mark{background:none;}abbr[title],dfn[title]{border-bottom:1px dotted #000;cursor:help;}table{border-collapse:collapse;border-spacing:0;}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0;}input[type=submit],input[type=button],button{margin:0!important;padding:0!important;}input,select,a img{vertical-align:middle;}
+/*
+
+HTML5 CSS Reset
+Based on Eric Meyer's CSS Reset
+and html5doctor.com HTML5 Reset
+
+Copyright (c) 2011 736 Computing Services Limited
+Released under the MIT license. http://opensource.736cs.com/licenses/mit
+
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, i, center, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, audio, canvas, details, figcaption,
+figure, footer, header, hgroup, mark, menu, meter, nav,
+output, progress, section, summary, time, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-size: 100%;
+ vertical-align: baseline;
+ background: transparent;
+}
+
+body {
+ line-height: 1;
+}
+
+article, aside, dialog, figure, footer, header,
+hgroup, nav, section, blockquote {
+ display: block;
+}
+
+nav ul {
+ list-style: none;
+}
+
+ol {
+ list-style: decimal;
+}
+
+ul {
+ list-style: disc;
+}
+
+ul ul {
+ list-style: circle;
+}
+
+blockquote, q {
+ quotes: none;
+}
+
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+
+ins {
+ text-decoration: underline;
+}
+
+del {
+ text-decoration: line-through;
+}
+
+mark {
+ background: none;
+}
+
+abbr[title], dfn[title] {
+ border-bottom:1px dotted #000;
+ cursor:help;
+}
+
+/* tables still need 'cellspacing="0"' in the markup */
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+hr {
+ display: block;
+ height: 1px;
+ border: 0;
+ border-top: 1px solid #ccc;
+ margin: 1em 0;
+ padding: 0;
+}
+
+input[type="submit"], input[type="button"], button {
+ padding: 0 !important;
+ margin: 0 !important;
+}
+
+input, select, a img {
+ vertical-align: middle;
+}
diff --git a/addons/sale_crm/wizard/crm_make_sale.py b/addons/sale_crm/wizard/crm_make_sale.py
index e4166f0c414..be7e0e56275 100644
--- a/addons/sale_crm/wizard/crm_make_sale.py
+++ b/addons/sale_crm/wizard/crm_make_sale.py
@@ -102,6 +102,7 @@ class crm_make_sale(osv.osv_memory):
'date_order': fields.datetime.now(),
'fiscal_position': fpos,
'payment_term':payment_term,
+ 'note': sale_obj.get_salenote(cr, uid, [case.id], partner.id, context=context),
'opportunity_id': case.id,
'campaign_id': case.campaign_id and case.campaign_id.id or False,
'medium_id': case.medium_id and case.medium_id.id or False,
diff --git a/addons/sale_margin/sale_margin.py b/addons/sale_margin/sale_margin.py
index 1e082f25542..e44e3815811 100644
--- a/addons/sale_margin/sale_margin.py
+++ b/addons/sale_margin/sale_margin.py
@@ -49,11 +49,14 @@ class sale_order_line(osv.osv):
return res
def _product_margin(self, cr, uid, ids, field_name, arg, context=None):
+ cur_obj = self.pool.get('res.currency')
res = {}
for line in self.browse(cr, uid, ids, context=context):
+ cur = line.order_id.pricelist_id.currency_id
res[line.id] = 0
if line.product_id:
- res[line.id] = line.price_subtotal - ((line.purchase_price or line.product_id.standard_price) * line.product_uos_qty)
+ tmp_margin = line.price_subtotal - ((line.purchase_price or line.product_id.standard_price) * line.product_uos_qty)
+ res[line.id] = cur_obj.round(cr, uid, cur, tmp_margin)
return res
_columns = {
diff --git a/addons/sale_mrp/sale_mrp.py b/addons/sale_mrp/sale_mrp.py
index 082323ad580..acc0db65742 100644
--- a/addons/sale_mrp/sale_mrp.py
+++ b/addons/sale_mrp/sale_mrp.py
@@ -100,3 +100,13 @@ class stock_move(osv.osv):
if res and move.procurement_id and move.procurement_id.property_ids:
res['property_ids'] = [(6, 0, [x.id for x in move.procurement_id.property_ids])]
return res
+
+ def _action_explode(self, cr, uid, move, context=None):
+ """ Explodes pickings.
+ @param move: Stock moves
+ @return: True
+ """
+ if context is None:
+ context = {}
+ property_ids = map(int, move.procurement_id.sale_line_id.property_ids or [])
+ return super(stock_move, self)._action_explode(cr, uid, move, context=dict(context, property_ids=property_ids))
diff --git a/addons/sale_mrp/tests/test_move_explode.py b/addons/sale_mrp/tests/test_move_explode.py
index 88dab7135b1..ff9cfe0feef 100644
--- a/addons/sale_mrp/tests/test_move_explode.py
+++ b/addons/sale_mrp/tests/test_move_explode.py
@@ -33,6 +33,7 @@ class TestMoveExplode(common.TransactionCase):
self.sale_order_line = self.registry('sale.order.line')
self.sale_order = self.registry('sale.order')
self.mrp_bom = self.registry('mrp.bom')
+ self.product = self.registry('product.product')
#product that has a phantom bom
self.product_bom_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'product_product_3')[1]
@@ -40,9 +41,24 @@ class TestMoveExplode(common.TransactionCase):
self.bom_id = self.ir_model_data.get_object_reference(cr, uid, 'mrp', 'mrp_bom_9')[1]
#partner agrolait
self.partner_id = self.ir_model_data.get_object_reference(cr, uid, 'base', 'res_partner_1')[1]
+ #bom: PC Assemble (with property: DDR 512MB)
+ self.bom_prop_id = self.ir_model_data.get_object_reference(cr, uid, 'mrp', 'mrp_bom_property_0')[1]
+
+ self.template_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'product_product_3_product_template')[1]
+ #property: DDR 512MB
+ self.mrp_property_id = self.ir_model_data.get_object_reference(cr, uid, 'mrp', 'mrp_property_0')[1]
+ #product: RAM SR2
+ self.product_bom_prop_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'product_product_14')[1]
+ #phantom bom for RAM SR2 with three lines containing properties
+ self.bom_prop_line_id = self.ir_model_data.get_object_reference(cr, uid, 'mrp', 'mrp_bom_property_line')[1]
+ #product: iPod included in the phantom bom
+ self.product_A_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'product_product_11')[1]
+ #product: Mouse, Wireless included in the phantom bom
+ self.product_B_id = self.ir_model_data.get_object_reference(cr, uid, 'product', 'product_product_12')[1]
+
def test_00_sale_move_explode(self):
- """check that when creating a sale order with a product that has a phantom BoM, move explode into content of the
+ """check that when creating a sale order with a product that has a phantom BoM, move explode into content of the
BoM"""
cr, uid, context = self.cr, self.uid, {}
#create sale order with one sale order line containing product with a phantom bom
@@ -57,3 +73,19 @@ class TestMoveExplode(common.TransactionCase):
bom = self.mrp_bom.browse(cr, uid, self.bom_id, context=context)
bom_component_length = self.mrp_bom._bom_explode(cr, uid, bom, self.product_bom_id, 1, [])
self.assertEqual(len(move_ids), len(bom_component_length[0]))
+
+ def test_00_bom_find(self):
+ """Check that _bom_find searches the bom corresponding to the properties passed or takes the bom with the smallest
+ sequence."""
+ cr, uid, context = self.cr, self.uid, {}
+ res_id = self.mrp_bom._bom_find(cr, uid, product_tmpl_id=self.template_id, product_id=None, properties=[self.mrp_property_id], context=context)
+ self.assertEqual(res_id, self.bom_prop_id)
+
+ def test_00_bom_explode(self):
+ """Check that _bom_explode only takes the lines with the right properties."""
+ cr, uid, context = self.cr, self.uid, {}
+ bom = self.mrp_bom.browse(cr, uid, self.bom_prop_line_id)
+ product = self.product.browse(cr, uid, self.product_bom_prop_id)
+ res = self.mrp_bom._bom_explode(cr, uid, bom, product, 1, properties=[self.mrp_property_id], context=context)
+ res = set([p['product_id'] for p in res[0]])
+ self.assertEqual(res, set([self.product_A_id, self.product_B_id]))
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index dbfa9836e3f..13de717ce36 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -953,6 +953,12 @@ class stock_picking(osv.osv):
return super(stock_picking, self).unlink(cr, uid, ids, context=context)
def write(self, cr, uid, ids, vals, context=None):
+ if vals.get('move_lines') and not vals.get('pack_operation_ids'):
+ # pack operations are directly dependant of move lines, it needs to be recomputed
+ pack_operation_obj = self.pool['stock.pack.operation']
+ existing_package_ids = pack_operation_obj.search(cr, uid, [('picking_id', 'in', ids)], context=context)
+ if existing_package_ids:
+ pack_operation_obj.unlink(cr, uid, existing_package_ids, context)
res = super(stock_picking, self).write(cr, uid, ids, vals, context=context)
#if we changed the move lines or the pack operations, we need to recompute the remaining quantities of both
if 'move_lines' in vals or 'pack_operation_ids' in vals:
@@ -2353,7 +2359,7 @@ class stock_move(models.Model):
if todo:
ids = self.action_confirm(cr, uid, todo, context=context)
pickings = set()
- procurement_ids = []
+ procurement_ids = set()
#Search operations that are linked to the moves
operations = set()
move_qty = {}
@@ -2417,7 +2423,7 @@ class stock_move(models.Model):
move_dest_ids.add(move.move_dest_id.id)
if move.procurement_id:
- procurement_ids.append(move.procurement_id.id)
+ procurement_ids.add(move.procurement_id.id)
#unreserve the quants and make them available for other operations/moves
quant_obj.quants_unreserve(cr, uid, move, context=context)
@@ -2425,7 +2431,7 @@ class stock_move(models.Model):
self._check_package_from_moves(cr, uid, ids, context=context)
#set the move as done
self.write(cr, uid, ids, {'state': 'done', 'date': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
- self.pool.get('procurement.order').check(cr, uid, procurement_ids, context=context)
+ self.pool.get('procurement.order').check(cr, uid, list(procurement_ids), context=context)
#assign destination moves
if move_dest_ids:
self.action_assign(cr, uid, list(move_dest_ids), context=context)
diff --git a/addons/stock/wizard/stock_transfer_details.py b/addons/stock/wizard/stock_transfer_details.py
index ed03413f5fa..17f302f6317 100644
--- a/addons/stock/wizard/stock_transfer_details.py
+++ b/addons/stock/wizard/stock_transfer_details.py
@@ -48,7 +48,8 @@ class stock_transfer_details(models.TransientModel):
picking = self.pool.get('stock.picking').browse(cr, uid, picking_id, context=context)
items = []
packs = []
- picking.do_prepare_partial()
+ if not picking.pack_operation_ids:
+ picking.do_prepare_partial()
for op in picking.pack_operation_ids:
item = {
'packop_id': op.id,
diff --git a/addons/stock_account/wizard/stock_valuation_history.py b/addons/stock_account/wizard/stock_valuation_history.py
index 9b5db80f7b2..a6223b443e4 100644
--- a/addons/stock_account/wizard/stock_valuation_history.py
+++ b/addons/stock_account/wizard/stock_valuation_history.py
@@ -127,7 +127,7 @@ class stock_history(osv.osv):
product_product ON product_product.id = stock_move.product_id
LEFT JOIN
product_template ON product_template.id = product_product.product_tmpl_id
- WHERE stock_move.state = 'done' AND dest_location.usage in ('internal', 'transit') AND stock_quant_move_rel.quant_id = quant.id
+ WHERE quant.qty>0 AND stock_move.state = 'done' AND dest_location.usage in ('internal', 'transit') AND stock_quant_move_rel.quant_id = quant.id
AND stock_quant_move_rel.move_id = stock_move.id AND ((source_location.company_id is null and dest_location.company_id is not null) or
(source_location.company_id is not null and dest_location.company_id is null) or source_location.company_id != dest_location.company_id)
) UNION
@@ -153,7 +153,7 @@ class stock_history(osv.osv):
product_product ON product_product.id = stock_move.product_id
LEFT JOIN
product_template ON product_template.id = product_product.product_tmpl_id
- WHERE stock_move.state = 'done' AND source_location.usage in ('internal', 'transit') AND stock_quant_move_rel.quant_id = quant.id
+ WHERE quant.qty>0 AND stock_move.state = 'done' AND source_location.usage in ('internal', 'transit') AND stock_quant_move_rel.quant_id = quant.id
AND stock_quant_move_rel.move_id = stock_move.id AND ((dest_location.company_id is null and source_location.company_id is not null) or
(dest_location.company_id is not null and source_location.company_id is null) or dest_location.company_id != source_location.company_id)
))
diff --git a/addons/web/static/lib/datejs/globalization/bs-BA.js b/addons/web/static/lib/datejs/globalization/bs-BA.js
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/addons/web/static/lib/datejs/globalization/bs-BA.js
diff --git a/addons/web/static/lib/datejs/globalization/kab_DZ.js b/addons/web/static/lib/datejs/globalization/kab_DZ.js
new file mode 100644
index 00000000000..7cc18e666af
--- /dev/null
+++ b/addons/web/static/lib/datejs/globalization/kab_DZ.js
@@ -0,0 +1,194 @@
+Date.CultureInfo = {
+ /* Culture Name */
+ name: "kab",
+ englishName: "Kabyle (Algaria)",
+ nativeName: "Taqbaylit (Ledzayer)",
+
+ /* Day Name Strings */
+ dayNames: ["acer", "arim", "aram", "ahad", "amhad", "sem", "sed"],
+ abbreviatedDayNames: ["ace.", "ari.", "ara.", "aha.", "amh.", "sem.", "sed."],
+ shortestDayNames: ["ac", "ar", "ra", "ah", "am", "sm", "sd"],
+ firstLetterDayNames: ["c", "r", "m", "h", "a", "s", "d"],
+
+ /* Month Name Strings */
+ monthNames: ["yennayer", "furar", "meɣres", "yebrir", "maggu", "yunyu", "yulyu", "ɣuct", "ctember", "tuber", "number", "bujember"],
+ abbreviatedMonthNames: ["yen.", "fur.", "meɣ.", "yeb.", "mag.", "yun.", "yul.", "ɣuc", "cte.", "tub.", "num.", "buj."],
+ /* AM/PM Designators */
+ amDesignator: "",
+ pmDesignator: "",
+
+ firstDayOfWeek: 1,
+ twoDigitYearMax: 2029,
+
+ /**
+ * The dateElementOrder is based on the order of the
+ * format specifiers in the formatPatterns.DatePattern.
+ *
+ * Example:
+ <pre>
+ shortDatePattern dateElementOrder
+ ------------------ ----------------
+ "M/d/yyyy" "mdy"
+ "dd/MM/yyyy" "dmy"
+ "yyyy-MM-dd" "ymd"
+ </pre>
+ *
+ * The correct dateElementOrder is required by the parser to
+ * determine the expected order of the date elements in the
+ * string being parsed.
+ */
+ dateElementOrder: "dmy",
+
+ /* Standard date and time format patterns */
+ formatPatterns: {
+ shortDate: "dd/MM/yyyy",
+ longDate: "dddd d MMMM yyyy",
+ shortTime: "HH:mm",
+ longTime: "HH:mm:ss",
+ fullDateTime: "dddd d MMMM yyyy HH:mm:ss",
+ sortableDateTime: "yyyy-MM-ddTHH:mm:ss",
+ universalSortableDateTime: "yyyy-MM-dd HH:mm:ssZ",
+ rfc1123: "ddd, dd MMM yyyy HH:mm:ss GMT",
+ monthDay: "d MMMM",
+ yearMonth: "MMMM yyyy"
+ },
+
+ /**
+ * NOTE: If a string format is not parsing correctly, but
+ * you would expect it parse, the problem likely lies below.
+ *
+ * The following regex patterns control most of the string matching
+ * within the parser.
+ *
+ * The Month name and Day name patterns were automatically generated
+ * and in general should be (mostly) correct.
+ *
+ * Beyond the month and day name patterns are natural language strings.
+ * Example: "next", "today", "months"
+ *
+ * These natural language string may NOT be correct for this culture.
+ * If they are not correct, please translate and edit this file
+ * providing the correct regular expression pattern.
+ *
+ * If you modify this file, please post your revised CultureInfo file
+ * to the Datejs Forum located at http://www.datejs.com/forums/.
+ *
+ * Please mark the subject of the post with [CultureInfo]. Example:
+ * Subject: [CultureInfo] Translated "da-DK" Danish(Denmark)
+ *
+ * We will add the modified patterns to the master source files.
+ *
+ * As well, please review the list of "Future Strings" section below.
+ */
+ regexPatterns: {
+ jan: /^yenna(.(yer)?)?/i,
+ feb: /^fur(.(ar)?)?/i,
+ mar: /^meɣ(.(res)?)?/i,
+ apr: /^yeb(.(rir)?)?/i,
+ may: /^mag(.(gu)?)?/i,
+ jun: /^yun(.(yu)?)?/i,
+ jul: /^yul(.(yu)?)?/i,
+ aug: /^ɣuct/i,
+ sep: /^ctem(.(ber)?)?/i,
+ oct: /^tu(.(ber)?)?/i,
+ nov: /^num(.(ber)?)?/i,
+ dec: /^bujem(.(ber)?)?/i,
+
+ sun: /^ac(.(er)?)?/i,
+ mon: /^ar(.(im)?)?/i,
+ tue: /^ar(.(am)?)?/i,
+ wed: /^ah(.(ad)?)?/i,
+ thu: /^am(.(had)?)?/i,
+ fri: /^se(.(m)?)?/i,
+ sat: /^se(.(d)?)?/i,
+
+ future: /^next/i,
+ past: /^last|past|prev(ious)?/i,
+ add: /^(\+|aft(er)?|from|hence)/i,
+ subtract: /^(\-|bef(ore)?|ago)/i,
+
+ yesterday: /^yes(terday)?/i,
+ today: /^t(od(ay)?)?/i,
+ tomorrow: /^tom(orrow)?/i,
+ now: /^n(ow)?/i,
+
+ millisecond: /^ms|milli(second)?s?/i,
+ second: /^sec(ond)?s?/i,
+ minute: /^mn|min(ute)?s?/i,
+ hour: /^h(our)?s?/i,
+ week: /^w(eek)?s?/i,
+ month: /^m(onth)?s?/i,
+ day: /^d(ay)?s?/i,
+ year: /^y(ear)?s?/i,
+
+ shortMeridian: /^(a|p)/i,
+ longMeridian: /^(a\.?m?\.?|p\.?m?\.?)/i,
+ timezone: /^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt|utc)/i,
+ ordinalSuffix: /^\s*(st|nd|rd|th)/i,
+ timeContext: /^\s*(\:|a(?!u|p)|p)/i
+ },
+
+ timezones: [{name:"UTC", offset:"-000"}, {name:"GMT", offset:"-000"}, {name:"EST", offset:"-0500"}, {name:"EDT", offset:"-0400"}, {name:"CST", offset:"-0600"}, {name:"CDT", offset:"-0500"}, {name:"MST", offset:"-0700"}, {name:"MDT", offset:"-0600"}, {name:"PST", offset:"-0800"}, {name:"PDT", offset:"-0700"}]
+};
+
+/********************
+ ** Future Strings **
+ ********************
+ *
+ * The following list of strings may not be currently being used, but
+ * may be incorporated into the Datejs library later.
+ *
+ * We would appreciate any help translating the strings below.
+ *
+ * If you modify this file, please post your revised CultureInfo file
+ * to the Datejs Forum located at http://www.datejs.com/forums/.
+ *
+ * Please mark the subject of the post with [CultureInfo]. Example:
+ * Subject: [CultureInfo] Translated "da-DK" Danish(Denmark)b
+ *
+ * English Name Translated
+ * ------------------ -----------------
+ * about about
+ * ago ago
+ * date date
+ * time time
+ * calendar calendar
+ * show show
+ * hourly hourly
+ * daily daily
+ * weekly weekly
+ * bi-weekly bi-weekly
+ * fortnight fortnight
+ * monthly monthly
+ * bi-monthly bi-monthly
+ * quarter quarter
+ * quarterly quarterly
+ * yearly yearly
+ * annual annual
+ * annually annually
+ * annum annum
+ * again again
+ * between between
+ * after after
+ * from now from now
+ * repeat repeat
+ * times times
+ * per per
+ * min (abbrev minute) min
+ * morning morning
+ * noon noon
+ * night night
+ * midnight midnight
+ * mid-night mid-night
+ * evening evening
+ * final final
+ * future future
+ * spring spring
+ * summer summer
+ * fall fall
+ * winter winter
+ * end of end of
+ * end end
+ * long long
+ * short short
+ */
diff --git a/addons/web/static/lib/datejs/globalization/lo-LA.js b/addons/web/static/lib/datejs/globalization/lo-LA.js
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/addons/web/static/lib/datejs/globalization/lo-LA.js
diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js
index 8eabafb5f2d..c2f65985222 100644
--- a/addons/web/static/src/js/chrome.js
+++ b/addons/web/static/src/js/chrome.js
@@ -1165,7 +1165,7 @@ instance.web.UserMenu = instance.web.Widget.extend({
instance.web.redirect('https://accounts.odoo.com/oauth2/auth?'+$.param(params));
}).fail(function(result, ev){
ev.preventDefault();
- instance.web.redirect('https://accounts.odoo.com/web');
+ instance.web.redirect('https://accounts.odoo.com/account');
});
}
},
diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js
index 4af14090056..40b4410871f 100644
--- a/addons/web/static/src/js/search.js
+++ b/addons/web/static/src/js/search.js
@@ -2060,6 +2060,10 @@ instance.web.search.ExtendedSearchProposition.Float = instance.web.search.Extend
{value: "∃", text: _lt("is set")},
{value: "∄", text: _lt("is not set")}
],
+ init: function (parent) {
+ this._super(parent);
+ this.decimal_point = instance.web._t.database.parameters.decimal_point;
+ },
toString: function () {
return this.$el.val();
},
diff --git a/addons/web/static/src/js/tour.js b/addons/web/static/src/js/tour.js
index 3fc2536581d..f152506fcf1 100644
--- a/addons/web/static/src/js/tour.js
+++ b/addons/web/static/src/js/tour.js
@@ -68,6 +68,7 @@ var localStorage = window.localStorage;
var Tour = {
tours: {},
defaultDelay: 50,
+ autoRunning: true,
retryRunningDelay: 1000,
errorDelay: 5000,
state: null,
@@ -369,6 +370,7 @@ var Tour = {
},
logError: function (step, message, all) {
var state = Tour.getState();
+ console.log(state.tour.steps.slice());
message += '\ntour: ' + state.id
+ (step ? '\nstep: ' + step.id + ": '" + (step._title || step.title) + "'" : '' )
+ (all ? '\nhref: ' + window.location.href : '' )
@@ -690,6 +692,10 @@ openerp.Tour = Tour;
/////////////////////////////////////////////////
-$(document).ready(Tour.running);
+$(document).ready(function () {
+ if (Tour.autoRunning) {
+ Tour.running();
+ };
+});
}());
diff --git a/addons/web/static/src/js/view_graph.js b/addons/web/static/src/js/view_graph.js
index 13361c6bab1..d5c6bbad69a 100644
--- a/addons/web/static/src/js/view_graph.js
+++ b/addons/web/static/src/js/view_graph.js
@@ -283,6 +283,7 @@ instance.web.GraphWidget = instance.web.Widget.extend({
// rotateLabels: 40,
showControls: (this.groupbys.length > 1)
});
+ chart.yAxis.tickFormat(function(d) { return openerp.web.format_value(d, { type : 'float' });});
chart(svg);
this.to_remove = chart.update;
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 9caf15e3b7c..379b28597ef 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -1777,7 +1777,11 @@
<input type="number" class="field_integer form-control" value = "0" step="1"/>
</t>
<t t-name="SearchView.extended_search.proposition.float">
- <input type="number" class="field_float form-control" value = "0.0" step="0.01"/>
+ <input class="field_float form-control"
+ t-att-type="widget.decimal_point === '.' ? 'number' : 'text'"
+ t-attf-title="Number using #{widget.decimal_point || '.' } as decimal separator."
+ t-attf-pattern="[0-9]+([\\#{widget.decimal_point || '.' }][0-9]+)?"
+ t-attf-value="0#{widget.decimal_point || '.' }0" step="0.01"/>
</t>
<t t-name="SearchView.extended_search.proposition.selection">
<select class="form-control">
diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py
index bc6b5200853..e063eb39d87 100644
--- a/addons/website/models/ir_http.py
+++ b/addons/website/models/ir_http.py
@@ -55,6 +55,17 @@ class ir_http(orm.AbstractModel):
except UnicodeDecodeError:
return any(bot in ua.encode('ascii', 'ignore') for bot in self.bots)
+ def get_nearest_lang(self, lang):
+ # Try to find a similar lang. Eg: fr_BE and fr_FR
+ if lang in request.website.get_languages():
+ return lang
+
+ short = lang.split('_')[0]
+ for code, name in request.website.get_languages():
+ if code.startswith(short):
+ return code
+ return False
+
def _dispatch(self):
first_pass = not hasattr(request, 'website')
request.website = None
@@ -109,50 +120,42 @@ class ir_http(orm.AbstractModel):
request.context['website_id'] = request.website.id
langs = [lg[0] for lg in request.website.get_languages()]
path = request.httprequest.path.split('/')
-
if first_pass:
- if request.website_multilang:
- is_a_bot = self.is_a_bot()
- # If the url doesn't contains the lang and that it's the first connection, we to retreive the user preference if it exists.
- if not path[1] in langs and not is_a_bot:
- request.lang = cook_lang or request.lang
- if request.lang not in langs:
- # Try to find a similar lang. Eg: fr_BE and fr_FR
- short = request.lang.split('_')[0]
- langs_withshort = [lg[0] for lg in request.website.get_languages() if lg[0].startswith(short)]
- if len(langs_withshort):
- request.lang = langs_withshort[0]
- else:
- request.lang = request.website.default_lang_code
- else:
- request.lang = request.website.default_lang_code
-
+ nearest_lang = not func and self.get_nearest_lang(path[1])
+ url_lang = nearest_lang and path[1]
+ preferred_lang = ((cook_lang if cook_lang in langs else False)
+ or self.get_nearest_lang(request.lang)
+ or request.website.default_lang_code)
+
+ is_a_bot = self.is_a_bot()
+
+ request.lang = request.context['lang'] = nearest_lang or preferred_lang
+ # if lang in url but not the displayed or default language --> change or remove
+ # or no lang in url, and lang to dispay not the default language --> add lang
+ # and not a POST request
+ # and not a bot or bot but default lang in url
+ if ((url_lang and (url_lang != request.lang or url_lang == request.website.default_lang_code))
+ or (not url_lang and request.website_multilang and request.lang != request.website.default_lang_code)
+ and request.httprequest.method != 'POST') \
+ and (not is_a_bot or (url_lang and url_lang == request.website.default_lang_code)):
+ if url_lang:
+ path.pop(1)
if request.lang != request.website.default_lang_code:
path.insert(1, request.lang)
- path = '/'.join(path) or '/'
- redirect = request.redirect(path + '?' + request.httprequest.query_string)
- redirect.set_cookie('website_lang', request.lang)
- return redirect
+ path = '/'.join(path) or '/'
+ redirect = request.redirect(path + '?' + request.httprequest.query_string)
+ redirect.set_cookie('website_lang', request.lang)
+ return redirect
+ elif url_lang:
+ path.pop(1)
+ return self.reroute('/'.join(path) or '/')
- request.context['lang'] = request.lang
if not request.context.get('tz'):
request.context['tz'] = request.session['geoip'].get('time_zone')
- if not func:
- if path[1] in langs:
- request.lang = request.context['lang'] = path.pop(1)
- path = '/'.join(path) or '/'
- if request.lang == request.website.default_lang_code:
- # If language is in the url and it is the default language, redirect
- # to url without language so google doesn't see duplicate content
- resp = request.redirect(path + '?' + request.httprequest.query_string, code=301)
- if cook_lang != request.lang: # If default lang setted in url directly
- resp.set_cookie('website_lang', request.lang)
- return resp
- return self.reroute(path)
# bind modified context
request.website = request.website.with_context(request.context)
resp = super(ir_http, self)._dispatch()
- if not cook_lang:
+ if request.website_enabled and cook_lang != request.lang and hasattr(resp, 'set_cookie'):
resp.set_cookie('website_lang', request.lang)
return resp
diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js
index 21dfc9c61d3..12dceabac8f 100644
--- a/addons/website/static/src/js/website.editor.js
+++ b/addons/website/static/src/js/website.editor.js
@@ -1425,6 +1425,12 @@ define(['summernote/summernote'], function () {
close: function () {
this.$el.modal('hide');
},
+ destroy: function () {
+ this.$el.modal('hide').remove();
+ if($(".modal.in").length>0){
+ $('body').addClass('modal-open');
+ }
+ },
});
website.editor.LinkDialog = website.editor.Dialog.extend({
diff --git a/addons/website/static/src/js/website.js b/addons/website/static/src/js/website.js
index a4fc30890a7..3869986e48a 100644
--- a/addons/website/static/src/js/website.js
+++ b/addons/website/static/src/js/website.js
@@ -395,5 +395,10 @@
$('[data-target="#oe_applications"]').attr("data-target", "#oe_applications_collapse");
});
+ openerp.Tour.autoRunning = false;
+ website.ready().then(function () {
+ setTimeout(openerp.Tour.running,0);
+ });
+
return website;
})();
diff --git a/addons/website_blog/views/website_blog_views.xml b/addons/website_blog/views/website_blog_views.xml
index 96e14add75c..d65f5bfc27d 100644
--- a/addons/website_blog/views/website_blog_views.xml
+++ b/addons/website_blog/views/website_blog_views.xml
@@ -65,7 +65,6 @@
<field name="subtitle" placeholder="Blog Subtitle"/>
</group>
<group>
- <field name="background_image"/>
<field name="blog_id"/>
</group>
<group>
diff --git a/doc/business.rst b/doc/business.rst
index def762578f6..02a955c2efe 100644
--- a/doc/business.rst
+++ b/doc/business.rst
@@ -5,3 +5,5 @@ Business Mementoes
.. toctree::
Accounting Memento (US GAAP) <https://odoo.com/documentation/functional/accounting.html>
+ Double-Entry Inventory <https://www.odoo.com/documentation/functional/double-entry.html>
+ Inventory Valuations <https://www.odoo.com/documentation/functional/valuation.html>
diff --git a/doc/cla/corporate/iris-solutions.md b/doc/cla/corporate/iris-solutions.md
new file mode 100644
index 00000000000..971712bf53e
--- /dev/null
+++ b/doc/cla/corporate/iris-solutions.md
@@ -0,0 +1,13 @@
+France, 2015-04-18
+
+Iris-solutions agrees to the terms of the Odoo Corporate Contributor License Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this declaration.
+
+Signed,
+
+Alexandre Laidin alexandre.laidin@iris-solutions.fr https://github.com/iris-solutions
+
+List of contributors:
+
+Alexandre Laidin alexandre.laidin@iris-solutions.fr https://github.com/alaidin
diff --git a/doc/cla/corporate/makinacorpus.md b/doc/cla/corporate/makinacorpus.md
new file mode 100644
index 00000000000..3f1eb843196
--- /dev/null
+++ b/doc/cla/corporate/makinacorpus.md
@@ -0,0 +1,16 @@
+France, 2015-03-20
+
+Makina Corpus agrees to the terms of the Odoo Corporate Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Mathieu Le Marec - Pasquet, mpa@makina-corpus.com, https://github.com/kiorky
+
+List of contributors:
+
+Mathieu Le Marec - Pasquet, mpa@makina-corpus.com, https://github.com/kiorky
+Makina Corpus, sysadmin@makina-corpus.com, http://www.makina-corpus.com
diff --git a/doc/cla/corporate/teclib.md b/doc/cla/corporate/teclib.md
new file mode 100644
index 00000000000..a35c0a3277d
--- /dev/null
+++ b/doc/cla/corporate/teclib.md
@@ -0,0 +1,13 @@
+France, 2015-04-14
+
+TecLib agrees to the terms of the Odoo Corporate Contributor License Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this declaration.
+
+Signed,
+
+Laurent Destailleur ldestailleur@teclib.com https://github.com/eldy
+
+List of contributors:
+
+Laurent Destailleur ldestailleur@teclib.com https://github.com/eldy
diff --git a/doc/cla/individual/belkacem77.md b/doc/cla/individual/belkacem77.md
new file mode 100644
index 00000000000..aa293693913
--- /dev/null
+++ b/doc/cla/individual/belkacem77.md
@@ -0,0 +1,11 @@
+Algeria, 04 April 2015
+
+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,
+
+Belkacem Mohammed belkacem77@gmail.com https://github.com/belkacem77
diff --git a/doc/cla/individual/kiorky.md b/doc/cla/individual/kiorky.md
new file mode 100644
index 00000000000..6cbf661efcf
--- /dev/null
+++ b/doc/cla/individual/kiorky.md
@@ -0,0 +1,11 @@
+France, 2015-03-20
+
+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,
+
+Mathieu Le Marec - Pasquet, kiorky@cryptelium.net, https://github.com/kiorky
diff --git a/doc/cla/individual/nedaszilinskas.md b/doc/cla/individual/nedaszilinskas.md
new file mode 100644
index 00000000000..3a980687556
--- /dev/null
+++ b/doc/cla/individual/nedaszilinskas.md
@@ -0,0 +1,11 @@
+Lithuania, 2015-04-18
+
+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,
+
+Nedas Žilinskas nedas.zilinskas@gmail.com https://github.com/nedaszilinskas \ No newline at end of file
diff --git a/doc/cla/sign-cla.md b/doc/cla/sign-cla.md
index 3eb4bd9a66a..dab6b3061b9 100644
--- a/doc/cla/sign-cla.md
+++ b/doc/cla/sign-cla.md
@@ -42,7 +42,7 @@ signature is merged.
## If you work for a company
-1. Read the [Corporate Contributor License Agreement](icla-1.0.md)
+1. Read the [Corporate Contributor License Agreement](ccla-1.0.md)
2. Modify your current pull request, or make a new pull request on
[odoo/odoo](/odoo/odoo), adding a new file `<lowercase-company-name>.md`
diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py
index 4ba541a2901..425e171e7c1 100644
--- a/openerp/addons/base/ir/ir_qweb.py
+++ b/openerp/addons/base/ir/ir_qweb.py
@@ -873,9 +873,9 @@ class MonetaryConverter(osv.AbstractModel):
pre = post = u''
if display_currency.position == 'before':
- pre = u'{symbol} '
+ pre = u'{symbol}\N{NO-BREAK SPACE}'
else:
- post = u' {symbol}'
+ post = u'\N{NO-BREAK SPACE}{symbol}'
return HTMLSafe(u'{pre}<span class="oe_currency_value">{0}</span>{post}'.format(
formatted_amount,
@@ -1034,9 +1034,9 @@ class QwebWidgetMonetary(osv.AbstractModel):
)
pre = post = u''
if display.position == 'before':
- pre = u'{symbol} '
+ pre = u'{symbol}\N{NO-BREAK SPACE}'
else:
- post = u' {symbol}'
+ post = u'\N{NO-BREAK SPACE}{symbol}'
return u'{pre}{0}{post}'.format(
formatted_amount, pre=pre, post=post
diff --git a/openerp/addons/base/res/ir_property.py b/openerp/addons/base/res/ir_property.py
index 116fc9b4876..7903b0d2cfb 100644
--- a/openerp/addons/base/res/ir_property.py
+++ b/openerp/addons/base/res/ir_property.py
@@ -260,12 +260,19 @@ class ir_property(osv.osv):
@api.model
def search_multi(self, name, model, operator, value):
""" Return a domain for the records that match the given condition. """
+ default_matches = False
+
field = self.env[model]._fields[name]
if field.type == 'many2one':
comodel = field.comodel_name
def makeref(value):
return value and '%s,%s' % (comodel, value)
- if operator in ('=', '!=', '<=', '<', '>', '>='):
+ if operator == "=":
+ value = makeref(value)
+ # if searching properties not set, search those not in those set
+ if value is False:
+ default_matches = True
+ elif operator in ('!=', '<=', '<', '>', '>='):
value = makeref(value)
elif operator in ('in', 'not in'):
value = map(makeref, value)
@@ -284,7 +291,6 @@ class ir_property(osv.osv):
# retrieve the records corresponding to the properties that match
good_ids = []
- default_matches = False
for prop in props:
if prop.res_id:
res_model, res_id = prop.res_id.split(',')
diff --git a/openerp/addons/test_converter/tests/test_html.py b/openerp/addons/test_converter/tests/test_html.py
index aef7badfe3a..2f50602c115 100644
--- a/openerp/addons/test_converter/tests/test_html.py
+++ b/openerp/addons/test_converter/tests/test_html.py
@@ -130,10 +130,10 @@ class TestCurrencyExport(TestExport):
'data-oe-field="value" data-oe-type="monetary" '
'data-oe-expression="obj.value">'
'<span class="oe_currency_value">0.12</span>'
- ' {symbol}</span>'.format(
+ u'\N{NO-BREAK SPACE}{symbol}</span>'.format(
obj=obj,
symbol=currency.symbol.encode('utf-8')
- ),)
+ ).encode('utf-8'),)
def test_currency_pre(self):
currency = self.create(
@@ -147,12 +147,12 @@ class TestCurrencyExport(TestExport):
'<span data-oe-model="{obj._model._name}" data-oe-id="{obj.id}" '
'data-oe-field="value" data-oe-type="monetary" '
'data-oe-expression="obj.value">'
- '{symbol} '
+ u'{symbol}\N{NO-BREAK SPACE}'
'<span class="oe_currency_value">0.12</span>'
'</span>'.format(
obj=obj,
symbol=currency.symbol.encode('utf-8')
- ),)
+ ).encode('utf-8'),)
def test_currency_precision(self):
""" Precision should be the currency's, not the float field's
@@ -168,10 +168,10 @@ class TestCurrencyExport(TestExport):
'data-oe-field="value" data-oe-type="monetary" '
'data-oe-expression="obj.value">'
'<span class="oe_currency_value">0.12</span>'
- ' {symbol}</span>'.format(
+ u'\N{NO-BREAK SPACE}{symbol}</span>'.format(
obj=obj,
symbol=currency.symbol.encode('utf-8')
- ),)
+ ).encode('utf-8'),)
class TestTextExport(TestBasicExport):
def test_text(self):
diff --git a/openerp/api.py b/openerp/api.py
index 1c1287653fa..62a5ab08f93 100644
--- a/openerp/api.py
+++ b/openerp/api.py
@@ -68,7 +68,7 @@ from pprint import pformat
from weakref import WeakSet
from werkzeug.local import Local, release_local
-from openerp.tools import frozendict
+from openerp.tools import frozendict, classproperty
_logger = logging.getLogger(__name__)
@@ -674,6 +674,10 @@ class Environment(object):
"""
_local = Local()
+ @classproperty
+ def envs(cls):
+ return cls._local.environments
+
@classmethod
@contextmanager
def manage(cls):
@@ -699,7 +703,7 @@ class Environment(object):
args = (cr, uid, context)
# if env already exists, return it
- env, envs = None, cls._local.environments
+ env, envs = None, cls.envs
for env in envs:
if env.args == args:
return env
diff --git a/openerp/fields.py b/openerp/fields.py
index ad8b6e8ec3d..e808d1089ae 100644
--- a/openerp/fields.py
+++ b/openerp/fields.py
@@ -1054,8 +1054,10 @@ class Float(Field):
@property
def digits(self):
if callable(self._digits):
- with registry().cursor() as cr:
- return self._digits(cr)
+ # retrieve a cursor from any environment
+ from openerp.api import Environment
+ cr = next(iter(Environment.envs)).cr
+ return self._digits(cr)
else:
return self._digits
diff --git a/openerp/models.py b/openerp/models.py
index 68bdb670e0d..298725a247d 100644
--- a/openerp/models.py
+++ b/openerp/models.py
@@ -1087,6 +1087,13 @@ class BaseModel(object):
ids = False
return {'ids': ids, 'messages': messages}
+ def _add_fake_fields(self, cr, uid, fields, context=None):
+ from openerp.fields import Char, Integer
+ fields[None] = Char('rec_name')
+ fields['id'] = Char('External ID')
+ fields['.id'] = Integer('Database ID')
+ return fields
+
def _extract_records(self, cr, uid, fields_, data,
context=None, log=lambda a: None):
""" Generates record dicts from the data sequence.
@@ -1102,13 +1109,9 @@ class BaseModel(object):
* "id" is the External ID for the record
* ".id" is the Database ID for the record
"""
- from openerp.fields import Char, Integer
fields = dict(self._fields)
# Fake fields to avoid special cases in extractor
- fields[None] = Char('rec_name')
- fields['id'] = Char('External ID')
- fields['.id'] = Integer('Database ID')
-
+ fields = self._add_fake_fields(cr, uid, fields, context=context)
# m2o fields can't be on multiple lines so exclude them from the
# is_relational field rows filter, but special-case it later on to
# be handled with relational fields (as it can have subfields)
@@ -2427,6 +2430,11 @@ class BaseModel(object):
# has not been added in database yet!
context = dict(context or {}, prefetch_fields=False)
+ # Make sure an environment is available for get_pg_type(). This is
+ # because we access column.digits, which retrieves a cursor from
+ # existing environments.
+ env = api.Environment(cr, SUPERUSER_ID, context)
+
store_compute = False
stored_fields = [] # new-style stored fields with compute
todo_end = []
diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py
index 9ad289cde1b..31c5d39bd9d 100644
--- a/openerp/osv/fields.py
+++ b/openerp/osv/fields.py
@@ -388,8 +388,10 @@ class float(_column):
@property
def digits(self):
if self._digits_compute:
- with registry().cursor() as cr:
- return self._digits_compute(cr)
+ # retrieve a cursor from any environment
+ from openerp.api import Environment
+ cr = next(iter(Environment.envs)).cr
+ return self._digits_compute(cr)
else:
return self._digits
@@ -1309,8 +1311,10 @@ class function(_column):
@property
def digits(self):
if self._digits_compute:
- with registry().cursor() as cr:
- return self._digits_compute(cr)
+ # retrieve a cursor from any environment
+ from openerp.api import Environment
+ cr = next(iter(Environment.envs)).cr
+ return self._digits_compute(cr)
else:
return self._digits
diff --git a/openerp/report/report_sxw.py b/openerp/report/report_sxw.py
index 7448fdddf46..d4123eedbf7 100644
--- a/openerp/report/report_sxw.py
+++ b/openerp/report/report_sxw.py
@@ -247,9 +247,9 @@ class rml_parse(object):
res = self.lang_dict['lang_obj'].format('%.' + str(digits) + 'f', value, grouping=grouping, monetary=monetary)
if currency_obj:
if currency_obj.position == 'after':
- res='%s %s'%(res,currency_obj.symbol)
+ res = u'%s\N{NO-BREAK SPACE}%s' % (res, currency_obj.symbol)
elif currency_obj and currency_obj.position == 'before':
- res='%s %s'%(currency_obj.symbol, res)
+ res = u'%s\N{NO-BREAK SPACE}%s' % (currency_obj.symbol, res)
return res
def display_address(self, address_record, without_company=False):
diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py
index 16e552fc681..20be03caf18 100644
--- a/openerp/tools/misc.py
+++ b/openerp/tools/misc.py
@@ -523,6 +523,7 @@ ALL_LANGUAGES = {
'it_IT': u'Italian / Italiano',
'iu_CA': u'Inuktitut / ᐃᓄᒃᑎᑐᑦ',
'ja_JP': u'Japanese / 日本語',
+ 'kab_DZ': u'Kabyle / Taqbaylit',
'ko_KP': u'Korean (KP) / 한국어 (KP)',
'ko_KR': u'Korean (KR) / 한국어 (KR)',
'lo_LA': u'Lao / ພາສາລາວ',