From addaaa04ecc41511191f2a1c9d110d5782efae88 Mon Sep 17 00:00:00 2001 From: Maxime Vergez Date: Tue, 5 Sep 2023 14:33:24 +0200 Subject: [PATCH 01/22] feat(occtax): support for group3_inpn In occurrence and counting Also propagate the new getNomenclature parameter across its uses Remark: in diff, it seems to have a wrong char between "group2" and "_", it seems fine though --- .../occtax-form/counting/counting.component.html | 12 ++++++++---- .../occurrence/occurrence.component.html | 11 +++++++++-- .../GN2CommonModule/form/data-form.service.ts | 4 ++++ .../form/nomenclature/nomenclature.component.ts | 16 ++++++++++++++-- .../services/actor-form.service.ts | 2 +- 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/contrib/occtax/frontend/app/occtax-form/counting/counting.component.html b/contrib/occtax/frontend/app/occtax-form/counting/counting.component.html index c2dc0c27d3..e0d7883920 100644 --- a/contrib/occtax/frontend/app/occtax-form/counting/counting.component.html +++ b/contrib/occtax/frontend/app/occtax-form/counting/counting.component.html @@ -8,7 +8,8 @@ codeNomenclatureType="OBJ_DENBR" [parentFormControl]="form.get('id_nomenclature_obj_count')" [regne]="(occtaxFormOccurrenceService.taxref|async)?.regne" - [group2Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group2_inpn"> + [group2Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group2_inpn" + [group3Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group3_inpn">
+ [group2Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group2_inpn" + [group3Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group3_inpn">
@@ -83,7 +85,8 @@ codeNomenclatureType="STADE_VIE" [parentFormControl]="form.get('id_nomenclature_life_stage')" [regne]="(occtaxFormOccurrenceService.taxref|async)?.regne" - [group2Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group2_inpn"> + [group2Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group2_inpn" + [group3Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group3_inpn"> + [group2Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group2_inpn" + [group3Inpn]="(occtaxFormOccurrenceService.taxref|async)?.group3_inpn"> Ajout d'un taxon codeNomenclatureType="METH_OBS" [regne]="taxref?.regne" [group2Inpn]="taxref?.group2_inpn" + [group3Inpn]="taxref?.group3_inpn" data-qa="pnx-nomenclature-meth-obs" > @@ -77,6 +78,7 @@
Ajout d'un taxon
codeNomenclatureType="ETA_BIO" [regne]="taxref?.regne" [group2Inpn]="taxref?.group2_inpn" + [group3Inpn]="taxref?.group3_inpn" data-qa="pnx-nomenclature-eta-bio" > @@ -135,7 +137,8 @@
Ajout d'un taxon
[parentFormControl]="occurrenceForm.get('id_nomenclature_determination_method')" codeNomenclatureType="METH_DETERMIN" [regne]="taxref?.regne" - [group2Inpn]="taxref?.group2_inpn"> + [group2Inpn]="taxref?.group2_inpn" + [group3Inpn]="taxref?.group3_inpn"> Ajout d'un taxon codeNomenclatureType="NATURALITE" [regne]="taxref?.regne" [group2Inpn]="taxref?.group2_inpn" + [group3Inpn]="taxref?.group3_inpn" > @@ -194,7 +198,8 @@
Ajout d'un taxon
[parentFormControl]="occurrenceForm.get('id_nomenclature_bio_status')" codeNomenclatureType="STATUT_BIO" [regne]="taxref?.regne" - [group2Inpn]="taxref?.group2_inpn"> + [group2Inpn]="taxref?.group2_inpn" + [group3Inpn]="taxref?.group3_inpn"> @@ -208,6 +213,7 @@
Ajout d'un taxon
codeNomenclatureType="OCC_COMPORTEMENT" [regne]="taxref?.regne" [group2Inpn]="taxref?.group2_inpn" + [group3Inpn]="taxref?.group3_inpn" > @@ -247,6 +253,7 @@
Ajout d'un taxon
codeNomenclatureType="PREUVE_EXIST" [regne]="taxref?.regne" [group2Inpn]="taxref?.group2_inpn" + [group3Inpn]="taxref?.group3_inpn" (labelsLoaded)="setExistProofData($event)" > diff --git a/frontend/src/app/GN2CommonModule/form/data-form.service.ts b/frontend/src/app/GN2CommonModule/form/data-form.service.ts index 390c790c7f..fc305bccef 100644 --- a/frontend/src/app/GN2CommonModule/form/data-form.service.ts +++ b/frontend/src/app/GN2CommonModule/form/data-form.service.ts @@ -35,6 +35,7 @@ export class DataFormService { codeNomenclatureType: string, regne?: string, group2_inpn?: string, + group3_inpn?: string, filters?: any ) { let params: HttpParams = new HttpParams(); @@ -42,6 +43,9 @@ export class DataFormService { group2_inpn ? (params = params.set('group2_inpn', group2_inpn)) : (params = params.set('group2_inpn', '')); + group3_inpn + ? (params = params.set('group3_inpn', group3_inpn)) + : (params = params.set('group3_inpn', '')); if (filters['orderby']) { params = params.set('orderby', filters['orderby']); } diff --git a/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts b/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts index 8b6e3c6610..c334cfbc38 100644 --- a/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts +++ b/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts @@ -64,6 +64,10 @@ export class NomenclatureComponent * Filter group 2 INPN */ @Input() group2Inpn: string; + /** + * Filter group 3 INPN + */ + @Input() group3Inpn?: string; /** * Attribut de l'objet nomenclature renvoyé au formControl (facultatif, par défaut ``id_nomenclature``). * Valeur possible: n'importequel attribut de l'objet ``nomenclature`` renvoyé par l'API @@ -128,7 +132,9 @@ export class NomenclatureComponent if ( changes.regne === undefined && changes.group2Inpn !== undefined && - !changes.group2Inpn.firstChange + !changes.group2Inpn.firstChange && + changes.group3Inpn !== undefined && + !changes.group3Inpn.firstChange ) { this.initLabels(); } @@ -137,7 +143,13 @@ export class NomenclatureComponent initLabels() { const filters = { orderby: 'label_default', cd_nomenclature: this.cdNomenclatures }; this._dfService - .getNomenclature(this.codeNomenclatureType, this.regne, this.group2Inpn, filters) + .getNomenclature( + this.codeNomenclatureType, + this.regne, + this.group2Inpn, + this.group3Inpn, + filters + ) .subscribe((data) => { this.labels = data.values; this.savedLabels = data.values; diff --git a/frontend/src/app/metadataModule/services/actor-form.service.ts b/frontend/src/app/metadataModule/services/actor-form.service.ts index b00457b58a..016edf23f4 100644 --- a/frontend/src/app/metadataModule/services/actor-form.service.ts +++ b/frontend/src/app/metadataModule/services/actor-form.service.ts @@ -54,7 +54,7 @@ export class ActorFormService { this.dfs.getRoles({ group: false }).subscribe((roles: any[]) => this._roles.next(roles)); this.dfs - .getNomenclature('ROLE_ACTEUR', null, null, { orderby: 'label_default' }) + .getNomenclature('ROLE_ACTEUR', null, null, null, { orderby: 'label_default' }) .pipe(map((res: any) => res.values)) .subscribe((role_types: any[]) => this._role_types.next(role_types)); } From 3eb37c17939c0320fee31cf2849f2499a0d1798a Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Fri, 21 Jul 2023 15:53:52 +0200 Subject: [PATCH 02/22] feat: add group3 inpn into synthese view export Since the Taxref v14 or v15 , group3_inpn is available Creation of revision in order to add this column to v_synthese_for_export and v_synthese_taxon_for_export_view Reviewed-by: andriacap --- .../core/gn_synthese/synthese_config.py | 1 + .../synthese_view_export_add_group3_inpn.sql | 139 ++++++++++++++++++ ...ynthese_view_export_remove_group3_inpn.sql | 139 ++++++++++++++++++ ...86c22_add_group3_inpn_to_synthese_views.py | 30 ++++ 4 files changed, 309 insertions(+) create mode 100644 backend/geonature/migrations/data/core/synthese_view_export_add_group3_inpn.sql create mode 100644 backend/geonature/migrations/data/core/synthese_view_export_remove_group3_inpn.sql create mode 100644 backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py diff --git a/backend/geonature/core/gn_synthese/synthese_config.py b/backend/geonature/core/gn_synthese/synthese_config.py index d838c937c4..84caecfcc6 100644 --- a/backend/geonature/core/gn_synthese/synthese_config.py +++ b/backend/geonature/core/gn_synthese/synthese_config.py @@ -15,6 +15,7 @@ "regne", "group1_inpn", "group2_inpn", + "group3_inpn", "classe", "ordre", "famille", diff --git a/backend/geonature/migrations/data/core/synthese_view_export_add_group3_inpn.sql b/backend/geonature/migrations/data/core/synthese_view_export_add_group3_inpn.sql new file mode 100644 index 0000000000..0a6436fc72 --- /dev/null +++ b/backend/geonature/migrations/data/core/synthese_view_export_add_group3_inpn.sql @@ -0,0 +1,139 @@ +-- Vue listant les observations pour l'export de la Synthèse +CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export AS + SELECT + s.id_synthese AS id_synthese, + s.date_min::date AS date_debut, + s.date_max::date AS date_fin, + s.date_min::time AS heure_debut, + s.date_max::time AS heure_fin, + t.cd_nom AS cd_nom, + t.cd_ref AS cd_ref, + t.nom_valide AS nom_valide, + t.nom_vern as nom_vernaculaire, + s.nom_cite AS nom_cite, + t.regne AS regne, + t.group1_inpn AS group1_inpn, + t.group2_inpn AS group2_inpn, + t.classe AS classe, + t.ordre AS ordre, + t.famille AS famille, + t.id_rang AS rang_taxo, + s.count_min AS nombre_min, + s.count_max AS nombre_max, + s.altitude_min AS alti_min, + s.altitude_max AS alti_max, + s.depth_min AS prof_min, + s.depth_max AS prof_max, + s.observers AS observateurs, + s.id_digitiser AS id_digitiser, -- Utile pour le CRUVED + s.determiner AS determinateur, + communes AS communes, + public.ST_astext(s.the_geom_4326) AS geometrie_wkt_4326, + public.ST_x(s.the_geom_point) AS x_centroid_4326, + public.ST_y(s.the_geom_point) AS y_centroid_4326, + public.ST_asgeojson(s.the_geom_4326) AS geojson_4326,-- Utile pour la génération de l'export en SHP + public.ST_asgeojson(s.the_geom_local) AS geojson_local,-- Utile pour la génération de l'export en SHP + s.place_name AS nom_lieu, + s.comment_context AS comment_releve, + s.comment_description AS comment_occurrence, + s.validator AS validateur, + n21.label_default AS niveau_validation, + s.meta_validation_date as date_validation, + s.validation_comment AS comment_validation, + s.digital_proof AS preuve_numerique_url, + s.non_digital_proof AS preuve_non_numerique, + d.dataset_name AS jdd_nom, + d.unique_dataset_id AS jdd_uuid, + d.id_dataset AS jdd_id, -- Utile pour le CRUVED + af.acquisition_framework_name AS ca_nom, + af.unique_acquisition_framework_id AS ca_uuid, + d.id_acquisition_framework AS ca_id, + s.cd_hab AS cd_habref, + hab.lb_code AS cd_habitat, + hab.lb_hab_fr AS nom_habitat, + s.precision as precision_geographique, + n1.label_default AS nature_objet_geo, + n2.label_default AS type_regroupement, + s.grp_method AS methode_regroupement, + n3.label_default AS technique_observation, + n5.label_default AS biologique_statut, + n6.label_default AS etat_biologique, + n22.label_default AS biogeographique_statut, + n7.label_default AS naturalite, + n8.label_default AS preuve_existante, + n9.label_default AS niveau_precision_diffusion, + n10.label_default AS stade_vie, + n11.label_default AS sexe, + n12.label_default AS objet_denombrement, + n13.label_default AS type_denombrement, + n14.label_default AS niveau_sensibilite, + n15.label_default AS statut_observation, + n16.label_default AS floutage_dee, + n17.label_default AS statut_source, + n18.label_default AS type_info_geo, + n19.label_default AS methode_determination, + n20.label_default AS comportement, + s.reference_biblio AS reference_biblio, + s.entity_source_pk_value AS id_origine, + s.unique_id_sinp AS uuid_perm_sinp, + s.unique_id_sinp_grp AS uuid_perm_grp_sinp, + s.meta_create_date AS date_creation, + s.meta_update_date AS date_modification, + s.additional_data as champs_additionnels, + COALESCE(s.meta_update_date, s.meta_create_date) AS derniere_action, + t.group3_inpn AS group3_inpn + FROM gn_synthese.synthese s + JOIN taxonomie.taxref t ON t.cd_nom = s.cd_nom + JOIN gn_meta.t_datasets d ON d.id_dataset = s.id_dataset + JOIN gn_meta.t_acquisition_frameworks af ON d.id_acquisition_framework = af.id_acquisition_framework + LEFT OUTER JOIN ( + SELECT id_synthese, string_agg(DISTINCT area_name, ', ') AS communes + FROM gn_synthese.cor_area_synthese cas + LEFT OUTER JOIN ref_geo.l_areas a_1 ON cas.id_area = a_1.id_area + JOIN ref_geo.bib_areas_types ta ON ta.id_type = a_1.id_type AND ta.type_code ='COM' + GROUP BY id_synthese + ) sa ON sa.id_synthese = s.id_synthese + LEFT JOIN ref_nomenclatures.t_nomenclatures n1 ON s.id_nomenclature_geo_object_nature = n1.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n2 ON s.id_nomenclature_grp_typ = n2.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n3 ON s.id_nomenclature_obs_technique = n3.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n6 ON s.id_nomenclature_bio_condition = n6.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n7 ON s.id_nomenclature_naturalness = n7.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n8 ON s.id_nomenclature_exist_proof = n8.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n9 ON s.id_nomenclature_diffusion_level = n9.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n11 ON s.id_nomenclature_sex = n11.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n12 ON s.id_nomenclature_obj_count = n12.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n13 ON s.id_nomenclature_type_count = n13.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n14 ON s.id_nomenclature_sensitivity = n14.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n15 ON s.id_nomenclature_observation_status = n15.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n16 ON s.id_nomenclature_blurring = n16.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n17 ON s.id_nomenclature_source_status = n17.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n18 ON s.id_nomenclature_info_geo_type = n18.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n19 ON s.id_nomenclature_determination_method = n19.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n20 ON s.id_nomenclature_behaviour = n20.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n21 ON s.id_nomenclature_valid_status = n21.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n22 ON s.id_nomenclature_biogeo_status = n22.id_nomenclature + LEFT JOIN ref_habitats.habref hab ON hab.cd_hab = s.cd_hab; + + + +-- Vue export des taxons de la synthèse +-- Première version qui reste à affiner/étoffer +CREATE OR REPLACE VIEW gn_synthese.v_synthese_taxon_for_export_view AS + SELECT DISTINCT + ref.nom_valide, + ref.cd_ref, + ref.nom_vern, + ref.group1_inpn, + ref.group2_inpn, + ref.regne, + ref.phylum, + ref.classe, + ref.ordre, + ref.famille, + ref.id_rang, + ref.group3_inpn +FROM gn_synthese.synthese s +JOIN taxonomie.taxref t ON s.cd_nom = t.cd_nom +JOIN taxonomie.taxref ref ON t.cd_ref = ref.cd_nom; \ No newline at end of file diff --git a/backend/geonature/migrations/data/core/synthese_view_export_remove_group3_inpn.sql b/backend/geonature/migrations/data/core/synthese_view_export_remove_group3_inpn.sql new file mode 100644 index 0000000000..791484dca1 --- /dev/null +++ b/backend/geonature/migrations/data/core/synthese_view_export_remove_group3_inpn.sql @@ -0,0 +1,139 @@ +-- Vue listant les observations pour l'export de la Synthèse +DROP VIEW gn_synthese.v_synthese_for_export; +CREATE VIEW gn_synthese.v_synthese_for_export AS + SELECT + s.id_synthese AS id_synthese, + s.date_min::date AS date_debut, + s.date_max::date AS date_fin, + s.date_min::time AS heure_debut, + s.date_max::time AS heure_fin, + t.cd_nom AS cd_nom, + t.cd_ref AS cd_ref, + t.nom_valide AS nom_valide, + t.nom_vern as nom_vernaculaire, + s.nom_cite AS nom_cite, + t.regne AS regne, + t.group1_inpn AS group1_inpn, + t.group2_inpn AS group2_inpn, + t.classe AS classe, + t.ordre AS ordre, + t.famille AS famille, + t.id_rang AS rang_taxo, + s.count_min AS nombre_min, + s.count_max AS nombre_max, + s.altitude_min AS alti_min, + s.altitude_max AS alti_max, + s.depth_min AS prof_min, + s.depth_max AS prof_max, + s.observers AS observateurs, + s.id_digitiser AS id_digitiser, -- Utile pour le CRUVED + s.determiner AS determinateur, + communes AS communes, + public.ST_astext(s.the_geom_4326) AS geometrie_wkt_4326, + public.ST_x(s.the_geom_point) AS x_centroid_4326, + public.ST_y(s.the_geom_point) AS y_centroid_4326, + public.ST_asgeojson(s.the_geom_4326) AS geojson_4326,-- Utile pour la génération de l'export en SHP + public.ST_asgeojson(s.the_geom_local) AS geojson_local,-- Utile pour la génération de l'export en SHP + s.place_name AS nom_lieu, + s.comment_context AS comment_releve, + s.comment_description AS comment_occurrence, + s.validator AS validateur, + n21.label_default AS niveau_validation, + s.meta_validation_date as date_validation, + s.validation_comment AS comment_validation, + s.digital_proof AS preuve_numerique_url, + s.non_digital_proof AS preuve_non_numerique, + d.dataset_name AS jdd_nom, + d.unique_dataset_id AS jdd_uuid, + d.id_dataset AS jdd_id, -- Utile pour le CRUVED + af.acquisition_framework_name AS ca_nom, + af.unique_acquisition_framework_id AS ca_uuid, + d.id_acquisition_framework AS ca_id, + s.cd_hab AS cd_habref, + hab.lb_code AS cd_habitat, + hab.lb_hab_fr AS nom_habitat, + s.precision as precision_geographique, + n1.label_default AS nature_objet_geo, + n2.label_default AS type_regroupement, + s.grp_method AS methode_regroupement, + n3.label_default AS technique_observation, + n5.label_default AS biologique_statut, + n6.label_default AS etat_biologique, + n22.label_default AS biogeographique_statut, + n7.label_default AS naturalite, + n8.label_default AS preuve_existante, + n9.label_default AS niveau_precision_diffusion, + n10.label_default AS stade_vie, + n11.label_default AS sexe, + n12.label_default AS objet_denombrement, + n13.label_default AS type_denombrement, + n14.label_default AS niveau_sensibilite, + n15.label_default AS statut_observation, + n16.label_default AS floutage_dee, + n17.label_default AS statut_source, + n18.label_default AS type_info_geo, + n19.label_default AS methode_determination, + n20.label_default AS comportement, + s.reference_biblio AS reference_biblio, + s.entity_source_pk_value AS id_origine, + s.unique_id_sinp AS uuid_perm_sinp, + s.unique_id_sinp_grp AS uuid_perm_grp_sinp, + s.meta_create_date AS date_creation, + s.meta_update_date AS date_modification, + s.additional_data as champs_additionnels, + COALESCE(s.meta_update_date, s.meta_create_date) AS derniere_action + FROM gn_synthese.synthese s + JOIN taxonomie.taxref t ON t.cd_nom = s.cd_nom + JOIN gn_meta.t_datasets d ON d.id_dataset = s.id_dataset + JOIN gn_meta.t_acquisition_frameworks af ON d.id_acquisition_framework = af.id_acquisition_framework + LEFT OUTER JOIN ( + SELECT id_synthese, string_agg(DISTINCT area_name, ', ') AS communes + FROM gn_synthese.cor_area_synthese cas + LEFT OUTER JOIN ref_geo.l_areas a_1 ON cas.id_area = a_1.id_area + JOIN ref_geo.bib_areas_types ta ON ta.id_type = a_1.id_type AND ta.type_code ='COM' + GROUP BY id_synthese + ) sa ON sa.id_synthese = s.id_synthese + LEFT JOIN ref_nomenclatures.t_nomenclatures n1 ON s.id_nomenclature_geo_object_nature = n1.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n2 ON s.id_nomenclature_grp_typ = n2.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n3 ON s.id_nomenclature_obs_technique = n3.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n6 ON s.id_nomenclature_bio_condition = n6.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n7 ON s.id_nomenclature_naturalness = n7.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n8 ON s.id_nomenclature_exist_proof = n8.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n9 ON s.id_nomenclature_diffusion_level = n9.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n11 ON s.id_nomenclature_sex = n11.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n12 ON s.id_nomenclature_obj_count = n12.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n13 ON s.id_nomenclature_type_count = n13.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n14 ON s.id_nomenclature_sensitivity = n14.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n15 ON s.id_nomenclature_observation_status = n15.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n16 ON s.id_nomenclature_blurring = n16.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n17 ON s.id_nomenclature_source_status = n17.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n18 ON s.id_nomenclature_info_geo_type = n18.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n19 ON s.id_nomenclature_determination_method = n19.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n20 ON s.id_nomenclature_behaviour = n20.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n21 ON s.id_nomenclature_valid_status = n21.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n22 ON s.id_nomenclature_biogeo_status = n22.id_nomenclature + LEFT JOIN ref_habitats.habref hab ON hab.cd_hab = s.cd_hab; + + + +-- Vue export des taxons de la synthèse +-- Première version qui reste à affiner/étoffer +DROP VIEW gn_synthese.v_synthese_taxon_for_export_view; +CREATE VIEW gn_synthese.v_synthese_taxon_for_export_view AS + SELECT DISTINCT + ref.nom_valide, + ref.cd_ref, + ref.nom_vern, + ref.group1_inpn, + ref.group2_inpn, + ref.regne, + ref.phylum, + ref.classe, + ref.ordre, + ref.famille, + ref.id_rang +FROM gn_synthese.synthese s +JOIN taxonomie.taxref t ON s.cd_nom = t.cd_nom +JOIN taxonomie.taxref ref ON t.cd_ref = ref.cd_nom; \ No newline at end of file diff --git a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py new file mode 100644 index 0000000000..4f7a56d30c --- /dev/null +++ b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py @@ -0,0 +1,30 @@ +"""add group3 inpn to synthese views + +Revision ID: 9f4db1786c22 +Revises: f1dd984bff97 +Create Date: 2023-07-21 14:15:23.311469 + +""" +import importlib +from alembic import op +from sqlalchemy.sql import text + +# revision identifiers, used by Alembic. +revision = '9f4db1786c22' +down_revision = 'f1dd984bff97' +branch_labels = None +depends_on = None + + +def upgrade(): + conn = op.get_bind() + path = "geonature.migrations.data.core" + filename = "synthese_view_export_add_group3_inpn.sql" + conn.execute(text(importlib.resources.read_text(path, filename))) + + +def downgrade(): + conn = op.get_bind() + path = "geonature.migrations.data.core" + filename = "synthese_view_export_remove_group3_inpn.sql" + conn.execute(text(importlib.resources.read_text(path, filename))) \ No newline at end of file From 03dbffa9966b14eb9caee305cf4f30a68ae1635f Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Fri, 21 Jul 2023 16:10:09 +0200 Subject: [PATCH 03/22] style: apply isort and black --- .../9f4db1786c22_add_group3_inpn_to_synthese_views.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py index 4f7a56d30c..6559779ee4 100644 --- a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py +++ b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py @@ -6,12 +6,13 @@ """ import importlib + from alembic import op from sqlalchemy.sql import text # revision identifiers, used by Alembic. -revision = '9f4db1786c22' -down_revision = 'f1dd984bff97' +revision = "9f4db1786c22" +down_revision = "f1dd984bff97" branch_labels = None depends_on = None @@ -27,4 +28,4 @@ def downgrade(): conn = op.get_bind() path = "geonature.migrations.data.core" filename = "synthese_view_export_remove_group3_inpn.sql" - conn.execute(text(importlib.resources.read_text(path, filename))) \ No newline at end of file + conn.execute(text(importlib.resources.read_text(path, filename))) From 30f62c7786655836c473fa32d25a8dc927add5f1 Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Tue, 1 Aug 2023 17:18:11 +0200 Subject: [PATCH 04/22] fix: depends on branch Reviewed-by: andriacap --- .../versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py index 6559779ee4..765d96a908 100644 --- a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py +++ b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py @@ -14,7 +14,7 @@ revision = "9f4db1786c22" down_revision = "f1dd984bff97" branch_labels = None -depends_on = None +depends_on = ("c4415009f164",) # Taxref v15 db structure def upgrade(): From 4b878e89b19f69c170175f2740a381d64fde55e2 Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Tue, 1 Aug 2023 18:19:16 +0200 Subject: [PATCH 05/22] test: change export columns test_synthese export Reviewed-by: andriacap --- backend/geonature/tests/test_synthese.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/geonature/tests/test_synthese.py b/backend/geonature/tests/test_synthese.py index a0e0607e98..9b3b37af52 100644 --- a/backend/geonature/tests/test_synthese.py +++ b/backend/geonature/tests/test_synthese.py @@ -623,6 +623,7 @@ def test_export_observations(self, users, synthese_data, synthese_sensitive_data '"date_creation"', '"date_modification"', '"champs_additionnels"', + '"group3_inpn"', ] def assert_export_results(user, expected_id_synthese_list): @@ -745,6 +746,7 @@ def test_export_taxons(self, users, synthese_data, synthese_sensitive_data): '"nb_obs"', '"date_min"', '"date_max"', + '"group3_inpn"', ] index_colummn_cd_ref = expected_columns_exports.index('"cd_ref"') From 7b765f47e673d5ba39922e314a7b0ab9c3fbb942 Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Thu, 10 Aug 2023 17:00:04 +0200 Subject: [PATCH 06/22] fix: test_export_taxons failed Reviewed-by: andriacap --- backend/geonature/tests/test_synthese.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/geonature/tests/test_synthese.py b/backend/geonature/tests/test_synthese.py index 9b3b37af52..e0c8ac98eb 100644 --- a/backend/geonature/tests/test_synthese.py +++ b/backend/geonature/tests/test_synthese.py @@ -743,10 +743,10 @@ def test_export_taxons(self, users, synthese_data, synthese_sensitive_data): '"ordre"', '"famille"', '"id_rang"', + '"group3_inpn"', '"nb_obs"', '"date_min"', '"date_max"', - '"group3_inpn"', ] index_colummn_cd_ref = expected_columns_exports.index('"cd_ref"') From 354d8cd044f3c9f6827c13aac671bd26c0622b5f Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Fri, 17 Nov 2023 12:01:21 +0100 Subject: [PATCH 07/22] refactor: change order col and archi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout des colonnes group3_inpn à la suite des autres colonnes Proposition de ré arrangement des fichiers sql Reviewed-by: andriacap --- .../migrations/data/core/gn_synthese/__init__.py | 0 .../synthese_view_export_add_group3_inpn.sql | 14 ++++++++------ .../synthese_view_export_remove_group3_inpn.sql | 0 ...4db1786c22_add_group3_inpn_to_synthese_views.py | 8 ++++---- 4 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 backend/geonature/migrations/data/core/gn_synthese/__init__.py rename backend/geonature/migrations/data/core/{ => gn_synthese}/synthese_view_export_add_group3_inpn.sql (95%) rename backend/geonature/migrations/data/core/{ => gn_synthese}/synthese_view_export_remove_group3_inpn.sql (100%) diff --git a/backend/geonature/migrations/data/core/gn_synthese/__init__.py b/backend/geonature/migrations/data/core/gn_synthese/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/backend/geonature/migrations/data/core/synthese_view_export_add_group3_inpn.sql b/backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_add_group3_inpn.sql similarity index 95% rename from backend/geonature/migrations/data/core/synthese_view_export_add_group3_inpn.sql rename to backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_add_group3_inpn.sql index 0a6436fc72..0bb674fa47 100644 --- a/backend/geonature/migrations/data/core/synthese_view_export_add_group3_inpn.sql +++ b/backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_add_group3_inpn.sql @@ -1,5 +1,6 @@ -- Vue listant les observations pour l'export de la Synthèse -CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export AS +DROP VIEW gn_synthese.v_synthese_for_export; +CREATE VIEW gn_synthese.v_synthese_for_export AS SELECT s.id_synthese AS id_synthese, s.date_min::date AS date_debut, @@ -14,6 +15,7 @@ CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export AS t.regne AS regne, t.group1_inpn AS group1_inpn, t.group2_inpn AS group2_inpn, + t.group3_inpn AS group3_inpn, t.classe AS classe, t.ordre AS ordre, t.famille AS famille, @@ -80,8 +82,7 @@ CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export AS s.meta_create_date AS date_creation, s.meta_update_date AS date_modification, s.additional_data as champs_additionnels, - COALESCE(s.meta_update_date, s.meta_create_date) AS derniere_action, - t.group3_inpn AS group3_inpn + COALESCE(s.meta_update_date, s.meta_create_date) AS derniere_action FROM gn_synthese.synthese s JOIN taxonomie.taxref t ON t.cd_nom = s.cd_nom JOIN gn_meta.t_datasets d ON d.id_dataset = s.id_dataset @@ -120,20 +121,21 @@ CREATE OR REPLACE VIEW gn_synthese.v_synthese_for_export AS -- Vue export des taxons de la synthèse -- Première version qui reste à affiner/étoffer -CREATE OR REPLACE VIEW gn_synthese.v_synthese_taxon_for_export_view AS +DROP VIEW gn_synthese.v_synthese_taxon_for_export_view; +CREATE VIEW gn_synthese.v_synthese_taxon_for_export_view AS SELECT DISTINCT ref.nom_valide, ref.cd_ref, ref.nom_vern, ref.group1_inpn, ref.group2_inpn, + ref.group3_inpn, ref.regne, ref.phylum, ref.classe, ref.ordre, ref.famille, - ref.id_rang, - ref.group3_inpn + ref.id_rang FROM gn_synthese.synthese s JOIN taxonomie.taxref t ON s.cd_nom = t.cd_nom JOIN taxonomie.taxref ref ON t.cd_ref = ref.cd_nom; \ No newline at end of file diff --git a/backend/geonature/migrations/data/core/synthese_view_export_remove_group3_inpn.sql b/backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_remove_group3_inpn.sql similarity index 100% rename from backend/geonature/migrations/data/core/synthese_view_export_remove_group3_inpn.sql rename to backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_remove_group3_inpn.sql diff --git a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py index 765d96a908..14de8358f5 100644 --- a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py +++ b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py @@ -1,7 +1,7 @@ """add group3 inpn to synthese views Revision ID: 9f4db1786c22 -Revises: f1dd984bff97 +Revises: 446e902a14e7 Create Date: 2023-07-21 14:15:23.311469 """ @@ -12,20 +12,20 @@ # revision identifiers, used by Alembic. revision = "9f4db1786c22" -down_revision = "f1dd984bff97" +down_revision = "446e902a14e7" branch_labels = None depends_on = ("c4415009f164",) # Taxref v15 db structure def upgrade(): conn = op.get_bind() - path = "geonature.migrations.data.core" + path = "geonature.migrations.data.core.gn_synthese" filename = "synthese_view_export_add_group3_inpn.sql" conn.execute(text(importlib.resources.read_text(path, filename))) def downgrade(): conn = op.get_bind() - path = "geonature.migrations.data.core" + path = "geonature.migrations.data.core.gn_synthese" filename = "synthese_view_export_remove_group3_inpn.sql" conn.execute(text(importlib.resources.read_text(path, filename))) From c8fcfac63981392ba9f379a60c0655365fbf1065 Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Fri, 17 Nov 2023 12:23:34 +0100 Subject: [PATCH 08/22] fix: make test passed (change column order) Reviewed-by: andriacap --- backend/geonature/tests/test_synthese.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/geonature/tests/test_synthese.py b/backend/geonature/tests/test_synthese.py index e0c8ac98eb..efce673ee3 100644 --- a/backend/geonature/tests/test_synthese.py +++ b/backend/geonature/tests/test_synthese.py @@ -560,6 +560,7 @@ def test_export_observations(self, users, synthese_data, synthese_sensitive_data '"regne"', '"group1_inpn"', '"group2_inpn"', + '"group3_inpn"', '"classe"', '"ordre"', '"famille"', @@ -623,7 +624,6 @@ def test_export_observations(self, users, synthese_data, synthese_sensitive_data '"date_creation"', '"date_modification"', '"champs_additionnels"', - '"group3_inpn"', ] def assert_export_results(user, expected_id_synthese_list): @@ -737,13 +737,13 @@ def test_export_taxons(self, users, synthese_data, synthese_sensitive_data): '"nom_vern"', '"group1_inpn"', '"group2_inpn"', + '"group3_inpn"', '"regne"', '"phylum"', '"classe"', '"ordre"', '"famille"', '"id_rang"', - '"group3_inpn"', '"nb_obs"', '"date_min"', '"date_max"', From 209ec3715bebdc4841280ce05cadd808e7f47221 Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Fri, 17 Nov 2023 12:25:30 +0100 Subject: [PATCH 09/22] style: apply prettier 3.0 --- .../frontend/app/services/occhab-map-list.service.ts | 5 +---- .../frontend/app/services/store.service.ts | 5 +---- .../frontend/app/services/data.service.ts | 5 +---- .../directive/display-mouse-over.directive.ts | 5 +---- .../areas-intersected-modal.component.ts | 5 +---- .../form/autocomplete/autocomplete.component.ts | 5 +---- .../src/app/GN2CommonModule/form/data-form.service.ts | 5 +---- .../form/datalist/datalist.component.ts | 5 +---- .../app/GN2CommonModule/form/date/date.component.ts | 5 +---- .../app/GN2CommonModule/form/date/period.component.ts | 5 +---- .../dynamic-form-generator/dynamic-form.service.ts | 5 +---- .../form/dynamic-form/dynamic-form.component.ts | 5 +---- .../app/GN2CommonModule/form/media/medias.component.ts | 5 +---- .../form/municipalities/municipalities.component.ts | 5 +---- .../form/nomenclature/nomenclature.component.ts | 5 +---- .../form/synthese-form/synthese-data.service.ts | 5 +---- .../app/GN2CommonModule/form/taxa/taxa.component.ts | 5 +---- .../form/taxonomy/taxonomy.component.ts | 5 +---- .../generic-filters/generic-filters.component.ts | 5 +---- .../app/GN2CommonModule/map-list/map-list.component.ts | 5 +---- .../app/GN2CommonModule/map-list/map-list.service.ts | 6 +----- .../map/filelayer/filelayer.component.ts | 5 +---- frontend/src/app/GN2CommonModule/map/map.component.ts | 5 +---- .../others/breadcrumbs/breadcrumbs.component.ts | 5 +---- .../src/app/GN2CommonModule/service/common.service.ts | 5 +---- frontend/src/app/adminModule/admin.component.ts | 5 +---- frontend/src/app/app.component.ts | 5 +---- .../notification/notification-data.service.ts | 5 +---- .../app/metadataModule/services/actor-form.service.ts | 5 +---- .../metadataModule/services/metadata-data.service.ts | 5 +---- .../services/metadata-search-form.service.ts | 5 +---- frontend/src/app/modules/login/routes-guard.service.ts | 10 ++-------- frontend/src/app/routing/auth-guard.service.ts | 5 +---- frontend/src/app/services/config.service.ts | 5 +---- frontend/src/app/services/module.service.ts | 5 +---- frontend/src/app/userModule/services/form.service.ts | 5 +---- .../src/app/userModule/services/user-data.service.ts | 5 +---- 37 files changed, 38 insertions(+), 153 deletions(-) diff --git a/contrib/gn_module_occhab/frontend/app/services/occhab-map-list.service.ts b/contrib/gn_module_occhab/frontend/app/services/occhab-map-list.service.ts index 624b4a1d65..a7cb90454d 100644 --- a/contrib/gn_module_occhab/frontend/app/services/occhab-map-list.service.ts +++ b/contrib/gn_module_occhab/frontend/app/services/occhab-map-list.service.ts @@ -8,10 +8,7 @@ import * as moment from 'moment'; export class OccHabMapListService { public searchForm: UntypedFormGroup; public mapListService: MapListService; - constructor( - private _fb: UntypedFormBuilder, - private _occHabDataService: OccHabDataService - ) { + constructor(private _fb: UntypedFormBuilder, private _occHabDataService: OccHabDataService) { this.searchForm = this._fb.group({ id_dataset: null, date_low: null, diff --git a/contrib/gn_module_occhab/frontend/app/services/store.service.ts b/contrib/gn_module_occhab/frontend/app/services/store.service.ts index 63f92b9f11..2d547a321c 100644 --- a/contrib/gn_module_occhab/frontend/app/services/store.service.ts +++ b/contrib/gn_module_occhab/frontend/app/services/store.service.ts @@ -13,10 +13,7 @@ export class OcchabStoreService { public idsStation: Array; private _defaultNomenclature$: BehaviorSubject = new BehaviorSubject(null); public defaultNomenclature$: Observable = this._defaultNomenclature$.asObservable(); - constructor( - private _gnDataService: DataFormService, - public config: ConfigService - ) { + constructor(private _gnDataService: DataFormService, public config: ConfigService) { this._gnDataService .getNomenclatures([ 'METHOD_CALCUL_SURFACE', diff --git a/contrib/gn_module_validation/frontend/app/services/data.service.ts b/contrib/gn_module_validation/frontend/app/services/data.service.ts index bc93c988c2..78aafb26c6 100644 --- a/contrib/gn_module_validation/frontend/app/services/data.service.ts +++ b/contrib/gn_module_validation/frontend/app/services/data.service.ts @@ -7,10 +7,7 @@ import { ConfigService } from '@geonature/services/config.service'; export class ValidationDataService { public dataLoaded: Boolean = false; - constructor( - private _http: HttpClient, - public config: ConfigService - ) {} + constructor(private _http: HttpClient, public config: ConfigService) {} getSyntheseData(params) { return this._http.post(`${this.config.API_ENDPOINT}/validation`, params); diff --git a/frontend/src/app/GN2CommonModule/directive/display-mouse-over.directive.ts b/frontend/src/app/GN2CommonModule/directive/display-mouse-over.directive.ts index 6fee5c66d6..3afafe573a 100644 --- a/frontend/src/app/GN2CommonModule/directive/display-mouse-over.directive.ts +++ b/frontend/src/app/GN2CommonModule/directive/display-mouse-over.directive.ts @@ -12,10 +12,7 @@ export class DisplayMouseOverDirective { private _defaultSelector = '.btn'; private el: HTMLElement; - constructor( - el: ElementRef, - private renderer: Renderer2 - ) { + constructor(el: ElementRef, private renderer: Renderer2) { this.el = el.nativeElement; } diff --git a/frontend/src/app/GN2CommonModule/form/areas-intersected/areas-intersected-modal.component.ts b/frontend/src/app/GN2CommonModule/form/areas-intersected/areas-intersected-modal.component.ts index de21c04cc5..d28374c716 100644 --- a/frontend/src/app/GN2CommonModule/form/areas-intersected/areas-intersected-modal.component.ts +++ b/frontend/src/app/GN2CommonModule/form/areas-intersected/areas-intersected-modal.component.ts @@ -8,10 +8,7 @@ import { DataFormService } from '@geonature_common/form/data-form.service'; export class AreasIntersectedComponent implements OnInit, OnChanges { @Input() geojson: Array; public areasIntersected = new Array(); - constructor( - private _modalService: NgbModal, - private _dfs: DataFormService - ) {} + constructor(private _modalService: NgbModal, private _dfs: DataFormService) {} ngOnInit() {} diff --git a/frontend/src/app/GN2CommonModule/form/autocomplete/autocomplete.component.ts b/frontend/src/app/GN2CommonModule/form/autocomplete/autocomplete.component.ts index f31c5ab1f8..d77f071d51 100644 --- a/frontend/src/app/GN2CommonModule/form/autocomplete/autocomplete.component.ts +++ b/frontend/src/app/GN2CommonModule/form/autocomplete/autocomplete.component.ts @@ -62,10 +62,7 @@ export class AutoCompleteComponent implements OnInit { public isLoading: boolean; public noResult: boolean; - constructor( - private _api: HttpClient, - private _commonService: CommonService - ) {} + constructor(private _api: HttpClient, private _commonService: CommonService) {} ngOnInit() { this.parentFormControl.valueChanges diff --git a/frontend/src/app/GN2CommonModule/form/data-form.service.ts b/frontend/src/app/GN2CommonModule/form/data-form.service.ts index fc305bccef..b387b24fcc 100644 --- a/frontend/src/app/GN2CommonModule/form/data-form.service.ts +++ b/frontend/src/app/GN2CommonModule/form/data-form.service.ts @@ -26,10 +26,7 @@ export const FormatMapMime = new Map([ @Injectable() export class DataFormService { private _blob: Blob; - constructor( - private _http: HttpClient, - public config: ConfigService - ) {} + constructor(private _http: HttpClient, public config: ConfigService) {} getNomenclature( codeNomenclatureType: string, diff --git a/frontend/src/app/GN2CommonModule/form/datalist/datalist.component.ts b/frontend/src/app/GN2CommonModule/form/datalist/datalist.component.ts index 38aacede08..9f47d34849 100644 --- a/frontend/src/app/GN2CommonModule/form/datalist/datalist.component.ts +++ b/frontend/src/app/GN2CommonModule/form/datalist/datalist.component.ts @@ -43,10 +43,7 @@ export class DatalistComponent extends GenericFormComponent implements OnInit { search = ''; filteredValues; - constructor( - private _dfs: DataFormService, - private _commonService: CommonService - ) { + constructor(private _dfs: DataFormService, private _commonService: CommonService) { super(); } diff --git a/frontend/src/app/GN2CommonModule/form/date/date.component.ts b/frontend/src/app/GN2CommonModule/form/date/date.component.ts index 44aaebacf2..cc2b314f36 100644 --- a/frontend/src/app/GN2CommonModule/form/date/date.component.ts +++ b/frontend/src/app/GN2CommonModule/form/date/date.component.ts @@ -54,10 +54,7 @@ export class DateComponent implements OnInit, OnDestroy { public changeSub: Subscription; public today: DateStruc; - constructor( - myElement: ElementRef, - private _dateParser: NgbDateParserFormatter - ) { + constructor(myElement: ElementRef, private _dateParser: NgbDateParserFormatter) { this.elementRef = myElement; this.initializeDates(); } diff --git a/frontend/src/app/GN2CommonModule/form/date/period.component.ts b/frontend/src/app/GN2CommonModule/form/date/period.component.ts index a2d547d8b8..66ce927cb6 100644 --- a/frontend/src/app/GN2CommonModule/form/date/period.component.ts +++ b/frontend/src/app/GN2CommonModule/form/date/period.component.ts @@ -14,10 +14,7 @@ import { DateComponent } from './date.component'; export class PeriodComponent extends DateComponent implements OnInit { public elementRef: ElementRef; - constructor( - myElement: ElementRef, - public dateParser: NgbDateParserFormatter - ) { + constructor(myElement: ElementRef, public dateParser: NgbDateParserFormatter) { super(myElement, dateParser); } diff --git a/frontend/src/app/GN2CommonModule/form/dynamic-form-generator/dynamic-form.service.ts b/frontend/src/app/GN2CommonModule/form/dynamic-form-generator/dynamic-form.service.ts index 30bb49ce47..2119469415 100644 --- a/frontend/src/app/GN2CommonModule/form/dynamic-form-generator/dynamic-form.service.ts +++ b/frontend/src/app/GN2CommonModule/form/dynamic-form-generator/dynamic-form.service.ts @@ -15,10 +15,7 @@ import { MediaService } from '@geonature_common/service/media.service'; @Injectable() export class DynamicFormService { - constructor( - private _mediaService: MediaService, - private _formBuilder: UntypedFormBuilder - ) {} + constructor(private _mediaService: MediaService, private _formBuilder: UntypedFormBuilder) {} initFormGroup() { return this._formBuilder.group({}); diff --git a/frontend/src/app/GN2CommonModule/form/dynamic-form/dynamic-form.component.ts b/frontend/src/app/GN2CommonModule/form/dynamic-form/dynamic-form.component.ts index a9974a841b..1969b201e4 100644 --- a/frontend/src/app/GN2CommonModule/form/dynamic-form/dynamic-form.component.ts +++ b/frontend/src/app/GN2CommonModule/form/dynamic-form/dynamic-form.component.ts @@ -33,10 +33,7 @@ export class DynamicFormComponent implements OnInit, OnChanges, OnDestroy { public isValInSelectList: boolean = true; private _sub: Subscription; - constructor( - private _dynformService: DynamicFormService, - public config: ConfigService - ) {} + constructor(private _dynformService: DynamicFormService, public config: ConfigService) {} ngOnInit() { this.setFormDefComp(true); diff --git a/frontend/src/app/GN2CommonModule/form/media/medias.component.ts b/frontend/src/app/GN2CommonModule/form/media/medias.component.ts index b11b6db1c1..1e11ab50fb 100644 --- a/frontend/src/app/GN2CommonModule/form/media/medias.component.ts +++ b/frontend/src/app/GN2CommonModule/form/media/medias.component.ts @@ -28,10 +28,7 @@ export class MediasComponent implements OnInit { public bInitialized: boolean; - constructor( - public ms: MediaService, - public config: ConfigService - ) {} + constructor(public ms: MediaService, public config: ConfigService) {} ngOnInit() { this.ms.getNomenclatures().subscribe(() => { diff --git a/frontend/src/app/GN2CommonModule/form/municipalities/municipalities.component.ts b/frontend/src/app/GN2CommonModule/form/municipalities/municipalities.component.ts index 0287f9ca87..22397b7975 100644 --- a/frontend/src/app/GN2CommonModule/form/municipalities/municipalities.component.ts +++ b/frontend/src/app/GN2CommonModule/form/municipalities/municipalities.component.ts @@ -26,10 +26,7 @@ export class MunicipalitiesComponent implements OnInit { /** * @deprecated Do not use this input */ @Input() debounceTime: number; - constructor( - private _dfs: DataFormService, - private _commonService: CommonService - ) {} + constructor(private _dfs: DataFormService, private _commonService: CommonService) {} ngOnInit() {} } diff --git a/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts b/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts index c334cfbc38..f76914b402 100644 --- a/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts +++ b/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts @@ -78,10 +78,7 @@ export class NomenclatureComponent @Input() cdNomenclatures: Array = []; @Output() labelsLoaded = new EventEmitter>(); - constructor( - private _dfService: DataFormService, - private _translate: TranslateService - ) { + constructor(private _dfService: DataFormService, private _translate: TranslateService) { super(); } diff --git a/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-data.service.ts b/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-data.service.ts index f63db135a4..961ddad133 100644 --- a/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-data.service.ts +++ b/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-data.service.ts @@ -24,10 +24,7 @@ export class SyntheseDataService { public isDownloading: Boolean = false; public downloadProgress: BehaviorSubject; private _blob: Blob; - constructor( - private _api: HttpClient, - public config: ConfigService - ) { + constructor(private _api: HttpClient, public config: ConfigService) { this.downloadProgress = >new BehaviorSubject(0.0); } diff --git a/frontend/src/app/GN2CommonModule/form/taxa/taxa.component.ts b/frontend/src/app/GN2CommonModule/form/taxa/taxa.component.ts index b9494ad217..edc8fb288a 100644 --- a/frontend/src/app/GN2CommonModule/form/taxa/taxa.component.ts +++ b/frontend/src/app/GN2CommonModule/form/taxa/taxa.component.ts @@ -63,10 +63,7 @@ export class TaxaComponent implements OnInit { @Input() disabled: boolean = false; /** @ignore */ - constructor( - private dataService: DataFormService, - private commonService: CommonService - ) {} + constructor(private dataService: DataFormService, private commonService: CommonService) {} ngOnInit() { this.taxa = []; diff --git a/frontend/src/app/GN2CommonModule/form/taxonomy/taxonomy.component.ts b/frontend/src/app/GN2CommonModule/form/taxonomy/taxonomy.component.ts index cb722f31a4..103d42c2cb 100644 --- a/frontend/src/app/GN2CommonModule/form/taxonomy/taxonomy.component.ts +++ b/frontend/src/app/GN2CommonModule/form/taxonomy/taxonomy.component.ts @@ -90,10 +90,7 @@ export class TaxonomyComponent implements OnInit, OnChanges { @Output() onDelete = new EventEmitter(); public isCollapseTaxonomy = true; - constructor( - private _dfService: DataFormService, - public config: ConfigService - ) {} + constructor(private _dfService: DataFormService, public config: ConfigService) {} ngOnInit() { if (!this.apiEndPoint) { diff --git a/frontend/src/app/GN2CommonModule/map-list/generic-filters/generic-filters.component.ts b/frontend/src/app/GN2CommonModule/map-list/generic-filters/generic-filters.component.ts index d75967e9cd..bbd2f0b3e0 100644 --- a/frontend/src/app/GN2CommonModule/map-list/generic-filters/generic-filters.component.ts +++ b/frontend/src/app/GN2CommonModule/map-list/generic-filters/generic-filters.component.ts @@ -14,10 +14,7 @@ export class MapListGenericFiltersComponent implements OnInit { @Input() filterableColumns: Array; @Input() apiEndPoint: string; public colSelected: any; - constructor( - public mapListService: MapListService, - private _commonService: CommonService - ) {} + constructor(public mapListService: MapListService, private _commonService: CommonService) {} ngOnInit() { this.mapListService.genericFilterInput.valueChanges diff --git a/frontend/src/app/GN2CommonModule/map-list/map-list.component.ts b/frontend/src/app/GN2CommonModule/map-list/map-list.component.ts index b94fa96228..24ae108553 100644 --- a/frontend/src/app/GN2CommonModule/map-list/map-list.component.ts +++ b/frontend/src/app/GN2CommonModule/map-list/map-list.component.ts @@ -22,10 +22,7 @@ export class MapListComponent implements OnInit, AfterViewInit { @Input() idName: string; @Input() zoomOnLayer = true; - constructor( - private _ms: MapService, - public mapListService: MapListService - ) {} + constructor(private _ms: MapService, public mapListService: MapListService) {} ngOnInit() { // set the idName in the service diff --git a/frontend/src/app/GN2CommonModule/map-list/map-list.service.ts b/frontend/src/app/GN2CommonModule/map-list/map-list.service.ts index 8378a043aa..697293bd69 100644 --- a/frontend/src/app/GN2CommonModule/map-list/map-list.service.ts +++ b/frontend/src/app/GN2CommonModule/map-list/map-list.service.ts @@ -53,11 +53,7 @@ export class MapListService { fill: true, }; - constructor( - private _http: HttpClient, - private _ms: MapService, - public config: ConfigService - ) { + constructor(private _http: HttpClient, private _ms: MapService, public config: ConfigService) { this.columns = []; this.page.pageNumber = 0; this.page.size = 12; diff --git a/frontend/src/app/GN2CommonModule/map/filelayer/filelayer.component.ts b/frontend/src/app/GN2CommonModule/map/filelayer/filelayer.component.ts index 31893c1e8c..5ec7baf1ae 100644 --- a/frontend/src/app/GN2CommonModule/map/filelayer/filelayer.component.ts +++ b/frontend/src/app/GN2CommonModule/map/filelayer/filelayer.component.ts @@ -34,10 +34,7 @@ export class LeafletFileLayerComponent implements OnInit, AfterViewInit, OnChang @Input() style; @Output() onLoad = new EventEmitter(); @Output() onGeomChange = new EventEmitter(); - constructor( - public mapService: MapService, - private _toasterService: ToastrService - ) {} + constructor(public mapService: MapService, private _toasterService: ToastrService) {} ngOnInit() { this.style = this.style || this.mapService.searchStyle; diff --git a/frontend/src/app/GN2CommonModule/map/map.component.ts b/frontend/src/app/GN2CommonModule/map/map.component.ts index 3824d097a9..cbd42d3976 100644 --- a/frontend/src/app/GN2CommonModule/map/map.component.ts +++ b/frontend/src/app/GN2CommonModule/map/map.component.ts @@ -25,10 +25,7 @@ const NOMINATIM_URL = 'https://nominatim.openstreetmap.org/search'; export class NominatimService { PARAMS = null; - constructor( - private http: HttpClient, - public config: ConfigService - ) { + constructor(private http: HttpClient, public config: ConfigService) { this.PARAMS = new HttpParams({ fromObject: { format: 'json', diff --git a/frontend/src/app/GN2CommonModule/others/breadcrumbs/breadcrumbs.component.ts b/frontend/src/app/GN2CommonModule/others/breadcrumbs/breadcrumbs.component.ts index a346c66fe7..22d50717e1 100644 --- a/frontend/src/app/GN2CommonModule/others/breadcrumbs/breadcrumbs.component.ts +++ b/frontend/src/app/GN2CommonModule/others/breadcrumbs/breadcrumbs.component.ts @@ -40,10 +40,7 @@ export class BreadcrumbsComponent implements OnInit { @Input() previousRoutes: Array = []; // Areas id_type public breadcrumbs: IBreadCrumb[]; - constructor( - private router: Router, - private activatedRoute: ActivatedRoute - ) { + constructor(private router: Router, private activatedRoute: ActivatedRoute) { this.breadcrumbs = this.buildBreadCrumb({ route: this.activatedRoute.root }); } diff --git a/frontend/src/app/GN2CommonModule/service/common.service.ts b/frontend/src/app/GN2CommonModule/service/common.service.ts index 77c2d47bac..291ff873cc 100644 --- a/frontend/src/app/GN2CommonModule/service/common.service.ts +++ b/frontend/src/app/GN2CommonModule/service/common.service.ts @@ -4,10 +4,7 @@ import { TranslateService } from '@ngx-translate/core'; @Injectable() export class CommonService { - constructor( - private toastrService: ToastrService, - private translate: TranslateService - ) {} + constructor(private toastrService: ToastrService, private translate: TranslateService) {} /** pour ne pas afficher plusieurs fois le meme message * (par ex quand on ) zomme sur la carte avant la saisie */ diff --git a/frontend/src/app/adminModule/admin.component.ts b/frontend/src/app/adminModule/admin.component.ts index a14788a21e..5929957e61 100644 --- a/frontend/src/app/adminModule/admin.component.ts +++ b/frontend/src/app/adminModule/admin.component.ts @@ -11,10 +11,7 @@ import { ConfigService } from '@geonature/services/config.service'; export class AdminComponent implements OnInit { URL_ADMIN = null; - constructor( - public _cruvedStore: CruvedStoreService, - public config: ConfigService - ) { + constructor(public _cruvedStore: CruvedStoreService, public config: ConfigService) { this.URL_ADMIN = this.config.API_ENDPOINT + '/admin/'; } diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts index 5ab0b43673..ab6d058dfe 100644 --- a/frontend/src/app/app.component.ts +++ b/frontend/src/app/app.component.ts @@ -12,10 +12,7 @@ import { ConfigService } from './services/config.service'; styleUrls: ['./app.component.scss'], }) export class AppComponent implements OnInit { - constructor( - private translate: TranslateService, - public config: ConfigService - ) { + constructor(private translate: TranslateService, public config: ConfigService) { // Register all locales (default 'en') used by GeoNature for Angular Pipes registerLocaleData(localeFr, 'fr'); registerLocaleData(localeZh, 'zh'); diff --git a/frontend/src/app/components/notification/notification-data.service.ts b/frontend/src/app/components/notification/notification-data.service.ts index f47623448b..c60c3d2b37 100644 --- a/frontend/src/app/components/notification/notification-data.service.ts +++ b/frontend/src/app/components/notification/notification-data.service.ts @@ -40,10 +40,7 @@ export interface NotificationRule { @Injectable() export class NotificationDataService { - constructor( - private _api: HttpClient, - public config: ConfigService - ) {} + constructor(private _api: HttpClient, public config: ConfigService) {} // returns notifications content for this user getNotifications(): Observable { diff --git a/frontend/src/app/metadataModule/services/actor-form.service.ts b/frontend/src/app/metadataModule/services/actor-form.service.ts index 016edf23f4..ec34397690 100644 --- a/frontend/src/app/metadataModule/services/actor-form.service.ts +++ b/frontend/src/app/metadataModule/services/actor-form.service.ts @@ -45,10 +45,7 @@ export class ActorFormService { return this._role_types.getValue().find((e) => e.id_nomenclature == id); } - constructor( - private fb: UntypedFormBuilder, - private dfs: DataFormService - ) { + constructor(private fb: UntypedFormBuilder, private dfs: DataFormService) { this.dfs.getOrganisms().subscribe((organisms: any[]) => this._organisms.next(organisms)); this.dfs.getRoles({ group: false }).subscribe((roles: any[]) => this._roles.next(roles)); diff --git a/frontend/src/app/metadataModule/services/metadata-data.service.ts b/frontend/src/app/metadataModule/services/metadata-data.service.ts index d011d297f9..7db1661f0e 100644 --- a/frontend/src/app/metadataModule/services/metadata-data.service.ts +++ b/frontend/src/app/metadataModule/services/metadata-data.service.ts @@ -6,10 +6,7 @@ import { ConfigService } from '@geonature/services/config.service'; providedIn: 'root', }) export class MetadataDataService { - constructor( - private _api: HttpClient, - public config: ConfigService - ) {} + constructor(private _api: HttpClient, public config: ConfigService) {} createAF(value) { return this._api.post(`${this.config.API_ENDPOINT}/meta/acquisition_framework`, value); diff --git a/frontend/src/app/metadataModule/services/metadata-search-form.service.ts b/frontend/src/app/metadataModule/services/metadata-search-form.service.ts index abe53953a9..19a455f08c 100644 --- a/frontend/src/app/metadataModule/services/metadata-search-form.service.ts +++ b/frontend/src/app/metadataModule/services/metadata-search-form.service.ts @@ -5,10 +5,7 @@ import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; export class MetadataSearchFormService { public form: UntypedFormGroup; public rapidSearchControl: UntypedFormControl; - constructor( - private _fb: UntypedFormBuilder, - public dateParser: NgbDateParserFormatter - ) { + constructor(private _fb: UntypedFormBuilder, public dateParser: NgbDateParserFormatter) { this.form = this._fb.group({ selector: 'ds', uuid: null, diff --git a/frontend/src/app/modules/login/routes-guard.service.ts b/frontend/src/app/modules/login/routes-guard.service.ts index 58cdce1e78..c0a8c62f0b 100644 --- a/frontend/src/app/modules/login/routes-guard.service.ts +++ b/frontend/src/app/modules/login/routes-guard.service.ts @@ -6,10 +6,7 @@ import { ConfigService } from '@geonature/services/config.service'; @Injectable() export class SignUpGuard implements CanActivate { - constructor( - private _router: Router, - public config: ConfigService - ) {} + constructor(private _router: Router, public config: ConfigService) {} canActivate() { if (this.config['ACCOUNT_MANAGEMENT']['ENABLE_SIGN_UP'] || false) { @@ -23,10 +20,7 @@ export class SignUpGuard implements CanActivate { @Injectable() export class UserManagementGuard implements CanActivate { - constructor( - private _router: Router, - public config: ConfigService - ) {} + constructor(private _router: Router, public config: ConfigService) {} canActivate() { if (this.config['ACCOUNT_MANAGEMENT']['ENABLE_USER_MANAGEMENT'] || false) { diff --git a/frontend/src/app/routing/auth-guard.service.ts b/frontend/src/app/routing/auth-guard.service.ts index a5d3db3406..a733cb9f74 100644 --- a/frontend/src/app/routing/auth-guard.service.ts +++ b/frontend/src/app/routing/auth-guard.service.ts @@ -13,10 +13,7 @@ import { RoutingService } from './routing.service'; @Injectable() export class AuthGuard implements CanActivate, CanActivateChild { - constructor( - private _router: Router, - private _injector: Injector - ) {} + constructor(private _router: Router, private _injector: Injector) {} async redirectAuth(route, state) { const authService = this._injector.get(AuthService); diff --git a/frontend/src/app/services/config.service.ts b/frontend/src/app/services/config.service.ts index 0c2f38dcbf..ba66581e1b 100644 --- a/frontend/src/app/services/config.service.ts +++ b/frontend/src/app/services/config.service.ts @@ -10,10 +10,7 @@ class Config { @Injectable() export class ConfigService extends Config { - constructor( - private _http: HttpClient, - private _toaster: ToastrService - ) { + constructor(private _http: HttpClient, private _toaster: ToastrService) { super(); } diff --git a/frontend/src/app/services/module.service.ts b/frontend/src/app/services/module.service.ts index 292aee5520..3fde1b980a 100644 --- a/frontend/src/app/services/module.service.ts +++ b/frontend/src/app/services/module.service.ts @@ -27,10 +27,7 @@ export class ModuleService { }); } - constructor( - private _api: DataFormService, - private _router: Router - ) {} + constructor(private _api: DataFormService, private _router: Router) {} loadModules(): Observable { return this._api.getModulesList([]).pipe( diff --git a/frontend/src/app/userModule/services/form.service.ts b/frontend/src/app/userModule/services/form.service.ts index afda4d2f32..1ad88bd006 100644 --- a/frontend/src/app/userModule/services/form.service.ts +++ b/frontend/src/app/userModule/services/form.service.ts @@ -18,10 +18,7 @@ export interface Role { export class RoleFormService { private roleForm: UntypedFormGroup; - constructor( - private fb: UntypedFormBuilder, - private dataService: DataFormService - ) { + constructor(private fb: UntypedFormBuilder, private dataService: DataFormService) { this.setForm(); } diff --git a/frontend/src/app/userModule/services/user-data.service.ts b/frontend/src/app/userModule/services/user-data.service.ts index e18ef7b857..1f8520df63 100644 --- a/frontend/src/app/userModule/services/user-data.service.ts +++ b/frontend/src/app/userModule/services/user-data.service.ts @@ -7,10 +7,7 @@ import { ConfigService } from '@geonature/services/config.service'; @Injectable() export class UserDataService { - constructor( - private _http: HttpClient, - public config: ConfigService - ) {} + constructor(private _http: HttpClient, public config: ConfigService) {} getRole(id: number) { return this._http.get(`${this.config.API_ENDPOINT}/users/role/${id}`); From ea73c1adb7bc89db2670c68d762b27d0f379b1aa Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Fri, 17 Nov 2023 12:33:25 +0100 Subject: [PATCH 10/22] style: apply prettier again --- .../frontend/app/services/occhab-map-list.service.ts | 5 ++++- .../frontend/app/services/store.service.ts | 5 ++++- .../frontend/app/services/data.service.ts | 5 ++++- .../directive/display-mouse-over.directive.ts | 5 ++++- .../areas-intersected-modal.component.ts | 5 ++++- .../form/autocomplete/autocomplete.component.ts | 5 ++++- .../src/app/GN2CommonModule/form/data-form.service.ts | 5 ++++- .../form/datalist/datalist.component.ts | 5 ++++- .../app/GN2CommonModule/form/date/date.component.ts | 5 ++++- .../app/GN2CommonModule/form/date/period.component.ts | 5 ++++- .../dynamic-form-generator/dynamic-form.service.ts | 5 ++++- .../form/dynamic-form/dynamic-form.component.ts | 5 ++++- .../app/GN2CommonModule/form/media/medias.component.ts | 5 ++++- .../form/municipalities/municipalities.component.ts | 5 ++++- .../form/nomenclature/nomenclature.component.ts | 5 ++++- .../form/synthese-form/synthese-data.service.ts | 5 ++++- .../app/GN2CommonModule/form/taxa/taxa.component.ts | 5 ++++- .../form/taxonomy/taxonomy.component.ts | 5 ++++- .../generic-filters/generic-filters.component.ts | 5 ++++- .../app/GN2CommonModule/map-list/map-list.component.ts | 5 ++++- .../app/GN2CommonModule/map-list/map-list.service.ts | 6 +++++- .../map/filelayer/filelayer.component.ts | 5 ++++- frontend/src/app/GN2CommonModule/map/map.component.ts | 5 ++++- .../others/breadcrumbs/breadcrumbs.component.ts | 5 ++++- .../src/app/GN2CommonModule/service/common.service.ts | 5 ++++- frontend/src/app/adminModule/admin.component.ts | 5 ++++- frontend/src/app/app.component.ts | 5 ++++- .../notification/notification-data.service.ts | 5 ++++- .../app/metadataModule/services/actor-form.service.ts | 5 ++++- .../metadataModule/services/metadata-data.service.ts | 5 ++++- .../services/metadata-search-form.service.ts | 5 ++++- frontend/src/app/modules/login/routes-guard.service.ts | 10 ++++++++-- frontend/src/app/routing/auth-guard.service.ts | 5 ++++- frontend/src/app/services/config.service.ts | 5 ++++- frontend/src/app/services/module.service.ts | 5 ++++- frontend/src/app/userModule/services/form.service.ts | 5 ++++- .../src/app/userModule/services/user-data.service.ts | 5 ++++- 37 files changed, 153 insertions(+), 38 deletions(-) diff --git a/contrib/gn_module_occhab/frontend/app/services/occhab-map-list.service.ts b/contrib/gn_module_occhab/frontend/app/services/occhab-map-list.service.ts index a7cb90454d..624b4a1d65 100644 --- a/contrib/gn_module_occhab/frontend/app/services/occhab-map-list.service.ts +++ b/contrib/gn_module_occhab/frontend/app/services/occhab-map-list.service.ts @@ -8,7 +8,10 @@ import * as moment from 'moment'; export class OccHabMapListService { public searchForm: UntypedFormGroup; public mapListService: MapListService; - constructor(private _fb: UntypedFormBuilder, private _occHabDataService: OccHabDataService) { + constructor( + private _fb: UntypedFormBuilder, + private _occHabDataService: OccHabDataService + ) { this.searchForm = this._fb.group({ id_dataset: null, date_low: null, diff --git a/contrib/gn_module_occhab/frontend/app/services/store.service.ts b/contrib/gn_module_occhab/frontend/app/services/store.service.ts index 2d547a321c..63f92b9f11 100644 --- a/contrib/gn_module_occhab/frontend/app/services/store.service.ts +++ b/contrib/gn_module_occhab/frontend/app/services/store.service.ts @@ -13,7 +13,10 @@ export class OcchabStoreService { public idsStation: Array; private _defaultNomenclature$: BehaviorSubject = new BehaviorSubject(null); public defaultNomenclature$: Observable = this._defaultNomenclature$.asObservable(); - constructor(private _gnDataService: DataFormService, public config: ConfigService) { + constructor( + private _gnDataService: DataFormService, + public config: ConfigService + ) { this._gnDataService .getNomenclatures([ 'METHOD_CALCUL_SURFACE', diff --git a/contrib/gn_module_validation/frontend/app/services/data.service.ts b/contrib/gn_module_validation/frontend/app/services/data.service.ts index 78aafb26c6..bc93c988c2 100644 --- a/contrib/gn_module_validation/frontend/app/services/data.service.ts +++ b/contrib/gn_module_validation/frontend/app/services/data.service.ts @@ -7,7 +7,10 @@ import { ConfigService } from '@geonature/services/config.service'; export class ValidationDataService { public dataLoaded: Boolean = false; - constructor(private _http: HttpClient, public config: ConfigService) {} + constructor( + private _http: HttpClient, + public config: ConfigService + ) {} getSyntheseData(params) { return this._http.post(`${this.config.API_ENDPOINT}/validation`, params); diff --git a/frontend/src/app/GN2CommonModule/directive/display-mouse-over.directive.ts b/frontend/src/app/GN2CommonModule/directive/display-mouse-over.directive.ts index 3afafe573a..6fee5c66d6 100644 --- a/frontend/src/app/GN2CommonModule/directive/display-mouse-over.directive.ts +++ b/frontend/src/app/GN2CommonModule/directive/display-mouse-over.directive.ts @@ -12,7 +12,10 @@ export class DisplayMouseOverDirective { private _defaultSelector = '.btn'; private el: HTMLElement; - constructor(el: ElementRef, private renderer: Renderer2) { + constructor( + el: ElementRef, + private renderer: Renderer2 + ) { this.el = el.nativeElement; } diff --git a/frontend/src/app/GN2CommonModule/form/areas-intersected/areas-intersected-modal.component.ts b/frontend/src/app/GN2CommonModule/form/areas-intersected/areas-intersected-modal.component.ts index d28374c716..de21c04cc5 100644 --- a/frontend/src/app/GN2CommonModule/form/areas-intersected/areas-intersected-modal.component.ts +++ b/frontend/src/app/GN2CommonModule/form/areas-intersected/areas-intersected-modal.component.ts @@ -8,7 +8,10 @@ import { DataFormService } from '@geonature_common/form/data-form.service'; export class AreasIntersectedComponent implements OnInit, OnChanges { @Input() geojson: Array; public areasIntersected = new Array(); - constructor(private _modalService: NgbModal, private _dfs: DataFormService) {} + constructor( + private _modalService: NgbModal, + private _dfs: DataFormService + ) {} ngOnInit() {} diff --git a/frontend/src/app/GN2CommonModule/form/autocomplete/autocomplete.component.ts b/frontend/src/app/GN2CommonModule/form/autocomplete/autocomplete.component.ts index d77f071d51..f31c5ab1f8 100644 --- a/frontend/src/app/GN2CommonModule/form/autocomplete/autocomplete.component.ts +++ b/frontend/src/app/GN2CommonModule/form/autocomplete/autocomplete.component.ts @@ -62,7 +62,10 @@ export class AutoCompleteComponent implements OnInit { public isLoading: boolean; public noResult: boolean; - constructor(private _api: HttpClient, private _commonService: CommonService) {} + constructor( + private _api: HttpClient, + private _commonService: CommonService + ) {} ngOnInit() { this.parentFormControl.valueChanges diff --git a/frontend/src/app/GN2CommonModule/form/data-form.service.ts b/frontend/src/app/GN2CommonModule/form/data-form.service.ts index b387b24fcc..fc305bccef 100644 --- a/frontend/src/app/GN2CommonModule/form/data-form.service.ts +++ b/frontend/src/app/GN2CommonModule/form/data-form.service.ts @@ -26,7 +26,10 @@ export const FormatMapMime = new Map([ @Injectable() export class DataFormService { private _blob: Blob; - constructor(private _http: HttpClient, public config: ConfigService) {} + constructor( + private _http: HttpClient, + public config: ConfigService + ) {} getNomenclature( codeNomenclatureType: string, diff --git a/frontend/src/app/GN2CommonModule/form/datalist/datalist.component.ts b/frontend/src/app/GN2CommonModule/form/datalist/datalist.component.ts index 9f47d34849..38aacede08 100644 --- a/frontend/src/app/GN2CommonModule/form/datalist/datalist.component.ts +++ b/frontend/src/app/GN2CommonModule/form/datalist/datalist.component.ts @@ -43,7 +43,10 @@ export class DatalistComponent extends GenericFormComponent implements OnInit { search = ''; filteredValues; - constructor(private _dfs: DataFormService, private _commonService: CommonService) { + constructor( + private _dfs: DataFormService, + private _commonService: CommonService + ) { super(); } diff --git a/frontend/src/app/GN2CommonModule/form/date/date.component.ts b/frontend/src/app/GN2CommonModule/form/date/date.component.ts index cc2b314f36..44aaebacf2 100644 --- a/frontend/src/app/GN2CommonModule/form/date/date.component.ts +++ b/frontend/src/app/GN2CommonModule/form/date/date.component.ts @@ -54,7 +54,10 @@ export class DateComponent implements OnInit, OnDestroy { public changeSub: Subscription; public today: DateStruc; - constructor(myElement: ElementRef, private _dateParser: NgbDateParserFormatter) { + constructor( + myElement: ElementRef, + private _dateParser: NgbDateParserFormatter + ) { this.elementRef = myElement; this.initializeDates(); } diff --git a/frontend/src/app/GN2CommonModule/form/date/period.component.ts b/frontend/src/app/GN2CommonModule/form/date/period.component.ts index 66ce927cb6..a2d547d8b8 100644 --- a/frontend/src/app/GN2CommonModule/form/date/period.component.ts +++ b/frontend/src/app/GN2CommonModule/form/date/period.component.ts @@ -14,7 +14,10 @@ import { DateComponent } from './date.component'; export class PeriodComponent extends DateComponent implements OnInit { public elementRef: ElementRef; - constructor(myElement: ElementRef, public dateParser: NgbDateParserFormatter) { + constructor( + myElement: ElementRef, + public dateParser: NgbDateParserFormatter + ) { super(myElement, dateParser); } diff --git a/frontend/src/app/GN2CommonModule/form/dynamic-form-generator/dynamic-form.service.ts b/frontend/src/app/GN2CommonModule/form/dynamic-form-generator/dynamic-form.service.ts index 2119469415..30bb49ce47 100644 --- a/frontend/src/app/GN2CommonModule/form/dynamic-form-generator/dynamic-form.service.ts +++ b/frontend/src/app/GN2CommonModule/form/dynamic-form-generator/dynamic-form.service.ts @@ -15,7 +15,10 @@ import { MediaService } from '@geonature_common/service/media.service'; @Injectable() export class DynamicFormService { - constructor(private _mediaService: MediaService, private _formBuilder: UntypedFormBuilder) {} + constructor( + private _mediaService: MediaService, + private _formBuilder: UntypedFormBuilder + ) {} initFormGroup() { return this._formBuilder.group({}); diff --git a/frontend/src/app/GN2CommonModule/form/dynamic-form/dynamic-form.component.ts b/frontend/src/app/GN2CommonModule/form/dynamic-form/dynamic-form.component.ts index 1969b201e4..a9974a841b 100644 --- a/frontend/src/app/GN2CommonModule/form/dynamic-form/dynamic-form.component.ts +++ b/frontend/src/app/GN2CommonModule/form/dynamic-form/dynamic-form.component.ts @@ -33,7 +33,10 @@ export class DynamicFormComponent implements OnInit, OnChanges, OnDestroy { public isValInSelectList: boolean = true; private _sub: Subscription; - constructor(private _dynformService: DynamicFormService, public config: ConfigService) {} + constructor( + private _dynformService: DynamicFormService, + public config: ConfigService + ) {} ngOnInit() { this.setFormDefComp(true); diff --git a/frontend/src/app/GN2CommonModule/form/media/medias.component.ts b/frontend/src/app/GN2CommonModule/form/media/medias.component.ts index 1e11ab50fb..b11b6db1c1 100644 --- a/frontend/src/app/GN2CommonModule/form/media/medias.component.ts +++ b/frontend/src/app/GN2CommonModule/form/media/medias.component.ts @@ -28,7 +28,10 @@ export class MediasComponent implements OnInit { public bInitialized: boolean; - constructor(public ms: MediaService, public config: ConfigService) {} + constructor( + public ms: MediaService, + public config: ConfigService + ) {} ngOnInit() { this.ms.getNomenclatures().subscribe(() => { diff --git a/frontend/src/app/GN2CommonModule/form/municipalities/municipalities.component.ts b/frontend/src/app/GN2CommonModule/form/municipalities/municipalities.component.ts index 22397b7975..0287f9ca87 100644 --- a/frontend/src/app/GN2CommonModule/form/municipalities/municipalities.component.ts +++ b/frontend/src/app/GN2CommonModule/form/municipalities/municipalities.component.ts @@ -26,7 +26,10 @@ export class MunicipalitiesComponent implements OnInit { /** * @deprecated Do not use this input */ @Input() debounceTime: number; - constructor(private _dfs: DataFormService, private _commonService: CommonService) {} + constructor( + private _dfs: DataFormService, + private _commonService: CommonService + ) {} ngOnInit() {} } diff --git a/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts b/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts index f76914b402..c334cfbc38 100644 --- a/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts +++ b/frontend/src/app/GN2CommonModule/form/nomenclature/nomenclature.component.ts @@ -78,7 +78,10 @@ export class NomenclatureComponent @Input() cdNomenclatures: Array = []; @Output() labelsLoaded = new EventEmitter>(); - constructor(private _dfService: DataFormService, private _translate: TranslateService) { + constructor( + private _dfService: DataFormService, + private _translate: TranslateService + ) { super(); } diff --git a/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-data.service.ts b/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-data.service.ts index 961ddad133..f63db135a4 100644 --- a/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-data.service.ts +++ b/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-data.service.ts @@ -24,7 +24,10 @@ export class SyntheseDataService { public isDownloading: Boolean = false; public downloadProgress: BehaviorSubject; private _blob: Blob; - constructor(private _api: HttpClient, public config: ConfigService) { + constructor( + private _api: HttpClient, + public config: ConfigService + ) { this.downloadProgress = >new BehaviorSubject(0.0); } diff --git a/frontend/src/app/GN2CommonModule/form/taxa/taxa.component.ts b/frontend/src/app/GN2CommonModule/form/taxa/taxa.component.ts index edc8fb288a..b9494ad217 100644 --- a/frontend/src/app/GN2CommonModule/form/taxa/taxa.component.ts +++ b/frontend/src/app/GN2CommonModule/form/taxa/taxa.component.ts @@ -63,7 +63,10 @@ export class TaxaComponent implements OnInit { @Input() disabled: boolean = false; /** @ignore */ - constructor(private dataService: DataFormService, private commonService: CommonService) {} + constructor( + private dataService: DataFormService, + private commonService: CommonService + ) {} ngOnInit() { this.taxa = []; diff --git a/frontend/src/app/GN2CommonModule/form/taxonomy/taxonomy.component.ts b/frontend/src/app/GN2CommonModule/form/taxonomy/taxonomy.component.ts index 103d42c2cb..cb722f31a4 100644 --- a/frontend/src/app/GN2CommonModule/form/taxonomy/taxonomy.component.ts +++ b/frontend/src/app/GN2CommonModule/form/taxonomy/taxonomy.component.ts @@ -90,7 +90,10 @@ export class TaxonomyComponent implements OnInit, OnChanges { @Output() onDelete = new EventEmitter(); public isCollapseTaxonomy = true; - constructor(private _dfService: DataFormService, public config: ConfigService) {} + constructor( + private _dfService: DataFormService, + public config: ConfigService + ) {} ngOnInit() { if (!this.apiEndPoint) { diff --git a/frontend/src/app/GN2CommonModule/map-list/generic-filters/generic-filters.component.ts b/frontend/src/app/GN2CommonModule/map-list/generic-filters/generic-filters.component.ts index bbd2f0b3e0..d75967e9cd 100644 --- a/frontend/src/app/GN2CommonModule/map-list/generic-filters/generic-filters.component.ts +++ b/frontend/src/app/GN2CommonModule/map-list/generic-filters/generic-filters.component.ts @@ -14,7 +14,10 @@ export class MapListGenericFiltersComponent implements OnInit { @Input() filterableColumns: Array; @Input() apiEndPoint: string; public colSelected: any; - constructor(public mapListService: MapListService, private _commonService: CommonService) {} + constructor( + public mapListService: MapListService, + private _commonService: CommonService + ) {} ngOnInit() { this.mapListService.genericFilterInput.valueChanges diff --git a/frontend/src/app/GN2CommonModule/map-list/map-list.component.ts b/frontend/src/app/GN2CommonModule/map-list/map-list.component.ts index 24ae108553..b94fa96228 100644 --- a/frontend/src/app/GN2CommonModule/map-list/map-list.component.ts +++ b/frontend/src/app/GN2CommonModule/map-list/map-list.component.ts @@ -22,7 +22,10 @@ export class MapListComponent implements OnInit, AfterViewInit { @Input() idName: string; @Input() zoomOnLayer = true; - constructor(private _ms: MapService, public mapListService: MapListService) {} + constructor( + private _ms: MapService, + public mapListService: MapListService + ) {} ngOnInit() { // set the idName in the service diff --git a/frontend/src/app/GN2CommonModule/map-list/map-list.service.ts b/frontend/src/app/GN2CommonModule/map-list/map-list.service.ts index 697293bd69..8378a043aa 100644 --- a/frontend/src/app/GN2CommonModule/map-list/map-list.service.ts +++ b/frontend/src/app/GN2CommonModule/map-list/map-list.service.ts @@ -53,7 +53,11 @@ export class MapListService { fill: true, }; - constructor(private _http: HttpClient, private _ms: MapService, public config: ConfigService) { + constructor( + private _http: HttpClient, + private _ms: MapService, + public config: ConfigService + ) { this.columns = []; this.page.pageNumber = 0; this.page.size = 12; diff --git a/frontend/src/app/GN2CommonModule/map/filelayer/filelayer.component.ts b/frontend/src/app/GN2CommonModule/map/filelayer/filelayer.component.ts index 5ec7baf1ae..31893c1e8c 100644 --- a/frontend/src/app/GN2CommonModule/map/filelayer/filelayer.component.ts +++ b/frontend/src/app/GN2CommonModule/map/filelayer/filelayer.component.ts @@ -34,7 +34,10 @@ export class LeafletFileLayerComponent implements OnInit, AfterViewInit, OnChang @Input() style; @Output() onLoad = new EventEmitter(); @Output() onGeomChange = new EventEmitter(); - constructor(public mapService: MapService, private _toasterService: ToastrService) {} + constructor( + public mapService: MapService, + private _toasterService: ToastrService + ) {} ngOnInit() { this.style = this.style || this.mapService.searchStyle; diff --git a/frontend/src/app/GN2CommonModule/map/map.component.ts b/frontend/src/app/GN2CommonModule/map/map.component.ts index cbd42d3976..3824d097a9 100644 --- a/frontend/src/app/GN2CommonModule/map/map.component.ts +++ b/frontend/src/app/GN2CommonModule/map/map.component.ts @@ -25,7 +25,10 @@ const NOMINATIM_URL = 'https://nominatim.openstreetmap.org/search'; export class NominatimService { PARAMS = null; - constructor(private http: HttpClient, public config: ConfigService) { + constructor( + private http: HttpClient, + public config: ConfigService + ) { this.PARAMS = new HttpParams({ fromObject: { format: 'json', diff --git a/frontend/src/app/GN2CommonModule/others/breadcrumbs/breadcrumbs.component.ts b/frontend/src/app/GN2CommonModule/others/breadcrumbs/breadcrumbs.component.ts index 22d50717e1..a346c66fe7 100644 --- a/frontend/src/app/GN2CommonModule/others/breadcrumbs/breadcrumbs.component.ts +++ b/frontend/src/app/GN2CommonModule/others/breadcrumbs/breadcrumbs.component.ts @@ -40,7 +40,10 @@ export class BreadcrumbsComponent implements OnInit { @Input() previousRoutes: Array = []; // Areas id_type public breadcrumbs: IBreadCrumb[]; - constructor(private router: Router, private activatedRoute: ActivatedRoute) { + constructor( + private router: Router, + private activatedRoute: ActivatedRoute + ) { this.breadcrumbs = this.buildBreadCrumb({ route: this.activatedRoute.root }); } diff --git a/frontend/src/app/GN2CommonModule/service/common.service.ts b/frontend/src/app/GN2CommonModule/service/common.service.ts index 291ff873cc..77c2d47bac 100644 --- a/frontend/src/app/GN2CommonModule/service/common.service.ts +++ b/frontend/src/app/GN2CommonModule/service/common.service.ts @@ -4,7 +4,10 @@ import { TranslateService } from '@ngx-translate/core'; @Injectable() export class CommonService { - constructor(private toastrService: ToastrService, private translate: TranslateService) {} + constructor( + private toastrService: ToastrService, + private translate: TranslateService + ) {} /** pour ne pas afficher plusieurs fois le meme message * (par ex quand on ) zomme sur la carte avant la saisie */ diff --git a/frontend/src/app/adminModule/admin.component.ts b/frontend/src/app/adminModule/admin.component.ts index 5929957e61..a14788a21e 100644 --- a/frontend/src/app/adminModule/admin.component.ts +++ b/frontend/src/app/adminModule/admin.component.ts @@ -11,7 +11,10 @@ import { ConfigService } from '@geonature/services/config.service'; export class AdminComponent implements OnInit { URL_ADMIN = null; - constructor(public _cruvedStore: CruvedStoreService, public config: ConfigService) { + constructor( + public _cruvedStore: CruvedStoreService, + public config: ConfigService + ) { this.URL_ADMIN = this.config.API_ENDPOINT + '/admin/'; } diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts index ab6d058dfe..5ab0b43673 100644 --- a/frontend/src/app/app.component.ts +++ b/frontend/src/app/app.component.ts @@ -12,7 +12,10 @@ import { ConfigService } from './services/config.service'; styleUrls: ['./app.component.scss'], }) export class AppComponent implements OnInit { - constructor(private translate: TranslateService, public config: ConfigService) { + constructor( + private translate: TranslateService, + public config: ConfigService + ) { // Register all locales (default 'en') used by GeoNature for Angular Pipes registerLocaleData(localeFr, 'fr'); registerLocaleData(localeZh, 'zh'); diff --git a/frontend/src/app/components/notification/notification-data.service.ts b/frontend/src/app/components/notification/notification-data.service.ts index c60c3d2b37..f47623448b 100644 --- a/frontend/src/app/components/notification/notification-data.service.ts +++ b/frontend/src/app/components/notification/notification-data.service.ts @@ -40,7 +40,10 @@ export interface NotificationRule { @Injectable() export class NotificationDataService { - constructor(private _api: HttpClient, public config: ConfigService) {} + constructor( + private _api: HttpClient, + public config: ConfigService + ) {} // returns notifications content for this user getNotifications(): Observable { diff --git a/frontend/src/app/metadataModule/services/actor-form.service.ts b/frontend/src/app/metadataModule/services/actor-form.service.ts index ec34397690..016edf23f4 100644 --- a/frontend/src/app/metadataModule/services/actor-form.service.ts +++ b/frontend/src/app/metadataModule/services/actor-form.service.ts @@ -45,7 +45,10 @@ export class ActorFormService { return this._role_types.getValue().find((e) => e.id_nomenclature == id); } - constructor(private fb: UntypedFormBuilder, private dfs: DataFormService) { + constructor( + private fb: UntypedFormBuilder, + private dfs: DataFormService + ) { this.dfs.getOrganisms().subscribe((organisms: any[]) => this._organisms.next(organisms)); this.dfs.getRoles({ group: false }).subscribe((roles: any[]) => this._roles.next(roles)); diff --git a/frontend/src/app/metadataModule/services/metadata-data.service.ts b/frontend/src/app/metadataModule/services/metadata-data.service.ts index 7db1661f0e..d011d297f9 100644 --- a/frontend/src/app/metadataModule/services/metadata-data.service.ts +++ b/frontend/src/app/metadataModule/services/metadata-data.service.ts @@ -6,7 +6,10 @@ import { ConfigService } from '@geonature/services/config.service'; providedIn: 'root', }) export class MetadataDataService { - constructor(private _api: HttpClient, public config: ConfigService) {} + constructor( + private _api: HttpClient, + public config: ConfigService + ) {} createAF(value) { return this._api.post(`${this.config.API_ENDPOINT}/meta/acquisition_framework`, value); diff --git a/frontend/src/app/metadataModule/services/metadata-search-form.service.ts b/frontend/src/app/metadataModule/services/metadata-search-form.service.ts index 19a455f08c..abe53953a9 100644 --- a/frontend/src/app/metadataModule/services/metadata-search-form.service.ts +++ b/frontend/src/app/metadataModule/services/metadata-search-form.service.ts @@ -5,7 +5,10 @@ import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; export class MetadataSearchFormService { public form: UntypedFormGroup; public rapidSearchControl: UntypedFormControl; - constructor(private _fb: UntypedFormBuilder, public dateParser: NgbDateParserFormatter) { + constructor( + private _fb: UntypedFormBuilder, + public dateParser: NgbDateParserFormatter + ) { this.form = this._fb.group({ selector: 'ds', uuid: null, diff --git a/frontend/src/app/modules/login/routes-guard.service.ts b/frontend/src/app/modules/login/routes-guard.service.ts index c0a8c62f0b..58cdce1e78 100644 --- a/frontend/src/app/modules/login/routes-guard.service.ts +++ b/frontend/src/app/modules/login/routes-guard.service.ts @@ -6,7 +6,10 @@ import { ConfigService } from '@geonature/services/config.service'; @Injectable() export class SignUpGuard implements CanActivate { - constructor(private _router: Router, public config: ConfigService) {} + constructor( + private _router: Router, + public config: ConfigService + ) {} canActivate() { if (this.config['ACCOUNT_MANAGEMENT']['ENABLE_SIGN_UP'] || false) { @@ -20,7 +23,10 @@ export class SignUpGuard implements CanActivate { @Injectable() export class UserManagementGuard implements CanActivate { - constructor(private _router: Router, public config: ConfigService) {} + constructor( + private _router: Router, + public config: ConfigService + ) {} canActivate() { if (this.config['ACCOUNT_MANAGEMENT']['ENABLE_USER_MANAGEMENT'] || false) { diff --git a/frontend/src/app/routing/auth-guard.service.ts b/frontend/src/app/routing/auth-guard.service.ts index a733cb9f74..a5d3db3406 100644 --- a/frontend/src/app/routing/auth-guard.service.ts +++ b/frontend/src/app/routing/auth-guard.service.ts @@ -13,7 +13,10 @@ import { RoutingService } from './routing.service'; @Injectable() export class AuthGuard implements CanActivate, CanActivateChild { - constructor(private _router: Router, private _injector: Injector) {} + constructor( + private _router: Router, + private _injector: Injector + ) {} async redirectAuth(route, state) { const authService = this._injector.get(AuthService); diff --git a/frontend/src/app/services/config.service.ts b/frontend/src/app/services/config.service.ts index ba66581e1b..0c2f38dcbf 100644 --- a/frontend/src/app/services/config.service.ts +++ b/frontend/src/app/services/config.service.ts @@ -10,7 +10,10 @@ class Config { @Injectable() export class ConfigService extends Config { - constructor(private _http: HttpClient, private _toaster: ToastrService) { + constructor( + private _http: HttpClient, + private _toaster: ToastrService + ) { super(); } diff --git a/frontend/src/app/services/module.service.ts b/frontend/src/app/services/module.service.ts index 3fde1b980a..292aee5520 100644 --- a/frontend/src/app/services/module.service.ts +++ b/frontend/src/app/services/module.service.ts @@ -27,7 +27,10 @@ export class ModuleService { }); } - constructor(private _api: DataFormService, private _router: Router) {} + constructor( + private _api: DataFormService, + private _router: Router + ) {} loadModules(): Observable { return this._api.getModulesList([]).pipe( diff --git a/frontend/src/app/userModule/services/form.service.ts b/frontend/src/app/userModule/services/form.service.ts index 1ad88bd006..afda4d2f32 100644 --- a/frontend/src/app/userModule/services/form.service.ts +++ b/frontend/src/app/userModule/services/form.service.ts @@ -18,7 +18,10 @@ export interface Role { export class RoleFormService { private roleForm: UntypedFormGroup; - constructor(private fb: UntypedFormBuilder, private dataService: DataFormService) { + constructor( + private fb: UntypedFormBuilder, + private dataService: DataFormService + ) { this.setForm(); } diff --git a/frontend/src/app/userModule/services/user-data.service.ts b/frontend/src/app/userModule/services/user-data.service.ts index 1f8520df63..e18ef7b857 100644 --- a/frontend/src/app/userModule/services/user-data.service.ts +++ b/frontend/src/app/userModule/services/user-data.service.ts @@ -7,7 +7,10 @@ import { ConfigService } from '@geonature/services/config.service'; @Injectable() export class UserDataService { - constructor(private _http: HttpClient, public config: ConfigService) {} + constructor( + private _http: HttpClient, + public config: ConfigService + ) {} getRole(id: number) { return this._http.get(`${this.config.API_ENDPOINT}/users/role/${id}`); From baa21f4015e82d0e69d0fdd56217de8df3aa3180 Mon Sep 17 00:00:00 2001 From: Andria Capai Date: Mon, 20 Nov 2023 16:20:56 +0100 Subject: [PATCH 11/22] refact: use same way to replace review Use current way to replace view Reviewed-by: andriacap --- .../data/core/gn_synthese/__init__.py | 0 .../synthese_view_export_add_group3_inpn.sql | 141 -------- ...ynthese_view_export_remove_group3_inpn.sql | 139 -------- ...86c22_add_group3_inpn_to_synthese_views.py | 318 +++++++++++++++++- 4 files changed, 309 insertions(+), 289 deletions(-) delete mode 100644 backend/geonature/migrations/data/core/gn_synthese/__init__.py delete mode 100644 backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_add_group3_inpn.sql delete mode 100644 backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_remove_group3_inpn.sql diff --git a/backend/geonature/migrations/data/core/gn_synthese/__init__.py b/backend/geonature/migrations/data/core/gn_synthese/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_add_group3_inpn.sql b/backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_add_group3_inpn.sql deleted file mode 100644 index 0bb674fa47..0000000000 --- a/backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_add_group3_inpn.sql +++ /dev/null @@ -1,141 +0,0 @@ --- Vue listant les observations pour l'export de la Synthèse -DROP VIEW gn_synthese.v_synthese_for_export; -CREATE VIEW gn_synthese.v_synthese_for_export AS - SELECT - s.id_synthese AS id_synthese, - s.date_min::date AS date_debut, - s.date_max::date AS date_fin, - s.date_min::time AS heure_debut, - s.date_max::time AS heure_fin, - t.cd_nom AS cd_nom, - t.cd_ref AS cd_ref, - t.nom_valide AS nom_valide, - t.nom_vern as nom_vernaculaire, - s.nom_cite AS nom_cite, - t.regne AS regne, - t.group1_inpn AS group1_inpn, - t.group2_inpn AS group2_inpn, - t.group3_inpn AS group3_inpn, - t.classe AS classe, - t.ordre AS ordre, - t.famille AS famille, - t.id_rang AS rang_taxo, - s.count_min AS nombre_min, - s.count_max AS nombre_max, - s.altitude_min AS alti_min, - s.altitude_max AS alti_max, - s.depth_min AS prof_min, - s.depth_max AS prof_max, - s.observers AS observateurs, - s.id_digitiser AS id_digitiser, -- Utile pour le CRUVED - s.determiner AS determinateur, - communes AS communes, - public.ST_astext(s.the_geom_4326) AS geometrie_wkt_4326, - public.ST_x(s.the_geom_point) AS x_centroid_4326, - public.ST_y(s.the_geom_point) AS y_centroid_4326, - public.ST_asgeojson(s.the_geom_4326) AS geojson_4326,-- Utile pour la génération de l'export en SHP - public.ST_asgeojson(s.the_geom_local) AS geojson_local,-- Utile pour la génération de l'export en SHP - s.place_name AS nom_lieu, - s.comment_context AS comment_releve, - s.comment_description AS comment_occurrence, - s.validator AS validateur, - n21.label_default AS niveau_validation, - s.meta_validation_date as date_validation, - s.validation_comment AS comment_validation, - s.digital_proof AS preuve_numerique_url, - s.non_digital_proof AS preuve_non_numerique, - d.dataset_name AS jdd_nom, - d.unique_dataset_id AS jdd_uuid, - d.id_dataset AS jdd_id, -- Utile pour le CRUVED - af.acquisition_framework_name AS ca_nom, - af.unique_acquisition_framework_id AS ca_uuid, - d.id_acquisition_framework AS ca_id, - s.cd_hab AS cd_habref, - hab.lb_code AS cd_habitat, - hab.lb_hab_fr AS nom_habitat, - s.precision as precision_geographique, - n1.label_default AS nature_objet_geo, - n2.label_default AS type_regroupement, - s.grp_method AS methode_regroupement, - n3.label_default AS technique_observation, - n5.label_default AS biologique_statut, - n6.label_default AS etat_biologique, - n22.label_default AS biogeographique_statut, - n7.label_default AS naturalite, - n8.label_default AS preuve_existante, - n9.label_default AS niveau_precision_diffusion, - n10.label_default AS stade_vie, - n11.label_default AS sexe, - n12.label_default AS objet_denombrement, - n13.label_default AS type_denombrement, - n14.label_default AS niveau_sensibilite, - n15.label_default AS statut_observation, - n16.label_default AS floutage_dee, - n17.label_default AS statut_source, - n18.label_default AS type_info_geo, - n19.label_default AS methode_determination, - n20.label_default AS comportement, - s.reference_biblio AS reference_biblio, - s.entity_source_pk_value AS id_origine, - s.unique_id_sinp AS uuid_perm_sinp, - s.unique_id_sinp_grp AS uuid_perm_grp_sinp, - s.meta_create_date AS date_creation, - s.meta_update_date AS date_modification, - s.additional_data as champs_additionnels, - COALESCE(s.meta_update_date, s.meta_create_date) AS derniere_action - FROM gn_synthese.synthese s - JOIN taxonomie.taxref t ON t.cd_nom = s.cd_nom - JOIN gn_meta.t_datasets d ON d.id_dataset = s.id_dataset - JOIN gn_meta.t_acquisition_frameworks af ON d.id_acquisition_framework = af.id_acquisition_framework - LEFT OUTER JOIN ( - SELECT id_synthese, string_agg(DISTINCT area_name, ', ') AS communes - FROM gn_synthese.cor_area_synthese cas - LEFT OUTER JOIN ref_geo.l_areas a_1 ON cas.id_area = a_1.id_area - JOIN ref_geo.bib_areas_types ta ON ta.id_type = a_1.id_type AND ta.type_code ='COM' - GROUP BY id_synthese - ) sa ON sa.id_synthese = s.id_synthese - LEFT JOIN ref_nomenclatures.t_nomenclatures n1 ON s.id_nomenclature_geo_object_nature = n1.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n2 ON s.id_nomenclature_grp_typ = n2.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n3 ON s.id_nomenclature_obs_technique = n3.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n6 ON s.id_nomenclature_bio_condition = n6.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n7 ON s.id_nomenclature_naturalness = n7.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n8 ON s.id_nomenclature_exist_proof = n8.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n9 ON s.id_nomenclature_diffusion_level = n9.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n11 ON s.id_nomenclature_sex = n11.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n12 ON s.id_nomenclature_obj_count = n12.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n13 ON s.id_nomenclature_type_count = n13.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n14 ON s.id_nomenclature_sensitivity = n14.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n15 ON s.id_nomenclature_observation_status = n15.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n16 ON s.id_nomenclature_blurring = n16.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n17 ON s.id_nomenclature_source_status = n17.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n18 ON s.id_nomenclature_info_geo_type = n18.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n19 ON s.id_nomenclature_determination_method = n19.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n20 ON s.id_nomenclature_behaviour = n20.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n21 ON s.id_nomenclature_valid_status = n21.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n22 ON s.id_nomenclature_biogeo_status = n22.id_nomenclature - LEFT JOIN ref_habitats.habref hab ON hab.cd_hab = s.cd_hab; - - - --- Vue export des taxons de la synthèse --- Première version qui reste à affiner/étoffer -DROP VIEW gn_synthese.v_synthese_taxon_for_export_view; -CREATE VIEW gn_synthese.v_synthese_taxon_for_export_view AS - SELECT DISTINCT - ref.nom_valide, - ref.cd_ref, - ref.nom_vern, - ref.group1_inpn, - ref.group2_inpn, - ref.group3_inpn, - ref.regne, - ref.phylum, - ref.classe, - ref.ordre, - ref.famille, - ref.id_rang -FROM gn_synthese.synthese s -JOIN taxonomie.taxref t ON s.cd_nom = t.cd_nom -JOIN taxonomie.taxref ref ON t.cd_ref = ref.cd_nom; \ No newline at end of file diff --git a/backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_remove_group3_inpn.sql b/backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_remove_group3_inpn.sql deleted file mode 100644 index 791484dca1..0000000000 --- a/backend/geonature/migrations/data/core/gn_synthese/synthese_view_export_remove_group3_inpn.sql +++ /dev/null @@ -1,139 +0,0 @@ --- Vue listant les observations pour l'export de la Synthèse -DROP VIEW gn_synthese.v_synthese_for_export; -CREATE VIEW gn_synthese.v_synthese_for_export AS - SELECT - s.id_synthese AS id_synthese, - s.date_min::date AS date_debut, - s.date_max::date AS date_fin, - s.date_min::time AS heure_debut, - s.date_max::time AS heure_fin, - t.cd_nom AS cd_nom, - t.cd_ref AS cd_ref, - t.nom_valide AS nom_valide, - t.nom_vern as nom_vernaculaire, - s.nom_cite AS nom_cite, - t.regne AS regne, - t.group1_inpn AS group1_inpn, - t.group2_inpn AS group2_inpn, - t.classe AS classe, - t.ordre AS ordre, - t.famille AS famille, - t.id_rang AS rang_taxo, - s.count_min AS nombre_min, - s.count_max AS nombre_max, - s.altitude_min AS alti_min, - s.altitude_max AS alti_max, - s.depth_min AS prof_min, - s.depth_max AS prof_max, - s.observers AS observateurs, - s.id_digitiser AS id_digitiser, -- Utile pour le CRUVED - s.determiner AS determinateur, - communes AS communes, - public.ST_astext(s.the_geom_4326) AS geometrie_wkt_4326, - public.ST_x(s.the_geom_point) AS x_centroid_4326, - public.ST_y(s.the_geom_point) AS y_centroid_4326, - public.ST_asgeojson(s.the_geom_4326) AS geojson_4326,-- Utile pour la génération de l'export en SHP - public.ST_asgeojson(s.the_geom_local) AS geojson_local,-- Utile pour la génération de l'export en SHP - s.place_name AS nom_lieu, - s.comment_context AS comment_releve, - s.comment_description AS comment_occurrence, - s.validator AS validateur, - n21.label_default AS niveau_validation, - s.meta_validation_date as date_validation, - s.validation_comment AS comment_validation, - s.digital_proof AS preuve_numerique_url, - s.non_digital_proof AS preuve_non_numerique, - d.dataset_name AS jdd_nom, - d.unique_dataset_id AS jdd_uuid, - d.id_dataset AS jdd_id, -- Utile pour le CRUVED - af.acquisition_framework_name AS ca_nom, - af.unique_acquisition_framework_id AS ca_uuid, - d.id_acquisition_framework AS ca_id, - s.cd_hab AS cd_habref, - hab.lb_code AS cd_habitat, - hab.lb_hab_fr AS nom_habitat, - s.precision as precision_geographique, - n1.label_default AS nature_objet_geo, - n2.label_default AS type_regroupement, - s.grp_method AS methode_regroupement, - n3.label_default AS technique_observation, - n5.label_default AS biologique_statut, - n6.label_default AS etat_biologique, - n22.label_default AS biogeographique_statut, - n7.label_default AS naturalite, - n8.label_default AS preuve_existante, - n9.label_default AS niveau_precision_diffusion, - n10.label_default AS stade_vie, - n11.label_default AS sexe, - n12.label_default AS objet_denombrement, - n13.label_default AS type_denombrement, - n14.label_default AS niveau_sensibilite, - n15.label_default AS statut_observation, - n16.label_default AS floutage_dee, - n17.label_default AS statut_source, - n18.label_default AS type_info_geo, - n19.label_default AS methode_determination, - n20.label_default AS comportement, - s.reference_biblio AS reference_biblio, - s.entity_source_pk_value AS id_origine, - s.unique_id_sinp AS uuid_perm_sinp, - s.unique_id_sinp_grp AS uuid_perm_grp_sinp, - s.meta_create_date AS date_creation, - s.meta_update_date AS date_modification, - s.additional_data as champs_additionnels, - COALESCE(s.meta_update_date, s.meta_create_date) AS derniere_action - FROM gn_synthese.synthese s - JOIN taxonomie.taxref t ON t.cd_nom = s.cd_nom - JOIN gn_meta.t_datasets d ON d.id_dataset = s.id_dataset - JOIN gn_meta.t_acquisition_frameworks af ON d.id_acquisition_framework = af.id_acquisition_framework - LEFT OUTER JOIN ( - SELECT id_synthese, string_agg(DISTINCT area_name, ', ') AS communes - FROM gn_synthese.cor_area_synthese cas - LEFT OUTER JOIN ref_geo.l_areas a_1 ON cas.id_area = a_1.id_area - JOIN ref_geo.bib_areas_types ta ON ta.id_type = a_1.id_type AND ta.type_code ='COM' - GROUP BY id_synthese - ) sa ON sa.id_synthese = s.id_synthese - LEFT JOIN ref_nomenclatures.t_nomenclatures n1 ON s.id_nomenclature_geo_object_nature = n1.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n2 ON s.id_nomenclature_grp_typ = n2.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n3 ON s.id_nomenclature_obs_technique = n3.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n6 ON s.id_nomenclature_bio_condition = n6.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n7 ON s.id_nomenclature_naturalness = n7.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n8 ON s.id_nomenclature_exist_proof = n8.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n9 ON s.id_nomenclature_diffusion_level = n9.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n11 ON s.id_nomenclature_sex = n11.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n12 ON s.id_nomenclature_obj_count = n12.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n13 ON s.id_nomenclature_type_count = n13.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n14 ON s.id_nomenclature_sensitivity = n14.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n15 ON s.id_nomenclature_observation_status = n15.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n16 ON s.id_nomenclature_blurring = n16.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n17 ON s.id_nomenclature_source_status = n17.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n18 ON s.id_nomenclature_info_geo_type = n18.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n19 ON s.id_nomenclature_determination_method = n19.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n20 ON s.id_nomenclature_behaviour = n20.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n21 ON s.id_nomenclature_valid_status = n21.id_nomenclature - LEFT JOIN ref_nomenclatures.t_nomenclatures n22 ON s.id_nomenclature_biogeo_status = n22.id_nomenclature - LEFT JOIN ref_habitats.habref hab ON hab.cd_hab = s.cd_hab; - - - --- Vue export des taxons de la synthèse --- Première version qui reste à affiner/étoffer -DROP VIEW gn_synthese.v_synthese_taxon_for_export_view; -CREATE VIEW gn_synthese.v_synthese_taxon_for_export_view AS - SELECT DISTINCT - ref.nom_valide, - ref.cd_ref, - ref.nom_vern, - ref.group1_inpn, - ref.group2_inpn, - ref.regne, - ref.phylum, - ref.classe, - ref.ordre, - ref.famille, - ref.id_rang -FROM gn_synthese.synthese s -JOIN taxonomie.taxref t ON s.cd_nom = t.cd_nom -JOIN taxonomie.taxref ref ON t.cd_ref = ref.cd_nom; \ No newline at end of file diff --git a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py index 14de8358f5..c0094b39ff 100644 --- a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py +++ b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py @@ -5,7 +5,6 @@ Create Date: 2023-07-21 14:15:23.311469 """ -import importlib from alembic import op from sqlalchemy.sql import text @@ -18,14 +17,315 @@ def upgrade(): - conn = op.get_bind() - path = "geonature.migrations.data.core.gn_synthese" - filename = "synthese_view_export_add_group3_inpn.sql" - conn.execute(text(importlib.resources.read_text(path, filename))) + op.execute( + """ + DROP VIEW gn_synthese.v_synthese_for_export; + """ + ) + + op.execute( + """ +CREATE VIEW gn_synthese.v_synthese_for_export AS + SELECT + s.id_synthese AS id_synthese, + s.date_min::date AS date_debut, + s.date_max::date AS date_fin, + s.date_min::time AS heure_debut, + s.date_max::time AS heure_fin, + t.cd_nom AS cd_nom, + t.cd_ref AS cd_ref, + t.nom_valide AS nom_valide, + t.nom_vern as nom_vernaculaire, + s.nom_cite AS nom_cite, + t.regne AS regne, + t.group1_inpn AS group1_inpn, + t.group2_inpn AS group2_inpn, + t.group3_inpn AS group3_inpn, + t.classe AS classe, + t.ordre AS ordre, + t.famille AS famille, + t.id_rang AS rang_taxo, + s.count_min AS nombre_min, + s.count_max AS nombre_max, + s.altitude_min AS alti_min, + s.altitude_max AS alti_max, + s.depth_min AS prof_min, + s.depth_max AS prof_max, + s.observers AS observateurs, + s.id_digitiser AS id_digitiser, -- Utile pour le CRUVED + s.determiner AS determinateur, + communes AS communes, + public.ST_astext(s.the_geom_4326) AS geometrie_wkt_4326, + public.ST_x(s.the_geom_point) AS x_centroid_4326, + public.ST_y(s.the_geom_point) AS y_centroid_4326, + public.ST_asgeojson(s.the_geom_4326) AS geojson_4326,-- Utile pour la génération de l'export en SHP + public.ST_asgeojson(s.the_geom_local) AS geojson_local,-- Utile pour la génération de l'export en SHP + s.place_name AS nom_lieu, + s.comment_context AS comment_releve, + s.comment_description AS comment_occurrence, + s.validator AS validateur, + n21.label_default AS niveau_validation, + s.meta_validation_date as date_validation, + s.validation_comment AS comment_validation, + s.digital_proof AS preuve_numerique_url, + s.non_digital_proof AS preuve_non_numerique, + d.dataset_name AS jdd_nom, + d.unique_dataset_id AS jdd_uuid, + d.id_dataset AS jdd_id, -- Utile pour le CRUVED + af.acquisition_framework_name AS ca_nom, + af.unique_acquisition_framework_id AS ca_uuid, + d.id_acquisition_framework AS ca_id, + s.cd_hab AS cd_habref, + hab.lb_code AS cd_habitat, + hab.lb_hab_fr AS nom_habitat, + s.precision as precision_geographique, + n1.label_default AS nature_objet_geo, + n2.label_default AS type_regroupement, + s.grp_method AS methode_regroupement, + n3.label_default AS technique_observation, + n5.label_default AS biologique_statut, + n6.label_default AS etat_biologique, + n22.label_default AS biogeographique_statut, + n7.label_default AS naturalite, + n8.label_default AS preuve_existante, + n9.label_default AS niveau_precision_diffusion, + n10.label_default AS stade_vie, + n11.label_default AS sexe, + n12.label_default AS objet_denombrement, + n13.label_default AS type_denombrement, + n14.label_default AS niveau_sensibilite, + n15.label_default AS statut_observation, + n16.label_default AS floutage_dee, + n17.label_default AS statut_source, + n18.label_default AS type_info_geo, + n19.label_default AS methode_determination, + n20.label_default AS comportement, + s.reference_biblio AS reference_biblio, + s.entity_source_pk_value AS id_origine, + s.unique_id_sinp AS uuid_perm_sinp, + s.unique_id_sinp_grp AS uuid_perm_grp_sinp, + s.meta_create_date AS date_creation, + s.meta_update_date AS date_modification, + s.additional_data as champs_additionnels, + COALESCE(s.meta_update_date, s.meta_create_date) AS derniere_action + FROM gn_synthese.synthese s + JOIN taxonomie.taxref t ON t.cd_nom = s.cd_nom + JOIN gn_meta.t_datasets d ON d.id_dataset = s.id_dataset + JOIN gn_meta.t_acquisition_frameworks af ON d.id_acquisition_framework = af.id_acquisition_framework + LEFT OUTER JOIN ( + SELECT id_synthese, string_agg(DISTINCT area_name, ', ') AS communes + FROM gn_synthese.cor_area_synthese cas + LEFT OUTER JOIN ref_geo.l_areas a_1 ON cas.id_area = a_1.id_area + JOIN ref_geo.bib_areas_types ta ON ta.id_type = a_1.id_type AND ta.type_code ='COM' + GROUP BY id_synthese + ) sa ON sa.id_synthese = s.id_synthese + LEFT JOIN ref_nomenclatures.t_nomenclatures n1 ON s.id_nomenclature_geo_object_nature = n1.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n2 ON s.id_nomenclature_grp_typ = n2.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n3 ON s.id_nomenclature_obs_technique = n3.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n6 ON s.id_nomenclature_bio_condition = n6.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n7 ON s.id_nomenclature_naturalness = n7.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n8 ON s.id_nomenclature_exist_proof = n8.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n9 ON s.id_nomenclature_diffusion_level = n9.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n11 ON s.id_nomenclature_sex = n11.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n12 ON s.id_nomenclature_obj_count = n12.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n13 ON s.id_nomenclature_type_count = n13.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n14 ON s.id_nomenclature_sensitivity = n14.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n15 ON s.id_nomenclature_observation_status = n15.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n16 ON s.id_nomenclature_blurring = n16.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n17 ON s.id_nomenclature_source_status = n17.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n18 ON s.id_nomenclature_info_geo_type = n18.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n19 ON s.id_nomenclature_determination_method = n19.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n20 ON s.id_nomenclature_behaviour = n20.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n21 ON s.id_nomenclature_valid_status = n21.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n22 ON s.id_nomenclature_biogeo_status = n22.id_nomenclature + LEFT JOIN ref_habitats.habref hab ON hab.cd_hab = s.cd_hab; +""" + ) + + op.execute( + """ + DROP VIEW gn_synthese.v_synthese_taxon_for_export_view; + """ + ) + op.execute( + """ +-- Vue export des taxons de la synthèse +-- Première version qui reste à affiner/étoffer +CREATE VIEW gn_synthese.v_synthese_taxon_for_export_view AS + SELECT DISTINCT + ref.nom_valide, + ref.cd_ref, + ref.nom_vern, + ref.group1_inpn, + ref.group2_inpn, + ref.group3_inpn, + ref.regne, + ref.phylum, + ref.classe, + ref.ordre, + ref.famille, + ref.id_rang +FROM gn_synthese.synthese s +JOIN taxonomie.taxref t ON s.cd_nom = t.cd_nom +JOIN taxonomie.taxref ref ON t.cd_ref = ref.cd_nom; +""" + ) def downgrade(): - conn = op.get_bind() - path = "geonature.migrations.data.core.gn_synthese" - filename = "synthese_view_export_remove_group3_inpn.sql" - conn.execute(text(importlib.resources.read_text(path, filename))) + op.execute( + """ + DROP VIEW gn_synthese.v_synthese_for_export; + """ + ) + + op.execute( + """ +CREATE VIEW gn_synthese.v_synthese_for_export AS + SELECT + s.id_synthese AS id_synthese, + s.date_min::date AS date_debut, + s.date_max::date AS date_fin, + s.date_min::time AS heure_debut, + s.date_max::time AS heure_fin, + t.cd_nom AS cd_nom, + t.cd_ref AS cd_ref, + t.nom_valide AS nom_valide, + t.nom_vern as nom_vernaculaire, + s.nom_cite AS nom_cite, + t.regne AS regne, + t.group1_inpn AS group1_inpn, + t.group2_inpn AS group2_inpn, + t.classe AS classe, + t.ordre AS ordre, + t.famille AS famille, + t.id_rang AS rang_taxo, + s.count_min AS nombre_min, + s.count_max AS nombre_max, + s.altitude_min AS alti_min, + s.altitude_max AS alti_max, + s.depth_min AS prof_min, + s.depth_max AS prof_max, + s.observers AS observateurs, + s.id_digitiser AS id_digitiser, -- Utile pour le CRUVED + s.determiner AS determinateur, + communes AS communes, + public.ST_astext(s.the_geom_4326) AS geometrie_wkt_4326, + public.ST_x(s.the_geom_point) AS x_centroid_4326, + public.ST_y(s.the_geom_point) AS y_centroid_4326, + public.ST_asgeojson(s.the_geom_4326) AS geojson_4326,-- Utile pour la génération de l'export en SHP + public.ST_asgeojson(s.the_geom_local) AS geojson_local,-- Utile pour la génération de l'export en SHP + s.place_name AS nom_lieu, + s.comment_context AS comment_releve, + s.comment_description AS comment_occurrence, + s.validator AS validateur, + n21.label_default AS niveau_validation, + s.meta_validation_date as date_validation, + s.validation_comment AS comment_validation, + s.digital_proof AS preuve_numerique_url, + s.non_digital_proof AS preuve_non_numerique, + d.dataset_name AS jdd_nom, + d.unique_dataset_id AS jdd_uuid, + d.id_dataset AS jdd_id, -- Utile pour le CRUVED + af.acquisition_framework_name AS ca_nom, + af.unique_acquisition_framework_id AS ca_uuid, + d.id_acquisition_framework AS ca_id, + s.cd_hab AS cd_habref, + hab.lb_code AS cd_habitat, + hab.lb_hab_fr AS nom_habitat, + s.precision as precision_geographique, + n1.label_default AS nature_objet_geo, + n2.label_default AS type_regroupement, + s.grp_method AS methode_regroupement, + n3.label_default AS technique_observation, + n5.label_default AS biologique_statut, + n6.label_default AS etat_biologique, + n22.label_default AS biogeographique_statut, + n7.label_default AS naturalite, + n8.label_default AS preuve_existante, + n9.label_default AS niveau_precision_diffusion, + n10.label_default AS stade_vie, + n11.label_default AS sexe, + n12.label_default AS objet_denombrement, + n13.label_default AS type_denombrement, + n14.label_default AS niveau_sensibilite, + n15.label_default AS statut_observation, + n16.label_default AS floutage_dee, + n17.label_default AS statut_source, + n18.label_default AS type_info_geo, + n19.label_default AS methode_determination, + n20.label_default AS comportement, + s.reference_biblio AS reference_biblio, + s.entity_source_pk_value AS id_origine, + s.unique_id_sinp AS uuid_perm_sinp, + s.unique_id_sinp_grp AS uuid_perm_grp_sinp, + s.meta_create_date AS date_creation, + s.meta_update_date AS date_modification, + s.additional_data as champs_additionnels, + COALESCE(s.meta_update_date, s.meta_create_date) AS derniere_action + FROM gn_synthese.synthese s + JOIN taxonomie.taxref t ON t.cd_nom = s.cd_nom + JOIN gn_meta.t_datasets d ON d.id_dataset = s.id_dataset + JOIN gn_meta.t_acquisition_frameworks af ON d.id_acquisition_framework = af.id_acquisition_framework + LEFT OUTER JOIN ( + SELECT id_synthese, string_agg(DISTINCT area_name, ', ') AS communes + FROM gn_synthese.cor_area_synthese cas + LEFT OUTER JOIN ref_geo.l_areas a_1 ON cas.id_area = a_1.id_area + JOIN ref_geo.bib_areas_types ta ON ta.id_type = a_1.id_type AND ta.type_code ='COM' + GROUP BY id_synthese + ) sa ON sa.id_synthese = s.id_synthese + LEFT JOIN ref_nomenclatures.t_nomenclatures n1 ON s.id_nomenclature_geo_object_nature = n1.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n2 ON s.id_nomenclature_grp_typ = n2.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n3 ON s.id_nomenclature_obs_technique = n3.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n6 ON s.id_nomenclature_bio_condition = n6.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n7 ON s.id_nomenclature_naturalness = n7.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n8 ON s.id_nomenclature_exist_proof = n8.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n9 ON s.id_nomenclature_diffusion_level = n9.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n11 ON s.id_nomenclature_sex = n11.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n12 ON s.id_nomenclature_obj_count = n12.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n13 ON s.id_nomenclature_type_count = n13.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n14 ON s.id_nomenclature_sensitivity = n14.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n15 ON s.id_nomenclature_observation_status = n15.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n16 ON s.id_nomenclature_blurring = n16.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n17 ON s.id_nomenclature_source_status = n17.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n18 ON s.id_nomenclature_info_geo_type = n18.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n19 ON s.id_nomenclature_determination_method = n19.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n20 ON s.id_nomenclature_behaviour = n20.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n21 ON s.id_nomenclature_valid_status = n21.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n22 ON s.id_nomenclature_biogeo_status = n22.id_nomenclature + LEFT JOIN ref_habitats.habref hab ON hab.cd_hab = s.cd_hab; + +""" + ) + + op.execute( + """ + DROP VIEW gn_synthese.v_synthese_taxon_for_export_view; + """ + ) + op.execute( + """ +-- Vue export des taxons de la synthèse +-- Première version qui reste à affiner/étoffer +CREATE VIEW gn_synthese.v_synthese_taxon_for_export_view AS + SELECT DISTINCT + ref.nom_valide, + ref.cd_ref, + ref.nom_vern, + ref.group1_inpn, + ref.group2_inpn, + ref.regne, + ref.phylum, + ref.classe, + ref.ordre, + ref.famille, + ref.id_rang +FROM gn_synthese.synthese s +JOIN taxonomie.taxref t ON s.cd_nom = t.cd_nom +JOIN taxonomie.taxref ref ON t.cd_ref = ref.cd_nom; +""" + ) From 0cd44e4c7202801e50d865d77e9d91bcbf5de5ed Mon Sep 17 00:00:00 2001 From: Jacobe2169 Date: Fri, 9 Feb 2024 13:15:52 +0100 Subject: [PATCH 12/22] fix migration --- .../versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py index c0094b39ff..af63ece1a5 100644 --- a/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py +++ b/backend/geonature/migrations/versions/9f4db1786c22_add_group3_inpn_to_synthese_views.py @@ -11,7 +11,7 @@ # revision identifiers, used by Alembic. revision = "9f4db1786c22" -down_revision = "446e902a14e7" +down_revision = "5a2c9c65129f" branch_labels = None depends_on = ("c4415009f164",) # Taxref v15 db structure From 7263941e36f31b63a6e10cb046d0257f276975ab Mon Sep 17 00:00:00 2001 From: Maxime Vergez Date: Mon, 3 Jul 2023 18:33:05 +0200 Subject: [PATCH 13/22] feat(front): support for group3_inpn in synthese --- .../synthese-advanced-form-store.service.ts | 13 +++++++++++++ .../synthese-advanced-form.component.html | 12 ++++++++++++ .../form/synthese-form/synthese-form.service.ts | 1 + 3 files changed, 26 insertions(+) diff --git a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts index 5769d2fe81..c473cc4b6b 100644 --- a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts +++ b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts @@ -19,6 +19,7 @@ export class TaxonAdvancedStoreService { public formBuilded: boolean; public taxonomyHab: Array; public taxonomyGroup2Inpn: Array; + public taxonomyGroup3Inpn: Array; public redListsValues: any = {}; constructor( @@ -88,5 +89,17 @@ export class TaxonAdvancedStoreService { } this.taxonomyGroup2Inpn = all_groups; }); + this._dataService.getRegneAndGroup3Inpn().subscribe((data) => { + this.taxonomyGroup3Inpn = data; + // eslint-disable-next-line guard-for-in + for (let regne in data) { + data[regne].forEach((group) => { + if (group.length > 0) { + all_groups.push({ value: group }); + } + }); + } + this.taxonomyGroup3Inpn = all_groups; + }); } } diff --git a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form.component.html b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form.component.html index 857f6ef23e..a32c1d18df 100644 --- a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form.component.html +++ b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form.component.html @@ -164,6 +164,18 @@
Attributs TaxRef
> +
+ + +
diff --git a/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-form.service.ts b/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-form.service.ts index 4c4591341b..4635b6b128 100644 --- a/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-form.service.ts +++ b/frontend/src/app/GN2CommonModule/form/synthese-form/synthese-form.service.ts @@ -88,6 +88,7 @@ export class SyntheseFormService { taxonomy_lr: null, taxonomy_id_hab: null, taxonomy_group2_inpn: null, + taxonomy_group3_inpn: null, taxon_rank: null, }); From 4e9f9420cb3c10ef7cfd617c44ebdd87b1e7c527 Mon Sep 17 00:00:00 2001 From: Maxime Vergez Date: Mon, 3 Jul 2023 18:33:29 +0200 Subject: [PATCH 14/22] feat(api): filter on group3_inpn in synthese --- .../geonature/core/gn_synthese/utils/query_select_sqla.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend/geonature/core/gn_synthese/utils/query_select_sqla.py b/backend/geonature/core/gn_synthese/utils/query_select_sqla.py index 7ecf1f5267..eaa0ceda52 100644 --- a/backend/geonature/core/gn_synthese/utils/query_select_sqla.py +++ b/backend/geonature/core/gn_synthese/utils/query_select_sqla.py @@ -260,7 +260,11 @@ def filter_taxonomy(self): self.query = self.query.where( Taxref.group2_inpn.in_(self.filters.pop("taxonomy_group2_inpn")) ) - + if "taxonomy_group3_inpn" in self.filters: + self.add_join(Taxref, Taxref.cd_nom, self.model.cd_nom) + self.query = self.query.where( + Taxref.group3_inpn.in_(self.filters.pop("taxonomy_group3_inpn")) + ) if "taxonomy_id_hab" in self.filters: self.add_join(Taxref, Taxref.cd_nom, self.model.cd_nom) self.query = self.query.where( From 493b0dec9e80a45009f2ee7c4e139c1f61a818be Mon Sep 17 00:00:00 2001 From: Maxime Vergez Date: Wed, 5 Jul 2023 14:39:39 +0200 Subject: [PATCH 15/22] feat(front): wip method to get group3 inpn --- frontend/src/app/GN2CommonModule/form/data-form.service.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/app/GN2CommonModule/form/data-form.service.ts b/frontend/src/app/GN2CommonModule/form/data-form.service.ts index fc305bccef..f26ba5f9c3 100644 --- a/frontend/src/app/GN2CommonModule/form/data-form.service.ts +++ b/frontend/src/app/GN2CommonModule/form/data-form.service.ts @@ -227,6 +227,10 @@ export class DataFormService { return this._http.get(`${this.config.API_TAXHUB}/taxref/regnewithgroupe2`); } + getRegneAndGroup3Inpn() { + return this._http.get(`${this.config.API_TAXHUB}/taxref/regnewithgroupe3`); + } + getTaxhubBibAttributes() { return this._http.get(`${this.config.API_TAXHUB}/bibattributs/`); } From b1ec28020a4be6bc32468577d701a1d606275c90 Mon Sep 17 00:00:00 2001 From: Maxime Vergez Date: Thu, 6 Jul 2023 16:14:30 +0200 Subject: [PATCH 16/22] fix(front): reset all_groups --- .../advanced-form/synthese-advanced-form-store.service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts index c473cc4b6b..47f1d17f52 100644 --- a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts +++ b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts @@ -76,7 +76,7 @@ export class TaxonAdvancedStoreService { this.taxonomyHab = data; }); - const all_groups = []; + let all_groups = []; this._dataService.getRegneAndGroup2Inpn().subscribe((data) => { this.taxonomyGroup2Inpn = data; // eslint-disable-next-line guard-for-in @@ -89,6 +89,8 @@ export class TaxonAdvancedStoreService { } this.taxonomyGroup2Inpn = all_groups; }); + + all_groups = []; this._dataService.getRegneAndGroup3Inpn().subscribe((data) => { this.taxonomyGroup3Inpn = data; // eslint-disable-next-line guard-for-in From 2dd2e6d27cfedb7508784bfb1150b12370ef5f04 Mon Sep 17 00:00:00 2001 From: Maxime Vergez Date: Mon, 7 Aug 2023 12:24:02 +0200 Subject: [PATCH 17/22] feat(front): change route because no need of regne Need to have the latest version of Taxhub --- .../app/GN2CommonModule/form/data-form.service.ts | 4 ++-- .../synthese-advanced-form-store.service.ts | 14 ++------------ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/frontend/src/app/GN2CommonModule/form/data-form.service.ts b/frontend/src/app/GN2CommonModule/form/data-form.service.ts index f26ba5f9c3..b8c269b651 100644 --- a/frontend/src/app/GN2CommonModule/form/data-form.service.ts +++ b/frontend/src/app/GN2CommonModule/form/data-form.service.ts @@ -227,8 +227,8 @@ export class DataFormService { return this._http.get(`${this.config.API_TAXHUB}/taxref/regnewithgroupe2`); } - getRegneAndGroup3Inpn() { - return this._http.get(`${this.config.API_TAXHUB}/taxref/regnewithgroupe3`); + getGroup3Inpn() { + return this._http.get(`${this.config.API_TAXHUB}/taxref/groupe3_inpn`); } getTaxhubBibAttributes() { diff --git a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts index 47f1d17f52..8c0e14dff2 100644 --- a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts +++ b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts @@ -90,18 +90,8 @@ export class TaxonAdvancedStoreService { this.taxonomyGroup2Inpn = all_groups; }); - all_groups = []; - this._dataService.getRegneAndGroup3Inpn().subscribe((data) => { - this.taxonomyGroup3Inpn = data; - // eslint-disable-next-line guard-for-in - for (let regne in data) { - data[regne].forEach((group) => { - if (group.length > 0) { - all_groups.push({ value: group }); - } - }); - } - this.taxonomyGroup3Inpn = all_groups; + this._dataService.getGroup3Inpn().subscribe((data) => { + this.taxonomyGroup3Inpn = data.map((item) => ({ value: item })); }); } } From ab68ac43b93c23d3481cf966976226661b086842 Mon Sep 17 00:00:00 2001 From: Maxime Vergez Date: Mon, 7 Aug 2023 12:27:35 +0200 Subject: [PATCH 18/22] perf(front): put back const Because no need anymore since it is not used by taxonomyGroup3Inpn --- .../advanced-form/synthese-advanced-form-store.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts index 8c0e14dff2..a5ed63fcdb 100644 --- a/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts +++ b/frontend/src/app/GN2CommonModule/form/synthese-form/advanced-form/synthese-advanced-form-store.service.ts @@ -76,7 +76,7 @@ export class TaxonAdvancedStoreService { this.taxonomyHab = data; }); - let all_groups = []; + const all_groups = []; this._dataService.getRegneAndGroup2Inpn().subscribe((data) => { this.taxonomyGroup2Inpn = data; // eslint-disable-next-line guard-for-in From 958ad25383ea30677d0d99fbba30c76075bd06b9 Mon Sep 17 00:00:00 2001 From: Maxime Vergez Date: Mon, 7 Aug 2023 15:48:42 +0200 Subject: [PATCH 19/22] refactor(api): merge group_inpn queries From filters --- .../core/gn_synthese/utils/query_select_sqla.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/backend/geonature/core/gn_synthese/utils/query_select_sqla.py b/backend/geonature/core/gn_synthese/utils/query_select_sqla.py index eaa0ceda52..7f970845a2 100644 --- a/backend/geonature/core/gn_synthese/utils/query_select_sqla.py +++ b/backend/geonature/core/gn_synthese/utils/query_select_sqla.py @@ -255,16 +255,6 @@ def filter_taxonomy(self): if len(cd_ref_childs) > 0: self.add_join(Taxref, Taxref.cd_nom, self.model.cd_nom) self.query = self.query.where(Taxref.cd_ref.in_(cd_ref_childs)) - if "taxonomy_group2_inpn" in self.filters: - self.add_join(Taxref, Taxref.cd_nom, self.model.cd_nom) - self.query = self.query.where( - Taxref.group2_inpn.in_(self.filters.pop("taxonomy_group2_inpn")) - ) - if "taxonomy_group3_inpn" in self.filters: - self.add_join(Taxref, Taxref.cd_nom, self.model.cd_nom) - self.query = self.query.where( - Taxref.group3_inpn.in_(self.filters.pop("taxonomy_group3_inpn")) - ) if "taxonomy_id_hab" in self.filters: self.add_join(Taxref, Taxref.cd_nom, self.model.cd_nom) self.query = self.query.where( @@ -276,6 +266,13 @@ def filter_taxonomy(self): red_list_filters = {} for colname, value in self.filters.items(): + if colname.startswith("taxonomy_group"): + # colname = group type (group2 or group3 inpn) + # value = list of group values + colname = colname.split("taxonomy_")[-1] + self.add_join(Taxref, Taxref.cd_nom, self.model.cd_nom) + self.query = self.query.where(getattr(Taxref, colname).in_(value)) + if colname.startswith("taxhub_attribut"): self.add_join(Taxref, Taxref.cd_nom, self.model.cd_nom) taxhub_id_attr = colname[16:] From 9bf0542e0bf255a3e0c0cf3466212ac07c08e042 Mon Sep 17 00:00:00 2001 From: Maxime Vergez Date: Mon, 7 Aug 2023 15:49:18 +0200 Subject: [PATCH 20/22] test(api): test groupX_inpn filters --- backend/geonature/tests/test_synthese.py | 44 +++++++++++------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/backend/geonature/tests/test_synthese.py b/backend/geonature/tests/test_synthese.py index efce673ee3..35f0d8df40 100644 --- a/backend/geonature/tests/test_synthese.py +++ b/backend/geonature/tests/test_synthese.py @@ -484,33 +484,29 @@ def test_filter_cor_observers(self, users, synthese_data): assert response.status_code == 200 @pytest.mark.parametrize( - "additionnal_column", - [("altitude_min"), ("count_min_max"), ("nom_vern_or_lb_nom")], + "group_inpn", + [ + ("group2_inpn"), + ("group3_inpn"), + ], ) - def test_get_observations_for_web_param_column_frontend( - self, app, users, synthese_data, additionnal_column - ): - """ - Test de renseigner le paramètre LIST_COLUMNS_FRONTEND pour renvoyer uniquement - les colonnes souhaitées - """ - app.config["SYNTHESE"]["LIST_COLUMNS_FRONTEND"] = [ - { - "prop": additionnal_column, - "name": "My label", - } - ] - - set_logged_user(self.client, users["self_user"]) - - response = self.client.get(url_for("gn_synthese.get_observations_for_web")) - data = response.get_json() - - expected_columns = {"id", "url_source", additionnal_column} + def test_get_observations_for_web_filter_group_inpn(self, users, synthese_data, group_inpn): + obs = synthese_data["obs1"] + taxref_from_cd_nom = Taxref.query.filter_by(cd_nom=obs.cd_nom).one() + group_from_taxref = getattr(taxref_from_cd_nom, group_inpn) + filter_name = "taxonomie_" + group_inpn - assert all( - set(feature["properties"].keys()) == expected_columns for feature in data["features"] + set_logged_user_cookie(self.client, users["self_user"]) + response = self.client.get( + url_for("gn_synthese.get_observations_for_web"), + json={ + filter_name: [group_from_taxref], + }, ) + response_json = response.json + assert obs.id_synthese in { + synthese["properties"]["id"] for synthese in response_json["features"] + } def test_export(self, users): set_logged_user(self.client, users["self_user"]) From 0dc4400f1802c397f55285c112a48c609f294a77 Mon Sep 17 00:00:00 2001 From: Jacobe2169 Date: Fri, 9 Feb 2024 13:50:14 +0100 Subject: [PATCH 21/22] fix missing column name in test synthese --- backend/geonature/tests/test_synthese.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/geonature/tests/test_synthese.py b/backend/geonature/tests/test_synthese.py index 35f0d8df40..d588000442 100644 --- a/backend/geonature/tests/test_synthese.py +++ b/backend/geonature/tests/test_synthese.py @@ -496,7 +496,7 @@ def test_get_observations_for_web_filter_group_inpn(self, users, synthese_data, group_from_taxref = getattr(taxref_from_cd_nom, group_inpn) filter_name = "taxonomie_" + group_inpn - set_logged_user_cookie(self.client, users["self_user"]) + set_logged_user(self.client, users["self_user"]) response = self.client.get( url_for("gn_synthese.get_observations_for_web"), json={ @@ -759,7 +759,7 @@ def assert_export_taxons_results(user, set_expected_cd_ref): rows_data_response = response.data.decode("utf-8").split("\r\n")[0:-1] row_header = rows_data_response[0] rows_taxons_data_response = rows_data_response[1:] - + print(row_header.split(";"), expected_columns_exports) assert row_header.split(";") == expected_columns_exports nb_expected_cd_noms = len(set_expected_cd_ref) From 591e7729e229b491c20cdf3e2d3220a3abcc0fbb Mon Sep 17 00:00:00 2001 From: Jacobe2169 Date: Mon, 12 Feb 2024 17:36:20 +0100 Subject: [PATCH 22/22] add missing test --- backend/geonature/tests/test_synthese.py | 30 +++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/backend/geonature/tests/test_synthese.py b/backend/geonature/tests/test_synthese.py index d588000442..492bf09909 100644 --- a/backend/geonature/tests/test_synthese.py +++ b/backend/geonature/tests/test_synthese.py @@ -483,6 +483,35 @@ def test_filter_cor_observers(self, users, synthese_data): # le requete doit etre OK marlgré la geom NULL assert response.status_code == 200 + @pytest.mark.parametrize( + "additionnal_column", + [("altitude_min"), ("count_min_max"), ("nom_vern_or_lb_nom")], + ) + def test_get_observations_for_web_param_column_frontend( + self, app, users, synthese_data, additionnal_column + ): + """ + Test de renseigner le paramètre LIST_COLUMNS_FRONTEND pour renvoyer uniquement + les colonnes souhaitées + """ + app.config["SYNTHESE"]["LIST_COLUMNS_FRONTEND"] = [ + { + "prop": additionnal_column, + "name": "My label", + } + ] + + set_logged_user(self.client, users["self_user"]) + + response = self.client.get(url_for("gn_synthese.get_observations_for_web")) + data = response.get_json() + + expected_columns = {"id", "url_source", additionnal_column} + + assert all( + set(feature["properties"].keys()) == expected_columns for feature in data["features"] + ) + @pytest.mark.parametrize( "group_inpn", [ @@ -759,7 +788,6 @@ def assert_export_taxons_results(user, set_expected_cd_ref): rows_data_response = response.data.decode("utf-8").split("\r\n")[0:-1] row_header = rows_data_response[0] rows_taxons_data_response = rows_data_response[1:] - print(row_header.split(";"), expected_columns_exports) assert row_header.split(";") == expected_columns_exports nb_expected_cd_noms = len(set_expected_cd_ref)