diff --git a/addons/account_analytic_default/models/account_analytic_default.py b/addons/account_analytic_default/models/account_analytic_default.py index 5f07ae08878..85ec2199f0f 100644 --- a/addons/account_analytic_default/models/account_analytic_default.py +++ b/addons/account_analytic_default/models/account_analytic_default.py @@ -63,3 +63,9 @@ class AccountInvoiceLine(models.Model): fields.Date.today(), company_id=self.company_id.id) self.account_analytic_id = rec.analytic_id.id return res + + def _set_additional_fields(self, invoice): + rec = self.env['account.analytic.default'].account_get(self.product_id.id, self.invoice_id.partner_id.id, self.env.uid, + fields.Date.today(), company_id=self.company_id.id) + self.account_analytic_id = rec.analytic_id.id + super(AccountInvoiceLine, self)._set_additional_fields(invoice) diff --git a/addons/hr/views/hr_views.xml b/addons/hr/views/hr_views.xml index 670070abe76..fe856d2961e 100644 --- a/addons/hr/views/hr_views.xml +++ b/addons/hr/views/hr_views.xml @@ -37,8 +37,8 @@
-
-
diff --git a/addons/membership/models/account_invoice.py b/addons/membership/models/account_invoice.py index a0e7f77da00..273dd4290ba 100644 --- a/addons/membership/models/account_invoice.py +++ b/addons/membership/models/account_invoice.py @@ -7,6 +7,13 @@ from odoo import api, fields, models class Invoice(models.Model): _inherit = 'account.invoice' + @api.multi + def action_cancel_draft(self): + self.env['membership.membership_line'].search([ + ('account_invoice_line', 'in', self.mapped('invoice_line_ids').ids) + ]).write({'date_cancel': False}) + return super(Invoice, self).action_cancel_draft() + @api.multi def action_cancel(self): '''Create a 'date_cancel' on the membership_line object''' diff --git a/addons/purchase/models/account_invoice.py b/addons/purchase/models/account_invoice.py index dd351d2d564..d8821da079b 100644 --- a/addons/purchase/models/account_invoice.py +++ b/addons/purchase/models/account_invoice.py @@ -156,6 +156,7 @@ class AccountInvoice(models.Model): valuation_price_unit_total += val_stock_move.price_unit * val_stock_move.product_qty valuation_total_qty += val_stock_move.product_qty valuation_price_unit = valuation_price_unit_total / valuation_total_qty + valuation_price_unit = i_line.product_id.uom_id._compute_price(valuation_price_unit, i_line.uom_id) if inv.currency_id.id != company_currency.id: valuation_price_unit = company_currency.with_context(date=inv.date_invoice).compute(valuation_price_unit, inv.currency_id) if valuation_price_unit != i_line.price_unit and line['price_unit'] == i_line.price_unit and acc: diff --git a/addons/web/static/src/js/framework/formats.js b/addons/web/static/src/js/framework/formats.js index 7a47d7076c4..d084b285f6c 100644 --- a/addons/web/static/src/js/framework/formats.js +++ b/addons/web/static/src/js/framework/formats.js @@ -164,16 +164,24 @@ function parse_value (value, descriptor, value_if_empty) { if (datetime.isValid()) return time.datetime_to_str(datetime.toDate()); datetime = moment(value, [date_pattern + ' ' + time_pattern, date_pattern_wo_zero + ' ' + time_pattern_wo_zero, moment.ISO_8601]); - if (datetime.isValid()) + if (datetime.isValid()) { + if (datetime.year() === 0) { + datetime.year(moment.utc().year()); + } return time.datetime_to_str(datetime.toDate()); + } throw new Error(_.str.sprintf(_t("'%s' is not a correct datetime"), value)); case 'date': var date = moment(value, [date_pattern, date_pattern_wo_zero, moment.ISO_8601], true); if (date.isValid()) return time.date_to_str(date.toDate()); date = moment(value, [date_pattern, date_pattern_wo_zero, moment.ISO_8601]); - if (date.isValid()) + if (date.isValid()) { + if (date.year() === 0) { + date.year(moment.utc().year()); + } return time.date_to_str(date.toDate()); + } throw new Error(_.str.sprintf(_t("'%s' is not a correct date"), value)); case 'time': var _time = moment(value, [time_pattern, time_pattern_wo_zero, moment.ISO_8601], true); diff --git a/addons/web/static/src/js/framework/translation.js b/addons/web/static/src/js/framework/translation.js index e02553ad203..f2bad0db4ee 100644 --- a/addons/web/static/src/js/framework/translation.js +++ b/addons/web/static/src/js/framework/translation.js @@ -28,9 +28,7 @@ var TranslationDataBase = Class.extend(/** @lends instance.TranslationDataBase# }); if (translation_bundle.lang_parameters) { this.parameters = translation_bundle.lang_parameters; - if (typeof(py) !== "undefined") { - this.parameters.grouping = py.eval(this.parameters.grouping); - } + this.parameters.grouping = JSON.parse(this.parameters.grouping); } }, add_module_translation: function(mod) { diff --git a/addons/website/models/res_config.py b/addons/website/models/res_config.py index 7115be51986..22114e0c49d 100644 --- a/addons/website/models/res_config.py +++ b/addons/website/models/res_config.py @@ -16,7 +16,7 @@ class WebsiteConfigSettings(models.TransientModel): website_name = fields.Char('Website Name', related='website_id.name') language_ids = fields.Many2many(related='website_id.language_ids', relation='res.lang') - default_lang_id = fields.Many2one(related='website_id.default_lang_id', relation='res.lang') + default_lang_id = fields.Many2one(related='website_id.default_lang_id', relation='res.lang', required=True) default_lang_code = fields.Char('Default language code', related='website_id.default_lang_code') google_analytics_key = fields.Char('Google Analytics Key', related='website_id.google_analytics_key') diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 0c71c0f48b2..8739ba2fa07 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -164,7 +164,7 @@ class Website(models.Model): domain = fields.Char('Website Domain') company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.ref('base.main_company').id) language_ids = fields.Many2many('res.lang', 'website_lang_rel', 'website_id', 'lang_id', 'Languages', default=_active_languages) - default_lang_id = fields.Many2one('res.lang', string="Default Language", default=_default_language) + default_lang_id = fields.Many2one('res.lang', string="Default Language", default=_default_language, required=True) default_lang_code = fields.Char(related='default_lang_id.code', string="Default language code", store=True) social_twitter = fields.Char('Twitter Account') diff --git a/addons/website_hr/views/hr_employee_views.xml b/addons/website_hr/views/hr_employee_views.xml index 258a611d6cf..8f32d0eb30b 100644 --- a/addons/website_hr/views/hr_employee_views.xml +++ b/addons/website_hr/views/hr_employee_views.xml @@ -8,7 +8,7 @@
diff --git a/addons/website_portal/views/website_portal_templates.xml b/addons/website_portal/views/website_portal_templates.xml index ca312b6814a..db8eb3653a1 100644 --- a/addons/website_portal/views/website_portal_templates.xml +++ b/addons/website_portal/views/website_portal_templates.xml @@ -119,11 +119,11 @@
- +
- +
diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index 6f9f495499c..cd83abef9bd 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -49,6 +49,7 @@ odoo.define('website_sale.cart', function (require) { odoo.define('website_sale.website_sale_category', function (require) { "use strict"; + var utils = require('web.utils'); var base = require('web_editor.base'); if(!$('#o_shop_collapse_category').length) { @@ -226,9 +227,15 @@ odoo.define('website_sale.website_sale', function (require) { }); function price_to_str(price) { - price = Math.round(price * 100) / 100; - var dec = Math.round((price % 1) * 100); - return price + (dec ? '' : '.0') + (dec%10 ? '' : '0'); + var l10n = _t.database.parameters; + var precision = 2; + + if ($(".decimal_precision").length) { + precision = parseInt($(".decimal_precision").first().data('precision')); + } + var formatted = _.str.sprintf('%.' + precision + 'f', price).split('.'); + formatted[0] = utils.insert_thousand_seps(formatted[0]); + return formatted.join(l10n.decimal_point); } function update_product_image(event_source, product_id) { diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 0fb10cb16ee..f2883596a9e 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -589,7 +589,7 @@ -

+