{"id":22358228,"url":"https://github.com/allworknoplay-95/confronto_inventario_per_data_ts","last_synced_at":"2026-05-09T06:37:13.856Z","repository":{"id":260289980,"uuid":"880840962","full_name":"AllWorkNoPlay-95/confronto_inventario_per_data_ts","owner":"AllWorkNoPlay-95","description":"Questo script Python gestisce l'importazione, l'elaborazione e il confronto di inventari provenienti da diverse fonti. L'obiettivo è fornire una panoramica consolidata delle giacenze a una certa data, rilevando eventuali discrepanze tra i dati rilevati e quelli attesi.","archived":false,"fork":false,"pushed_at":"2024-12-04T13:06:50.000Z","size":39,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-31T15:16:55.853Z","etag":null,"topics":["comparison-tool","mariadb","python","sqlite","sshtunnel","teamsystem"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AllWorkNoPlay-95.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-30T13:11:17.000Z","updated_at":"2025-01-16T11:32:43.000Z","dependencies_parsed_at":"2024-12-03T16:24:54.364Z","dependency_job_id":"df701636-3209-46b3-95d5-9212f09847de","html_url":"https://github.com/AllWorkNoPlay-95/confronto_inventario_per_data_ts","commit_stats":null,"previous_names":["allworknoplay-95/confronto_inventario_per_data_ts"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllWorkNoPlay-95%2Fconfronto_inventario_per_data_ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllWorkNoPlay-95%2Fconfronto_inventario_per_data_ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllWorkNoPlay-95%2Fconfronto_inventario_per_data_ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllWorkNoPlay-95%2Fconfronto_inventario_per_data_ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AllWorkNoPlay-95","download_url":"https://codeload.github.com/AllWorkNoPlay-95/confronto_inventario_per_data_ts/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245667530,"owners_count":20652973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["comparison-tool","mariadb","python","sqlite","sshtunnel","teamsystem"],"created_at":"2024-12-04T15:13:14.373Z","updated_at":"2026-05-09T06:37:13.812Z","avatar_url":"https://github.com/AllWorkNoPlay-95.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Inventory Comparison Script\n\n### Descrizione\nQuesto script Python gestisce l'importazione, l'elaborazione e il confronto di inventari provenienti da diverse fonti. L'obiettivo è fornire una panoramica consolidata delle giacenze a una certa data, rilevando eventuali discrepanze tra i dati rilevati e quelli attesi.\n\nL'applicazione è progettata per:\n- Importare dati di inventario da file Excel e database remoti tramite SSH.\n- Integrare e sincronizzare le informazioni in un database SQLite locale.\n- Generare report dettagliati, individuando e visualizzando in modo chiaro le discrepanze rilevate tra fonti.\n- Esportare i risultati in Excel con una formattazione leggibile e professionale.\n\n### Funzionalità principali\n\n1. **Connessioni Database**:\n   - Collega un database SQLite locale (`inventario.db`) per memorizzare i dati di inventario temporaneamente.\n   - Collega un database MariaDB remoto tramite tunnel SSH, consentendo un accesso sicuro ai dati dell'inventario principale.\n   - Crea dinamicamente tabelle SQLite per memorizzare dati specifici, come i file importati, i metadati dei prodotti e le giacenze rilevate, assicurando un’organizzazione strutturata.\n\n2. **Importazione Dati da File Excel**:\n   - Legge e importa i file Excel (con estensione `.xlsx`) presenti nella directory specificata (`db_files`).\n   - Estrae automaticamente la data dal nome del file per includerla nei dati di importazione.\n   - Effettua controlli preliminari sulla presenza di colonne essenziali e rimuove eventuali righe incomplete per garantire la consistenza dei dati.\n\n3. **Elaborazione e Confronto**:\n   - Confronta i dati rilevati (`odin_by_date`) con le giacenze attese (`ts_by_date`) per rilevare discrepanze.\n   - Utilizza query SQL ottimizzate con `LEFT JOIN` e `CASE` per calcolare differenze tra quantità rilevate e giacenze attese per SKU, sede e data.\n   - Mostra un report tabellare delle discrepanze nella console e offre la possibilità di esportare i risultati in un file Excel.\n\n4. **Export in Excel**:\n   - Al termine del confronto, l'utente può scegliere di esportare i risultati in un file Excel ben formattato, con formattazioni di colonna e intestazione per migliorare la leggibilità.\n\n5. **Interfaccia Utente (CLI)**:\n   - Argomenti della riga di comando per configurare facilmente le opzioni di esecuzione:\n     - `-r`, `--reset`: Elimina il database esistente e ricrea le tabelle.\n     - `-v`, `--verbose`: Aumenta la verbosità, visualizzando messaggi di log dettagliati durante l'esecuzione.\n     - `--skip-ts`, `--skip-odin`, `--skip-prod-meta`: Salta specifiche fasi di importazione, rendendo lo script più flessibile.\n\n### Esecuzione\n\n#### Requisiti\n- **Python 3.7+**\n- **Librerie Python**: Specifiche librerie Python per l'elaborazione dei dati e la connessione ai database.\n  ```bash\n  pip install pandas mariadb xlsxwriter tabulate tqdm python-dotenv sshtunnel\n  ```\n\n#### Esecuzione dello Script\nEsegui lo script dalla riga di comando:\n\n```bash\npython inventory_comparison.py -v --reset\n```\n\nOpzioni disponibili:\n- `-r`, `--reset`: Resetta il database locale.\n- `-v`, `--verbose`: Aumenta la verbosità per il debug.\n- `--skip-ts`: Salta l'importazione dei file `TS`.\n- `--skip-odin`: Salta l'importazione da `Odin`.\n- `--skip-prod-meta`: Salta l'importazione dei metadati dei prodotti.\n\n#### Output\n- Il confronto delle giacenze viene stampato in formato tabellare nella console, mostrando SKU, descrizione, quantità rilevata, quantità attesa e discrepanza.\n- L'utente può scegliere di esportare i risultati in un file Excel (`export/Confronto Inventario del GG-MM-YYYY HH-MM.xlsx`).\n\n### Struttura dello Script\n\n- **Connessioni**:\n  - `init_app_db()`: Inizializza il database locale con tabelle strutturate.\n  - `connect_db_odin()`: Stabilisce un tunnel SSH sicuro e si connette a un database MariaDB remoto.\n- **Importazione e Sincronizzazione**:\n  - `get_xlsx_as_df()`: Converte i file Excel in `DataFrame` e li prepara per l'importazione.\n  - `import_df_in_ts_by_date()` e `import_df_in_odin_by_date()`: Funzioni per l'importazione dei dati nei database locali.\n  - `transfer_missing_products_meta_to_local_db()`: Sincronizza i metadati dei prodotti da `Odin` a SQLite.\n- **Analisi delle Discrepanze**:\n  - `calc_discrepancy()`: Calcola e visualizza le discrepanze tra giacenze attese e quantità rilevate.\n  - `export_as_excel()`: Esporta i risultati delle discrepanze in Excel, con formattazione personalizzata.\n\n### (Per i recruiter) Valutazione delle competenze\n\nQuesto progetto dimostra competenze avanzate nelle seguenti aree:\n- **Gestione Database**: Creazione, connessione e gestione di database SQLite e MariaDB, incluse operazioni avanzate tramite `JOIN` e sottoquery per ottimizzare l'accesso ai dati.\n- **Elaborazione Dati**: Importazione, trasformazione e pulizia dei dati da Excel tramite `pandas`, con metodi di controllo e correzione della qualità dei dati.\n- **Integrazione e Sicurezza**: Connessione sicura ai database remoti via SSH usando `sshtunnel`, insieme a una gestione sicura delle credenziali tramite `.env`.\n- **Interfaccia Utente CLI**: Implementazione di un'interfaccia a riga di comando completa e flessibile, rendendo lo script utilizzabile in contesti differenti.\n- **Visualizzazione e Esportazione**: Visualizzazione tabellare delle discrepanze tramite `tabulate` e formattazione personalizzata per l’esportazione in Excel.\n\n### Possibili Estensioni\n- **Gestione degli Errori**: Ulteriori ottimizzazioni nella gestione delle eccezioni per migliorare la resilienza.\n- **Logging**: Aggiunta di un sistema di logging per migliorare il monitoraggio e la risoluzione dei problemi.\n- **Automatizzazione**: Pianificazione dello script per eseguire importazioni e confronti periodici tramite un task scheduler.\n\n### (Per i recruiter) Conclusione\nQuesto script, volutamente pubblico su GitHub, è un esempio di applicazione che utilizza un'architettura modulare per gestire dati complessi in modo sicuro e versatile. La struttura, l’uso delle librerie e l’attenzione alla qualità del codice sono segni di una buona comprensione delle best practices di programmazione Python per il data engineering e la business intelligence.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallworknoplay-95%2Fconfronto_inventario_per_data_ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallworknoplay-95%2Fconfronto_inventario_per_data_ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallworknoplay-95%2Fconfronto_inventario_per_data_ts/lists"}