In your code:

    form = SQLFORM(db.checkout, formstyle='divs') 
    if form.process(onvalidation=check_database_entry).accepted:
        for key, value in session.cart.items():
            db.checkout.insert(userinfo = auth.user.id,
                            product = key,
                            project = form.vars.project,
                            date_in = form.vars.date_in,
                            date_out = form.vars.date_out)

The function process() does a db.checkout.insert(**form.vars). You can 
prevent it with dbio=False

    form = SQLFORM(db.checkout, formstyle='divs') 
    if form.process(dbio=False,onvalidation=check_database_entry).accepted:
        for key, value in session.cart.items():
            db.checkout.insert(userinfo = auth.user.id,
                            product = key,
                            project = form.vars.project,
                            date_in = form.vars.date_in,
                            date_out = form.vars.date_out)



On Monday, 8 October 2012 11:33:20 UTC-5, Andrew Evans wrote:
>
> I am trying to solve an issue in my code and hoping some of you can help
>
> I have a cart functionality for *reserving* items based on a month / day 
> / year reservation. The problem is an extra entry is being added to the 
> database when I submit the form.
>
> Any ideas how to fix this also will my *check_database_entry *onvalidation 
> method work if I am now adding the data using sessions?
>
> *cheers
>
> Below is my code
>
> def cart_callback():
>     id = int(request.vars.id)
>     if request.vars.action == 'add':
>         session.cart[id] = session.cart.get(id,0)+1
>         session.flash = 'Item added to Cart'
>     if request.vars.action == 'sub':
>         session.cart[id]=max(0,session.cart.get(id,0)-1)
>         session.flash = 'Item removed from Cart'
>     return redirect(URL('first_year', 'first_year'))
>
> def check_database_entry(form):
>     prod_id = request.args(0)
>     project_date = db(db.checkout.product == prod_id).select()
>     for project in project_date:
>         start = project.date_in
>         end = project.date_out
>         user_start = datetime.datetime.strptime(form.vars.date_in, 
> '%Y-%m-%d').date()
>         user_end = datetime.datetime.strptime(form.vars.date_out, 
> '%Y-%m-%d').date()
>         if start <= user_start <= end or start <= user_end <= end:   
>             session.flash = 'Those dates have been reserved for those 
> items, please try another'
>             redirect(URL('error', 'availability'))  
>
> @auth.requires(auth.has_membership('first_year') or 
> auth.has_membership('admin'))
> def cart_checkout():
>     form = SQLFORM(db.checkout, formstyle='divs') 
>     if form.process(onvalidation=check_database_entry).accepted:
>         for key, value in session.cart.items():
>             db.checkout.insert(userinfo = auth.user.id,
>                             product = key,
>                             project = form.vars.project,
>                             date_in = form.vars.date_in,
>                             date_out = form.vars.date_out)
>         session.cart.clear() 
>         session.flash = 'Your item(s) are Reserved'
>         redirect(URL('default', 'next'))              
>     elif form.errors:
>         response.flash = 'form has errors'
>     else:
>         response.flash = 'please fill the form' 
>         return dict(form=form)
>
>
>

-- 



Reply via email to