Implement date uniqueness validation in DataManager and update MedTrackerApp for duplicate checks
This commit is contained in:
+32
-4
@@ -119,9 +119,11 @@ class MedTrackerApp:
|
||||
|
||||
def _create_edit_window(self, item_id: str, values: tuple[str, ...]) -> None:
|
||||
"""Create a new Toplevel window for editing an entry."""
|
||||
original_date = values[0] # Store the original date
|
||||
|
||||
# Define callbacks for edit window buttons
|
||||
callbacks: dict[str, Callable] = {
|
||||
"save": self._save_edit,
|
||||
"save": lambda win, *args: self._save_edit(win, original_date, *args),
|
||||
"delete": lambda win: self._delete_entry(win, item_id),
|
||||
}
|
||||
|
||||
@@ -131,6 +133,7 @@ class MedTrackerApp:
|
||||
def _save_edit(
|
||||
self,
|
||||
edit_win: tk.Toplevel,
|
||||
original_date: str,
|
||||
date: str,
|
||||
dep: int,
|
||||
anx: int,
|
||||
@@ -156,7 +159,7 @@ class MedTrackerApp:
|
||||
note,
|
||||
]
|
||||
|
||||
if self.data_manager.update_entry(date, values):
|
||||
if self.data_manager.update_entry(original_date, values):
|
||||
edit_win.destroy()
|
||||
messagebox.showinfo(
|
||||
"Success", "Entry updated successfully!", parent=self.root
|
||||
@@ -164,7 +167,17 @@ class MedTrackerApp:
|
||||
self._clear_entries()
|
||||
self.load_data()
|
||||
else:
|
||||
messagebox.showerror("Error", "Failed to save changes", parent=edit_win)
|
||||
# Check if it's a duplicate date issue
|
||||
df = self.data_manager.load_data()
|
||||
if original_date != date and not df.empty and date in df["date"].values:
|
||||
messagebox.showerror(
|
||||
"Error",
|
||||
f"An entry for date '{date}' already exists. "
|
||||
"Please use a different date.",
|
||||
parent=edit_win,
|
||||
)
|
||||
else:
|
||||
messagebox.showerror("Error", "Failed to save changes", parent=edit_win)
|
||||
|
||||
def on_closing(self) -> None:
|
||||
if messagebox.askokcancel(
|
||||
@@ -189,6 +202,11 @@ class MedTrackerApp:
|
||||
]
|
||||
logger.debug(f"Adding entry: {entry}")
|
||||
|
||||
# Check if date is empty
|
||||
if not self.date_var.get().strip():
|
||||
messagebox.showerror("Error", "Please enter a date.", parent=self.root)
|
||||
return
|
||||
|
||||
if self.data_manager.add_entry(entry):
|
||||
messagebox.showinfo(
|
||||
"Success", "Entry added successfully!", parent=self.root
|
||||
@@ -196,7 +214,17 @@ class MedTrackerApp:
|
||||
self._clear_entries()
|
||||
self.load_data()
|
||||
else:
|
||||
messagebox.showerror("Error", "Failed to add entry", parent=self.root)
|
||||
# Check if it's a duplicate date by trying to load existing data
|
||||
df = self.data_manager.load_data()
|
||||
if not df.empty and self.date_var.get() in df["date"].values:
|
||||
messagebox.showerror(
|
||||
"Error",
|
||||
f"An entry for date '{self.date_var.get()}' already exists. "
|
||||
"Please use a different date or edit the existing entry.",
|
||||
parent=self.root,
|
||||
)
|
||||
else:
|
||||
messagebox.showerror("Error", "Failed to add entry", parent=self.root)
|
||||
|
||||
def _delete_entry(self, edit_win: tk.Toplevel, item_id: str) -> None:
|
||||
"""Delete the selected entry from the CSV file."""
|
||||
|
||||
Reference in New Issue
Block a user