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