74 lines
2.8 KiB
Python
74 lines
2.8 KiB
Python
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) |