I figured if I could update the amount field in db.product within the buy functiontion just around the same time i'm saving inside the db.sale table when purchasing then it should be easy but I am having a really hard time identifying only the purchased items by their ids & subtracting their quantities from similar items in db.product!
The code below is able to update the amount in db.product but it updates for all products which is not what i want CODE SAMPLE 1: for item1 in item1: diff=item1.amount-value db(db.product.amount).update(amount=diff) Then i made another desperate attempt with the code below but it is not updating anything at all! for item1 in item1: for id, k in session.cart.items(): if item1.id==k: diff=item1.amount-value db(db.product.amount).update(amount=diff) Anyone who can do this better please help. Regards; Mostwanted On Thursday, September 5, 2019 at 8:21:56 AM UTC+2, Dave S wrote: > > > > On Wednesday, September 4, 2019 at 10:59:21 PM UTC-7, 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 >> >> >> > index() looks like it spends a great deal of time subtracting everything > in sales from everything in products. > > I think you are recording the product id in the cart. Are you then (on > check-out, I presume) recording the product id in db.sales? > > if so , then you don't need the select() on all products. > Instead, use the product id in each row of db.sales to select the product > entry to update. > > You probably want a way to identify which rows in db.sales have already > been processed (that is, which quantities have already been subtracted from > the the available in the corresponding product entry). > > /dps > > > -- 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/72d0171e-3668-4554-8606-f65536e1d8ec%40googlegroups.com.