Sage100-ws/utils/functions/society/societe_data.py
2026-01-15 09:00:58 +01:00

131 lines
4 KiB
Python

from pathlib import Path
import base64
import logging
logger = logging.getLogger(__name__)
def get_societe_row(cursor):
"""Récupère la ligne P_DOSSIER"""
query = """
SELECT
D_RaisonSoc, D_NumDoss, D_Siret, D_Ape, D_Identifiant,
D_Adresse, D_Complement, D_CodePostal, D_Ville,
D_CodeRegion, D_Pays,
D_Telephone, D_Telecopie, D_EMail, D_EMailSoc, D_Site,
D_Capital, D_FormeJuridique,
D_DebutExo01, D_FinExo01,
D_DebutExo02, D_FinExo02,
D_DebutExo03, D_FinExo03,
D_DebutExo04, D_FinExo04,
D_DebutExo05, D_FinExo05,
N_DeviseCompte, N_DeviseEquival,
D_LgCg, D_LgAn,
D_RegimeFEC,
BM_Intitule,
cbMarq,
D_Logo
FROM P_DOSSIER
"""
cursor.execute(query)
return cursor.fetchone()
def build_exercices(row) -> list:
"""Construit la liste des exercices"""
exercices_data = [
(1, row.D_DebutExo01, row.D_FinExo01),
(2, row.D_DebutExo02, row.D_FinExo02),
(3, row.D_DebutExo03, row.D_FinExo03),
(4, row.D_DebutExo04, row.D_FinExo04),
(5, row.D_DebutExo05, row.D_FinExo05),
]
exercices = []
for numero, debut, fin in exercices_data:
if debut and debut.year > 1753:
exercices.append(
{
"numero": numero,
"debut": debut.isoformat(),
"fin": fin.isoformat() if fin and fin.year > 1753 else None,
}
)
return exercices
def add_logo(societe_dict: dict) -> None:
"""Ajoute le logo en base64 au dict"""
logo_path = societe_dict.pop("_logo_path", None)
if logo_path and Path(logo_path).exists():
try:
ext = Path(logo_path).suffix.lower()
content_type = {
".png": "image/png",
".jpg": "image/jpeg",
".jpeg": "image/jpeg",
".bmp": "image/bmp",
".gif": "image/gif",
}.get(ext, "image/png")
with open(logo_path, "rb") as f:
societe_dict["logo_base64"] = base64.b64encode(f.read()).decode("utf-8")
societe_dict["logo_content_type"] = content_type
return
except Exception as e:
logger.warning(f"Erreur conversion logo: {e}")
societe_dict["logo_base64"] = None
societe_dict["logo_content_type"] = None
def recuperer_logo_com(sage_instance) -> dict:
"""Cherche le logo dans les répertoires standards"""
return _chercher_logo_standards()
def _chercher_logo_standards() -> dict:
"""Cherche dans les répertoires standards Sage"""
chemins = [
Path("C:/ProgramData/Sage/Logo"),
Path("C:/ProgramData/Sage/Sage 100/Logo"),
Path("C:/Users/Public/Documents/Sage"),
Path(r"C:\Program Files\Sage\Sage 100\Bitmap"),
Path(r"C:\Program Files (x86)\Sage\Sage 100\Bitmap"),
]
for repertoire in chemins:
if not repertoire.exists():
continue
for ext in [".bmp", ".jpg", ".jpeg", ".png", ".gif"]:
for fichier in repertoire.glob(f"*{ext}"):
logger.info(f"Logo trouvé: {fichier}")
return _convertir_fichier_logo(str(fichier))
logger.info("Aucun logo trouvé")
return {"logo_base64": None, "logo_content_type": None}
def _convertir_fichier_logo(chemin: str) -> dict:
"""Convertit image en base64"""
ext = Path(chemin).suffix.lower()
content_type = {
".png": "image/png",
".jpg": "image/jpeg",
".jpeg": "image/jpeg",
".bmp": "image/bmp",
".gif": "image/gif",
}.get(ext, "image/png")
with open(chemin, "rb") as f:
return {
"logo_base64": base64.b64encode(f.read()).decode("utf-8"),
"logo_content_type": content_type,
}
__all__ = ["get_societe_row", "build_exercices", "add_logo", "recuperer_logo_com"]