diff --git a/addons/mrp/models/stock_move.py b/addons/mrp/models/stock_move.py index 0c6f50cfc52..982995a9e1f 100644 --- a/addons/mrp/models/stock_move.py +++ b/addons/mrp/models/stock_move.py @@ -117,7 +117,7 @@ class StockMove(models.Model): @api.depends('move_lot_ids', 'move_lot_ids.quantity_done', 'quantity_done_store') def _qty_done_compute(self): for move in self: - if move.has_tracking != 'none': + if move.has_tracking != 'none' or move.sudo().move_lot_ids.mapped('lot_id'): move.quantity_done = sum(move.move_lot_ids.filtered(lambda x: x.done_wo).mapped('quantity_done')) #TODO: change with active_move_lot_ids? else: move.quantity_done = move.quantity_done_store diff --git a/addons/pos_sale/models/crm_team.py b/addons/pos_sale/models/crm_team.py index 54eed6c160b..341e275a791 100644 --- a/addons/pos_sale/models/crm_team.py +++ b/addons/pos_sale/models/crm_team.py @@ -3,6 +3,7 @@ from odoo import api, fields, models, _ from datetime import datetime +import pytz class CrmTeam(models.Model): @@ -41,13 +42,16 @@ class CrmTeam(models.Model): """ If the type of the sales team is point of sale ('pos'), the graph will display the sales data. The override here is to get data from pos.order instead of sale.order. """ + offset = datetime.now(pytz.timezone(self.env.user.tz or 'UTC')).utcoffset() + min_date = fields.Datetime.to_string(datetime.combine(start_date, datetime.min.time()) - offset) + max_date = fields.Datetime.to_string(datetime.combine(end_date, datetime.max.time()) - offset) if self.team_type == 'pos': result = [] if self.dashboard_graph_group_pos == 'pos': order_data = self.env['report.pos.order'].read_group( domain=[ - ('date', '>=', fields.Date.to_string(start_date)), - ('date', '<=', fields.Datetime.to_string(datetime.combine(end_date, datetime.max.time()))), + ('date', '>=', min_date), + ('date', '<=', max_date), ('config_id', 'in', self.pos_config_ids.ids), ('state', 'in', ['paid', 'done', 'invoiced'])], fields=['config_id', 'price_total'], @@ -63,8 +67,8 @@ class CrmTeam(models.Model): elif self.dashboard_graph_group_pos == 'user': order_data = self.env['report.pos.order'].read_group( domain=[ - ('date', '>=', fields.Date.to_string(start_date)), - ('date', '<=', fields.Datetime.to_string(datetime.combine(end_date, datetime.max.time()))), + ('date', '>=', min_date), + ('date', '<=', max_date), ('config_id', 'in', self.pos_config_ids.ids), ('state', 'in', ['paid', 'done', 'invoiced'])], fields=['user_id', 'price_total'], @@ -78,8 +82,8 @@ class CrmTeam(models.Model): # /!\ do not use en_US as it's not ISO-standard and does not match datetime's library order_data = self.env['report.pos.order'].with_context(lang='en_GB').read_group( domain=[ - ('date', '>=', fields.Date.to_string(start_date)), - ('date', '<=', fields.Datetime.to_string(datetime.combine(end_date, datetime.max.time()))), + ('date', '>=', min_date), + ('date', '<=', max_date), ('config_id', 'in', self.pos_config_ids.ids), ('state', 'in', ['paid', 'done', 'invoiced'])], fields=['date', 'price_total'], diff --git a/addons/project/__manifest__.py b/addons/project/__manifest__.py index 1b8088578a7..f13f9ef7a6e 100644 --- a/addons/project/__manifest__.py +++ b/addons/project/__manifest__.py @@ -36,7 +36,6 @@ Dashboard / Reports for Project Management will include: 'data': [ 'security/project_security.xml', 'security/ir.model.access.csv', - 'data/project_data.xml', 'report/project_report_views.xml', 'views/project_views.xml', 'views/res_partner_views.xml', @@ -46,6 +45,7 @@ Dashboard / Reports for Project Management will include: 'data/web_planner_data.xml', 'data/project_mail_template_data.xml', 'wizard/project_task_merge_wizard_views.xml', + 'data/project_data.xml', ], 'qweb': ['static/src/xml/project.xml'], 'demo': ['data/project_demo.xml'], diff --git a/addons/sales_team/models/crm_team.py b/addons/sales_team/models/crm_team.py index 691da68a6f3..a74205dfa7a 100644 --- a/addons/sales_team/models/crm_team.py +++ b/addons/sales_team/models/crm_team.py @@ -177,7 +177,7 @@ class CrmTeam(models.Model): self.ensure_one() values = [] - today = date.today() + today = fields.Date.from_string(fields.Date.context_today(self)) start_date, end_date = self._graph_get_dates(today) graph_data = self._graph_data(start_date, end_date) diff --git a/odoo/addons/base/ir/ir_ui_view.py b/odoo/addons/base/ir/ir_ui_view.py index 1d6dba6224e..133aecec2e1 100644 --- a/odoo/addons/base/ir/ir_ui_view.py +++ b/odoo/addons/base/ir/ir_ui_view.py @@ -405,6 +405,12 @@ actual arch. self.clear_caches() return super(View, self).write(self._compute_defaults(vals)) + def unlink(self): + # if in uninstall mode and has children views, emulate an ondelete cascade + if self.env.context.get('_force_unlink', False) and self.mapped('inherit_children_ids'): + self.mapped('inherit_children_ids').unlink() + super(View, self).unlink() + @api.multi def toggle(self): """ Switches between enabled and disabled statuses diff --git a/odoo/modules/loading.py b/odoo/modules/loading.py index aab61d3ba67..bff7bc7a3ba 100644 --- a/odoo/modules/loading.py +++ b/odoo/modules/loading.py @@ -123,7 +123,17 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, continue _logger.debug('loading module %s (%d/%d)', module_name, index, module_count) - migrations.migrate_module(package, 'pre') + + needs_update = ( + hasattr(package, "init") + or hasattr(package, "update") + or package.state in ("to install", "to upgrade") + ) + if needs_update: + if package.name != 'base': + registry.setup_models(cr, partial=True) + migrations.migrate_module(package, 'pre') + load_openerp_module(package.name) new_install = package.state == 'to install' @@ -136,8 +146,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, model_names = registry.load(cr, package) loaded_modules.append(package.name) - if (hasattr(package, 'init') or hasattr(package, 'update') - or package.state in ('to install', 'to upgrade')): + if needs_update: models_updated |= set(model_names) models_to_check -= set(model_names) registry.setup_models(cr, partial=True) @@ -157,7 +166,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, if hasattr(package, 'init') or package.state == 'to install': mode = 'init' - if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'): + if needs_update: env = api.Environment(cr, SUPERUSER_ID, {}) # Can't put this line out of the loop: ir.module.module will be # registered by init_models() above.