AirInv Logo  0.1.2
C++ Simulated Airline Inventory Management System library
FlightDateHelper.cpp
Go to the documentation of this file.
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   updateAvailablityPool (const stdair::FlightDate& iFlightDate,
00068                          const stdair::CabinCode_T& iCabinCode){
00069     const stdair::SegmentDateList_T& lSegmentDateList =
00070       stdair::BomManager::getList<stdair::SegmentDate> (iFlightDate);
00071     for (stdair::SegmentDateList_T::const_iterator itSegmentDate =
00072            lSegmentDateList.begin(); itSegmentDate != lSegmentDateList.end();
00073          ++itSegmentDate) {
00074       const stdair::SegmentDate* lSegmentDate_ptr = *itSegmentDate;
00075       assert (lSegmentDate_ptr != NULL);
00076       stdair::SegmentCabin& lSegmentCabin =
00077         stdair::BomManager::getObject<stdair::SegmentCabin> (*lSegmentDate_ptr,
00078                                                              iCabinCode);
00079 
00080       // Update the availability pool of the segment-cabin to the minimal
00081       // availability pool of the member leg-cabins.
00082       const stdair::LegCabinList_T& lLegCabinList =
00083         stdair::BomManager::getList<stdair::LegCabin> (lSegmentCabin);
00084       stdair::Availability_T lAvailabilityPool = stdair::MAXIMAL_AVAILABILITY;
00085       for (stdair::LegCabinList_T::const_iterator itLegCabin =
00086              lLegCabinList.begin();
00087            itLegCabin != lLegCabinList.end(); ++itLegCabin) {
00088         const stdair::LegCabin* lLegCabin_ptr = *itLegCabin;
00089         assert (lLegCabin_ptr != NULL);
00090         const stdair::Availability_T& lLegCabinAvailabilityPool =
00091           lLegCabin_ptr->getAvailabilityPool();
00092         if (lAvailabilityPool > lLegCabinAvailabilityPool) {
00093           lAvailabilityPool = lLegCabinAvailabilityPool;
00094         }
00095       }
00096       lSegmentCabin.setAvailabilityPool (lAvailabilityPool);
00097     }
00098   }
00099 
00100 }