61 lines
No EOL
1.6 KiB
Python
61 lines
No EOL
1.6 KiB
Python
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:
|
|
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:
|
|
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:
|
|
pass
|
|
|
|
return numero_devis
|
|
|
|
__all__ = [
|
|
"_recuperer_numero_devis",
|
|
"_rechercher_devis_dans_liste"
|
|
] |