diff --git a/pms/__manifest__.py b/pms/__manifest__.py index 6392593f1..f52468b5e 100644 --- a/pms/__manifest__.py +++ b/pms/__manifest__.py @@ -66,6 +66,7 @@ "views/ir_sequence_views.xml", "wizards/wizard_reservation.xml", "wizards/wizard_massive_changes.xml", + "wizards/wizard_advanced_filters.xml", ], "demo": [ "demo/pms_master_data.xml", diff --git a/pms/security/ir.model.access.csv b/pms/security/ir.model.access.csv index 58e684ecc..f152291b6 100644 --- a/pms/security/ir.model.access.csv +++ b/pms/security/ir.model.access.csv @@ -49,3 +49,4 @@ manager_access_availability,manager_access_availability,model_pms_room_type_avai manager_access_pms_sale_channel,manager_access_pms_sale_channel,model_pms_sale_channel,pms.group_pms_manager,1,1,1,1 user_access_pms_reservation_wizard,user_access_pms_reservation_wizard,model_pms_reservation_wizard,pms.group_pms_user,1,1,1,1 user_access_pms_massive_changes_wizard,user_access_pms_massive_changes_wizard,model_pms_massive_changes_wizard,pms.group_pms_user,1,1,1,1 +user_access_pms_advanced_filters_wizard,user_access_pms_advanced_filters_wizard,model_pms_advanced_filters_wizard,pms.group_pms_user,1,1,1,1 diff --git a/pms/wizards/__init__.py b/pms/wizards/__init__.py index 6ff67656e..eb093ebce 100644 --- a/pms/wizards/__init__.py +++ b/pms/wizards/__init__.py @@ -1,2 +1,3 @@ from . import wizard_reservation from . import wizard_massive_changes +from . import wizard_advanced_filters diff --git a/pms/wizards/wizard_advanced_filters.py b/pms/wizards/wizard_advanced_filters.py new file mode 100644 index 000000000..c10dda971 --- /dev/null +++ b/pms/wizards/wizard_advanced_filters.py @@ -0,0 +1,58 @@ +from odoo import _, fields, models +from odoo.exceptions import UserError +from odoo.tools.safe_eval import safe_eval + +PMS_BUSINESS_MODELS = [ + ("pms.reservation"), + ("pms.checkin.partner"), + ("pms.service.line"), + ("pms.folio"), + ("account.move"), + ("account.payment"), +] + + +class AdvancedFiltersWizard(models.TransientModel): + + _name = "pms.advanced.filters.wizard" + _description = "Wizard for advanced filters" + + pms_model_id = fields.Many2one( + "ir.model", + string="Recipients Model", + ondelete="cascade", + required=True, + domain=[("model", "in", PMS_BUSINESS_MODELS)], + default=lambda self: self.env.ref("pms.model_pms_reservation").id, + ) + pms_model_name = fields.Char( + string="Recipients Model Name", + related="pms_model_id.model", + readonly=True, + related_sudo=True, + ) + pms_domain = fields.Char(string="Domain") + + def action_filter(self): + self.ensure_one() + actions = { + "pms.reservation": self.env.ref( + "pms.open_pms_reservation_form_tree_all" + ).read()[0], + "pms.checkin.partner": self.env.ref("pms.action_checkin_partner").read()[0], + "pms.service.line": self.env.ref("pms.action_service_line").read()[0], + "pms.folio": self.env.ref("pms.open_pms_folio1_form_tree_all").read()[0], + "account.move": self.env.ref("account.action_move_out_invoice_type").read()[ + 0 + ], + "account.payment": self.env.ref("account.action_account_payments").read()[ + 0 + ], + } + domain = self.pms_domain + if domain: + domain = safe_eval(self.pms_domain) + actions[self.pms_model_name]["domain"] = domain + return actions[self.pms_model_name] + else: + raise UserError(_("You must add filters to perform the search")) diff --git a/pms/wizards/wizard_advanced_filters.xml b/pms/wizards/wizard_advanced_filters.xml new file mode 100644 index 000000000..fa445a91c --- /dev/null +++ b/pms/wizards/wizard_advanced_filters.xml @@ -0,0 +1,50 @@ + + + + Filter by dates + pms.advanced.filters.wizard + +
+ + + + + +
+
+
+
+
+
+
+
+
+ + Advanced Filters + ir.actions.act_window + pms.advanced.filters.wizard + + form + new + + +