diff --git a/addons/pos_sale/models/crm_team.py b/addons/pos_sale/models/crm_team.py index e11727e0a1d..590bc4759d4 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 214588a81c8..a42fa6d7aaf 100644 --- a/addons/project/__manifest__.py +++ b/addons/project/__manifest__.py @@ -23,7 +23,6 @@ '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', @@ -33,6 +32,7 @@ '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 4542116c47c..f3708fc5b10 100644 --- a/addons/sales_team/models/crm_team.py +++ b/addons/sales_team/models/crm_team.py @@ -209,7 +209,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 6a49f15e90a..3529e183ad4 100644 --- a/odoo/addons/base/ir/ir_ui_view.py +++ b/odoo/addons/base/ir/ir_ui_view.py @@ -413,6 +413,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 29f2191f905..0b2474eaddd 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) + 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) @@ -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.