Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions backend/gn_module_monitoring/config/generic/site.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
"label": "Site",
"label_list": "Sites",
"genre": "M",
"filters": {
"active": true
},
"geom_field_name": "geom",
"uuid_field_name": "uuid_base_site",
"geometry_type": [
Expand All @@ -19,6 +22,7 @@
"id_inventor",
"first_use_date",
"last_visit",
"active",
"nb_visits",
"altitude_min",
"altitude_max",
Expand All @@ -29,6 +33,7 @@
"base_site_code",
"last_visit",
"id_inventor",
"active",
"nb_visits",
"types_site",
"nb_individuals"
Expand Down Expand Up @@ -120,6 +125,13 @@
"nullDefault": true,
"definition": "Permet de n'avoir que les types de site lié au module",
"designStyle": "bootstrap"
},
"active": {
"type_widget": "bool_checkbox",
"attribut_label": "Actif",
"required": true,
"default": true,
"value": true
}
}
}
16 changes: 16 additions & 0 deletions backend/gn_module_monitoring/routes/monitoring.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@
from geonature.core.gn_commons.models.base import TModules
from geonature.core.gn_permissions.models import TObjects
from geonature.core.imports.models import Destination
from gn_module_monitoring.monitoring.models import TBaseSites

from geonature.utils.env import DB, ROOT_DIR
from geonature.utils.errors import GeoNatureError
import geonature.utils.filemanager as fm

from gn_module_monitoring.blueprint import blueprint
Expand Down Expand Up @@ -236,6 +238,20 @@ def update_object_api(scope, module_code, object_type, id):
@json_resp
def create_object_api(module_code, object_type, id):
post_data = dict(request.get_json())

# prevent visit creation if site is inactive
if object_type == "visit":
id_base_site = post_data["properties"]["id_base_site"]
query = select(TBaseSites.active).where(TBaseSites.id_base_site == id_base_site)
is_active = DB.session.scalar(query)

if not is_active:
raise GeoNatureError(
"MONITORING: create_object_api {} : site n°{} is inactive".format(
object_type, str(id_base_site)
)
)

# get_config(module_code, force=True)
return create_or_update_object_api(module_code, object_type, id)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,9 @@ <h2>{{ 'Monitoring.DeletingPopup.Warning' | translate }}</h2>
<ng-template #chooseProtocolPopup>
<option-list-btn
placeholder="Sélectionner le protocole"
label="{{ 'Monitoring.Sites.addVisit' | translate }}"
label="{{ row.active ? 'Monitoring.Sites.addVisit' : 'Monitoring.Sites.inactiveSite' | translate }}"
[iconOrButton]="icon"
[canCreateChild]="canCreateChild"
[canCreateChild]="canCreateChild && row.active"
[item]="row"
(onDeployed)="addChildrenVisit(row)"
(onSaved)="saveOptionChild($event)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,10 @@ export class MonitoringDatatableGComponent implements OnInit {
this.canCreateChild = this.permission[objectTypeChild].canCreate ? true : false;
// Cas du module générique (moduleCode = 'generic')
// Il n'y a pas de permissions pour les visites,
// elles sont créées dans le contexte d'un module
// Par défaut : création autorisée mais seul les modules où l'utilisateur a le droit de créer des visites
// seront afficher dans le menu déroulant
// elles sont créées dans le contexte d'un module.
// Par défaut : création autorisée sauf pour les sites inactifs
// mais seuls les modules où l'utilisateur a le droit de créer des visites*
// seront affichés dans le menu déroulant
if (this.moduleCode === 'generic') this.canCreateChild = true;
break;
case 'individual':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
parentPath="site"
>
<!-- Bouton pour ajouter une visite
dans le module generic le bouton est toujours actif c'est la liste des modules disponibles à l'utilisateur qui determinera les permissions
dans le module generic le bouton est toujours actif, sauf si le site est désactivé, c'est la liste des modules disponibles à l'utilisateur qui determinera les permissions
Sinon dans le contexte d'un sous module on verifie la permission sur VISITES -->
<option-list-btn
add-button
Expand All @@ -54,8 +54,6 @@
[optionList]="modules"
(onDeployed)="getModules()"
(onSaved)="addNewVisit($event)"
[canCreateChild]="
moduleCode === 'generic' ? true : currentPermission?.MONITORINGS_VISITES?.canCreate > 0
"
[canCreateChild] = "canCreateVisit"
></option-list-btn>
</pnx-monitoring-datatable-g>
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,16 @@ export class MonitoringSitesDetailComponent extends MonitoringGeomComponent impl
}
}

get canCreateVisit() {
if (this.obj.properties.active === false) {
// is the site inactive?
return false;
}
return this.moduleCode === 'generic'
? true
: !!this.currentPermission?.MONITORINGS_VISITES?.canCreate === true; // check permission
}

addNewVisit($event: SelectObject) {
const moduleCode = $event.id;
//create_object/cheveches_sites_group/visit?id_base_site=47
Expand Down
1 change: 1 addition & 0 deletions frontend/app/interfaces/geom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export interface ISite extends IGeomObject {
id_sites_group: number;
id_inventor: string[];
inventor: string[];
active: boolean;
}

export interface ISiteField extends Omit<ISite, 'types_site'> {
Expand Down
3 changes: 2 additions & 1 deletion frontend/assets/i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@
"NoModules" : "Aucun protocole n'est disponible pour ce type de site"
},
"Sites" : {
"addVisit" : "Ajouter une visite"
"addVisit" : "Ajouter une visite",
"inactiveSite" : "Site inactif"
},
"Actions" : {
"Done" : " effectuée",
Expand Down
Loading