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