def get_catering_closed_sessions(self,
                                     flight_number='',
                                     departure_airport='',
                                     start_date='',
                                     end_date=''):
        # load catering sessions statistic for given airport/dates/flight

        def get_one(self,
                    flight_number=flight_number,
                    departure_airport=departure_airport,
                    start_date=start_date,
                    end_date=end_date,
                    length=1000):
            r = self.session.get(
                URLs.get_catering_closed_sessions.format(
                    flight_number=flight_number,
                    departure_airport=departure_airport,
                    start_date=start_date,
                    end_date=end_date,
                    length=length))
            r = json.loads(r.content)['data']
            return r

        if departure_airport and departure_airport.upper() != 'SVO':
            cat_sessions = get_one(self,
                                   departure_airport=departure_airport,
                                   start_date=start_date,
                                   end_date=end_date)
            cat_sessions = pd.DataFrame(data=cat_sessions)
        else:
            cat_sessions = []
            dates_range = crew_utils.date_iterator(start_date,
                                                   end_date=end_date)
            for d in dates_range:
                sessions = get_one(self,
                                   departure_airport=departure_airport,
                                   start_date=d,
                                   end_date=d)
                cat_sessions.append(pd.DataFrame(data=sessions))
            cat_sessions = pd.concat(cat_sessions, axis=0, sort=False)

        cat_sessions = cat_sessions.drop('display', axis=1)
        cat_sessions = crew_utils.dtrowid_to_index(cat_sessions)
        cat_sessions['earliestLocalDepartureDate'] = cat_sessions[
            'earliestLocalDepartureDate'].astype('datetime64')
        cat_sessions['latestLocalDepartureDate'] = cat_sessions[
            'latestLocalDepartureDate'].astype('datetime64')
        cat_sessions['amountOfOrders'] = cat_sessions['amountOfOrders'].astype(
            'int')
        cat_sessions['amountOfCrewOperated'] = cat_sessions[
            'amountOfCrewOperated'].astype('int')
        cat_sessions['amountOfOrdersServed'] = cat_sessions[
            'amountOfOrdersServed'].astype('int')
        return cat_sessions
Example #2
0
def get_flights_table(interface, start_date, num_of_days, filter_numbers=None):
    df = interface.get_flights_table(start_date, num_of_days=-3)
    dates_in_df = set([d.strftime('%Y-%m-%d') for d in list(set(df['departureDateStart']))])
    dates_range = list(date_iterator(start_date, num_of_days=-num_of_days))
    dfs_to_add = []
    for date in set(dates_range).difference(dates_in_df):
        dfs_to_add.append(interface.get_flights_table(date, num_of_days=1))
    df = pd.concat([df] + dfs_to_add, axis=0, sort=False)
    df = df.drop_duplicates()
    df['dayOfWeek'] = df['departureDateStart'].dt.dayofweek
    df['departureDateStart'] = df['departureDateStart'].astype('datetime64')
    df['flightNumber'] = df['flightNumber'].astype('int')
    if filter_numbers:
        df = df[df['flightNumber'] < filter_numbers]
    return df
    def get_reports_table(self, start_date, num_of_days, report='purser'):
        # load crew reports records, all parameters in url_params dict (start/end dates, form id, staff id, flight num,
        # tail number, dep/arr airport, length of list
        if type(start_date) is datetime:
            start_date = start_date.strftime('%Y-%m-%d')

        form_id = {'purser': '51', 'otchet_sb': '32'}

        url_params = {
            "staff_id": '',
            "flight_number": '',
            "departure_airport": '',
            "arrival_airport": '',
            "reg_number": '',
            "length": 10000,
            "form_id": form_id[report]
        }

        reports_table = []
        dates_range = crew_utils.date_iterator(start_date,
                                               num_of_days=num_of_days)
        for date in dates_range:
            url_params['start_date'] = url_params['end_date'] = date
            url = URLs.URL_monitor_reports.format(**url_params)
            reports = self.session.get(url)
            reports = json.loads(reports.content)['data']
            reports_table.append(pd.DataFrame(data=reports))
        reports_table = pd.concat(reports_table, axis=0, sort=False)
        reports_table = crew_utils.dtrowid_to_index(reports_table)
        reports_table = reports_table.drop([
            'manualProcessingProcessedDate', 'download',
            'manualProcessingStaffId', 'id'
        ],
                                           axis=1,
                                           errors='ignore')
        reports_table['lastUpdate'] = reports_table['lastUpdate'].astype(
            'datetime64')
        reports_table['departureDate'] = reports_table['departureDate'].astype(
            'datetime64')
        reports_table['lastUpdateEnd'] = reports_table['lastUpdateEnd'].astype(
            'datetime64')
        reports_table['flightNumber'] = reports_table['flightNumber'].astype(
            'int')
        return reports_table
