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.

Reply via email to