1 /*************************************************************************** 2 kloanpayoutpage.cpp 3 ------------------- 4 begin : Tue Sep 25 2006 5 copyright : (C) 2007 Thomas Baumgart 6 email : Thomas Baumgart <ipwizard@users.sourceforge.net> 7 (C) 2017 by Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 8 ***************************************************************************/ 9 10 /*************************************************************************** 11 * * 12 * This program is free software; you can redistribute it and/or modify * 13 * it under the terms of the GNU General Public License as published by * 14 * the Free Software Foundation; either version 2 of the License, or * 15 * (at your option) any later version. * 16 * * 17 ***************************************************************************/ 18 19 #include "kloanpayoutpage.h" 20 #include "kloanpayoutpage_p.h" 21 22 // ---------------------------------------------------------------------------- 23 // QT Includes 24 25 #include <QCheckBox> 26 #include <QFrame> 27 #include <QHash> 28 #include <QIcon> 29 #include <QLineEdit> 30 #include <QPushButton> 31 #include <QTimer> 32 33 // ---------------------------------------------------------------------------- 34 // KDE Includes 35 36 #include <KGuiItem> 37 #include <KLocalizedString> 38 39 // ---------------------------------------------------------------------------- 40 // Project Includes 41 42 #include "ui_kaccounttypepage.h" 43 #include "ui_kloanpayoutpage.h" 44 45 #include <kguiutils.h> 46 #include "icons.h" 47 #include "kmymoneyaccountselector.h" 48 #include "kmymoneycategory.h" 49 #include "kmymoneydateinput.h" 50 #include "kmymoneywizardpage.h" 51 #include "knewaccountwizard.h" 52 #include "knewaccountwizard_p.h" 53 #include "kaccountsummarypage.h" 54 #include "kaccounttypepage.h" 55 #include "kaccounttypepage_p.h" 56 #include "mymoneyaccount.h" 57 #include "mymoneyenums.h" 58 #include "mymoneyfile.h" 59 #include "wizardpage.h" 60 61 using namespace NewAccountWizard; 62 using namespace Icons; 63 using namespace eMyMoney; 64 65 namespace NewAccountWizard 66 { LoanPayoutPage(Wizard * wizard)67 LoanPayoutPage::LoanPayoutPage(Wizard* wizard) : 68 QWidget(wizard), 69 WizardPage<Wizard>(*new LoanPayoutPagePrivate(wizard), StepPayout, this, wizard) 70 { 71 Q_D(LoanPayoutPage); 72 d->ui->setupUi(this); 73 d->m_mandatoryGroup->add(d->ui->m_assetAccount->lineEdit()); 74 d->m_mandatoryGroup->add(d->ui->m_loanAccount->lineEdit()); 75 76 KGuiItem createAssetButtenItem(i18n("&Create..."), 77 Icons::get(Icon::DocumentNew), 78 i18n("Create a new asset account"), 79 i18n("If the asset account does not yet exist, press this button to create it.")); 80 KGuiItem::assign(d->ui->m_createAssetButton, createAssetButtenItem); 81 d->ui->m_createAssetButton->setToolTip(createAssetButtenItem.toolTip()); 82 d->ui->m_createAssetButton->setWhatsThis(createAssetButtenItem.whatsThis()); 83 connect(d->ui->m_createAssetButton, &QAbstractButton::clicked, this, &LoanPayoutPage::slotCreateAssetAccount); 84 85 connect(d->ui->m_noPayoutTransaction, &QAbstractButton::toggled, this, &LoanPayoutPage::slotButtonsToggled); 86 connect(d->ui->m_refinanceLoan, &QAbstractButton::toggled, this, &LoanPayoutPage::slotButtonsToggled); 87 88 connect(MyMoneyFile::instance(), &MyMoneyFile::dataChanged, this, &LoanPayoutPage::slotLoadWidgets); 89 slotLoadWidgets(); 90 } 91 ~LoanPayoutPage()92 LoanPayoutPage::~LoanPayoutPage() 93 { 94 } 95 slotButtonsToggled()96 void LoanPayoutPage::slotButtonsToggled() 97 { 98 Q_D(LoanPayoutPage); 99 // we don't go directly, as the order of the emission of signals to slots is 100 // not defined. Using a single shot timer postpones the call of m_mandatoryGroup::changed() 101 // until the next round of the main loop so we can be sure to see all relevant changes 102 // that happened in the meantime (eg. widgets are enabled and disabled) 103 QTimer::singleShot(0, d->m_mandatoryGroup, SLOT(changed())); 104 } 105 slotCreateAssetAccount()106 void LoanPayoutPage::slotCreateAssetAccount() 107 { 108 Q_D(LoanPayoutPage); 109 MyMoneyAccount acc; 110 acc.setAccountType(Account::Type::Asset); 111 acc.setOpeningDate(d->m_wizard->d_func()->m_accountTypePage->d_func()->ui->m_openingDate->date()); 112 113 emit d->m_wizard->createAccount(acc); 114 115 if (!acc.id().isEmpty()) { 116 d->ui->m_assetAccount->setSelectedItem(acc.id()); 117 } 118 } 119 slotLoadWidgets()120 void LoanPayoutPage::slotLoadWidgets() 121 { 122 Q_D(LoanPayoutPage); 123 AccountSet set; 124 set.addAccountGroup(Account::Type::Asset); 125 set.load(d->ui->m_assetAccount->selector()); 126 127 set.clear(); 128 set.addAccountType(Account::Type::Loan); 129 set.load(d->ui->m_loanAccount->selector()); 130 } 131 enterPage()132 void LoanPayoutPage::enterPage() 133 { 134 Q_D(LoanPayoutPage); 135 // only allow to create new asset accounts for liability loans 136 d->ui->m_createAssetButton->setEnabled(d->m_wizard->moneyBorrowed()); 137 d->ui->m_refinanceLoan->setEnabled(d->m_wizard->moneyBorrowed()); 138 if (!d->m_wizard->moneyBorrowed()) { 139 d->ui->m_refinanceLoan->setChecked(false); 140 } 141 d->ui->m_payoutDetailFrame->setDisabled(d->ui->m_noPayoutTransaction->isChecked()); 142 } 143 nextPage() const144 KMyMoneyWizardPage* LoanPayoutPage::nextPage() const 145 { 146 Q_D(const LoanPayoutPage); 147 return d->m_wizard->d_func()->m_accountSummaryPage; 148 } 149 initialFocusWidget() const150 QWidget* LoanPayoutPage::initialFocusWidget() const 151 { 152 Q_D(const LoanPayoutPage); 153 return d->ui->m_noPayoutTransaction; 154 } 155 isComplete() const156 bool LoanPayoutPage::isComplete() const 157 { 158 Q_D(const LoanPayoutPage); 159 return KMyMoneyWizardPage::isComplete() | d->ui->m_noPayoutTransaction->isChecked(); 160 } 161 payoutAccountId() const162 QString LoanPayoutPage::payoutAccountId() const 163 { 164 Q_D(const LoanPayoutPage); 165 if (d->ui->m_refinanceLoan->isChecked()) { 166 return d->ui->m_loanAccount->selectedItem(); 167 } else { 168 return d->ui->m_assetAccount->selectedItem(); 169 } 170 } 171 172 } 173