Exemple #1
0
    def create_event(self):
        """
        Create an event
        """
        groups = MemberGroup.objects.all()
        if len(groups) == 0:
            self.stdout.write("Your database does not contain any "
                              "member groups.")
            self.stdout.write("Creating a committee.")
            self.create_member_group(Committee)
            groups = MemberGroup.objects.all()
        event = Event()

        event.title_nl = _generate_title()
        event.title_en = event.title_nl
        event.description_nl = _faker.paragraph()
        event.description_en = _faker.paragraph()
        event.start = _faker.date_time_between("-30d", "+120d", _current_tz)
        duration = math.ceil(random.expovariate(0.2))
        event.end = event.start + timedelta(hours=duration)
        event.organiser = random.choice(groups)
        event.category = random.choice(Event.EVENT_CATEGORIES)[0]

        if random.random() < 0.5:
            week = timedelta(days=7)
            event.registration_start = _faker.date_time_between_dates(
                datetime_start=event.start - 4 * week,
                datetime_end=event.start - week,
                tzinfo=_current_tz,
            )
            event.registration_end = _faker.date_time_between_dates(
                datetime_start=event.registration_start,
                datetime_end=event.start,
                tzinfo=_current_tz,
            )
            event.cancel_deadline = _faker.date_time_between_dates(
                datetime_start=event.registration_end,
                datetime_end=event.start,
                tzinfo=_current_tz,
            )

        event.location_nl = _faker.street_address()
        event.location_en = event.location_nl
        event.map_location = event.location_nl
        event.send_cancel_email = False

        if random.random() < 0.5:
            event.price = random.randint(100, 2500) / 100
            event.fine = max(
                5.0,
                random.randint(round(100 * event.price),
                               round(500 * event.price)) / 100,
            )

        if random.random() < 0.5:
            event.max_participants = random.randint(20, 200)

        event.published = random.random() < 0.9

        event.save()
Exemple #2
0
def create_reminder(by, date, reminder_choice, registration, step, timezone):
    offset = get_reminder_minutes_offset(reminder_choice)
    when = date - dt.timedelta(minutes=offset)

    reminder, created_at = Reminder.objects.get_or_create(
        registration=registration)

    reminder.step = step
    reminder.by = by
    reminder.when = when
    reminder.date = date
    reminder.timezone = timezone
    reminder.save()

    costumer_name = registration.costumer.get_full_name()

    event = Event.objects.filter(reminder=reminder).first()
    if not event:
        event = Event(reminder=reminder)

    event.user = registration.consultant
    event.title = u'Ad Astra Reminder - {}'.format(costumer_name)
    event.description = u'You have one {} with {}'.format(
        reminder.get_step_display(), costumer_name)
    event.start = date
    event.end = date + dt.timedelta(minutes=30)
    event.save()
