def add_new_virtual_event(org_id): user = get_user_for_token_identity() if user: org = get_organization_if_user_is_admin(org_id, user) if not org: return dumps({"ok": False, "message": "Invalid organization"}), 400 data = request.json normalizer = cerberus.Validator(event_input_schema, purge_unknown=False) event_input = normalizer.normalized(data) event = VirtualEvent.create( name=event_input.get("eventName"), date=event_input.get("eventDatetime"), created_date=datetime.datetime.utcnow(), created_under_timezone=event_input.get("createdUnderTimezone"), created_by=user, organization=org, ) return ( dumps({ "ok": True, "message": "Event created successfully", "virtual_event": event.to_mongo().to_dict(), }), 200, ) return dumps({"ok": False, "message": "Invalid user"}), 400
def get_attendees_to_virtual_event(org_id, _id): user = get_user_for_token_identity() if user: org = get_organization_if_user_is_admin(org_id, user) if not org: return dumps({"ok": False, "message": "Invalid organization"}), 400 if not bson.objectid.ObjectId.is_valid(_id): return dumps({"ok": False, "message": "Invalid Event Id"}), 420 event = VirtualEvent.objects(_id=ObjectId(_id), organization=org).first() if not event: logger.error("Can't retrieve event id {}".format(_id)) return ( dumps({ "ok": False, "message": "No event found with that id" }), 420, ) return ( dumps({ "ok": True, "attendee_list": [x.to_mongo().to_dict() for x in event.attendees], }), 200, ) return dumps({"ok": False, "message": "Invalid user"}), 400
def cancel_event(org_id, _id): user = get_user_for_token_identity() if user: org = get_organization_if_user_is_admin(org_id, user) if not org: return dumps({"ok": False, "message": "Invalid organization"}), 400 if not bson.objectid.ObjectId.is_valid(_id): return dumps({"ok": False, "message": "Invalid Event Id"}), 420 event = VirtualEvent.objects(id=ObjectId(_id), organization=org).first() if not event: logger.error("Can't retrieve event id {}".format(_id)) return ( dumps({ "ok": False, "message": "No event found with that id" }), 420, ) event.cancel(user) return (dumps({ "ok": True, "message": "Event Successfully Canceled" }), 200) return dumps({"ok": False, "message": "Invalid user"}), 400
def update_alert_settings(org_id, _id): user = get_user_for_token_identity() if user: org = get_organization_if_user_is_admin(org_id, user) if not org: return dumps({"ok": False, "message": "Invalid organization"}), 400 if not bson.objectid.ObjectId.is_valid(_id): return dumps({"ok": False, "message": "Invalid Event Id"}), 420 event = VirtualEvent.objects(id=ObjectId(_id), organization=org).first() if not event: logger.error("Can't retrieve event id {}".format(_id)) return ( dumps({ "ok": False, "message": "No event found with that id" }), 420, ) data = request.json alert_settings = data["alertSettings"] event.alert_settings.update(**alert_settings) return ( dumps({ "ok": True, "message": "Alert settings successfully updated", "alert_settings": event.alert_settings.to_mongo().to_dict(), }), 200, ) return dumps({"ok": False, "message": "Invalid user"}), 400
def add_attendees_to_virtual_event(org_id, _id): user = get_user_for_token_identity() if user: org = get_organization_if_user_is_admin(org_id, user) if not org: return dumps({"ok": False, "message": "Invalid organization"}), 400 if not bson.objectid.ObjectId.is_valid(_id): return dumps({"ok": False, "message": "Invalid Event Id"}), 420 event = VirtualEvent.objects(_id=ObjectId(_id), organization=org).first() if not event: logger.error("Can't retrieve event id {}".format(_id)) return ( dumps({ "ok": False, "message": "No event found with that id" }), 420, ) data = request.json if data.get("addExistingMemberId"): member = Member.objects.get( id=ObjectId(data["addExistingMemberId"])) else: member = Member( first_name=data.get("userFirstName"), last_name=data.get("userLastName"), phone_number=data.get("userPhoneNumber"), email=data.get("userEmail"), organization=org, active=True, ) member.save() if member in event.attendees: return ( dumps({ "ok": False, "message": "Attendee is already part of this event" }), 400, ) event.add_attendee(member) return ( dumps({ "ok": True, "message": "Attendee added successfully" }), 200, ) return dumps({"ok": False, "message": "Invalid user"}), 400
def get_user_virtual_events(org_id): user = get_user_for_token_identity() if user: org = get_organization_if_user_is_admin(org_id, user) if not org: return dumps({"ok": False, "message": "Invalid organization"}), 400 # specific mongo query data = request.args events = VirtualEvent.get_organization_events( org, event_type=data.get("type")) normalizer = cerberus.Validator(event_list_schema, purge_unknown=True) event_list = normalizer.normalized( {"events": [x.to_mongo().to_dict() for x in events]}) return (dumps(event_list), 200) return dumps({"ok": False, "message": "Invalid user"}), 400
def send_reminders(self, ): notifier = Notifier() threshold_timestamp = self.now + relativedelta( minutes=self.minutes_from_now) self.logger.info("{} - {}".format(self.now, threshold_timestamp)) upcoming_events = VirtualEvent.objects(canceled__ne=True, date__gt=self.now, date__lte=threshold_timestamp) self.logger.info("Sending reminders for {} upcoming events".format( upcoming_events.count())) for event in upcoming_events: if self.reminder_name not in event.reminders_sent: for attendee in event.attendees: try: notifier.notify( comms_name=self.reminder_name, recipient_id=str(attendee.id), data={ "event_name": event.name, "organization_name": event.organization.name, "first_name": attendee.first_name, "meeting_url": event.meeting_details.url, }, profile=attendee.contact_profile, idempotency_key=None, ) except Exception as e: # skipcq: PYL-W0703 self.logger.exception(e) # notify organizer try: notifier.notify( comms_name=self.reminder_name, recipient_id=str(event.created_by.id), data={ "event_name": event.name, "organization_name": event.organization.name, "first_name": event.organization.name, "meeting_url": event.meeting_details.url, }, profile=event.created_by.contact_profile, idempotency_key=None, ) except Exception as e: # skipcq: PYL-W0703 self.logger.exception(e) event.reminders_sent.append(self.reminder_name) event.save() self.logger.info("{} reminders sent for {}".format( self.reminder_name, str(event.id)))
def remove_attendees_from_virtual_event(org_id, _id): user = get_user_for_token_identity() if user: org = get_organization_if_user_is_admin(org_id, user) if not org: return dumps({"ok": False, "message": "Invalid organization"}), 400 if not bson.objectid.ObjectId.is_valid(_id): return dumps({"ok": False, "message": "Invalid Event Id"}), 420 event = VirtualEvent.objects(id=ObjectId(_id), organization=org).first() if not event: logger.error("Can't retrieve event id {}".format(_id)) return ( dumps({ "ok": False, "message": "No event found with that id" }), 420, ) data = request.json if not bson.objectid.ObjectId.is_valid(data.get("attendeeId")): return dumps({"ok": False, "message": "Invalid Attendee Id"}), 420 attendee = Member.objects(id=ObjectId(data["attendeeId"])).first() if attendee not in event.attendees: return ( dumps({ "ok": False, "message": "Attendee is not part of this event" }), 400, ) event.remove_attendee(attendee) return ( dumps({ "ok": True, "message": "Attendee removed successfully" }), 200, ) return dumps({"ok": False, "message": "Invalid user"}), 400
def get_virtual_event(org_id, _id): user = get_user_for_token_identity() if user: org = get_organization_if_user_is_admin(org_id, user) if not org: return dumps({"ok": False, "message": "Invalid organization"}), 400 if not bson.objectid.ObjectId.is_valid(_id): return dumps({"ok": False, "message": "Invalid Event Id"}), 420 event = VirtualEvent.objects(_id=ObjectId(_id), organization=org).first() if not event: logger.error("Can't retrieve event id {}".format(_id)) return ( dumps({ "ok": False, "message": "No event found with that id" }), 420, ) normalizer = cerberus.Validator(event_base_schema, purge_unknown=True) parsed_event = normalizer.normalized(event.to_mongo().to_dict()) return dumps({"ok": True, "event": parsed_event}), 200 return dumps({"ok": False, "message": "Invalid user"}), 400