diff --git a/unifi_integration/__manifest__.py b/unifi_integration/__manifest__.py
index 4fed25f..5542922 100644
--- a/unifi_integration/__manifest__.py
+++ b/unifi_integration/__manifest__.py
@@ -63,6 +63,8 @@ This module allows you to:
'unifi_integration/static/src/components/import_site_button/import_site_button.js',
'unifi_integration/static/src/components/import_site_button/import_site_button.xml',
'unifi_integration/static/src/css/unifi.css',
+ 'unifi_integration/static/src/js/network_list_button.js',
+ 'unifi_integration/static/src/xml/network_list_button.xml',
],
},
'external_dependencies': {
diff --git a/unifi_integration/static/src/js/network_list_button.js b/unifi_integration/static/src/js/network_list_button.js
new file mode 100644
index 0000000..44574cf
--- /dev/null
+++ b/unifi_integration/static/src/js/network_list_button.js
@@ -0,0 +1,125 @@
+/** @odoo-module */
+import { ListController } from "@web/views/list/list_controller";
+import { registry } from '@web/core/registry';
+import { listView } from '@web/views/list/list_view';
+
+/**
+ * Controller pour la vue liste des réseaux avec un bouton de synchronisation
+ * Cette classe étend le contrôleur de liste standard pour ajouter un bouton de synchronisation
+ * Le bouton est visible uniquement si tous les réseaux appartiennent au même site
+ */
+export class NetworkListController extends ListController {
+ /**
+ * @override
+ */
+ static components = {
+ ...ListController.components,
+ };
+
+ /**
+ * @override
+ */
+ static template = "unifi_integration.NetworkListView.Buttons";
+ setup() {
+ super.setup();
+ this.orm = this.env.services.orm;
+ this.notification = this.env.services.notification;
+ this.buttonVisible = false;
+ this.singleSiteId = null;
+ }
+
+ /**
+ * Méthode appelée après le rendu du composant
+ * Utilisée pour vérifier si tous les réseaux appartiennent au même site
+ */
+ mounted() {
+ super.mounted();
+ this.checkSingleSite();
+ }
+
+ /**
+ * Méthode appelée lorsque les données du modèle sont mises à jour
+ */
+ async onWillStart() {
+ await super.onWillStart();
+ this.checkSingleSite();
+ }
+
+ /**
+ * Méthode appelée lorsque les données du modèle sont mises à jour
+ */
+ async willUpdateProps() {
+ await super.willUpdateProps();
+ this.checkSingleSite();
+ }
+
+ /**
+ * Vérifie si tous les réseaux affichés appartiennent au même site
+ * Met à jour this.buttonVisible en conséquence
+ */
+ async checkSingleSite() {
+ console.log('checkSingleSite appelé');
+ console.log('this.model:', this.model);
+
+ if (!this.model.root || !this.model.root.records || !this.model.root.records.length) {
+ console.log('Aucun enregistrement trouvé');
+ this.buttonVisible = false;
+ this.singleSiteId = null;
+ return;
+ }
+
+ console.log('Nombre d\'enregistrements:', this.model.root.records.length);
+
+ // Récupérer tous les site_id uniques
+ const siteIds = new Set();
+ for (const record of this.model.root.records) {
+ console.log('Record data:', record.data);
+ if (record.data.site_id && record.data.site_id[0]) {
+ siteIds.add(record.data.site_id[0]);
+ console.log('Ajout du site_id:', record.data.site_id[0]);
+ } else {
+ console.log('Pas de site_id pour cet enregistrement');
+ }
+ }
+
+ console.log('Nombre de sites uniques:', siteIds.size);
+ console.log('Sites IDs:', Array.from(siteIds));
+
+ // Le bouton est visible uniquement s'il y a exactement un site_id
+ this.buttonVisible = siteIds.size === 1;
+ this.singleSiteId = this.buttonVisible ? Array.from(siteIds)[0] : null;
+
+ console.log('buttonVisible:', this.buttonVisible);
+ console.log('singleSiteId:', this.singleSiteId);
+
+ // Forcer la mise à jour du rendu
+ this.render();
+ }
+
+ /**
+ * Gestionnaire de clic pour le bouton de synchronisation des réseaux
+ */
+ async onSyncNetworksClick() {
+ if (!this.buttonVisible) {
+ this.notification.add("Impossible de synchroniser des réseaux de sites différents", {
+ type: "warning",
+ });
+ return;
+ }
+
+ // Afficher une alerte pour tester
+ alert("Ça marche - Synchronisation des réseaux du site " + this.singleSiteId);
+
+ // Notification de succès
+ this.notification.add("Ça marche - Synchronisation des réseaux du site " + this.singleSiteId, {
+ type: "success",
+ });
+ }
+}
+
+// Enregistrement de la vue liste personnalisée
+registry.category("views").add("unifi_network_list", {
+ ...listView,
+ Controller: NetworkListController,
+ buttonTemplate: "unifi_integration.NetworkListView.Buttons",
+});
diff --git a/unifi_integration/static/src/xml/network_list_button.xml b/unifi_integration/static/src/xml/network_list_button.xml
new file mode 100644
index 0000000..2d34b0b
--- /dev/null
+++ b/unifi_integration/static/src/xml/network_list_button.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/unifi_integration/views/unifi_network_views.xml b/unifi_integration/views/unifi_network_views.xml
index a6e3741..ca94071 100644
--- a/unifi_integration/views/unifi_network_views.xml
+++ b/unifi_integration/views/unifi_network_views.xml
@@ -5,7 +5,7 @@
unifi.network.list
unifi.network
-
+