Example #1
0
def create():
    """
        args: [id_bag]
    """

    bag = get_valid_bag(request.args(0))
    if not bag:
        session.info = T('Bag not found')
        redirection()
    bag_only_items_list = True
    include_bag = False

    bag_items = db(db.bag_item.id_bag == bag.id).select()
    bag_items_count = len(bag_items)
    for bag_item in bag_items:
        qty = item_stock_qty(bag_item.id_item, bag.id_store)
        bag_item.quantity = min(bag_item.quantity, qty)
        if not bag_item.quantity or not bag_item.id_item.has_inventory:
            bag_item.delete_record()
            bag_items_count -= 1
        else:
            bag_item.update_record()
    refresh_bag_data(bag.id)

    if not bag_items_count:
        session.info = T('Please add items to the product loss')
        redirection()

    form = SQLFORM(db.product_loss,
                   buttons=[
                       INPUT(_type='submit',
                             _value=T('Commit'),
                             _class="btn btn-primary"),
                       A(T('Cancel'),
                         _class='btn btn-default',
                         _href=URL('default', 'index'))
                   ],
                   _id="product_loss_form",
                   formstyle='bootstrap3_inline')
    form.vars.id_bag = bag.id
    form.vars.id_store = bag.id_store.id

    if form.process().accepted:
        bag.status = BAG_COMPLETE
        bag.update_record()
        remove_stocks(bag_items)
        session.info = T('Product loss commited')
        redirection()
    elif form.errors:
        session.info = T('Form has errors')

    return locals()
Example #2
0
def modify_bag_item():
    """
        modifies the bag_item quantity.
        args: [ bag_item ]

    """

    bag_item = db.bag_item(request.args(0))
    if not bag_item:
        raise HTTP(404)
    bag_utils.is_modifiable_bag(bag_item.id_bag)

    old_qty = bag_item.quantity
    bag_item.quantity = request.vars.quantity if request.vars.quantity else bag_item.quantity
    if not bag_item.id_item.allow_fractions:
        bag_item.quantity = remove_fractions(bag_item.quantity)
    bag_item.quantity = DQ(bag_item.quantity)

    if not allow_out_of_stock:
        qty = item_utils.item_stock_qty(
            db.item(bag_item.id_item), session.store, id_bag=session.current_bag
        )
        diff = (old_qty - bag_item.quantity) if (old_qty - bag_item.quantity) > 0 else 0
        if qty + diff < bag_item.quantity - old_qty:
            bag_item.quantity = max(old_qty, qty + old_qty)
    bag_item.quantity = max(0, bag_item.quantity)

    bag_item.update_record()
    bag_data = bag_utils.refresh_bag_data(bag_item.id_bag.id)
    return dict(status='ok', bag_item=bag_item, **bag_data)
Example #3
0
def modify_bag_item():
    """
        modifies the bag_item quantity.
        args: [ bag_item ]

    """

    bag_item = db.bag_item(request.args(0))
    bag_utils.is_modifiable_bag(bag_item.id_bag)
    if not bag_item:
        raise HTTP(404)

    old_qty = bag_item.quantity
    bag_item.quantity = request.vars.quantity if request.vars.quantity else bag_item.quantity
    if not bag_item.id_item.allow_fractions:
        bag_item.quantity = remove_fractions(bag_item.quantity)
    bag_item.quantity = DQ(bag_item.quantity)

    if not allow_out_of_stock:
        qty = item_utils.item_stock_qty(
            db.item(bag_item.id_item), session.store, id_bag=session.current_bag
        )
        diff = (old_qty - bag_item.quantity) if (old_qty - bag_item.quantity) > 0 else 0
        if qty + diff < bag_item.quantity - old_qty:
            bag_item.quantity = max(old_qty, qty + old_qty)
    bag_item.quantity = max(0, bag_item.quantity)

    bag_item.update_record()
    bag_data = bag_utils.refresh_bag_data(bag_item.id_bag.id)
    return dict(status='ok', bag_item=bag_item, **bag_data)
Example #4
0
def change_bag_item_sale_price():
    price_index = request.args(0)
    bag_item = db.bag_item(request.args(1))
    access_code = request.args(2)

    access = False
    if auth.has_membership('Admin') or auth.has_membership('Manager'):
        access = True
    if not (price_index or bag_item or access_code or access):
        raise HTTP(400)
    bag_utils.is_modifiable_bag(bag_item.id_bag)
    user = db((db.auth_user.access_code == access_code)).select().first() if access_code else None
    is_vip_seller = auth.has_membership(None, user.id, role='VIP seller') or auth.has_membership(None, user.id, role='Admin') or auth.has_membership(None, user.id, role='Manager') if user else access
    if is_vip_seller:
        # change the item bag item sale price in db
        sale_price = bag_item.sale_price
        discount_p = D(1) - (sale_price / (sale_price + bag_item.discount))
        if price_index == '1':
            sale_price = bag_item.id_item.base_price
        elif price_index == '2':
            sale_price = bag_item.id_item.price2
        elif price_index == '3':
            sale_price = bag_item.id_item.price3
        bag_item.sale_price = sale_price - sale_price * discount_p
        bag_item.discount = sale_price * discount_p
        bag_item.sale_taxes = item_taxes(bag_item.id_item, bag_item.sale_price or 0)
        bag_item.update_record()
    else:
        raise HTTP(401)

    bag_data = bag_utils.refresh_bag_data(bag_item.id_bag.id)

    return dict(status="ok", **bag_data)
