账单记录器迁移。
This commit is contained in:
225
repayment.cpp
Normal file
225
repayment.cpp
Normal file
@@ -0,0 +1,225 @@
|
||||
#include "repayment.h"
|
||||
#include "ui_repayment.h"
|
||||
#include "util.h"
|
||||
#include <QDateTime>
|
||||
#include <QInputDialog>
|
||||
#include <QMenu>
|
||||
#include <QMessageBox>
|
||||
|
||||
Repayment::Repayment(QWidget* parent, std::unique_ptr<RepaySqlOpr>& repaySqlOpr)
|
||||
: QDialog(parent), ui(new Ui::Repayment), repaySqlOpr_(repaySqlOpr)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
Init();
|
||||
setWindowTitle("还款情况");
|
||||
resize(800, 600);
|
||||
}
|
||||
|
||||
Repayment::~Repayment()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
int Repayment::exec()
|
||||
{
|
||||
ui->lbInfo->setText(info_);
|
||||
ShowData();
|
||||
if (!over_) {
|
||||
return QDialog::Rejected;
|
||||
}
|
||||
return QDialog::exec();
|
||||
}
|
||||
|
||||
void Repayment::SetInformation(const QString& info)
|
||||
{
|
||||
info_ = info;
|
||||
}
|
||||
|
||||
void Repayment::SetRecord(const AccountRecord& record)
|
||||
{
|
||||
record_ = record;
|
||||
}
|
||||
|
||||
void Repayment::ShowData()
|
||||
{
|
||||
over_ = false;
|
||||
RepayRecordList reuslt;
|
||||
if (!repaySqlOpr_->GetRepayResult(reuslt, record_.id)) {
|
||||
QMessageBox::critical(this, "错误", "获取还款记录失败");
|
||||
return;
|
||||
}
|
||||
|
||||
tw_->setRowCount(reuslt.size());
|
||||
for (int row = 0; row < reuslt.size(); ++row) {
|
||||
QTableWidgetItem* item = new QTableWidgetItem(QString::number(reuslt[row].id));
|
||||
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
|
||||
tw_->setItem(row, 0, item);
|
||||
|
||||
item = new QTableWidgetItem(QString::number(reuslt[row].accID));
|
||||
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
|
||||
tw_->setItem(row, 1, item);
|
||||
|
||||
item = new QTableWidgetItem(QString::number(Util::CashDouble(reuslt[row].money)));
|
||||
tw_->setItem(row, 2, item);
|
||||
|
||||
item = new QTableWidgetItem(QString::fromStdString(reuslt[row].dt));
|
||||
tw_->setItem(row, 3, item);
|
||||
|
||||
item = new QTableWidgetItem(QString::fromStdString(reuslt[row].remark));
|
||||
tw_->setItem(row, 4, item);
|
||||
}
|
||||
|
||||
ui->edPay->setText(QString::number(Util::CashDouble(record_.money)) + "元");
|
||||
|
||||
// 统计还了多少钱
|
||||
BasicAnasys(reuslt);
|
||||
over_ = true;
|
||||
}
|
||||
|
||||
void Repayment::Init()
|
||||
{
|
||||
ui->edPay->setReadOnly(true);
|
||||
ui->edResult->setReadOnly(true);
|
||||
|
||||
auto* lay = new QVBoxLayout(this);
|
||||
tw_ = new QTableWidget(this);
|
||||
|
||||
QStringList headers;
|
||||
headers << "ID" << "记录ID" << "金额" << "日期" << "备注";
|
||||
|
||||
tw_->setColumnCount(headers.size());
|
||||
tw_->setHorizontalHeaderLabels(headers);
|
||||
tw_->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
|
||||
tw_->setColumnWidth(0, 50);
|
||||
tw_->setColumnWidth(1, 50);
|
||||
tw_->setColumnWidth(2, 100);
|
||||
tw_->setColumnWidth(3, 150);
|
||||
tw_->setColumnWidth(4, 100);
|
||||
|
||||
lay->addWidget(tw_);
|
||||
ui->widget->setLayout(lay);
|
||||
tw_->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(tw_, &QTableWidget::customContextMenuRequested, this, &Repayment::ShowContextMenu);
|
||||
connect(ui->btnSave, &QPushButton::clicked, this, &Repayment::Save);
|
||||
}
|
||||
|
||||
void Repayment::ShowContextMenu(const QPoint& pos)
|
||||
{
|
||||
QList<QTableWidgetItem*> selectedItems = tw_->selectedItems();
|
||||
if (selectedItems.isEmpty()) {
|
||||
QAction* acAdd = new QAction("添加", this);
|
||||
QMenu menu(this);
|
||||
connect(acAdd, &QAction::triggered, this, [this]() {
|
||||
bool ok = false;
|
||||
double amount =
|
||||
QInputDialog::getDouble(this, "录入金额", "请输入金额:", 0.0, 0.0, 1000000.0, 2, &ok, Qt::WindowFlags(), 1.0);
|
||||
|
||||
if (!ok || amount <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
int row = tw_->rowCount();
|
||||
tw_->insertRow(row);
|
||||
|
||||
QString currentDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
|
||||
auto* nId = new QTableWidgetItem("");
|
||||
nId->setFlags(nId->flags() & ~Qt::ItemIsEditable);
|
||||
tw_->setItem(row, 0, nId);
|
||||
|
||||
auto* rIdItem = new QTableWidgetItem(QString::number(record_.id));
|
||||
rIdItem->setFlags(rIdItem->flags() & ~Qt::ItemIsEditable);
|
||||
|
||||
tw_->setItem(row, 1, rIdItem);
|
||||
tw_->setItem(row, 2, new QTableWidgetItem(QString::number(amount, 'f', 2)));
|
||||
|
||||
auto* dateCur = new QTableWidgetItem(currentDateTime);
|
||||
dateCur->setFlags(dateCur->flags() & ~Qt::ItemIsEditable);
|
||||
|
||||
tw_->setItem(row, 3, dateCur);
|
||||
tw_->setItem(row, 4, new QTableWidgetItem(""));
|
||||
|
||||
tw_->resizeRowToContents(row);
|
||||
tw_->scrollToItem(tw_->item(row, 0));
|
||||
});
|
||||
menu.addAction(acAdd);
|
||||
menu.exec(tw_->viewport()->mapToGlobal(pos));
|
||||
return;
|
||||
}
|
||||
if (selectedItems.size() == 5) {
|
||||
QAction* acDel = new QAction("删除", this);
|
||||
QMenu menu(this);
|
||||
connect(acDel, &QAction::triggered, this, [this, selectedItems]() {
|
||||
auto strId = selectedItems[0]->text();
|
||||
if (strId.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
int id = strId.toInt();
|
||||
// 确认
|
||||
if (QMessageBox::No == QMessageBox::question(this, "删除", "确定删除吗?")) {
|
||||
return;
|
||||
}
|
||||
if (!repaySqlOpr_->deleteRepayRecord(id)) {
|
||||
QMessageBox::critical(this, "错误", "删除失败");
|
||||
return;
|
||||
}
|
||||
tw_->removeRow(selectedItems[0]->row());
|
||||
});
|
||||
menu.addAction(acDel);
|
||||
menu.exec(tw_->viewport()->mapToGlobal(pos));
|
||||
}
|
||||
}
|
||||
void Repayment::Save()
|
||||
{
|
||||
int rowCount = tw_->rowCount();
|
||||
if (rowCount < 1) {
|
||||
return;
|
||||
}
|
||||
for (int row = 0; row < rowCount; ++row) {
|
||||
auto* id = tw_->item(row, 0);
|
||||
auto* rId = tw_->item(row, 1);
|
||||
auto* amount = tw_->item(row, 2);
|
||||
auto* date = tw_->item(row, 3);
|
||||
auto* note = tw_->item(row, 4);
|
||||
|
||||
auto idText = id->text();
|
||||
if (idText.isEmpty()) {
|
||||
RepayRecord rd;
|
||||
rd.dt = date->text().toStdString();
|
||||
rd.accID = record_.id;
|
||||
rd.money = Util::CashInt(amount->text().toDouble());
|
||||
rd.remark = note->text().toStdString();
|
||||
if (!repaySqlOpr_->InsertRepayRecord(rd)) {
|
||||
QMessageBox::critical(this, "错误", "添加还款记录失败");
|
||||
return;
|
||||
}
|
||||
id->setText(QString::number(rd.id));
|
||||
} else {
|
||||
RepayRecord rd;
|
||||
rd.id = idText.toInt();
|
||||
rd.dt = date->text().toStdString();
|
||||
rd.accID = record_.id;
|
||||
rd.money = Util::CashInt(amount->text().toDouble());
|
||||
rd.remark = note->text().toStdString();
|
||||
if (!repaySqlOpr_->updateRepayRecord(rd)) {
|
||||
QMessageBox::critical(this, "错误", "更新还款记录失败");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QMessageBox::information(this, "提示", "保存成功");
|
||||
}
|
||||
|
||||
void Repayment::BasicAnasys(const RepayRecordList& rList)
|
||||
{
|
||||
int32_t total{};
|
||||
for (const auto& rd : rList) {
|
||||
total += rd.money;
|
||||
}
|
||||
if (total >= record_.money) {
|
||||
ui->edResult->setText("剩余" + QString::number(Util::CashDouble(total - record_.money)) + "元,已还清。");
|
||||
} else {
|
||||
ui->edResult->setText("剩余" + QString::number(Util::CashDouble(record_.money - total)) + "元,未还清。");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user