first commit
This commit is contained in:
commit
e6c52820cd
227 changed files with 16156 additions and 0 deletions
51
modules/crm/status.py
Normal file
51
modules/crm/status.py
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
import unicodedata
|
||||
from enum import Enum
|
||||
from typing import Union, Optional
|
||||
|
||||
|
||||
def _normalize_no_accents(s: str) -> str:
|
||||
"""Normalise une chaîne en supprimant les accents et en la passant en minuscule."""
|
||||
return "".join(c for c in unicodedata.normalize("NFKD", s) if not unicodedata.combining(c)).lower()
|
||||
|
||||
|
||||
class ProspectStatus(str, Enum):
|
||||
NOUVEAU = "Nouveau"
|
||||
CONTACTE = "Contacté"
|
||||
RELANCE = "Relancé"
|
||||
QUALIFIE = "Qualifié"
|
||||
PROPOSITION = "Proposition"
|
||||
NON_INTERESSE = "Non intéressé"
|
||||
|
||||
@classmethod
|
||||
def from_value(cls, value: Optional[Union["ProspectStatus", str]]) -> "ProspectStatus":
|
||||
"""Convertit une valeur (enum ou chaîne) en ProspectStatus, avec tolérance sur la casse/accents."""
|
||||
if isinstance(value, cls):
|
||||
return value
|
||||
if value is None:
|
||||
return cls.NOUVEAU
|
||||
s = str(value).strip()
|
||||
if not s:
|
||||
return cls.NOUVEAU
|
||||
|
||||
n = _normalize_no_accents(s)
|
||||
|
||||
if n in {"nouveau", "new"}:
|
||||
return cls.NOUVEAU
|
||||
if n in {"contacte", "contacted"}:
|
||||
return cls.CONTACTE
|
||||
if n in {"relance", "relaunched"}:
|
||||
return cls.RELANCE
|
||||
if n in {"qualifie", "qualified"}:
|
||||
return cls.QUALIFIE
|
||||
if n in {"proposition", "proposal"}:
|
||||
return cls.PROPOSITION
|
||||
if n in {"non interesse", "noninteresse", "not interested", "refuse", "refus", "abandon"}:
|
||||
return cls.NON_INTERESSE
|
||||
|
||||
# Tentative de correspondance exacte insensible aux accents/casse avec les valeurs de l'enum
|
||||
for member in cls:
|
||||
if _normalize_no_accents(member.value) == n:
|
||||
return member
|
||||
|
||||
# Valeur inconnue -> par défaut
|
||||
return cls.NOUVEAU
|
||||
Loading…
Add table
Add a link
Reference in a new issue