import win32com.client import logging logger = logging.getLogger(__name__) def _rechercher_devis_dans_liste(numero_devis, factory_doc): """Recherche un devis dans les 100 premiers éléments de la liste.""" index = 1 while index < 100: try: persist_test = factory_doc.List(index) if persist_test is None: break doc_test = win32com.client.CastTo(persist_test, "IBODocumentVente3") doc_test.Read() if ( getattr(doc_test, "DO_Type", -1) == 0 and getattr(doc_test, "DO_Piece", "") == numero_devis ): logger.info(f" Document trouvé à l'index {index}") return persist_test index += 1 except Exception: index += 1 return None def _recuperer_numero_devis(process, doc): """Récupère le numéro du devis créé via plusieurs méthodes.""" numero_devis = None try: doc_result = process.DocumentResult if doc_result: doc_result = win32com.client.CastTo(doc_result, "IBODocumentVente3") doc_result.Read() numero_devis = getattr(doc_result, "DO_Piece", "") except Exception: pass if not numero_devis: numero_devis = getattr(doc, "DO_Piece", "") if not numero_devis: try: doc.SetDefaultNumPiece() doc.Write() doc.Read() numero_devis = getattr(doc, "DO_Piece", "") except Exception: pass return numero_devis __all__ = ["_recuperer_numero_devis", "_rechercher_devis_dans_liste"]