Exemple #1
0
def create_orderline(request, group=None):
    r = dict()
    group = get_object_or_404(Group, name=group)

    if request.method == 'POST':
        form = OrderLineForm(request.POST)
        if form.is_valid():
            new_orderline = form.save(commit=False)
            new_orderline.creator = request.user
            new_orderline.order = get_order(group)
            users = manually_parse_users(form)
            if check_orderline(group, new_orderline.creator, new_orderline.price, buddies=users):
                new_orderline.save()
                form.save_m2m()  # Manually save the m2m relations when using commit=False
                new_orderline.users.add(new_orderline.creator)
                messages.success(request, 'Added orderline')
                return redirect('feedme:feedme_index_new', group)
            else:
                messages.error(request, 'Failed to add orderline')
    else:
        form = OrderLineForm()
        form.fields["users"].queryset = get_order(group).available_users().exclude(id=request.user.id)

    r['feedme_groups'] = [g for g in get_feedme_groups() if request.user in g.user_set.all()]
    r['group'] = group
    r['form'] = form
    r['is_admin'] = is_admin(request)

    return render(request, 'feedme/orderview.html', r)
Exemple #2
0
def orderlineview(request, orderline_id=None, group=None):
    new_or_existing_orderline = 'new'
    if orderline_id is None:
        orderline = OrderLine()
        creator = None
    else:
        orderline = get_object_or_404(OrderLine, pk=orderline_id)
        new_or_existing_orderline = 'existing'
        creator = orderline.creator

    group = get_object_or_404(Group, name=group)

    if request.method == 'POST':
        form = OrderLineForm(request.POST, instance=orderline)
        if form.is_valid():
            new_orderline = form.save(commit=False)
            if creator is not None:
                new_orderline.creator = creator
            else:
                new_orderline.creator = request.user
            new_orderline.order = get_order(group)
            users = manually_parse_users(form)
            if check_orderline(group, creator, orderline.price, buddies=users):
                new_orderline.save()
                form.save_m2m(
                )  # Manually save the m2m relations when using commit=False
                if new_or_existing_orderline == 'new':
                    messages.success(request, "Orderline added")
                else:
                    messages.success(request, "Orderline edited")
                new_orderline.users.add(new_orderline.creator)
                return redirect('feedme:feedme_index_new', group)
            else:
                messages.error(
                    request,
                    "Orderline validation failed, please verify your data and try again."
                )
    else:
        form = OrderLineForm(instance=orderline)
        form.fields["users"].queryset = get_order(
            group).available_users().exclude(id=request.user.id)

    r = dict()
    r['feedme_groups'] = [
        g for g in get_feedme_groups() if request.user in g.user_set.all()
    ]
    r['group'] = group
    r['form'] = form
    r['is_admin'] = is_admin(request)

    return render(request, 'feedme/orderview.html', r)
Exemple #3
0
def admin(request, group=None):
    # Admin index - defaults to new order page
    r = dict()
    group = get_object_or_404(Group, name=group)

    if request.method == 'POST':
        form = NewOrderForm(request.POST)
        if form.is_valid():
            form.save()
            poll = Poll.get_active()
            if poll:
                poll.deactivate()
            messages.success(request, 'New order added')
            logger.info('%s created a new order for %s: "%s".' %
                        (request.user, group, get_order(group)))
            return redirect('feedme:feedme_index_new', group)
    else:
        form = NewOrderForm()
        if Poll.objects.count() > 0:
            poll = Poll.get_active()
            if poll:
                form.fields['restaurant'].initial = poll.get_winner()
        form.fields["date"].initial = get_next_wednesday()

    # r['form'] = form
    r['feedme_groups'] = [
        g for g in get_feedme_groups() if request.user in g.user_set.all()
    ]
    r['group'] = group
    r['is_admin'] = is_admin(request)
    return render(request, 'feedme/admin.html', r)
