def test_edge_case_events(self): cal = Calendar(name="MyCal") cal.save() data_1 = { 'title': 'Edge case event test one', 'start': datetime.datetime(2013, 1, 5, 8, 0, tzinfo=pytz.utc), 'end': datetime.datetime(2013, 1, 5, 9, 0, tzinfo=pytz.utc), 'calendar': cal } data_2 = { 'title': 'Edge case event test two', 'start': datetime.datetime(2013, 1, 5, 9, 0, tzinfo=pytz.utc), 'end': datetime.datetime(2013, 1, 5, 12, 0, tzinfo=pytz.utc), 'calendar': cal } event_one = Event(**data_1) event_two = Event(**data_2) event_one.save() event_two.save() occurrences_two = event_two.get_occurrences(datetime.datetime(2013, 1, 5, 9, 0, tzinfo=pytz.utc), datetime.datetime(2013, 1, 5, 12, 0, tzinfo=pytz.utc)) self.assertEqual(1, len(occurrences_two)) occurrences_one = event_one.get_occurrences(datetime.datetime(2013, 1, 5, 9, 0, tzinfo=pytz.utc), datetime.datetime(2013, 1, 5, 12, 0, tzinfo=pytz.utc)) self.assertEqual(0, len(occurrences_one))
def setUp(self): weekly = Rule(frequency = "WEEKLY") weekly.save() daily = Rule(frequency = "DAILY") daily.save() cal = Calendar(name="MyCal") cal.save() self.event1 = Event(**{ 'title': 'Weekly Event', 'start': datetime.datetime(2009, 4, 1, 8, 0), 'end': datetime.datetime(2009, 4, 1, 9, 0), 'end_recurring_period' : datetime.datetime(2009, 10, 5, 0, 0), 'rule': weekly, 'calendar': cal }) self.event1.save() self.event2 = Event(**{ 'title': 'Recent Event', 'start': datetime.datetime(2008, 1, 5, 9, 0), 'end': datetime.datetime(2008, 1, 5, 10, 0), 'end_recurring_period' : datetime.datetime(2009, 5, 5, 0, 0), 'rule': daily, 'calendar': cal }) self.event2.save()
def allnight_submit(request): datestr = request.POST['date'] club = request.POST['club'] # 철야를 신청한 동아리의 calendar slug 값 owner_slug = admin_slug_dict[club] color = slug_color_dict[owner_slug] start = (datetime.datetime.strptime(datestr, '%b %d, %Y') + datetime.timedelta(days=1)) end = start + datetime.timedelta(hours=6) # DEFAULT slug만 따로 try-except하는 이유: # 이미 철야가 등록된 동아리가 있는지 check하기 위함 try: event = Event.objects.get( calendar=Calendar.objects.get(slug='DEFAULT'), start=start, end=end, creator=UserModel.objects.get(username=club), ) return render_to_response( 'error.html', { 'error_name': '403', 'error_msg': '이미 철야가 등록된 날짜입니다 :( ', 'prev_page': '/allnight' }) except ObjectDoesNotExist: event = Event( calendar=Calendar.objects.get(slug='DEFAULT'), title=club[:-5], start=start, end=end, color_event=color, creator=UserModel.objects.get(username=club), ) event.save() # DEFAULT 제외 for slug in slugs[1:]: if slug == owner_slug: title = '철야' c = '#333333' else: title = club[:-5] c = others_color Event( calendar=Calendar.objects.get(slug=slug), title=title, start=start, end=end, color_event=c, creator=UserModel.objects.get(username=club), ).save() url = '/timetable' return HttpResponseRedirect(url)
def add_new(self, user): try: client = Client.objects.get(pk=self.cleaned_data['client']) if client.phone: event_title = "{name} {phone} {id}".format( name=client.get_full_name(), phone=client.phone, id=client.client_id) else: event_title = "{name} {id}".format(name=client.get_full_name(), id=client.client_id) event = Event(start=parser.parse( self.cleaned_data['start_datetime']), end=parser.parse(self.cleaned_data['end_datetime']), title=event_title, creator=user) event.save() appointment = Appointment( client=client, venue=Venue.objects.get(pk=self.cleaned_data['venue_id']), event=event, creator=user, customer=user.userprofile.customer) appointment.save() return appointment except Client.DoesNotExist: return False
def clubSubmit(request): date = request.POST.getlist('date') time = request.POST.getlist('time') team = request.POST.get('teamname') club = request.POST.get('club') # example: Jul 13, 2018 12:30 PM start = datetime.datetime.strptime(date[0] + ' ' + time[0], '%b %d, %Y %I:%M %p') end = datetime.datetime.strptime(date[1] + ' ' + time[1], '%b %d, %Y %I:%M %p') color = random.choice(color_set) if end < start: return render_to_response( 'error.html', { 'error_name': '시간설정 오류!', 'error_msg': error_msg_dict['time_err'], 'prev_page': '/sctime' }) url = '/timetable' slug = admin_slug_dict[club] Event( calendar=Calendar.objects.get(slug=slug), title=team, start=start, end=end, color_event=color, creator=UserModel.objects.get(username=club), ).save() url = '/timetable' return HttpResponseRedirect(url)
def create_twelve(request): if request.is_ajax(): to_monday = date.today().weekday() start = date.today() - datetime.timedelta(days=to_monday) # Find Monday fake_end = start + datetime.timedelta(days=84) if fake_end.weekday() != 4: end = fake_end - datetime.timedelta(days=(fake_end.weekday() - 4)) else: end = fake_end day = start total = 0 dupe_list = [] weekend = set([5, 6]) # Python week starts on Monday as 0 while day <= end: if day.weekday() not in weekend: for period in period_choices: for cart in cart_choice: open = Event(day=day, period=period[0], cart=cart[0]) try: open.save() total+=1 except IntegrityError: dupe = str(open) dupe_list.append(dupe) pass day += datetime.timedelta(days=1) data = {'start': start, 'end': end, 'dupe_list': dupe_list, 'total': total} return HttpResponse(json.dumps(data, cls=DjangoJSONEncoder))
def create_month(request): if request.is_ajax(): month = date.today().month year = date.today().year # last = calendar.monthrange(year, month) # Last day start = date.today().replace(day=1) # Get the first day of the month end = date.today().replace(day=(calendar.monthrange(year, month)[1])) weekend = set([5, 6]) # Python week starts on Monday as 0 dupe_list = [] total = 0 day = start while day <= end: if day.weekday() not in weekend: for period in period_choices: for cart in cart_choice: open = Event(day=day, period=period[0], cart=cart[0]) try: open.save() total+=1 except IntegrityError: dupe = str(open) dupe_list.append(dupe) pass day += datetime.timedelta(days=1) data = {'start': start, 'end': end, 'dupe_list': dupe_list, 'total': total} return HttpResponse(json.dumps(data, cls=DjangoJSONEncoder))
def save(self, *args, **kwargs): if not self.nk: self.nk = create_hash(self) if self.cs_event.status != 'r': data = { 'title': 'Charging Time for ' + str(self.ev) + str(self.cs_event.cs.name), 'start': self.cs_event.startDateTime, 'end': self.cs_event.endDateTime, 'calendar': self.ev.calendar } event = Event(**data) event.save() self.cs_event.ev_event_id = event.id self.cs_event.save() self.ev.calendar.events.add(event) else: raise ValidationError(_('EV event already reserved')) super().save(*args, **kwargs)
def save(self, *args, **kwargs): #TODO: fix bug (Issue #34) . the save method prevents the creation of another event with the # same times, even if this is a different CS) SEE issue # if self.cs_event_nk is None and CSEvent.objects.filter(startDateTime=self.startDateTime, endDateTime=self.endDateTime).exists(): # raise ValidationError(_('CS Event at {0}-{1} already exists'.format(self.startDateTime, self.endDateTime))) if not self.cs_event_nk: self.cs_event_nk = create_hash(self) if self.ev_event_id == -1: # not reserved yet cs_cal = Calendar.objects.get(id=self.cs.calendar.id) data = { 'title': 'Charging Slot for ' + self.cs.name, 'start': self.startDateTime, 'end': self.endDateTime, 'calendar': cs_cal } event = Event(**data) event.save() cs_cal.events.add(event) elif self.ev_event_id != -1 and self.status == 'AVAILABLE': # about to be reserved self.status = 'RESERVED' super().save(*args, **kwargs)
def add_task(request, flat_id=None): name = request.data.get('name', None) user_ids = request.data.get('users', None) frequency = request.data.get('frequency', None) if name is None or user_ids is None or frequency is None: return Response(data={'message': 'Wrong parameters'}, status=400) if frequency not in ['DAILY', 'WEEKLY', 'MONTHLY']: return Response( data={'message': 'Frequency can be: DAILY, WEEKLY, MONTHLY'}, status=400) try: flat = Flat.objects.get(id=flat_id) except ObjectDoesNotExist: return Response( data={'message': 'The flat {0} does not exist.'.format(flat_id)}, status=400) user_list = [] for user_id in user_ids.split(','): try: user = User.objects.get(id=user_id) if user not in flat.users.all(): return Response(data={ 'message': '{0} is not a member of the flat.'.format(user.username) }, status=400) user_list.append(user) except ObjectDoesNotExist: return Response(data={ 'message': 'The user id {0} does not exist.'.format(user_id) }, status=400) rule = Rule(frequency=frequency, name='{0}_{1}'.format(frequency, name)) rule.save() event = Event(rule=rule, start=datetime.now(), end=datetime.now() + timedelta(days=60), calendar=Calendar.objects.get_calendar_for_object(flat)) event.save() task = Task(flat=flat, name=name, event=event) task.save() for u in user_list: task.users.add(u) task.refresh_from_db() return Response(data={ 'message': 'Your task has been created.', 'task': TaskSerializer(task).data, }, status=200)
def borrowSubmit(request): date = request.POST.getlist('date') time = request.POST.getlist('time') team = request.POST.get('teamname') club = request.POST.get('club') # Jul 13, 2018 12:30 PM start = datetime.datetime.strptime(date[0]+' '+time[0], '%b %d, %Y %I:%M %p') end = datetime.datetime.strptime(date[1]+' '+time[1], '%b %d, %Y %I:%M %p') color = random.choice(color_set) if end < start: return render_to_response('error.html', {'error_name': '시간설정 오류!', 'error_msg': error_msg_dict['time_err'], 'prev_page': '/borrow'}) url = '/timetable' events = [] for slug in slugs: if slug != 'DEFAULT': color = others_color events.append(Event(calendar=Calendar.objects.get(slug=slug), title=team, start=start, end=end, color_event=color, creator=UserModel.objects.get(username=club),) ) for event in events: event.save() return HttpResponseRedirect(url)
def set_time(weekList, weekday, curYear, curMonth, lastDay): j=1 for aList in weekList: i=0 isMorning = weekList.index(aList) == 0 for day in aList: if isMorning: tit = '오전 공용시간\n드럼/합주 우선:\n' + slug_user_dict[day] c = club_colors[0] else: tit = slug_user_dict[day] date = getFLDay(i, weekday, lastDay) for slug in slugs: # 자기 동아리 시간은 동아리별 시간표에서 비워둔다 # 동아리 내 시간분배를 잘 볼 수 있게 하기 위함 # 단, 아침은 예외 if not isMorning and day == slug: continue if slug == 'DEFAULT' and not isMorning: c = slug_color_dict[day] elif not isMorning: c = others_color try: event = Event.objects.get(calendar=Calendar.objects.get(slug=slug), start=datetime.datetime(curYear, curMonth, date['first'], j*6, 0), end=datetime.datetime(curYear, curMonth, date['first'], j*6, 0) + datetime.timedelta(hours=6), ) Event.objects.filter(calendar=Calendar.objects.get(slug=slug), start=datetime.datetime(curYear, curMonth, date['first'], j*6, 0), end=datetime.datetime(curYear, curMonth, date['first'], j*6, 0) + datetime.timedelta(hours=6), ).update(title=tit, color_event=c, creator=UserModel.objects.get(username='******'),) except ObjectDoesNotExist: Event(calendar=Calendar.objects.get(slug=slug), title=tit, start=datetime.datetime(curYear, curMonth, date['first'], j*6, 0), end=datetime.datetime(curYear, curMonth, date['first'], j*6, 0) + datetime.timedelta(hours=6), rule=Rule.objects.get(id=3), # Weekly; end_recurring_period=datetime.datetime(curYear, curMonth, date['last'], j*6, 0) + datetime.timedelta(hours=6), color_event=c, creator=UserModel.objects.get(username='******'), ).save() # 이전에 설정을 했을 경우 # 이미 등록되있는 다른 동아리 시간 삭제 try: Event.objects.get(calendar=Calendar.objects.get(slug=day), start=datetime.datetime(curYear, curMonth, date['first'], j*6, 0), end=datetime.datetime(curYear, curMonth, date['first'], j*6, 0) + datetime.timedelta(hours=6), ).delete() except ObjectDoesNotExist: pass i += 1 j += 1 return
def __create_event(self, title, start, end, cal): return Event( title=title, start=start, end=end, calendar=cal, )
def forms_valid(self, forms): date = forms['date_form'].save() self.show.date = date forms['poster_form'].save() info = forms['show_info_form'].save(commit=False) if self.request.FILES.get('image'): info.poster, created = Image.objects.get_or_create( image=self.request.FILES.get('image'), title="Poster", user=self.request.user) elif self.request.POST.get('poster'): imageId = self.request.POST.get('poster') info.poster = get_object_or_None(Image, id=imageId) if not info.location: info.location = info.venue.profile.contact_info.location info.save() forms['show_info_form'].save_m2m() participants = info.participants() # create or edit event for each particpent in show forms['event_form'].save() for user in participants: event = get_object_or_None(Event, show=self.show, calendar=user.calendar) if self.request.user != user and not event: event = Event(show=self.show, calendar=user.calendar) event.save() self.show.save() return self.get_success_url()
def setUp(self): rule = Rule(frequency="WEEKLY") rule.save() cal = Calendar(name="MyCal") cal.save() data = { 'title': 'Recent Event', 'start': datetime.datetime(2008, 1, 5, 8, 0, tzinfo=pytz.utc), 'end': datetime.datetime(2008, 1, 5, 9, 0, tzinfo=pytz.utc), 'end_recurring_period': datetime.datetime(2008, 5, 5, 0, 0, tzinfo=pytz.utc), 'rule': rule, 'calendar': cal } recurring_event = Event(**data) recurring_event.save() self.month = Month(events=Event.objects.all(), date=datetime.datetime(2008, 2, 7, 9, 0, tzinfo=pytz.utc))
def save(self, force_insert=False, force_update=False): new_task = True super(PostEater, self).save(force_insert, force_update) end = self.startDateTime + timedelta(minutes=1) color = '#A41515' description = "http://127.0.0.1:8000/posts/" + str( self.submit_time.strftime("%Y/%b/%d")) user_short = self.user.profile.housename if new_task: event = Event(start=self.startDateTime, end=end, title=user_short, description=description, calendar_id=1) event.save() rel = EventRelation.objects.create_relation(event, self) rel.save() try: cal = Calendar.objects.get(name="hooggeacht") except Calendar.DoesNotExist: cal = Calendar(name="bla") cal.save() cal.events.add(event) else: event = Event.objects.get_for_object(self)[0] event.start = self.startDateTime event.end = end event.title = title event.description = self.description event.eventColor = self.color event.save()
def __create_event(self, start, end): data = { 'title': 'Recent Event', 'start': start, 'end': end } return Event(**data)
def test_all_day_event_cook_slots(self): cal = Calendar(name='MyCal', slug='MyCalSlug') cal.save() start = datetime.datetime(datetime.datetime.now().year, 1, 5, 0, 0, tzinfo=pytz.utc) end = datetime.datetime(datetime.datetime.now().year, 1, 6, 0, 0, tzinfo=pytz.utc) data = { 'title': 'All Day Event', 'start': start, 'end': end, 'calendar': self.cal, } event = Event(**data) event.save() period = Day([event], start, end) slots = _cook_slots(period, 60) self.assertEqual(len(slots), 24)
def __create_event(self, title, start, end, cal): return Event(**{ 'title': title, 'start': start, 'end': end, 'calendar': cal })
def test_recurring_event_get_occurrences(self): recurring_event = Event(**self.recurring_data) occurrences = recurring_event.get_occurrences(start=datetime.datetime(2008, 1, 12, 0, 0, tzinfo=pytz.utc), end=datetime.datetime(2008, 1, 20, 0, 0, tzinfo=pytz.utc)) self.assertEqual(["%s to %s" % (o.start, o.end) for o in occurrences], ['2008-01-12 08:00:00+00:00 to 2008-01-12 09:00:00+00:00', '2008-01-19 08:00:00+00:00 to 2008-01-19 09:00:00+00:00'])
def setUp(self): rule = Rule(frequency="WEEKLY") rule.save() cal = Calendar(name="MyCal") cal.save() self.recurring_data = { 'title': 'Recent Event', 'start': datetime.datetime(2008, 1, 5, 8, 0, tzinfo=pytz.utc), 'end': datetime.datetime(2008, 1, 5, 9, 0, tzinfo=pytz.utc), 'end_recurring_period': datetime.datetime(2008, 5, 5, 0, 0, tzinfo=pytz.utc), 'rule': rule, 'calendar': cal } self.data = { 'title': 'Recent Event', 'start': datetime.datetime(2008, 1, 5, 8, 0, tzinfo=pytz.utc), 'end': datetime.datetime(2008, 1, 5, 9, 0, tzinfo=pytz.utc), 'end_recurring_period': datetime.datetime(2008, 5, 5, 0, 0, tzinfo=pytz.utc), 'calendar': cal } self.recurring_event = Event(**self.recurring_data) self.recurring_event.save() self.start = datetime.datetime(2008, 1, 12, 0, 0, tzinfo=pytz.utc) self.end = datetime.datetime(2008, 1, 27, 0, 0, tzinfo=pytz.utc)
def test_get_occurrence(self): event = Event(**self.recurring_data) event.save() occurrence = event.get_occurrence(datetime.datetime(2008, 1, 5, 8, 0)) self.assertEqual(occurrence.start, datetime.datetime(2008, 1, 5, 8)) occurrence.save() occurrence = event.get_occurrence(datetime.datetime(2008, 1, 5, 8, 0)) self.assertTrue(occurrence.pk is not None)
def test_event_get_occurrences(self): event = Event(**self.data) event.save() occurrences = event.get_occurrences( start=datetime.datetime(2008, 1, 12, 0, 0), end=datetime.datetime(2008, 1, 20, 0, 0)) self.assertEquals(["%s to %s" % (o.start, o.end) for o in occurrences], [])
def __create_recurring_event(self, title, start, end, end_recurring, rule, cal): return Event(**{ 'title': title, 'start': start, 'end': end, 'end_recurring_period': end_recurring, 'rule': rule, 'calendar': cal })
def setUp(self): weekly = Rule.objects.create(frequency="WEEKLY") daily = Rule.objects.create(frequency="DAILY") cal = Calendar.objects.create(name="MyCal") self.default_tzinfo = timezone.get_default_timezone() self.event1 = Event( **{ 'title': 'Weekly Event', 'start': datetime.datetime(2009, 4, 1, 8, 0, tzinfo=self.default_tzinfo), 'end': datetime.datetime(2009, 4, 1, 9, 0, tzinfo=self.default_tzinfo), 'end_recurring_period': datetime.datetime( 2009, 10, 5, 0, 0, tzinfo=self.default_tzinfo), 'rule': weekly, 'calendar': cal }) self.event1.save() self.event2 = Event( **{ 'title': 'Recent Event', 'start': datetime.datetime(2008, 1, 5, 9, 0, tzinfo=self.default_tzinfo), 'end': datetime.datetime( 2008, 1, 5, 10, 0, tzinfo=self.default_tzinfo), 'end_recurring_period': datetime.datetime(2009, 5, 5, 0, 0, tzinfo=self.default_tzinfo), 'rule': daily, 'calendar': cal }) self.event2.save()
def book(self, start=None, end=None, numero_ospiti=None, servizi_opzionali=[], user=None, session=None): print 'Alloggio book' print 'user:'******'session:', session day_count = end - start notti = day_count.days reservation = Reservation() if user.is_authenticated(): reservation.user = user # if not session.exists(session.session_key): # session.create() # # reservation.session = Session.objects.get(session_key=session.session_key) reservation.alloggio = self reservation.numero_ospiti = numero_ospiti alloggio_quote = self.getAlloggioPrice(notti, numero_ospiti) reservation.price = alloggio_quote['prezzo'] reservation.iva = alloggio_quote['iva'] reservation_event = Event(start=start, end=end, calendar=self.calendar, title='reservation ') reservation_event.save() reservation.event = reservation_event reservation.save() if user.is_authenticated(): reservation.notify_reservation() for service in servizi_opzionali: reservation_service = ReservationService(original_service=service, reservation=reservation) reservation_quote = service.getServicePrice(notti, numero_ospiti) reservation_service.costo = service.costo reservation_service.fattore_tempo = service.fattore_tempo reservation_service.price = reservation_quote['prezzo'] reservation_service.iva = reservation_quote['iva'] reservation_service.save() # reservation.servizi_opzional.add(reservation_service) # reservation.servizi_opzional = servizi_opzionali return reservation
def test_event_get_occurrences_after(self): recurring_event = Event(**self.recurring_data) recurring_event.save() occurrences = recurring_event.get_occurrences( start=datetime.datetime(2008, 1, 5), end=datetime.datetime(2008, 1, 6)) occurrence = occurrences[0] occurrence2 = recurring_event.occurrences_after( datetime.datetime(2008, 1, 5)).next() self.assertEqual(occurrence, occurrence2)
def __create_recurring_event(self, title, start, end, end_recurring, rule, cal): return Event( title=title, start=start, end=end, end_recurring_period=end_recurring, rule=rule, calendar=cal, )
def setUp(self): weekly = Rule.objects.create(frequency="WEEKLY") daily = Rule.objects.create(frequency="DAILY") cal = Calendar.objects.create(name="MyCal") self.default_tzinfo = timezone.get_default_timezone() self.start = datetime.datetime.now() - datetime.timedelta(days=10) self.end = self.start + datetime.timedelta(days=300) self.event1 = Event( **{ 'title': 'Weekly Event', 'start': self.start, 'end': self.end, 'end_recurring_period': self.end, 'rule': weekly, 'calendar': cal }) self.event1.save() self.occ = Occurrence(event=self.event1, start=self.start, end=self.end, original_start=self.start, original_end=self.end) self.occ.save() self.event2 = Event( **{ 'title': 'Recent Event', 'start': datetime.datetime(2008, 1, 5, 9, 0, tzinfo=self.default_tzinfo), 'end': datetime.datetime( 2008, 1, 5, 10, 0, tzinfo=self.default_tzinfo), 'end_recurring_period': datetime.datetime(2009, 5, 5, 0, 0, tzinfo=self.default_tzinfo), 'rule': daily, 'calendar': cal }) self.event2.save()
def create_event(self, user): start = parser.parse(self.cleaned_data['start_datetime']) end = parser.parse(self.cleaned_data['end_datetime']) new_event = Event(start=start, end=end, title=self.cleaned_data['title'], description=self.cleaned_data['description'], creator=user) new_event.save() return new_event