LukeSavefrogs / danea-easyfatt

Danea Easyfatt automation suite
https://lukesavefrogs.github.io/danea-easyfatt/
GNU General Public License v3.0
4 stars 0 forks source link

Convertitore veloce da XML gestionale a KML per Earth #17

Closed lasorgentenet closed 10 months ago

lasorgentenet commented 1 year ago

Niente da aggiungere. Questo ci permette di avere una mappa completa più volte nell'arco della mattinata ovviando all'inserimento manuale.

lasorgentenet commented 1 year ago

Ti diamo qualche altra indicazione:

LukeSavefrogs commented 1 year ago

Non dovrebbe essere invece un problema creare un KML a partire dai soli indirizzi di residenza.

Rimane comunque il problema che in questo caso non verrebbero tenuti in considerazione indirizzi aggiuntivi (es. nel caso di un indirizzo di consegna diverso da indirizzo di residenza).

image

Andrebbe bene ugualmente?


Per quanto riguarda il secondo commento invece:

lasorgentenet commented 1 year ago

Considerando che l'xml da cui partiamo è quello della scheda ORDINI e non la rubrica, credo sia possibile che il KML sia creato a partire dagli indirizzi di consegna, giusto?

Ok per la sintassi. Per stile, colori ecc. va bene tutto...

Ti mando su WA il kmz da "mescolare" insieme a quello che tu farai uscire dal programma eventuale che farai.

lasorgentenet commented 1 year ago

Creato un kml ridotto all'osso (scremando col notepad tante cose inutili) con un solo segnaposto come input per te che ha il minimo di quello che ci serve. Codice cliente, nome e indirizzo. E funziona!

L'ho zippato altrimenti non lo faceva allegare.

test.zip

lasorgentenet commented 1 year ago

Possiamo amabilmente sollecitare questa richiesta? :) Credo che sia una cosa very very easy considerando le altre fatte. Ora che abbiamo una barca di ordini da evadere, il flag manuale su Earth ha il rischio errore dietro l'angolo hahah

LukeSavefrogs commented 1 year ago

Possiamo amabilmente sollecitare questa richiesta? :)

Vedo che riesco a fare, purtroppo il tempo che ho è sempre lo stesso mentre le cose da fare aumentano ogni giorno 😁

lasorgentenet commented 1 year ago

Grandeee lo apprezziamo. Se apri con notepad il test che ti ho fatto di eventuale file di uscita, è veramente una bazzecola. Andrea *Servizio clienti - LaSorgente.net https://www.lasorgente.net/ La Sorgente distribuzione S.r.l. Web: LaSorgente.net http://lasorgente.net/ | WhatsApp: 333 79 222 55 https://api.whatsapp.com/send?phone=393337922255 | @ @. | Tel. 06 94 12649 callto://+39069412649

Il giorno lun 26 giu 2023 alle ore 15:56 Luca Salvarani < @.***> ha scritto:

Possiamo amabilmente sollecitare questa richiesta? :)

Vedo che riesco a fare, purtroppo il tempo che ho è sempre lo stesso mentre le cose da fare aumentano ogni giorno 😁

— Reply to this email directly, view it on GitHub https://github.com/LukeSavefrogs/danea-easyfatt/issues/17#issuecomment-1607538623, or unsubscribe https://github.com/notifications/unsubscribe-auth/A5UVTUTPGNS4ZHPNFWBQBPDXNGIKNANCNFSM6AAAAAAUSLFAUQ . You are receiving this because you authored the thread.Message ID: @.***>

LukeSavefrogs commented 1 year ago

Sono riuscito a realizzare un eseguibile di prova standalone che recuperi i dati cliente dal Database interno di Easyfatt e generi un file KML aggiornato con tutte le sedi dei clienti, ma ho bisogno che lo testi per vedere se funziona correttamente.

