Closed geobrun closed 2 years ago
Problème également observé par un collègue, mais non identifié. Aussi sous 2.7.5. En BD la ligne relevé est créée, la ligne observation est créée, la ligne dénombrement n'est pas créée.
Je viens de regarder : j'ai 19 taxons sans dénombrement depuis le 21/07/2021 quand je suis passé en version 2.7.2 (pas de problème avant visiblement).
Normalement, ce n'est pas possible d'avoir un taxon sans dénombrement ?
@jbrieuclp : est-ce que ton collègue se retrouve aussi avec des lignes dans la synthèse où le taxon d'un relevé n'est pas le bon aussi ? Dans notre cas, c'est une mésange qui avait saisie sur le premier relevé sans dénombrement et qui s'est ensuite retrouvée enregistrée dans la synthèse à la place d'un cuivré commun sur le second relevé.
Ce problème n'est apparu que pour un seul observateur (celui qui saisit le plus chez nous).
Pour le moment je n'ai pas eu de retour sur ce type de cas. Après, à moins de repasser vérifier dans la synthèse toutes les données qui ont été saisies, on tombe sur ces erreurs par hasard.
Sur la question d'avoir un taxon sans dénombrement :
En tout cas techniquement c'est possible, en BD un taxon peut ne pas avoir de dénombrement.
Ok, merci pour les infos !
A priori, le mixte avec les noms de taxon n'est apparu qu'une seule fois chez nous. Tous les autres cas sont seulement concernés par un non-enregistrement du dénombrement.
Pour info, j'ai identifié les occurrences sans dénombrement avec la requête suivante :
SELECT * FROM pr_occtax.t_occurrences_occtax o WHERE NOT EXISTS ( SELECT * FROM pr_occtax.cor_counting_occtax c WHERE c.id_occurrence_occtax = o.id_occurrence_occtax) ORDER BY id_releve_occtax
Notre agent a finalement trouvé comment reproduire ce comportement. L'erreur ne se produit que si l'enchainement des relevés est activé.
L'agent saisit un nouveau relevé avec un taxon et un dénombrement. Il modifie le taxon pour que les min/max du dénombrement ne soient plus à 1 mais à 2. Il reçoit alors le message d'erreur suivant lorsqu'il enregistre le nouveau dénombrement : " Erreur : cliquez pour reprendre ce taxon". Voici le log de GeoNature correspondant à cette action :
[2021-10-04 15:04:10 +0000] [21076] [ERROR] Exception on /occtax/occurrence/3768 [POST]
Traceback (most recent call last):
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
cursor, statement, parameters, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 609, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.CheckViolation: new row for relation "cor_counting_occtax" violates check constraint "check_cor_counting_occtax_count_max"
DETAIL: Failing row contains (3802, 9b02ba34-a00d-4e67-8478-1d8f32b66d36, 3768, 1, 171, 146, 94, 2, 1, {}).
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/geonatureadmin/geonature/backend/geonature/core/gn_permissions/decorators.py", line 70, in __check_cruved_scope
return fn(*args, **kwargs)
File "/home/geonatureadmin/geonature/external_modules/occtax/backend/blueprint.py", line 589, in updateOccurrence
occurrenceHandler(request=request, occurrence=occurrence, info_role=info_role)
File "/home/geonatureadmin/geonature/external_modules/occtax/backend/blueprint.py", line 546, in occurrenceHandler
occurrence, errors = occurrenceSchema.load(request.get_json(), instance=occurrence)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 92, in load
return super().load(data, **kwargs)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 576, in load
result, errors = self._do_load(data, many, partial=partial, postprocess=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 658, in _do_load
index_errors=self.opts.index_errors,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 283, in deserialize
index=(index if index_errors else None)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 62, in call_and_store
value = getter_func(data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 276, in <lambda>
data
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/fields.py", line 265, in deserialize
output = self._deserialize(value, attr, data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/fields.py", line 464, in _deserialize
data, errors = self.schema.load(value)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 92, in load
return super().load(data, **kwargs)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 576, in load
result, errors = self._do_load(data, many, partial=partial, postprocess=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 683, in _do_load
original_data=data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 863, in _invoke_load_processors
data=data, many=many, original_data=original_data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 961, in _invoke_processors
data = [utils.if_none(processor(item), item) for item in data]
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 961, in <listcomp>
data = [utils.if_none(processor(item), item) for item in data]
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 71, in make_instance
setattr(instance, key, value)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 280, in __set__
instance_state(instance), instance_dict(instance), value, None
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 1326, in set
old = self.get(state, dict_, passive=PASSIVE_ONLY_PERSISTENT)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 730, in get
value = self.callable_(state, passive)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/strategies.py", line 760, in _load_for_state
session, state, primary_key_identity, passive
File "<string>", line 1, in <lambda>
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/strategies.py", line 902, in _emit_lazyload
.with_post_criteria(set_default_params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/ext/baked.py", line 544, in all
return list(self)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/ext/baked.py", line 439, in __iter__
self.session._autoflush()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1633, in _autoflush
util.raise_(e, with_traceback=sys.exc_info()[2])
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1622, in _autoflush
self.flush()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2540, in flush
self._flush(objects)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2682, in _flush
transaction.rollback(_capture_exception=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
with_traceback=exc_tb,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2642, in _flush
flush_context.execute()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py", line 422, in execute
rec.execute(self)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py", line 589, in execute
uow,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 236, in save_obj
update,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 995, in _emit_update_statements
statement, multiparams
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1011, in execute
return meth(self, multiparams, params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1130, in _execute_clauseelement
distilled_params,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1317, in _execute_context
e, statement, parameters, cursor, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1511, in _handle_dbapi_exception
sqlalchemy_exception, with_traceback=exc_info[2], from_=e
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
cursor, statement, parameters, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 609, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(psycopg2.errors.CheckViolation) new row for relation "cor_counting_occtax" violates check constraint "check_cor_counting_occtax_count_max"
DETAIL: Failing row contains (3802, 9b02ba34-a00d-4e67-8478-1d8f32b66d36, 3768, 1, 171, 146, 94, 2, 1, {}).
[SQL: UPDATE pr_occtax.cor_counting_occtax SET count_min=%(count_min)s WHERE pr_occtax.cor_counting_occtax.id_counting_occtax = %(pr_occtax_cor_counting_occtax_id_counting_occtax)s]
[parameters: {'count_min': 2, 'pr_occtax_cor_counting_occtax_id_counting_occtax': 3802}]
(Background on this error at: http://sqlalche.me/e/13/gkpj)
[2021-10-04 15:04:10 +0000] [21386] [ERROR] Exception on /occtax/occurrence/3768 [POST]
Traceback (most recent call last):
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
cursor, statement, parameters, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 609, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.CheckViolation: new row for relation "cor_counting_occtax" violates check constraint "check_cor_counting_occtax_count_max"
DETAIL: Failing row contains (3802, 9b02ba34-a00d-4e67-8478-1d8f32b66d36, 3768, 1, 171, 146, 94, 2, 1, {}).
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/geonatureadmin/geonature/backend/geonature/core/gn_permissions/decorators.py", line 70, in __check_cruved_scope
return fn(*args, **kwargs)
File "/home/geonatureadmin/geonature/external_modules/occtax/backend/blueprint.py", line 589, in updateOccurrence
occurrenceHandler(request=request, occurrence=occurrence, info_role=info_role)
File "/home/geonatureadmin/geonature/external_modules/occtax/backend/blueprint.py", line 546, in occurrenceHandler
occurrence, errors = occurrenceSchema.load(request.get_json(), instance=occurrence)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 92, in load
return super().load(data, **kwargs)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 576, in load
result, errors = self._do_load(data, many, partial=partial, postprocess=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 658, in _do_load
index_errors=self.opts.index_errors,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 283, in deserialize
index=(index if index_errors else None)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 62, in call_and_store
value = getter_func(data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 276, in <lambda>
data
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/fields.py", line 265, in deserialize
output = self._deserialize(value, attr, data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/fields.py", line 464, in _deserialize
data, errors = self.schema.load(value)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 92, in load
return super().load(data, **kwargs)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 576, in load
result, errors = self._do_load(data, many, partial=partial, postprocess=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 683, in _do_load
original_data=data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 863, in _invoke_load_processors
data=data, many=many, original_data=original_data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 961, in _invoke_processors
data = [utils.if_none(processor(item), item) for item in data]
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 961, in <listcomp>
data = [utils.if_none(processor(item), item) for item in data]
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 71, in make_instance
setattr(instance, key, value)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 280, in __set__
instance_state(instance), instance_dict(instance), value, None
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 1326, in set
old = self.get(state, dict_, passive=PASSIVE_ONLY_PERSISTENT)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 730, in get
value = self.callable_(state, passive)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/strategies.py", line 760, in _load_for_state
session, state, primary_key_identity, passive
File "<string>", line 1, in <lambda>
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/strategies.py", line 902, in _emit_lazyload
.with_post_criteria(set_default_params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/ext/baked.py", line 544, in all
return list(self)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/ext/baked.py", line 439, in __iter__
self.session._autoflush()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1633, in _autoflush
util.raise_(e, with_traceback=sys.exc_info()[2])
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1622, in _autoflush
self.flush()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2540, in flush
self._flush(objects)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2682, in _flush
transaction.rollback(_capture_exception=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
with_traceback=exc_tb,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2642, in _flush
flush_context.execute()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py", line 422, in execute
rec.execute(self)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py", line 589, in execute
uow,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 236, in save_obj
update,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 995, in _emit_update_statements
statement, multiparams
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1011, in execute
return meth(self, multiparams, params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1130, in _execute_clauseelement
distilled_params,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1317, in _execute_context
e, statement, parameters, cursor, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1511, in _handle_dbapi_exception
sqlalchemy_exception, with_traceback=exc_info[2], from_=e
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
cursor, statement, parameters, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 609, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(psycopg2.errors.CheckViolation) new row for relation "cor_counting_occtax" violates check constraint "check_cor_counting_occtax_count_max"
DETAIL: Failing row contains (3802, 9b02ba34-a00d-4e67-8478-1d8f32b66d36, 3768, 1, 171, 146, 94, 2, 1, {}).
[SQL: UPDATE pr_occtax.cor_counting_occtax SET count_min=%(count_min)s WHERE pr_occtax.cor_counting_occtax.id_counting_occtax = %(pr_occtax_cor_counting_occtax_id_counting_occtax)s]
[parameters: {'count_min': 2, 'pr_occtax_cor_counting_occtax_id_counting_occtax': 3802}]
(Background on this error at: http://sqlalche.me/e/13/gkpj)
[2021-10-04 15:04:10 +0000] [21386] [ERROR] Exception on /occtax/occurrence/3768 [POST]
Traceback (most recent call last):
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
cursor, statement, parameters, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 609, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.CheckViolation: new row for relation "cor_counting_occtax" violates check constraint "check_cor_counting_occtax_count_max"
DETAIL: Failing row contains (3802, 9b02ba34-a00d-4e67-8478-1d8f32b66d36, 3768, 1, 171, 146, 94, 2, 1, {}).
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/geonatureadmin/geonature/backend/geonature/core/gn_permissions/decorators.py", line 70, in __check_cruved_scope
return fn(*args, **kwargs)
File "/home/geonatureadmin/geonature/external_modules/occtax/backend/blueprint.py", line 589, in updateOccurrence
occurrenceHandler(request=request, occurrence=occurrence, info_role=info_role)
File "/home/geonatureadmin/geonature/external_modules/occtax/backend/blueprint.py", line 546, in occurrenceHandler
occurrence, errors = occurrenceSchema.load(request.get_json(), instance=occurrence)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 92, in load
return super().load(data, **kwargs)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 576, in load
result, errors = self._do_load(data, many, partial=partial, postprocess=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 658, in _do_load
index_errors=self.opts.index_errors,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 283, in deserialize
index=(index if index_errors else None)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 62, in call_and_store
value = getter_func(data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 276, in <lambda>
data
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/fields.py", line 265, in deserialize
output = self._deserialize(value, attr, data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/fields.py", line 464, in _deserialize
data, errors = self.schema.load(value)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 92, in load
return super().load(data, **kwargs)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 576, in load
result, errors = self._do_load(data, many, partial=partial, postprocess=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 683, in _do_load
original_data=data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 863, in _invoke_load_processors
data=data, many=many, original_data=original_data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 961, in _invoke_processors
data = [utils.if_none(processor(item), item) for item in data]
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 961, in <listcomp>
data = [utils.if_none(processor(item), item) for item in data]
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 71, in make_instance
setattr(instance, key, value)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 280, in __set__
instance_state(instance), instance_dict(instance), value, None
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 1326, in set
old = self.get(state, dict_, passive=PASSIVE_ONLY_PERSISTENT)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 730, in get
value = self.callable_(state, passive)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/strategies.py", line 760, in _load_for_state
session, state, primary_key_identity, passive
File "<string>", line 1, in <lambda>
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/strategies.py", line 902, in _emit_lazyload
.with_post_criteria(set_default_params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/ext/baked.py", line 544, in all
return list(self)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/ext/baked.py", line 439, in __iter__
self.session._autoflush()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1633, in _autoflush
util.raise_(e, with_traceback=sys.exc_info()[2])
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1622, in _autoflush
self.flush()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2540, in flush
self._flush(objects)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2682, in _flush
transaction.rollback(_capture_exception=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
with_traceback=exc_tb,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2642, in _flush
flush_context.execute()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py", line 422, in execute
rec.execute(self)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py", line 589, in execute
uow,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 236, in save_obj
update,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 995, in _emit_update_statements
statement, multiparams
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1011, in execute
return meth(self, multiparams, params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1130, in _execute_clauseelement
distilled_params,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1317, in _execute_context
e, statement, parameters, cursor, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1511, in _handle_dbapi_exception
sqlalchemy_exception, with_traceback=exc_info[2], from_=e
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
cursor, statement, parameters, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 609, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(psycopg2.errors.CheckViolation) new row for relation "cor_counting_occtax" violates check constraint "check_cor_counting_occtax_count_max"
DETAIL: Failing row contains (3802, 9b02ba34-a00d-4e67-8478-1d8f32b66d36, 3768, 1, 171, 146, 94, 2, 1, {}).
[SQL: UPDATE pr_occtax.cor_counting_occtax SET count_min=%(count_min)s WHERE pr_occtax.cor_counting_occtax.id_counting_occtax = %(pr_occtax_cor_counting_occtax_id_counting_occtax)s]
[parameters: {'count_min': 2, 'pr_occtax_cor_counting_occtax_id_counting_occtax': 3802}]
(Background on this error at: http://sqlalche.me/e/13/gkpj)
[2021-10-04 15:04:11 +0000] [21386] [ERROR] Exception on /occtax/occurrence/3768 [POST]
Traceback (most recent call last):
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
cursor, statement, parameters, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 609, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.CheckViolation: new row for relation "cor_counting_occtax" violates check constraint "check_cor_counting_occtax_count_max"
DETAIL: Failing row contains (3802, 9b02ba34-a00d-4e67-8478-1d8f32b66d36, 3768, 1, 171, 146, 94, 2, 1, {}).
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/geonatureadmin/geonature/backend/geonature/core/gn_permissions/decorators.py", line 70, in __check_cruved_scope
return fn(*args, **kwargs)
File "/home/geonatureadmin/geonature/external_modules/occtax/backend/blueprint.py", line 589, in updateOccurrence
occurrenceHandler(request=request, occurrence=occurrence, info_role=info_role)
File "/home/geonatureadmin/geonature/external_modules/occtax/backend/blueprint.py", line 546, in occurrenceHandler
occurrence, errors = occurrenceSchema.load(request.get_json(), instance=occurrence)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 92, in load
return super().load(data, **kwargs)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 576, in load
result, errors = self._do_load(data, many, partial=partial, postprocess=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 658, in _do_load
index_errors=self.opts.index_errors,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 283, in deserialize
index=(index if index_errors else None)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 62, in call_and_store
value = getter_func(data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/marshalling.py", line 276, in <lambda>
data
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/fields.py", line 265, in deserialize
output = self._deserialize(value, attr, data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/fields.py", line 464, in _deserialize
data, errors = self.schema.load(value)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 92, in load
return super().load(data, **kwargs)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 576, in load
result, errors = self._do_load(data, many, partial=partial, postprocess=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 683, in _do_load
original_data=data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 863, in _invoke_load_processors
data=data, many=many, original_data=original_data)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 961, in _invoke_processors
data = [utils.if_none(processor(item), item) for item in data]
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow/schema.py", line 961, in <listcomp>
data = [utils.if_none(processor(item), item) for item in data]
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/marshmallow_sqlalchemy/schema/load_instance_mixin.py", line 71, in make_instance
setattr(instance, key, value)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 280, in __set__
instance_state(instance), instance_dict(instance), value, None
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 1326, in set
old = self.get(state, dict_, passive=PASSIVE_ONLY_PERSISTENT)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/attributes.py", line 730, in get
value = self.callable_(state, passive)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/strategies.py", line 760, in _load_for_state
session, state, primary_key_identity, passive
File "<string>", line 1, in <lambda>
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/strategies.py", line 902, in _emit_lazyload
.with_post_criteria(set_default_params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/ext/baked.py", line 544, in all
return list(self)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/ext/baked.py", line 439, in __iter__
self.session._autoflush()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1633, in _autoflush
util.raise_(e, with_traceback=sys.exc_info()[2])
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1622, in _autoflush
self.flush()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2540, in flush
self._flush(objects)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2682, in _flush
transaction.rollback(_capture_exception=True)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
with_traceback=exc_tb,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2642, in _flush
flush_context.execute()
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py", line 422, in execute
rec.execute(self)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py", line 589, in execute
uow,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 236, in save_obj
update,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 995, in _emit_update_statements
statement, multiparams
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1011, in execute
return meth(self, multiparams, params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1130, in _execute_clauseelement
distilled_params,
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1317, in _execute_context
e, statement, parameters, cursor, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1511, in _handle_dbapi_exception
sqlalchemy_exception, with_traceback=exc_info[2], from_=e
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
cursor, statement, parameters, context
File "/home/geonatureadmin/geonature/backend/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 609, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(psycopg2.errors.CheckViolation) new row for relation "cor_counting_occtax" violates check constraint "check_cor_counting_occtax_count_max"
DETAIL: Failing row contains (3802, 9b02ba34-a00d-4e67-8478-1d8f32b66d36, 3768, 1, 171, 146, 94, 2, 1, {}).
[SQL: UPDATE pr_occtax.cor_counting_occtax SET count_min=%(count_min)s WHERE pr_occtax.cor_counting_occtax.id_counting_occtax = %(pr_occtax_cor_counting_occtax_id_counting_occtax)s]
[parameters: {'count_min': 2, 'pr_occtax_cor_counting_occtax_id_counting_occtax': 3802}]
(Background on this error at: http://sqlalche.me/e/13/gkpj)
Pour contourner ce problème, lors de la modification du taxon, il doit laisser le minimum à 1 et augmenter le maximum à 2. Il enregistre le nouveau dénombrement et recommence une nouvelle modification du taxon. Il passe le minimum à 2, sa modification est validée et il termine la saisie du relevé. Quand il retourne sur le relevé dans Occtax, aucun dénombrement n'a été enregistré.
Dernière action : si l'agent enchaîne un second relevé, le dernier dénombrement qu'il a enregistré s'affiche par défaut. Il renseigne son taxon/dénombrement et enregistre son relevé. Dans Occtax, le relevé est bien enregistré. Par contre, dans la synthèse, c'est le nom du taxon du précédent relevé qui s'affiche à la place et non le dernier nom saisi.
En regardant les logs, cela donne l'impression que la mise à jour du dénombrement échoue dans la base de données car il y a une mise à jour du minimum sans changer le maximum (par exemple, min = 2 et max = 1). Après, pourquoi les erreurs s'enchaînent, c'est assez obscur !
Rien de grave, il suffit de faire attention, mais mieux vaut prévenir les agents qui saisissent des données !
Ok, dans ce que tu as expliqué hier, il y a un second problème lié au dénombrements que nous avions également identifié. Mais non reproduit hier.
En ce qui concerne le premier problème, celui de la suppression d'un dénombrement et d'un autoremplissage de cette partie de ce formulaire il faut faire cette manipulation :
Du coup en expliquant ce principe avec les retours BD il se passe ceci, l'envoi du formulaire et le retour de BD étant les parties au format code :
envoi
{id_releve_occtax: null, [...]}
retour{id_releve_occtax: 123, [...]}
envoi
{id_occurrence_occtax: null, [...], id_releve_occtax: 123, [{ id_counting_occtax: null, id_occurrence_occtax: null, [...]}]}
retour{id_occurrence_occtax: 123456, [...], id_releve_occtax: 123, [{ id_counting_occtax: 987654, id_occurrence_occtax: 123456, [...]}]}
envoi
{id_occurrence_occtax: 123456, [...], id_releve_occtax: 123, [{ id_counting_occtax: 987654, id_occurrence_occtax: 123456, [...]}]}
retour{id_occurrence_occtax: 123456, [...], id_releve_occtax: 123, [{ id_counting_occtax: 987654, id_occurrence_occtax: 123456, [...]}]}
=> pas de changement ici
envoi
{id_releve_occtax: null, [...]}
retour{id_releve_occtax: 456, [...]}
envoi
{id_occurrence_occtax: null, [...], id_releve_occtax: 456, [{ id_counting_occtax: 987654, id_occurrence_occtax: null, [...]}]}
retour{id_occurrence_occtax: 654321, [...], id_releve_occtax: 456, [{ id_counting_occtax: 987654, id_occurrence_occtax: 654321, [...]}]}
=> la ligne du cor_counting correspond au premier relevé, mais la valeur du champid_occurrence_occtax
est remplacée.
J'identifie le problème ici : https://github.com/PnX-SI/GeoNature/blob/00489e8c8d4f9346ac1536b8e22c648be95848da/contrib/occtax/frontend/app/occtax-form/occurrence/occurrence.service.ts#L122-L138 avec une souscription à un Observable dans le résultat d'une souscription. Des operateurs de RxJS peuvent être plus adéquate : ici changer mergeMap par switchMap https://github.com/PnX-SI/GeoNature/blob/00489e8c8d4f9346ac1536b8e22c648be95848da/contrib/occtax/frontend/app/occtax-form/occurrence/occurrence.service.ts#L267
Pour résoudre le bug, contrairement à ce que j'ai détaillé au dessus (la souscription d'un Observable dans le résultat d'une souscription) il faut employer l'operateur RxJS combineLatest pour combiner l'observable des champs supplémentaire avec celui des valeurs de l'occurrence.
A côté de ce bug, dans les ajouts de codes qui ont été fait pour dev la fonctionnalité des champs supplémentaires, j'ai du mal à comprendre l'intérêt de certaines fonctions ou lignes de codes. La fonction ci dessous me semble effectuer des choses simples de manière complexes https://github.com/PnX-SI/GeoNature/blob/00489e8c8d4f9346ac1536b8e22c648be95848da/contrib/occtax/frontend/app/occtax-form/occurrence/occurrence.service.ts#L210
Idem pour la fonction ci-dessous qui s'embête à refaire ce qu'un array.filter(elem => elem.code_object === "OCCTAX_OCCURENCE")
réaliserait simplement.
https://github.com/PnX-SI/GeoNature/blob/00489e8c8d4f9346ac1536b8e22c648be95848da/contrib/occtax/frontend/app/occtax-form/occurrence/occurrence.service.ts#L243
Bref je vais publier une PR pour remettre un peu d'ordre là dedans car une simple issue n'est plus suffisante et on se retrouve actuellement comme des idiots avec une BDD en vrac.
Ok, merci pour les retours ! Effectivement, il est possible que plusieurs structures se retrouvent avec quelques erreurs dans leur base de données sans s'en être rendu compte. :(
Si les infos sont bonnes dans occtax, il faudrait prévoir de recalculer la synthèse pour les données d'occtax dans les prochains scripts de migration pour éviter les conséquences...
OK merci pour ces éléments et explications. Si il y a potentiellement des conséquences sur les données, ça serait utile de fournir un fichier de migrations qui permet de les corriger dans la prochaine version.
@DonovanMaillard : les infos dans Occtax ne sont pas toujours complètes : parfois, il manque les dénombrements dans certains taxons. Dans l'idéal, il faudrait aussi faire remonter les taxons où des dénombrements manques dans la prochain script de migration.
Le problème de saisie a été corrigé dans la 2.9.0. La correction des données (initialement discutée sur https://github.com/PnX-SI/GeoNature/pull/1510#issuecomment-958800785) est en cours de tests dans la PR dédiée : https://github.com/PnX-SI/GeoNature/pull/1589
Pour contourner ce problème, lors de la modification du taxon, il doit laisser le minimum à 1 et augmenter le maximum à 2. Il enregistre le nouveau dénombrement et recommence une nouvelle modification du taxon. Il passe le minimum à 2, sa modification est validée et il termine la saisie du relevé.
Bonjour,
En version 2.9.2, j'ai toujours ce problème de saisie des dénombrements (plutôt de modification du min), avec l'erreur new row for relation "cor_counting_occtax" violates check constraint "check_cor_counting_occtax_count_max"
.
Ce n'est pas ce problème de saisie qui avait été corrigé dans la 2.9.0 ? (désolée, ce ticket aborde plusieurs bugs, pas sûre d'avoir bien suivi ce qui s'est fait ou non).
@Splendens Est-ce que tu peux préciser exactement le cheminement que tu fais pour produire ce bug ? Merci !
En voulant éditer un "dénombrement", si on renseigne un nouveau min supérieur à l'ancien max, il y a le bug.
Par exemple, pour reproduire ça :
Bon ben je reproduis toujours pas sur develop.. A garder en mémoire de retester quand tu auras déployer la 2.10
Je teste sur le serveur de DEMO en 2.9.1 (https://demo.geonature.fr/geonature). Mais en fait, je ne comprends pas comment tu peux avoir un count_min saisi supérieur au count_max, vu que quand on renseigne un count_min supérieur au count_max, cela modifie automatiquement le count_max pour le mettre à la même valeur que le count_min.
Je saisis un dénombrement de 3 | 3 :
Je modifie le count_min pour le mettre à 5, cela passe le count_max à 5 automatiquement :
Si mon count_max est supérieur au count_min, et que je modifie en mettant un count_min supérieur au count_max, cela ne me modifie pas le count_max, mais ça me bloque le formulaire.
Je saisis un dénombrement 5 | 8 :
Je le modifie en 9 | 8, le formulaire est bloqué avec un message clair :
Oui, bien sûr que je laisse un max supérieur au min ! Mais si le nouveau min et supérieur à l'ancien max, l'enregistrement de la modification du dénombrement ne fonctionne pas.
Par exemple j'enregistre un taxon avec en dénombrement min 1 max 2 : l'enregistrement fonctionne. Je met ce même taxon en édition pour le corriger, et je passe le min à 3 (ou n'importe quoi de plus que 2) et max à 4 (ou n'importe quoi de plus que le min que je viens de saisir) : là l'enregistrement ne fonctionne pas. De ce que je comprends, ce nouveau min est comparé à l'ancien max et pas au nouveau côté bd.
Je ne reproduis pas sur le serveur de DEMO (https://demo.geonature.fr/geonature/) en version 2.9.1. On va faire des tests pour voir si on reproduit sur la branche DEVELOP.
@Splendens, on est bien sur un soucis différent de celui concerné par le ticket initial. On vient de tester à nouveau et on ne reproduit pas non plus sur DEVELOP.
Ah ! Il faudrait mieux que j'ouvre un autre ticket du coup ? Je me suis permise d'en parlé ici car @geobrun a soulevé le bug dans son message du 4 octobre 2021 :
L'agent saisit un nouveau relevé avec un taxon et un dénombrement. Il modifie le taxon pour que les min/max du dénombrement ne soient plus à 1 mais à 2. Il reçoit alors le message d'erreur suivant lorsqu'il enregistre le nouveau dénombrement : " Erreur : cliquez pour reprendre ce taxon".
Et j'ai exactement ce même problème dans une installation neuve de GeoNature 2.9.2. Si ce n'est pas sur develop, ça veut dire que le bug a disparu dans la prochaine version de GN ? (dans ce cas, c'est parfait, et désolée pour le bruit !)
Je viens de tester et je n'ai pas non plus ici. C'est peut-être du à une config spécifique ?
Non @Splendens, ce n'était pas exactement le même problème que j'avais identifié : c'était effectivement un problème sur un dénombrement modifié par un utilisateur dans Occtax, mais qui s'enregistrait bien côté interface web. Par contre, c'était ensuite côté base de données qu'il y avait un souci : l'enregistrement avait été mal pris en compte (absent ou erroné de mémoire).
Pour clôturer cette affaire de min/max en édition : c'est bon, plus de bug ! Cela devait être une histoire de cache. Merci à tous !
Concernant le problème initial de ce ticket :
Bonjour tout le monde,
J'ai un comportement curieux qui est apparu dans la synthèse depuis notre passage en version 2.7 (début septembre). Notre version actuelle est la 2.7.5.
Parfois (rarement), il y a des mixtes d'enregistrement entre les relevés, les taxons et les dénombrements. Voilà une description du problème :
Dans Occtax, les deux relevés ont été correctement enregistrés. Par contre, deux soucis apparaissent dans la synthèse :
Quand on retourne dans Occtax, si on modifie les données des relevés en question, la synthèse se met à jour correctement. Du coup, on peut quand même corriger les relevés problématiques quand on les repère pour que la synthèse affiche les bonnes données.
Quelqu'un a-t-il déjà rencontré un problème comme celui-ci ?