Exemple #3
0
def create_edit(request):
    request_data = json.loads(request.body)

    pk = request_data.get('id', '')
    role = get_role(request.user)
    send_email = request_data.get('send_email', False)
    reminder = request_data.get('reminder', None)
    by = request_data.get('by', None)
    timezone = request_data.get('timezone', None)
    start = request_data.get('start', '')
    end = request_data.get('end', '')
    title = request_data.get('title', '')
    user_ids = request_data.get('user_ids', [])
    market_ids = request_data.get('market_ids', [])
    description = request_data.get('description', '')
    color = request_data.get('color', '')

    ids_to_create = []

    if pk:
        event = Event.objects.get(pk=pk)
        is_owner = request.user == event.user
    else:
        event = Event()
        event.user = request.user
        is_owner = True

    if is_owner:
        # can delete this property?
        has_change = False
        event.all_day = False
        event.title = title
        event.description = description

        if color and role in ['corporate', 'admin', 'finance']:
            event.color = color

        if start:
            new_start = unaware_to_utc(
                datetime.strptime(start, "%Y-%m-%dT%H:%M:%S.%fZ"))
            if not new_start == event.start:
                has_change = True
            event.start = new_start

        if end:
            new_end = unaware_to_utc(
                datetime.strptime(end, "%Y-%m-%dT%H:%M:%S.%fZ"))
            if not new_end == event.end:
                has_change = True
            event.end = new_end

        if role in ['coordinator', 'admin', 'corporate', 'finance']:
            visibility = int(request_data['visibility'])

            if pk and ((event.visibility == 5 and not visibility == 5) or
                       (visibility == 5 and len(market_ids) == 0)):
                event.markets.clear()

            # only request user and should see anywhere
            if visibility == 2:
                event.is_private = True
                if pk and not (event.visibility == visibility):
                    EventUsers.objects.exclude(user=request.user).filter(
                        event=event).delete()
            # all users
            elif visibility == 4:
                event.is_private = False

            # specify characters and markets
            elif visibility == 5:
                if pk:
                    existing_ids = EventUsers.objects.filter(
                        event=event).values_list('user_id', flat=True)

                    ids_to_create = [
                        i for i in user_ids if i not in existing_ids
                    ]
                    ids_to_delete = [
                        i for i in existing_ids
                        if i not in user_ids and not i == request.user.pk
                    ]

                    EventUsers.objects.filter(
                        event=event, user_id__in=ids_to_delete).delete()
                else:
                    ids_to_create = user_ids

            event.visibility = visibility

        else:
            event.visibility = 2

        event.save()

        if event.visibility == 5 and len(market_ids) > 0:
            event.markets.set(market_ids)

        if has_change and pk:
            EventUsers.objects.filter(event=event).update(sent=False)

        if event.visibility == 5 and len(ids_to_create) > 0:
            entities_to_create = []
            for user_id in ids_to_create:
                entities_to_create.append(
                    EventUsers(event=event, user_id=user_id))

            EventUsers.objects.bulk_create(entities_to_create)

    event_users, created = EventUsers.objects.get_or_create(user=request.user,
                                                            event=event)

    if by and reminder:
        offset = get_reminder_minutes_offset(reminder)
        event_users.sending_date = event.start - dt.timedelta(minutes=offset)
        event_users.timezone = timezone
        event_users.by = by
        event_users.reminder = reminder
        event_users.save()

    if not pk and event.visibility in [4, 5] and send_email:
        query_set = User.objects.prefetch_related(
            'groups', 'consultantprofile', 'consultantprofile__market',
            'consultantprofile__supervisor', 'person').acs_users()

        if event.visibility == 5:
            conditions = []
            q_objects = Q()
            if len(market_ids) > 0:
                conditions.append(
                    Q(consultantprofile__market__pk__in=market_ids))

            if len(ids_to_create) > 0:
                conditions.append(Q(pk__in=ids_to_create))

            for condition in conditions:
                q_objects |= condition

            if len(conditions) > 0:
                query_set = query_set.filter(q_objects)

        mails = query_set.values_list('person__email', flat=True)

        if len(mails) > 0:
            event_start_aware = utc_to_timezone_or_default(
                event.start, timezone)

            context = {
                'by': request.user,
                'event': event,
                'event_start_date': event_start_aware.strftime('%b %d, %Y'),
                'event_start_time': event_start_aware.strftime('%I:%M %p'),
                'timezone': timezone
            }

            email = EmailMessage('New event invitation in your ACS dashboard',
                                 render_to_string(
                                     'events/emails/new_event.html', context),
                                 bcc=mails)
            email.content_subtype = 'html'
            email.send()

    # TODO implement serializer
    response = {
        'id':
        event.id,
        'title':
        event.title,
        'start':
        event.start.isoformat() if event.start else '',
        'end':
        event.end.isoformat() if event.end else '',
        'description':
        event.description,
        'url':
        event.url,
        'allDay':
        event.all_day,
        'userId':
        int(0 if event.user is None else event.user_id),
        'visibility':
        event.visibility,
        'imageUrl': (event.image.url
                     if event.image and hasattr(event.image, 'url') else ''),
        'reminderId':
        event.reminder_id if event.reminder_id else '',
        'eventuser': {
            'by': event_users.by,
            'reminder': event_users.reminder
        }
    }

    return JsonResponse(response)
    def create_event(self, event_dict):
        e = Event(id=event_dict.get('eventId'))
        e.title = u"{0} {1}".format(
            event_dict.get('title', '').strip(),
            event_dict.get('subTitle', '').strip())
        e.description = event_dict.get('description', '')

        start = arrow.get(event_dict.get('startDay')).naive
        start = timezone.make_aware(start, timezone.get_default_timezone())
        end = arrow.get(event_dict.get('endDay')).naive
        end = timezone.make_aware(end, timezone.get_default_timezone())
        time_string = event_dict.get('dateFreeForm', '\n').lower().splitlines()
        if time_string:
            time_string = time_string[0]
            time = time_string.replace('midnight', '12:00').replace(
                'close', '4:00').replace('closing', '4:00').replace(';', ':')
            time = re.sub('[^0-9:]', ' ', time)
            time = time.split()
            if time:
                start_time = time[0]
                if ":" not in start_time:
                    start_time += ":00"
                start_time = parse_time(start_time)
                start = start.replace(hour=start_time.hour,
                                      minute=start_time.minute)
                if start_time.hour < 4:
                    start += timezone.timedelta(days=1)
                else:
                    start += timezone.timedelta(hours=12)

                if any(separator in time_string
                       for separator in ['to', 'and', '&']) and len(time) > 1:
                    print time_string
                    print time
                    print e.id
                    end_time = time[1]
                    if ':' not in end_time:
                        end_time += ":00"
                    end_time = parse_time(end_time)
                    end = end.replace(hour=end_time.hour,
                                      minute=end_time.minute)
                    if end_time.hour < 6:
                        end += timezone.timedelta(days=1)
                    else:
                        end += timezone.timedelta(hours=12)

                    if 'and' in time_string or '&' in time_string:
                        end += timezone.timedelta(hours=1, minutes=30)
                else:
                    end = start + timezone.timedelta(hours=1, minutes=30)

        e.start = start
        e.end = end

        if event_dict.get('media'):
            e.photo = u"images/{0}".format(
                event_dict.get('media')[0]['fileName'])

        e.save()

        leaders = {}
        for performer in event_dict.get('performers'):
            if performer.get('personTypeId') == 69:
                leaders.setdefault(e.id, []).append(performer.get('personId'))
            else:
                gig, _ = GigPlayed.objects.get_or_create(
                    artist_id=performer.get('personId'),
                    event_id=e.id,
                    role_id=performer.get('personTypeId'),
                    sort_order=performer.get('sortOrder') or "")

        for event_id, artists in leaders.iteritems():
            for artist_id in artists:
                # In some rare cases, artist is only listed as leader, without an instrument
                # so we create a new GigPlayed object with that role
                try:
                    gig = GigPlayed.objects.get(event_id=event_id,
                                                artist_id=artist_id)
                    gig.is_leader = True
                    gig.save()
                except GigPlayed.DoesNotExist:
                    gig = GigPlayed.objects.create(artist_id=artist_id,
                                                   event_id=event_id,
                                                   role_id=69,
                                                   is_leader=True,
                                                   sort_order=-1)

        return e
    def create_event(self, event_dict):
        e = Event(id=event_dict.get('eventId'))
        e.title = u"{0} {1}".format(event_dict.get('title', '').strip(), event_dict.get('subTitle', '').strip())
        e.description = event_dict.get('description', '')

        start = arrow.get(event_dict.get('startDay')).naive
        start = timezone.make_aware(start, timezone.get_default_timezone())
        end = arrow.get(event_dict.get('endDay')).naive
        end = timezone.make_aware(end, timezone.get_default_timezone())
        time_string = event_dict.get('dateFreeForm', '\n').lower().splitlines()
        if time_string:
            time_string = time_string[0]
            time = time_string.replace('midnight', '12:00').replace(
                'close', '4:00').replace('closing', '4:00').replace(';', ':')
            time = re.sub('[^0-9:]', ' ', time)
            time = time.split()
            if time:
                start_time = time[0]
                if ":" not in start_time:
                    start_time += ":00"
                start_time = parse_time(start_time)
                start = start.replace(hour=start_time.hour, minute=start_time.minute)
                if start_time.hour < 4:
                    start += timezone.timedelta(days=1)
                else:
                    start += timezone.timedelta(hours=12)

                if any(separator in time_string for separator in ['to', 'and', '&']) and len(time) > 1:
                    print time_string
                    print time
                    print e.id
                    end_time = time[1]
                    if ':' not in end_time:
                        end_time += ":00"
                    end_time = parse_time(end_time)
                    end = end.replace(hour=end_time.hour, minute=end_time.minute)
                    if end_time.hour < 6:
                        end += timezone.timedelta(days=1)
                    else:
                        end += timezone.timedelta(hours=12)

                    if 'and' in time_string or '&' in time_string:
                        end += timezone.timedelta(hours=1, minutes=30)
                else:
                    end = start + timezone.timedelta(hours=1, minutes=30)

        e.start = start
        e.end = end

        if event_dict.get('media'):
            e.photo = u"images/{0}".format(event_dict.get('media')[0]['fileName'])

        e.save()

        leaders = {}
        for performer in event_dict.get('performers'):
            if performer.get('personTypeId') == 69:
                leaders.setdefault(e.id, []).append(performer.get('personId'))
            else:
                gig, _ = GigPlayed.objects.get_or_create(
                    artist_id=performer.get('personId'),
                    event_id=e.id,
                    role_id=performer.get('personTypeId'),
                    sort_order=performer.get('sortOrder') or ""
                )

        for event_id, artists in leaders.iteritems():
            for artist_id in artists:
                # In some rare cases, artist is only listed as leader, without an instrument
                # so we create a new GigPlayed object with that role
                try:
                    gig = GigPlayed.objects.get(event_id=event_id, artist_id=artist_id)
                    gig.is_leader = True
                    gig.save()
                except GigPlayed.DoesNotExist:
                    gig = GigPlayed.objects.create(
                        artist_id=artist_id,
                        event_id=event_id,
                        role_id=69,
                        is_leader=True,
                        sort_order=-1
                    )

        return e