Esempio n. 1
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)
Esempio n. 2
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)
Esempio n. 3
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)
Esempio n. 4
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)
Esempio n. 5
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)
Esempio n. 6
0
def stock_transfer():
    """ """

    bag = bag_utils.is_modifiable_bag(session.current_bag)

    # check if all the bag items are consistent
    bag_items = db(db.bag_item.id_bag == bag.id).select()
    # delete the bag if there are no items
    if not bag_items:
        session.flash = T('There are no items in the bag')
        redirection()

    # counts services, since services cant be transfered
    count = 0
    for bag_item in bag_items:
        if not bag_item.id_item.has_inventory:
            count += 1

    # the bag contains services
    if count:
        session.flash = T('You should not be transfering services')
        bag_utils.auto_bag_selection()
        redirect(URL('default', 'index'))

    bag_utils.check_bag_items_integrity(bag_items)

    # create stock transfer record
    new_stock_transfer_id = db.stock_transfer.insert(id_store_from=bag.id_store.id, id_bag=bag.id)
    bag.status = BAG_COMPLETE
    bag.update_record()
    item_utils.remove_stocks(bag_items)

    redirect(URL('stock_transfer', 'ticket', args=new_stock_transfer_id))
Esempio n. 7
0
def stock_transfer():
    """ """

    bag = bag_utils.is_modifiable_bag(session.current_bag)

    # check if all the bag items are consistent
    bag_items = db(db.bag_item.id_bag == bag.id).select()
    # delete the bag if there are no items
    if not bag_items:
        session.flash = T('There are no items in the bag')
        redirection()

    # counts services, since services cant be transfered
    count = 0
    for bag_item in bag_items:
        if not bag_item.id_item.has_inventory:
            count += 1

    # the bag contains services
    if count:
        session.flash = T('You should not be transfering services')
        bag_utils.auto_bag_selection()
        redirect(URL('default', 'index'))

    bag_utils.check_bag_items_integrity(bag_items)

    # create stock transfer record
    new_stock_transfer_id = db.stock_transfer.insert(id_store_from=bag.id_store.id, id_bag=bag.id)
    bag.status = BAG_COMPLETE
    bag.update_record()
    item_utils.remove_stocks(bag_items)

    redirect(URL('stock_transfer', 'ticket', args=new_stock_transfer_id))
Esempio n. 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)
Esempio n. 9
0
def discard_bag():
    bag = bag_utils.is_modifiable_bag(session.current_bag)
    removed_bag = session.current_bag
    db(db.bag_item.id_bag == bag.id).delete()
    db(db.bag.id == bag.id).delete()

    bag_utils.auto_bag_selection()

    return dict(other_bag=db.bag(session.current_bag), removed=removed_bag)
Esempio n. 10
0
def discard_bag():
    bag = bag_utils.is_modifiable_bag(session.current_bag)
    removed_bag = session.current_bag
    db(db.bag_item.id_bag == bag.id).delete()
    db(db.bag.id == bag.id).delete()

    bag_utils.auto_bag_selection()

    return dict(other_bag=db.bag(session.current_bag), removed=removed_bag)
Esempio n. 11
0
def set_bag_service_performer():
    """
        modifies the bag_service performer.
        args: [ bag_item (service), id_user ]

    """

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

    user = db.auth_user(request.args(1))
    if not user or user.is_client or user.registration_key != '':
        raise HTTP(404)

    bag_item.performed_by = user.id
    bag_item.update_record()

    return dict()
Esempio n. 12
0
def set_bag_service_performer():
    """
        modifies the bag_service performer.
        args: [ bag_item (service), id_user ]

    """

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

    user = db.auth_user(request.args(1))
    if not user or user.is_client or user.registration_key != '':
        raise HTTP(404)

    bag_item.performed_by = user.id
    bag_item.update_record()

    return dict()
Esempio n. 13
0
def select_bag():
    """ Set the specified bag as the current bag. The current bag will be available as session.current_bag

        args: [bag_id]
    """
    bag = None
    try:
        bag = bag_utils.is_modifiable_bag(request.args(0))
    except:
        bag = bag_utils.auto_bag_selection()
    if not bag:
        raise HTTP(404)
    session.current_bag = bag.id
    return bag_utils.bag_selection_return_format(bag)
Esempio n. 14
0
def select_bag():
    """ Set the specified bag as the current bag. The current bag will be available as session.current_bag

        args: [bag_id]
    """
    bag = None
    try:
        bag = bag_utils.is_modifiable_bag(request.args(0))
    except:
        bag = bag_utils.auto_bag_selection()
    if not bag:
        raise HTTP(404)
    session.current_bag = bag.id
    return bag_utils.bag_selection_return_format(bag)
Esempio n. 15
0
def complete():
    """ Check bag consistency and set its status based on the user role """

    from cp_errors import CP_EmptyBagError

    bag = bag_utils.is_modifiable_bag(session.current_bag)

    try:
        bag_utils.complete(bag)
        bag_utils.auto_bag_selection()

    except CP_EmptyBagError:
        bag_utils.auto_bag_selection()
        redirection()

    if auth.has_membership(None, bag.created_by.id, 'Clients'):
        redirect(URL('sale_order', 'create', args=bag.id))

    if auth.has_membership('Sales checkout'):
        redirect(URL('sale', 'create', args=bag.id))
    else:
        redirect(URL('ticket', args=bag.id))
Esempio n. 16
0
def complete():
    """ Check bag consistency and set its status based on the user role """

    from cp_errors import CP_EmptyBagError

    bag = bag_utils.is_modifiable_bag(session.current_bag)

    try:
        bag_utils.complete(bag)
        bag_utils.auto_bag_selection()

    except CP_EmptyBagError:
        bag_utils.auto_bag_selection()
        redirection()

    if auth.has_membership(None, bag.created_by.id, 'Clients'):
        redirect(URL('sale_order', 'create', args=bag.id))

    if auth.has_membership('Sales checkout'):
        redirect(URL('sale', 'create', args=bag.id))
    else:
        redirect(URL('ticket', args=bag.id))
Esempio n. 17
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)
Esempio n. 18
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)