|
1 | 1 | # Part of OpenG2P. See LICENSE file for full copyright and licensing details. |
2 | 2 |
|
| 3 | +import logging |
3 | 4 | from datetime import date |
4 | 5 |
|
5 | | -from odoo import _, fields, models |
| 6 | +from odoo import _, api, fields, models |
| 7 | + |
| 8 | +_logger = logging.getLogger(__name__) |
6 | 9 |
|
7 | 10 |
|
8 | 11 | class SPPCreateEventWizard(models.TransientModel): |
9 | 12 | _name = "spp.create.event.wizard" |
10 | 13 | _description = "Create Event Wizard" |
11 | 14 |
|
| 15 | + @api.model |
| 16 | + def _get_event_data_model_selection(self): |
| 17 | + """ |
| 18 | + Dynamically get event types from models marked as event models. |
| 19 | + Returns a list of tuples (model_name, model_display_name). |
| 20 | + """ |
| 21 | + # Start with default |
| 22 | + selection = [("default", "None")] |
| 23 | + |
| 24 | + # Query all models marked as event models |
| 25 | + event_models = self.env["ir.model"].search([("is_event_model", "=", True)], order="name") |
| 26 | + |
| 27 | + for event_model in event_models: |
| 28 | + selection.append((event_model.model, event_model.name)) |
| 29 | + _logger.debug( |
| 30 | + "Added event type to wizard: %s (%s)", |
| 31 | + event_model.model, |
| 32 | + event_model.name, |
| 33 | + ) |
| 34 | + |
| 35 | + return selection |
| 36 | + |
12 | 37 | event_data_model = fields.Selection( |
13 | | - [("default", "None")], |
14 | | - "Event Type", |
| 38 | + selection="_get_event_data_model_selection", |
| 39 | + string="Event Type", |
15 | 40 | default="default", |
16 | 41 | ) |
17 | 42 | partner_id = fields.Many2one("res.partner", domain=[("is_registrant", "=", True)]) |
@@ -50,6 +75,27 @@ def next_page(self): |
50 | 75 | for split_wizard in wizard_list: |
51 | 76 | wizard_model += "%s." % split_wizard |
52 | 77 | wizard_model += "wizard" |
| 78 | + |
| 79 | + # Check if specific wizard exists |
| 80 | + wizard_exists = wizard_model in self.env |
| 81 | + |
| 82 | + if not wizard_exists: |
| 83 | + # Try to find a generic wizard (for dynamic models) |
| 84 | + generic_wizard = "%s.create.dynamic.event.wizard" % wizard_list[0] |
| 85 | + if generic_wizard in self.env: |
| 86 | + wizard_model = generic_wizard |
| 87 | + _logger.info( |
| 88 | + "Using generic wizard %s for model %s", |
| 89 | + wizard_model, |
| 90 | + model_name, |
| 91 | + ) |
| 92 | + else: |
| 93 | + _logger.warning( |
| 94 | + "No wizard found for model %s, skipping wizard step", |
| 95 | + model_name, |
| 96 | + ) |
| 97 | + return |
| 98 | + |
53 | 99 | view_id = rec.get_view_id(wizard_model) |
54 | 100 |
|
55 | 101 | # create the event data and pass it to event_data_model wizard |
|
0 commit comments