95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Migration script to add recurring income fields to Income table
|
|
Adds: next_due_date, last_created_date, is_active, auto_create
|
|
Idempotent: Can be run multiple times safely
|
|
"""
|
|
import sqlite3
|
|
from datetime import datetime
|
|
|
|
def migrate():
|
|
"""Add recurring fields to income table"""
|
|
# Try both possible database locations
|
|
db_paths = ['data/fina.db', 'instance/fina.db']
|
|
conn = None
|
|
|
|
for db_path in db_paths:
|
|
try:
|
|
conn = sqlite3.connect(db_path)
|
|
cursor = conn.cursor()
|
|
# Test if we can access the database
|
|
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
|
|
tables = [row[0] for row in cursor.fetchall()]
|
|
if 'income' in tables:
|
|
print(f"Using database at: {db_path}")
|
|
break
|
|
else:
|
|
conn.close()
|
|
conn = None
|
|
except:
|
|
if conn:
|
|
conn.close()
|
|
conn = None
|
|
continue
|
|
|
|
if not conn:
|
|
print("Error: Could not find fina.db with income table")
|
|
return
|
|
|
|
cursor = conn.cursor()
|
|
|
|
# Check what columns exist
|
|
cursor.execute("PRAGMA table_info(income)")
|
|
existing_columns = [row[1] for row in cursor.fetchall()]
|
|
print(f"Existing columns in income table: {existing_columns}")
|
|
|
|
# Add next_due_date column if it doesn't exist
|
|
if 'next_due_date' not in existing_columns:
|
|
print("Adding next_due_date column...")
|
|
cursor.execute('''
|
|
ALTER TABLE income ADD COLUMN next_due_date DATETIME
|
|
''')
|
|
print("✓ Added next_due_date column")
|
|
else:
|
|
print("✓ next_due_date column already exists")
|
|
|
|
# Add last_created_date column if it doesn't exist
|
|
if 'last_created_date' not in existing_columns:
|
|
print("Adding last_created_date column...")
|
|
cursor.execute('''
|
|
ALTER TABLE income ADD COLUMN last_created_date DATETIME
|
|
''')
|
|
print("✓ Added last_created_date column")
|
|
else:
|
|
print("✓ last_created_date column already exists")
|
|
|
|
# Add is_active column if it doesn't exist
|
|
if 'is_active' not in existing_columns:
|
|
print("Adding is_active column...")
|
|
cursor.execute('''
|
|
ALTER TABLE income ADD COLUMN is_active BOOLEAN DEFAULT 1
|
|
''')
|
|
print("✓ Added is_active column")
|
|
else:
|
|
print("✓ is_active column already exists")
|
|
|
|
# Add auto_create column if it doesn't exist
|
|
if 'auto_create' not in existing_columns:
|
|
print("Adding auto_create column...")
|
|
cursor.execute('''
|
|
ALTER TABLE income ADD COLUMN auto_create BOOLEAN DEFAULT 0
|
|
''')
|
|
print("✓ Added auto_create column")
|
|
else:
|
|
print("✓ auto_create column already exists")
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
print("\n✓ Migration completed successfully!")
|
|
print("Recurring income fields added to Income table")
|
|
|
|
if __name__ == '__main__':
|
|
print("Starting migration: add_recurring_income.py")
|
|
print("=" * 60)
|
|
migrate()
|