$treeview $search $mathjax
00001 // ////////////////////////////////////////////////////////////////////// 00002 // Import section 00003 // ////////////////////////////////////////////////////////////////////// 00004 // STL 00005 #include <cassert> 00006 // STDAIR 00007 #include <stdair/basic/BasConst_Inventory.hpp> 00008 #include <stdair/bom/BomManager.hpp> 00009 #include <stdair/bom/FlightDate.hpp> 00010 #include <stdair/bom/SegmentDate.hpp> 00011 #include <stdair/bom/SegmentCabin.hpp> 00012 #include <stdair/bom/LegCabin.hpp> 00013 // AIRINV 00014 #include <airinv/bom/FlightDateHelper.hpp> 00015 #include <airinv/bom/SegmentDateHelper.hpp> 00016 #include <airinv/bom/SegmentCabinHelper.hpp> 00017 00018 namespace AIRINV { 00019 00020 // //////////////////////////////////////////////////////////////////// 00021 void FlightDateHelper:: 00022 updateBookingControls (stdair::FlightDate& ioFlightDate) { 00023 00024 // Parse the segment-cabin list and build the pseudo bid price vector. 00025 const stdair::SegmentDateList_T& lSDList = 00026 stdair::BomManager::getList<stdair::SegmentDate> (ioFlightDate); 00027 for (stdair::SegmentDateList_T::const_iterator itSD = lSDList.begin(); 00028 itSD != lSDList.end(); ++itSD) { 00029 const stdair::SegmentDate* lSD_ptr = *itSD; 00030 assert (lSD_ptr != NULL); 00031 00032 // 00033 const stdair::SegmentCabinList_T& lSCList = 00034 stdair::BomManager::getList<stdair::SegmentCabin> (*lSD_ptr); 00035 for (stdair::SegmentCabinList_T::const_iterator itSC = lSCList.begin(); 00036 itSC != lSCList.end(); ++itSC) { 00037 stdair::SegmentCabin* lSC_ptr = *itSC; 00038 assert (lSC_ptr != NULL); 00039 00040 // Build the pseudo bid price vector for the segment-cabin. 00041 SegmentCabinHelper::buildPseudoBidPriceVector (*lSC_ptr); 00042 00043 // Update the booking controls using the pseudo bid price vector. 00044 SegmentCabinHelper:: 00045 updateBookingControlsUsingPseudoBidPriceVector (*lSC_ptr); 00046 } 00047 } 00048 } 00049 00050 // //////////////////////////////////////////////////////////////////// 00051 void FlightDateHelper::fillFromRouting(const stdair::FlightDate& iFlightDate){ 00052 const stdair::SegmentDateList_T& lSegmentDateList = 00053 stdair::BomManager::getList<stdair::SegmentDate> (iFlightDate); 00054 00055 // Browse the list of segment-dates and update each segment-date. 00056 for (stdair::SegmentDateList_T::const_iterator itSegmentDate = 00057 lSegmentDateList.begin(); 00058 itSegmentDate != lSegmentDateList.end(); ++itSegmentDate) { 00059 stdair::SegmentDate* lCurrentSegmentDate_ptr = *itSegmentDate; 00060 assert (lCurrentSegmentDate_ptr != NULL); 00061 SegmentDateHelper::fillFromRouting (*lCurrentSegmentDate_ptr); 00062 } 00063 } 00064 00065 // //////////////////////////////////////////////////////////////////// 00066 void FlightDateHelper:: 00067 updateAvailability (const stdair::FlightDate& iFlightDate, 00068 const stdair::SegmentCabin& iSegmentCabin, 00069 const stdair::PartySize_T& iNbOfBookings) { 00070 // Update the commited space of the member leg-cabins. 00071 const stdair::LegCabinList_T& lLegCabinList = 00072 stdair::BomManager::getList<stdair::LegCabin> (iSegmentCabin); 00073 for (stdair::LegCabinList_T::const_iterator itLegCabin = 00074 lLegCabinList.begin(); 00075 itLegCabin != lLegCabinList.end(); ++itLegCabin) { 00076 stdair::LegCabin* lLegCabin_ptr = *itLegCabin; 00077 assert (lLegCabin_ptr != NULL); 00078 lLegCabin_ptr->updateFromReservation (iNbOfBookings); 00079 } 00080 00081 // Update the availability pool of all the segment-cabin which belong to the 00082 // same flight-date. 00083 const stdair::CabinCode_T& lCabinCode = iSegmentCabin.getCabinCode(); 00084 FlightDateHelper::updateAvailabilityPool (iFlightDate, lCabinCode); 00085 00086 // Recaculate the availability of all classes of the given cabin (code). 00087 FlightDateHelper::recalculateAvailability (iFlightDate, lCabinCode); 00088 } 00089 00090 // //////////////////////////////////////////////////////////////////// 00091 void FlightDateHelper:: 00092 updateAvailabilityPool (const stdair::FlightDate& iFlightDate, 00093 const stdair::CabinCode_T& iCabinCode){ 00094 const stdair::SegmentDateList_T& lSegmentDateList = 00095 stdair::BomManager::getList<stdair::SegmentDate> (iFlightDate); 00096 for (stdair::SegmentDateList_T::const_iterator itSegmentDate = 00097 lSegmentDateList.begin(); itSegmentDate != lSegmentDateList.end(); 00098 ++itSegmentDate) { 00099 const stdair::SegmentDate* lSegmentDate_ptr = *itSegmentDate; 00100 assert (lSegmentDate_ptr != NULL); 00101 stdair::SegmentCabin& lSegmentCabin = 00102 stdair::BomManager::getObject<stdair::SegmentCabin> (*lSegmentDate_ptr, 00103 iCabinCode); 00104 00105 // Update the availability pool of the segment-cabin to the minimal 00106 // availability pool of the member leg-cabins. 00107 const stdair::LegCabinList_T& lLegCabinList = 00108 stdair::BomManager::getList<stdair::LegCabin> (lSegmentCabin); 00109 stdair::Availability_T lAvailabilityPool = stdair::MAXIMAL_AVAILABILITY; 00110 for (stdair::LegCabinList_T::const_iterator itLegCabin = 00111 lLegCabinList.begin(); 00112 itLegCabin != lLegCabinList.end(); ++itLegCabin) { 00113 const stdair::LegCabin* lLegCabin_ptr = *itLegCabin; 00114 assert (lLegCabin_ptr != NULL); 00115 const stdair::Availability_T& lLegCabinAvailabilityPool = 00116 lLegCabin_ptr->getAvailabilityPool(); 00117 if (lAvailabilityPool > lLegCabinAvailabilityPool) { 00118 lAvailabilityPool = lLegCabinAvailabilityPool; 00119 } 00120 } 00121 lSegmentCabin.setAvailabilityPool (lAvailabilityPool); 00122 } 00123 } 00124 00125 // //////////////////////////////////////////////////////////////////// 00126 void FlightDateHelper:: 00127 recalculateAvailability (const stdair::FlightDate& iFlightDate, 00128 const stdair::CabinCode_T& iCabinCode){ 00129 const stdair::SegmentDateList_T& lSegmentDateList = 00130 stdair::BomManager::getList<stdair::SegmentDate> (iFlightDate); 00131 for (stdair::SegmentDateList_T::const_iterator itSegmentDate = 00132 lSegmentDateList.begin(); itSegmentDate != lSegmentDateList.end(); 00133 ++itSegmentDate) { 00134 const stdair::SegmentDate* lSegmentDate_ptr = *itSegmentDate; 00135 assert (lSegmentDate_ptr != NULL); 00136 stdair::SegmentCabin& lSegmentCabin = 00137 stdair::BomManager::getObject<stdair::SegmentCabin> (*lSegmentDate_ptr, 00138 iCabinCode); 00139 SegmentCabinHelper::updateAvailabilities (lSegmentCabin); 00140 } 00141 } 00142 00143 // //////////////////////////////////////////////////////////////////// 00144 void FlightDateHelper:: 00145 recalculateAvailability (const stdair::FlightDate& iFlightDate) { 00146 const stdair::SegmentDateList_T& lSegmentDateList = 00147 stdair::BomManager::getList<stdair::SegmentDate> (iFlightDate); 00148 for (stdair::SegmentDateList_T::const_iterator itSegmentDate = 00149 lSegmentDateList.begin(); itSegmentDate != lSegmentDateList.end(); 00150 ++itSegmentDate) { 00151 const stdair::SegmentDate* lSegmentDate_ptr = *itSegmentDate; 00152 assert (lSegmentDate_ptr != NULL); 00153 const stdair::SegmentCabinList_T& lSegmentCabinList = 00154 stdair::BomManager::getList<stdair::SegmentCabin> (*lSegmentDate_ptr); 00155 for (stdair::SegmentCabinList_T::const_iterator itSegmentCabin = 00156 lSegmentCabinList.begin(); 00157 itSegmentCabin != lSegmentCabinList.end(); ++itSegmentCabin) { 00158 const stdair::SegmentCabin* lSegmentCabin_ptr = *itSegmentCabin; 00159 assert (lSegmentCabin_ptr != NULL); 00160 SegmentCabinHelper::updateAvailabilities (*lSegmentCabin_ptr); 00161 } 00162 } 00163 } 00164 00165 }