georchestra / cadastrapp

Cadastre application for geOrchestra
GNU General Public License v3.0
10 stars 19 forks source link

[Infobulle] erreur 500 si UF demandée et interrogation hors commune autorisée #287

Closed MaelREBOUX closed 5 years ago

MaelREBOUX commented 7 years ago

Si on active "UF" sur la barre d'outils : on a une erreur 500 sur une commune sur laquelle on n'a pas d'accès aux DN.

Le contenu renvoyé est : Infobulle : Error occured when trying to get information from server, please check server logs

select uf.comptecommunal, sum(p.dcntpa) as dcntpa_sum, sum(p.surfc) as sigcal_sum from cadastrapp_arcopole.parcelleDetails p, cadastrapp_arcopole.proprietaire_parcelle proparc, cadastrapp_arcopole.uf_parcelle uf  
where proparc.parcelle = '350047000AS0350'
 and proparc.comptecommunal = uf.comptecommunal 
 and p.parcelle=uf.parcelle
 AND p.cgocommune IN ('350238' )  GROUP BY uf.comptecommunal ;

renvoie bien 0 enregistrement

MaelREBOUX commented 7 years ago

J'ai retesté ce matin à cause des diff entre PF de test et PF de prod.

Comportement idem : erreur 500 sur les 2 PF.

Et confirmé aussi sur PF Le Puy par @jusabatier

pierrejego commented 7 years ago

ok je ne comprenais pas pourquoi je n'arrivais pas à reproduire, mais en fait c'est un cas particulier. la parcelle 350047000AS0350 n'est dans EDIGEO. Du coup, il n'y a pas d'entrée en base permettant de calculer la surface.

Dans les autres cas, c'est à dire la plus part du temps ça fonctionne bien ? ou vous avez tout le temps l'erreur 500 ?

jusabatier commented 7 years ago

Euh il me semble bien que ça le faisait tout le temps du moment qu'on est sur une autre commune que celle qui est assignée au compte utilisateur.

MaelREBOUX commented 7 years ago

si si : AS350 parcelle tout à fait normale. ça le fait quand tu vas hors de ta commune autorisée.

jusabatier commented 7 years ago

org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:71) org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:806) org.springframework.jdbc.core.JdbcTemplate.queryForMap(JdbcTemplate.java:839) org.georchestra.cadastrapp.service.InfoBulleController.getInfoBulleUniteFonciere(InfoBulleController.java:168) org.georchestra.cadastrapp.service.InfoBulleController.getInfoBulle(InfoBulleController.java:57)

pierrejego commented 7 years ago

... du coup je ne comprends pas pourquoi je ne le reproduis pas sur mes serveurs. J'aimerai reproduire pour être sur de la correction...

Et pour la parcelle, j'ai ce message si je veux zoomer dessus. Donc si elle est normal, le message ne l'est pas si ?

image

MaelREBOUX commented 7 years ago

A relire, si on traite #201 on règlera ce problème ?

jusabatier commented 7 years ago

Ce message s'affiche normalement lorsqu'on essaye de faire un zoom (resultat de recherche) et que soit aucune parcelle n'est sélectionnée, soit la parcelle sélectionnée est uniquement présente dans le fichier MAJIC, et ne dispose pas de correspondance EDIGEO (pas vectorisée).

Actuellement, ce message avait été ajouté afin que les parcelles non vectorisées puissent être retrouvées via le formulaire de recherche et que l'on puisse consulter leur fiche foncière sans avoir des messages incompréhensibles en essayant de zoomer dessus.

Le problème traité par #201 est l'opposé, il s'agit de pouvoir retrouver une parcelle vectorisée mais n'ayant pas de correspondance dans les fichiers MAJIC, afin d'a minima pouvoir zoomer dessus et la localiser. Eventuellement en tirer un plan via l'impression MFapp.

En tout cas, cela ne me semble pas lié au souci évoqué par cette issue.

