diff --git a/dms/models/directory.py b/dms/models/directory.py index b4f14882b..84b144020 100644 --- a/dms/models/directory.py +++ b/dms/models/directory.py @@ -6,11 +6,12 @@ import ast import base64 import logging +from ast import literal_eval from collections import defaultdict from odoo import _, api, fields, models, tools from odoo.exceptions import UserError, ValidationError -from odoo.osv.expression import OR +from odoo.osv.expression import AND, OR from odoo.tools import consteq, human_size from odoo.addons.http_routing.models.ir_http import slugify @@ -757,3 +758,39 @@ def _search_panel_domain_image( return super()._search_panel_domain_image( field_name=field_name, domain=domain, set_count=set_count, limit=limit ) + + def action_dms_directories_all_directory(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id( + "dms.action_dms_directory" + ) + domain = AND( + [ + literal_eval(action["domain"].strip()), + [("parent_id", "child_of", self.id)], + ] + ) + action["domain"] = domain + action["context"] = dict( + self.env.context, + default_parent_id=self.id, + searchpanel_default_parent_id=self.id, + ) + return action + + def action_dms_files_all_directory(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id("dms.action_dms_file") + domain = AND( + [ + literal_eval(action["domain"].strip()), + [("directory_id", "child_of", self.id)], + ] + ) + action["domain"] = domain + action["context"] = dict( + self.env.context, + default_directory_id=self.id, + searchpanel_default_directory_id=self.id, + ) + return action diff --git a/dms/models/dms_file.py b/dms/models/dms_file.py index b5e755ab0..51376def3 100644 --- a/dms/models/dms_file.py +++ b/dms/models/dms_file.py @@ -303,6 +303,18 @@ def search_panel_select_range(self, field_name, **kwargs): (even if some folders have no files).""" if field_name == "directory_id": domain = [["is_hidden", "=", False]] + # If we pass by context something, we filter more about it we filter + # the directories of the files or we show all of them + if self.env.context.get("active_model", False) == "dms.directory": + active_id = self.env.context.get("active_id") + # para saber que directorios, buscamos las posibles carpetas que nos interesan + files = self.env["dms.file"].search( + [["directory_id", "child_of", active_id]] + ) + all_directories = files.mapped("directory_id") + all_directories += files.mapped("directory_id.parent_id") + domain.append(["id", "in", all_directories.ids]) + # Get all possible directories comodel_records = ( self.env["dms.directory"] .with_context(directory_short_name=True) diff --git a/dms/views/directory.xml b/dms/views/directory.xml index 179931c1e..fc33b1a7a 100644 --- a/dms/views/directory.xml +++ b/dms/views/directory.xml @@ -231,8 +231,8 @@ @@ -240,8 +240,8 @@ Directories @@ -300,8 +300,8 @@