diff --git a/banking_breakdown/ui.py b/banking_breakdown/ui.py index 71c7c4c..8d4499f 100644 --- a/banking_breakdown/ui.py +++ b/banking_breakdown/ui.py @@ -130,11 +130,21 @@ class MainWindow(QMainWindow): self._table_view.setColumnWidth(i, max_char * 10) self._show_warnings(df) + self._update_categories_from_dataframe(df) def get_statement_data(self) -> pd.DataFrame: return self._table_view.model().sourceModel().get_dataframe() - def add_categories(self, categories: typing.Sequence[str]): + def _update_categories_from_dataframe(self, df: pd.DataFrame): + df_categories = df['category'].unique() + current_categories = [self._list_widget.item(x).text() for x + in range(self._list_widget.count())] + + missing = list(set(df_categories) - set(current_categories)) + self._add_categories([category for category + in missing if category != ' ']) + + def _add_categories(self, categories: typing.Sequence[str]): for category in categories: self._list_widget.addItem(category) @@ -267,7 +277,7 @@ class MainWindow(QMainWindow): in range(self._list_widget.count())] if new_name not in current_items: - self.add_categories([new_name]) + self._add_categories([new_name]) else: QMessageBox.warning(self, "No action performed", f"Category '{new_name}' already exists.") @@ -311,14 +321,10 @@ class MainWindow(QMainWindow): df.to_csv(filename, index=False) -def show_main_window(categories: typing.Sequence[str] = None, - df: pd.DataFrame = None): +def show_main_window(df: pd.DataFrame = None): app = QApplication(sys.argv) window = MainWindow() - if categories is not None: - window.add_categories(categories) - if df is not None: window.set_statement_data(df) @@ -335,7 +341,7 @@ def main(): df = pd.read_csv("res/bank_statement_2023_categorized_renamed.csv") - show_main_window(categories, df) + show_main_window(df) if __name__ == "__main__":