def create():
    """
        args: [id_bag]
    """

    bag = get_valid_bag(request.args(0))
    if not bag:
        session.info = T('Bag not found')
        redirection()
    bag_only_items_list = True
    include_bag = False

    bag_items = db(db.bag_item.id_bag == bag.id).select()
    bag_items_count = len(bag_items)
    for bag_item in bag_items:
        qty = item_stock_qty(bag_item.id_item, bag.id_store)
        bag_item.quantity = min(bag_item.quantity, qty)
        if not bag_item.quantity or not bag_item.id_item.has_inventory:
            bag_item.delete_record()
            bag_items_count -= 1
        else:
            bag_item.update_record()
    refresh_bag_data(bag.id)

    if not bag_items_count:
        session.info = T('Please add items to the product loss')
        redirection()

    form = SQLFORM(db.product_loss, buttons=[INPUT(_type='submit', _value=T('Commit'), _class="btn btn-primary"), A(T('Cancel'), _class='btn btn-default', _href=URL('default', 'index')) ], _id="product_loss_form", formstyle='bootstrap3_inline')
    form.vars.id_bag = bag.id
    form.vars.id_store = bag.id_store.id

    if form.process().accepted:
        bag.status = BAG_COMPLETE
        bag.update_record()
        remove_stocks(bag_items)
        session.info = T('Product loss commited')
        redirection()
    elif form.errors:
        session.info = T('Form has errors')

    return locals()
Example #6
0
def delete_bag_item():
    """
        args:[ id_bag_item]
    """

    bag_item = db.bag_item(request.args(0))

    if not bag_item:
        raise HTTP(404)

    bag_utils.is_modifiable_bag(bag_item.id_bag)
    db(db.bag_item.id == request.args(0)).delete()
    bag_data = bag_utils.refresh_bag_data(bag_item.id_bag.id)
    return dict(status="ok", **bag_data)
Example #7
0
def delete_bag_item():
    """
        args:[ id_bag_item]
    """

    bag_item = db.bag_item(request.args(0))

    if not bag_item:
        raise HTTP(404)

    bag_utils.is_modifiable_bag(bag_item.id_bag)
    db(db.bag_item.id == request.args(0)).delete()
    bag_data = bag_utils.refresh_bag_data(bag_item.id_bag.id)
    return dict(status="ok", **bag_data)
Example #8
0
def change_bag_item_sale_price():
    """ Change the bag item sell price to any of the 3 price options """

    price_index = request.args(0)
    bag_item = db.bag_item(request.args(1))
    access_code = request.args(2)

    bag_utils.is_modifiable_bag(bag_item.id_bag)

    if not (price_index or bag_item or access_code or access):
        raise HTTP(400)

    is_vip_seller = bool(MEMBERSHIPS.get("VIP seller"))
    if not is_vip_seller and access_code:
        user = db(
            (db.auth_user.access_code == access_code) &
            (db.auth_user.registration_key == "")
        ).select().first()
        if user:
            is_vip_seller = auth.has_membership(None, user.id, 'VIP seller')
        else:
            is_vip_seller = False

    if is_vip_seller:
        # change the item bag item sale price in db
        sale_price = bag_item.sale_price
        discount_p = D(1) - (sale_price / (sale_price + bag_item.discount))

        if price_index == '1' and bag_item.id_item.base_price:
            sale_price = bag_item.id_item.base_price
        elif price_index == '2' and bag_item.id_item.price2:
            sale_price = bag_item.id_item.price2
        elif price_index == '3' and bag_item.id_item.price3:
            sale_price = bag_item.id_item.price3

        bag_item.sale_price = sale_price - sale_price * discount_p
        bag_item.discount = sale_price * discount_p
        bag_item.sale_taxes = item_taxes(bag_item.id_item, bag_item.sale_price or 0)
        bag_item.update_record()
    else:
        raise HTTP(401)

    bag_data = bag_utils.refresh_bag_data(bag_item.id_bag.id)

    return dict(status="ok", **bag_data)
Example #9
0
def add_bag_item():
    """ Creates a bag item with id_item = id_item for the current session bag
        args: [ id_item ] """

    from cp_errors import CP_OutOfStockError

    item = db(
        (db.item.id == request.args(0)) & (db.item.is_active == True)
    ).select().first()

    bag = bag_utils.is_modifiable_bag(session.current_bag)
    id_bag = bag.id if bag else None
    if not item or not id_bag:
        raise HTTP(404)
    try:
        bag_item = bag_utils.add_bag_item(bag, item)

        bag_item = bag_utils.set_bag_item(bag_item)
        bag_data = bag_utils.refresh_bag_data(id_bag)

        return dict(bag_item=bag_item, **bag_data)
    except CP_OutOfStockError as e:
        return dict(status=e)
Example #10
0
def add_bag_item():
    """ Creates a bag item with id_item = id_item for the current session bag
        args: [ id_item ] """

    from cp_errors import CP_OutOfStockError

    item = db(
        (db.item.id == request.args(0)) & (db.item.is_active == True)
    ).select().first()

    bag = bag_utils.is_modifiable_bag(session.current_bag)
    id_bag = bag.id if bag else None
    if not item or not id_bag:
        raise HTTP(404)
    try:
        bag_item = bag_utils.add_bag_item(bag, item)

        bag_item = bag_utils.set_bag_item(bag_item)
        bag_data = bag_utils.refresh_bag_data(id_bag)

        return dict(bag_item=bag_item, **bag_data)
    except CP_OutOfStockError as e:
        return dict(status=e)