Thank you everyone for your input, i was finally was able to solve my problem, i added these two lines & erased everything else (smile) & it worked like a charm. diff=db.product(key).amount-value db(db.product.id==db.product(key).id).update(amount=diff)
The whole code: total = sum(db.product(id).price*qty for id,qty in session.cart.items()) for key, value in session.cart.items(): diff=db.product(key).amount-value db(db.product.id==db.product(key).id).update(amount=diff) db.sale.insert(invoice=invoice,buyer=auth.user.id,product = key,quantity = value,price = db.product(key).price) Regards; Mostwanted On Thursday, September 5, 2019 at 7:59:21 AM UTC+2, mostwanted wrote: > > I have a website where I am selling items, what I desperately want to > achieve is to be able to show the buyers the remaining number of each item. > I have 2 tables, the table that has all the items being sold & has a field > amount which is the current number of items in stock and the other table > which records sales as customers buy and has a field quantity which is > the quantity of items purchased. After a customer has made a purchase I > want to be able to subtract quantity from amount and have difference > update and be the new value for amount. > > I wrote some controller code which is not achieving this, it is instead > updating the amount field for all items with the same figure. > > > THE VIEW > > {{extend 'layout.html'}} > > <div class="row"> > {{for p in products:}} > {{if p.product_type=="Earrings":}} > <div class="clothes"> > <h4 style="color: #ff69b4;">{{=p.name}}</h4> > <h7 style="color: #ff69b4;">{{=p.amount}} available in stock</h7> > <h5> > <span style="color: aqua; font-weight: > bold;">{{=MoneyFormat(p.price)}}</span> > </h5> > <img class="magnify" src="{{=URL('download',args=p.image)}}" > height="200px"/> > <br /> > <span id="{{='item%s'%p.id}}" style="font-weight: bold; color: > red;">{{=session.cart.get(p.id,0)}}</span> in cart - {{=A('add to > cart',callback=URL('cart_callback',vars=dict(id=p.id,action='add')),target='item%s'%p.id,_class='button > pill')}} > <br /> > <span style="font-size:12px;font-weight: bold; color: #ff69b4;">Click the > image to enlarge</span> > <br /> > </div> > {{pass}} > > {{pass}} > </div> > > > THE CART_CALLBACK FUNCTION > > > def cart_callback(): > id = int(request.vars.id) > if request.vars.action == 'add': > session.cart[id]=session.cart.get(id,0)+1 > if request.vars.action == 'sub': > session.cart[id]=max(0,session.cart.get(id,0)-1) > return str(session.cart[id]) > > > MY FUNCTION FOR UPDATING AFTER PURCHASES > > def index(): > if not auth.user: > response.flash=T('PLEASE LOG IN FIRST TO BE ABLE TO GET THE MENU AND > BUY') > products = db(db.product).select(orderby=db.product.name) > num=db(db.sale).select() > for n in num: > quantity=n.quantity > if quantity is None: > quantity=0 > for p in products: > amount1=p.amount-quantity > db(db.product.amount).update(amount=amount1) > return locals() > > > What should happen is that every time a customer buys whatever number of > items a new figure showing reduction in number of items should be displayed. > > > Regards; > > > Mostwanted > > > > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/d3d34c87-7d5b-4ca6-8108-52f61a120cd7%40googlegroups.com.