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 }