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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/web2py/d3d34c87-7d5b-4ca6-8108-52f61a120cd7%40googlegroups.com.