diff --git a/CHANGELOG.md b/CHANGELOG.md
index dd7ac080d8e7d7061bf57da0ba972fffe84248d6..aee518eab2c722aec9921360974e9d77392a21fd 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
## Nouveautés
* Les modèles de pièces justificatives peuvent être téléchargés en fonction de l'année courante (paramètre :annee à ajouter dans l'URL qui sera remplacé dynamiquement par l'année en cours)
+* Les vues matérialisées sont recalculées à chaque mise à jour
## Notes de mise à jour
diff --git a/admin/actions/update-bdd.php b/admin/actions/update-bdd.php
index c4d670ce0394783e9377a8c4d4aee16253744d0e..c7b07396248efdf8e00bc65d449a54e4e5f785e9 100644
--- a/admin/actions/update-bdd.php
+++ b/admin/actions/update-bdd.php
@@ -63,6 +63,8 @@ $dataGen->update();
$c->println('');
$mm->migration('post');
+// Recalcul des vues matérialisées
+$bdd->refreshMaterializedViews();
// Néttoyage des caches
$oa->run('clear-cache');
\ No newline at end of file
diff --git a/admin/src/BddAdmin/Bdd.php b/admin/src/BddAdmin/Bdd.php
index cd3cd157423ef8c45aabd82b4b05b57efef18753..b3d720f1023b3135190ca9fb38f6ca6024ed3516 100644
--- a/admin/src/BddAdmin/Bdd.php
+++ b/admin/src/BddAdmin/Bdd.php
@@ -680,6 +680,29 @@ class Bdd
+ public function refreshMaterializedViews($ddl = null)
+ {
+ if (!$ddl) {
+ $ddl = $this->materializedView()->get();
+ } else {
+ $ddl = Ddl::normalize($ddl)->get(Ddl::MATERIALIZED_VIEW);
+ if (!$ddl) $ddl = [];
+ }
+
+ $this->logBegin("Recalcul de toutes les vues matérialisées");
+ foreach ($ddl as $mv) {
+ try {
+ $this->logMsg("Vue matérialisée " . $mv['name'] . " ...", true);
+ $this->materializedView()->refresh($mv);
+ } catch (\Throwable $e) {
+ $this->logError($e);
+ }
+ }
+ $this->logEnd();
+ }
+
+
+
/**
* @return array
* @throws BddCompileException
diff --git a/admin/src/BddAdmin/Driver/Oracle/MaterializedViewManager.php b/admin/src/BddAdmin/Driver/Oracle/MaterializedViewManager.php
index 0e9e9d9271edafb012fe405c24fd0da5d2f31c0d..68805800578af0b4ed3f8eda6e5a9d1422fc6899 100644
--- a/admin/src/BddAdmin/Driver/Oracle/MaterializedViewManager.php
+++ b/admin/src/BddAdmin/Driver/Oracle/MaterializedViewManager.php
@@ -100,4 +100,18 @@ class MaterializedViewManager extends AbstractManager implements MaterializedVie
$this->drop($oldName);
$this->create($new);
}
+
+
+
+ /**
+ * @param string|array $name
+ */
+ public function refresh($name)
+ {
+ if (is_array($name)) {
+ $name = $name['name'];
+ }
+
+ $this->addQuery("BEGIN DBMS_SNAPSHOT.REFRESH( '$name','C'); END;", 'Mise à jour de la vue matérialisée ' . $name);
+ }
}
\ No newline at end of file
diff --git a/admin/src/BddAdmin/Manager/MaterializedViewManagerInteface.php b/admin/src/BddAdmin/Manager/MaterializedViewManagerInteface.php
index 1ee33bbdca19d7ebb1b599dca47ddbec77546c18..5fe6afbe45d507c1a490b813899b8d85e7ed9ef5 100644
--- a/admin/src/BddAdmin/Manager/MaterializedViewManagerInteface.php
+++ b/admin/src/BddAdmin/Manager/MaterializedViewManagerInteface.php
@@ -4,5 +4,8 @@ namespace BddAdmin\Manager;
interface MaterializedViewManagerInteface extends ManagerInterface
{
-
+ /**
+ * @param string|array $name
+ */
+ public function refresh($name);
}