I have an update SQLFORM for quotation table, i want to make
all_items_total and quote_amount not writable by user because
all_items_total should be the sum of all the items belong to this
quotation, not enter by user. The quote_amount should be all_items_total
minus discount, so when the user changes the discount value on the SQLFORM,
jQuery should detect the change and make a callback to return the
quote_amount, finally update the field with specific id. All those ajax and
callback worked fine when i had db.quotation.all_items_total.writable=True
& db.quotation.quote_amount.writable=True. However, when I finally changed
them to False, first I couldn't pick up the value of all_items_total which
is highlighted in red below inside the ajax function, but
the change_discount_callback was called, obviously error was raised because
all_items_total passed from ajax to callback function was empty. Then i
tried to add another ajax callback to simply change those 2 field's
writable to True (temporary), it went through but same issue happened.
Surely if all the above worked, i still had to update the quote_amount on
the form display with value returned from callback. I have been stuck for
1.5 days, any help is much appreciated. Thanks!
db.define_table('quotation',
Field('customer', 'reference customer'),
Field('all_items_total', 'double', default=0),
Field('discount', 'double', default=0, label='Discount %'),
Field('quote_amount', 'double', default=0),
auth.signature)
db.define_table('quote_item',
Field('quotation', 'reference quotation', writable=False,
label='Quote Id'),
Field('product'),
Field('quantity', 'integer', default=1),
auth.signature)
def edit_quote():
db.quotation.all_items_total.writable = False
db.quotation.quote_amount.writable = False
quote_id = request.args(0)
quote_row = db.quotation(quote_id)
form=SQLFORM(db.quotation, quote_row, labels={'id':'Quote
Id'}).process()
return locals()
<script>
jQuery(document).ready(function(){
function do_ajax_change_discount(t, discount, all_items_total){
jQuery.ajax({method:'post', url:'{{=URL('change_discount_callback')}}',
data:{'discount':discount,
'all_items_total':all_items_total},
success: function(data){
result = JSON.parse(data)
jQuery('#quotation_quote_amount').val(result.quote_amount);
});
}
jQuery('#quotation_discount').change(function(){
var discount = jQuery('#quotation_discount').val();
var all_items_total = jQuery('#quotation_all_items_total').val();
do_ajax_change_discount(this, discount, all_items_total);
});
});
</script>
def change_discount_callback():
vars=request.post_vars
if vars:
discount = float(vars.discount)
all_items_total = float(vars.all_items_total)
quote_amount = all_items_total * (100 - discount)/100
else:
print "request.post_vars is None"
return simplejson.dumps(dict(quote_amount=quote_amount))
--
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].
For more options, visit https://groups.google.com/d/optout.