Exemple #4
0
def orderview(request, order_id=None, group=None):
    if order_id:
        order = get_object_or_404(Order, pk=order_id)
    else:
        order = Order()

    group = get_object_or_404(Group, name=group)

    if request.method == 'POST':
        form = OrderForm(request.POST, instance=order)
        if form.is_valid():
            form = form.save(commit=False)
            form.creator = request.user
            form.order_line = get_order(group)
            form.save()
            messages.success(request, 'Orderline added')
            return redirect('feedme:feedme_index_new', group)

        form = OrderForm(request.POST)
    else:
        form = OrderForm(instance=order)

    r = dict()
    r['feedme_groups'] = [g for g in get_feedme_groups() if request.user in g.user_set.all()]
    r['group'] = group
    r['form'] = form
    r['is_admin'] = is_admin(request)

    return render(request, 'feedme/orderview.html', r)
Exemple #5
0
def orderview(request, order_id=None, group=None):
    if order_id:
        order = get_object_or_404(Order, pk=order_id)
    else:
        order = Order()

    group = get_object_or_404(Group, name=group)

    if request.method == 'POST':
        form = OrderForm(request.POST, instance=order)
        if form.is_valid():
            form = form.save(commit=False)
            form.creator = request.user
            form.order_line = get_order(group)
            form.save()
            messages.success(request, 'Orderline added')
            return redirect('feedme:feedme_index_new', group)

        form = OrderForm(request.POST)
    else:
        form = OrderForm(instance=order)

    r = dict()
    r['feedme_groups'] = [
        g for g in get_feedme_groups() if request.user in g.user_set.all()
    ]
    r['group'] = group
    r['form'] = form
    r['is_admin'] = is_admin(request)

    return render(request, 'feedme/orderview.html', r)
Exemple #6
0
def orderlineview(request, orderline_id=None, group=None):
    new_or_existing_orderline = 'new'
    if orderline_id is None:
        orderline = OrderLine()
        creator = None
    else:
        orderline = get_object_or_404(OrderLine, pk=orderline_id)
        new_or_existing_orderline = 'existing'
        creator = orderline.creator

    group = get_object_or_404(Group, name=group)

    if request.method == 'POST':
        form = OrderLineForm(request.POST, instance=orderline)
        if form.is_valid():
            new_orderline = form.save(commit=False)
            if creator is not None:
                new_orderline.creator = creator
            else:
                new_orderline.creator = request.user
            new_orderline.order = get_order(group)
            users = manually_parse_users(form)
            if check_orderline(group, creator, orderline.price, buddies=users):
                new_orderline.save()
                form.save_m2m()  # Manually save the m2m relations when using commit=False
                if new_or_existing_orderline == 'new':
                    messages.success(request, "Orderline added")
                else:
                    messages.success(request, "Orderline edited")
                new_orderline.users.add(new_orderline.creator)
                return redirect('feedme:feedme_index_new', group)
            else:
                messages.error(request, "Orderline validation failed, please verify your data and try again.")
    else:
        form = OrderLineForm(instance=orderline)
        form.fields["users"].queryset = get_order(group).available_users().exclude(id=request.user.id)

    r = dict()
    r['feedme_groups'] = [g for g in get_feedme_groups() if request.user in g.user_set.all()]
    r['group'] = group
    r['form'] = form
    r['is_admin'] = is_admin(request)

    return render(request, 'feedme/orderview.html', r)
Exemple #7
0
def join_orderline(request, group, orderline_id):
    orderline = get_object_or_404(OrderLine, pk=orderline_id)
    group = get_object_or_404(Group, name=group)
    # @TODO if not buddy system enabled, disable join
    if in_other_orderline(get_order(group), request.user):
        messages.error(request, 'You cannot be in multiple orderlines')
        logger.warn('%s tried to join multiple orderlines (new: %i) for "%s"!' %
                   (request.user, orderline.id, get_order(group)))
    elif orderline.order.use_validation and \
            not validate_user_funds(
                request.user, (orderline.price / (orderline.users.count() + 1))):  # Adds us to the test as well
        messages.error(request, 'You need cashes')
        logger.info('%s tried to join an orderline for "%s", by %s,  with insufficient funds.' %
                    (request.user, orderline.order, orderline.creator))
    else:
        orderline.users.add(request.user)
        orderline.save()
        messages.success(request, 'Joined orderline')
    return redirect('feedme:feedme_index_new', group)
