From 66679afdeadf4bf0272b8100705772298952e0ad Mon Sep 17 00:00:00 2001 From: iridiumR Date: Sat, 3 Jun 2023 14:16:40 +0800 Subject: [PATCH] feat: trans table --- src/budget/_mw.py | 2 ++ src/budget/_trans.py | 50 +++++++++++++++++++++++++++++++++++--------- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/budget/_mw.py b/src/budget/_mw.py index 99c75a1..39d8eb2 100644 --- a/src/budget/_mw.py +++ b/src/budget/_mw.py @@ -29,6 +29,8 @@ def initUI(self): self.pg.onConnectClicked() + self.onTabChanged(0) + def onTabChanged(self, index): self.centralWidget().widget(index).selected() diff --git a/src/budget/_trans.py b/src/budget/_trans.py index b9dd3df..6afded3 100644 --- a/src/budget/_trans.py +++ b/src/budget/_trans.py @@ -3,6 +3,7 @@ from ._tab import TabPage from ._pg import PostgresTab from PyQt6.QtGui import QDoubleValidator import json +import datetime class TransTab(TabPage): def __init__(self, parent): @@ -13,19 +14,19 @@ class TransTab(TabPage): def initUI(self): # 创建顶部控件 - self.transAddButton = QPushButton('Add') - self.transAddButton.clicked.connect(self.onTransAddClicked) - self.transModifyButton = QPushButton('Modify') - self.transModifyButton.clicked.connect(self.onTransModifyClicked) + transAddButton = QPushButton('Add') + transAddButton.clicked.connect(self.onTransAddClicked) + transModifyButton = QPushButton('Modify') + transModifyButton.clicked.connect(self.onTransModifyClicked) # 创建控件布局 topLayout = QHBoxLayout() - topLayout.addWidget(self.transAddButton) - topLayout.addWidget(self.transModifyButton) + topLayout.addWidget(transAddButton) + topLayout.addWidget(transModifyButton) - transTable = QTableWidget() + self.transTable = QTableWidget() tableLayout = QVBoxLayout() - tableLayout.addWidget(transTable) + tableLayout.addWidget(self.transTable) # 创建中间控件 transLayout = QVBoxLayout() @@ -105,12 +106,12 @@ class TransTab(TabPage): description = descriptionLine.text() # JSONB插入数据 - data = {"description": description} + data = {"type":type, "description": description} data = json.dumps(data) print("insert data:", data) self.pg.execute( - "INSERT INTO transaction (c_id, a_id, amount, meta) VALUES (%s,%s,%s,%s)", (category, account, amount, data,)) + "INSERT INTO transaction (c_id, a_id, time, amount, meta) VALUES (%s,%s,now(), %s,%s)", (category, account, amount, data,)) self.pg.execute("UPDATE account SET balance = balance + (%s::NUMERIC)::MONEY WHERE a_id = %s", (amount, account,)) @@ -150,3 +151,32 @@ class TransTab(TabPage): self.dialogLayout.itemAt(5).widget().clear() for i in range(len(self.accountData)): self.dialogLayout.itemAt(5).widget().addItem(self.accountData[i][1]) + + def selected(self): + self.pg.execute("SELECT t_id, a_id, c_id, s_id, time, translate(amount::varchar,'$','¥'), meta->>'description' FROM transaction ORDER BY time") + self.transData = self.pg.fetchall() + self.pg.execute("SELECT a_id, meta ->> 'name' FROM account ORDER BY a_id") + self.accountData = self.pg.fetchall() + self.pg.execute("SELECT c_id, meta ->> 'name' FROM category ORDER BY c_id") + self.categoryData = self.pg.fetchall() + + print(self.transData) + + # 初始化表格 + self.transTable.clear() + self.transTable.setRowCount(len(self.transData)) + self.transTable.setColumnCount(5) # 时间 账户 类别 金额 描述 + self.transTable.setHorizontalHeaderLabels(['Time', 'Account', 'Category', 'Amount', 'Description']) + # 设置自动调整列宽 + self.transTable.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch) + + # 填充表格 + for i in range(len(self.transData)): + self.transTable.setItem(i, 0, QTableWidgetItem(self.transData[i][4].strftime("%Y-%m-%d %H:%M:%S"))) + self.transTable.setItem(i, 1, QTableWidgetItem(self.accountData[self.transData[i][1]-1][1])) + if self.transData[i][2] is None: + self.transTable.setItem(i, 2, QTableWidgetItem("None")) + else: + self.transTable.setItem(i, 2, QTableWidgetItem(self.categoryData[self.transData[i][2]-1][1])) + self.transTable.setItem(i, 3, QTableWidgetItem(str(self.transData[i][5]))) + self.transTable.setItem(i, 4, QTableWidgetItem(self.transData[i][6]))