Skip to content

Commit e73c57e

Browse files
pcaspersjenkins
authored andcommitted
QPR-12275 fix envelope logic for recursive composite trades
1 parent 4ea5a52 commit e73c57e

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

OREData/ored/portfolio/compositetrade.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,17 @@ void CompositeTrade::fromXML(XMLNode* node) {
150150
try {
151151
trade = TradeFactory::instance().build(tradeType);
152152
trade->id() = id;
153-
trade->fromXML(nodes[i]);
154-
// the component trade's envelope is the main trade's envelope with possibly overwritten add fields
153+
Envelope componentEnvelope;
154+
if (XMLNode* envNode = XMLUtils::getChildNode(nodes[i], "Envelope")) {
155+
componentEnvelope.fromXML(envNode);
156+
}
155157
Envelope env = this->envelope();
156-
for (auto const& [k, v] : trade->envelope().fullAdditionalFields())
158+
// the component trade's envelope is the main trade's envelope with possibly overwritten add fields
159+
for (auto const& [k, v] : componentEnvelope.fullAdditionalFields())
157160
env.setAdditionalField(k,v);
158161
trade->setEnvelope(env);
162+
trade->fromXML(nodes[i]);
159163
trades_.push_back(trade);
160-
auto tmpenv = trade->envelope();
161164
DLOG("Added Trade " << id << " (" << trade->id() << ")"
162165
<< " type:" << tradeType << " to composite trade " << this->id() << ".");
163166
} catch (const std::exception& e) {

0 commit comments

Comments
 (0)