Exemple #8
0
def join_orderline(request, group, orderline_id):
    orderline = get_object_or_404(OrderLine, pk=orderline_id)
    group = get_object_or_404(Group, name=group)
    # @TODO if not buddy system enabled, disable join
    if in_other_orderline(get_order(group), request.user):
        messages.error(request, 'You cannot be in multiple orderlines')
        logger.warn(
            '%s tried to join multiple orderlines (new: %i) for "%s"!' %
            (request.user, orderline.id, get_order(group)))
    elif orderline.order.use_validation and \
            not validate_user_funds(
                request.user, (orderline.price / (orderline.users.count() + 1))):  # Adds us to the test as well
        messages.error(request, 'You need cashes')
        logger.info(
            '%s tried to join an orderline for "%s", by %s,  with insufficient funds.'
            % (request.user, orderline.order, orderline.creator))
    else:
        orderline.users.add(request.user)
        orderline.save()
        messages.success(request, 'Joined orderline')
    return redirect('feedme:feedme_index_new', group)
Exemple #9
0
def leave_orderline(request, group, orderline_id):
    orderline = get_object_or_404(OrderLine, pk=orderline_id)
    group = get_object_or_404(Group, name=group)
    if request.user not in orderline.users.all():
        messages.error(request, 'You cannot leave since you are not in the users')
        logger.warn('%s tried to leave orderline#%i for "%s" without being in it!' %
                   (request.user, orderline.id, get_order(group)))
    else:
        orderline.users.remove(request.user)
        orderline.save()
        messages.success(request, 'Left orderline')
    return redirect('feedme:feedme_index_new', group)
Exemple #10
0
def leave_orderline(request, group, orderline_id):
    orderline = get_object_or_404(OrderLine, pk=orderline_id)
    group = get_object_or_404(Group, name=group)
    if request.user not in orderline.users.all():
        messages.error(request,
                       'You cannot leave since you are not in the users')
        logger.warn(
            '%s tried to leave orderline#%i for "%s" without being in it!' %
            (request.user, orderline.id, get_order(group)))
    else:
        orderline.users.remove(request.user)
        orderline.save()
        messages.success(request, 'Left orderline')
    return redirect('feedme:feedme_index_new', group)
Exemple #11
0
def create_orderline(request, group=None):
    r = dict()
    group = get_object_or_404(Group, name=group)

    if request.method == 'POST':
        form = OrderLineForm(request.POST)
        if form.is_valid():
            new_orderline = form.save(commit=False)
            new_orderline.creator = request.user
            new_orderline.order = get_order(group)
            users = manually_parse_users(form)
            if check_orderline(group,
                               new_orderline.creator,
                               new_orderline.price,
                               buddies=users):
                new_orderline.save()
                form.save_m2m(
                )  # Manually save the m2m relations when using commit=False
                new_orderline.users.add(new_orderline.creator)
                messages.success(request, 'Added orderline')
                return redirect('feedme:feedme_index_new', group)
            else:
                messages.error(request, 'Failed to add orderline')
    else:
        form = OrderLineForm()
        form.fields["users"].queryset = get_order(
            group).available_users().exclude(id=request.user.id)

    r['feedme_groups'] = [
        g for g in get_feedme_groups() if request.user in g.user_set.all()
    ]
    r['group'] = group
    r['form'] = form
    r['is_admin'] = is_admin(request)

    return render(request, 'feedme/orderview.html', r)
Exemple #12
0
def index_new(request, group=None):
    group = get_object_or_404(Group, name=group) if \
        request.user in get_object_or_404(Group, name=group).user_set.all() else None
    order = get_order(group) if group else None
    poll = get_poll(group) if group else None
    r = dict()
    r['group'] = group
    r['order'] = order
    r['restaurants'] = Restaurant.objects.all()
    r['is_admin'] = is_admin(request)
    r['can_join'] = not in_other_orderline(order, request.user)
    r['feedme_groups'] = [
        g for g in get_feedme_groups() if request.user in g.user_set.all()
    ]

    a_id = None
    if str(request.user) != 'AnonymousUser':
        if Answer.objects.filter(poll=poll, user=request.user).count() == 1:
            a_id = Answer.objects.get(poll=poll, user=request.user)

    if request.method == 'POST':
        if request.POST['act'] == 'vote':
            if a_id is not None:
                form = PollAnswerForm(request.POST, instance=a_id)
            else:
                form = PollAnswerForm(request.POST)
            if form.is_valid():
                answer = form.save(commit=False)
                answer.user = request.user
                answer.poll = poll
                answer.save()
                messages.success(request, 'Voted for %s' % answer.answer)
                return redirect('feedme:feedme_index_new', group)

    if poll is not None:
        r['poll'] = poll
        if a_id is None:
            r['answer'] = PollAnswerForm()
        else:
            r['answer'] = PollAnswerForm(instance=a_id)
        r['results'] = poll.get_result()

    return render(request, 'feedme/index.html', r)
