def event_adjecents(request, start_date, start_time, end_date, end_time, event=None, locations=None): """Returns the events which take place adjacent to the to-be-planned event.""" start = datetime.strptime("%s %s" % (start_date, start_time), "%d-%m-%Y %H:%M") - timedelta(minutes=15) end = datetime.strptime("%s %s" % (end_date, end_time), "%d-%m-%Y %H:%M") + timedelta(minutes=15) realstart = datetime.strptime("%s %s" % (start_date, start_time), "%d-%m-%Y %H:%M") realend = datetime.strptime("%s %s" % (end_date, end_time), "%d-%m-%Y %H:%M") # Haal alle conflicting events op met een kwartier speling aan beide # einden. Haal vervolgens de de echte conflicting events eruit, zodat de # adjacent events overblijven. if locations: locations = Location.objects.filter(pk__in=locations) events = Event.objects.none() adjevents = Event.objects.none() for location in locations: events |= Event.conflicting_events(realstart, realend, location) adjevents |= Event.conflicting_events(start, end, location) else: events = Event.conflicting_events(realstart, realend) adjevents = Event.conflicting_events(start, end) if event: events = events.exclude(pk=event) result = [] for event in adjevents: if event not in events: result.append(model_to_dict(event)) return result
def load_scheduling_data(self): data = self.data data['availability1'] = Availability( organization=data['organization1'], name='Yes', nature=Availability.ASSIGNED) data['availability1'].save() data['availability2'] = Availability( organization=data['organization1'], name='Maybe', nature=Availability.MAYBE) data['availability2'].save() data['availability3'] = Availability( organization=data['organization1'], name='No', nature=Availability.NO) data['availability3'].save() data['event1'] = Event(organizer=data['organization1'], name='Test event 1', starts_at=data['datetime1'], ends_at=data['datetime3'], pricegroup=data['pricegroup1'], kegs=1) data['event1'].save() data['temporaryproduct1'] = TemporaryProduct(event=data['event1'], price=2.33) data['temporaryproduct1'].save()
def event_conflicts(request, start_date, start_time, end_date, end_time, event_id=None, locations=None): """Returns the events which take place at the same time as the to-be-planned event.""" start = datetime.strptime("%s %s" % (start_date, start_time), "%d-%m-%Y %H:%M") end = datetime.strptime("%s %s" % (end_date, end_time), "%d-%m-%Y %H:%M") if locations: locations = Location.objects.filter(pk__in=locations.split(',')) events = Event.objects.none() for location in locations: events |= Event.conflicting_events(start, end, location) else: events = Event.conflicting_events(start, end) if event_id: events = events.exclude(pk=event_id) result = [] for event in events: result.append(model_to_dict(event)) return result
def clean(self): cleaned_data = super(EventForm, self).clean() starts_at = cleaned_data.get('starts_at') ends_at = cleaned_data.get('ends_at') locations = cleaned_data.get('location') if starts_at and ends_at and starts_at > ends_at: raise ValidationError(_("The start time is earlier than the end time!")) if starts_at and ends_at and locations: for location in locations: if location.prevent_conflicting_events: conf_events = Event.conflicting_events(starts_at, ends_at, location) if self.instance: conf_events = conf_events.exclude(pk=self.instance.pk) if conf_events.exists(): raise ValidationError( _("There is an event in %(location)s already!") % {'location': location.name} ) return cleaned_data
def clean(self): cleaned_data = super(EventForm, self).clean() starts_at = cleaned_data.get('starts_at') ends_at = cleaned_data.get('ends_at') locations = cleaned_data.get('location') if starts_at and ends_at and starts_at > ends_at: raise ValidationError( _("The start time is earlier than the end time!")) if starts_at and ends_at and locations: for location in locations: if location.prevent_conflicting_events: conf_events = Event.conflicting_events( starts_at, ends_at, location) if self.instance: conf_events = conf_events.exclude(pk=self.instance.pk) if conf_events.exists(): raise ValidationError( _("There is an event in %(location)s already!") % {'location': location.name}) return cleaned_data
def test_order_unsynchronized(self): starts_at = timezone.make_aware(datetime.datetime(2014, 9, 21, 14, 16, 6), timezone.utc) ends_at = starts_at + datetime.timedelta(hours=1) placed_at = starts_at + datetime.timedelta(minutes=30) placed_at_string = '2014-09-21T14:46:06+00:00' pricegroup = PriceGroup(organization=self.data['organization1'], name='Price group') pricegroup.save() event = Event(organizer=self.data['organization1'], name='Test event', starts_at=starts_at, ends_at=ends_at, pricegroup=pricegroup, kegs=1) event.save() productgroup = ProductGroup(organization=self.data['organization1'], name='Product group') productgroup.save() product1 = PermanentProduct(productgroup=productgroup, organization=self.data['organization1'], position=0) product1.save() product2 = TemporaryProduct(event=event, price=2.33) product2.save() authorization = Authorization(user=self.data['user1'], organization=self.data['organization1'], start_date=starts_at) authorization.save() order = Order(event=event, authorization=authorization, placed_at=placed_at, added_by=self.data['user1']) order.save() Purchase(order=order, product=product1, amount=1, price=0.50).save() Purchase(order=order, product=product2, amount=2, price=4.66).save() order.save() order_json = { 'id': order.id, 'rfid': None, 'event': { 'id': event.id, 'name': 'Test event', }, 'authorization': format_authorization(authorization), 'synchronized': False, 'placed_at': placed_at_string, 'purchases': [ { 'product': { 'id': product1.id, 'name': '', }, 'amount': 1, 'price': '0.50', }, { 'product': { 'id': product2.id, 'name': '', }, 'amount': 2, 'price': '4.66', } ], } self.convertAndAssertJSONEqual(format_order(order), order_json)
def test_order_unsynchronized(self): starts_at = timezone.make_aware( datetime.datetime(2014, 9, 21, 14, 16, 6), timezone.utc) ends_at = starts_at + datetime.timedelta(hours=1) placed_at = starts_at + datetime.timedelta(minutes=30) placed_at_string = '2014-09-21T14:46:06+00:00' pricegroup = PriceGroup(organization=self.data['organization1'], name='Price group') pricegroup.save() event = Event(organizer=self.data['organization1'], name='Test event', starts_at=starts_at, ends_at=ends_at, pricegroup=pricegroup, kegs=1) event.save() productgroup = ProductGroup(organization=self.data['organization1'], name='Product group') productgroup.save() product1 = PermanentProduct(productgroup=productgroup, organization=self.data['organization1'], position=0) product1.save() product2 = TemporaryProduct(event=event, price=2.33) product2.save() authorization = Authorization(user=self.data['user1'], organization=self.data['organization1'], start_date=starts_at) authorization.save() order = Order(event=event, authorization=authorization, placed_at=placed_at, added_by=self.data['user1']) order.save() Purchase(order=order, product=product1, amount=1, price=0.50).save() Purchase(order=order, product=product2, amount=2, price=4.66).save() order.save() order_json = { 'id': order.id, 'rfid': None, 'event': { 'id': event.id, 'name': 'Test event', }, 'authorization': format_authorization(authorization), 'synchronized': False, 'placed_at': placed_at_string, 'purchases': [{ 'product': { 'id': product1.id, 'name': '', }, 'amount': 1, 'price': '0.50', }, { 'product': { 'id': product2.id, 'name': '', }, 'amount': 2, 'price': '4.66', }], } self.convertAndAssertJSONEqual(format_order(order), order_json)