From 0fdaff0fa2e34083e214d63712a57ca32c2b08a0 Mon Sep 17 00:00:00 2001 From: Andreas Tsouchlos Date: Thu, 4 Jan 2024 15:23:25 +0100 Subject: [PATCH] Implement 'assign type' action --- banking_breakdown/ui.py | 61 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/banking_breakdown/ui.py b/banking_breakdown/ui.py index 6762989..fc68ad7 100644 --- a/banking_breakdown/ui.py +++ b/banking_breakdown/ui.py @@ -205,13 +205,24 @@ class MainWindow(QMainWindow): " after each transaction to 'balance'") def _header_right_clicked(self, pos): + column = self._table_view.horizontalHeader().logicalIndexAt(pos) + context = QMenu(self) rename_action = QAction("Rename", self) delete_action = QAction("Delete", self) switch_action = QAction("Switch position", self) - column = self._table_view.horizontalHeader().logicalIndexAt(pos) + assign_menu = QMenu("Assign type", self) + date_action = QAction("date", self) + float_action = QAction("float", self) + assign_menu.addAction(date_action) + assign_menu.addAction(float_action) + date_action.triggered.connect( + partial(self._header_assign_date_handler, column)) + float_action.triggered.connect( + partial(self._header_assign_float_handler, column)) + rename_action.triggered.connect( partial(self._header_rename_handler, column)) delete_action.triggered.connect( @@ -222,6 +233,7 @@ class MainWindow(QMainWindow): context.addAction(rename_action) context.addAction(delete_action) context.addAction(switch_action) + context.addAction(assign_menu.menuAction()) context.exec(self.sender().mapToGlobal(pos)) @@ -279,6 +291,53 @@ class MainWindow(QMainWindow): df = df.reindex(columns=column_titles) self.set_statement_data(df) + def _header_assign_date_handler(self, column): + model = self._table_view.horizontalHeader().model() + column_text = model.headerData(column, Qt.Orientation.Horizontal) + + date_format, flag = QInputDialog.getText(self, "Format", + "Format:", + text="%d.%m.%Y") + + if not flag: + return + + df = self.get_statement_data() + try: + df[column_text] \ + = (pd.to_datetime(df[column_text], format=date_format) + .dt.strftime('%Y-%m-%d')) + except: + QMessageBox.warning(self, "No action performed", + "An error occurred.") + self.set_statement_data(df) + + def _header_assign_float_handler(self, column): + model = self._table_view.horizontalHeader().model() + column_text = model.headerData(column, Qt.Orientation.Horizontal) + + chars = ['.', ','] + decimal_sep, flag = QInputDialog.getItem(self, "Decimal separator", + "Decimal separator:", + chars, editable=False) + + if not flag: + return + + df = self.get_statement_data() + + try: + if decimal_sep == ',': + df[column_text] \ + = df[column_text].str.replace(',', '.').astype(float) + else: + df[column_text] = df[column_text].astype(float) + except: + QMessageBox.warning(self, "No action performed", + "An error occurred.") + + self.set_statement_data(df) + def _handle_create_click(self): new_name, flag = QInputDialog.getText(self, "Create category", "New category:",