Пример #1
0
    def retrieve_cancellations_and_checkins_for_room(self, calendar_id,
                                                     start_date,
                                                     day_after_end_date,
                                                     checkins, cancellations,
                                                     events_list):  # noqa
        """ Retrieve cancellations and checkins for a room
        :params
            - calendar_id, start_date, day_after_end_date,
                checkins,cancellations, output
        """
        calendar_events = CommonAnalytics.get_all_events_in_a_room(
            self, calendar_id, start_date, day_after_end_date)
        if calendar_events:
            for event in calendar_events:
                if event.get('attendees'):
                    event_details = CommonAnalytics.get_event_details(
                        self, event, calendar_id)
                    events_list.append(event_details)

        room_id = RoomModel.query.filter_by(
            calendar_id=calendar_id, ).first().id  # noqa

        checkins += (Events.query.filter(
            Events.room_id == room_id, Events.checked_in == True,
            Events.start_time >= start_date,
            Events.end_time < day_after_end_date)).count()  # noqa

        cancellations += (Events.query.filter(
            Events.room_id == room_id, Events.cancelled == True,
            Events.start_time >= start_date,
            Events.end_time < day_after_end_date)).count()  # noqa

        return checkins, cancellations, events_list
Пример #2
0
 def get_events_number_meetings_room_analytics(self, query, start_date, end_date):  # noqa: E501
     """ Get events in rooms and number of meetings per room
      :params
         - query
         - start_date, end_date(Time range)
     """
     start_date, end_date = CommonAnalytics.convert_dates(
         self, start_date, end_date)
     rooms_available = CommonAnalytics.get_calendar_id_name(
         self, query)
     result, number_of_meetings = [], []
     for room in rooms_available:
         calendar_events = CommonAnalytics.get_all_events_in_a_room(
             self, room['calendar_id'], start_date, end_date)
         output = []
         if not calendar_events:
             output.append({'RoomName': room['name'], 'has_events': False})
             number_of_meetings.append(0)
         else:
             for event in calendar_events:
                 if event.get('attendees'):
                     event_details = CommonAnalytics.get_event_details(self, event, room['calendar_id'])  # noqa: E501
                     output.append(event_details)
             number_of_meetings.append(len(output))
         result.append(output)
     return (result, number_of_meetings)
Пример #3
0
    def get_booked_rooms(self, query, start_date, end_date):  # noqa: E501
        """ Get booked room per given period of time and their percentages
         :params
            - query
            - start_date, end_date(Time range)
        """
        start_date, end_date = CommonAnalytics.convert_dates(
            self, start_date, end_date)
        rooms_available = CommonAnalytics.get_room_details(
            self, query)
        result = []
        bookings = 0
        for room in rooms_available:
            all_events_in_all_rooms = CommonAnalytics.get_all_events_in_a_room(
                self, room['room_id'], start_date, end_date)
            if all_events_in_all_rooms:
                bookings += len(all_events_in_all_rooms)

        for room in rooms_available:
            all_events = CommonAnalytics.get_all_events_in_a_room(
                self, room['room_id'], start_date, end_date)
            if all_events:
                room_details = RoomStatistics(
                    room_name=room["name"],
                    meetings=len(all_events),
                    percentage=(len(all_events))/bookings*100)

                result.append(room_details)
                result.sort(key=lambda x: x.meetings, reverse=True)
            else:
                return result
        return result
Пример #4
0
    def get_analytics_ratios_per_room(self, query, start, end):
        """ Get ratios of checkings/cancellations to bookings per room.
         :params
            - start_date, end_date
        """
        start_date, day_after_end_date = CommonAnalytics.convert_dates(
            self, start, end)
        rooms = CommonAnalytics.get_calendar_id_name(self, query)

        response = []
        for room in rooms:
            events_list = []
            checkins = 0
            cancellations = 0

            checkins, cancellations, events_list = RoomAnalyticsRatios.retrieve_cancellations_and_checkins_for_room(
                self,  # noqa
                room['calendar_id'],
                start_date,
                day_after_end_date,
                checkins,
                cancellations,
                events_list)

            ratio_object = RoomAnalyticsRatios.map_results_to_ratio_class(
                self,  # noqa
                checkins,
                cancellations,
                events_list,
                room['name'])

            response.append(ratio_object)
        return response
