import csv import re from datetime import datetime import mysql.connector DB = { 'host': 'localhost', 'user': 'laravel_user', 'password': 'P4ssw0rd.96!', 'database': 'laravel_db' } def estrai_trn(descrizione): match = re.search(r'TRN\s+([0-9A-Za-z]+)', descrizione) return match.group(1) if match else None def estrai_commissione(descrizione): match = re.search(r'COMM\s+([\d\.,]+)', descrizione) return float(match.group(1).replace('.', '').replace(',', '.')) if match else 0.0 def estrai_spese(descrizione): match = re.search(r'SPESE\s+([\d\.,]+)', descrizione) return float(match.group(1).replace('.', '').replace(',', '.')) if match else 0.0 def parse_importo(valore): return float(valore.replace('.', '').replace(',', '.')) def importa_file(file_path, id_condominio): conn = mysql.connector.connect(**DB) cur = conn.cursor() with open(file_path, encoding='utf-8') as f: # Trova la riga di intestazione header_row = None for line in f: line_strip = line.strip() if line_strip.lower().startswith("data;valuta;descrizione;euro;caus."): header_row = line_strip.split(";") break if not header_row: print("Intestazione non trovata! Controlla il file.") return # Riposiziona il puntatore dopo l'intestazione reader = csv.DictReader(f, fieldnames=header_row, delimiter=';') for row in reader: # Salta eventuali righe completamente vuote if not row['Data'] or not row['Descrizione']: continue try: data = datetime.strptime(row['Data'], '%d/%m/%Y').date() except Exception: continue # Skip righe con data non valida descrizione = row['Descrizione'] try: importo = parse_importo(row['Euro']) except Exception: importo = 0.0 causale = row.get('Caus.', '') cbi = causale if causale else None riferimento_originale = estrai_trn(descrizione) commissione = estrai_commissione(descrizione) spese = estrai_spese(descrizione) trn = riferimento_originale cur.execute(""" INSERT INTO movimenti_bancari (id_condominio, data, importo, descrizione, causale, riferimento_originale, stato, commissione, spese, trn, cbi) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) """, (id_condominio, data, importo, descrizione, causale, riferimento_originale, 'importato', commissione, spese, trn, cbi)) conn.commit() cur.close() conn.close() print("[OK] Movimenti bancari importati.") if __name__ == '__main__': importa_file('estrattoconto.csv', 1)