Hi!!!, When you made a sale, only must to update the products sold.
For example: db(db.product.amount.id = product_id ).update(amount=amount1) El jueves, 5 de septiembre de 2019, 15:04:57 (UTC-3), mostwanted escribió: > > Everything you are saying i understand but I cant put into code, every > attempt I have made all day today just went up on traceback-flames! I am > recording sales made into the sales db through the buy function: > def buy(): > if not session.cart: > session.flash = 'Add something to shopping cart' > redirect(URL('index')) > invoice = session.invoiceNo > total = sum(db.product(id).price*qty for id,qty in session.cart.items > ()) > for session.key, session.value in session.cart.items(): > db.sales.insert(invoice=invoice,buyer=auth.user.id,product = > session.key,quantity = session.value,price = db.product(session.key).price > ) > > session.cart.clear() > session.flash = 'Sale Complete' > redirect(URL('invoice',args=invoice)) > return dict(cart=session.cart,form=form,total=total) > > My cart doest really do alot, > def cart(): > if not session.cart: > session.flash = 'Add something to shopping basket' > redirect(URL('index')) > total = sum(db.product(id).price*qty for id,qty in session.cart.items > ()) > vat=round(total*0, 2) > totalPrice=total+vat > session.invoiceNo="".join([random.choice(string.ascii_uppercase)\ > for i in range(4)])+"-"+"".join([random.choice(string. > digits)\ > for i in range(4)])+ > "-"+"".join([random.choice(string.ascii_uppercase)\ > > for i in range(4)])+"-"+"".join([random.choice(string.digits)\ > for i in range(4)]) > > #CONVERT TO INTEGER TO BE ABLE TO UTILIZE {{=MoneyFormat()}} FUNCTION > text=request.vars.name > if text is None: > text=int(0) > if text: > text=int(request.vars.name) > change=float(text)-totalPrice > else: > change=int(0) > return dict(cart=session.cart, total=total, totalPrice=totalPrice, vat > =vat, text=text, change=change, invoiceNo=session.invoiceNo) > > > From what you said I felt if i could identify the sold items in the sale > table and match them against the items in the product table and then from > there update those that have the same id. As a concept in my head its easy > but implementing it goes side ways: > > 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/e99034e7-bd0e-41f8-b847-bab02cda9704%40googlegroups.com.