Пример #5
0
 def get_events_number_meetings_room_analytics(self, query, start_date, end_date):  # noqa: E501
     """ Get events in rooms and number of meetings per room
      :params
         - query
         - start_date, end_date(Time range)
     """
     start_date, end_date = CommonAnalytics.convert_dates(
         self, start_date, end_date)
     rooms_available = CommonAnalytics.get_room_details(
         self, query)
     result, number_of_meetings = [], []
     for room in rooms_available:
         all_events = CommonAnalytics.get_all_events_in_a_room(
             self, room['room_id'], start_date, end_date)
         output = []
         if not all_events:
             output.append({'roomName': room['name']})
             number_of_meetings.append(0)
         else:
             for event in all_events:
                 if event['participants']:
                     event_details = CommonAnalytics.get_event_details(
                         self, query, event, room['room_id'])
                     output.append(event_details)
             number_of_meetings.append(len(output))
         result.append(output)
     return (result, number_of_meetings)
Пример #6
0
    def get_bookings_analytics_count(self, query, start, end, room_id=None):
        results = []
        start_date, day_after_end_date = CommonAnalytics.convert_dates(
            self, start, end)
        start_dt = dateutil.parser.parse(start_date)
        end_dt = dateutil.parser.parse(day_after_end_date)
        number_of_days = (end_dt - start_dt).days
        room_name = get_room_name(room_id)

        if number_of_days <= 30:
            dates = CommonAnalytics.get_list_of_dates(
                start, number_of_days)
            for date in dates:
                bookings = CommonAnalytics.get_total_bookings(
                    self, query, date[0], date[1], room_id=room_id)
                string_date = dateutil.parser.parse(
                    date[0]).strftime("%b %d %Y")
                output = BookingsAnalyticsCount(
                    period=string_date, bookings=bookings, room_name=room_name)
                results.append(output)

        else:
            dates = CommonAnalytics.get_list_of_month_dates(
                start_date, start_dt, day_after_end_date, end_dt)
            for date in dates:
                bookings = CommonAnalytics.get_total_bookings(
                    self, query, date[0], date[1], room_id=room_id)
                string_month = dateutil.parser.parse(date[0]).strftime("%B")
                output = BookingsAnalyticsCount(
                    period=string_month, bookings=bookings, room_name=room_name)
                results.append(output)

        return results
Пример #7
0
    def get_analytics_ratios(self, query, start, end):
        """ Get ratios of checkings/cancellations to bookings for all rooms.
         :params
            - start_date, end_date
        """
        start_date, day_after_end_date = CommonAnalytics.validate_current_date(
            self, start, end)
        rooms = CommonAnalytics.get_room_details(
            self, query)

        checkins = 0
        cancellations = 0
        calendar_events_list = []
        app_events_list = []

        for room in rooms:
            checkins, cancellations, calendar_events_list, app_events_list = RoomAnalyticsRatios().retrieve_cancellations_and_checkins_for_room(room['room_id'],  # noqa
                                                        start_date,
                                                        day_after_end_date,
                                                        checkins,
                                                        cancellations,
                                                        calendar_events_list,
                                                        app_events_list)

        ratio_object = RoomAnalyticsRatios().map_results_to_ratio_class(
            checkins=checkins,
            cancellations=cancellations,
            calendar_events_list=calendar_events_list,
            app_events_list=app_events_list)

        return ratio_object
Пример #8
0
    def meetings_duration_statistics(self, query, start_date,
                                     end_date):  # noqa: E501
        """
        Get meeting durations statistics
        """
        rooms = CommonAnalytics.get_calendar_id_name(self, query)
        result = []
        for room in rooms:
            events = CommonAnalytics.get_all_events_in_a_room(
                self, room['calendar_id'], start_date, end_date)  # noqa: E501
            events_duration = []
            for event in events:
                start = event['start'].get(
                    'dateTime', event['start'].get('date'))  # noqa: E501
                end = event['end'].get('dateTime', event['end'].get('date'))
                duration = CommonAnalytics.get_time_duration_for_event(
                    self, start, end)  # noqa: E501
                events_duration.append(duration)

            events_count = Counter(events_duration)

            events_in_minutes = [
                EventsDuration(
                    duration_in_minutes=events_duration,
                    number_of_meetings=events_count[events_duration])
                for index, events_duration in enumerate(events_count)
            ]

            output = RoomStatistics(room_name=room["name"],
                                    count=len(events_duration),
                                    total_duration=sum(events_duration),
                                    events=events_in_minutes)
            result.append(output)
        return result
