|
16 | 16 | FITNESS FOR A PARTICULAR PURPOSE. See the license for more details. |
17 | 17 | */ |
18 | 18 |
|
| 19 | +#include <ored/portfolio/structuredtradewarning.hpp> |
19 | 20 | #include <ored/portfolio/trade.hpp> |
20 | | -#include <ored/utilities/to_string.hpp> |
21 | 21 | #include <ored/utilities/indexnametranslator.hpp> |
| 22 | +#include <ored/utilities/to_string.hpp> |
22 | 23 |
|
23 | 24 | #include <qle/cashflows/equitycouponpricer.hpp> |
24 | 25 | #include <qle/cashflows/indexedcoupon.hpp> |
@@ -136,6 +137,7 @@ void Trade::reset() { |
136 | 137 | issuer_.clear(); |
137 | 138 | requiredFixings_.clear(); |
138 | 139 | sensitivityTemplate_.clear(); |
| 140 | + sensitivityTemplateSet_ = false; |
139 | 141 | } |
140 | 142 |
|
141 | 143 | const std::map<std::string, boost::any>& Trade::additionalData() const { return additionalData_; } |
@@ -280,6 +282,17 @@ void Trade::setLegBasedAdditionalData(const Size i, Size resultLegId) const { |
280 | 282 |
|
281 | 283 | void Trade::setSensitivityTemplate(const EngineBuilder& builder) { |
282 | 284 | sensitivityTemplate_ = builder.engineParameter("SensitivityTemplate", {}, false, std::string()); |
| 285 | + sensitivityTemplateSet_ = true; |
| 286 | +} |
| 287 | + |
| 288 | +const std::string& Trade::sensitivityTemplate() const { |
| 289 | + if (!sensitivityTemplateSet_) { |
| 290 | + StructuredTradeWarningMessage( |
| 291 | + id(), tradeType(), "No valid sensitivty template.", |
| 292 | + "Either build() was not called, or the trade builder did not set the sensitivity template.") |
| 293 | + .log(); |
| 294 | + } |
| 295 | + return sensitivityTemplate_; |
283 | 296 | } |
284 | 297 |
|
285 | 298 | } // namespace data |
|
0 commit comments