コード例 #1
0
 def resolve_all_structures(self, info):
     query = Structure.get_query(info)
     location_id = admin_roles.user_location_for_analytics_view()
     all_structures = query.filter(
         StructureModel.state == "active",
         StructureModel.location_id == location_id).all()
     return all_structures
コード例 #2
0
 def resolve_all_devices(self, info):
     query = Devices.get_query(info)
     location_id = admin_roles.user_location_for_analytics_view()
     location_query = LocationSchema.get_query(info)
     exact_location = location_query.filter(
         LocationModel.state == "active",
         LocationModel.id == location_id).first()
     location_name = exact_location.name.lower()
     return query.filter(func.lower(DevicesModel.location) == location_name)
コード例 #3
0
ファイル: schema.py プロジェクト: marcdomain/mrm_api
 def resolve_structure_by_structure_id(self, info, structure_id):
     if not structure_id.strip():
         raise GraphQLError("Please input a valid structureId")
     query = Structure.get_query(info)
     location_id = admin_roles.user_location_for_analytics_view()
     structure = query.filter(
         StructureModel.structure_id == structure_id).first()
     if not structure or location_id != structure.location_id:
         raise GraphQLError("Structure not found")
     return structure
コード例 #4
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)
コード例 #5
0
def resolve_booked_rooms_analytics(*args):
    instance, info, start_date, end_date, criteria, limit = args
    query = Room.get_query(info)
    location_id = admin_roles.user_location_for_analytics_view()
    active_rooms = query.filter(RoomModel.state == "active",
                                RoomModel.location_id == location_id)
    booked_rooms = get_most_and_least_booked_rooms(instance, active_rooms,
                                                   start_date, end_date, limit,
                                                   criteria)
    booked_rooms_statistics = Analytics(analytics=booked_rooms)
    return booked_rooms_statistics
コード例 #6
0
ファイル: schema.py プロジェクト: verenceLola/mrm_api
 def mutate(self, info, node_list):
     validate_structure_nodes(node_list)
     admin_location_id = admin_roles.user_location_for_analytics_view()
     nodes = []
     for node in node_list:
         validate_empty_fields(**node)
         node['name'] = node.name.strip()
         node['tag'] = node.tag.strip()
         nodes.append(StructureModel(**node, location_id=admin_location_id))
     db_session.add_all(nodes)
     db_session.commit()
     return CreateStructure(structure=nodes)
コード例 #7
0
 def get_room_details(self, query):
     """ Get all room(name, calendar_id, room_id) in a location
      :params
     """
     location_id = admin_roles.user_location_for_analytics_view()
     exact_query = room_join_location(query)
     rooms_in_locations = exact_query.filter(
         LocationModel.id == location_id)
     if not rooms_in_locations.all():
         if 'analytics' in request.url:
             raise JsonError(Message='No rooms in this location')
         else:
             raise GraphQLError("No rooms in this location")
     result = [{
         'name': room.name,
         'room_id': room.id,
         'calendar_id': room.calendar_id
     } for room in rooms_in_locations.all()]
     return result
コード例 #8
0
ファイル: schema_query.py プロジェクト: dnuwa/mrm_api
 def resolve_analytics_for_daily_room_events(self, info, **kwargs):
     start_date = kwargs.get('start_date')
     end_date = kwargs.get('end_date')
     location_id = admin_roles.user_location_for_analytics_view()
     start_date, end_date = CommonAnalytics().convert_dates(
         start_date, end_date)
     query = Room.get_query(info)
     all_events, all_dates = RoomSchedules().get_all_room_schedules(
         query, start_date, end_date, location_id)
     all_days_events = []
     for date in set(all_dates):
         daily_events = []
         for event in all_events:
             if date == event["date_of_event"]:
                 current_event = CalendarEvent(
                     no_of_participants=event["no_of_participants"],
                     event_summary=event["event_summary"],
                     start_time=event["start_time"],
                     end_time=event["end_time"],
                     room_name=event["room_name"],
                     event_id=event["event_id"],
                     cancelled=event["cancelled"],
                     state=event["state"],
                     checked_in=event["checked_in"],
                     check_in_time=event["check_in_time"],
                     meeting_end_time=event["meeting_end_time"])
                 daily_events.append(current_event)
         all_days_events.append(DailyEvents(day=date, events=daily_events))
     page = kwargs.get('page')
     per_page = kwargs.get('per_page')
     if page and per_page:
         paginated_results = ListPaginate(iterable=all_days_events,
                                          per_page=per_page,
                                          page=page)
         current_page = paginated_results.current_page
         has_previous = paginated_results.has_previous
         has_next = paginated_results.has_next
         pages = paginated_results.pages
         return PaginatedEvents(DailyRoomEvents=current_page,
                                has_next=has_next,
                                has_previous=has_previous,
                                pages=pages)
     return PaginatedEvents(DailyRoomEvents=all_days_events)
コード例 #9
0
ファイル: schema.py プロジェクト: verenceLola/mrm_api
    def resolve_all_devices(self, info, **kwargs):
        device_labels = kwargs.get('device_labels')
        query = Devices.get_query(info)
        location_id = admin_roles.user_location_for_analytics_view()
        location_query = LocationSchema.get_query(info)
        exact_location = location_query.filter(
            LocationModel.state == "active",
            LocationModel.id == location_id).first()
        location_name = exact_location.name.lower()
        all_devices = query.filter(
            func.lower(DevicesModel.location) == location_name,
            DevicesModel.state == "active")

        if device_labels:
            all_devices = all_devices.join(RoomModel)
            for device_label in device_labels.split(','):
                all_devices = all_devices.filter(
                    cast(RoomModel.room_labels, String)
                    .ilike(f'%{device_label.strip()}%'))
        return all_devices
コード例 #10
0
 def resolve_all_analytics(self, info, **kwargs):
     start_date = kwargs.get('start_date')
     end_date = kwargs.get('end_date')
     unconverted_dates = {'start': start_date, 'end': end_date}
     location_id = admin_roles.user_location_for_analytics_view()
     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)
コード例 #11
0
 def get_user_time_zone():
     user_location = admin_roles.user_location_for_analytics_view(
         location_name=True)
     if user_location.lower() in ['lagos', 'nairobi', 'kigali', 'kampala']:
         return 'Africa/' + user_location
     return 'Etc/UTC'