$treeview $search $mathjax
AirInv Logo  1.00.0
$projectbrief
$projectbrief
$searchbox

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   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 }