--#########################################################
-- Création des hexagrilles avec des données de population
--#########################################################
--	Auteur : Tony EMERY - DCOPT/SCOT - Région Provence-Alpes-Côte-d'Azur
-- Date de création : 20/10/2021
-- Date dernière modification : 20/04/2023

-- Objectif : disposer d’un maillage qui : 
--	-> couvre tout le territoire ;
--	-> s’adapte selon l’échelle d’analyse ;
--	-> prenne en compte l’aménagement du territoire ;
--	-> propose plus de surface de comparaison ;
--	-> intègre le plus de données statistique possible.

-----------------------------------------------------------------------------------------------
-- RESUME : Ce script SQL défini différentes phases de création des grilles hexagonales : 
-- 	1. Fusion OcSol / Iris
-- 	2. Découpage Iris-OcSol / Hexa
--	3. Fusion géométrique				
--	4. Vérification des erreurs
-----------------------------------------------------------------------------------------------

-- PARTIE 1 : Croisement Iris / Zones résidentielles
-- ######################################################

---------------------------------------------------------------------
--	ON NE LANCE CETTE PARTIE QUE LORSQUE LES IRIS SONT MIS A JOUR
---------------------------------------------------------------------

----------------------------------------
-- 1A - Sélection des données d'origine
----------------------------------------

-- 1A1 - Création de la table des zones résidentielles (p1a1_ocsol_habitat)
----------------------------------------------------------------------------
-- Sélection dans la table de l'occupation des sols, des zones résidentielles (niveau 11)
-- A lancer à chaque mise à jour de l'ocsol (2019)
	raise notice 'Création de la table schematemp.p1a1_ocsol_habitat';
create table schematemp.p1a1_ocsol_habitat as (
	select fid::int4
	, 'habitat'::text as zone_ocsol
	, st_area(geom)::float8 as surface_habitat
	, geom::geometry(geometry,2154) 
	from nomschema.ocsol_2019_habitat
	where niv2_19 = 11
	);
select schematemp.create_pk_index ('temp'::text,'p1a1_ocsol_habitat'::text,'fid'::text,'geom'::text);

-- 1A2 - Création de la table des Iris de la Région SUD 
-------------------------------------------------------
-- Sélection dans la tables des IRIS en France (Région 93) 
-- A lancer à chaque mise à jour de la couche des IRIS (2021)
	raise notice 'Création de la table schematemp.p1a2_iris_paca';
create table schematemp.p1a2_iris_paca as (
	select fid::int4
	, nom_iris::text
	, code_iris::text
	, st_area(geom)::float8 as surface_iris
	, geom::geometry(geometry,2154) 
	from nomschema.iris_france_2021_pop
	where reg = '93'
	);
select schematemp.create_pk_index ('temp'::text,'p1a2_iris_paca'::text,'fid'::text,'geom'::text);

--------------------------------------------------------
-- 1B - Découpage des iris par les zones résidentielles
--------------------------------------------------------
-- Découpage des IRIS par les zones résidentielles 

-- 1B1 - Création de la table schematemp.p1b1_iris_in_habitat
--------------------------------------------------------
-- On ne conserve que les parties d'IRIS contenant des zones résidentielles
	raise notice 'Création de la table schematemp.p1b1_iris_in_habitat';
create table schematemp.p1b1_iris_in_habitat as (
	select i.fid::int4 as fid_iris
		, i.code_iris::text
		, i.nom_iris::text
		, i.surface_iris::float8
		, res.fid::int4 as fid_ocsol
		, res.zone_ocsol::text
		, res.surface_habitat::float8
		, st_multi(st_buffer(st_intersection(i.geom, res.geom),0.0))::geometry(geometry,2154) as geom
	from schematemp.p1a2_iris_paca i
		 inner join schematemp.p1a1_ocsol_habitat res on st_intersects(i.geom, res.geom)
	where not st_isempty(st_buffer(st_intersection(i.geom, res.geom), 0.0))
);
select schematemp.create_pk_index ('temp'::text,'p1b1_iris_in_habitat'::text,'fid'::text,'geom'::text);

-- 1B2 - Création de la table schematemp.p1b2_iris_notin_habitat
-----------------------------------------------------------
-- On conserve les parties d'IRIS ne contenant pas des zones résidentielles
	raise notice 'Création de la table schematemp.p1b2_iris_notin_habitat';
