diff --git a/edit_time.py b/edit_time.py new file mode 100644 index 0000000..3feb92b --- /dev/null +++ b/edit_time.py @@ -0,0 +1,90 @@ +import sqlite3 +import os + +def connect_db(): + db_file = 'time_tracker.db' + if not os.path.exists(db_file): + print(f"Error: Database file '{db_file}' not found.") + return None + return sqlite3.connect(db_file) + +def display_entry_details(entry): + print("\n--- Current Entry Details ---") + print(f"ID: {entry[0]} | Project: {entry[1]} | Date: {entry[4]}") + print(f"Description: {entry[2]}") + print(f"Hours: {entry[5]}") + print("-" * 30) + +def edit_time_entry(): + conn = connect_db() + if not conn: return + cursor = conn.cursor() + + try: + # 1. Select Client + cursor.execute('SELECT client_id, client_name FROM clients ORDER BY client_name') + clients = cursor.fetchall() + + print("\n--- Select Client to Edit Time ---") + for cid, name in clients: + print(f"{cid}: {name}") + + client_id = input("\nEnter Client ID (or 0 to go back): ") + if client_id == '0' or not client_id: return + + while True: + # 2. List Uninvoiced Entries for Client + cursor.execute('''SELECT entry_id, project, description, invoiced, date, hours + FROM time_tracking WHERE client_id = ? AND invoiced = 0 + ORDER BY date DESC''', (client_id,)) + entries = cursor.fetchall() + + if not entries: + print("No uninvoiced entries found for this client.") + break + + print(f"\n--- Time Entries for Client {client_id} ---") + for e in entries: + print(f"ID {e[0]}: [{e[4]}] {e[1]} - {e[5]} hrs") + print("0: Back to Main Menu") + + entry_choice = input("\nSelect Entry ID to edit: ") + if entry_choice == '0': break + + # Find the specific entry + selected_entry = next((e for e in entries if str(e[0]) == entry_choice), None) + if not selected_entry: + print("Invalid Entry ID.") + continue + + # 3. Edit Fields one by one + display_entry_details(selected_entry) + + # Project + new_project = input(f"Project [{selected_entry[1]}]: ") or selected_entry[1] + # Description + new_desc = input(f"Description [{selected_entry[2]}]: ") or selected_entry[2] + # Date + new_date = input(f"Date [{selected_entry[4]}]: ") or selected_entry[4] + # Hours + new_hours_raw = input(f"Hours [{selected_entry[5]}]: ") + new_hours = float(new_hours_raw) if new_hours_raw else selected_entry[5] + + # 4. Update Database + cursor.execute('''UPDATE time_tracking + SET project = ?, description = ?, date = ?, hours = ? + WHERE entry_id = ?''', + (new_project, new_desc, new_date, new_hours, entry_choice)) + conn.commit() + + print("\nUpdate Successful! New Values:") + print(f"Project: {new_project}\nDescription: {new_desc}\nDate: {new_date}\nHours: {new_hours}") + print("="*30) + + except Exception as e: + print(f"An error occurred: {e}") + finally: + conn.close() + +if __name__ == "__main__": + edit_time_entry() \ No newline at end of file