Questi sono gli step per testarlo:

  1. Scarica ed estrai questo zip sul Desktop del PC dove usi Easyfatt

  2. Copia il percorso completo al database usato da Easyfatt

  3. Apri una finestra Powershell sul desktop e lancia il programma estratto al punto 1 passando come parametro il percorso estratto al punto 2 (ad esempio: .\process_kml.exe "\\192.168.1.14\C$\Users\lucas\Documents\Danea Easyfatt\TestArchivio.eft").

  4. Fai uno screenshot dell'output dello script e incollalo come risposta a questo messaggio. image

  5. Lo script avrà generato sul Desktop un file chiamato test.kml.

  6. Apri una nuova finestra di Google Earth e apri il file salvato al punto 5 (File > Apri...)

  7. Il risultato dovrebbe essere simile al seguente (ovviamente con i dati cliente corretti...) image

LukeSavefrogs commented 1 year ago

📞 Riassunto call 30/06/2023

Specifiche convertitore

L'obiettivo è creare un KML contenente TUTTI gli indirizzi di consegna degli ordini esportati da Easyfatt in modo da avere una visione globale delle consegne che dovranno essere effettuate.

Questa operazione deve essere una funzionalità separata in quanto verrà eseguita ad inizio turno.

Test - process_xml.exe

Di seguito i risultati del test dello script postato in questa risposta.

Problema

Inizialmente lanciando il comando .\process_kml.exe '\\IP_ADDRESS\C$\Users\USERNAME\Documents\Danea Easyfatt\Archivi\ARCHIVE_NAME.eft' lo script falliva con exception:

OSError: [WinError 1326] Nome utente o password non corretta

Soluzione

Il problema si è risolto con i seguenti step:

  1. Aprire "Esplora file"
  2. Nella barra degli indirizzi inserire \\IP_ADDRESS\C$\Users\USERNAME\Documents\Danea Easyfatt\Archivi\ARCHIVE_NAME.eft (adattando dove necessario) e premere INVIO: Windows chiederà username e password
  3. Chiedere all'amministratore del server di inserire username e password corretti e salvare le credenziali per quel percorso (in modo che al prossimo accesso Windows non le chieda più)
lasorgentenet commented 12 months ago

IMPORTANTE Poiché nella schermata ordini cliente abbiamo dei "non-ordini", ovvero ordini da mettere in consegna non a stretto giro, ma solo quando il cliente ordinerà di nuovo (es. portare 1 bottiglia in più la prossima volta perché rotta, oppure fare questo sconto ecc.), vorremmo che non finissero nel kml degli ordini da evadere.

In commento uso interno abbiamo scritto ALTRO su questi "non-ordini", potresti fare in modo che non vengano considerati in esportazione per il kml? Grazie.

LukeSavefrogs commented 11 months ago

🧪⚠ Funzionalità rilasciata in fase di test ⚠ 🧪

Con la versione v1.2.0 è stata rilasciata la funzionalità di generazione KML a partire dal file .DefXml esportato da Easyfatt.

ATTENZIONE:

Prima di aprire il KML generato assicurati di aver salvato eventuali modifiche fatte su Google Earth per evitare che questo le sovrascriva.

⛔ Limiti