Пример #9
0
    def get_monthly_rooms_events(self, query, month, year):
        """ Get event stats for all rooms in a specified month
         :params
            - month, year
        """
        date = month + ' 1 ' + str(year)
        startdate = CommonAnalytics.convert_date(self, date)
        date_after_month = (
            datetime.strptime(date, '%b %d %Y') +
            relativedelta(months=1)).isoformat() + 'Z'  # noqa: E501

        rooms_available = CommonAnalytics.get_calendar_id_name(self, query)
        room_events_count = []
        events_in_all_rooms = []
        for room in rooms_available:
            calendar_events = CommonAnalytics.get_all_events_in_a_room(
                self, room['calendar_id'], startdate, date_after_month)
            output = []
            if not calendar_events:
                output.append({'RoomName': room['name'], 'has_events': False})
                room_with_no_events = 0
                room_events_count.append(room_with_no_events)

            else:
                for event in calendar_events:
                    if event.get('attendees'):
                        event_details = CommonAnalytics.get_event_details(
                            self, event, room['calendar_id'])
                        output.append(event_details)
                room_events_count.append(len(output))
            events_in_all_rooms.append(output)
        return dict(events_in_all_rooms=events_in_all_rooms,
                    room_events_count=room_events_count)
Пример #10
0
    def resolve_all_events(self, info, **kwargs):
        page = kwargs.get('page')
        per_page = kwargs.get('per_page')
        if page is not None and page < 1:
            raise GraphQLError("page must be at least 1")
        if per_page is not None and per_page < 1:
            raise GraphQLError("perPage must be at least 1")
        if page and not per_page:
            raise GraphQLError("perPage argument missing")
        if per_page and not page:
            raise GraphQLError("page argument missing")
        user = get_user_from_db()
        start_date, end_date = CommonAnalytics.all_analytics_date_validation(
            self, kwargs['start_date'], kwargs['end_date']
        )
        query = Events.get_query(info)
        all_events, all_dates = CommonAnalytics.get_all_events_and_dates(
            query, start_date, end_date
        )
        events_in_location = CalendarEvents().get_events_in_location(
            user, all_events)
        all_days_events = []
        for date in set(all_dates):
            daily_events = []
            for event in events_in_location:
                CommonAnalytics.format_date(event.start_time)
                event_start_date = parser.parse(
                    event.start_time).astimezone(pytz.utc)
                day_of_event = event_start_date.strftime("%a %b %d %Y")
                if date == day_of_event:
                    daily_events.append(event)
            all_days_events.append(
                DailyRoomEvents(
                    day=date,
                    events=daily_events
                )
            )
            all_days_events.sort(key=lambda x: datetime.strptime(x.day, "%a %b %d %Y"), reverse=True) # noqa
        if page and per_page:
            paginated_events = ListPaginate(
                iterable=all_days_events,
                per_page=per_page,
                page=page)
            has_previous = paginated_events.has_previous
            has_next = paginated_events.has_next
            current_page = paginated_events.current_page
            pages = paginated_events.pages
            query_total = paginated_events.query_total
            return PaginatedDailyRoomEvents(
                                     DailyRoomEvents=current_page,
                                     has_previous=has_previous,
                                     has_next=has_next,
                                     query_total=query_total,
                                     pages=pages)

        return PaginatedDailyRoomEvents(DailyRoomEvents=all_days_events)
Пример #11
0
 def get_least_used_room_day(self, query, day):
     """ Get event stats for all rooms in a specified day
         :params
             - day
     """
     day_start, day_end = CommonAnalytics.get_start_end_day_dates(self, day)
     rooms_available = CommonAnalytics.get_calendar_id_name(self, query)
     return RoomAnalytics.get_least_used_rooms(self, rooms_available,
                                               day_start,
                                               day_end)  # noqa: E501