Exemple #13
0
def index_new(request, group=None):
    group = get_object_or_404(Group, name=group) if \
        request.user in get_object_or_404(Group, name=group).user_set.all() else None
    order = get_order(group) if group else None
    poll = get_poll(group) if group else None
    r = dict()
    r['group'] = group
    r['order'] = order
    r['restaurants'] = Restaurant.objects.all()
    r['is_admin'] = is_admin(request)
    r['can_join'] = not in_other_orderline(order, request.user)
    r['feedme_groups'] = [g for g in get_feedme_groups() if request.user in g.user_set.all()]

    a_id = None
    if str(request.user) != 'AnonymousUser':
        if Answer.objects.filter(poll=poll, user=request.user).count() == 1:
            a_id = Answer.objects.get(poll=poll, user=request.user)

    if request.method == 'POST':
        if request.POST['act'] == 'vote':
            if a_id is not None:
                form = PollAnswerForm(request.POST, instance=a_id)
            else:
                form = PollAnswerForm(request.POST)
            if form.is_valid():
                answer = form.save(commit=False)
                answer.user = request.user
                answer.poll = poll
                answer.save()
                messages.success(request, 'Voted for %s' % answer.answer)
                return redirect('feedme:feedme_index_new', group)

    if poll is not None:
        r['poll'] = poll
        if a_id is None:
            r['answer'] = PollAnswerForm()
        else:
            r['answer'] = PollAnswerForm(instance=a_id)
        r['results'] = poll.get_result()

    return render(request, 'feedme/index.html', r)
Exemple #14
0
    def test_get_order_group_with_inactive_order(self):
        group = G(Group)
        order = G(Order, group=group, active=False)

        self.assertEquals(None, get_order(group), "Got %s, expected %s." % (get_order(group), None))
Exemple #15
0
    def test_get_order_group_with_active_order(self):
        group = G(Group)
        order = G(Order, group=group)

        self.assertEquals(order, get_order(group), "Got %s, expected %s." % (get_order(group), order))
Exemple #16
0
 def test_get_order_no_order_for_group(self):
     new_group = G(Group)
     self.assertEquals(None, get_order(new_group), "There should be no orders for a group with no orders")
Exemple #17
0
def admin(request, group=None):
    # Admin index - defaults to new order page
    r = dict()
    group = get_object_or_404(Group, name=group)

    if request.method == 'POST':
        form = NewOrderForm(request.POST)
        if form.is_valid():
            form.save()
            poll = Poll.get_active()
            if poll:
                poll.deactivate()
            messages.success(request, 'New order added')
            logger.info('%s created a new order for %s: "%s".' % (request.user, group, get_order(group)))
            return redirect('feedme:feedme_index_new', group)
    else:
        form = NewOrderForm()
        if Poll.objects.count() > 0:
            poll = Poll.get_active()
            if poll:
                form.fields['restaurant'].initial = poll.get_winner()
        form.fields["date"].initial = get_next_wednesday()

    # r['form'] = form
    r['feedme_groups'] = [g for g in get_feedme_groups() if request.user in g.user_set.all()]
    r['group'] = group
    r['is_admin'] = is_admin(request)
    return render(request, 'feedme/admin.html', r)
Exemple #18
0
    def test_get_order_group_with_inactive_order(self):
        group = G(Group)
        order = G(Order, group=group, active=False)

        self.assertEquals(None, get_order(group),
                          "Got %s, expected %s." % (get_order(group), None))
Exemple #19
0
    def test_get_order_group_with_active_order(self):
        group = G(Group)
        order = G(Order, group=group)

        self.assertEquals(order, get_order(group),
                          "Got %s, expected %s." % (get_order(group), order))
Exemple #20
0
 def test_get_order_no_order_for_group(self):
     new_group = G(Group)
     self.assertEquals(
         None, get_order(new_group),
         "There should be no orders for a group with no orders")