File indexing completed on 2024-05-12 16:42:07
0001 /* 0002 SPDX-FileCopyrightText: 2002-2018 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-FileCopyrightText: 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KFINDTRANSACTIONDLG_P_H 0008 #define KFINDTRANSACTIONDLG_P_H 0009 0010 #include "kfindtransactiondlg.h" 0011 0012 // ---------------------------------------------------------------------------- 0013 // QT Includes 0014 0015 #include <QTimer> 0016 #include <QPushButton> 0017 #include <QPointer> 0018 #include <QHeaderView> 0019 0020 // ---------------------------------------------------------------------------- 0021 // KDE Includes 0022 0023 #include <KGuiItem> 0024 #include <KStandardGuiItem> 0025 #include <KLocalizedString> 0026 #include <KLineEdit> 0027 0028 // ---------------------------------------------------------------------------- 0029 // Project Includes 0030 0031 #include "ktransactionfilter.h" 0032 #include "mymoneyaccount.h" 0033 #include "mymoneyfile.h" 0034 #include "mymoneymoney.h" 0035 #include "mymoneypayee.h" 0036 #include "mymoneytag.h" 0037 #include "kmymoneysettings.h" 0038 #include "register.h" 0039 #include "transaction.h" 0040 #include "mymoneysplit.h" 0041 #include "mymoneytransaction.h" 0042 #include "mymoneytransactionfilter.h" 0043 0044 #include "ui_kfindtransactiondlg.h" 0045 0046 #include "widgetenums.h" 0047 #include "mymoneyenums.h" 0048 0049 class KFindTransactionDlgPrivate 0050 { 0051 Q_DISABLE_COPY(KFindTransactionDlgPrivate) 0052 Q_DECLARE_PUBLIC(KFindTransactionDlg) 0053 0054 public: 0055 enum opTypeE { 0056 addAccountToFilter = 0, 0057 addCategoryToFilter, 0058 addPayeeToFilter, 0059 addTagToFilter, 0060 }; 0061 0062 explicit KFindTransactionDlgPrivate(KFindTransactionDlg *qq) : 0063 q_ptr(qq), 0064 ui(new Ui::KFindTransactionDlg), 0065 m_needReload(true) 0066 { 0067 } 0068 0069 ~KFindTransactionDlgPrivate() 0070 { 0071 delete ui; 0072 } 0073 0074 void init(bool withEquityAccounts) 0075 { 0076 Q_Q(KFindTransactionDlg); 0077 m_needReload = false; 0078 ui->setupUi(q); 0079 0080 m_tabFilters = new KTransactionFilter(q, withEquityAccounts); 0081 ui->m_tabWidget->insertTab(0, m_tabFilters, i18nc("Criteria tab", "Criteria")); 0082 0083 ui->m_register->installEventFilter(q); 0084 ui->m_tabWidget->setTabEnabled(ui->m_tabWidget->indexOf(ui->m_resultPage), false); 0085 0086 // setup the register 0087 QList<eWidgets::eTransaction::Column> cols { 0088 eWidgets::eTransaction::Column::Date, 0089 eWidgets::eTransaction::Column::Account, 0090 eWidgets::eTransaction::Column::Detail, 0091 eWidgets::eTransaction::Column::ReconcileFlag, 0092 eWidgets::eTransaction::Column::Payment, 0093 eWidgets::eTransaction::Column::Deposit, 0094 }; 0095 ui->m_register->setupRegister(MyMoneyAccount(), cols); 0096 ui->m_register->setSelectionMode(QTableWidget::SingleSelection); 0097 0098 q->connect(ui->m_register, &KMyMoneyRegister::Register::editTransaction, q, &KFindTransactionDlg::slotSelectTransaction); 0099 q->connect(ui->m_register->horizontalHeader(), &QWidget::customContextMenuRequested, q, &KFindTransactionDlg::slotSortOptions); 0100 0101 // setup the connections 0102 q->connect(ui->buttonBox->button(QDialogButtonBox::Open), &QAbstractButton::clicked, q, &KFindTransactionDlg::slotSearch); 0103 q->connect(ui->buttonBox->button(QDialogButtonBox::Reset), &QAbstractButton::clicked, q, &KFindTransactionDlg::slotReset); 0104 q->connect(ui->buttonBox->button(QDialogButtonBox::Close), &QAbstractButton::clicked, q, &QObject::deleteLater); 0105 q->connect(ui->buttonBox->button(QDialogButtonBox::Help), &QAbstractButton::clicked, q, &KFindTransactionDlg::slotShowHelp); 0106 0107 // only allow searches when a selection has been made 0108 ui->buttonBox->button(QDialogButtonBox::Open)->setEnabled(false); 0109 KGuiItem::assign(ui->buttonBox->button(QDialogButtonBox::Open), KStandardGuiItem::find()); 0110 ui->buttonBox->button(QDialogButtonBox::Open)->setToolTip(i18nc("@info:tooltip for find transaction Open button", "Search transactions")); 0111 q->connect(m_tabFilters, &KTransactionFilter::selectionNotEmpty, ui->buttonBox->button(QDialogButtonBox::Open), &QWidget::setEnabled); 0112 0113 // get signal about engine changes 0114 q->connect(MyMoneyFile::instance(), &MyMoneyFile::dataChanged, q, &KFindTransactionDlg::slotRefreshView); 0115 0116 // set initial focus to text entry field 0117 KLineEdit* textEdit = m_tabFilters->findChild<KLineEdit*>(QLatin1String("m_textEdit")); 0118 if (textEdit) 0119 textEdit->setFocus(); 0120 } 0121 0122 /** 0123 * q method loads the register with the matching transactions 0124 */ 0125 void loadView() 0126 { 0127 // setup sort order 0128 ui->m_register->setSortOrder(KMyMoneySettings::sortSearchView()); 0129 0130 // clear out old data 0131 ui->m_register->clear(); 0132 0133 // retrieve the list from the engine 0134 MyMoneyFile::instance()->transactionList(m_transactionList, m_filter); 0135 0136 // create the elements for the register 0137 QList<QPair<MyMoneyTransaction, MyMoneySplit> >::const_iterator it; 0138 QMap<QString, int>uniqueMap; 0139 MyMoneyMoney deposit, payment; 0140 0141 int splitCount = 0; 0142 for (it = m_transactionList.constBegin(); it != m_transactionList.constEnd(); ++it) { 0143 const MyMoneySplit& split = (*it).second; 0144 MyMoneyAccount acc = MyMoneyFile::instance()->account(split.accountId()); 0145 ++splitCount; 0146 uniqueMap[(*it).first.id()]++; 0147 0148 KMyMoneyRegister::Register::transactionFactory(ui->m_register, (*it).first, (*it).second, uniqueMap[(*it).first.id()]); 0149 { // debug stuff 0150 if (split.shares().isNegative()) { 0151 payment += split.shares().abs(); 0152 } else { 0153 deposit += split.shares().abs(); 0154 } 0155 } 0156 } 0157 0158 // add the group markers 0159 ui->m_register->addGroupMarkers(); 0160 0161 // sort the transactions according to the sort setting 0162 ui->m_register->sortItems(); 0163 0164 // remove trailing and adjacent markers 0165 ui->m_register->removeUnwantedGroupMarkers(); 0166 0167 // turn on the ledger lens for the register 0168 ui->m_register->setLedgerLensForced(); 0169 0170 ui->m_register->updateRegister(true); 0171 0172 ui->m_register->setFocusToTop(); 0173 ui->m_register->selectItem(ui->m_register->focusItem()); 0174 0175 #ifdef KMM_DEBUG 0176 ui->m_foundText->setText(i18np("Found %1 matching transaction (D %2 / P %3 = %4)", 0177 "Found %1 matching transactions (D %2 / P %3 = %4)", splitCount, deposit.formatMoney("", 2), payment.formatMoney("", 2), (deposit - payment).formatMoney("", 2))); 0178 #else 0179 ui->m_foundText->setText(i18np("Found %1 matching transaction", "Found %1 matching transactions", splitCount)); 0180 #endif 0181 0182 ui->m_tabWidget->setTabEnabled(ui->m_tabWidget->indexOf(ui->m_resultPage), true); 0183 ui->m_tabWidget->setCurrentIndex(ui->m_tabWidget->indexOf(ui->m_resultPage)); 0184 0185 Q_Q(KFindTransactionDlg); 0186 QTimer::singleShot(10, q, SLOT(slotRightSize())); 0187 } 0188 0189 0190 KFindTransactionDlg *q_ptr; 0191 Ui::KFindTransactionDlg *ui; 0192 0193 /** 0194 * q member holds a list of all transactions matching the filter criteria 0195 */ 0196 QList<QPair<MyMoneyTransaction, MyMoneySplit> > m_transactionList; 0197 0198 MyMoneyTransactionFilter m_filter; 0199 0200 bool m_needReload; 0201 QPointer<KTransactionFilter> m_tabFilters; 0202 0203 }; 0204 0205 #endif