diff --git a/report_dynamic/models/report_dynamic.py b/report_dynamic/models/report_dynamic.py index a5968db0b5..95d9d88c83 100644 --- a/report_dynamic/models/report_dynamic.py +++ b/report_dynamic/models/report_dynamic.py @@ -18,6 +18,7 @@ class ReportDynamic(models.Model): selection="_selection_target_model", compute="_compute_resource_ref", inverse="_inverse_resource_ref", + store=True, ) wrapper_report_id = fields.Many2one("ir.ui.view", domain="[('type', '=', 'qweb')]") template_id = fields.Many2one( @@ -43,6 +44,11 @@ class ReportDynamic(models.Model): "ir.model.fields", "contextual_field_rel", "contextual_id", "field_id", "Fields" ) window_action_exists = fields.Boolean(compute="_compute_window_action_exists") + group_by_record_name = fields.Char( + compute="_compute_group_by_record_name", + store=True, + help="Computed field for grouping by record name in search view", + ) @api.model def _selection_target_model(self): @@ -58,8 +64,16 @@ def _compute_resource_ref(self): else this.template_id.model_id.model ) if model: + # Return a meaningful message anytime this breaks + try: + sample_record = self.env[model].search([], limit=1) + except Exception as e: + raise UserError( + _("Model {} is not applicable for report. Reason: {}").format( + model, str(e) + ) + ) # Tackle the problem of non-existing sample record - sample_record = self.env[model].search([], limit=1) if not sample_record: raise UserError( _( @@ -75,6 +89,16 @@ def _compute_resource_ref(self): else: this.resource_ref = False + def _inverse_resource_ref(self): + for this in self: + if this.resource_ref: + this.res_id = this.resource_ref.id + this.model_id = ( + self.env["ir.model"] + .search([("model", "=", this.resource_ref._name)], limit=1) + .id + ) + def _compute_window_action_exists(self): for this in self: this.window_action_exists = bool( @@ -86,15 +110,18 @@ def _compute_window_action_exists(self): ) ) - def _inverse_resource_ref(self): + @api.depends("resource_ref") + def _compute_group_by_record_name(self): for this in self: - if this.resource_ref: - this.res_id = this.resource_ref.id - this.model_id = ( - self.env["ir.model"] - .search([("model", "=", this.resource_ref._name)], limit=1) - .id - ) + this.group_by_record_name = "" + if this.is_template: + continue + if hasattr(this.resource_ref, "name"): + this.group_by_record_name = this.resource_ref.name + continue + this.group_by_record_name = _("{} - {}").format( + this.resource_ref._name, this.resource_ref.id + ) def get_template_xml_id(self): self.ensure_one() diff --git a/report_dynamic/views/report_dynamic.xml b/report_dynamic/views/report_dynamic.xml index e78fc2f92f..46265b4342 100644 --- a/report_dynamic/views/report_dynamic.xml +++ b/report_dynamic/views/report_dynamic.xml @@ -194,6 +194,7 @@ + report.dynamic.tree report.dynamic @@ -201,10 +202,46 @@ + + + + report.dynamic.search + report.dynamic + + + + + + + + + + + + + + Dynamic Reports @@ -224,7 +261,7 @@ report.dynamic tree,form [('is_template', '=', True)] - {'default_is_template': True} + {'default_is_template': True, 'is_template':True}