from enum import IntEnum from typing import Optional class SuiviStockType(IntEnum): AUCUN = 0 CMUP = 1 FIFO_LIFO = 2 SERIALISE = 3 @classmethod def get_label(cls, value: Optional[int]) -> Optional[str]: labels = {0: "Aucun", 1: "CMUP", 2: "FIFO/LIFO", 3: "Sérialisé"} return labels.get(value) if value is not None else None class NomenclatureType(IntEnum): NON = 0 FABRICATION = 1 COMMERCIALE = 2 @classmethod def get_label(cls, value: Optional[int]) -> Optional[str]: labels = {0: "Non", 1: "Fabrication", 2: "Commerciale/Composé"} return labels.get(value) if value is not None else None class TypeArticle(IntEnum): ARTICLE = 0 PRESTATION = 1 DIVERS = 2 NOMENCLATURE = 3 @classmethod def get_label(cls, value: Optional[int]) -> Optional[str]: labels = { 0: "Article", 1: "Prestation de service", 2: "Divers / Frais", 3: "Nomenclature", } return labels.get(value) if value is not None else None class TypeFamille(IntEnum): DETAIL = 0 TOTAL = 1 @classmethod def get_label(cls, value: Optional[int]) -> Optional[str]: labels = {0: "Détail", 1: "Total"} return labels.get(value) if value is not None else None class TypeCompta(IntEnum): VENTE = 0 ACHAT = 1 STOCK = 2 @classmethod def get_label(cls, value: Optional[int]) -> Optional[str]: labels = {0: "Vente", 1: "Achat", 2: "Stock"} return labels.get(value) if value is not None else None class TypeRessource(IntEnum): MAIN_OEUVRE = 0 MACHINE = 1 SOUS_TRAITANCE = 2 @classmethod def get_label(cls, value: Optional[int]) -> Optional[str]: labels = {0: "Main d'œuvre", 1: "Machine", 2: "Sous-traitance"} return labels.get(value) if value is not None else None class TypeTiers(IntEnum): CLIENT = 0 FOURNISSEUR = 1 SALARIE = 2 AUTRE = 3 @classmethod def get_label(cls, value: Optional[int]) -> Optional[str]: labels = {0: "Client", 1: "Fournisseur", 2: "Salarié", 3: "Autre"} return labels.get(value) if value is not None else None class TypeEmplacement(IntEnum): NORMAL = 0 QUARANTAINE = 1 REBUT = 2 @classmethod def get_label(cls, value: Optional[int]) -> Optional[str]: labels = {0: "Normal", 1: "Quarantaine", 2: "Rebut"} return labels.get(value) if value is not None else None def normalize_enum_to_string(value, default="0") -> Optional[str]: if value is None: return None if value == 0: return None return str(value) def normalize_enum_to_int(value, default=0) -> Optional[int]: if value is None: return None try: return int(value) except (ValueError, TypeError): return default def normalize_string_field(value) -> Optional[str]: if value is None: return None if isinstance(value, int): if value == 0: return None return str(value) if isinstance(value, str): stripped = value.strip() if stripped in ("", "0"): return None return stripped return str(value)