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()
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)
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)
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()
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)
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)
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)