Everything you are saying i understand but I cant put into code, every 
attempt I have made at this all day today just 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/21e0eee6-fc61-4767-b0f9-50b77ebfa719%40googlegroups.com.

Reply via email to