Ici le problème vient de la requete de l'infobulle qui est faite lorsqu'on est en dehors des communes autorisées pour son profil.

Pour corriger cette erreur il faut aller voir dans le fichier : https://github.com/georchestra/cadastrapp/blob/master/cadastrapp/src/main/java/org/georchestra/cadastrapp/service/InfoBulleController.java#L168

Cf les logs que j'ai posté ci-dessus. Le résultat est récupéré dans un queryForMap, or cette fonction necessite de recupérer au moins un résultat, ce qui n'est pas le cas quand on est hors de son perimetre de compétence.

Visiblement on a donc affaire à un problème au niveau de la requête SQL, probablement le filtre géographique qui n'est pas correctement ajouté et fait qu'aucun resultat correspondant n'est retrouvé.

landryb commented 5 years ago

Sur une maj en 1.7 je viens d'avoir une NPE précisément pour cette erreur, le bug existe toujours (j'imagine qu'il est revenu suite a 0c67a2556 ?).

On ne gère pas le cas d'une demande d'UF sur un zone non autorisée, donc on affiche la carte dans la popup/nouvel onglet, mais le GET cadastrapp/services/getInfoUniteFonciere?parcelle=<parcelleid> renvoie un code 500 et les infos textuelles ne sont pas affichées :/

java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: Incorrect result size: expected 1, actual 0
    org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116)
    org.apache.cxf.phase.PhaseInterceptorChain.wrapExceptionAsFault(PhaseInterceptorChain.java:365)
    org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:323)
    org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251)
    org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
    org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
    org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293)
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:217)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
pierrejego commented 5 years ago

Ok, a prendre en compte dans la 1.8 Je vais essayer de trouver un cas dans mes données pour reproduire d'ici demain

landryb commented 5 years ago

Il n'y a pas de "cas" a trouver, il suffit juste de faire un demande d'UF dans une commune ou on n'a pas les droits :)

MaelREBOUX commented 5 years ago

ou simplement de vouloir consulter l'info-bulle

pierrejego commented 5 years ago

Ok on a reproduit correction en cours

MaelREBOUX commented 5 years ago

Cool : hâte de tester

MaelREBOUX commented 5 years ago

Bon : enfin pu tester. Pas facile à cause de la gestion des comptes.

pour l'UF : on n'a plus d'erreur 500 sur la page UF mais une page avec juste une carte et pas d'autre information.

capture_061

Perso : si on pouvait mettre un message genre "Aucune information n'est affichée car vous ne disposez pas d'un accès aux données foncières pour cette commune." : ce serait un peu mieux pour l'utilisateur.

Pour l'infobulle : Le positif : la requête aboutit et on récolte un JSON en réponse, sans DN. Le négatif : pas d'infobulle. Je veux dire : L'infobulle ne se construit pas et ne s'affiche pas. Est-ce que c'est ce qu'on veut ?

landryb commented 5 years ago

non, il faut un message clair a l'utilisateur, en l'état il ne comprendra rien.

Gaetanbrl commented 5 years ago

On peut afficher une fenêtre affichant que l'utilisateur ne dispose pas des droits suffisants dans ces deux cas ?

MaelREBOUX commented 5 years ago

Je propose :

landryb commented 5 years ago

pas d'infobulle => l'utilisateur va cliquer 125 fois, et appeler.

MaelREBOUX commented 5 years ago

C'est pas faux : donc on affiche les qqs infos renvoyées par la webapp.

Je crois qu'il n'y a que la référence cadastrale d'ailleurs.

Gaetanbrl commented 5 years ago

Si j'ai bien compris, on affiche un message pour la page d'UF sous la carte contenant :

"Aucune information n'est affichée car vous ne disposez pas d'un accès aux données foncières pour cette commune."

Et pour l'infobulle on affichera l'infobulle contenant le peu d'information renvoyé actuellement. Cela vous convient ?

Gaetanbrl commented 5 years ago

