diff --git a/kmymoney/views/kinvestmentview.cpp b/kmymoney/views/kinvestmentview.cpp --- a/kmymoney/views/kinvestmentview.cpp +++ b/kmymoney/views/kinvestmentview.cpp @@ -526,7 +526,10 @@ if (item) { MyMoneySecurity security = MyMoneyFile::instance()->security(item->text(eIdColumn).toLatin1()); m_editSecurityButton->setEnabled(item->text(eMarketColumn) != m_currencyMarket); - m_deleteSecurityButton->setEnabled(!MyMoneyFile::instance()->isReferenced(security)); + MyMoneyFileBitArray skip(IMyMoneyStorage::MaxRefCheckBits); + skip.fill(false); + skip.setBit(IMyMoneyStorage::RefCheckPrice); + m_deleteSecurityButton->setEnabled(!MyMoneyFile::instance()->isReferenced(security, skip)); } else { m_editSecurityButton->setEnabled(false); @@ -566,23 +569,50 @@ QTreeWidgetItem* item = m_securitiesList->currentItem(); if (item) { MyMoneySecurity security = MyMoneyFile::instance()->security(item->text(eIdColumn).toLatin1()); - QString msg; - QString dontAsk; + QString msg, msg2; + QString dontAsk, dontAsk2; if (security.isCurrency()) { msg = i18n("

Do you really want to remove the currency %1 from the file?

Note: adding currencies is not currently supported.

", security.name()); + msg2 = i18n("

All exchange rates for currency %1 will be lost.

Do you still want to continue?

", security.name()); dontAsk = "DeleteCurrency"; + dontAsk2 = "DeleteCurrencyRates"; } else { msg = i18n("

Do you really want to remove the %1 %2 from the file?

", KMyMoneyUtils::securityTypeToString(security.securityType()), security.name()); + msg2 = i18n("

All price quotes for %1 %2 will be lost.

Do you still want to continue?

", KMyMoneyUtils::securityTypeToString(security.securityType()), security.name()); dontAsk = "DeleteSecurity"; + dontAsk2 = "DeleteSecurityPrices"; } if (KMessageBox::questionYesNo(this, msg, i18n("Delete security"), KStandardGuiItem::yes(), KStandardGuiItem::no(), dontAsk) == KMessageBox::Yes) { MyMoneyFileTransaction ft; + MyMoneyFile* file = MyMoneyFile::instance(); + + MyMoneyFileBitArray skip(IMyMoneyStorage::MaxRefCheckBits); + skip.fill(true); + skip.clearBit(IMyMoneyStorage::RefCheckPrice); + if (file->isReferenced(security, skip)) { + if (KMessageBox::questionYesNo(this, msg2, i18n("Delete prices"), KStandardGuiItem::yes(), KStandardGuiItem::no(), dontAsk2) == KMessageBox::Yes) { + try { + QString secID = security.id(); + foreach (auto priceEntry, file->priceList()) { + const MyMoneyPrice& price = priceEntry.first(); + if (price.from() == secID || price.to() == secID) + file->removePrice(price); + } + ft.commit(); + } catch (const MyMoneyException &) { + qDebug("Cannot delete price"); + return; + } + } else + return; + } + MyMoneyFileTransaction ft2; try { if (security.isCurrency()) - MyMoneyFile::instance()->removeCurrency(security); + file->removeCurrency(security); else - MyMoneyFile::instance()->removeSecurity(security); - ft.commit(); + file->removeSecurity(security); + ft2.commit(); } catch (const MyMoneyException &) { } }