bool Ratings::downloadRatings(const QBbgLib::QBbgSecurity& sec) { bool oneRatingFound = false; #ifndef NO_BLOOMBERG if (!sec.isValid()) return false; Ratings bachupRating(*this); reset(); using namespace QBbgLib; QBbgRequestGroup allRq; QBbgReferenceDataRequest singleRq; singleRq.setSecurity(sec); for (int i = 0; i < CountRatingAcencies; ++i) { singleRq.setField(RatingsPrivate::m_ratingFields[i]); singleRq.setID(i + 100); allRq.addRequest(singleRq); } QBbgManager manager; const auto& allres= manager.processRequest(allRq); for (int i = 0; i < CountRatingAcencies; ++i) { Q_ASSERT(allres.contains(i + 100)); if (!allres.value(i + 100)->hasErrors()) { if (setRating(dynamic_cast<const QBbgReferenceDataResponse*>(allres.value(i + 100))->value().toString(), static_cast<RatingAgency>(1 << i))) oneRatingFound = true; } } if (!oneRatingFound) operator=(bachupRating); #endif // !NO_BLOOMBERG return oneRatingFound; }
bool AddFirstSettlement::execute() { using namespace QBbgLib; enum : qint64 { SettleShift = 158 }; QList<QString> isinList; { //Download Missing Bonds lockDB; QSqlDatabase db = QSqlDatabase::database("TwentyFourDB", false); if (!openDatabase(db)) { addError("Database connection failed"); return false; } QSqlQuery nullDatesQuery(db); nullDatesQuery.setForwardOnly(true); nullDatesQuery.prepare("select at.ISIN from AllTranches as at, Deals as dl where dl.DealName=at.DealName and dl.DealName in ( select DealName from deals where FirstSettleDate is null)"); if (nullDatesQuery.exec()) { while (nullDatesQuery.next()) { isinList.append(nullDatesQuery.record().value(0).toString()); } } } bool OneFixed = isinList.isEmpty(); if (!OneFixed) { QBbgReferenceDataRequest settleRq; QBbgRequestGroup allRq; settleRq.setField("FIRST_SETTLE_DT"); for (qint64 i = 0; i < isinList.size(); ++i) { settleRq.setSecurity(QBbgSecurity(isinList.at(i), QBbgSecurity::isin)); settleRq.setID(SettleShift + i); allRq.addRequest(settleRq); } if (allRq.size() == 0) { addError("No portfolios selected"); return false; } QBbgManager manager; auto const & settleRes = manager.processRequest(allRq); allRq.clear(); lockDB; QSqlDatabase db = QSqlDatabase::database("TwentyFourDB", false); if (!openDatabase(db)) { addError("Database connection failed"); return false; } for (qint64 i = 0; i < isinList.size(); ++i) { const auto currResp = dynamic_cast<const QBbgReferenceDataResponse*>(settleRes.value(SettleShift + i)); Q_ASSERT(currResp); if (currResp->hasErrors()) { addWarning(QStringLiteral("Unable to retrieve first settlement date for %1").arg(isinList.at(i))); continue; } QSqlQuery insertSettleDateQuery(db); insertSettleDateQuery.setForwardOnly(true); insertSettleDateQuery.prepare( "UPDATE Deals SET FirstSettleDate = :firstSettle " "WHERE DealName in (select DealName from AllTranches where ISIN = :isin) " ); insertSettleDateQuery.bindValue(":isin", isinList.at(i)); insertSettleDateQuery.bindValue(":firstSettle", currResp->value().toDate().toString(Qt::ISODate)); if (!insertSettleDateQuery.exec()) { addWarning( QStringLiteral("Unable to save first settlement date for %1 to database - %2") .arg(isinList.at(i)) .arg(insertSettleDateQuery.lastError().text()) ); continue; } OneFixed = true; } } if (OneFixed) writeLastRun(); return OneFixed; }