@MaelREBOUX @landryb On aurait alors ces informations dans l'infobulle : image

landryb commented 5 years ago

mais l'utilisateur ne va toujours pas comprendre pourquoi il a des infos d'UF sur certaines communes et pas d'autres.. je pense qu'il faut etre plus clair :)

pourquoi vouloir gérer différemment les 2 cas ? "Aucune information n'est affichée car vous ne disposez pas d'un accès aux données foncières pour cette commune." me va bien pour la fiche UF, on pourrait avoir l'équivalent "raccourci" pour l'infobulle.

Gaetanbrl commented 5 years ago

Ce message "raccourci" peut convenir ?

image

landryb commented 5 years ago

oui nickel ;)

MaelREBOUX commented 5 years ago

Je vous suis. Même si pour l'infobulle j'aurais préféré ne rien afficher de plus.

Car si on n'affiche rien de spécial : l'utilisateur ne sait pas qu'il n'a pas accès à d'autres infos. Et ça me va très bien.

landryb commented 5 years ago

Si tu n'affiche rien, pour moi l'utilisateur va te demander pourquoi il a accès aux UF a certains endroits et pas a d'autres...

pierrejego commented 5 years ago

Modification faite, nouveau comportement a valider

MaelREBOUX commented 5 years ago

Bon je viens de m'arracher les cheveux à tente de tester en ça en test.

Mais cette PF vient de changer d'infrastructure. Je n'ai aucune info sur la version qui y est déployée. Donc je sens que ça va repousser de 10 j :(

Chez moi pas d'infobulle en-dehors de la commune autorisée.

Et sur la commune autorisé MAIS sans le rôle APPLI_CAD je vois :

image

Pour l'UF : tout est vide maintenant. Pas normal.

image

MaelREBOUX commented 5 years ago

OK. Grâce à @Gaetanbrl je sais que notre serveur de test n'a pas la dernière version du code. A revoir.

MaelREBOUX commented 5 years ago

Infobulle OK : plus d'erreur 500 mais si on pouvait virer le "undefined" ce serait mieux.

capture_145

capture_144

je constate que je n'ai plus la surcouche graphique qui montre l'unité foncière. mais comme on vient de changer des réglages je préfère vérifier à 2 fois avant d'ouvrir une issue ici.

Gaetanbrl commented 5 years ago

je constate que je n'ai plus la surcouche graphique qui montre l'unité foncière

Dans la fenêtre d'information sur une unité foncière ?

Gaetanbrl commented 5 years ago

Infobulle OK : plus d'erreur 500 mais si on pouvait virer le "undefined" ce serait mieux.

A ce sujet, je viens de faire un commit https://github.com/jdev-org/cadastrapp/commit/ac006ad7621edee3de71be2c8e5ac187e4a5cd39, j'attend ton retour sur la surcouche graphique de l'UF pour une PR.

MaelREBOUX commented 5 years ago

je constate que je n'ai plus la surcouche graphique qui montre l'unité foncière

Dans la fenêtre d'information sur une unité foncière ?

Même dans mapfishapp. Mais comme je te dis : j'ai un doute sur notre config sur test. Sauf si tu l'as constaté aussi de ton côté. C'est le cas ?

Gaetanbrl commented 5 years ago

Si ca peut permettre de comparer et d'identifier un boug ou une configuration voici ce que j'ai de mon côté.

image

image

Est-ce bien la surcouche graphique en question ?

Gaetanbrl commented 5 years ago

Ok vu avec @MaelREBOUX . La surcouche n'est pas visible de leur côté. Testé et validé de notre côté.

PR à réaliser pour le patch au sujet du "undefined".

MaelREBOUX commented 5 years ago

Super. Réglé avec https://github.com/georchestra/cadastrapp/commit/741ef947c9d07cbef533612513ce25414d93f21b

capture_155

Je vais donc compléter la note de version demain matin et @pierrejego pourra faire la release avant vendredi.

Ouf !