File indexing completed on 2024-05-19 05:08:26
0001 /* 0002 SPDX-FileCopyrightText: 2015-2019 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-FileCopyrightText: 2020 Robert Szczesiak <dev.rszczesiak@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "newtransactionform.h" 0008 0009 // ---------------------------------------------------------------------------- 0010 // QT Includes 0011 0012 #include <QDate> 0013 #include <QRegularExpression> 0014 0015 // ---------------------------------------------------------------------------- 0016 // KDE Includes 0017 0018 // ---------------------------------------------------------------------------- 0019 // Project Includes 0020 0021 #include "journalmodel.h" 0022 #include "mymoneyfile.h" 0023 #include "tagsmodel.h" 0024 #include "statusmodel.h" 0025 0026 #include "ui_newtransactionform.h" 0027 0028 class NewTransactionForm::Private 0029 { 0030 Q_DISABLE_COPY_MOVE(Private) 0031 0032 public: 0033 Private() 0034 : ui(new Ui_NewTransactionForm) 0035 , row(-1) 0036 { 0037 } 0038 0039 ~Private() 0040 { 0041 delete ui; 0042 } 0043 0044 Ui_NewTransactionForm* ui; 0045 int row; 0046 }; 0047 0048 0049 NewTransactionForm::NewTransactionForm(QWidget* parent) 0050 : QFrame(parent) 0051 , d(new Private) 0052 { 0053 const auto journalModel = MyMoneyFile::instance()->journalModel(); 0054 d->ui->setupUi(this); 0055 connect(journalModel, &QAbstractItemModel::rowsInserted, this, &NewTransactionForm::rowsInserted); 0056 connect(journalModel, &QAbstractItemModel::rowsRemoved, this, &NewTransactionForm::rowsRemoved); 0057 connect(journalModel, &QAbstractItemModel::dataChanged, this, &NewTransactionForm::modelDataChanged); 0058 } 0059 0060 NewTransactionForm::~NewTransactionForm() 0061 { 0062 delete d; 0063 } 0064 0065 void NewTransactionForm::rowsInserted(const QModelIndex& parent, int first, int last) 0066 { 0067 Q_UNUSED(parent); 0068 if (first <= d->row) { 0069 d->row += last - first + 1; 0070 } 0071 } 0072 0073 void NewTransactionForm::rowsRemoved(const QModelIndex& parent, int first, int last) 0074 { 0075 Q_UNUSED(parent); 0076 if (first <= d->row) { 0077 d->row -= last - first + 1; 0078 } 0079 } 0080 0081 void NewTransactionForm::showTransaction(const QModelIndex& idx) 0082 { 0083 const auto index = MyMoneyFile::baseModel()->mapToBaseSource(idx); 0084 d->row = index.row(); 0085 0086 // make sure to have a four digit year display 0087 auto format(d->ui->dateEdit->displayFormat()); 0088 static const QRegularExpression twoYearDigits(QLatin1String("^([^y]*)yy([^y]*)$")); 0089 format.replace(twoYearDigits, QLatin1String("\\1yyyy\\2")); 0090 d->ui->dateEdit->setDisplayFormat(format); 0091 0092 d->ui->dateEdit->setDate(index.data(eMyMoney::Model::TransactionPostDateRole).toDate()); 0093 d->ui->payeeEdit->setText(index.data(eMyMoney::Model::SplitPayeeRole).toString()); 0094 d->ui->memoEdit->clear(); 0095 d->ui->memoEdit->insertPlainText(index.data(eMyMoney::Model::SplitMemoRole).toString()); 0096 d->ui->memoEdit->moveCursor(QTextCursor::Start); 0097 d->ui->memoEdit->ensureCursorVisible(); 0098 d->ui->accountEdit->setText(index.data(eMyMoney::Model::TransactionCounterAccountRole).toString()); 0099 d->ui->accountEdit->home(false); 0100 0101 d->ui->tagEdit->clear(); 0102 QStringList splitTagList = index.data(eMyMoney::Model::SplitTagIdRole).toStringList(); 0103 if (!splitTagList.isEmpty()) { 0104 std::transform(splitTagList.begin(), splitTagList.end(), splitTagList.begin(), 0105 [] (const QString& tagId) { 0106 return MyMoneyFile::instance()->tagsModel()->itemById(tagId).name(); 0107 }); 0108 d->ui->tagEdit->setText(splitTagList.join(", ")); 0109 d->ui->tagEdit->home(false); 0110 } 0111 0112 d->ui->numberEdit->setText(index.data(eMyMoney::Model::SplitNumberRole).toString()); 0113 0114 d->ui->amountEdit->setText(i18nc("@item:intext Amount, %1 transaction amount, %2 payment direction enclosed in parenthesis", 0115 "%1 %2", 0116 index.data(eMyMoney::Model::SplitSharesFormattedRole).toString(), 0117 idx.data(eMyMoney::Model::SplitSharesSuffixRole).toString())); 0118 0119 const auto status = index.data(eMyMoney::Model::SplitReconcileFlagRole).toInt(); 0120 const auto statusIdx = MyMoneyFile::instance()->statusModel()->index(status, 0); 0121 d->ui->statusEdit->setText(statusIdx.data(eMyMoney::Model::SplitReconcileStatusRole).toString()); 0122 } 0123 0124 void NewTransactionForm::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight) 0125 { 0126 if ((topLeft.row() <= d->row) && (bottomRight.row() >= d->row)) { 0127 const auto idx = MyMoneyFile::instance()->journalModel()->index(d->row, 0); 0128 showTransaction(idx); 0129 } 0130 }