Пример #12
0
 def get_weekly_meetings_details(self, query, week_start,
                                 week_end):  # noqa: E501
     """
     Get weekly meeting durations details
     """
     week_start = CommonAnalytics.convert_date(self, week_start)
     week_end, day_after = CommonAnalytics.get_start_end_day_dates(
         self, week_end)  # noqa: E501
     weekly_analytics = RoomAnalytics.meetings_duration_statistics(
         self, query, week_start, day_after)  # noqa: E501
     return weekly_analytics
Пример #13
0
 def get_meetings_per_room(self, query, timeMin, timeMax):
     day_start = CommonAnalytics.convert_date(self, timeMin)
     day_end = CommonAnalytics.convert_date(self, timeMax)
     rooms_available = CommonAnalytics.get_calendar_id_name(self, query)
     res = []
     for room in rooms_available:
         calendar_events = CommonAnalytics.get_all_events_in_a_room(
             self, room['calendar_id'], day_start, day_end)
         room_details = RoomStatistics(
             room_name=room["name"],
             count=len(calendar_events))  # noqa: E501
         res.append(room_details)
     return res
Пример #14
0
    def get_least_used_room_week(self, query, week_start,
                                 week_end):  # noqa: E501
        """ Get analytics for least used room per week
         :params
            - calendar_id
            - week_start, week_end(Time range)
        """
        week_start = CommonAnalytics.convert_date(self, week_start)
        week_end = CommonAnalytics.convert_date(self, week_end)

        rooms_available = CommonAnalytics.get_calendar_id_name(self, query)
        return RoomAnalytics.get_least_used_rooms(self, rooms_available,
                                                  week_start,
                                                  week_end)  # noqa: E501
Пример #15
0
    def write_analytics_to_html(self, query, start_date, end_date):
        report_data_frame = AnalyticsReport.generate_combined_analytics_report(
            self, query, start_date, end_date)
        start_date_formatted = CommonAnalytics.format_date(start_date)
        end_date_formatted = CommonAnalytics.format_date(end_date)
        WriteFile.write_to_html_file(
            report_data_frame['Most Used Rooms'],
            report_data_frame['Least Used Rooms'],
            '<h1>Room Analytics Report Summary</h1><p> <h2>Report Period: From ' + start_date_formatted + ' to ' + end_date_formatted + '</h2>',   # noqa
            'templates/analytics_report.html'
            )
        rendered = render_template('analytics_report.html')

        return rendered
Пример #16
0
    def get_all_rooms_summary(self, query, start_date, end_date):
        '''
        Get a summarry data for all rooms in a dataframe
        '''
        rooms_available = CommonAnalytics.get_room_details(self, query)
        all_rooms_data_df = AnalyticsReport.get_dataframe(
            self, rooms_available, start_date, end_date)

        rooms_no_meetings_df = all_rooms_data_df.loc[
            lambda all_rooms_data_df: all_rooms_data_df[
                'minutes'] == 0].rename(columns={
                    'roomName': 'Room'
                }).assign(Meetings=0)

        rooms_no_meetings_df = rooms_no_meetings_df[['Room', 'Meetings']]

        rooms_with_meeting_df = all_rooms_data_df[
            all_rooms_data_df['minutes'] != 0]['roomName'].value_counts(
            ).rename_axis('Room').reset_index(name='Meetings')
        rooms_summary_df = pd.concat(
            [rooms_no_meetings_df, rooms_with_meeting_df])
        rooms_summary_df['% Share of All Meetings'] = round(
            rooms_summary_df['Meetings'] / rooms_summary_df['Meetings'].sum() *
            100)
        return rooms_summary_df
Пример #17
0
    def retrieve_cancellations_and_checkins_for_room(self,
                                                     room_id,
                                                     start_date,
                                                     day_after_end_date,
                                                     checkins,
                                                     cancellations,
                                                     calendar_events_list,
                                                     app_events_list):
        """ Retrieve cancellations and checkins for a room
        :params
            - room_id, start_date, day_after_end_date,
                checkins,cancellations, output
        """
        all_events = CommonAnalytics.get_all_events_in_a_room(
            self, room_id, start_date, day_after_end_date)
        if all_events:
            for event in all_events:
                if event.number_of_participants:
                    calendar_events_list.append(event)
        room_id = RoomModel.query.filter_by(id=room_id).first().id

        checkins += (Events.query.filter(Events.room_id == room_id, Events.checked_in == True, Events.start_time >= start_date, Events.end_time < day_after_end_date)).count()  # noqa

        cancellations += (Events.query.filter(Events.room_id == room_id, Events.cancelled == True, Events.start_time >= start_date, Events.end_time < day_after_end_date)).count()  # noqa

        return checkins, cancellations, calendar_events_list, app_events_list