create table schematemp.p1b2_iris_notin_habitat as (
	with tmp as (
		select i.fid
				, st_union(res.geom) as geom
		from schematemp.p1a2_iris_paca i 
		join schematemp.p1a1_ocsol_habitat res on st_intersects(res.geom, i.geom)
		group by i.fid
		) 
	select i.fid::int4 as fid_iris
			, i.code_iris::text
			, i.nom_iris::text
			, i.surface_iris::float8
			, (-99)::int4 as fid_ocsol
			, ('none')::text as zone_ocsol
			, (0.0)::float8 as surface_habitat
			, st_difference(
				i.geom
				,coalesce(
					tmp.geom
					,st_setsrid('GEOMETRYCOLLECTION EMPTY'::geometry,2154)
					)
				)::geometry(geometry,2154) as geom
	from schematemp.p1a2_iris_paca i
	left join tmp on i.fid = tmp.fid
);
select schematemp.create_pk_index ('temp'::text,'p1b2_iris_notin_habitat'::text,'fid'::text,'geom'::text);

---------------------------------------------------------------------
-- 1C - Création de la table de croisement iris/zones résidentielles
---------------------------------------------------------------------
-- Fusion des tables p1b1_iris_in_habitat et p1b2_iris_notin_habitat

-- 1c1 - Création de la table nomschema.iris_habitat
--------------------------------------------------------

	raise notice 'Création de la table nomschema.iris_habitat';
create table nomschema.iris_habitat as (
	(with rc as (select * from schematemp.p1b1_iris_in_habitat)
	--fusion des zones résidentielles à l'intérieur des Iris
	(select code_iris::text
			, nom_iris::text
			, zone_ocsol::text
			, count(*)::int8 as nb_entites
			, surface_iris::float8
			, st_area(st_union(geom))::float8 as surface_habitat
			, (0)::float8 as surface_hors_habitat
			, round( (st_area(st_union(geom))/surface_iris*100 )::decimal ,2)::float8 as part_habitat_iris
			, st_union(geom)::geometry(geometry,2154) as geom
	from rc
	group by code_iris,nom_iris,zone_ocsol,surface_iris
		)
	)
	union
	(with nrc as (select * from schematemp.p1b2_iris_notin_habitat)
	--fusion des zones non residentielles à l'intérieur des iris
	(select code_iris::text
			, nom_iris::text
			, ('none')::text as zone_ocsol
			, count(*)::int8 as nb_entites
			, surface_iris::float8
			, (0)::float8 as surface_habitat
			, st_area(st_union(geom))::float8 as surface_hors_habitat
			, (0.0)::float8 as part_habitat_iris
			, st_union(geom)::geometry(geometry,2154) as geom
	from nrc
	group by code_iris,nom_iris,zone_ocsol,surface_iris
		)
	)
);
select schematemp.create_pk_index ('decadmin'::text,'iris_habitat'::text,'fid'::text,'geom'::text);

/*
 * La table nomschema.iris_habitat représente le découpage des Iris et des zones d'habitat.
 * Pour chaque Iris, nous avons un objet représentant la fusion de la zone couverte par de l'habitat
 * et un objet représentant la fusion de la zone non couverte par de l'habitat
 * avec la surface que représente ces zones par rapport à la surface totale de l'Iris.
 * Il y a donc 2 objets géométrique par Iris.
 */

-- PARTIE 2 : Croisement Zones résidentielles et iris / Hexagrilles
-- #####################################################################

-------------------------------------------------------------------------
--	ON LANCE CETTE PARTIE QUE SI LES IRIS ONT ETE MODIFIES
-------------------------------------------------------------------------

-- Création d'une table contenant les grilles d'échelle
	raise notice 'Création de la table schematemp.echelles';
create table schematemp.echelles as (
	select unnest(string_to_array('10km@05km@02km@01km@500m@200m','@')) as nom
);

-------------------------------------------------------------
-- 2A - Découpage des hexagones par les zones résidentielles
-------------------------------------------------------------

-- 2A1 - Création de la table p2a1_iris_ocsol_in_hexa_xxx
--------------------------------------------------------------
				
