| 
					
				 | 
			
			
				@@ -5,6 +5,8 @@ import { ConcernementsStore } from '@stores/concernements' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { UserStore } from '@/stores/user' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { CommonStore } from '@/stores/common' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import REST from '@api/rest-axios' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import CartoucheLayout from '@components/layout/CartoucheLayout.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import SvgIcon from '@jamescoyle/vue-icon'; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -14,6 +16,7 @@ import { mdiPencilPlus } from '@mdi/js'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { mdiPencilPlusOutline } from '@mdi/js'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { mdiRhombus } from '@mdi/js'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { mdiRhombusOutline } from '@mdi/js'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { mdiStickerPlusOutline } from '@mdi/js'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export default { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -26,11 +29,13 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       pencilplus_path: mdiPencilPlus, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       pencilplusoutline_path: mdiPencilPlusOutline, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       rhombus_path: mdiRhombus, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      rhombusoutline_path: mdiRhombusOutline 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      rhombusoutline_path: mdiRhombusOutline, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      mdiStickerPlusOutline_path: mdiStickerPlusOutline, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      reloading_concernements: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   computed: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ...mapState(UserStore,['isloggedin']), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ...mapState(UserStore,['isloggedin', 'csrf_token']), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ...mapState(ConcernementsStore,['opened_concernement', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     'ct_concernement', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     'ct_entite' 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -45,6 +50,7 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ...mapActions(CommonStore,['setHoverElmt']), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ...mapActions(ConcernementsStore, ['reloadConcernementBesoins']), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     onClickBesoin(id){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       console.log("onClickBesoin", id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       this.opened_besoin_id = id === this.opened_besoin_id ? null : id; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -61,7 +67,89 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         bid: rid ? bid : null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         no_popup: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addBesoin(e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log('add besoin'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.reloading_concernements = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 1 create besoin node 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.createBesoinNode() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        .then((besoin) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          console.log('createBesoinNode then node', besoin); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // 2 record new besoin in concernement's field_besoin  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.recordConcernementBesoinField(besoin) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .then((concernement) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              console.log('concernement', concernement); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // reload the map item 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.reloadConcernementBesoins(concernement.nid[0].value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .then(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  this.reloading_concernements = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    createBesoinNode(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return new Promise((resolve, reject) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 1 create entite node 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const params_node_besoin = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          type: 'besoin', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          body: [{value:'Description à personaliser'}], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          field_confidentialite: [{value:'confidentialite_public'}] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const configs = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          headers: {'X-CSRF-Token': this.csrf_token} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        REST.post(`/node?_format=json`, params_node_besoin, configs) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          .then(({ data }) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.log('REST post new node besoin', data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            resolve(data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          .catch(error => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.warn(`Issue with post new node besoin`, error) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            reject(error) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    recordConcernementBesoinField(new_besoin){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return new Promise((resolve, reject) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 3 record concernement field_entite 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // get all the field_entite values, we don't want to ersae everything 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let besoins = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.opened_concernement.besoins.forEach((besoin) =>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          besoins.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            target_id: besoin.id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // add the new field value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        besoins.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          target_id: new_besoin.nid[0].value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log('besoins', besoins); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const params_node = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          type: 'concernement', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          nid: [{value: this.cid}], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          'field_besoin': besoins 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const configs = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          headers: {'X-CSRF-Token': this.csrf_token} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        REST.patch(`/node/${this.cid}?_format=json`, params_node, configs) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          .then(({ data }) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.log('REST patch entite new field_entite', data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            resolve(data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          .catch(error => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.warn(`Issue with patch node entite field_entite`, error) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            reject(error) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // resolve('test') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   components: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     CartoucheLayout, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -76,7 +164,9 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <!-- <template v-slot:header> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     </template> --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <template v-slot:main> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       <ul class="besoins"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         <li 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           v-for="besoin in opened_concernement.besoins" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -156,6 +246,15 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <template v-slot:footer> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <template v-if="opened_concernement.can_update"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <div v-if="!reloading_concernements" @click="addBesoin" class="add-besoin-btn"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <span>Ajouter un besoin</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <svg-icon type="mdi" :path="mdiStickerPlusOutline_path"/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <div v-else class="add-besoin-btn"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <div class="loading">Chargement</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   </CartoucheLayout> 
			 |