Beispiel #1
0
 def mutate(self, info, **kwargs):
     # mutation to create an event
     room_id, event = check_event_in_db(self, info, "cancelled", **kwargs)
     try:
         device_last_seen = parser.parse(
             kwargs['start_time']) + timedelta(minutes=10)
     except ValueError:
         raise GraphQLError("Invalid start time")
     update_device_last_seen(info, room_id, device_last_seen)
     if not event:
         event = EventsModel(
             event_id=kwargs['event_id'],
             room_id=room_id,
             event_title=kwargs['event_title'],
             start_time=kwargs['start_time'],
             end_time=kwargs['end_time'],
             number_of_participants=kwargs['number_of_participants'],
             checked_in=False,
             cancelled=True,
             auto_cancelled=True)
         event.save()
     calendar_event = get_single_calendar_event(kwargs['calendar_id'],
                                                kwargs['event_id'])
     event_reject_reason = 'after 10 minutes'
     if not notification.event_cancellation_notification(
             calendar_event, room_id, event_reject_reason):
         raise GraphQLError("Event cancelled but email not sent")
     return CancelEvent(event=event)
Beispiel #2
0
    def mutate(self, info, **kwargs):
        room_id, event = check_event_in_db(self, info, "ended", **kwargs)
        if not event:
            event = EventsModel(event_id=kwargs['event_id'],
                                meeting_end_time=kwargs['meeting_end_time'])
            event.save()

        return EndEvent(event=event)
Beispiel #3
0
    def sync_single_room_events(self, room):
        """
        This method gets data from the calendar api
        and syncs it with the local data

        """
        next_page = None
        next_sync_token = None
        while True:
            event_results = get_google_calendar_events(
                calendarId=room.calendar_id,
                syncToken=room.next_sync_token,
                pageToken=next_page)

            next_page = event_results.get("nextPageToken")
            room_events = event_results["items"]
            next_sync_token = event_results.get("nextSyncToken")
            for event in room_events:
                existing_event = EventsModel.query.filter_by(
                    event_id=event.get("id")).first()
                participants = event.get('attendees')
                number_of_attendees = 0
                if participants:
                    number_of_attendees = len(participants)

                if existing_event and event.get("status") == "cancelled":
                    existing_event.state = "archived"
                    existing_event.save()

                elif existing_event:
                    existing_event.event_title = event.get("summary")
                    existing_event.start_time = event["start"].get(
                        "dateTime") or event["start"].get("date")
                    existing_event.end_time = event["end"].get(
                        "dateTime") or event["end"].get("date")
                    existing_event.number_of_participants = number_of_attendees
                    existing_event.save()

                elif not event.get("status") == "cancelled":
                    new_event = EventsModel(
                        event_id=event.get("id"),
                        recurring_event_id=event.get("recurringEventId"),
                        room_id=room.id,
                        event_title=event.get("summary"),
                        start_time=event["start"].get("dateTime")
                        or event["start"].get("date"),
                        end_time=event["end"].get("dateTime")
                        or event["end"].get("date"),
                        number_of_participants=number_of_attendees,
                        checked_in=False,
                        cancelled=False)
                    new_event.save()
            if not next_page:
                break

        room.next_sync_token = next_sync_token
        room.save()
 def update_recurring_event_status(self):
     """
     checks for events to cancel and updates the relevant data
     to the events model
     """
     print("cancelling events...")
     query = RoomModel.query
     now = datetime.utcnow().isoformat() + "Z"
     next_day = (datetime.utcnow() +
                 relativedelta(hours=24)).isoformat() + "Z"
     events = self.get_all_recurring_events(query, now, next_day)
     for event in events:
         start_date = event["start_date"]
         end_date = event["end_date"]
         new_recurring_event = EventsModel(
             event_id=event["event_id"],
             recurring_event=event["recurring_event_id"],
             room_id=event["room_id"],
             event_title=event["event_summary"],
             start_time=start_date,
             end_time=end_date,
             checked_in=False,
             cancelled=False)
         event_query = EventsModel.query
         calendar_id = event["calendar_id"]
         recurring_event_id = event["recurring_event_id"]
         service = Credentials().set_api_credentials()
         missed_checkins = event_query.filter(
             EventsModel.recuring_event_id == event["recurring_event_id"]
             and EventsModel.checked_in == "False")
         if missed_checkins.count() >= 3:
             event = service.events().get(
                 calendarId=calendar_id,
                 eventId=recurring_event_id).execute()
             attendees = event["attendees"]
             room_index = self.get_room_index_from_attendees(
                 attendees, calendar_id)
             event["attendees"][room_index]["responseStatus"] = "declined"
             service.events().patch(calendarId=calendar_id,
                                    eventId=recurring_event_id,
                                    body=event,
                                    sendUpdates="all").execute()
             event_in_database = EventsModel.query.filter_by(
                 id=event.get("id")).first()
             room_id = event_in_database.room_id
             event_reject_reason = "for 3 consecutive meetings"
             if not event_cancellation_notification(event, room_id,
                                                    event_reject_reason):
                 raise GraphQLError("Event cancelled but email not sent")
             for missed_checkin in missed_checkins:
                 missed_checkin.state = "archived"
                 missed_checkin.save()
         else:
             event_exists = event_query.filter_by(
                 event_id=event["event_id"])
             if not event_exists.count():
                 new_recurring_event.save()
Beispiel #5
0
    def mutate(self, info, **kwargs):
        room_id = Events.check_status(self, info, **kwargs)
        cancelled_event = EventsModel(event_id=kwargs['event_id'],
                                      room_id=room_id,
                                      checked_in=False,
                                      cancelled=True)
        cancelled_event.save()

        return CancelEvent(event=cancelled_event)
Beispiel #6
0
    def mutate(self, info, **kwargs):
        room_id = Events.check_status(self, info, **kwargs)
        new_event = EventsModel(event_id=kwargs['event_id'],
                                room_id=room_id,
                                checked_in=True,
                                cancelled=False)
        new_event.save()

        return EventCheckin(event=new_event)
Beispiel #7
0
 def mutate(self, info, **kwargs):
     room_id, event = check_event_in_db(self, info, "checked_in", **kwargs)
     if not event:
         event = EventsModel(
             event_id=kwargs['event_id'],
             room_id=room_id,
             event_title=kwargs['event_title'],
             start_time=kwargs['start_time'],
             end_time=kwargs['end_time'],
             number_of_participants=kwargs['number_of_participants'],
             checked_in=True,
             cancelled=False)
         event.save()
     return EventCheckin(event=event)
Beispiel #8
0
    def mutate(self, info, **kwargs):
        # mutation to create an event
        room_id, event = check_event_in_db(self, info, "cancelled", **kwargs)
        if not event:
            event = EventsModel(
                event_id=kwargs['event_id'],
                room_id=room_id,
                event_title=kwargs['event_title'],
                start_time=kwargs['start_time'],
                end_time=kwargs['end_time'],
                number_of_participants=kwargs['number_of_participants'],
                checked_in=False,
                cancelled=True)
            event.save()

        return CancelEvent(event=event)