File size: 2,822 Bytes
cfbb492
 
 
 
 
 
 
06df37a
 
 
 
cfbb492
 
 
 
 
 
 
 
 
 
 
 
 
06df37a
 
cfbb492
 
 
 
 
 
06df37a
cfbb492
 
 
06df37a
 
 
 
cfbb492
06df37a
 
 
cfbb492
 
06df37a
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
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"}