Al momento ha i seguenti limiti:

  1. Ha necessariamente bisogno della connessione al database di Easyfatt per funzionare (per cui è disponibile una nuova voce nel file di configurazione). In caso contrario il programma terminerà in errore.
  2. Per poter rilasciare una soluzione funzionante non sono stati implementati per filo e per segno le richieste contenute in questo messaggio (nomenclatura leggermente diversa, icone diverse, no sovrapposizione di un'altro KML): da rivedere nel prossimo futuro.

📢 Feedback

@lasorgentenet Ti chiedo di farmi sapere per cortesia qualsiasi problema doveste incontrare o miglioramento si renda necessario.

Ho inoltre bisogno delle seguenti informazioni:

  1. Durata totale del programma (mi basta anche ora del primo e dell'ultimo messaggio di log)
  2. È necessario controllare che siano stati elaborati tutti i documenti e che ne rimangano 0 non elaborati (scrivetemi su WhatsApp se avete bisogno di più informazioni)
lasorgentenet commented 10 months ago

Abbiamo deciso di provare ad utilizzarlo. Il tempo che impiega Earth per aprire il kml è più o meno lo stesso che impieghiamo per fare il check manuale degli ordini in coda.

Alcune cose:

Abbiamo poi notato che il cliente che ha un ordine in coda è ripetuto due volte nell'elenco, una col flag una senza, non so se sia un bug.

Grazie!

LukeSavefrogs commented 10 months ago

Risposta punto per punto

1 - Lentezza Earth

Il tempo che impiega Earth per aprire il kml è più o meno lo stesso che impieghiamo per fare il check manuale degli ordini in coda.

Esatto. Questo è il problema principale per cui NON ho rilasciato una nuova versione.

Lo script genera un KML con indirizzi NON normalizzati, nè codificati in coordinate (cosa che Earth fa automaticamente ogni volta che aggiungi manualmente un segnaposto). Questo causa un enorme rallentamento perchè per ogni segnaposto Earth deve fare una chiamata agli endpoint di Google per risolvere l'indirizzo e trasformarlo in coordinate GPS.

La soluzione purtroppo è radicale:

  1. Cambiare completamente la libreria utilizzata per creare il KML
  2. Eseguire chiamate ad un servizio di Geocoding e salvare i risultati in una cache per evitare di incorrere nel blocco dell'IP da parte del provider (tra l'altro usando un piano gratuito la prima volta potrebbe volerci davvero molto)
  3. Ad ogni esecuzione dello script controllare se manca qualche indirizzo nella cache e aggiungerlo (in modo da velocizzare la prossima esecuzione).
  4. Restituire il KML con le coordinate restituite al punto 2 già belle pronte per essere consumate da Google Earth.

2 - Personalizzazioni varie

Alcune cose:

  • [...]
  • [...]
  • [...]

Queste sono tutte richieste di personalizzazione dell'output, non ci si mette assolutamente nulla a farlo 😄

3 - 🐛❓❔

Abbiamo poi notato che il cliente che ha un ordine in coda è ripetuto due volte nell'elenco, una col flag una senza, non so se sia un bug.

Questo potrebbe essere un bug! Grazie per averlo segnalato.

Conclusione

Purtroppo la cosa più complessa è il punto 1.2, che richiede un pò di progettazione, attenzione e tanto tempo, tutte cose che al momento non ho 😀

Vedo quello che riesco a fare. 😄

Grazie comunque per il ping e il commento molto dettagliato (mi risparmia un sacco di tempo a chiedere informazioni dopo e posso progettare con in mente già cosa deve uscire fuori)!

lasorgentenet commented 10 months ago

Sì, abbiamo afferrato il problema relativo al punto 1. La lentezza al momento è un aspetto secondario.

Il punto 2, se dici che non ci si mette assolutamente nulla, ottimo! Ci permette di utilizzarlo. Avviso anche in azienda di questa esigenza ;)

Il segnaposto sarebbe questo: http://maps.google.com/mapfiles/kml/paddle/red-circle.png Scala 1,0 e opacità 100%.

ATTENZIONE: non fermarsi solo al primo spazio, ad es. cognomi tipo "De Falco", prenderebbe solo "De". Con Thomas abbiamo valutato che puoi prendere i primi 12 caratteri, anche se taglia qualche cognome o nome azienda non fa niente.

Punto 3, risolvilo senza fretta.

Grazie mille a te!

LukeSavefrogs commented 10 months ago

Ho provato a fare quanto richiesto e ho rilasciato la v1.2.2.

Per quanto riguarda il punto 2 ho fatto quello che potevo: dato che non ho accesso a nome e cognome separati ho impostato una lunghezza massima di 10 caratteri.

