def _get_sale_order_items_query(self, domain_per_model=None): if domain_per_model is None: domain_per_model = {} project_domain = [('id', 'in', self.ids), ('sale_line_id', '!=', False)] if 'project.project' in domain_per_model: project_domain = expression.AND( [project_domain, domain_per_model['project.project']]) project_query = self.env['project.project']._where_calc(project_domain) self._apply_ir_rules(project_query, 'read') project_query_str, project_params = project_query.select( 'id', 'sale_line_id') Task = self.env['project.task'] task_domain = [('project_id', 'in', self.ids), ('sale_line_id', '!=', False)] if Task._name in domain_per_model: task_domain = expression.AND( [task_domain, domain_per_model[Task._name]]) task_query = Task._where_calc(task_domain) Task._apply_ir_rules(task_query, 'read') task_query_str, task_params = task_query.select( f'{Task._table}.project_id AS id', f'{Task._table}.sale_line_id') query = Query(self._cr, 'project_sale_order_item', ' UNION '.join([project_query_str, task_query_str])) query._where_params = project_params + task_params return query
def _get_sale_order_items_query(self, domain_per_model=None): if domain_per_model is None: domain_per_model = {} billable_project_domain = [('allow_billable', '=', True)] project_domain = [('id', 'in', self.ids), ('sale_line_id', '!=', False)] if 'project.project' in domain_per_model: project_domain = expression.AND([ domain_per_model['project.project'], project_domain, billable_project_domain, ]) project_query = self.env['project.project']._where_calc(project_domain) self._apply_ir_rules(project_query, 'read') project_query_str, project_params = project_query.select( 'id', 'sale_line_id') Task = self.env['project.task'] task_domain = [('project_id', 'in', self.ids), ('sale_line_id', '!=', False)] if Task._name in domain_per_model: task_domain = expression.AND([ domain_per_model[Task._name], task_domain, ]) task_query = Task._where_calc(task_domain) Task._apply_ir_rules(task_query, 'read') task_query_str, task_params = task_query.select( f'{Task._table}.project_id AS id', f'{Task._table}.sale_line_id') ProjectMilestone = self.env['project.milestone'] milestone_domain = [('project_id', 'in', self.ids), ('allow_billable', '=', True), ('sale_line_id', '!=', False)] if ProjectMilestone._name in domain_per_model: milestone_domain = expression.AND([ domain_per_model[ProjectMilestone._name], milestone_domain, billable_project_domain, ]) milestone_query = ProjectMilestone._where_calc(milestone_domain) ProjectMilestone._apply_ir_rules(milestone_query) milestone_query_str, milestone_params = milestone_query.select( f'{ProjectMilestone._table}.project_id AS id', f'{ProjectMilestone._table}.sale_line_id', ) query = Query( self._cr, 'project_sale_order_item', ' UNION '.join( [project_query_str, task_query_str, milestone_query_str])) query._where_params = project_params + task_params + milestone_params return query