""" SECTION « LOCALISATION » DES ECRANS DE SIGNATURE ================================================== Partagee par la page de signature des parties (sign_page) et la contresignature du preteur (signatures_admin). La position GPS est demandee au navigateur par core/audit_log.capturer_gps (a chaque rerun, tant qu'elle n'est pas resolue). Regle : la localisation n'est PAS un obstacle. Le code recu par email peut toujours etre saisi, avec ou sans position. Sans position, le document porte la mention « refusée » ou « non reçue » a la place du lieu. La case permet seulement de redemander la position au navigateur. """ import streamlit as st from core import audit_log, geoloc_signature def _relancer(cle: str): """Callback de la case : coche -> le navigateur est interroge de nouveau.""" if st.session_state.get(cle): audit_log.redemander_gps() def section_localisation(cle: str, contexte: str = "signer") -> dict: """Affiche l'etat de la localisation (information, jamais bloquante). Retourne toujours {"ok": bool, "texte": str, "gps": str} : texte et gps prets a enregistrer, meme sans position.""" ss = st.session_state etat = ss.get("_audit_gps_etat") coords = ss.get("_audit_gps_coords") if etat == geoloc_signature.ETAT_OK and coords: texte, brut = geoloc_signature.construire_localisation(etat, coords) st.success(f"[POSITION] Lieu de {contexte} détecté : **{texte}**. Il sera inscrit sur le document, " "avec votre adresse IP.") return {"ok": True, "texte": texte, "gps": brut} if etat == geoloc_signature.ETAT_REFUS: texte, brut = geoloc_signature.construire_localisation(etat) else: texte, brut = geoloc_signature.construire_localisation(geoloc_signature.ETAT_INDISPONIBLE) if etat in (geoloc_signature.ETAT_REFUS, geoloc_signature.ETAT_INDISPONIBLE): st.info(f"Localisation non partagée : le document portera « {texte} » à la place du lieu. " "Vous pouvez quand même saisir le code reçu par email.") st.checkbox("Je relance la demande de localisation au navigateur (facultatif).", key=f"loc_relance_{cle}", on_change=_relancer, args=(f"loc_relance_{cle}",)) if ss.get("_audit_gps_essai", 0) >= 1: st.caption("Si votre navigateur ne vous redemande rien, la localisation est bloquée pour ce site " "(cadenas à gauche de l'adresse). Ce n'est pas bloquant.") return {"ok": False, "texte": texte, "gps": brut} st.info("[POSITION] Localisation en attente (facultative) : le lieu sera inscrit sur le document si votre " "navigateur la partage. Vous pouvez signer sans.") return {"ok": False, "texte": geoloc_signature.TEXTE_NON_RECU, "gps": "NON_RECU"}