Package: easyfatt-db-connector
Easyfatt - PythonQuesto pacchetto fornisce diversi strumenti per semplificare lo sviluppo di automazioni inPythonper l'applicativo gestionale "Danea Easyfatt".FunzioniLettura file.DefXmlesportati da Easyfatt (ordini cliente, vendite banco, preventivi, ecc..)Download driverfirebird (necessario per la connessione al DB di Easyfatt)Connessione aldatabasedi EasyfattUtilizzoFile.DefXmlIl moduloeasyfatt_db_connector.xmlespone la classeEasyfattXMLe la funzioneread_xml(una funzione "utility" che restituisce un'istanza diEasyfattXML).Sia i metodiEasyfattXML.from_xml*()che la funzioneread_xml()accettano il parametroconvert_types(di default impostato aTrue) che permette di convertire i valori dei tag in tipi Python nativi (es.int,float,bool, ecc..). Se disabilitato i valori dei tag saranno sempre stringhe oNone.EsempioIn questo esempio lo script leggerà l'esportazione di una serie di ordini cliente e stamperà a schermo l'indirizzo di spedizione di ogni documento:frompathlibimportPathfromeasyfatt_db_connector.xmlimportread_xmlxml_file=Path("OrdiniCliente.DefXml").expanduser()# Questa istruzione...xml_object=read_xml(xml_file,convert_types=True)# ... si può scrivere anche cosìxml_object=EasyfattXML.from_xml_string(xml_file.read_bytes(),convert_types=True)fordocinxml_object.documents:print(f"Document n°{doc.number}{doc.numbering}will be shipped at '{doc.delivery.address}'")L'output sarà il seguente:Document n°1 will be shipped at ''
Document n°2 will be shipped at ''
Document n°3 will be shipped at ''
Document n°1/A will be shipped at ''
Document n°2/A will be shipped at ''
Document n°4 will be shipped at ''
Document n°5 will be shipped at ''
Document n°6 will be shipped at 'Via Facciolati, 546'
Document n°3/A will be shipped at 'Via Catania, sn'
Document n°7 will be shipped at ''
Document n°8 will be shipped at 'Via Rodolfo Manganaro'
Document n°9 will be shipped at 'Via Enrico Berlinguer,75'
Document n°10 will be shipped at ''
Document n°11 will be shipped at 'Via C. Colombo, 632'
Document n°12 will be shipped at ''
Document n°13 will be shipped at ''
Document n°1/B will be shipped at ''
Document n°14 will be shipped at 'Via G. Di Vittorio, 56'
Document n°15 will be shipped at 'Via Cavour, 152'
Document n°16 will be shipped at 'Via N.S. degli Angeli, 28'Database: download driver Firebird (prerequisito)Per connettersi al DB di Easyfatt è necessario scaricare il driver FirebirdFirebird-{version}-embed.zip(versione2.5.8o2.5.9) e specificarne il percorso.fromeasyfatt_db_connector.core.connectionimportEasyfattFDBdatabase=EasyfattFDB(archive_path=database_path,firebird_path="./firebird-driver")Questa procedura può essere automatizzata impostando il parametrodownload_firebirdaTrue(di default èFalse). E' possibile controllare il percorso di download del driver tramite il parametrofirebird_path(di default~/.cache/firebird-driver/).fromeasyfatt_db_connectorimportEasyfattFDBdatabase=EasyfattFDB(archive_path=database_path,download_firebird=True)ATTENZIONEL'opzionedownload_firebirdè impostata di default aFalseper evitare che il programma effettui download in ambienti di Produzione.Se questo è il comportamento desiderato impostare il parametro aTrue.Database: connessione e queryIn fase di connessione al DB l'istanzaEasyfattFDBprovvederà a fare una copia del database in una cartella temporanea (ed alla sua eliminazione ad operazioni terminate) così da permettere l'utilizzo anche con Easyfatt in esecuzione.fromeasyfatt_db_connector.core.connectionimportEasyfattFDBdatabase=EasyfattFDB(archive_path=database_path,download_firebird=True)withdatabase.connect()asconnection:customers=[dict(item)foriteminconnection.cursor().execute('''SELECT anag."CodAnagr", ANAG."Nome", ANAG."Indirizzo", ANAG."Cap", ANAG."Citta", ANAG."Prov", ANAG."Regione", IIF(naz."NomeNazionePrint" IS NULL, 'Italia', naz."NomeNazionePrint") AS NazioneFROM "TAnagrafica" AS anagLEFT JOIN "TNazioni" naz ON ANAG."Nazione" = naz."NomeNazione";''').fetchallmap()]print(customers)DevelopmentNote per WindowsBuild con PyInstallerIn fase di build con PyInstaller (sia in modalità--onefileche--onedir) è necessario tenere in considerazione le seguenti note:Non usare mai UPXse disponibile (a causa di un bug che porta la DLLfbclient.dlla crashare in modo randomico impedendo la connessione al DB). Se possibile includere sempre--noupxtra gli argomenti di build.Aggiungere--collect-all sqlalchemy_firebirdtra gli argomenti di build per evitare che PyInstaller non includa il modulofdbefirebird-driver(che non vengono rilevato automaticamente).Pythonpoetryconfigvirtualenvs.prefer-active-pythontruepoetryenvuse$(pyenvwhichpython)DatabaseInstallareFirebird SQL2.5.9(selezionare la versione "64-bit Classic, Superclassic & Superserver")Assicurarsi di selezionare "Run as service"Per controllare l'avvenuta installazione:Aprire un terminale Powershell nella cartella di installzione (nel mio casoC:\Program Files\Firebird\Firebird_2_5)Lanciare il comandocd binLanciare il comando./isql.exe "{PERCORSO_DATABASE}\{NOME_DATABASE}.eft" -u sysdba -p masterkeyOra è possibile eseguire query SQL (assicurandosi che finiscano SEMPRE con;)Database toolInstallare ed aprireDBeaver:Cliccare su "File > Nuovo":Cliccare su "DBeaver > Connessione a Database" e cliccare "Avanti":Nel campo di ricerca scrivere "Firebird", selezionare il primo risultato e cliccare "Avanti":Compilare i dati richiesti:Generale:Host:localhost(default)Porta:3050(default)Percorso: adeguare alla posizione del database nel proprio sistemaAutenticazione:Nome utente:SYSDBA(default)Password:masterkeyTerminare la configurazione del driver cliccando su "Fine"Alcune noteAssicurarsi che sia visibile almeno la finestra "Navigatore Database":