StdAir Logo  0.45.1
C++ Standard Airline IT Object Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CmdBomManager.cpp
Go to the documentation of this file.
1 
5 // //////////////////////////////////////////////////////////////////////
6 // Import section
7 // //////////////////////////////////////////////////////////////////////
8 // STL
9 #include <cassert>
10 #include <sstream>
11 // StdAir
17 #include <stdair/bom/BomRoot.hpp>
18 #include <stdair/bom/Inventory.hpp>
20 #include <stdair/bom/LegDate.hpp>
21 #include <stdair/bom/LegCabin.hpp>
40 #include <stdair/bom/OnDDate.hpp>
43 
44 namespace stdair {
45 
46  // //////////////////////////////////////////////////////////////////////
47  void CmdBomManager::buildSampleBom (BomRoot& ioBomRoot) {
48 
49  // DEBUG
50  STDAIR_LOG_DEBUG ("StdAir is building the BOM tree from built-in "
51  << "specifications.");
52 
53  // ////// Basic Bom Tree ///////
54  // Build the inventory (flight-dates) and the schedule (flight period) parts.
55  buildSampleInventorySchedule (ioBomRoot);
56 
57  // Build the pricing (fare rules) and revenue accounting (yields) parts.
58  buildSamplePricing (ioBomRoot);
59 
60  // ////// Partnership Bom Tree ///////
61  // Build the inventory (flight-dates) and the schedule (flight period) parts.
62  buildPartnershipsSampleInventoryAndRM (ioBomRoot);
63 
64  // Build the pricing (fare rules) and revenue accounting (yields) parts.
65  buildPartnershipsSamplePricing (ioBomRoot);
66 
67  // Build a dummy inventory, needed by RMOL.
68  buildCompleteDummyInventory (ioBomRoot);
69  }
70 
71  // //////////////////////////////////////////////////////////////////////
72  void CmdBomManager::buildSampleInventorySchedule (BomRoot& ioBomRoot) {
73 
74  // Inventory
75  // Step 0.1: Inventory level
76  // Create an Inventory for BA
77  const InventoryKey lBAKey ("BA");
78  Inventory& lBAInv = FacBom<Inventory>::instance().create (lBAKey);
79  FacBomManager::addToListAndMap (ioBomRoot, lBAInv);
80  FacBomManager::linkWithParent (ioBomRoot, lBAInv);
81 
82  // Create an Inventory for AF
83  const InventoryKey lAFKey ("AF");
84  Inventory& lAFInv = FacBom<Inventory>::instance().create (lAFKey);
85  FacBomManager::addToListAndMap (ioBomRoot, lAFInv);
86  FacBomManager::linkWithParent (ioBomRoot, lAFInv);
87 
88  // BA
89  // Step 0.2: Flight-date level
90  // Create a FlightDate (BA9/10-JUN-2011) for BA's Inventory
91  FlightNumber_T lFlightNumber = 9;
92  Date_T lDate (2011, 6, 10);
93  FlightDateKey lFlightDateKey (lFlightNumber, lDate);
94 
95  FlightDate& lBA9_20110610_FD =
96  FacBom<FlightDate>::instance().create (lFlightDateKey);
97  FacBomManager::addToListAndMap (lBAInv, lBA9_20110610_FD);
98  FacBomManager::linkWithParent (lBAInv, lBA9_20110610_FD);
99 
100  // Display the flight-date
101  // STDAIR_LOG_DEBUG ("FlightDate: " << lBA9_20110610_FD.toString());
102 
103  // Step 0.3: Segment-date level
104  // Create a first SegmentDate (LHR-SYD) for BA's Inventory
105  // See http://www.britishairways.com/travel/flightinformation/public/fr_fr?&Carrier=BA&FlightNumber=0009&from=LHR&to=SYD&depDate=100611&SellingClass=O
106  const AirportCode_T lLHR ("LHR");
107  const AirportCode_T lSYD ("SYD");
108  const DateOffset_T l1Day (1);
109  const DateOffset_T l2Days (2);
110  const Duration_T l2135 (21, 45, 0);
111  const Duration_T l0610 (6, 10, 0);
112  const Duration_T l2205 (22, 05, 0);
113  SegmentDateKey lSegmentDateKey (lLHR, lSYD);
114 
115  SegmentDate& lLHRSYDSegment =
116  FacBom<SegmentDate>::instance().create (lSegmentDateKey);
117  FacBomManager::addToListAndMap (lBA9_20110610_FD, lLHRSYDSegment);
118  FacBomManager::linkWithParent (lBA9_20110610_FD, lLHRSYDSegment);
119 
120  // Fill the SegmentDate content
121  lLHRSYDSegment.setBoardingDate (lDate);
122  lLHRSYDSegment.setOffDate (lDate + l2Days);
123  lLHRSYDSegment.setBoardingTime (l2135);
124  lLHRSYDSegment.setOffTime (l0610);
125  lLHRSYDSegment.setElapsedTime (l2135);
126 
127  // Display the segment-date
128  // STDAIR_LOG_DEBUG ("SegmentDate: " << lLHRSYDSegment);
129 
130  // Create a second SegmentDate (LHR-BKK) for BA's Inventory
131  // See http://www.britishairways.com/travel/flightinformation/public/fr_fr?&Carrier=BA&FlightNumber=0009&from=LHR&to=BKK&depDate=100611&SellingClass=O
132  const AirportCode_T lBKK ("BKK");
133  const Duration_T l1540 (15, 40, 0);
134  const Duration_T l1105 (11, 5, 0);
135  lSegmentDateKey = SegmentDateKey (lLHR, lBKK);
136 
137  SegmentDate& lLHRBKKSegment =
138  FacBom<SegmentDate>::instance().create (lSegmentDateKey);
139  FacBomManager::addToListAndMap (lBA9_20110610_FD, lLHRBKKSegment);
140  FacBomManager::linkWithParent (lBA9_20110610_FD, lLHRBKKSegment);
141 
142  // Fill the SegmentDate content
143  lLHRBKKSegment.setBoardingDate (lDate);
144  lLHRBKKSegment.setOffDate (lDate + l1Day);
145  lLHRBKKSegment.setBoardingTime (l2135);
146  lLHRBKKSegment.setOffTime (l1540);
147  lLHRBKKSegment.setElapsedTime (l1105);
148 
149  // Display the segment-date
150  // STDAIR_LOG_DEBUG ("SegmentDate: " << lLHRBKKSegment);
151 
152  // Create a third SegmentDate (BKK-SYD) for BA's Inventory
153  // See http://www.britishairways.com/travel/flightinformation/public/fr_fr?&Carrier=BA&FlightNumber=0009&from=BKK&to=SYD&depDate=110611&SellingClass=O
154  const Duration_T l1705 (17, 5, 0);
155  const Duration_T l0905 (9, 5, 0);
156  lSegmentDateKey = SegmentDateKey (lBKK, lSYD);
157 
158  SegmentDate& lBKKSYDSegment =
159  FacBom<SegmentDate>::instance().create (lSegmentDateKey);
160  FacBomManager::addToListAndMap (lBA9_20110610_FD, lBKKSYDSegment);
161  FacBomManager::linkWithParent (lBA9_20110610_FD, lBKKSYDSegment);
162 
163  // Fill the SegmentDate content
164  lBKKSYDSegment.setBoardingDate (lDate + l1Day);
165  lBKKSYDSegment.setOffDate (lDate + l2Days);
166  lBKKSYDSegment.setBoardingTime (l1705);
167  lBKKSYDSegment.setOffTime (l1540);
168  lBKKSYDSegment.setElapsedTime (l0905);
169 
170  // Display the segment-date
171  // STDAIR_LOG_DEBUG ("SegmentDate: " << lBKKSYDSegment);
172 
173  // Step 0.4: Leg-date level
174  // Create a first LegDate (LHR) for BA's Inventory
175  LegDateKey lLegDateKey (lLHR);
176 
177  LegDate& lLHRLeg = FacBom<LegDate>::instance().create (lLegDateKey);
178  FacBomManager::addToListAndMap (lBA9_20110610_FD, lLHRLeg);
179  FacBomManager::linkWithParent (lBA9_20110610_FD, lLHRLeg);
180 
181  // Fill the LegDate content
182  lLHRLeg.setOffPoint (lBKK);
183  lLHRLeg.setBoardingDate (lDate);
184  lLHRLeg.setOffDate (lDate + l1Day);
185  lLHRLeg.setBoardingTime (l2135);
186  lLHRLeg.setOffTime (l1540);
187  lLHRLeg.setElapsedTime (l1105);
188 
189  // Display the leg-date
190  // STDAIR_LOG_DEBUG ("LegDate: " << lLHRLeg.toString());
191 
192  // Create a second LegDate (BKK)
193  lLegDateKey = LegDateKey (lBKK);
194 
195  LegDate& lBKKLeg = FacBom<LegDate>::instance().create (lLegDateKey);
196  FacBomManager::addToListAndMap (lBA9_20110610_FD, lBKKLeg);
197  FacBomManager::linkWithParent (lBA9_20110610_FD, lBKKLeg);
198 
199  // Display the leg-date
200  // STDAIR_LOG_DEBUG ("LegDate: " << lBKKLeg.toString());
201 
202  // Fill the LegDate content
203  lBKKLeg.setOffPoint (lSYD);
204  lBKKLeg.setBoardingDate (lDate + l1Day);
205  lBKKLeg.setOffDate (lDate + l2Days);
206  lBKKLeg.setBoardingTime (l1705);
207  lBKKLeg.setOffTime (l1540);
208  lBKKLeg.setElapsedTime (l0905);
209 
210  // Link the segment-dates with the leg-dates
211  FacBomManager::addToListAndMap (lLHRLeg, lLHRSYDSegment);
212  FacBomManager::addToListAndMap (lLHRLeg, lLHRBKKSegment);
213  FacBomManager::addToListAndMap (lBKKLeg, lLHRSYDSegment);
214  FacBomManager::addToListAndMap (lBKKLeg, lBKKSYDSegment);
215  FacBomManager::addToListAndMap (lLHRSYDSegment, lLHRLeg);
216  FacBomManager::addToListAndMap (lLHRBKKSegment, lLHRLeg);
217  FacBomManager::addToListAndMap (lLHRSYDSegment, lBKKLeg);
218  FacBomManager::addToListAndMap (lBKKSYDSegment, lBKKLeg);
219 
220 
221  // Step 0.5: segment-cabin level
222  // Create a SegmentCabin (Y) for the Segment LHR-BKK of BA's Inventory
223  const CabinCode_T lY ("Y");
224  SegmentCabinKey lYSegmentCabinKey (lY);
225 
226  SegmentCabin& lLHRBKKSegmentYCabin =
227  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
228  FacBomManager::addToListAndMap (lLHRBKKSegment, lLHRBKKSegmentYCabin);
229  FacBomManager::linkWithParent (lLHRBKKSegment, lLHRBKKSegmentYCabin);
230 
231  // Display the segment-cabin
232  // STDAIR_LOG_DEBUG ("SegmentCabin: " << lLHRBKKSegmentYCabin.toString());
233 
234  // Create a SegmentCabin (Y) of the Segment BKK-SYD;
235  SegmentCabin& lBKKSYDSegmentYCabin =
236  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
237  FacBomManager::addToListAndMap (lBKKSYDSegment, lBKKSYDSegmentYCabin);
238  FacBomManager::linkWithParent (lBKKSYDSegment, lBKKSYDSegmentYCabin);
239 
240 
241  // Display the segment-cabin
242  // STDAIR_LOG_DEBUG ("SegmentCabin: " << lBKKSYDSegmentYCabin.toString());
243 
244  // Create a SegmentCabin (Y) of the Segment LHR-SYD;
245  SegmentCabin& lLHRSYDSegmentYCabin =
246  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
247  FacBomManager::addToListAndMap (lLHRSYDSegment, lLHRSYDSegmentYCabin);
248  FacBomManager::linkWithParent (lLHRSYDSegment, lLHRSYDSegmentYCabin);
249 
250  // Display the segment-cabin
251  // STDAIR_LOG_DEBUG ("SegmentCabin: " << lLHRSYDSegmentYCabin.toString());
252 
253  // Step 0.6: leg-cabin level
254  // Create a LegCabin (Y) for the Leg LHR-BKK on BA's Inventory
255  LegCabinKey lYLegCabinKey (lY);
256 
257  LegCabin& lLHRLegYCabin =
258  FacBom<LegCabin>::instance().create (lYLegCabinKey);
259  FacBomManager::addToListAndMap (lLHRLeg, lLHRLegYCabin);
260  FacBomManager::linkWithParent (lLHRLeg, lLHRLegYCabin);
261 
262  // Display the leg-cabin
263  // STDAIR_LOG_DEBUG ("LegCabin: " << lLHRLegYCabin.toString());
264 
265  // Create a LegCabin (Y) for the Leg BKK-SYD
266  LegCabin& lBKKLegYCabin =
267  FacBom<LegCabin>::instance().create (lYLegCabinKey);
268  FacBomManager::addToListAndMap (lBKKLeg, lBKKLegYCabin);
269  FacBomManager::linkWithParent (lBKKLeg, lBKKLegYCabin);
270  // Display the leg-cabin
271  // STDAIR_LOG_DEBUG ("LegCabin: " << lBKKLegYCabin.toString());
272 
283  FacBomManager::addToListAndMap (lLHRLegYCabin, lLHRSYDSegmentYCabin,
284  lLHRSYDSegmentYCabin.getFullerKey());
285  FacBomManager::addToListAndMap (lLHRLegYCabin, lLHRBKKSegmentYCabin,
286  lLHRBKKSegmentYCabin.getFullerKey());
287  FacBomManager::addToListAndMap (lBKKLegYCabin, lLHRSYDSegmentYCabin,
288  lLHRSYDSegmentYCabin.getFullerKey());
289  FacBomManager::addToListAndMap (lBKKLegYCabin, lBKKSYDSegmentYCabin,
290  lBKKSYDSegmentYCabin.getFullerKey());
291 
302  FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin, lLHRLegYCabin,
303  lLHRLegYCabin.getFullerKey());
304  FacBomManager::addToListAndMap (lLHRBKKSegmentYCabin, lLHRLegYCabin,
305  lLHRLegYCabin.getFullerKey());
306  FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin, lBKKLegYCabin,
307  lBKKLegYCabin.getFullerKey());
308  FacBomManager::addToListAndMap (lBKKSYDSegmentYCabin, lBKKLegYCabin,
309  lBKKLegYCabin.getFullerKey());
310 
311 
312  // Step 0.7: fare family level
313  // Create a FareFamily (1) for the Segment LHR-BKK, cabin Y on BA's Inv
314  const FamilyCode_T l1 ("EcoSaver");
315  FareFamilyKey l1FareFamilyKey (l1);
316 
317  FareFamily& lLHRBKKSegmentYCabin1Family =
318  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
319  FacBomManager::addToListAndMap (lLHRBKKSegmentYCabin,
320  lLHRBKKSegmentYCabin1Family);
321  FacBomManager::linkWithParent (lLHRBKKSegmentYCabin,
322  lLHRBKKSegmentYCabin1Family);
323 
324  // Display the booking class
325  // STDAIR_LOG_DEBUG ("FareFamily: "
326  // << lLHRBKKSegmentYCabin1Family.toString());
327 
328  // Create a FareFamily (1) for the Segment BKK-SYD, cabin Y on BA's Inv
329  FareFamily& lBKKSYDSegmentYCabin1Family =
330  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
331  FacBomManager::addToListAndMap (lBKKSYDSegmentYCabin,
332  lBKKSYDSegmentYCabin1Family);
333  FacBomManager::linkWithParent (lBKKSYDSegmentYCabin,
334  lBKKSYDSegmentYCabin1Family);
335 
336  // Display the booking class
337  // STDAIR_LOG_DEBUG ("FareFamily: "
338  // << lLHRBKKSegmentYCabin1Family.toString());
339 
340  // Create a FareFamily (1) for the Segment LHR-SYD, cabin Y on BA's Inv
341  FareFamily& lLHRSYDSegmentYCabin1Family =
342  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
343  FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin,
344  lLHRSYDSegmentYCabin1Family);
345  FacBomManager::linkWithParent (lLHRSYDSegmentYCabin,
346  lLHRSYDSegmentYCabin1Family);
347 
348  // Display the booking class
349  // STDAIR_LOG_DEBUG ("FareFamily: "
350  // << lLHRBKKSegmentYCabin1Family.toString());
351 
352 
353  // Step 0.8: booking class level
354  // Create a BookingClass (Q) for the Segment LHR-BKK, cabin Y,
355  // fare family 1 on BA's Inv
356  const ClassCode_T lQ ("Q");
357  BookingClassKey lQBookingClassKey (lQ);
358 
359  BookingClass& lLHRBKKSegmentYCabin1FamilyQClass =
360  FacBom<BookingClass>::instance().create (lQBookingClassKey);
361  FacBomManager::addToListAndMap (lLHRBKKSegmentYCabin1Family,
362  lLHRBKKSegmentYCabin1FamilyQClass);
363  FacBomManager::linkWithParent (lLHRBKKSegmentYCabin1Family,
364  lLHRBKKSegmentYCabin1FamilyQClass);
365 
366  FacBomManager::addToListAndMap (lLHRBKKSegmentYCabin,
367  lLHRBKKSegmentYCabin1FamilyQClass);
368  FacBomManager::addToListAndMap (lLHRBKKSegment,
369  lLHRBKKSegmentYCabin1FamilyQClass);
370 
371  // Display the booking class
372  // STDAIR_LOG_DEBUG ("BookingClass: "
373  // << lLHRBKKSegmentYCabin1FamilyQClass.toString());
374 
375  // Create a BookingClass (Q) for the Segment BKK-SYD, cabin Y,
376  // fare family 1 on BA's Inv
377  BookingClass& lBKKSYDSegmentYCabin1FamilyQClass =
378  FacBom<BookingClass>::instance().create (lQBookingClassKey);
379  FacBomManager::addToListAndMap (lBKKSYDSegmentYCabin1Family,
380  lBKKSYDSegmentYCabin1FamilyQClass);
381  FacBomManager::linkWithParent (lBKKSYDSegmentYCabin1Family,
382  lBKKSYDSegmentYCabin1FamilyQClass);
383 
384  FacBomManager::addToListAndMap (lBKKSYDSegmentYCabin,
385  lBKKSYDSegmentYCabin1FamilyQClass);
386  FacBomManager::addToListAndMap (lBKKSYDSegment,
387  lBKKSYDSegmentYCabin1FamilyQClass);
388 
389  // Display the booking class
390  // STDAIR_LOG_DEBUG ("BookingClass: "
391  // << lLHRBKKSegmentYCabin1FamilyQClass.toString());
392 
393  // Create a BookingClass (Q) for the Segment LHR-SYD, cabin Y,
394  // fare family 1 on BA's Inv
395  BookingClass& lLHRSYDSegmentYCabin1FamilyQClass =
396  FacBom<BookingClass>::instance().create (lQBookingClassKey);
397  FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin1Family,
398  lLHRSYDSegmentYCabin1FamilyQClass);
399  FacBomManager::linkWithParent (lLHRSYDSegmentYCabin1Family,
400  lLHRSYDSegmentYCabin1FamilyQClass);
401 
402  FacBomManager::addToListAndMap (lLHRSYDSegmentYCabin,
403  lLHRSYDSegmentYCabin1FamilyQClass);
404  FacBomManager::addToListAndMap (lLHRSYDSegment,
405  lLHRSYDSegmentYCabin1FamilyQClass);
406 
407  // Display the booking class
408  // STDAIR_LOG_DEBUG ("BookingClass: "
409  // << lLHRBKKSegmentYCabin1FamilyQClass.toString());
410 
411 
412  // ////// AF ///////
413  // Step 0.2: Flight-date level
414  // Create a FlightDate (AF084/20-MAR-2011) for AF's Inventory
415  lFlightNumber = 84;
416  lDate = Date_T (2011, 3, 20);
417  lFlightDateKey = FlightDateKey (lFlightNumber, lDate);
418 
419  FlightDate& lAF084_20110320_FD =
420  FacBom<FlightDate>::instance().create (lFlightDateKey);
421  FacBomManager::addToListAndMap (lAFInv, lAF084_20110320_FD);
422  FacBomManager::linkWithParent (lAFInv, lAF084_20110320_FD);
423 
424  // Display the flight-date
425  // STDAIR_LOG_DEBUG ("FlightDate: " << lAF084_20110320_FD.toString());
426 
427  // Step 0.3: Segment-date level
428  // Create a SegmentDate (CDG-SFO) for AF's Inventory
429  const AirportCode_T lCDG ("CDG");
430  const AirportCode_T lSFO ("SFO");
431  const Duration_T l1040 (10, 40, 0);
432  const Duration_T l1250 (12, 50, 0);
433  const Duration_T l1110 (11, 10, 0);
434  lSegmentDateKey = SegmentDateKey (lCDG, lSFO);
435 
436  SegmentDate& lCDGSFOSegment =
437  FacBom<SegmentDate>::instance().create (lSegmentDateKey);
438  FacBomManager::addToListAndMap (lAF084_20110320_FD, lCDGSFOSegment);
439  FacBomManager::linkWithParent (lAF084_20110320_FD, lCDGSFOSegment);
440 
441  // Display the segment-date
442  // STDAIR_LOG_DEBUG ("SegmentDate: " << lCDGSFOSegment.toString());
443 
444  // Fill the SegmentDate content
445  lCDGSFOSegment.setBoardingDate (lDate);
446  lCDGSFOSegment.setOffDate (lDate);
447  lCDGSFOSegment.setBoardingTime (l1040);
448  lCDGSFOSegment.setOffTime (l1250);
449  lCDGSFOSegment.setElapsedTime (l1110);
450 
451  // Step 0.4: Leg-date level
452  // Create a LegDate (CDG) for AF's Inventory
453  lLegDateKey = LegDateKey (lCDG);
454 
455  LegDate& lCDGLeg = FacBom<LegDate>::instance().create (lLegDateKey);
456  FacBomManager::addToListAndMap (lAF084_20110320_FD, lCDGLeg);
457  FacBomManager::linkWithParent (lAF084_20110320_FD, lCDGLeg);
458 
459  // Fill the LegDate content
460  lCDGLeg.setOffPoint (lSFO);
461  lCDGLeg.setBoardingDate (lDate);
462  lCDGLeg.setOffDate (lDate);
463  lCDGLeg.setBoardingTime (l1040);
464  lCDGLeg.setOffTime (l1250);
465  lCDGLeg.setElapsedTime (l1110);
466 
467  // Display the leg-date
468  // STDAIR_LOG_DEBUG ("LegDate: " << lCDGLeg.toString());
469 
470  // Link the segment-dates with the leg-dates
471  FacBomManager::addToListAndMap (lCDGLeg, lCDGSFOSegment);
472  FacBomManager::addToListAndMap (lCDGSFOSegment, lCDGLeg);
473 
474 
475  // Step 0.5: segment-cabin level
476  // Create a SegmentCabin (Y) for the Segment CDG-SFO of AF's Inventory
477  SegmentCabin& lCDGSFOSegmentYCabin =
478  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
479  FacBomManager::addToListAndMap (lCDGSFOSegment, lCDGSFOSegmentYCabin);
480  FacBomManager::linkWithParent (lCDGSFOSegment, lCDGSFOSegmentYCabin);
481 
482  // Display the segment-cabin
483  // STDAIR_LOG_DEBUG ("SegmentCabin: " << lCDGSFOSegmentYCabin.toString());
484 
485  // Step 0.6: leg-cabin level
486  // Create a LegCabin (Y) for the Leg CDG-SFO on AF's Inventory
487  LegCabin& lCDGLegYCabin =
488  FacBom<LegCabin>::instance().create (lYLegCabinKey);
489  FacBomManager::addToListAndMap (lCDGLeg, lCDGLegYCabin);
490  FacBomManager::linkWithParent (lCDGLeg, lCDGLegYCabin);
491 
492  // Display the leg-cabin
493  // STDAIR_LOG_DEBUG ("LegCabin: " << lLHRLegYCabin.toString());
494 
495  // Link the segment-dates with the leg-dates
496  FacBomManager::addToListAndMap (lCDGLegYCabin, lCDGSFOSegmentYCabin,
497  lCDGSFOSegmentYCabin.getFullerKey());
498  FacBomManager::addToListAndMap (lCDGSFOSegmentYCabin, lCDGLegYCabin,
499  lCDGLegYCabin.getFullerKey());
500 
501 
502  // Step 0.7: fare family level
503  // Create a fareFamily (1) for the Segment CDG-SFO, cabin Y on AF's Inv
504  FareFamily& lCDGSFOSegmentYCabin1Family =
505  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
506  FacBomManager::addToListAndMap (lCDGSFOSegmentYCabin,
507  lCDGSFOSegmentYCabin1Family);
508  FacBomManager::linkWithParent (lCDGSFOSegmentYCabin,
509  lCDGSFOSegmentYCabin1Family);
510 
511  // Display the fare family
512  // STDAIR_LOG_DEBUG ("fareFamily: "
513  //
514  // << lCDGSFOSegmentYCabin1Family.toString());
515 
516  // Step 0.8: booking class level Create a BookingClass (Q) for the
517  // Segment CDG-SFO, cabin Y, fare family 1 on AF's Inv
518  BookingClass& lCDGSFOSegmentYCabin1FamilyQClass =
519  FacBom<BookingClass>::instance().create (lQBookingClassKey);
520  FacBomManager::addToListAndMap (lCDGSFOSegmentYCabin1Family,
521  lCDGSFOSegmentYCabin1FamilyQClass);
522  FacBomManager::linkWithParent (lCDGSFOSegmentYCabin1Family,
523  lCDGSFOSegmentYCabin1FamilyQClass);
524 
525  FacBomManager::addToListAndMap (lCDGSFOSegmentYCabin,
526  lCDGSFOSegmentYCabin1FamilyQClass);
527  FacBomManager::addToListAndMap (lCDGSFOSegment,
528  lCDGSFOSegmentYCabin1FamilyQClass);
529 
530  // Display the booking class
531  // STDAIR_LOG_DEBUG ("BookingClass: "
532  // << lCDGSFOSegmentYCabin1FamilyQClass.toString());
533 
534  /*================================================================================
535  ================================================================================
536  ================================================================================*/
537  // Schedule:
538  // BA:
539  // Step 1: flight period level
540  // Create a flight period for BA9:
541  const DoWStruct lDoWSrtuct ("1111111");
542  const Date_T lBA9DateRangeStart (2010, boost::gregorian::Jun, 6);
543  const Date_T lBA9DateRangeEnd (2010, boost::gregorian::Jun, 7);
544  const DatePeriod_T lBA9DatePeriod (lBA9DateRangeStart, lBA9DateRangeEnd);
545  const PeriodStruct lBA9PeriodStruct (lBA9DatePeriod, lDoWSrtuct);
546 
547  lFlightNumber = FlightNumber_T (9);
548 
549  FlightPeriodKey lBA9FlightPeriodKey (lFlightNumber, lBA9PeriodStruct);
550 
551  FlightPeriod& lBA9FlightPeriod =
552  FacBom<FlightPeriod>::instance().create (lBA9FlightPeriodKey);
553  FacBomManager::addToListAndMap (lBAInv, lBA9FlightPeriod);
554  FacBomManager::linkWithParent (lBAInv, lBA9FlightPeriod);
555 
556  // Step 2: segment period level
557  // Create a segment period for SIN-BKK:
558 
559  SegmentPeriodKey lLHRSYDSegmentPeriodKey (lLHR, lSYD);
560 
561  SegmentPeriod& lLHRSYDSegmentPeriod =
562  FacBom<SegmentPeriod>::instance().create (lLHRSYDSegmentPeriodKey);
563  FacBomManager::addToListAndMap (lBA9FlightPeriod, lLHRSYDSegmentPeriod);
564  FacBomManager::linkWithParent (lBA9FlightPeriod, lLHRSYDSegmentPeriod);
565 
566  lLHRSYDSegmentPeriod.setBoardingTime (l2135);
567  lLHRSYDSegmentPeriod.setOffTime (l1540);
568  lLHRSYDSegmentPeriod.setElapsedTime (l1105);
569  ClassList_String_T lYM ("YM");
570  lLHRSYDSegmentPeriod.addCabinBookingClassList (lY,lYM);
571 
572  // AF:
573  // Step 1: flight period level
574  // Create a flight period for AF84:
575  const Date_T lAF84DateRangeStart (2011, boost::gregorian::Mar, 20);
576  const Date_T lAF84DateRangeEnd (2011, boost::gregorian::Mar, 21);
577  const DatePeriod_T lAF84DatePeriod (lAF84DateRangeStart, lAF84DateRangeEnd);
578  const PeriodStruct lAF84PeriodStruct (lAF84DatePeriod, lDoWSrtuct);
579 
580  lFlightNumber = FlightNumber_T (84);
581 
582  FlightPeriodKey lAF84FlightPeriodKey (lFlightNumber, lAF84PeriodStruct);
583 
584  FlightPeriod& lAF84FlightPeriod =
585  FacBom<FlightPeriod>::instance().create (lAF84FlightPeriodKey);
586  FacBomManager::addToListAndMap (lAFInv, lAF84FlightPeriod);
587  FacBomManager::linkWithParent (lAFInv, lAF84FlightPeriod);
588 
589  // Step 2: segment period level
590  // Create a segment period for SIN-BKK:
591 
592  SegmentPeriodKey lCDGSFOSegmentPeriodKey (lCDG, lSFO);
593 
594  SegmentPeriod& lCDGSFOSegmentPeriod =
595  FacBom<SegmentPeriod>::instance().create (lCDGSFOSegmentPeriodKey);
596  FacBomManager::addToListAndMap (lAF84FlightPeriod, lCDGSFOSegmentPeriod);
597  FacBomManager::linkWithParent (lAF84FlightPeriod, lCDGSFOSegmentPeriod);
598 
599  lCDGSFOSegmentPeriod.setBoardingTime (l1040);
600  lCDGSFOSegmentPeriod.setOffTime (l1250);
601  lCDGSFOSegmentPeriod.setElapsedTime (l1110);
602  lCDGSFOSegmentPeriod.addCabinBookingClassList (lY,lYM);
603 
604  /*================================================================================
605  ================================================================================
606  ================================================================================*/
607  // O&D
608  // Create an O&D Date (BA;9,2010-Jun-06;LHR,SYD) for BA's Inventory
609  OnDString_T lBALHRSYDOnDStr = "BA;9,2010-Jun-06;LHR,SYD";
610  OnDStringList_T lBAOnDStrList;
611  lBAOnDStrList.push_back (lBALHRSYDOnDStr);
612 
613  OnDDateKey lBAOnDDateKey (lBAOnDStrList);
614  OnDDate& lBA_LHRSYD_OnDDate =
615  FacBom<OnDDate>::instance().create (lBAOnDDateKey);
616  // Link to the inventory
617  FacBomManager::addToListAndMap (lBAInv, lBA_LHRSYD_OnDDate);
618  FacBomManager::linkWithParent (lBAInv, lBA_LHRSYD_OnDDate);
619 
620  // Add the segment
621  FacBomManager::addToListAndMap (lBA_LHRSYD_OnDDate, lLHRSYDSegment);
622 
623  // Add total forecast info for cabin Y.
624  const MeanStdDevPair_T lMean60StdDev6 (60.0, 6.0);
625  const WTP_T lWTP750 = 750.0;
626  const WTPDemandPair_T lWTP750Mean60StdDev6 (lWTP750, lMean60StdDev6);
627  lBA_LHRSYD_OnDDate.setTotalForecast (lY, lWTP750Mean60StdDev6);
628 
629  // Create an O&D Date (AF;84,2011-Mar-21;CDG,SFO) for AF's Inventory
630  OnDString_T lAFLHRSYDOnDStr = "AF;9,2011-Mar-20;CDG,SFO";
631  OnDStringList_T lAFOnDStrList;
632  lAFOnDStrList.push_back (lAFLHRSYDOnDStr);
633 
634  OnDDateKey lAFOnDDateKey (lAFOnDStrList);
635  OnDDate& lAF_LHRSYD_OnDDate =
636  FacBom<OnDDate>::instance().create (lAFOnDDateKey);
637  // Link to the inventory
638  FacBomManager::addToListAndMap (lAFInv, lAF_LHRSYD_OnDDate);
639  FacBomManager::linkWithParent (lAFInv, lAF_LHRSYD_OnDDate);
640 
641  // Add the segment
642  FacBomManager::addToListAndMap (lAF_LHRSYD_OnDDate, lLHRSYDSegment);
643 
644  // Add total forecast info for cabin Y.
645  lAF_LHRSYD_OnDDate.setTotalForecast (lY, lWTP750Mean60StdDev6);
646 
647  }
648  // //////////////////////////////////////////////////////////////////////
649  void CmdBomManager::buildCompleteDummyInventory (BomRoot& ioBomRoot) {
650 
651  // Build a dummy inventory, containing a dummy flight-date with a
652  // single segment-cabin and a single leg-cabin.
653  const CabinCapacity_T lCapacity = DEFAULT_CABIN_CAPACITY;
654  buildDummyInventory (ioBomRoot, lCapacity);
655 
656  // Retrieve the (sample) segment-cabin.
657  SegmentCabin& lDummySegmentCabin =
659 
660  // Retrieve the (sample) leg-cabin.
661  LegCabin& lDummyLegCabin =
663 
664  // Add some booking classes to the dummy segment-cabin and some
665  // virtual ones to the dummy leg-cabin.
666  // First booking class yield and demand information.
667  Yield_T lYield = 100;
668  MeanValue_T lMean = 20;
669  StdDevValue_T lStdDev= 9;
670  BookingClassKey lBCKey (DEFAULT_CLASS_CODE);
671 
672  BookingClass& lDummyBookingClass =
673  FacBom<BookingClass>::instance().create (lBCKey);
674  lDummyBookingClass.setYield (lYield);
675  lDummyBookingClass.setMean (lMean);
676  lDummyBookingClass.setStdDev (lStdDev);
677  // Add a booking class to the segment-cabin.
678  FacBomManager::addToList (lDummySegmentCabin, lDummyBookingClass);
679 
680  VirtualClassStruct lDummyVirtualClass (lDummyBookingClass);
681  lDummyVirtualClass.setYield (lYield);
682  lDummyVirtualClass.setMean (lMean);
683  lDummyVirtualClass.setStdDev (lStdDev);
684  // Add the corresponding virtual class to the leg-cabin.
685  lDummyLegCabin.addVirtualClass (lDummyVirtualClass);
686 
687  // Second booking class yield and demand information.
688  lYield = 70;
689  lMean = 45;
690  lStdDev= 12;
691  lDummyBookingClass.setYield (lYield);
692  lDummyBookingClass.setMean (lMean);
693  lDummyBookingClass.setStdDev (lStdDev);
694  // Add a booking class to the segment-cabin.
695  FacBomManager::addToList (lDummySegmentCabin, lDummyBookingClass);
696 
697  lDummyVirtualClass.setYield (lYield);
698  lDummyVirtualClass.setMean (lMean);
699  lDummyVirtualClass.setStdDev (lStdDev);
700  // Add the corresponding virtual class to the leg-cabin.
701  lDummyLegCabin.addVirtualClass (lDummyVirtualClass);
702 
703  // Third booking class yield and demand information.
704  lYield = 42;
705  lMean = 80;
706  lStdDev= 16;
707  lDummyBookingClass.setYield (lYield);
708  lDummyBookingClass.setMean (lMean);
709  lDummyBookingClass.setStdDev (lStdDev);
710  // Add a booking class to the segment-cabin.
711  FacBomManager::addToList (lDummySegmentCabin, lDummyBookingClass);
712 
713  lDummyVirtualClass.setYield (lYield);
714  lDummyVirtualClass.setMean (lMean);
715  lDummyVirtualClass.setStdDev (lStdDev);
716  // Add the corresponding virtual class to the leg-cabin.
717  lDummyLegCabin.addVirtualClass (lDummyVirtualClass);
718 
719  }
720 
721  // //////////////////////////////////////////////////////////////////////
722  void CmdBomManager::buildDummyInventory (BomRoot& ioBomRoot,
723  const CabinCapacity_T& iCapacity) {
724  // Inventory
725  const InventoryKey lInventoryKey (DEFAULT_AIRLINE_CODE);
726  Inventory& lInv = FacBom<Inventory>::instance().create (lInventoryKey);
727  FacBomManager::addToListAndMap (ioBomRoot, lInv);
728  FacBomManager::linkWithParent (ioBomRoot, lInv);
729 
730  // Flight-date
731  FlightDateKey lFlightDateKey(DEFAULT_FLIGHT_NUMBER, DEFAULT_DEPARTURE_DATE);
732  FlightDate& lFlightDate =
733  FacBom<FlightDate>::instance().create (lFlightDateKey);
734  FacBomManager::addToListAndMap (lInv, lFlightDate);
735  FacBomManager::linkWithParent (lInv, lFlightDate);
736 
737  // Leg-date
738  LegDateKey lLegDateKey (DEFAULT_ORIGIN);
739  LegDate& lLeg = FacBom<LegDate>::instance().create (lLegDateKey);
740  FacBomManager::addToListAndMap (lFlightDate, lLeg);
741  FacBomManager::linkWithParent (lFlightDate, lLeg);
742 
743  // Fill the LegDate content
744  lLeg.setOffPoint (DEFAULT_DESTINATION);
745  lLeg.setBoardingDate (DEFAULT_DEPARTURE_DATE);
746  lLeg.setOffDate (DEFAULT_DEPARTURE_DATE);
747  lLeg.setBoardingTime (Duration_T (14, 0, 0));
748  lLeg.setOffTime (Duration_T (16, 0, 0));
749  lLeg.setElapsedTime (Duration_T (8, 0, 0));
750 
751  // Leg-cabin
752  LegCabinKey lLegCabinKey (DEFAULT_CABIN_CODE);
753  LegCabin& lLegCabin = FacBom<LegCabin>::instance().create (lLegCabinKey);
754  FacBomManager::addToListAndMap (lLeg, lLegCabin);
755  FacBomManager::linkWithParent (lLeg, lLegCabin);
756 
757  lLegCabin.setCapacities (iCapacity);
758  lLegCabin.setAvailabilityPool (iCapacity);
759 
760  // Segment-date
761  SegmentDateKey lSegmentDateKey (DEFAULT_ORIGIN, DEFAULT_DESTINATION);
762  SegmentDate& lSegment =
763  FacBom<SegmentDate>::instance().create (lSegmentDateKey);
764  FacBomManager::addToListAndMap (lFlightDate, lSegment);
765  FacBomManager::linkWithParent (lFlightDate, lSegment);
766 
767  // Links between the segment-date and the leg-date
768  FacBomManager::addToListAndMap (lLeg, lSegment);
769  FacBomManager::addToListAndMap (lSegment, lLeg);
770 
771  // Fill the SegmentDate content
772  lSegment.setBoardingDate (DEFAULT_DEPARTURE_DATE);
773  lSegment.setOffDate (DEFAULT_DEPARTURE_DATE);
774  lSegment.setBoardingTime (Duration_T (14, 0, 0));
775  lSegment.setOffTime (Duration_T (16, 0, 0));
776  lSegment.setElapsedTime (Duration_T (8, 0, 0));
777 
778  // Segment-cabin
779  SegmentCabinKey lSegmentCabinKey (DEFAULT_CABIN_CODE);
780  SegmentCabin& lSegmentCabin =
781  FacBom<SegmentCabin>::instance().create (lSegmentCabinKey);
782  FacBomManager::addToListAndMap (lSegment, lSegmentCabin);
783  FacBomManager::linkWithParent (lSegment, lSegmentCabin);
784 
785  // Links between the segment-cabin and the leg-cabin
786  FacBomManager::addToListAndMap (lLegCabin, lSegmentCabin,
787  lSegmentCabin.getFullerKey());
788  FacBomManager::addToListAndMap (lSegmentCabin, lLegCabin,
789  lLegCabin.getFullerKey());
790 
791  // Create a FareFamily (1) for the Segment LHR-BKK, cabin Y on BA's Inv
792  const FamilyCode_T l1 ("EcoSaver");
793  FareFamilyKey l1FareFamilyKey (l1);
794 
795  FareFamily& lSegmentYCabin1Family =
796  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
797  FacBomManager::addToListAndMap (lSegmentCabin, lSegmentYCabin1Family);
798  FacBomManager::linkWithParent (lSegmentCabin, lSegmentYCabin1Family);
799 
800  // Create a booking-class
801  const ClassCode_T lQ ("Q");
802  BookingClassKey lQBookingClassKey (lQ);
803 
804  BookingClass& lSegmentYCabin1FamilyQClass =
805  FacBom<BookingClass>::instance().create (lQBookingClassKey);
806  FacBomManager::addToListAndMap (lSegmentYCabin1Family,
807  lSegmentYCabin1FamilyQClass);
808  FacBomManager::linkWithParent (lSegmentYCabin1Family,
809  lSegmentYCabin1FamilyQClass);
810 
811  FacBomManager::addToListAndMap (lSegmentCabin, lSegmentYCabin1FamilyQClass);
812  FacBomManager::addToListAndMap (lSegment, lSegmentYCabin1FamilyQClass);
813 
814  /*================================================================================
815  ================================================================================
816  ================================================================================*/
817  // Schedule:
818  // XX:
819  // Step 1: flight period level
820  // Create a flight period for XX:
821  const DoWStruct lDoWSrtuct ("1111111");
822  const Date_T lXXDateRangeStart (DEFAULT_DEPARTURE_DATE);
823  const Date_T lXXDateRangeEnd (DEFAULT_DEPARTURE_DATE);
824  const DatePeriod_T lXXDatePeriod (lXXDateRangeStart, lXXDateRangeEnd);
825  const PeriodStruct lXXPeriodStruct (lXXDatePeriod, lDoWSrtuct);
826 
827  FlightPeriodKey lXXFlightPeriodKey (DEFAULT_FLIGHT_NUMBER, lXXPeriodStruct);
828 
829  FlightPeriod& lXXFlightPeriod =
830  FacBom<FlightPeriod>::instance().create (lXXFlightPeriodKey);
831  FacBomManager::addToListAndMap (lInv, lXXFlightPeriod);
832  FacBomManager::linkWithParent (lInv, lXXFlightPeriod);
833 
834  // Step 2: segment period level
835  // Create a segment period
836 
837  SegmentPeriodKey lXXSegmentPeriodKey (DEFAULT_ORIGIN, DEFAULT_DESTINATION);
838 
839  SegmentPeriod& lXXSegmentPeriod =
840  FacBom<SegmentPeriod>::instance().create (lXXSegmentPeriodKey);
841  FacBomManager::addToListAndMap (lXXFlightPeriod, lXXSegmentPeriod);
842  FacBomManager::linkWithParent (lXXFlightPeriod, lXXSegmentPeriod);
843 
844  lXXSegmentPeriod.setBoardingTime (Duration_T (14, 0, 0));
845  lXXSegmentPeriod.setOffTime (Duration_T (16, 0, 0));
846  lXXSegmentPeriod.setElapsedTime (Duration_T (8, 0, 0));
847  const CabinCode_T lY ("Y");
848  const ClassList_String_T lYQ ("YQ");
849  lXXSegmentPeriod.addCabinBookingClassList (lY,lYQ);
850 
851 
852  }
853 
854  // //////////////////////////////////////////////////////////////////////
855  void CmdBomManager::buildSamplePricing (BomRoot& ioBomRoot) {
856 
857  // Set the airport-pair primary key.
858  const AirportPairKey lAirportPairKey (AIRPORT_LHR, AIRPORT_SYD);
859 
860  // Create the AirportPairKey object and link it to the BOM tree root.
861  AirportPair& lAirportPair =
862  FacBom<AirportPair>::instance().create (lAirportPairKey);
863  FacBomManager::addToListAndMap (ioBomRoot, lAirportPair);
864  FacBomManager::linkWithParent (ioBomRoot, lAirportPair);
865 
866  // Set the fare date-period primary key.
867  const Date_T lDateRangeStart (2011, boost::gregorian::Jan, 15);
868  const Date_T lDateRangeEnd (2011, boost::gregorian::Dec, 31);
869  const DatePeriod_T lDateRange (lDateRangeStart, lDateRangeEnd);
870  const DatePeriodKey lDatePeriodKey (lDateRange);
871 
872  // Create the DatePeriodKey object and link it to the PosChannel object.
873  DatePeriod& lDatePeriod =
874  FacBom<DatePeriod>::instance().create (lDatePeriodKey);
875  FacBomManager::addToListAndMap (lAirportPair, lDatePeriod);
876  FacBomManager::linkWithParent (lAirportPair, lDatePeriod);
877 
878  // Set the point-of-sale-channel primary key.
879  const PosChannelKey lPosChannelKey (POS_LHR, CHANNEL_DN);
880 
881  // Create the PositionKey object and link it to the AirportPair object.
882  PosChannel& lPosChannel =
883  FacBom<PosChannel>::instance().create (lPosChannelKey);
884  FacBomManager::addToListAndMap (lDatePeriod, lPosChannel);
885  FacBomManager::linkWithParent (lDatePeriod, lPosChannel);
886 
887  // Set the fare time-period primary key.
888  const Time_T lTimeRangeStart (0, 0, 0);
889  const Time_T lTimeRangeEnd (23, 0, 0);
890  const TimePeriodKey lTimePeriodKey (lTimeRangeStart, lTimeRangeEnd);
891 
892  // Create the TimePeriodKey and link it to the DatePeriod object.
893  TimePeriod& lTimePeriod =
894  FacBom<TimePeriod>::instance().create (lTimePeriodKey);
895  FacBomManager::addToListAndMap (lPosChannel, lTimePeriod);
896  FacBomManager::linkWithParent (lPosChannel, lTimePeriod);
897 
898  // Pricing -- Generate the FareRule
899  const FareFeaturesKey lFareFeaturesKey (TRIP_TYPE_ROUND_TRIP,
902  CHANGE_FEES,
905 
906  // Create the FareFeaturesKey and link it to the TimePeriod object.
907  FareFeatures& lFareFeatures =
908  FacBom<FareFeatures>::instance().create (lFareFeaturesKey);
909  FacBomManager::addToListAndMap (lTimePeriod, lFareFeatures);
910  FacBomManager::linkWithParent (lTimePeriod, lFareFeatures);
911 
912  // Revenue Accounting -- Generate the YieldRule
913  const YieldFeaturesKey lYieldFeaturesKey (TRIP_TYPE_ROUND_TRIP,
914  CABIN_Y);
915 
916  // Create the YieldFeaturesKey and link it to the TimePeriod object.
917  YieldFeatures& lYieldFeatures =
918  FacBom<YieldFeatures>::instance().create (lYieldFeaturesKey);
919  FacBomManager::addToListAndMap (lTimePeriod, lYieldFeatures);
920  FacBomManager::linkWithParent (lTimePeriod, lYieldFeatures);
921 
922  // Generate Segment Features and link them to their respective
923  // fare and yield rules.
924  AirlineCodeList_T lAirlineCodeList;
925  lAirlineCodeList.push_back (AIRLINE_CODE_BA);
926  ClassList_StringList_T lClassCodeList;
927  lClassCodeList.push_back (CLASS_CODE_Y);
928  const AirlineClassListKey lAirlineClassListKey (lAirlineCodeList,
929  lClassCodeList);
930 
931  // Create the AirlineClassList
932  AirlineClassList& lAirlineClassList =
933  FacBom<AirlineClassList>::instance().create (lAirlineClassListKey);
934  // Link the AirlineClassList to the FareFeatures object
935  lAirlineClassList.setFare (900);
936  FacBomManager::addToListAndMap (lFareFeatures, lAirlineClassList);
937  FacBomManager::linkWithParent (lFareFeatures, lAirlineClassList);
938 
939  // Link the AirlineClassList to the YieldFeatures object
940  lAirlineClassList.setYield (900);
941  FacBomManager::addToListAndMap (lYieldFeatures, lAirlineClassList);
942  // \todo (gsabatier): the following calls overrides the parent for
943  // lAirlineClassList. Check that it is what is actually wanted.
944  FacBomManager::linkWithParent (lYieldFeatures, lAirlineClassList);
945  }
946 
947  // //////////////////////////////////////////////////////////////////////
948  void CmdBomManager::
949  buildSampleTravelSolutionForPricing (TravelSolutionList_T& ioTravelSolutionList) {
950 
951  // Clean the list
952  ioTravelSolutionList.clear();
953 
954  //
955  const std::string lBA9_SegmentDateKey ("BA, 9, 2011-06-10, LHR, SYD, 21:45");
956 
957  // Add the segment date key to the travel solution
958  TravelSolutionStruct lTS;
959  lTS.addSegment (lBA9_SegmentDateKey);
960 
961  // Add the travel solution to the list
962  ioTravelSolutionList.push_back (lTS);
963  }
964 
965  // //////////////////////////////////////////////////////////////////////
966  void CmdBomManager::
967  buildSampleTravelSolutions (TravelSolutionList_T& ioTravelSolutionList) {
968 
969  // Clean the list
970  ioTravelSolutionList.clear();
971 
972  //
973  const std::string lBA9_SegmentDateKey ("BA, 9, 2011-06-10, LHR, SYD, 21:45");
974 
975  // Add the segment date key to the travel solution
976  TravelSolutionStruct lTS;
977  lTS.addSegment (lBA9_SegmentDateKey);
978 
979  // Fare option
980  const ClassCode_T lClassPath (CLASS_CODE_Q);
981  const Fare_T lFare (900);
982  const ChangeFees_T lChangeFee (CHANGE_FEES);
983  const NonRefundable_T isNonRefundable (NON_REFUNDABLE);
984  const SaturdayStay_T lSaturdayStay (SATURDAY_STAY);
985  const FareOptionStruct lFareOption (lClassPath, lFare, lChangeFee,
986  isNonRefundable, lSaturdayStay);
987 
988  // Add (a copy of) the fare option
989  lTS.addFareOption (lFareOption);
990 
991  // Map of class availabilities: set the availability for the Q
992  // booking class (the one corresponding to the fare option) to 8.
993  ClassAvailabilityMap_T lClassAvailabilityMap;
994  const Availability_T lAvl (8);
995  const bool hasInsertBeenSuccessful = lClassAvailabilityMap.
996  insert (ClassAvailabilityMap_T::value_type (lClassPath, lAvl)).second;
997  assert (hasInsertBeenSuccessful == true);
998  // Add the map to the dedicated list held by the travel solution
999  lTS.addClassAvailabilityMap (lClassAvailabilityMap);
1000 
1001  // Add the travel solution to the list
1002  ioTravelSolutionList.push_back (lTS);
1003  }
1004 
1005  // //////////////////////////////////////////////////////////////////////
1006  BookingRequestStruct CmdBomManager::buildSampleBookingRequest() {
1007  // Origin
1008  const AirportCode_T lOrigin (AIRPORT_LHR);
1009 
1010  // Destination
1011  const AirportCode_T lDestination (AIRPORT_SYD);
1012 
1013  // Point of Sale (POS)
1014  const CityCode_T lPOS (POS_LHR);
1015 
1016  // Preferred departure date (10-JUN-2011)
1017  const Date_T lPreferredDepartureDate (2011, boost::gregorian::Jun, 10);
1018 
1019  // Preferred departure time (08:00)
1020  const Duration_T lPreferredDepartureTime (8, 0, 0);
1021 
1022  // Date of the request (15-MAY-2011)
1023  const Date_T lRequestDate (2011, boost::gregorian::May, 15);
1024 
1025  // Time of the request (10:00)
1026  const Duration_T lRequestTime (10, 0, 0);
1027 
1028  // Date-time of the request (made of the date and time above)
1029  const DateTime_T lRequestDateTime (lRequestDate, lRequestTime);
1030 
1031  // Preferred cabin (also named class of service sometimes)
1032  const CabinCode_T lPreferredCabin (CABIN_ECO);
1033 
1034  // Number of persons in the party
1035  const PartySize_T lPartySize (3);
1036 
1037  // Channel (direct/indirect, on-line/off-line)
1038  const ChannelLabel_T lChannel (CHANNEL_DN);
1039 
1040  // Type of the trip (one-way, inbound/outbound of a return trip)
1041  const TripType_T lTripType (TRIP_TYPE_INBOUND);
1042 
1043  // Duration of the stay (expressed as a number of days)
1044  const DayDuration_T lStayDuration (DEFAULT_STAY_DURATION);
1045 
1046  // Frequent flyer tier (member, silver, gold, platinum, senator, etc)
1047  const FrequentFlyer_T lFrequentFlyerType (FREQUENT_FLYER_MEMBER);
1048 
1049  // Maximum willing-to-pay (WTP, expressed in monetary unit, e.g., EUR)
1050  const WTP_T lWTP (DEFAULT_WTP);
1051 
1052  // Value of time, for the customer (expressed in monetary unit per
1053  // unit of time, e.g., EUR/hour)
1054  const PriceValue_T lValueOfTime (DEFAULT_VALUE_OF_TIME);
1055 
1056  // Creation of the booking request structure
1057  BookingRequestStruct oBookingRequest (lOrigin, lDestination, lPOS,
1058  lPreferredDepartureDate,
1059  lRequestDateTime,
1060  lPreferredCabin,
1061  lPartySize, lChannel,
1062  lTripType, lStayDuration,
1063  lFrequentFlyerType,
1064  lPreferredDepartureTime,
1065  lWTP, lValueOfTime);
1066 
1067  return oBookingRequest;
1068  }
1069 
1070  // //////////////////////////////////////////////////////////////////////
1071  BookingRequestStruct CmdBomManager::buildSampleBookingRequestForCRS() {
1072  // Origin
1073  const AirportCode_T lOrigin (AIRPORT_SIN);
1074 
1075  // Destination
1076  const AirportCode_T lDestination (AIRPORT_BKK);
1077 
1078  // Point of Sale (POS)
1079  const CityCode_T lPOS (POS_SIN);
1080 
1081  // Preferred departure date (30-JAN-2010)
1082  const Date_T lPreferredDepartureDate (2010, boost::gregorian::Jan, 30);
1083 
1084  // Preferred departure time (10:00)
1085  const Duration_T lPreferredDepartureTime (10, 0, 0);
1086 
1087  // Date of the request (22-JAN-2010)
1088  const Date_T lRequestDate (2010, boost::gregorian::Jan, 22);
1089 
1090  // Time of the request (10:00)
1091  const Duration_T lRequestTime (10, 0, 0);
1092 
1093  // Date-time of the request (made of the date and time above)
1094  const DateTime_T lRequestDateTime (lRequestDate, lRequestTime);
1095 
1096  // Preferred cabin (also named class of service sometimes)
1097  const CabinCode_T lPreferredCabin (CABIN_ECO);
1098 
1099  // Number of persons in the party
1100  const PartySize_T lPartySize (3);
1101 
1102  // Channel (direct/indirect, on-line/off-line)
1103  const ChannelLabel_T lChannel (CHANNEL_IN);
1104 
1105  // Type of the trip (one-way, inbound/outbound of a return trip)
1106  const TripType_T lTripType (TRIP_TYPE_INBOUND);
1107 
1108  // Duration of the stay (expressed as a number of days)
1109  const DayDuration_T lStayDuration (DEFAULT_STAY_DURATION);
1110 
1111  // Frequent flyer tier (member, silver, gold, platinum, senator, etc)
1112  const FrequentFlyer_T lFrequentFlyerType (FREQUENT_FLYER_MEMBER);
1113 
1114  // Maximum willing-to-pay (WTP, expressed in monetary unit, e.g., EUR)
1115  const WTP_T lWTP (DEFAULT_WTP);
1116 
1117  // Value of time, for the customer (expressed in monetary unit per
1118  // unit of time, e.g., EUR/hour)
1119  const PriceValue_T lValueOfTime (DEFAULT_VALUE_OF_TIME);
1120 
1121  // Creation of the booking request structure
1122  BookingRequestStruct oBookingRequest (lOrigin,
1123  lDestination,
1124  lPOS,
1125  lPreferredDepartureDate,
1126  lRequestDateTime,
1127  lPreferredCabin,
1128  lPartySize, lChannel,
1129  lTripType, lStayDuration,
1130  lFrequentFlyerType,
1131  lPreferredDepartureTime,
1132  lWTP, lValueOfTime);
1133 
1134  return oBookingRequest;
1135  }
1136 
1137  // //////////////////////////////////////////////////////////////////////
1138  void CmdBomManager::buildPartnershipsSampleInventoryAndRM (BomRoot& ioBomRoot) {
1139 
1140  // Step 0.1: Inventory level
1141  // Create an Inventory for SQ
1142  const InventoryKey lSQKey ("SQ");
1143  Inventory& lSQInv = FacBom<Inventory>::instance().create (lSQKey);
1144  FacBomManager::addToListAndMap (ioBomRoot, lSQInv);
1145  FacBomManager::linkWithParent (ioBomRoot, lSQInv);
1146 
1147  // Create an Inventory for CX
1148  const InventoryKey lCXKey ("CX");
1149  Inventory& lCXInv = FacBom<Inventory>::instance().create (lCXKey);
1150  FacBomManager::addToListAndMap (ioBomRoot, lCXInv);
1151  FacBomManager::linkWithParent (ioBomRoot, lCXInv);
1152 
1153 
1154  // ////// SQ ///////
1155  // Step 0.2: Flight-date level
1156  // Create a FlightDate (SQ11/08-FEB-2010) for SQ's Inventory
1157  FlightNumber_T lFlightNumber = 11;
1158  Date_T lDate (2010, 2, 8);
1159  FlightDateKey lFlightDateKey (lFlightNumber, lDate);
1160 
1161  FlightDate& lSQ11_20100208_FD =
1162  FacBom<FlightDate>::instance().create (lFlightDateKey);
1163  FacBomManager::addToListAndMap (lSQInv, lSQ11_20100208_FD);
1164  FacBomManager::linkWithParent (lSQInv, lSQ11_20100208_FD);
1165 
1166  // Create a (mkt) FlightDate (SQ1200/08-FEB-2010) for SQ's Inventory
1167  FlightNumber_T lMktFlightNumber = 1200;
1168  //lDate = Date_T (2010, 2, 8);
1169  FlightDateKey lMktFlightDateKey (lMktFlightNumber, lDate);
1170 
1171  FlightDate& lSQ1200_20100208_FD =
1172  FacBom<FlightDate>::instance().create (lMktFlightDateKey);
1173  FacBomManager::addToListAndMap (lSQInv, lSQ1200_20100208_FD);
1174  FacBomManager::linkWithParent (lSQInv, lSQ1200_20100208_FD);
1175 
1176  // Display the flight-date
1177  // STDAIR_LOG_DEBUG ("FlightDate: " << lBA9_20110610_FD.toString());
1178 
1179  // Step 0.3: Segment-date level
1180  // Create a first SegmentDate (SIN-BKK) for SQ's Inventory
1181  const AirportCode_T lSIN ("SIN");
1182  const AirportCode_T lBKK ("BKK");
1183  const DateOffset_T l1Day (1);
1184  const DateOffset_T l2Days (2);
1185  const Duration_T l0820 (8, 20, 0);
1186  const Duration_T l1100 (11, 0, 0);
1187  const Duration_T l0340 (3, 40, 0);
1188  SegmentDateKey lSegmentDateKey (lSIN, lBKK);
1189 
1190  SegmentDate& lSINBKKSegment =
1191  FacBom<SegmentDate>::instance().create (lSegmentDateKey);
1192  FacBomManager::addToListAndMap (lSQ11_20100208_FD, lSINBKKSegment);
1193  FacBomManager::linkWithParent (lSQ11_20100208_FD, lSINBKKSegment);
1194 
1195  // Fill the SegmentDate content
1196  lSINBKKSegment.setBoardingDate (lDate);
1197  lSINBKKSegment.setOffDate (lDate);
1198  lSINBKKSegment.setBoardingTime (l0820);
1199  lSINBKKSegment.setOffTime (l1100);
1200  lSINBKKSegment.setElapsedTime (l0340);
1201 
1202  // Create a second (mkt) SegmentDate (BKK-HKG) for SQ's Inventory
1203  const AirportCode_T lHKG ("HKG");
1204  const Duration_T l1200 (12, 0, 0);
1205  const Duration_T l1540 (15, 40, 0);
1206  const Duration_T l0240 (2, 40, 0);
1207  SegmentDateKey lMktSegmentDateKey (lBKK, lHKG);
1208 
1209  SegmentDate& lMktBKKHKGSegment =
1210  FacBom<SegmentDate>::instance().create (lMktSegmentDateKey);
1211  FacBomManager::addToListAndMap (lSQ1200_20100208_FD, lMktBKKHKGSegment);
1212  FacBomManager::linkWithParent (lSQ1200_20100208_FD, lMktBKKHKGSegment);
1213 
1214  // Fill the (mkt) SegmentDate content
1215  lMktBKKHKGSegment.setBoardingDate (lDate);
1216  lMktBKKHKGSegment.setOffDate (lDate);
1217  lMktBKKHKGSegment.setBoardingTime (l1200);
1218  lMktBKKHKGSegment.setOffTime (l1540);
1219  lMktBKKHKGSegment.setElapsedTime (l0240);
1220 
1221  // Step 0.4: Leg-date level
1222  // Create a first LegDate (SIN) for SQ's Inventory
1223  LegDateKey lLegDateKey (lSIN);
1224 
1225  LegDate& lSINLeg = FacBom<LegDate>::instance().create (lLegDateKey);
1226  FacBomManager::addToListAndMap (lSQ11_20100208_FD, lSINLeg);
1227  FacBomManager::linkWithParent (lSQ11_20100208_FD, lSINLeg);
1228 
1229  // Fill the LegDate content
1230  lSINLeg.setOffPoint (lBKK);
1231  lSINLeg.setBoardingDate (lDate);
1232  lSINLeg.setOffDate (lDate);
1233  lSINLeg.setBoardingTime (l0820);
1234  lSINLeg.setOffTime (l1100);
1235  lSINLeg.setElapsedTime (l0340);
1236 
1237 
1238  // Link the segment-dates with the leg-dates
1239  FacBomManager::addToListAndMap (lSINLeg, lSINBKKSegment);
1240  FacBomManager::addToListAndMap (lSINBKKSegment, lSINLeg);
1241 
1242  // Step 0.5: segment-cabin level
1243  // Create a SegmentCabin (Y) for the Segment SIN-BKK of SQ's Inventory
1244  const CabinCode_T lY ("Y");
1245  SegmentCabinKey lYSegmentCabinKey (lY);
1246 
1247  SegmentCabin& lSINBKKSegmentYCabin =
1248  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
1249  FacBomManager::addToListAndMap (lSINBKKSegment, lSINBKKSegmentYCabin);
1250  FacBomManager::linkWithParent (lSINBKKSegment, lSINBKKSegmentYCabin);
1251 
1252  // Create a SegmentCabin (Y) for the (mkt) Segment BKK-HKG of SQ's Inventory
1253  SegmentCabin& lMktBKKHKGSegmentYCabin =
1254  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
1255  FacBomManager::addToListAndMap (lMktBKKHKGSegment, lMktBKKHKGSegmentYCabin);
1256  FacBomManager::linkWithParent (lMktBKKHKGSegment, lMktBKKHKGSegmentYCabin);
1257 
1258 
1259  // Step 0.6: leg-cabin level
1260  // Create a LegCabin (Y) for the Leg SIN-BKK on SQ's Inventory
1261  LegCabinKey lYLegCabinKey (lY);
1262 
1263  LegCabin& lSINLegYCabin =
1264  FacBom<LegCabin>::instance().create (lYLegCabinKey);
1265  FacBomManager::addToListAndMap (lSINLeg, lSINLegYCabin);
1266  FacBomManager::linkWithParent (lSINLeg, lSINLegYCabin);
1267 
1268  CabinCapacity_T lCapacity (100);
1269  lSINLegYCabin.setCapacities (lCapacity);
1270  lSINLegYCabin.setAvailabilityPool (lCapacity);
1271 
1283  FacBomManager::addToListAndMap (lSINLegYCabin, lSINBKKSegmentYCabin,
1284  lSINBKKSegmentYCabin.getFullerKey());
1285 
1296  FacBomManager::addToListAndMap (lSINBKKSegmentYCabin, lSINLegYCabin,
1297  lSINLegYCabin.getFullerKey());
1298 
1299 
1300  // Step 0.7: fare family level
1301  // Create a FareFamily (1) for the Segment SIN-BKK, cabin Y on SQ's Inv
1302  const FamilyCode_T l1 ("EcoSaver");
1303  FareFamilyKey l1FareFamilyKey (l1);
1304 
1305  FareFamily& lSINBKKSegmentYCabin1Family =
1306  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
1307  FacBomManager::addToListAndMap (lSINBKKSegmentYCabin,
1308  lSINBKKSegmentYCabin1Family);
1309  FacBomManager::linkWithParent (lSINBKKSegmentYCabin,
1310  lSINBKKSegmentYCabin1Family);
1311 
1312  // Create a FareFamily (1) for the (mkt) Segment BKK-HKG, cabin Y on SQ's Inv
1313  FareFamily& lMktBKKHKGSegmentYCabin1Family =
1314  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
1315  FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin,
1316  lMktBKKHKGSegmentYCabin1Family);
1317  FacBomManager::linkWithParent (lMktBKKHKGSegmentYCabin,
1318  lMktBKKHKGSegmentYCabin1Family);
1319 
1320  // Step 0.8: booking class level
1321  // Create a BookingClass (Y) for the Segment SIN-BKK, cabin Y,
1322  // fare family 1 on SQ's Inv
1323  BookingClassKey lYBookingClassKey (lY);
1324 
1325  BookingClass& lSINBKKSegmentYCabin1FamilyYClass =
1326  FacBom<BookingClass>::instance().create (lYBookingClassKey);
1327  FacBomManager::addToListAndMap (lSINBKKSegmentYCabin1Family,
1328  lSINBKKSegmentYCabin1FamilyYClass);
1329  FacBomManager::linkWithParent (lSINBKKSegmentYCabin1Family,
1330  lSINBKKSegmentYCabin1FamilyYClass);
1331 
1332  FacBomManager::addToListAndMap (lSINBKKSegmentYCabin,
1333  lSINBKKSegmentYCabin1FamilyYClass);
1334  FacBomManager::addToListAndMap (lSINBKKSegment,
1335  lSINBKKSegmentYCabin1FamilyYClass);
1336 
1337  lSINBKKSegmentYCabin1FamilyYClass.setYield(700);
1338 
1339  // Create a BookingClass (Y) for the (mkt) Segment BKK-HKG, cabin Y,
1340  // fare family 1 on SQ's Inv
1341  BookingClass& lMktBKKHKGSegmentYCabin1FamilyYClass =
1342  FacBom<BookingClass>::instance().create (lYBookingClassKey);
1343  FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin1Family,
1344  lMktBKKHKGSegmentYCabin1FamilyYClass);
1345  FacBomManager::linkWithParent (lMktBKKHKGSegmentYCabin1Family,
1346  lMktBKKHKGSegmentYCabin1FamilyYClass);
1347 
1348  FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin,
1349  lMktBKKHKGSegmentYCabin1FamilyYClass);
1350  FacBomManager::addToListAndMap (lMktBKKHKGSegment,
1351  lMktBKKHKGSegmentYCabin1FamilyYClass);
1352 
1353  lMktBKKHKGSegmentYCabin1FamilyYClass.setYield(700);
1354 
1355 
1356  // Create a BookingClass (M) for the Segment SIN-BKK, cabin Y,
1357  // fare family 1 on SQ's Inv
1358  const ClassCode_T lM ("M");
1359  BookingClassKey lMBookingClassKey (lM);
1360 
1361  BookingClass& lSINBKKSegmentYCabin1FamilyMClass =
1362  FacBom<BookingClass>::instance().create (lMBookingClassKey);
1363  FacBomManager::addToListAndMap (lSINBKKSegmentYCabin1Family,
1364  lSINBKKSegmentYCabin1FamilyMClass);
1365  FacBomManager::linkWithParent (lSINBKKSegmentYCabin1Family,
1366  lSINBKKSegmentYCabin1FamilyMClass);
1367 
1368  FacBomManager::addToListAndMap (lSINBKKSegmentYCabin,
1369  lSINBKKSegmentYCabin1FamilyMClass);
1370  FacBomManager::addToListAndMap (lSINBKKSegment,
1371  lSINBKKSegmentYCabin1FamilyMClass);
1372 
1373  lSINBKKSegmentYCabin1FamilyMClass.setYield(500);
1374 
1375  // Create a BookingClass (M) for the (mkt) Segment BKK-HKG, cabin Y,
1376  // fare family 1 on SQ's Inv
1377  BookingClass& lMktBKKHKGSegmentYCabin1FamilyMClass =
1378  FacBom<BookingClass>::instance().create (lMBookingClassKey);
1379  FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin1Family,
1380  lMktBKKHKGSegmentYCabin1FamilyMClass);
1381  FacBomManager::linkWithParent (lMktBKKHKGSegmentYCabin1Family,
1382  lMktBKKHKGSegmentYCabin1FamilyMClass);
1383 
1384  FacBomManager::addToListAndMap (lMktBKKHKGSegmentYCabin,
1385  lMktBKKHKGSegmentYCabin1FamilyMClass);
1386  FacBomManager::addToListAndMap (lMktBKKHKGSegment,
1387  lMktBKKHKGSegmentYCabin1FamilyMClass);
1388 
1389  lMktBKKHKGSegmentYCabin1FamilyMClass.setYield(500);
1390 
1391  /* =================================================================================== */
1392  // Step 0.9: Partner Inventory
1393  // Create a partner Inventory CX for SQ
1394  const InventoryKey lPartnerCXKey ("CX");
1395  Inventory& lPartnerCXInv = FacBom<Inventory>::instance().create (lPartnerCXKey);
1396  FacBomManager::addToListAndMap (lSQInv, lPartnerCXInv);
1397  FacBomManager::linkWithParent (lSQInv, lPartnerCXInv);
1398 
1399  // Step 0.9.2 : Flight-date level
1400  lFlightNumber = 12;
1401  lFlightDateKey = FlightDateKey (lFlightNumber, lDate);
1402 
1403  FlightDate& lPartnerCX12_20100208_FD =
1404  FacBom<FlightDate>::instance().create (lFlightDateKey);
1405  FacBomManager::addToListAndMap (lPartnerCXInv, lPartnerCX12_20100208_FD);
1406  FacBomManager::linkWithParent (lPartnerCXInv, lPartnerCX12_20100208_FD);
1407 
1408  lFlightNumber = 1100;
1409  lMktFlightDateKey = FlightDateKey (lFlightNumber, lDate);
1410 
1411  FlightDate& lPartnerCX1100_20100208_FD =
1412  FacBom<FlightDate>::instance().create (lMktFlightDateKey);
1413  FacBomManager::addToListAndMap (lPartnerCXInv, lPartnerCX1100_20100208_FD);
1414  FacBomManager::linkWithParent (lPartnerCXInv, lPartnerCX1100_20100208_FD);
1415 
1416  // Step 0.9.3: Segment-date level
1417  lSegmentDateKey = SegmentDateKey (lBKK, lHKG);
1418 
1419  SegmentDate& lPartnerBKKHKGSegment =
1420  FacBom<SegmentDate>::instance().create (lSegmentDateKey);
1421  FacBomManager::addToListAndMap (lPartnerCX12_20100208_FD, lPartnerBKKHKGSegment);
1422  FacBomManager::linkWithParent (lPartnerCX12_20100208_FD, lPartnerBKKHKGSegment);
1423 
1424  lPartnerBKKHKGSegment.setBoardingDate (lDate);
1425  lPartnerBKKHKGSegment.setOffDate (lDate);
1426  lPartnerBKKHKGSegment.setBoardingTime (l1200);
1427  lPartnerBKKHKGSegment.setOffTime (l1540);
1428  lPartnerBKKHKGSegment.setElapsedTime (l0240);
1429 
1430  lMktSegmentDateKey = SegmentDateKey (lSIN, lBKK);
1431 
1432  SegmentDate& lPartnerMktSINBKKSegment =
1433  FacBom<SegmentDate>::instance().create (lMktSegmentDateKey);
1434  FacBomManager::addToListAndMap (lPartnerCX1100_20100208_FD, lPartnerMktSINBKKSegment);
1435  FacBomManager::linkWithParent (lPartnerCX1100_20100208_FD, lPartnerMktSINBKKSegment);
1436 
1437  lPartnerMktSINBKKSegment.setBoardingDate (lDate);
1438  lPartnerMktSINBKKSegment.setOffDate (lDate);
1439  lPartnerMktSINBKKSegment.setBoardingTime (l0820);
1440  lPartnerMktSINBKKSegment.setOffTime (l1100);
1441  lPartnerMktSINBKKSegment.setElapsedTime (l0340);
1442 
1443  // Step 0.9.4: Leg-date level
1444  lLegDateKey = LegDateKey (lBKK);
1445 
1446  LegDate& lPartnerBKKLeg = FacBom<LegDate>::instance().create (lLegDateKey);
1447  FacBomManager::addToListAndMap (lPartnerCX12_20100208_FD, lPartnerBKKLeg);
1448  FacBomManager::linkWithParent (lPartnerCX12_20100208_FD, lPartnerBKKLeg);
1449 
1450  lPartnerBKKLeg.setOffPoint (lHKG);
1451  lPartnerBKKLeg.setBoardingDate (lDate);
1452  lPartnerBKKLeg.setOffDate (lDate);
1453  lPartnerBKKLeg.setBoardingTime (l1200);
1454  lPartnerBKKLeg.setOffTime (l1540);
1455  lPartnerBKKLeg.setElapsedTime (l0240);
1456 
1457  FacBomManager::addToListAndMap (lPartnerBKKLeg, lPartnerBKKHKGSegment);
1458  FacBomManager::addToListAndMap (lPartnerBKKHKGSegment, lPartnerBKKLeg);
1459 
1460  // Step 9.0.5: segment-cabin level
1461 
1462  SegmentCabin& lPartnerBKKHKGSegmentYCabin =
1463  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
1464  FacBomManager::addToListAndMap (lPartnerBKKHKGSegment, lPartnerBKKHKGSegmentYCabin);
1465  FacBomManager::linkWithParent (lPartnerBKKHKGSegment, lPartnerBKKHKGSegmentYCabin);
1466 
1467  SegmentCabin& lPartnerMktSINBKKSegmentYCabin =
1468  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
1469  FacBomManager::addToListAndMap (lPartnerMktSINBKKSegment, lPartnerMktSINBKKSegmentYCabin);
1470  FacBomManager::linkWithParent (lPartnerMktSINBKKSegment, lPartnerMktSINBKKSegmentYCabin);
1471 
1472  // Step 9.0.6: leg-cabin level
1473 
1474  LegCabin& lPartnerBKKLegYCabin =
1475  FacBom<LegCabin>::instance().create (lYLegCabinKey);
1476  FacBomManager::addToListAndMap (lPartnerBKKLeg, lPartnerBKKLegYCabin);
1477  FacBomManager::linkWithParent (lPartnerBKKLeg, lPartnerBKKLegYCabin);
1478 
1479  lCapacity = CabinCapacity_T(999);
1480  lPartnerBKKLegYCabin.setCapacities (lCapacity);
1481  lPartnerBKKLegYCabin.setAvailabilityPool (lCapacity);
1482 
1483  FacBomManager::addToListAndMap (lPartnerBKKLegYCabin, lPartnerBKKHKGSegmentYCabin,
1484  lPartnerBKKHKGSegmentYCabin.getFullerKey());
1485  FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin, lPartnerBKKLegYCabin,
1486  lPartnerBKKLegYCabin.getFullerKey());
1487 
1488  // Step 9.0.7: fare family level
1489 
1490  FareFamily& lPartnerBKKHKGSegmentYCabin1Family =
1491  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
1492  FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin,
1493  lPartnerBKKHKGSegmentYCabin1Family);
1494  FacBomManager::linkWithParent (lPartnerBKKHKGSegmentYCabin,
1495  lPartnerBKKHKGSegmentYCabin1Family);
1496 
1497  FareFamily& lPartnerMktSINBKKSegmentYCabin1Family =
1498  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
1499  FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin,
1500  lPartnerMktSINBKKSegmentYCabin1Family);
1501  FacBomManager::linkWithParent (lPartnerMktSINBKKSegmentYCabin,
1502  lPartnerMktSINBKKSegmentYCabin1Family);
1503 
1504  // Step 9.0.8: booking class level
1505 
1506  BookingClass& lPartnerBKKHKGSegmentYCabin1FamilyYClass =
1507  FacBom<BookingClass>::instance().create (lYBookingClassKey);
1508  FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin1Family,
1509  lPartnerBKKHKGSegmentYCabin1FamilyYClass);
1510  FacBomManager::linkWithParent (lPartnerBKKHKGSegmentYCabin1Family,
1511  lPartnerBKKHKGSegmentYCabin1FamilyYClass);
1512 
1513  FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin,
1514  lPartnerBKKHKGSegmentYCabin1FamilyYClass);
1515  FacBomManager::addToListAndMap (lPartnerBKKHKGSegment,
1516  lPartnerBKKHKGSegmentYCabin1FamilyYClass);
1517 
1518  BookingClass& lPartnerMktSINBKKSegmentYCabin1FamilyYClass =
1519  FacBom<BookingClass>::instance().create (lYBookingClassKey);
1520  FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin1Family,
1521  lPartnerMktSINBKKSegmentYCabin1FamilyYClass);
1522  FacBomManager::linkWithParent (lPartnerMktSINBKKSegmentYCabin1Family,
1523  lPartnerMktSINBKKSegmentYCabin1FamilyYClass);
1524 
1525  FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin,
1526  lPartnerMktSINBKKSegmentYCabin1FamilyYClass);
1527  FacBomManager::addToListAndMap (lPartnerMktSINBKKSegment,
1528  lPartnerMktSINBKKSegmentYCabin1FamilyYClass);
1529 
1530  BookingClass& lPartnerBKKHKGSegmentYCabin1FamilyMClass =
1531  FacBom<BookingClass>::instance().create (lMBookingClassKey);
1532  FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin1Family,
1533  lPartnerBKKHKGSegmentYCabin1FamilyMClass);
1534  FacBomManager::linkWithParent (lPartnerBKKHKGSegmentYCabin1Family,
1535  lPartnerBKKHKGSegmentYCabin1FamilyMClass);
1536 
1537  FacBomManager::addToListAndMap (lPartnerBKKHKGSegmentYCabin,
1538  lPartnerBKKHKGSegmentYCabin1FamilyMClass);
1539  FacBomManager::addToListAndMap (lPartnerBKKHKGSegment,
1540  lPartnerBKKHKGSegmentYCabin1FamilyMClass);
1541 
1542  BookingClass& lPartnerMktSINBKKSegmentYCabin1FamilyMClass =
1543  FacBom<BookingClass>::instance().create (lMBookingClassKey);
1544  FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin1Family,
1545  lPartnerMktSINBKKSegmentYCabin1FamilyMClass);
1546  FacBomManager::linkWithParent (lPartnerMktSINBKKSegmentYCabin1Family,
1547  lPartnerMktSINBKKSegmentYCabin1FamilyMClass);
1548 
1549  FacBomManager::addToListAndMap (lPartnerMktSINBKKSegmentYCabin,
1550  lPartnerMktSINBKKSegmentYCabin1FamilyMClass);
1551  FacBomManager::addToListAndMap (lPartnerMktSINBKKSegment,
1552  lPartnerMktSINBKKSegmentYCabin1FamilyMClass);
1553 
1554  // Step 9.0.9: link SQ inventory objects to Partner CX inventory objects
1555 
1556  FacBomManager::addToList (lSINBKKSegment, lPartnerMktSINBKKSegment);
1557 
1558  lMktBKKHKGSegment.linkWithOperating (lPartnerBKKHKGSegment);
1559 
1560  /* =================================================================================== */
1561 
1562  // Step 1.0: O&D level
1563  // Create an O&D Date (SQ11/08-FEB-2010/SIN-BKK-SQ1200/08-FEB-2010/BKK-HKG) for SQ's Inventory
1564  OnDString_T lSQSINBKKOnDStr = "SQ;11,2010-Feb-08;SIN,BKK";
1565  OnDString_T lMktSQBKKHKGOnDStr = "SQ;1200,2010-Feb-08;BKK,HKG";
1566  OnDStringList_T lOnDStringList;
1567  lOnDStringList.push_back (lSQSINBKKOnDStr);
1568  lOnDStringList.push_back (lMktSQBKKHKGOnDStr);
1569 
1570  OnDDateKey lOnDDateKey (lOnDStringList);
1571  OnDDate& lSQ_SINHKG_OnDDate =
1572  FacBom<OnDDate>::instance().create (lOnDDateKey);
1573  // Link to the inventory
1574  FacBomManager::addToListAndMap (lSQInv, lSQ_SINHKG_OnDDate);
1575  FacBomManager::linkWithParent (lSQInv, lSQ_SINHKG_OnDDate);
1576 
1577  // Add the segments
1578  FacBomManager::addToListAndMap (lSQ_SINHKG_OnDDate, lSINBKKSegment);
1579  FacBomManager::addToListAndMap (lSQ_SINHKG_OnDDate, lMktBKKHKGSegment);
1580 
1581  // Add total forecast info for cabin Y.
1582  const MeanStdDevPair_T lMean60StdDev6 (60.0, 6.0);
1583  const WTP_T lWTP750 = 750.0;
1584  const WTPDemandPair_T lWTP750Mean60StdDev6 (lWTP750, lMean60StdDev6);
1585  lSQ_SINHKG_OnDDate.setTotalForecast (lY, lWTP750Mean60StdDev6);
1586 
1587  // Add demand info (optional).
1588  // 2 legs here, so 2 CabinClassPair to add in the list.
1589  // Fist leg: cabin Y, class M.
1590  CabinClassPair_T lCC_YM1 (lY,lM);
1591  // Second leg: cabin Y, class M too.
1592  CabinClassPair_T lCC_YM2 (lY,lM);
1593  CabinClassPairList_T lCabinClassPairList;
1594  lCabinClassPairList.push_back(lCC_YM1);
1595  lCabinClassPairList.push_back(lCC_YM2);
1596  const MeanStdDevPair_T lMean20StdDev2 (20.0, 2.0);
1597  const Yield_T lYield850 = 850.0;
1598  const YieldDemandPair_T lYield850Mean20StdDev2 (lYield850, lMean20StdDev2);
1599  lSQ_SINHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield850Mean20StdDev2);
1600 
1601  CabinClassPair_T lCC_YY1 (lY,lY);
1602  CabinClassPair_T lCC_YY2 (lY,lY);
1603  lCabinClassPairList.clear();
1604  lCabinClassPairList.push_back(lCC_YY1);
1605  lCabinClassPairList.push_back(lCC_YY2);
1606  const MeanStdDevPair_T lMean10StdDev1 (10.0, 1.0);
1607  const Yield_T lYield1200 = 1200.0;
1608  const YieldDemandPair_T lYield1200Mean10StdDev1 (lYield1200, lMean10StdDev1);
1609  lSQ_SINHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield1200Mean10StdDev1);
1610 
1611  // Create an O&D Date (SQ11/08-FEB-2010/SIN-BKK) for SQ's Inventory
1612  lOnDStringList.clear();
1613  lOnDStringList.push_back (lSQSINBKKOnDStr);
1614 
1615  lOnDDateKey = OnDDateKey(lOnDStringList);
1616  OnDDate& lSQ_SINBKK_OnDDate =
1617  FacBom<OnDDate>::instance().create (lOnDDateKey);
1618  // Link to the inventory
1619  FacBomManager::addToListAndMap (lSQInv, lSQ_SINBKK_OnDDate);
1620  FacBomManager::linkWithParent (lSQInv, lSQ_SINBKK_OnDDate);
1621 
1622  // Add the segments
1623  FacBomManager::addToListAndMap (lSQ_SINBKK_OnDDate, lSINBKKSegment);
1624 
1625  // Add total forecast info for cabin Y.
1626  const WTP_T lWTP400 = 400.0;
1627  const WTPDemandPair_T lWTP400Mean60StdDev6 (lWTP400, lMean60StdDev6);
1628  lSQ_SINBKK_OnDDate.setTotalForecast (lY, lWTP400Mean60StdDev6);
1629 
1630  // Add demand info (optional).
1631  lCabinClassPairList.clear();
1632  lCabinClassPairList.push_back(lCC_YM1);
1633  const MeanStdDevPair_T lMean20StdDev1 (20.0, 1.0);
1634  const Yield_T lYield500 = 500.0;
1635  const YieldDemandPair_T lYield500Mean20StdDev1 (lYield500, lMean20StdDev1);
1636  lSQ_SINBKK_OnDDate.setDemandInformation (lCabinClassPairList, lYield500Mean20StdDev1);
1637 
1638  lCabinClassPairList.clear();
1639  lCabinClassPairList.push_back(lCC_YY1);
1640  const Yield_T lYield700 = 700.0;
1641  const YieldDemandPair_T lYield700Mean20StdDev1 (lYield700, lMean10StdDev1 );
1642  lSQ_SINBKK_OnDDate.setDemandInformation (lCabinClassPairList, lYield700Mean20StdDev1);
1643 
1644  /*******************************************************************************
1645  // Create an O&D Date (SQ1200/08-FEB-2010/BKK-HKG) for SQ's Inventory
1646  lFullKeyList.clear();
1647  lFullKeyList.push_back (lMktSQBKKHKGFullKeyStr);
1648 
1649  lOnDDateKey = OnDDateKey(lFullKeyList);
1650  OnDDate& lMktSQ_BKKHKG_OnDDate =
1651  FacBom<OnDDate>::instance().create (lOnDDateKey);
1652  // Link to the inventory
1653  FacBomManager::addToListAndMap (lSQInv, lMktSQ_BKKHKG_OnDDate);
1654  FacBomManager::linkWithParent (lSQInv, lMktSQ_BKKHKG_OnDDate);
1655 
1656  // Add the segments
1657  FacBomManager::addToListAndMap (lMktSQ_BKKHKG_OnDDate, lMktBKKHKGSegment);
1658 
1659  // Demand info is not added for purely marketed O&Ds
1660  // Add demand info
1661  // lCabinClassPairList.clear();
1662  // lCabinClassPairList.push_back(lCC_YM2);
1663  // lMktSQ_BKKHKG_OnDDate.setDemandInformation (lCabinClassPairList, 500.0, 20.0, 1.0);
1664  ***********************************************************************************/
1665 
1666 
1667  // ////// CX ///////
1668  // Step 0.2: Flight-date level
1669  // Create a FlightDate (CX12/08-FEB-2010) for CX's Inventory
1670  lFlightNumber = 12;
1671  //lDate = Date_T (2010, 2, 8);
1672  lFlightDateKey = FlightDateKey (lFlightNumber, lDate);
1673 
1674  FlightDate& lCX12_20100208_FD =
1675  FacBom<FlightDate>::instance().create (lFlightDateKey);
1676  FacBomManager::addToListAndMap (lCXInv, lCX12_20100208_FD);
1677  FacBomManager::linkWithParent (lCXInv, lCX12_20100208_FD);
1678 
1679  // Create a (mkt) FlightDate (CX1100/08-FEB-2010) for CX's Inventory
1680  lFlightNumber = 1100;
1681  //lDate = Date_T (2010, 2, 8);
1682  lMktFlightDateKey = FlightDateKey (lFlightNumber, lDate);
1683 
1684  FlightDate& lCX1100_20100208_FD =
1685  FacBom<FlightDate>::instance().create (lMktFlightDateKey);
1686  FacBomManager::addToListAndMap (lCXInv, lCX1100_20100208_FD);
1687  FacBomManager::linkWithParent (lCXInv, lCX1100_20100208_FD);
1688 
1689  // Display the flight-date
1690  // STDAIR_LOG_DEBUG ("FlightDate: " << lAF084_20110320_FD.toString());
1691 
1692  // Step 0.3: Segment-date level
1693  // Create a SegmentDate BKK-HKG for CX's Inventory
1694 
1695  lSegmentDateKey = SegmentDateKey (lBKK, lHKG);
1696 
1697  SegmentDate& lBKKHKGSegment =
1698  FacBom<SegmentDate>::instance().create (lSegmentDateKey);
1699  FacBomManager::addToListAndMap (lCX12_20100208_FD, lBKKHKGSegment);
1700  FacBomManager::linkWithParent (lCX12_20100208_FD, lBKKHKGSegment);
1701 
1702  // Fill the SegmentDate content
1703  lBKKHKGSegment.setBoardingDate (lDate);
1704  lBKKHKGSegment.setOffDate (lDate);
1705  lBKKHKGSegment.setBoardingTime (l1200);
1706  lBKKHKGSegment.setOffTime (l1540);
1707  lBKKHKGSegment.setElapsedTime (l0240);
1708 
1709  // Create a second (mkt) SegmentDate (SIN-BKK) for CX's Inventory
1710  lMktSegmentDateKey = SegmentDateKey (lSIN, lBKK);
1711 
1712  SegmentDate& lMktSINBKKSegment =
1713  FacBom<SegmentDate>::instance().create (lMktSegmentDateKey);
1714  FacBomManager::addToListAndMap (lCX1100_20100208_FD, lMktSINBKKSegment);
1715  FacBomManager::linkWithParent (lCX1100_20100208_FD, lMktSINBKKSegment);
1716 
1717  // Fill the (mkt) SegmentDate content
1718  lMktSINBKKSegment.setBoardingDate (lDate);
1719  lMktSINBKKSegment.setOffDate (lDate);
1720  lMktSINBKKSegment.setBoardingTime (l0820);
1721  lMktSINBKKSegment.setOffTime (l1100);
1722  lMktSINBKKSegment.setElapsedTime (l0340);
1723 
1724  // Step 0.4: Leg-date level
1725  // Create a LegDate (BKK) for CX's Inventory
1726  lLegDateKey = LegDateKey (lBKK);
1727 
1728  LegDate& lBKKLeg = FacBom<LegDate>::instance().create (lLegDateKey);
1729  FacBomManager::addToListAndMap (lCX12_20100208_FD, lBKKLeg);
1730  FacBomManager::linkWithParent (lCX12_20100208_FD, lBKKLeg);
1731 
1732  // Fill the LegDate content
1733  lBKKLeg.setOffPoint (lHKG);
1734  lBKKLeg.setBoardingDate (lDate);
1735  lBKKLeg.setOffDate (lDate);
1736  lBKKLeg.setBoardingTime (l1200);
1737  lBKKLeg.setOffTime (l1540);
1738  lBKKLeg.setElapsedTime (l0240);
1739 
1740  // Display the leg-date
1741  // STDAIR_LOG_DEBUG ("LegDate: " << lCDGLeg.toString());
1742 
1743  // Link the segment-dates with the leg-dates
1744  FacBomManager::addToListAndMap (lBKKLeg, lBKKHKGSegment);
1745  FacBomManager::addToListAndMap (lBKKHKGSegment, lBKKLeg);
1746 
1747  // Step 0.5: segment-cabin level
1748  // Create a SegmentCabin (Y) for the Segment BKK-HKG of CX's Inventory
1749  SegmentCabin& lBKKHKGSegmentYCabin =
1750  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
1751  FacBomManager::addToListAndMap (lBKKHKGSegment, lBKKHKGSegmentYCabin);
1752  FacBomManager::linkWithParent (lBKKHKGSegment, lBKKHKGSegmentYCabin);
1753 
1754  // Create a SegmentCabin (Y) for the (mkt) Segment SIN-BKK of CX's Inventory
1755  SegmentCabin& lMktSINBKKSegmentYCabin =
1756  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
1757  FacBomManager::addToListAndMap (lMktSINBKKSegment, lMktSINBKKSegmentYCabin);
1758  FacBomManager::linkWithParent (lMktSINBKKSegment, lMktSINBKKSegmentYCabin);
1759 
1760  // Step 0.6: leg-cabin level
1761  // Create a LegCabin (Y) for the Leg BKK-HKG on CX's Inventory
1762  LegCabin& lBKKLegYCabin =
1763  FacBom<LegCabin>::instance().create (lYLegCabinKey);
1764  FacBomManager::addToListAndMap (lBKKLeg, lBKKLegYCabin);
1765  FacBomManager::linkWithParent (lBKKLeg, lBKKLegYCabin);
1766 
1767  lCapacity = CabinCapacity_T(100);
1768  lBKKLegYCabin.setCapacities (lCapacity);
1769  lBKKLegYCabin.setAvailabilityPool (lCapacity);
1770 
1771  // Link the segment-dates with the leg-dates
1772  FacBomManager::addToListAndMap (lBKKLegYCabin, lBKKHKGSegmentYCabin,
1773  lBKKHKGSegmentYCabin.getFullerKey());
1774  FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin, lBKKLegYCabin,
1775  lBKKLegYCabin.getFullerKey());
1776 
1777  // Step 0.7: fare family level
1778  // Create a fareFamily (1) for the Segment BKK-HKG, cabin Y on CX's Inv
1779  FareFamily& lBKKHKGSegmentYCabin1Family =
1780  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
1781  FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin,
1782  lBKKHKGSegmentYCabin1Family);
1783  FacBomManager::linkWithParent (lBKKHKGSegmentYCabin,
1784  lBKKHKGSegmentYCabin1Family);
1785 
1786  // Create a FareFamily (1) for the (mkt) Segment SIN-BKK, cabin Y on CX's Inv
1787  FareFamily& lMktSINBKKSegmentYCabin1Family =
1788  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
1789  FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin,
1790  lMktSINBKKSegmentYCabin1Family);
1791  FacBomManager::linkWithParent (lMktSINBKKSegmentYCabin,
1792  lMktSINBKKSegmentYCabin1Family);
1793 
1794 
1795  // Step 0.8: booking class level
1796  // Create a BookingClass (Y) for the
1797  // Segment BKK-HKG, cabin Y, fare family 1 on CX's Inv
1798  BookingClass& lBKKHKGSegmentYCabin1FamilyYClass =
1799  FacBom<BookingClass>::instance().create (lYBookingClassKey);
1800  FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin1Family,
1801  lBKKHKGSegmentYCabin1FamilyYClass);
1802  FacBomManager::linkWithParent (lBKKHKGSegmentYCabin1Family,
1803  lBKKHKGSegmentYCabin1FamilyYClass);
1804 
1805  FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin,
1806  lBKKHKGSegmentYCabin1FamilyYClass);
1807  FacBomManager::addToListAndMap (lBKKHKGSegment,
1808  lBKKHKGSegmentYCabin1FamilyYClass);
1809 
1810  lBKKHKGSegmentYCabin1FamilyYClass.setYield(700);
1811 
1812  // Create a BookingClass (Y) for the (mkt) Segment SIN-BKK, cabin Y,
1813  // fare family 1 on CX's Inv
1814  BookingClass& lMktSINBKKSegmentYCabin1FamilyYClass =
1815  FacBom<BookingClass>::instance().create (lYBookingClassKey);
1816  FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin1Family,
1817  lMktSINBKKSegmentYCabin1FamilyYClass);
1818  FacBomManager::linkWithParent (lMktSINBKKSegmentYCabin1Family,
1819  lMktSINBKKSegmentYCabin1FamilyYClass);
1820 
1821  FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin,
1822  lMktSINBKKSegmentYCabin1FamilyYClass);
1823  FacBomManager::addToListAndMap (lMktSINBKKSegment,
1824  lMktSINBKKSegmentYCabin1FamilyYClass);
1825 
1826  lMktSINBKKSegmentYCabin1FamilyYClass.setYield(700);
1827 
1828  //Create a BookingClass (M) for the
1829  // Segment BKK-HKG, cabin Y, fare family 1 on CX's Inv
1830  BookingClass& lBKKHKGSegmentYCabin1FamilyMClass =
1831  FacBom<BookingClass>::instance().create (lMBookingClassKey);
1832  FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin1Family,
1833  lBKKHKGSegmentYCabin1FamilyMClass);
1834  FacBomManager::linkWithParent (lBKKHKGSegmentYCabin1Family,
1835  lBKKHKGSegmentYCabin1FamilyMClass);
1836 
1837  FacBomManager::addToListAndMap (lBKKHKGSegmentYCabin,
1838  lBKKHKGSegmentYCabin1FamilyMClass);
1839  FacBomManager::addToListAndMap (lBKKHKGSegment,
1840  lBKKHKGSegmentYCabin1FamilyMClass);
1841 
1842  lBKKHKGSegmentYCabin1FamilyMClass.setYield(500);
1843 
1844  // Create a BookingClass (M) for the (mkt) Segment SIN-BKK, cabin Y,
1845  // fare family 1 on CX's Inv
1846  BookingClass& lMktSINBKKSegmentYCabin1FamilyMClass =
1847  FacBom<BookingClass>::instance().create (lMBookingClassKey);
1848  FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin1Family,
1849  lMktSINBKKSegmentYCabin1FamilyMClass);
1850  FacBomManager::linkWithParent (lMktSINBKKSegmentYCabin1Family,
1851  lMktSINBKKSegmentYCabin1FamilyMClass);
1852 
1853  FacBomManager::addToListAndMap (lMktSINBKKSegmentYCabin,
1854  lMktSINBKKSegmentYCabin1FamilyMClass);
1855  FacBomManager::addToListAndMap (lMktSINBKKSegment,
1856  lMktSINBKKSegmentYCabin1FamilyMClass);
1857 
1858  lMktSINBKKSegmentYCabin1FamilyMClass.setYield(500);
1859 
1860  /* =================================================================================== */
1861  // Step 0.9: Partner Inventory
1862  // Create a partner Inventory SQ for CX
1863  const InventoryKey lPartnerSQKey ("SQ");
1864  Inventory& lPartnerSQInv = FacBom<Inventory>::instance().create (lPartnerSQKey);
1865  FacBomManager::addToListAndMap (lCXInv, lPartnerSQInv);
1866  FacBomManager::linkWithParent (lCXInv, lPartnerSQInv);
1867 
1868  // Step 0.9.2 : Flight-date level
1869  lFlightNumber = 11;
1870  lFlightDateKey = FlightDateKey (lFlightNumber, lDate);
1871 
1872  FlightDate& lPartnerSQ11_20100208_FD =
1873  FacBom<FlightDate>::instance().create (lFlightDateKey);
1874  FacBomManager::addToListAndMap (lPartnerSQInv, lPartnerSQ11_20100208_FD);
1875  FacBomManager::linkWithParent (lPartnerSQInv, lPartnerSQ11_20100208_FD);
1876 
1877  lFlightNumber = 1200;
1878  lMktFlightDateKey = FlightDateKey (lFlightNumber, lDate);
1879 
1880  FlightDate& lPartnerSQ1200_20100208_FD =
1881  FacBom<FlightDate>::instance().create (lMktFlightDateKey);
1882  FacBomManager::addToListAndMap (lPartnerSQInv, lPartnerSQ1200_20100208_FD);
1883  FacBomManager::linkWithParent (lPartnerSQInv, lPartnerSQ1200_20100208_FD);
1884 
1885  // Step 0.9.3: Segment-date level
1886  lSegmentDateKey = SegmentDateKey (lSIN, lBKK);
1887 
1888  SegmentDate& lPartnerSINBKKSegment =
1889  FacBom<SegmentDate>::instance().create (lSegmentDateKey);
1890  FacBomManager::addToListAndMap (lPartnerSQ11_20100208_FD, lPartnerSINBKKSegment);
1891  FacBomManager::linkWithParent (lPartnerSQ11_20100208_FD, lPartnerSINBKKSegment);
1892 
1893  lPartnerSINBKKSegment.setBoardingDate (lDate);
1894  lPartnerSINBKKSegment.setOffDate (lDate);
1895  lPartnerSINBKKSegment.setBoardingTime (l0820);
1896  lPartnerSINBKKSegment.setOffTime (l1100);
1897  lPartnerSINBKKSegment.setElapsedTime (l0340);
1898 
1899  lMktSegmentDateKey = SegmentDateKey (lBKK, lHKG);
1900 
1901  SegmentDate& lPartnerMktBKKHKGSegment =
1902  FacBom<SegmentDate>::instance().create (lMktSegmentDateKey);
1903  FacBomManager::addToListAndMap (lPartnerSQ1200_20100208_FD, lPartnerMktBKKHKGSegment);
1904  FacBomManager::linkWithParent (lPartnerSQ1200_20100208_FD, lPartnerMktBKKHKGSegment);
1905 
1906  lPartnerMktBKKHKGSegment.setBoardingDate (lDate);
1907  lPartnerMktBKKHKGSegment.setOffDate (lDate);
1908  lPartnerMktBKKHKGSegment.setBoardingTime (l1200);
1909  lPartnerMktBKKHKGSegment.setOffTime (l1540);
1910  lPartnerMktBKKHKGSegment.setElapsedTime (l0240);
1911 
1912  // Step 0.9.4: Leg-date level
1913  lLegDateKey = LegDateKey (lSIN);
1914 
1915  LegDate& lPartnerSINLeg = FacBom<LegDate>::instance().create (lLegDateKey);
1916  FacBomManager::addToListAndMap (lPartnerSQ11_20100208_FD, lPartnerSINLeg);
1917  FacBomManager::linkWithParent (lPartnerSQ11_20100208_FD, lPartnerSINLeg);
1918 
1919  lPartnerSINLeg.setOffPoint (lBKK);
1920  lPartnerSINLeg.setBoardingDate (lDate);
1921  lPartnerSINLeg.setOffDate (lDate);
1922  lPartnerSINLeg.setBoardingTime (l0820);
1923  lPartnerSINLeg.setOffTime (l1100);
1924  lPartnerSINLeg.setElapsedTime (l0340);
1925 
1926  FacBomManager::addToListAndMap (lPartnerSINLeg, lPartnerSINBKKSegment);
1927  FacBomManager::addToListAndMap (lPartnerSINBKKSegment, lPartnerSINLeg);
1928 
1929  // Step 9.0.5: segment-cabin level
1930 
1931  SegmentCabin& lPartnerSINBKKSegmentYCabin =
1932  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
1933  FacBomManager::addToListAndMap (lPartnerSINBKKSegment, lPartnerSINBKKSegmentYCabin);
1934  FacBomManager::linkWithParent (lPartnerSINBKKSegment, lPartnerSINBKKSegmentYCabin);
1935 
1936  SegmentCabin& lPartnerMktBKKHKGSegmentYCabin =
1937  FacBom<SegmentCabin>::instance().create (lYSegmentCabinKey);
1938  FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegment, lPartnerMktBKKHKGSegmentYCabin);
1939  FacBomManager::linkWithParent (lPartnerMktBKKHKGSegment, lPartnerMktBKKHKGSegmentYCabin);
1940 
1941  // Step 9.0.6: leg-cabin level
1942 
1943  LegCabin& lPartnerSINLegYCabin =
1944  FacBom<LegCabin>::instance().create (lYLegCabinKey);
1945  FacBomManager::addToListAndMap (lPartnerSINLeg, lPartnerSINLegYCabin);
1946  FacBomManager::linkWithParent (lPartnerSINLeg, lPartnerSINLegYCabin);
1947 
1948  lCapacity = CabinCapacity_T(999);
1949  lPartnerSINLegYCabin.setCapacities (lCapacity);
1950  lPartnerSINLegYCabin.setAvailabilityPool (lCapacity);
1951 
1952  FacBomManager::addToListAndMap (lPartnerSINLegYCabin, lPartnerSINBKKSegmentYCabin,
1953  lPartnerSINBKKSegmentYCabin.getFullerKey());
1954  FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin, lPartnerSINLegYCabin,
1955  lPartnerSINLegYCabin.getFullerKey());
1956 
1957  // Step 9.0.7: fare family level
1958 
1959  FareFamily& lPartnerSINBKKSegmentYCabin1Family =
1960  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
1961  FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin,
1962  lPartnerSINBKKSegmentYCabin1Family);
1963  FacBomManager::linkWithParent (lPartnerSINBKKSegmentYCabin,
1964  lPartnerSINBKKSegmentYCabin1Family);
1965 
1966  FareFamily& lPartnerMktBKKHKGSegmentYCabin1Family =
1967  FacBom<FareFamily>::instance().create (l1FareFamilyKey);
1968  FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin,
1969  lPartnerMktBKKHKGSegmentYCabin1Family);
1970  FacBomManager::linkWithParent (lPartnerMktBKKHKGSegmentYCabin,
1971  lPartnerMktBKKHKGSegmentYCabin1Family);
1972 
1973 
1974  // Step 9.0.8: booking class level
1975 
1976  BookingClass& lPartnerSINBKKSegmentYCabin1FamilyYClass =
1977  FacBom<BookingClass>::instance().create (lYBookingClassKey);
1978  FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin1Family,
1979  lPartnerSINBKKSegmentYCabin1FamilyYClass);
1980  FacBomManager::linkWithParent (lPartnerSINBKKSegmentYCabin1Family,
1981  lPartnerSINBKKSegmentYCabin1FamilyYClass);
1982 
1983  FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin,
1984  lPartnerSINBKKSegmentYCabin1FamilyYClass);
1985  FacBomManager::addToListAndMap (lPartnerSINBKKSegment,
1986  lPartnerSINBKKSegmentYCabin1FamilyYClass);
1987 
1988  BookingClass& lPartnerMktBKKHKGSegmentYCabin1FamilyYClass =
1989  FacBom<BookingClass>::instance().create (lYBookingClassKey);
1990  FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin1Family,
1991  lPartnerMktBKKHKGSegmentYCabin1FamilyYClass);
1992  FacBomManager::linkWithParent (lPartnerMktBKKHKGSegmentYCabin1Family,
1993  lPartnerMktBKKHKGSegmentYCabin1FamilyYClass);
1994 
1995  FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin,
1996  lPartnerMktBKKHKGSegmentYCabin1FamilyYClass);
1997  FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegment,
1998  lPartnerMktBKKHKGSegmentYCabin1FamilyYClass);
1999 
2000  BookingClass& lPartnerSINBKKSegmentYCabin1FamilyMClass =
2001  FacBom<BookingClass>::instance().create (lMBookingClassKey);
2002  FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin1Family,
2003  lPartnerSINBKKSegmentYCabin1FamilyMClass);
2004  FacBomManager::linkWithParent (lPartnerSINBKKSegmentYCabin1Family,
2005  lPartnerSINBKKSegmentYCabin1FamilyMClass);
2006 
2007  FacBomManager::addToListAndMap (lPartnerSINBKKSegmentYCabin,
2008  lPartnerSINBKKSegmentYCabin1FamilyMClass);
2009  FacBomManager::addToListAndMap (lPartnerSINBKKSegment,
2010  lPartnerSINBKKSegmentYCabin1FamilyMClass);
2011 
2012  BookingClass& lPartnerMktBKKHKGSegmentYCabin1FamilyMClass =
2013  FacBom<BookingClass>::instance().create (lMBookingClassKey);
2014  FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin1Family,
2015  lPartnerMktBKKHKGSegmentYCabin1FamilyMClass);
2016  FacBomManager::linkWithParent (lPartnerMktBKKHKGSegmentYCabin1Family,
2017  lPartnerMktBKKHKGSegmentYCabin1FamilyMClass);
2018 
2019  FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegmentYCabin,
2020  lPartnerMktBKKHKGSegmentYCabin1FamilyMClass);
2021  FacBomManager::addToListAndMap (lPartnerMktBKKHKGSegment,
2022  lPartnerMktBKKHKGSegmentYCabin1FamilyMClass);
2023 
2024  // Step 9.0.9: link CX inventory objects to Partner SQ inventory objects
2025  FacBomManager::addToList (lBKKHKGSegment, lPartnerMktBKKHKGSegment);
2026 
2027  lMktSINBKKSegment.linkWithOperating (lPartnerSINBKKSegment);
2028 
2029  /* =================================================================================== */
2030 
2031  // Step 1.0: O&D level
2032  // Create an O&D Date (CX1100/08-FEB-2010/SIN-BKK-CX12/08-FEB-2010/BKK-HKG) for CX's Inventory
2033  OnDString_T lMktCXSINBKKOnDStr = "CX;1100,2010-Feb-08;SIN,BKK";
2034  OnDString_T lCXBKKHKGOnDStr = "CX;12,2010-Feb-08;BKK,HKG";
2035  lOnDStringList.clear();
2036  lOnDStringList.push_back (lMktCXSINBKKOnDStr);
2037  lOnDStringList.push_back (lCXBKKHKGOnDStr);
2038 
2039  lOnDDateKey = OnDDateKey(lOnDStringList);
2040  OnDDate& lCX_SINHKG_OnDDate =
2041  FacBom<OnDDate>::instance().create (lOnDDateKey);
2042  // Link to the inventory
2043  FacBomManager::addToListAndMap (lCXInv, lCX_SINHKG_OnDDate);
2044  FacBomManager::linkWithParent (lCXInv, lCX_SINHKG_OnDDate);
2045 
2046  // Add the segments
2047  FacBomManager::addToListAndMap (lCX_SINHKG_OnDDate, lMktSINBKKSegment);
2048  FacBomManager::addToListAndMap (lCX_SINHKG_OnDDate, lBKKHKGSegment);
2049 
2050  // Add total forecast info for cabin Y.
2051  lCX_SINHKG_OnDDate.setTotalForecast (lY, lWTP750Mean60StdDev6);
2052 
2053  // Add demand info
2054  lCabinClassPairList.clear();
2055  lCabinClassPairList.push_back(lCC_YM1);
2056  lCabinClassPairList.push_back(lCC_YM2);
2057  lCX_SINHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield850Mean20StdDev2);
2058 
2059  lCabinClassPairList.clear();
2060  lCabinClassPairList.push_back(lCC_YY1);
2061  lCabinClassPairList.push_back(lCC_YY2);
2062  lCX_SINHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield1200Mean10StdDev1);
2063 
2064  /***********************************************************************************
2065  // Create an O&D Date (CX1100/08-FEB-2010/SIN-BKK) for CX's Inventory
2066  lFullKeyList.clear();
2067  lFullKeyList.push_back (lMktCXSINBKKFullKeyStr);
2068 
2069  lOnDDateKey = OnDDateKey(lFullKeyList);
2070  OnDDate& lMktCX_SINBKK_OnDDate =
2071  FacBom<OnDDate>::instance().create (lOnDDateKey);
2072  // Link to the inventory
2073  FacBomManager::addToListAndMap (lCXInv, lMktCX_SINBKK_OnDDate);
2074  FacBomManager::linkWithParent (lCXInv, lMktCX_SINBKK_OnDDate);
2075 
2076  // Add the segments
2077  FacBomManager::addToListAndMap (lMktCX_SINBKK_OnDDate, lMktSINBKKSegment);
2078 
2079  // Demand info is not added for purely marketed O&Ds
2080  // Add demand info
2081  // lCabinClassPairList.clear();
2082  // lCabinClassPairList.push_back(lCC_YM1);
2083  // lMktCX_SINBKK_OnDDate.setDemandInformation (lCabinClassPairList, 500.0, 20.0, 1.0);
2084  *************************************************************************************/
2085 
2086  // Create an O&D Date (CX12/08-FEB-2010/BKK-HKG) for CX's Inventory
2087  lOnDStringList.clear();
2088  lOnDStringList.push_back (lCXBKKHKGOnDStr);
2089 
2090  lOnDDateKey = OnDDateKey(lOnDStringList);
2091  OnDDate& lCX_BKKHKG_OnDDate =
2092  FacBom<OnDDate>::instance().create (lOnDDateKey);
2093  // Link to the inventory
2094  FacBomManager::addToListAndMap (lCXInv, lCX_BKKHKG_OnDDate);
2095  FacBomManager::linkWithParent (lCXInv, lCX_BKKHKG_OnDDate);
2096 
2097  // Add the segments
2098  FacBomManager::addToListAndMap (lCX_BKKHKG_OnDDate, lBKKHKGSegment);
2099 
2100  // Add total forecast info for cabin Y.
2101  lCX_BKKHKG_OnDDate.setTotalForecast (lY, lWTP400Mean60StdDev6);
2102 
2103  // Add demand info
2104  lCabinClassPairList.clear();
2105  lCabinClassPairList.push_back(lCC_YM2);
2106  lCX_BKKHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield500Mean20StdDev1);
2107 
2108  lCabinClassPairList.clear();
2109  lCabinClassPairList.push_back(lCC_YY2);
2110  const YieldDemandPair_T lYield700Mean10StdDev1 (lYield700, lMean10StdDev1 );
2111  lCX_BKKHKG_OnDDate.setDemandInformation (lCabinClassPairList, lYield700Mean10StdDev1);
2112 
2113  /*================================================================================
2114  ================================================================================
2115  ================================================================================*/
2116  // Schedule:
2117  // SQ:
2118  // Step 1: flight period level
2119  // Create a flight period for SQ11:
2120  const DoWStruct lDoWSrtuct ("1111111");
2121  const Date_T lDateRangeStart (2010, boost::gregorian::Feb, 8);
2122  const Date_T lDateRangeEnd (2010, boost::gregorian::Feb, 9);
2123  const DatePeriod_T lDatePeriod (lDateRangeStart, lDateRangeEnd);
2124  const PeriodStruct lPeriodStruct (lDatePeriod,lDoWSrtuct);
2125 
2126  lFlightNumber = FlightNumber_T (11);
2127 
2128  FlightPeriodKey lFlightPeriodKey (lFlightNumber, lPeriodStruct);
2129 
2130  FlightPeriod& lSQ11FlightPeriod =
2131  FacBom<FlightPeriod>::instance().create (lFlightPeriodKey);
2132  FacBomManager::addToListAndMap (lSQInv, lSQ11FlightPeriod);
2133  FacBomManager::linkWithParent (lSQInv, lSQ11FlightPeriod);
2134 
2135  // Step 2: segment period level
2136  // Create a segment period for SIN-BKK:
2137 
2138  SegmentPeriodKey lSegmentPeriodKey (lSIN, lBKK);
2139 
2140  SegmentPeriod& lSINBKKSegmentPeriod =
2141  FacBom<SegmentPeriod>::instance().create (lSegmentPeriodKey);
2142  FacBomManager::addToListAndMap (lSQ11FlightPeriod, lSINBKKSegmentPeriod);
2143  FacBomManager::linkWithParent (lSQ11FlightPeriod, lSINBKKSegmentPeriod);
2144 
2145  lSINBKKSegmentPeriod.setBoardingTime (l0820);
2146  lSINBKKSegmentPeriod.setOffTime (l1100);
2147  lSINBKKSegmentPeriod.setElapsedTime (l0340);
2148  ClassList_String_T lYM ("YM");
2149  lSINBKKSegmentPeriod.addCabinBookingClassList (lY,lYM);
2150 
2151  // CX:
2152  // Step 1: flight period level
2153  // Create a flight period for CX12:
2154  lFlightNumber = FlightNumber_T (12);
2155 
2156  lFlightPeriodKey = FlightPeriodKey(lFlightNumber, lPeriodStruct);
2157 
2158  FlightPeriod& lCX12FlightPeriod =
2159  FacBom<FlightPeriod>::instance().create (lFlightPeriodKey);
2160  FacBomManager::addToListAndMap (lCXInv, lCX12FlightPeriod);
2161  FacBomManager::linkWithParent (lCXInv, lCX12FlightPeriod);
2162 
2163  // Step 2: segment period level
2164  // Create a segment period for BKK-HKG:
2165 
2166  lSegmentPeriodKey = SegmentPeriodKey (lBKK, lHKG);
2167 
2168  SegmentPeriod& lBKKHKGSegmentPeriod =
2169  FacBom<SegmentPeriod>::instance().create (lSegmentPeriodKey);
2170  FacBomManager::addToListAndMap (lCX12FlightPeriod, lBKKHKGSegmentPeriod);
2171  FacBomManager::linkWithParent (lCX12FlightPeriod, lBKKHKGSegmentPeriod);
2172 
2173  lBKKHKGSegmentPeriod.setBoardingTime (l1200);
2174  lBKKHKGSegmentPeriod.setOffTime (l1540);
2175  lBKKHKGSegmentPeriod.setElapsedTime (l0240);
2176  lBKKHKGSegmentPeriod.addCabinBookingClassList (lY,lYM);
2177 
2178  }
2179 
2180  // //////////////////////////////////////////////////////////////////////
2181  void CmdBomManager::buildPartnershipsSamplePricing (BomRoot& ioBomRoot) {
2182 
2184 
2185  /*===================================================================================*/
2186  // First airport pair SIN-BKK.
2187  // Set the airport-pair primary key.
2188  AirportPairKey lAirportPairKey ("SIN", "BKK");
2189 
2190  // Create the AirportPairKey object and link it to the ioBomRoot object.
2191  AirportPair& lSINBKKAirportPair =
2192  FacBom<AirportPair>::instance().create (lAirportPairKey);
2193  FacBomManager::addToListAndMap (ioBomRoot, lSINBKKAirportPair);
2194  FacBomManager::linkWithParent (ioBomRoot, lSINBKKAirportPair);
2195 
2196  // Set the fare date-period primary key.
2197  const Date_T lDateRangeStart (2010, boost::gregorian::Jan, 15);
2198  const Date_T lDateRangeEnd (2010, boost::gregorian::Dec, 31);
2199  const DatePeriod_T lDateRange (lDateRangeStart, lDateRangeEnd);
2200  const DatePeriodKey lDatePeriodKey (lDateRange);
2201 
2202  // Create the DatePeriodKey object and link it to the PosChannel object.
2203  DatePeriod& lSINBKKDatePeriod =
2204  FacBom<DatePeriod>::instance().create (lDatePeriodKey);
2205  FacBomManager::addToListAndMap (lSINBKKAirportPair, lSINBKKDatePeriod);
2206  FacBomManager::linkWithParent (lSINBKKAirportPair, lSINBKKDatePeriod);
2207 
2208  // Set the point-of-sale-channel primary key.
2209  PosChannelKey lPosChannelKey ("SIN","IN");
2210 
2211  // Create the PositionKey object and link it to the AirportPair object.
2212  PosChannel& lSINPosChannel =
2213  FacBom<PosChannel>::instance().create (lPosChannelKey);
2214  FacBomManager::addToListAndMap (lSINBKKDatePeriod, lSINPosChannel);
2215  FacBomManager::linkWithParent (lSINBKKDatePeriod, lSINPosChannel);
2216 
2217  // Set the fare time-period primary key.
2218  const Time_T lTimeRangeStart (0, 0, 0);
2219  const Time_T lTimeRangeEnd (23, 0, 0);
2220  const TimePeriodKey lFareTimePeriodKey (lTimeRangeStart,
2221  lTimeRangeEnd);
2222 
2223  // Create the TimePeriodKey and link it to the DatePeriod object.
2224  TimePeriod& lSINBKKFareTimePeriod =
2225  FacBom<TimePeriod>::instance().create (lFareTimePeriodKey);
2226  FacBomManager::addToListAndMap (lSINPosChannel, lSINBKKFareTimePeriod);
2227  FacBomManager::linkWithParent (lSINPosChannel, lSINBKKFareTimePeriod);
2228 
2229  // Generate the FareRule
2230  const FareFeaturesKey lFareFeaturesKey (TRIP_TYPE_ONE_WAY,
2232  SATURDAY_STAY,
2233  CHANGE_FEES,
2236 
2237  // Create the FareFeaturesKey and link it to the TimePeriod object.
2238  FareFeatures& lSINBKKFareFeatures =
2239  FacBom<FareFeatures>::instance().create (lFareFeaturesKey);
2240  FacBomManager::addToListAndMap (lSINBKKFareTimePeriod, lSINBKKFareFeatures);
2241  FacBomManager::linkWithParent (lSINBKKFareTimePeriod, lSINBKKFareFeatures);
2242 
2243  // Generate Segment Features and link them to their FareRule.
2244  AirlineCodeList_T lSQAirlineCodeList;
2245  lSQAirlineCodeList.push_back ("SQ");
2246 
2247  ClassList_StringList_T lYClassCodeList;
2248  lYClassCodeList.push_back ("Y");
2249  const AirlineClassListKey lSQAirlineYClassListKey (lSQAirlineCodeList,
2250  lYClassCodeList);
2251 
2252  ClassList_StringList_T lMClassCodeList;
2253  lMClassCodeList.push_back ("M");
2254  const AirlineClassListKey lSQAirlineMClassListKey (lSQAirlineCodeList,
2255  lMClassCodeList);
2256 
2257  // Create the AirlineClassListKey and link it to the FareFeatures object.
2258  AirlineClassList& lSQAirlineYClassList =
2259  FacBom<AirlineClassList>::instance().create (lSQAirlineYClassListKey);
2260  lSQAirlineYClassList.setFare(700);
2261  FacBomManager::addToListAndMap (lSINBKKFareFeatures, lSQAirlineYClassList);
2262  FacBomManager::linkWithParent (lSINBKKFareFeatures, lSQAirlineYClassList);
2263 
2264  AirlineClassList& lSQAirlineMClassList =
2265  FacBom<AirlineClassList>::instance().create (lSQAirlineMClassListKey);
2266  lSQAirlineMClassList.setFare(500);
2267  FacBomManager::addToListAndMap (lSINBKKFareFeatures, lSQAirlineMClassList);
2268  FacBomManager::linkWithParent (lSINBKKFareFeatures, lSQAirlineMClassList);
2269 
2270  /*===================================================================================*/
2271  // Second airport pair BKK-HKG.
2272  // Set the airport-pair primary key.
2273  lAirportPairKey = AirportPairKey ("BKK", "HKG");
2274 
2275  // Create the AirportPairKey object and link it to the ioBomRoot object.
2276  AirportPair& lBKKHKGAirportPair =
2277  FacBom<AirportPair>::instance().create (lAirportPairKey);
2278  FacBomManager::addToListAndMap (ioBomRoot, lBKKHKGAirportPair);
2279  FacBomManager::linkWithParent (ioBomRoot, lBKKHKGAirportPair);
2280 
2281  // Set the fare date-period primary key.
2282  // Use the same as previously.
2283 
2284  // Create the DatePeriodKey object and link it to the PosChannel object.
2285  DatePeriod& lBKKHKGDatePeriod =
2286  FacBom<DatePeriod>::instance().create (lDatePeriodKey);
2287  FacBomManager::addToListAndMap (lBKKHKGAirportPair, lBKKHKGDatePeriod);
2288  FacBomManager::linkWithParent (lBKKHKGAirportPair, lBKKHKGDatePeriod);
2289 
2290  // Set the point-of-sale-channel primary key.
2291  lPosChannelKey = PosChannelKey("BKK","IN");
2292 
2293  // Create the PositionKey object and link it to the AirportPair object.
2294  PosChannel& lBKKPosChannel =
2295  FacBom<PosChannel>::instance().create (lPosChannelKey);
2296  FacBomManager::addToListAndMap (lBKKHKGDatePeriod, lBKKPosChannel);
2297  FacBomManager::linkWithParent (lBKKHKGDatePeriod, lBKKPosChannel);
2298 
2299  // Set the fare time-period primary key.
2300  // Use the same as previously.
2301 
2302  // Create the TimePeriodKey and link it to the DatePeriod object.
2303  TimePeriod& lBKKHKGFareTimePeriod =
2304  FacBom<TimePeriod>::instance().create (lFareTimePeriodKey);
2305  FacBomManager::addToListAndMap (lBKKPosChannel, lBKKHKGFareTimePeriod);
2306  FacBomManager::linkWithParent (lBKKPosChannel, lBKKHKGFareTimePeriod);
2307 
2308  // Generate the FareRule
2309  // Use the same key as previously.
2310 
2311  // Create the FareFeaturesKey and link it to the TimePeriod object.
2312  FareFeatures& lBKKHKGFareFeatures =
2313  FacBom<FareFeatures>::instance().create (lFareFeaturesKey);
2314  FacBomManager::addToListAndMap (lBKKHKGFareTimePeriod, lBKKHKGFareFeatures);
2315  FacBomManager::linkWithParent (lBKKHKGFareTimePeriod, lBKKHKGFareFeatures);
2316 
2317  // Generate Segment Features and link them to their FareRule.
2318  AirlineCodeList_T lCXAirlineCodeList;
2319  lCXAirlineCodeList.push_back ("CX");
2320 
2321  const AirlineClassListKey lCXAirlineYClassListKey (lCXAirlineCodeList,
2322  lYClassCodeList);
2323 
2324  const AirlineClassListKey lCXAirlineMClassListKey (lCXAirlineCodeList,
2325  lMClassCodeList);
2326 
2327  // Create the AirlineClassListKey and link it to the FareFeatures object.
2328  AirlineClassList& lCXAirlineYClassList =
2329  FacBom<AirlineClassList>::instance().create (lCXAirlineYClassListKey);
2330  lCXAirlineYClassList.setFare(700);
2331  FacBomManager::addToListAndMap (lBKKHKGFareFeatures, lCXAirlineYClassList);
2332  FacBomManager::linkWithParent (lBKKHKGFareFeatures, lCXAirlineYClassList);
2333 
2334  AirlineClassList& lCXAirlineMClassList =
2335  FacBom<AirlineClassList>::instance().create (lCXAirlineMClassListKey);
2336  lCXAirlineMClassList.setFare(500);
2337  FacBomManager::addToListAndMap (lBKKHKGFareFeatures, lCXAirlineMClassList);
2338  FacBomManager::linkWithParent (lBKKHKGFareFeatures, lCXAirlineMClassList);
2339 
2340  /*===================================================================================*/
2341  // Third airport pair SIN-HKG.
2342  // Set the airport-pair primary key.
2343  lAirportPairKey = AirportPairKey ("SIN", "HKG");
2344 
2345  // Create the AirportPairKey object and link it to the ioBomRoot object.
2346  AirportPair& lSINHKGAirportPair =
2347  FacBom<AirportPair>::instance().create (lAirportPairKey);
2348  FacBomManager::addToListAndMap (ioBomRoot, lSINHKGAirportPair);
2349  FacBomManager::linkWithParent (ioBomRoot, lSINHKGAirportPair);
2350 
2351  // Set the fare date-period primary key.
2352  // Use the same as previously.
2353 
2354  // Create the DatePeriodKey object and link it to the PosChannel object.
2355  DatePeriod& lSINHKGDatePeriod =
2356  FacBom<DatePeriod>::instance().create (lDatePeriodKey);
2357  FacBomManager::addToListAndMap (lSINHKGAirportPair, lSINHKGDatePeriod);
2358  FacBomManager::linkWithParent (lSINHKGAirportPair, lSINHKGDatePeriod);
2359 
2360  // Set the point-of-sale-channel primary key.
2361  lPosChannelKey = PosChannelKey("SIN","IN");
2362 
2363  // Create the PositionKey object and link it to the AirportPair object.
2364  PosChannel& lOnDSINPosChannel =
2365  FacBom<PosChannel>::instance().create (lPosChannelKey);
2366  FacBomManager::addToListAndMap (lSINHKGDatePeriod, lOnDSINPosChannel);
2367  FacBomManager::linkWithParent (lSINHKGDatePeriod, lOnDSINPosChannel);
2368 
2369  // Set the fare time-period primary key.
2370  // Use the same as previously.
2371 
2372  // Create the TimePeriodKey and link it to the DatePeriod object.
2373  TimePeriod& lSINHKGFareTimePeriod =
2374  FacBom<TimePeriod>::instance().create (lFareTimePeriodKey);
2375  FacBomManager::addToListAndMap (lOnDSINPosChannel, lSINHKGFareTimePeriod);
2376  FacBomManager::linkWithParent (lOnDSINPosChannel, lSINHKGFareTimePeriod);
2377 
2378  // Generate the FareRule
2379  // Use the same key as previously.
2380 
2381  // Create the FareFeaturesKey and link it to the TimePeriod object.
2382  FareFeatures& lSINHKGFareFeatures =
2383  FacBom<FareFeatures>::instance().create (lFareFeaturesKey);
2384  FacBomManager::addToListAndMap (lSINHKGFareTimePeriod, lSINHKGFareFeatures);
2385  FacBomManager::linkWithParent (lSINHKGFareTimePeriod, lSINHKGFareFeatures);
2386 
2387  // Generate Segment Features and link them to their FareRule.
2388  AirlineCodeList_T lSQ_CXAirlineCodeList;
2389  lSQ_CXAirlineCodeList.push_back ("SQ");
2390  lSQ_CXAirlineCodeList.push_back ("CX");
2391 
2392  ClassList_StringList_T lY_YClassCodeList;
2393  lY_YClassCodeList.push_back ("Y");
2394  lY_YClassCodeList.push_back ("Y");
2395  const AirlineClassListKey lSQ_CXAirlineYClassListKey (lSQ_CXAirlineCodeList,
2396  lY_YClassCodeList);
2397 
2398  ClassList_StringList_T lM_MClassCodeList;
2399  lM_MClassCodeList.push_back ("M");
2400  lM_MClassCodeList.push_back ("M");
2401  const AirlineClassListKey lSQ_CXAirlineMClassListKey (lSQ_CXAirlineCodeList,
2402  lM_MClassCodeList);
2403 
2404  // Create the AirlineClassListKey and link it to the FareFeatures object.
2405  AirlineClassList& lSQ_CXAirlineYClassList =
2406  FacBom<AirlineClassList>::instance().create (lSQ_CXAirlineYClassListKey);
2407  lSQ_CXAirlineYClassList.setFare(1200);
2408  FacBomManager::addToListAndMap (lSINHKGFareFeatures, lSQ_CXAirlineYClassList);
2409  FacBomManager::linkWithParent (lSINHKGFareFeatures, lSQ_CXAirlineYClassList);
2410 
2411  AirlineClassList& lSQ_CXAirlineMClassList =
2412  FacBom<AirlineClassList>::instance().create (lSQ_CXAirlineMClassListKey);
2413  lSQ_CXAirlineMClassList.setFare(850);
2414  FacBomManager::addToListAndMap (lSINHKGFareFeatures, lSQ_CXAirlineMClassList);
2415  FacBomManager::linkWithParent (lSINHKGFareFeatures, lSQ_CXAirlineMClassList);
2416 
2417 
2419 
2420  /*===================================================================================*/
2421 
2422  // Use the same airport pair, and date period for adding SQ SIN-BKK yields.
2423 
2424  // Set the point-of-sale-channel primary key.
2425  lPosChannelKey = PosChannelKey(DEFAULT_POS, DEFAULT_CHANNEL);
2426 
2427  // Create the PositionKey object and link it to the AirportPair object.
2428  PosChannel& lRAC_SINBKKPosChannel =
2429  FacBom<PosChannel>::instance().create (lPosChannelKey);
2430  FacBomManager::addToListAndMap (lSINBKKDatePeriod, lRAC_SINBKKPosChannel);
2431  FacBomManager::linkWithParent (lSINBKKDatePeriod, lRAC_SINBKKPosChannel);
2432 
2433  // Set the yield time-period primary key.
2434  const TimePeriodKey lYieldTimePeriodKey (lTimeRangeStart,
2435  lTimeRangeEnd);
2436 
2437  // Create the TimePeriodKey and link it to the DatePeriod object.
2438  TimePeriod& lSINBKKYieldTimePeriod =
2439  FacBom<TimePeriod>::instance().create (lYieldTimePeriodKey);
2440  FacBomManager::addToListAndMap (lRAC_SINBKKPosChannel, lSINBKKYieldTimePeriod);
2441  FacBomManager::linkWithParent (lRAC_SINBKKPosChannel, lSINBKKYieldTimePeriod);
2442 
2443  // Generate the YieldRule
2444  const YieldFeaturesKey lYieldFeaturesKey (TRIP_TYPE_ONE_WAY,
2445  CABIN_Y);
2446 
2447  // Create the YieldFeaturesKey and link it to the TimePeriod object.
2448  YieldFeatures& lSINBKKYieldFeatures =
2449  FacBom<YieldFeatures>::instance().create (lYieldFeaturesKey);
2450  FacBomManager::addToListAndMap (lSINBKKYieldTimePeriod, lSINBKKYieldFeatures);
2451  FacBomManager::linkWithParent (lSINBKKYieldTimePeriod, lSINBKKYieldFeatures);
2452 
2453  // Generate Segment Features and link them to their YieldRule.
2454  // Use the same key as previously.
2455 
2456  // Create the AirlineClassListKey and link it to the YieldFeatures object.
2457  AirlineClassList& lRAC_SQAirlineYClassList =
2458  FacBom<AirlineClassList>::instance().create (lSQAirlineYClassListKey);
2459  lRAC_SQAirlineYClassList.setYield(700);
2460  FacBomManager::addToListAndMap (lSINBKKYieldFeatures, lRAC_SQAirlineYClassList);
2461  FacBomManager::linkWithParent (lSINBKKYieldFeatures, lRAC_SQAirlineYClassList);
2462 
2463  AirlineClassList& lRAC_SQAirlineMClassList =
2464  FacBom<AirlineClassList>::instance().create (lSQAirlineMClassListKey);
2465  lRAC_SQAirlineMClassList.setYield(500);
2466  FacBomManager::addToListAndMap (lSINBKKYieldFeatures, lRAC_SQAirlineMClassList);
2467  FacBomManager::linkWithParent (lSINBKKYieldFeatures, lRAC_SQAirlineMClassList);
2468 
2469  /*===================================================================================*/
2470 
2471  // Use the same airport pair, and date period for adding CX BKK-HKG yields.
2472 
2473  // Set the point-of-sale-channel primary key.
2474  // Use the same as previously.
2475 
2476  // Create the PositionKey object and link it to the AirportPair object.
2477  PosChannel& lRAC_BKKHKGPosChannel =
2478  FacBom<PosChannel>::instance().create (lPosChannelKey);
2479  FacBomManager::addToListAndMap (lBKKHKGDatePeriod, lRAC_BKKHKGPosChannel);
2480  FacBomManager::linkWithParent (lBKKHKGDatePeriod, lRAC_BKKHKGPosChannel);
2481 
2482  // Set the yield time-period primary key.
2483  // Use the same as previously.
2484 
2485  // Create the TimePeriodKey and link it to the DatePeriod object.
2486  TimePeriod& lBKKHKGYieldTimePeriod =
2487  FacBom<TimePeriod>::instance().create (lYieldTimePeriodKey);
2488  FacBomManager::addToListAndMap (lRAC_BKKHKGPosChannel, lBKKHKGYieldTimePeriod);
2489  FacBomManager::linkWithParent (lRAC_BKKHKGPosChannel, lBKKHKGYieldTimePeriod);
2490 
2491  // Generate the YieldRule
2492  // Use the same key as previously.
2493 
2494  // Create the YieldFeaturesKey and link it to the TimePeriod object.
2495  YieldFeatures& lBKKHKGYieldFeatures =
2496  FacBom<YieldFeatures>::instance().create (lYieldFeaturesKey);
2497  FacBomManager::addToListAndMap (lBKKHKGYieldTimePeriod, lBKKHKGYieldFeatures);
2498  FacBomManager::linkWithParent (lBKKHKGYieldTimePeriod, lBKKHKGYieldFeatures);
2499 
2500  // Generate Segment Features and link them to their YieldRule.
2501  // Use the same key as previously.
2502 
2503  // Create the AirlineClassListKey and link it to the YieldFeatures object.
2504  AirlineClassList& lRAC_CXAirlineYClassList =
2505  FacBom<AirlineClassList>::instance().create (lCXAirlineYClassListKey);
2506  lRAC_CXAirlineYClassList.setYield(700);
2507  FacBomManager::addToListAndMap (lBKKHKGYieldFeatures, lRAC_CXAirlineYClassList);
2508  FacBomManager::linkWithParent (lBKKHKGYieldFeatures, lRAC_CXAirlineYClassList);
2509 
2510  AirlineClassList& lRAC_CXAirlineMClassList =
2511  FacBom<AirlineClassList>::instance().create (lCXAirlineMClassListKey);
2512  lRAC_CXAirlineMClassList.setYield(500);
2513  FacBomManager::addToListAndMap (lBKKHKGYieldFeatures, lRAC_CXAirlineMClassList);
2514  FacBomManager::linkWithParent (lBKKHKGYieldFeatures, lRAC_CXAirlineMClassList);
2515 
2516  /*===================================================================================*/
2517 
2518  // Use the same airport pair, and date period for SQ-CX SIN-HKG
2519 
2520  // Set the point-of-sale-channel primary key.
2521  // Use the same as previously.
2522 
2523  // Create the PositionKey object and link it to the AirportPair object.
2524  PosChannel& lRAC_SINHKGChannel =
2525  FacBom<PosChannel>::instance().create (lPosChannelKey);
2526  FacBomManager::addToListAndMap (lSINHKGDatePeriod, lRAC_SINHKGChannel);
2527  FacBomManager::linkWithParent (lSINHKGDatePeriod, lRAC_SINHKGChannel);
2528 
2529  // Set the yield time-period primary key.
2530  // Use the same as previously.
2531 
2532  // Create the TimePeriodKey and link it to the DatePeriod object.
2533  TimePeriod& lSINHKGYieldTimePeriod =
2534  FacBom<TimePeriod>::instance().create (lYieldTimePeriodKey);
2535  FacBomManager::addToListAndMap (lRAC_SINHKGChannel, lSINHKGYieldTimePeriod);
2536  FacBomManager::linkWithParent (lRAC_SINHKGChannel, lSINHKGYieldTimePeriod);
2537 
2538  // Generate the YieldRule
2539  // Use the same key as previously.
2540 
2541  // Create the YieldFeaturesKey and link it to the TimePeriod object.
2542  YieldFeatures& lSINHKGYieldFeatures =
2543  FacBom<YieldFeatures>::instance().create (lYieldFeaturesKey);
2544  FacBomManager::addToListAndMap (lSINHKGYieldTimePeriod, lSINHKGYieldFeatures);
2545  FacBomManager::linkWithParent (lSINHKGYieldTimePeriod, lSINHKGYieldFeatures);
2546 
2547  // Generate Segment Features and link them to their YieldRule.
2548  // Use the same key as previously
2549 
2550  // Create the AirlineClassListKey and link it to the YieldFeatures object.
2551  AirlineClassList& lRAC_SQ_CXAirlineYClassList =
2552  FacBom<AirlineClassList>::instance().create (lSQ_CXAirlineYClassListKey);
2553  lRAC_SQ_CXAirlineYClassList.setYield(1200);
2554  FacBomManager::addToListAndMap (lSINHKGYieldFeatures, lRAC_SQ_CXAirlineYClassList);
2555  FacBomManager::linkWithParent (lSINHKGYieldFeatures, lRAC_SQ_CXAirlineYClassList);
2556 
2557  AirlineClassList& lRAC_SQ_CXAirlineMClassList =
2558  FacBom<AirlineClassList>::instance().create (lSQ_CXAirlineMClassListKey);
2559  lRAC_SQ_CXAirlineMClassList.setYield(850);
2560  FacBomManager::addToListAndMap (lSINHKGYieldFeatures, lRAC_SQ_CXAirlineMClassList);
2561  FacBomManager::linkWithParent (lSINHKGYieldFeatures, lRAC_SQ_CXAirlineMClassList);
2562 
2563  }
2564 
2565 }
2566