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
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)
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
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)
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
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)
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
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)
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
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)
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'