Implement 'assign type' action

This commit is contained in:
Andreas Tsouchlos 2024-01-04 15:23:25 +01:00
parent ba6b6c2e4a
commit 0fdaff0fa2

View File

@ -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:",