Exemple #1
0
def admin_reorder_type(type_):
    data = {int(k): int(v) for k, v in request.json.items()}
    if type_ == 'drinks':
        Drink.set_order(data)
    elif type_ == 'drink-components':
        DrinkComponent.set_order(data)
    else:
        abort(400, "Invalid type: " + str(type_))
    return 'OK'
Exemple #2
0
def get_order_printable(order):
    drink = None
    if order.drink:
        drink = Drink.get(order.drink)

    drink_components = None
    if order.drink_components:
        drink_components = DrinkComponent.find(*order.drink_components)

    strength = f' [{order.strength}]' if order.strength else ''

    c = RuntimeConfig.get_single()
    logo = None
    if c.logo:
        logo = url_for('index.images',
                       name=c.logo,
                       mode='full',
                       _external=True)

    return {
        'id':
        order.doc_id,
        'logo':
        logo,
        'name':
        order.name,
        'drink_name':
        (order.drink_name + strength) if order.drink_name else None,
        'drink': (drink.name + strength) if drink else None,
        'drink_components':
        ', '.join(
            (c.name for c in drink_components)) if drink_components else None
    }
Exemple #3
0
def delete_drink_component(id):
    drink_component = DrinkComponent.get(id)
    if not drink_component:
        abort(404, "No such drink component")
    drink_component.delete()
    flash("Deleted drink component " + drink_component.name, 'info')
    return redirect(url_for('.drink-components'))
Exemple #4
0
def edit_drink_component(id=None):
    drink_component = None
    is_new = True
    if id:
        is_new = False
        drink_component = DrinkComponent.get(id)
        if not drink_component:
            abort(404, "No such drink component")

    form = DrinkComponentForm(obj=drink_component)
    if form.validate_on_submit():
        if not drink_component:
            drink_component = DrinkComponent()
        form.populate_obj(drink_component)
        drink_component.save()
        flash("Your changes have been saved.", 'success')
        if is_new:
            return redirect(
                url_for('.edit_drink_component', id=drink_component.doc_id))

    return render_template('admin/edit_drink_component.jinja.html', form=form)
Exemple #5
0
def index():
    drinks = Drink.find(is_orderable=True, in_stock=True, sort_key='order')
    saved_orders = SavedOrder.all()
    drink_components = DrinkComponent.find(in_stock=True, sort_key='order')

    in_stock_drink_components = set([d.doc_id for d in drink_components])

    def _filter_saved(o):
        o_coms = set(o.drink_components)
        have_coms = o_coms & in_stock_drink_components
        return have_coms == o_coms

    saved_orders = list(filter(_filter_saved, saved_orders))

    def get_components(ids):
        return DrinkComponent.find(*ids, sort_key='order')

    return render_template('index/index.jinja.html',
                           drinks=drinks,
                           saved_orders=saved_orders,
                           drink_components=drink_components,
                           get_components=get_components)
Exemple #6
0
def order():
    drink = None
    drink_components = None
    drink_name = None
    order = None

    if request.args.get('d'):
        drink = Drink.get(int(request.args['d']))
        if not drink:
            abort(404, "That drink doesn't exist")
        if not drink.in_stock:
            abort(400, "That drink is out of stock")
    elif request.args.get('s'):
        saved_order = SavedOrder.get(int(request.args['s']))
        if not saved_order:
            abort(404, "No such saved order")
        drink_name = saved_order.drink_name
        drink_components = DrinkComponent.find(*saved_order.drink_components,
                                               sort_key='order')
    elif request.args.get('c'):
        drink_components = DrinkComponent.find(*map(int,
                                                    request.args.getlist('c')),
                                               sort_key='order')

    if drink_components:
        if len(drink_components) < len(request.args.getlist('c')):
            abort(404, "Some of your choices do not exist")
        if any((not c.in_stock for c in drink_components)):
            abort(400, "Some of your choices are not in stock")

    name = None
    if not is_house_device():
        name = session.get('saved_name')
    form = OrderForm(drink=drink, drink_name=drink_name, name=name)
    if form.validate_on_submit():
        if not is_house_device():
            session['saved_name'] = form.name.data
        params = {
            'name': form.name.data,
        }
        if drink:
            params['drink'] = drink.doc_id
        else:
            params['drink_name'] = form.drink_name.data or None
            params['drink_components'] = [c.doc_id for c in drink_components]
        if not drink or drink.has_strengths:
            params['strength'] = form.strength.data
        if not drink and hasattr(
                form, 'save_for_later') and form.save_for_later.data:
            SavedOrder(drink_name=params['drink_name'],
                       drink_components=params['drink_components']).save()
        order = Order(event=Event.get_current_id(), **params)
        order.save()
        try:
            queue_order_to_print(order=order, auto=True)
        except PrintError:
            # Should be because we're not auto cutting and there's already a job queued
            pass
        flash("Your order has been placed", 'success')

        return redirect(url_for('.index'))

    return render_template('index/order.jinja.html',
                           form=form,
                           drink=drink,
                           drink_components=drink_components)
Exemple #7
0
 def get_components(ids):
     return DrinkComponent.find(*ids, sort_key='order')
Exemple #8
0
def drink_components():
    return render_template(
        'admin/drink_components.jinja.html',
        drink_components=DrinkComponent.all(sort_key='order'),
        types=DrinkComponent.TYPES)
Exemple #9
0
 def get_components(ids):
     return DrinkComponent.find(*ids)