On Tuesday, September 10, 2019 at 2:54:43 AM UTC-7, mostwanted wrote: > > 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! >
Don't you record the id of the item in your shopping cart? > > 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 > I don't think you want this line: > db(db.product.amount).update(amount=diff) > I think it is selecting everything in db.product that has an amount. Once you figure out how to get the id from your shopping cart, the line should probably be db(db.product.id == cart_item.id).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 > /dps > > 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/38e43a07-094b-4098-a9e0-c14ea82e70a8%40googlegroups.com.