do $$ declare r record;
	begin
		for r in select nom from schematemp.echelles
		loop
			execute concat('drop table if exists schematemp.p2a1_iris_ocsol_in_hexa_',r.nom);
	-- Découpages des IRIS par les tables des grilles hexagonales
	-- On ne conserve que les parties des grilles contenant des IRIS
				raise notice 'Création de la table schematemp.p2a1_iris_ocsol_in_hexa_%',r.nom;
			execute concat('
				create table schematemp.p2a1_iris_ocsol_in_hexa_',r.nom,' as (
					select i.code_iris::text
						, i.nom_iris::text
						, i.surface_iris::float8
						, i.surface_habitat::float8
						, i.surface_hors_habitat::float8
						, i.part_habitat_iris::float8
						, i.zone_ocsol::text
						, h.id::int8 as fid_hexa
						, st_multi(st_buffer(st_intersection(i.geom, h.geom),0.0))::geometry(geometry,2154) as geom
					from nomschema.hexagrille_',r.nom,' h
						inner join nomschema.iris_habitat i on st_intersects(i.geom, h.geom)
					where not st_isempty(st_buffer(st_intersection(i.geom, h.geom), 0.0))
				)
			');
			execute concat('
				select schematemp.create_pk_index (''temp'',p2a1_iris_ocsol_in_hexa_',r.nom',''fid'',''geom'')');
		end loop;
	end;
$$ language plpgsql;

-- 2A2 - Création de la table p2a2_iris_ocsol_notin_hexa_xxx
--------------------------------------------------------------

do $$ declare r record;
	begin
		for r in select nom from schematemp.echelles
		loop
			execute concat('drop table if exists schematemp.p2a2_iris_ocsol_notin_hexa_',r.nom);
				raise notice 'Création de la table schematemp.p2a2_iris_ocsol_notin_hexa_%',r.nom;
	-- Découpages des IRIS par les tables des grilles hexagonales
	-- On conserve les parties des grilles NE contenant PAS des IRIS
			execute concat('
				create table schematemp.p2a2_iris_ocsol_notin_hexa_',r.nom,' as (
					with tmp as (
						select h.id::int8
						, st_union(
							st_multi(
								st_buffer(
									st_intersection(
										i.geom
										, h.geom
									)
									, 0.0
								)
							)
						)::geometry(geometry,2154) as  geom
						from nomschema.hexagrille_',r.nom,' h, nomschema.iris_habitat i
						where st_intersects(i.geom, h.geom)
						group by h.id
						)
					select 
						h.id::int8 as fid_hexa
						, st_difference(
							h.geom
							, coalesce(
								tmp.geom
								, st_setsrid(
									''GEOMETRYCOLLECTION EMPTY''::geometry
									, 2154
								)
							)
						)::geometry(geometry,2154) as geom
					from nomschema.hexagrille_',r.nom,' h
						left join tmp on h.id = tmp.id
					)
				');
			execute concat('
				select schematemp.create_pk_index (''temp'',p2a2_iris_ocsol_notin_hexa_',r.nom',''fid'',''geom'')');
		end loop;
	end;
$$ language plpgsql;

-----------------------------------------------------------
-- 2B - Création des liens Iris <=> hexagones 
-----------------------------------------------------------

-- 2B1 - Création des tables des liens entre les Iris et les hexagones
-----------------------------------------------------------------------
-- On créé une table qui va permettre de calculer les futures statistiques pour chaque zone d'habitat de chaque Iris et de chaque hexagone

do $$ declare r record;
	begin
		for r in select nom from schematemp.echelles
		loop
			execute concat('drop table if exists schematemp.p2b1_lien_iris_hexagrille_',r.nom);
	-- Fusion de la table p2a1_iris_ocsol_in_hexa_ avec la table p2a1_iris_ocsol_in_hexa_ correspondante
				raise notice 'Création de la table schematemp.p2b1_lien_iris_hexagrille_%',r.nom;
			execute concat('
				create table schematemp.p2b1_lien_iris_hexagrille_',r.nom,' as (
					with tmp as (
						select fid_hexa
							, code_iris::text
							, st_area(geom)::float8 as surface_residentielle
							, (0)::float8 as surface_non_residentielle
							, (0)::float8 as surface_hors_iris
							, surface_iris::float8 as surface_totale_iris
							, surface_habitat::float8 as surface_totale_habitat_iris
							, surface_hors_habitat::float8 as surface_totale_hors_habitat_iris
							, geom::geometry(geometry,2154)
						from schematemp.p2a1_iris_ocsol_in_hexa_',r.nom,'
						where zone_ocsol = ''habitat''
						union
						select fid_hexa
							, code_iris::text
							, (0)::float8 as surface_residentielle
							, st_area(geom)::float8 as surface_non_residentielle
							, (0)::float8 as surface_hors_iris
							, surface_iris::float8 as surface_totale_iris
							, surface_habitat::float8 as surface_totale_habitat_iris
							, surface_hors_habitat::float8 as surface_totale_hors_habitat_iris
							, geom::geometry(geometry,2154)
						from schematemp.p2a1_iris_ocsol_in_hexa_',r.nom,'
						where zone_ocsol = ''none''
						union
						select fid_hexa
							, (''-999999999'')::text as code_iris
							, (0)::float8 as surface_residentielle
							, (0)::float8 as surface_non_residentielle
							, st_area(geom)::float8 as surface_hors_iris
							, (0)::float8 as surface_totale_iris
							, (0)::float8 as surface_totale_habitat_iris
							, (0)::float8 as surface_totale_hors_habitat_iris
							, geom::geometry(geometry,2154)
						from schematemp.p2a2_iris_ocsol_notin_hexa_',r.nom,'
				)
				select fid_hexa
					, code_iris::text
					, max(surface_residentielle)::float8 as surface_residentielle
					, max(surface_non_residentielle)::float8 as surface_non_residentielle
					, max(surface_hors_iris)::float8 as surface_hors_iris
					, max(surface_totale_iris)::float8 as surface_totale_iris
					, max(surface_totale_habitat_iris)::float8 as surface_totale_habitat_iris
					, max(surface_totale_hors_habitat_iris)::float8 as surface_totale_hors_habitat_iris
					, sum(surface_residentielle + surface_non_residentielle + surface_hors_iris)::float8 as surface_totale_objet
					, coalesce(sum(surface_residentielle / nullif(surface_totale_habitat_iris,0)),0)::float8 as indice_habitat
					, st_union(geom)::geometry(geometry,2154) as geom
				from tmp
				group by fid_hexa,code_iris
				order by fid_hexa,code_iris
					)
				');
			raise notice 'Table schematemp.p2b1_lien_iris_hexagrille_% créée',r.nom;
			execute concat('
				select schematemp.create_pk_index (''temp''::text,''p2b1_lien_iris_hexagrille_',r.nom,'::text,''fid''::text,''geom''::text)');
			raise notice 'Index de la table schematemp.p2b1_lien_iris_hexagrille_% créé',r.nom;
		end loop;
	end;
$$ language plpgsql;

select schematemp.create_pk_index ('temp'::text,'p1b2_iris_notin_habitat'::text,'fid'::text,'geom'::text);

--###########################################################################################
--	REPRENDRE ICI pour la mise à jours des tables statistiques
--###########################################################################################

-- 2C1 - Jointure avec les tables statistiques
-----------------------------------------------
-- On fait un jointure entre la table des liens Iris/Hexagones et les tables des statistiques
do $$ declare r record; nomtable text; reqindex text;
	begin
		for r in select nom from schematemp.echelles
		loop
			execute concat('drop table if exists schematemp.p2c1_jointure_stats_',r.nom);
				raise notice 'Création de la table schematemp.p2c1_jointure_stats_%',r.nom;
	-- jointure entre la table p2b1_lien_iris_hexagrille_ et la table base_ic_totale_all
			execute concat('
				create table schematemp.p2c1_jointure_stats_',r.nom,' as (
					select * 
					from schematemp.p2b1_lien_iris_hexagrille_',r.nom,' ih
					join stats_insee.base_ic_totale_all ar
						on ih.code_iris = ar.iris
					order by fid_hexa,code_iris
					)
			');
		end loop;
	end;
$$ language plpgsql;

select schematemp.create_pk_index ('temp','p2c1_jointure_stats_10km','fid_hexa','geom');

-- 2D1 - Calcul des valeurs statistiques
-----------------------------------------------
-- On calcule la valeur pour chaque Iris/Hexagone des stats en fonction de l'indice habitat
do $$ declare r record; list_col text; requete text;
	begin
			raise notice 'Création de la liste des colonnes statistiques de stats_insee.base_ic_totale_all';
		list_col = (
				with lc as (
					select column_name::text as liste,table_name,data_type,column_name-- ,*
					from information_schema.columns
					where
						table_name = 'base_ic_totale_all'
						and data_type != 'text'
						and column_name like 'stat_%'
					order by ordinal_position asc
				)
					select array_to_string(
						array_agg(
							'sum(coalesce(h.'||liste||',0)) as '||liste
							)
						,','
						) as liste_colonnes
					from lc
			);
		raise notice 'Liste des colonnes : %', list_col;
		for r in select nom from schematemp.echelles
		loop
				raise notice 'Création de la requête';
			requete = 'select fid_hexa
					,code_iris
					,surface_residentielle
					,millesime
					,'||list_col||'
					,geom 
				from schematemp.p2c1_jointure_stats_'||r.nom||' h
				group by fid_hexa, code_iris, surface_residentielle, millesime, geom';
				raise notice 'Requête : %', requete;
			execute concat('drop table if exists schematemp.p2d1_calcul_stats_',r.nom);
				raise notice 'Création de la table schematemp.p2d1_calcul_stats_%',r.nom;
			execute concat('create table schematemp.p2d1_calcul_stats_',r.nom,' as ('||requete||')');
			/*execute concat('
				select schematemp.create_pk_index (''temp''::text,''p2d1_calcul_stats_',r.nom,'::text,''fid''::text,''geom''::text)');*/
		end loop;
	end;
$$ language plpgsql;

-- 2E1 - Fusion des statistiques par hexagone
-----------------------------------------------
-- On fusionne la valeur pour chaque Hexagone des stats calculées en 2B3
do $$ declare r record; list_col text; requete text;
	begin
		for r in select nom from schematemp.echelles
		loop
				raise notice 'échelle : %', r;
				raise notice 'Création de la liste des colonnes statistiques de stats_insee.base_ic_totale_all';
		list_col = (
				with lc as (
					select column_name::text as liste-- ,*
					from information_schema.columns
					where
						table_name = 'base_ic_totale_all'
						and data_type != 'text'
						and column_name like 'stat_%'
					order by ordinal_position asc
				)
					select array_to_string(
						array_agg(
							'sum(coalesce(h.'||liste||',0)) as '||liste
							)
						,','
						) as liste_colonnes
					from lc
			);
				raise notice 'Liste des colonnes : %', list_col;
				raise notice 'Création de la requête';
			requete = 'select fid_hexa::int8
					,count(distinct code_iris)::int8 as nb_iris
					,array_agg(code_iris) as code_iris
					,sum(surface_residentielle)::float8 as surface_residentielle
					,millesime::int2
					,'||list_col||' 
				from schematemp.p2d1_calcul_stats_'||r.nom||' h 
				group by fid_hexa, millesime';
			raise notice 'Requête : %', requete;

			execute concat('drop table if exists schematemp.p2e1_regroupement_hexagones_',r.nom);
				raise notice 'Création de la table schematemp.p2e1_regroupement_hexagones_%',r.nom;
			execute concat('create table schematemp.p2e1_regroupement_hexagones_',r.nom,' as ('||requete||')');
			/*execute concat('
				select schematemp.create_pk_index (''temp''::text,''p2e1_regroupement_hexagones_',r.nom,'::text,''fid''::text,''geom''::text)');*/
		end loop;
	end;
$$ language plpgsql;

---------------------------------------
-- 2F - Création des tables hexagrille
---------------------------------------

-- 2F1 - Reconstitution des hexagones avec les données des Iris
----------------------------------------------------------------

do $$ declare r record;
	begin
		for r in select nom from schematemp.echelles
		loop
			execute concat('drop table if exists nomschema.hexagrille_iris_ocsol_',r.nom);
	-- Jointure de la table p2b3_iris_hexa_stats_xxx avec la table hexagrille_xxx correspondante
				raise notice 'Création de la table nomschema.hexagrille_iris_ocsol_%',r.nom;
			execute concat('
				create table nomschema.hexagrille_iris_ocsol_',r.nom,' as (
					select 
						hex.id::int8
--Coordonnées des limites de l''hexagone
						, ("left")::float8 as est
						, top::float8 as nord
						, ("right")::float8 as ouest
						, bottom::float8 as sud
--Part brute de toutes les zones résidentielles de l''hexagone sur la surface totale de l''hexagone
						, (
							(
								cc.surface_residentielle/
								(
									st_area(hex.geom)/1000000
								)
							)*100
						)::float8 as part_brute_surface_residentielle
						--::numeric
--Part arrondie de toutes les zones résidentielles de l''hexagone sur la surface totale de l''hexagone
						, round(
							(
								(
									cc.surface_residentielle/
										(st_area(hex.geom)/1000000
									)
								)*100
							)::numeric,1
						)::float8 as part_surface_residentielle
--Surface totale de l''hexagone
						, round(
							(st_area(hex.geom)/1000000)::numeric,1
						)::float8 as surface_hexagone
--Informations sud l''Iris
						, cc.*
--Géométrie de l''hexagone
						, hex.geom
					from nomschema.hexagrille_',r.nom,' hex
					join schematemp.p2e1_regroupement_hexagones_',r.nom,' cc on hex.id = cc.fid_hexa
					order by ((cc.surface_residentielle/st_area(hex.geom))*1000000) desc	
						  )');
			/*execute concat('
				select schematemp.create_pk_index (''decadmin''::text,''hexagrille_iris_ocsol_',r.nom,'::text,''fid''::text,''geom''::text)');*/
		end loop;
	end;
$$ language plpgsql;

---------------------------------------
-- 2G - Vérification des statistiques
---------------------------------------

-- 2G1 - Vérification des statistiques
----------------------------------------------------------------
-- On recréé les Iris à partir des extrapolations calculées 

do $$ declare r record; list_col text; requete text; index_col text;
	begin
		-- Création de la liste des colonnes et de l'analyse statistique pour chaque colonne
			--(sum(column)-min(column)) as ecart_column
			raise notice 'Création de la liste des colonnes statistiques de stats_insee.base_ic_totale_all';
		list_col = (
				with lc as (
					select column_name::text as liste-- ,*
					from information_schema.columns
					where
						table_name = 'base_ic_totale_all'
						and data_type != 'text'
						and column_name like 'stat_%'
					order by ordinal_position asc
				)
					select array_to_string(
						array_agg(
							'sum(coalesce(b.'||liste||',0)) as '||liste
							)
						,','
						) as liste_colonnes
					from lc
			);
		raise notice 'Liste des colonnes : %', list_col;	
	
		-- Création de la liste des colonnes et de l'analyse statistique pour chaque colonne
			--(sum(column)-min(column))
	-- A REPRENDRE --
				raise notice 'Création de la liste des colonnes pour l''analyse statistique';
		index_col = (
			with lc as (
				select column_name::text as liste
				from information_schema.columns
				where
					table_name = 'base_ic_totale_all'
					and data_type != 'text'
					and column_name like 'stat_%'
				order by ordinal_position asc
			)
				select array_to_string(
					array_agg('abs(sum(c.'||liste||')-min(b.'||liste||'))')
					,','
					) as liste_index
				from lc
		);
		raise notice 'Liste des colonnes (analyse) : %', index_col;
	
		-- Création des tables d'analyse
			--schematemp.p2d1_calcul_stats_[xxx]
		for r in select nom from schematemp.echelles
		loop
				raise notice 'Création de la requête';
			requete = 'select c.code_iris::int
					,c.millesime
					,greatest('||index_col||') as max_abs_value
					,'||list_col||'
					,i.geom 
				from schematemp.p2d1_calcul_stats_'||r.nom||' c
				join stats_insee.base_ic_totale_all b 
					on c.code_iris = b.iris
				join schematemp.p1a2_iris_paca i
					on c.code_iris = i.code_iris
				group by c.code_iris, c.millesime, b.iris, i.geom 
				';
				raise notice 'Requête : %', requete;
			execute concat('drop table if exists schematemp.p2g1_verif_calcul_stats_',r.nom);
				raise notice 'Création de la table schematemp.p2g1_verif_calcul_stats_%',r.nom;
			execute concat('create table schematemp.p2g1_verif_calcul_stats_',r.nom,' as ('||requete||')');
				raise notice 'Création de la clé primaire pour schematemp.p2g1_verif_calcul_stats_%',r.nom;
			/*execute concat('
				select schematemp.create_pk_index (''temp'',p2g1_verif_calcul_stats_',r.nom,',''code_iris'',''geom'')');*/
		end loop;
	end;
$$ language plpgsql;