Example #4
0
def get_sync_table(interface, departure_airport, start_date, end_date,
                   max_delay):
    # return table with syncs/crew for one airport
    df_syncs = interface.get_syncs(departure_dates=crew_utils.date_iterator(
        start_date, end_date=end_date),
                                   departure_airports=(departure_airport, ))
    df_syncs['diff'] = (
        df_syncs['scheduledDepartureDateTime'] -
        df_syncs['synchronizationDate']).astype('timedelta64[m]')
    df_syncs['interval'] = df_syncs.apply(
        lambda row: check_sync_intervals(row, max_delay), axis=1)
    df_crews = get_crew_list(itf, start_date, end_date, departure_airport)
    df = df_syncs.merge(df_crews,
                        left_on=['staffId', 'flightNumber', 'departureDate'],
                        right_on=['staffId', 'flightNumber', 'departureDate'])

    interval_ranged = pd.api.types.CategoricalDtype(
        categories=['boarded', 'check in', 'booked', 'late_data'],
        ordered=True)
    df['interval'] = df['interval'].astype(interval_ranged)
    df['boardedCount'] = df['boardedCount'].astype('int')
    df = df.sort_values(['interval', 'boardedCount'], ascending=[True, False])
    return df.drop_duplicates(['staffId', 'flightNumber', 'departureDate'])
 def get_flights_table(self,
                       start_date,
                       end_date=None,
                       num_of_days=None,
                       flight_numbers='',
                       departure_airport='',
                       arrival_airport='',
                       length=2000,
                       id_only=False,
                       filter_status=False):
     # get flight table for range of dates OR one flight DB ID
     if departure_airport and departure_airport.upper() != 'SVO':
         f = self.session.get(
             URLs.URL_flights_list.format(
                 flight_number=flight_numbers,
                 departure_airport=departure_airport,
                 arrival_airport=arrival_airport,
                 departure_date='',
                 length=length))
         f = json.loads(f.content)['data']
         flights = pd.DataFrame(data=f)
     else:
         flights = []
         dates_range = crew_utils.date_iterator(start_date,
                                                end_date=end_date,
                                                num_of_days=num_of_days)
         if flight_numbers and type(flight_numbers) is str:
             flight_numbers = (flight_numbers, )
         for d in dates_range:
             f = self.session.get(
                 URLs.URL_flights_list.format(
                     flight_number='',
                     departure_airport=departure_airport,
                     arrival_airport=arrival_airport,
                     departure_date=d,
                     length=length))
             f = json.loads(f.content)['data']
             flights.append(pd.DataFrame(data=f))
         flights = pd.concat(flights, axis=0, sort=False)
     flights = crew_utils.dtrowid_to_index(flights)
     flights = flights.drop('details', axis=1)
     if flight_numbers:
         flights = flights[flights['flightNumber'].isin(flight_numbers)]
     if flights.empty:
         print('no flights found!!')
     if id_only:
         return flights.index[0]
     if filter_status:
         flights = flights[flights['flightStatusLabel'] != filter_status]
     flights['departureDateStart'] = flights['departureDateStart'].astype(
         'datetime64')
     flights = flights[flights['departureDateStart'].isin(
         list(
             crew_utils.date_iterator(start_date,
                                      end_date=end_date,
                                      num_of_days=num_of_days)))]
     flights['paxInfoAvailable'] = flights['paxInfoAvailable'].replace({
         '<i class="fa fa-ban"></i><span class="hidden">false</span>':
         False,
         '<i class="fa fa-check"></i><span class="hidden">true</span>':
         True
     })
     #flights['flightNumber'] = flights['flightNumber'].astype('int')
     return flights
    def get_syncs(self,
                  departure_dates=(),
                  start_date=None,
                  end_date=None,
                  staff_id='',
                  flight_number='',
                  departure_airports=(),
                  length=25000):
        # load user's app<->server synchronizations
        # lastUpdate == Last DCS call, synchronizationDate == Sync Timestamp
        syncs = []
        if not departure_dates and not departure_airports and not (
                start_date and end_date):
            print(
                'no date or airport given for sync filter, please add params')
            return
        if not departure_dates:
            departure_dates = crew_utils.date_iterator(start_date,
                                                       end_date=end_date)
        if flight_number:
            flight_number = '0' * (4 - len(flight_number)) + flight_number

        if departure_airports:
            for date in departure_dates:
                for airport in departure_airports:
                    print('parsing flight status syncs for {}...'.format(date))
                    r = self.session.get(
                        URLs.URL_monitor_syncs.format(
                            departure_date=date,
                            flight_number=flight_number,
                            departure_airport=airport,
                            staff_id=staff_id,
                            sort='asc',
                            length=length))
                    r = json.loads(r.content)['data']
                    syncs.append(pd.DataFrame(data=r))

        else:  # too much results will be returned if no filtering for airports given
            if not departure_dates:
                departure_dates = ('', )
            for date in departure_dates:
                print('parsing flight status syncs for {}...'.format(date))
                asc = self.session.get(
                    URLs.URL_monitor_syncs.format(departure_date=date,
                                                  flight_number=flight_number,
                                                  departure_airport='',
                                                  staff_id=staff_id,
                                                  sort='asc',
                                                  length=length))
                asc = json.loads(asc.content)['data']
                syncs.append(pd.DataFrame(data=asc))
                desc = self.session.get(
                    URLs.URL_monitor_syncs.format(departure_date=date,
                                                  flight_number=flight_number,
                                                  departure_airport='',
                                                  staff_id=staff_id,
                                                  sort='desc',
                                                  length=length))
                desc = json.loads(desc.content)['data']
                syncs.append(pd.DataFrame(data=desc))

        syncs = pd.concat(syncs, axis=0, sort=False)
        syncs = syncs.drop_duplicates()
        syncs = crew_utils.dtrowid_to_index(syncs)
        syncs['lastUpdate'] = syncs['lastUpdate'].astype('datetime64')
        syncs['departureDate'] = syncs['departureDate'].astype('datetime64')
        syncs['scheduledDepartureDateTime'] = syncs[
            'scheduledDepartureDateTime'].astype('datetime64')
        syncs['synchronizationDate'] = syncs['synchronizationDate'].astype(
            'datetime64')
        return syncs