mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
[IMP]bi_sql_editor: archive Scheduled Action to not recreate when resetting the SQL View
Based on the agreed solution: https://github.com/OCA/reporting-engine/pull/903#pullrequestreview-2273835493. It is best to archive the Scheduled Action every time you set back to the draft state. Then, when creating the SQL view, if it is a materialized view, unarchive the Scheduled Action if already exists, otherwise create it from scratch. Then, if the SQL View is deleted, also make sure to remove the Scheduled Action if there is one assigned as it has not been done in the `button_set_draft` method
This commit is contained in:
@@ -18,8 +18,9 @@ _logger = logging.getLogger(__name__)
|
||||
|
||||
@api.model
|
||||
def _instanciate(self, model_data):
|
||||
""" Return a class for the custom model given by
|
||||
parameters ``model_data``. """
|
||||
"""Return a class for the custom model given by
|
||||
parameters ``model_data``."""
|
||||
|
||||
# This monkey patch is meant to avoid create/search tables for those
|
||||
# materialized views. Doing "super" doesn't work.
|
||||
class CustomModel(models.Model):
|
||||
@@ -281,6 +282,8 @@ class BiSQLView(models.Model):
|
||||
"If you want to delete them, first set them to draft."
|
||||
)
|
||||
)
|
||||
# Remove Scheduled Actions, as they were not removed in `button_set_draft`
|
||||
self.mapped("cron_id").unlink()
|
||||
return super(BiSQLView, self).unlink()
|
||||
|
||||
def copy(self, default=None):
|
||||
@@ -310,9 +313,13 @@ class BiSQLView(models.Model):
|
||||
sql_view._create_index()
|
||||
|
||||
if sql_view.is_materialized:
|
||||
sql_view.cron_id = (
|
||||
self.env["ir.cron"].create(sql_view._prepare_cron()).id
|
||||
)
|
||||
# Create Cron only if it has not been created yet, otherwise unarchive it
|
||||
if sql_view.cron_id and not sql_view.cron_id.active:
|
||||
sql_view.cron_id.write({"active": True})
|
||||
else:
|
||||
sql_view.cron_id = (
|
||||
self.env["ir.cron"].create(sql_view._prepare_cron()).id
|
||||
)
|
||||
sql_view.state = "model_valid"
|
||||
|
||||
def button_set_draft(self):
|
||||
@@ -324,7 +331,7 @@ class BiSQLView(models.Model):
|
||||
sql_view.pivot_view_id.unlink()
|
||||
sql_view.search_view_id.unlink()
|
||||
if sql_view.cron_id:
|
||||
sql_view.cron_id.unlink()
|
||||
sql_view.cron_id.write({"active": False})
|
||||
|
||||
if sql_view.state in ("model_valid", "ui_valid"):
|
||||
# Drop SQL View (and indexes by cascade)
|
||||
|
||||
Reference in New Issue
Block a user