Пример #18
0
 def get_meetings_per_room_analytics(self, query, start_date, end_date):
     """ Get analytics for meetings per room
      :params
         - query
         - start_date, end_date(Time range)
     """
     start_date, end_date = CommonAnalytics.convert_dates(
         self, start_date, end_date)
     rooms_available = CommonAnalytics.get_room_details(
         self, query)
     res = []
     for room in rooms_available:
         all_events = CommonAnalytics.get_all_events_in_a_room(
             self, room['room_id'], start_date, end_date)
         room_details = RoomStatistics(room_name=room["name"], count=len(all_events))  # noqa: E501
         res.append(room_details)
     return res
Пример #19
0
 def get_daily_meetings_details(self, query, day):  # noqa: E501
     """
     Get daily meetings durations details
     """
     start_date, day_after = CommonAnalytics.get_start_end_day_dates(
         self, day)  # noqa
     daily_analytics = RoomAnalytics.meetings_duration_statistics(
         self, query, start_date, day_after)  # noqa: E501
     return daily_analytics
Пример #20
0
 def bookings_count(self, unconverted_dates, events):
     """
     Get bookings count and period in a given room
     """
     start_date = unconverted_dates['start']
     day_after_end_date = unconverted_dates['end']
     parsed_start_date = dateutil.parser.parse(start_date)
     parsed_end_date = dateutil.parser.parse(day_after_end_date)
     parsed_day_after_end_date = parsed_end_date + relativedelta(days=1)
     number_of_days = (parsed_day_after_end_date - parsed_start_date).days
     bookings_count = []
     user_time_zone = CommonAnalytics.get_user_time_zone()
     if number_of_days <= 30:
         dates = CommonAnalytics.get_list_of_dates(start_date,
                                                   number_of_days)
         for date in dates:
             bookings = 0
             string_date = dateutil.parser.parse(
                 date[0]).strftime("%b %d %Y")
             for event in events:
                 start_timez = dateutil.parser.parse(
                     event.start_time).astimezone(
                         pytz.timezone(user_time_zone))  # noqa
                 if start_timez.strftime("%b %d %Y") == string_date:
                     bookings += 1
             output = BookingsCount(period=string_date,
                                    total_bookings=bookings)
             bookings_count.append(output)
     else:
         dates = CommonAnalytics.get_list_of_month_dates(
             start_date, parsed_start_date, day_after_end_date,
             parsed_day_after_end_date)
         for date in dates:
             string_month = dateutil.parser.parse(date[0]).strftime("%b %Y")
             output = BookingsCount(period=string_month, total_bookings=0)
             for event in events:
                 start_timez = dateutil.parser.parse(
                     event.start_time).astimezone(
                         pytz.timezone(user_time_zone))  # noqa
                 if start_timez.strftime("%b %Y") == string_month:
                     output.total_bookings += 1
             bookings_count.append(output)
     return bookings_count
