Example #1
0
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
Example #2
0
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
Example #3
0
    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()
Example #4
0
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
Example #5
0
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
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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)
Example #9
0
    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)