File indexing completed on 2024-05-19 05:06:50
0001 /* 0002 SPDX-FileCopyrightText: 2007-2011 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 #include "kconfirmmanualenterdlg.h" 0008 0009 // ---------------------------------------------------------------------------- 0010 // QT Includes 0011 0012 #include <QButtonGroup> 0013 #include <QRadioButton> 0014 0015 // ---------------------------------------------------------------------------- 0016 // KDE Includes 0017 0018 #include <KTextEdit> 0019 #include <KMessageBox> 0020 #include <KLocalizedString> 0021 0022 // ---------------------------------------------------------------------------- 0023 // Project Includes 0024 0025 #include "ui_kconfirmmanualenterdlg.h" 0026 0027 #include "mymoneymoney.h" 0028 #include "mymoneyfile.h" 0029 #include "mymoneyaccount.h" 0030 #include "mymoneysecurity.h" 0031 #include "mymoneypayee.h" 0032 #include "mymoneysplit.h" 0033 #include "mymoneyschedule.h" 0034 #include "mymoneyexception.h" 0035 #include "kmymoneyutils.h" 0036 #include "mymoneytransaction.h" 0037 #include "mymoneyenums.h" 0038 0039 KConfirmManualEnterDlg::KConfirmManualEnterDlg(const MyMoneySchedule& schedule, QWidget* parent) : 0040 QDialog(parent), 0041 ui(new Ui::KConfirmManualEnterDlg) 0042 { 0043 ui->setupUi(this); 0044 ui->buttonGroup1->setId(ui->m_discardRadio, 0); 0045 ui->buttonGroup1->setId(ui->m_onceRadio, 1); 0046 ui->buttonGroup1->setId(ui->m_setRadio, 2); 0047 0048 ui->m_onceRadio->setChecked(true); 0049 0050 if (schedule.type() == eMyMoney::Schedule::Type::LoanPayment) { 0051 ui->m_setRadio->setEnabled(false); 0052 ui->m_discardRadio->setEnabled(false); 0053 } 0054 } 0055 0056 KConfirmManualEnterDlg::~KConfirmManualEnterDlg() 0057 { 0058 delete ui; 0059 } 0060 0061 void KConfirmManualEnterDlg::loadTransactions(const MyMoneyTransaction& to, const MyMoneyTransaction& tn) 0062 { 0063 QString messageDetail("<qt>"); 0064 auto file = MyMoneyFile::instance(); 0065 0066 const auto toSplits = to.splits(); 0067 const auto tnSplits = tn.splits(); 0068 0069 try { 0070 if (toSplits.isEmpty()) 0071 throw MYMONEYEXCEPTION(i18n("Transaction %1 has no splits", to.id())); 0072 if (tnSplits.isEmpty()) 0073 throw MYMONEYEXCEPTION(i18n("Transaction %1 has no splits", tn.id())); 0074 0075 QString po, pn; 0076 if (!toSplits.front().payeeId().isEmpty()) 0077 po = file->payee(toSplits.front().payeeId()).name(); 0078 if (!tnSplits.front().payeeId().isEmpty()) 0079 pn = file->payee(tnSplits.front().payeeId()).name(); 0080 0081 if (po != pn) { 0082 messageDetail += i18n("<p>Payee changed.<br/> Old: <b>%1</b>, New: <b>%2</b></p>", po, pn); 0083 } 0084 0085 if (toSplits.front().accountId() != tnSplits.front().accountId()) { 0086 messageDetail += i18n("<p>Account changed.<br/> Old: <b>%1</b>, New: <b>%2</b></p>", 0087 file->account(toSplits.front().accountId()).name(), 0088 file->account(tnSplits.front().accountId()).name()); 0089 } 0090 0091 if (file->isTransfer(to) && file->isTransfer(tn)) { 0092 if (toSplits.at(1).accountId() != tnSplits.at(1).accountId()) { 0093 messageDetail += i18n("<p>Transfer account changed.<br/> Old: <b>%1</b>, New: <b>%2</b></p>", 0094 file->account(toSplits.at(1).accountId()).name(), 0095 file->account(tnSplits.at(1).accountId()).name()); 0096 } 0097 } else { 0098 QString co, cn; 0099 switch (to.splitCount()) { 0100 default: 0101 co = i18nc("Split transaction (category replacement)", "Split transaction"); 0102 break; 0103 case 2: 0104 co = file->accountToCategory(toSplits.at(1).accountId()); 0105 case 1: 0106 break; 0107 } 0108 0109 switch (tn.splitCount()) { 0110 default: 0111 cn = i18nc("Split transaction (category replacement)", "Split transaction"); 0112 break; 0113 case 2: 0114 cn = file->accountToCategory(tnSplits.at(1).accountId()); 0115 case 1: 0116 break; 0117 } 0118 if (co != cn) { 0119 messageDetail += i18n("<p>Category changed.<br/> Old: <b>%1</b>, New: <b>%2</b></p>", co, cn); 0120 } 0121 } 0122 0123 QString mo, mn; 0124 mo = toSplits.front().memo(); 0125 mn = tnSplits.front().memo(); 0126 if (mo.isEmpty()) 0127 mo = QString("<i>") + i18nc("Empty memo", "empty") + QString("</i>"); 0128 if (mn.isEmpty()) 0129 mn = QString("<i>") + i18nc("Empty memo", "empty") + QString("</i>"); 0130 if (mo != mn) { 0131 messageDetail += i18n("<p>Memo changed.<br/> Old: <b>%1</b>, New: <b>%2</b></p>", mo, mn); 0132 } 0133 0134 QString no, nn; 0135 no = toSplits.front().number(); 0136 nn = tnSplits.front().number(); 0137 if (no.isEmpty()) 0138 no = QString("<i>") + i18nc("No number", "empty") + QString("</i>"); 0139 if (nn.isEmpty()) 0140 nn = QString("<i>") + i18nc("No number", "empty") + QString("</i>"); 0141 if (no != nn) { 0142 messageDetail += i18n("<p>Number changed.<br/> Old: <b>%1</b>, New: <b>%2</b></p>", no, nn); 0143 } 0144 0145 const MyMoneySecurity& sec = MyMoneyFile::instance()->security(to.commodity()); 0146 MyMoneyMoney ao, an; 0147 ao = toSplits.front().value(); 0148 an = tnSplits.front().value(); 0149 if (ao != an) { 0150 messageDetail += i18n("<p>Amount changed.<br/> Old: <b>%1</b>, New: <b>%2</b></p>", ao.formatMoney(sec.smallestAccountFraction()), an.formatMoney(sec.smallestAccountFraction())); 0151 } 0152 0153 eMyMoney::Split::State fo, fn; 0154 fo = toSplits.front().reconcileFlag(); 0155 fn = tnSplits.front().reconcileFlag(); 0156 if (fo != fn) { 0157 messageDetail += i18n("<p>Reconciliation flag changed.<br/> Old: <b>%1</b>, New: <b>%2</b></p>", KMyMoneyUtils::reconcileStateToString(fo, true), KMyMoneyUtils::reconcileStateToString(fn, true)); 0158 } 0159 } catch (const MyMoneyException& e) { 0160 KMessageBox::error(this, i18n("Fatal error in determining data: %1", QString::fromLatin1(e.what()))); 0161 } 0162 0163 messageDetail += "</qt>"; 0164 ui->m_details->setText(messageDetail); 0165 return; 0166 } 0167 0168 KConfirmManualEnterDlg::Action KConfirmManualEnterDlg::action() const 0169 { 0170 if (ui->m_discardRadio->isChecked()) 0171 return UseOriginal; 0172 if (ui->m_setRadio->isChecked()) 0173 return ModifyAlways; 0174 return ModifyOnce; 0175 }