diff options
| author | Christophe Simonis <chs@odoo.com> | 2015-05-05 18:48:34 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2015-05-05 18:48:34 +0200 |
| commit | 22604968793a7cc12c8fcf89411ba5b79c0642b3 (patch) | |
| tree | 7332814024d0a8f872e726b4f907020cc3a6a341 | |
| parent | 28b5d0da0d05b2f4cd68ffbd39288f9f01c8f57f (diff) | |
| parent | a939a272efa7cdd047e79a0a6da361e94ca93d4f (diff) | |
[MERGE] forward port of branch 8.0 up to a939a27
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 / ພາສາລາວ', |
