Esempio n. 1
0
def make_event(title=None,
               location=None,
               description=None,
               begin_date=None,
               begin_time=None,
               end_date=None,
               end_time=None,
               organizer=None,
               attendees=[]):
    if title is None:
        raise Exception("make_event: a title parameter is required")
    if begin_date is None:
        raise Exception("make_event: a begin_date parameter is required")
    if begin_time is None:
        raise Exception("make_event: a begin_time parameter is required")
    if end_date is None:
        raise Exception("make_event: an end_date parameter is required")
    if end_time is None:
        raise Exception("make_event: an end_time parameter is required")
    c = Calendar()
    e = Event()
    if organizer is not None:
        e.organizer = Organizer(common_name=organizer.name.full(),
                                email=organizer.email)
    if len(attendees) > 0:
        e.attendees = [
            Attendee(common_name=attendee.name.full(), email=attendee.email)
            for attendee in attendees
        ]
    e.name = str(title)
    e.begin = as_datetime(
        begin_date.replace_time(begin_time),
        timezone='UTC').format_datetime('yyyy-MM-dd hh:mm:ss')
    e.end = as_datetime(end_date.replace_time(end_time),
                        timezone='UTC').format_datetime('yyyy-MM-dd hh:mm:ss')
    if location not in (None, ''):
        e.location = str(location)
    if description not in (None, ''):
        e.description = str(description)
    c.events.add(e)
    c.events
    ics_file = DAFile('ics_file')
    ics_file.set_random_instance_name()
    ics_file.initialize(filename="event.ics", mimetype="text/calendar")
    with open(ics_file.path(), 'w') as f:
        f.write(str(c))
    ics_file.commit()
    return ics_file
Esempio n. 2
0
    def invite_event(self, request, *args, **kwargs):
        """
        a)Request Event uuid, Room uuid, Email - Array
        b)Identify user type and send relevant emails with link to Registered and Unregistered user
        """
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        event_uuid = request.data['event_uuid']
        room_uuid = request.data['room_uuid']
        emails = request.data['emails']
        event_name = request.data['event_name']
        organization_name = request.data['organization_name']
        start_date_time = request.data['start_date_time']
        end_date_time = request.data['end_date_time']

        invitation_link_list = []

        c = Calendar()
        e = Event()
        e.name = str(event_name)
        e.begin = str(start_date_time)
        e.end = str(end_date_time)
        e.uid = event_uuid
        e.organizer = Organizer(common_name=str(organization_name),
                                email=DEFAULT_FROM_EMAIL)
        c.events.add(e)

        for email in emails:
            user = CoreUser.objects.filter(email=email).first()
            # if the user is registered
            if user:
                """
                for registered users send them a test email "Registered Users! Welcome to a new event at organization".
                """
                email_address = email
                organization = str(user.organization)
                reg_location = urljoin(settings.FRONTEND_URL,
                                       settings.EVENT_LOGIN_URL_PATH)
                reg_location = reg_location + '?token={}'
                token = create_invitation_token_event(email_address,
                                                      organization, room_uuid,
                                                      event_uuid)
                invitation_link = self.request.build_absolute_uri(
                    reg_location.format(token))
                invitation_link_list.append(invitation_link)
                subject = 'Welcome to event {} at {}'.format(
                    event_name, organization)
                context = {
                    'organization_name': organization,
                    'event_link': invitation_link,
                    'event_uuid': event_uuid,
                    'room_uuid': room_uuid,
                    'event_name': event_name
                }
                template_name = 'email/coreuser/invite_event.txt'
                html_template_name = 'email/coreuser/invite_event.html'
                send_email(email_address, subject, context, template_name,
                           html_template_name, str(c))
            # if the user is not registered
            else:
                """
                for unregistered users send them a test email "Unregistered Users!
                Welcome to a new event at organization'".
                """
                email_address = email
                organization = organization_name
                reg_location = urljoin(settings.FRONTEND_URL,
                                       settings.EVENT_REGISTRATION_URL_PATH)
                reg_location = reg_location + '?token={}'
                token = create_invitation_token_event(email_address,
                                                      organization, room_uuid,
                                                      event_uuid)
                # build the invitation link
                invitation_link = self.request.build_absolute_uri(
                    reg_location.format(token))
                invitation_link_list.append(invitation_link)
                subject = 'Welcome to event {} at {}'.format(
                    event_name, organization)
                context = {
                    'organization_name': organization,
                    'event_link': invitation_link,
                    'event_uuid': event_uuid,
                    'room_uuid': room_uuid,
                    'event_name': event_name
                }
                template_name = 'email/coreuser/invite_event.txt'
                html_template_name = 'email/coreuser/invite_event.html'
                send_email(email_address, subject, context, template_name,
                           html_template_name, str(c))
        return Response(
            {
                'detail': 'The invitations were sent successfully.',
                'event_link': [invitation_link_list],
            },
            status=status.HTTP_200_OK)