Come servizio di Geocoding invece ho usato Google Maps per 2 motivi:

Purtroppo non è possibile usare questa funzionalità senza prima aver generato la chiave API dalla console di Google Cloud 😅

Di seguito una guida sicuramente non completa ma il più chiara possibile che ho fatto per aiutare passo dopo passo:

Prerequisiti:

1) Attivazione dell'account "Google Cloud"

  1. Loggati con l'account Google dell'azienda e vai alla Console Cloud Google e clicca sul pulsante "Inizia gratuitamente" in alto a destra. image

  2. Procedi con gli step richiesti inserendo anche Partita IVA e una carta di credito valida (NON verrà addebitato nulla, nè verrà automaticamente attivato il piano Business) che servirà nel malaugurato caso in cui dovessimo superare la soglia di richieste gratuite mensili (sono circa 30.000, quindi contando una per indirizzo cliente direi più che abbastanza) image image

  3. Clicca su "Avvia la mia prova gratuita" image

  4. Verifica la tua identità con una transazione finta sulla carta scelta (0,00€) image

2) Creazione del progetto Easyfatt

  1. Torna nella Dashboard e clicca sul menu a tendina in alto a destra (dovrebbe esserci scritto My First Project). image

  2. Nel dialog che si aprà cliccare su "Nuovo progetto" in alto a destra image

  3. Scrivere Easyfatt (o qualsiasi altra cosa, è un nome che servirà a noi unicamente per riconoscere su cosa stiamo lavorando) nel campo del nome e premere "Crea" image

  4. Attendere che il progetto venga creato image image

  5. Ora ripeti lo step 2.1 e nel dialog che si apre seleziona il progetto che hai creato allo step 2.3 e poi clicca su "Apri" image

  6. In alto a sinistra ora dovresti vedere il tuo nuovo progetto attivo (invece del default My First Project) image

3) Attivazione del servizio di Geocoding

  1. Nel campo di ricerca globale in alto al centro scrivi Marketplace e seleziona il risultato che vedi nello screenshot (dovrebbe essere il primo risultato): image
  2. Ora sei nel marketplace! Da qui possiamo attivare i servizi che ci interessano. Prova a cercare Geocoding (dovrebbe suggerirti automaticamente il servizio corretto, altrimenti premi semplicemente INVIO) image
  3. Dalla lista di servizi disponibili clicca su Geocoding API (dovrebbe essere il primo risultato come nel mio caso) image
  4. Ora clicca su Abilita image
  5. Se hai saltato il punto 1 (Attivazione dell'account) ti chiederà di farlo ora per poter procedere.
LukeSavefrogs commented 10 months ago

Piccolo appunto

Dai miei test ho visto che al momento (usando pickle per serializzare istanze della classe geopy.location.Location) è stato generato un file di 178KB a partire da un dataset di 166 indirizzi (divisi per 59 clienti/fornitori).

Questo vuol dire che in media ogni indirizzo serializzato peserà 1.07KB (1.1KB se arrotondiamo per eccesso).

Domani bisogna provare a vedere qual'è un carico realistico da parte vostra per determinare in media quale possa essere la dimensione media di un file di cache (e se quindi è fattibile o bisogna ridimensionarlo togliendo le cose non necessarie).

lasorgentenet commented 10 months ago

Tutto FANTASTICO, 12-13 anni di lavoro manuale risolti.

Alcune piccole modifiche, senza fretta poiché è già utilizzabile così:

LukeSavefrogs commented 10 months ago

✨Release v1.3.1 rilasciata

In questa release ho introdotto la possibilità di personalizzare ancora più a fondo il template. In particolare:



In sostanza...

Chiudo l'issue in quanto la funzionalità è stata rilasciata e testata.

Per domande inerenti quanto detto continua a chiedere qui, altrimenti valutate di aprire nuovi Issue