Пример #21
0
    def resolve_all_analytics(self, info, **kwargs):
        start_date = kwargs.get('start_date')
        end_date = kwargs.get('end_date')
        location_id = admin_roles.user_location_for_analytics_view()

        admin_details = get_user_from_db()
        query = Role.get_query(info)
        admin_role = query.filter_by(id=admin_details.roles[0].id).first()

        # check that id is valid
        verify_location_id(kwargs)
        if admin_role.role == 'Super Admin' and kwargs.get(
                'location_id', None):
            location_id = kwargs.get('location_id')

        unconverted_dates = {
            'start': start_date,
            'end': end_date,
        }
        start_date, end_date = CommonAnalytics.all_analytics_date_validation(
            self, start_date, end_date)
        query = Room.get_query(info)
        room_analytics, bookings, percentages_dict, bookings_count = AllAnalyticsHelper.get_all_analytics(  # noqa
            self, query, start_date, end_date, location_id, unconverted_dates)
        analytics = []
        for analytic in room_analytics:
            current_analytic = ConsolidatedAnalytics(
                room_name=analytic['room_name'],
                cancellations=analytic['cancellations'],
                cancellations_percentage=analytic['cancellations_percentage'],
                auto_cancellations=analytic['auto_cancellations'],
                number_of_bookings=analytic['number_of_meetings'],
                checkins=analytic['checkins'],
                checkins_percentage=analytic['checkins_percentage'],
                bookings_percentage_share=percentage_formater(
                    analytic['num_of_events'], bookings),
                app_bookings=analytic['app_bookings'],
                app_bookings_percentage=analytic['app_bookings_percentage'],
                events=analytic['room_events'],
            )
            analytics.append(current_analytic)
        return AllAnalytics(bookings=bookings,
                            checkins_percentage=percentage_formater(
                                percentages_dict['total_checkins'], bookings),
                            auto_cancellations_percentage=percentage_formater(
                                percentages_dict['total_auto_cancellations'],
                                bookings),
                            cancellations_percentage=percentage_formater(
                                percentages_dict['total_cancellations'],
                                bookings),
                            app_bookings_percentage=percentage_formater(
                                percentages_dict['total_app_bookings'],
                                bookings),
                            bookings_count=bookings_count,
                            analytics=analytics)
Пример #22
0
 def get_most_used_rooms_analytics(self, query, start_date, end_date):  # noqa: E501
     """ Get analytics for most used room
      :params
         - query
         - start_date, end_date(Time range)
     """
     events_in_rooms, number_of_meetings = RoomAnalytics.get_events_number_meetings_room_analytics(  # noqa: E501
         self, query, start_date, end_date)
     analytics = CommonAnalytics.get_room_statistics(
         self, max(number_of_meetings), events_in_rooms)
     return analytics
Пример #23
0
 def get_meeting_duration_of_room_per_month(self, query, month,
                                            year):  # noqa
     """ Get analytics for thetotal meeting duration of room(s) per
     morth in a location
      :params
         - month, year
     """
     start_date, day_after = CommonAnalytics.get_start_end_month_dates(
         self, month, year)  # noqa
     monthly_analytics = RoomAnalytics.meetings_duration_statistics(
         self, query, start_date, day_after)  # noqa: E501
     return monthly_analytics
Пример #24
0
    def get_analytics_ratios_per_room(self, query, start, end, **kwargs):
        """ Get ratios of checkings/cancellations to bookings per room.
         :params
            - start_date, end_date, room_id
        """
        room_id = kwargs.get('room_id')
        start_date, day_after_end_date = CommonAnalytics.validate_current_date(
            self, start, end)
        rooms = CommonAnalytics.get_room_details(
            self, query)

        response = []
        for room in rooms:
            checkins = 0
            cancellations = 0
            calendar_events_list = []
            app_events_list = []

            checkins, cancellations, calendar_events_list, app_events_list = RoomAnalyticsRatios().retrieve_cancellations_and_checkins_for_room(room['room_id'],  # noqa
                                                        start_date,
                                                        day_after_end_date,
                                                        checkins,
                                                        cancellations,
                                                        calendar_events_list,
                                                        app_events_list)

            ratio_object = RoomAnalyticsRatios().map_results_to_ratio_class(
                checkins=checkins,
                cancellations=cancellations,
                calendar_events_list=calendar_events_list,
                app_events_list=app_events_list,
                room_name=room['name'],
                room_id=room['room_id'])

            if room_id == ratio_object.room_id:
                return ratio_object

            response.append(ratio_object)

        return response
Пример #25
0
 def get_most_used_room_week(self, query, week_start,
                             week_end):  # noqa: E501
     """ Get analytics for most used room per week
      :params
         - calendar_id
         - week_start, week_end(Time range)
     """
     week_start = CommonAnalytics.convert_date(self, week_start)
     week_end = CommonAnalytics.convert_date(self, week_end)
     rooms_available = CommonAnalytics.get_calendar_id_name(self, query)
     res = []
     number_of_most_events = 0
     for room in rooms_available:
         calendar_events = CommonAnalytics.get_all_events_in_a_room(
             self, room['calendar_id'], week_start, week_end)
         output = []
         if not calendar_events:
             output.append({'RoomName': room['name'], 'has_events': False})
             number_of_most_events = 0
         else:
             for event in calendar_events:
                 event_details = CommonAnalytics.get_event_details(
                     self, event, room['calendar_id'])
                 output.append(event_details)
             if len(output) > number_of_most_events:
                 number_of_most_events = len(output)
         res.append(output)
     analytics = CommonAnalytics.get_room_statistics(
         self, number_of_most_events, res)
     return analytics
Пример #26
0
    def get_most_used_room_per_month(self, query, month, year):
        """ Get analytics for the MOST used room(s) per morth in a location
         :params
            - month, year
        """
        get_monthly_events = RoomAnalytics.get_monthly_rooms_events(
            self, query, month, year)
        rooms_with_max_events = max(get_monthly_events['room_events_count'])
        res = get_monthly_events['events_in_all_rooms']

        analytics = CommonAnalytics.get_room_statistics(
            self, rooms_with_max_events, res)
        return analytics
Пример #27
0
 def validate_date(self, request_data):
     '''
     Validate date params
     '''
     if 'end_date' not in request_data:
         request_data['end_date'] = None
     try:
         start_date, end_date = CommonAnalytics.convert_dates(
             self, request_data['start_date'],
             request_data['end_date'])  # noqa: E501
         return (start_date, end_date)
     except ValueError as err:
         raise JsonError(error=str(err), example='Sep 15 2018')
Пример #28
0
    def get_least_used_rooms(self, rooms_available, time_start, time_end):

        res = []
        number_of_least_events = float('inf')
        for room in rooms_available:
            calendar_events = CommonAnalytics.get_all_events_in_a_room(
                self, room['calendar_id'], time_start, time_end)
            output = []
            if not calendar_events:
                output.append({'RoomName': room['name'], 'has_events': False})
                number_of_least_events = 0
            for event in calendar_events:
                if event.get('attendees'):
                    event_details = CommonAnalytics.get_event_details(
                        self, event, room['calendar_id'])  # noqa: E501
                    output.append(event_details)
            if len(output) < number_of_least_events:
                number_of_least_events = len(output)
            res.append(output)
        analytics = CommonAnalytics.get_room_statistics(
            self, number_of_least_events, res)
        return analytics
Пример #29
0
    def get_meetings_duration_analytics(self, query, start_date, end_date):  # noqa: E501
        """ Get analytics for meetings durations in rooms
         :params
            - query
            - start_date, end_date(Time range)
        """
        start_date, end_date = CommonAnalytics.validate_current_date(
            self, start_date, end_date)
        rooms = CommonAnalytics.get_room_details(
            self, query)
        result = []
        for room in rooms:
            events = CommonAnalytics.get_all_events_in_a_room(
                self, room['room_id'], start_date, end_date)
            events_duration = []
            for event in events:
                start = event['event_start_time']
                end = event['event_end_time']
                duration = CommonAnalytics.get_time_duration_for_event(self, start, end)  # noqa: E501
                events_duration.append(duration)

            events_count = Counter(events_duration)

            events_in_minutes = [
                EventsDuration(
                    duration_in_minutes=events_duration,
                    number_of_meetings=events_count[events_duration])
                for index, events_duration in enumerate(events_count)
            ]

            output = RoomStatistics(
                room_name=room["name"],
                count=len(events_duration),
                total_duration=sum(events_duration),
                events=events_in_minutes
            )
            result.append(output)
        return result
Пример #30
0
 def get_all_rooms_summary(self, query, start_date, end_date):
     '''
     Get a summarry data for all rooms in a dataframe
     '''
     rooms_available = CommonAnalytics.get_calendar_id_name(self, query)
     all_rooms_data_df = AnalyticsReport.get_dataframe(
         self, rooms_available, start_date, end_date)
     rooms_summary_df = all_rooms_data_df['roomName'].value_counts(
     ).rename_axis(  # noqa: E501
         'Room').reset_index(name='Meetings')
     rooms_summary_df['% Share of All Meetings'] = round(
         rooms_summary_df['Meetings'] / rooms_summary_df['Meetings'].sum() *
         100)  # noqa: E501
     return rooms_summary_df