thank you so much for detail explaination, anthony. i found another way 
around that work fine, don't know is this best practice or not because it 
hard code to reserve the place in session variable. 
like describe in the previous post, i want this module function can be used 
by another functions in another controllers, so to explicit the session is 
fine and then i must copy and rename the module function and rename it's 
session name.
e.g.
*controllers/sale.py*
if 'sale_order' in request.function :
# session sale_order
session.sale_order = session.sale_order or {}
#session.sale_order_net = session.sale_order_net or dict(discount = 0, 
delivery_fee = 0, packing_fee = 0, stamp_fee = 0, paid = 0)
#session.sale_order_net = session.sale_order_net or {'discount':0, 
'delivery_fee':0, 'packing_fee':0, 'stamp_fee':0, 'paid':0}
*session.sale_order_net = session.sale_order_net or {}*
* session.sale_order_net[0] = dict(discount = 0, delivery_fee = 0, 
packing_fee = 0, stamp_fee = 0, paid = 0)*
#sale_order
session_sale_order = session.sale_order
session_sale_order_net = session.sale_order_net

def sale_order_callback():
return transaction.callback_0(session_sale_order, session_sale_order_net)
*modules/transaction.py*
def callback_0(session_order, session_order_net):
if current.request.vars.action == 'adjust_total_net':
discount = int(current.request.vars['discount'] )
delivery_fee = int(current.request.vars['delivery_fee'] )
packing_fee = int(current.request.vars['packing_fee'] )
stamp_fee = int(current.request.vars['stamp_fee'] )
paid = int(current.request.vars['paid'] )

*session_order_net[0] = dict(discount = discount, delivery_fee = 
delivery_fee, packing_fee = packing_fee, stamp_fee = stamp_fee, paid = 
paid)*

thanks and best regards,
stifan

On Thursday, January 14, 2016 at 1:58:07 AM UTC+7, Anthony wrote:
>
> Presumably you are calling this function as follows:
>
> callback_0(session.order, session.sale_order_net)
>
> The problem is you later have:
>
>     session_order_net = dict(...)
>
> At that point, you are not modifying the session.sale_order_net object but 
> simply assigning a new object to the local variable session_order_net. This 
> is equivalent to doing:
>
>     session_order_net = current.session.sale_order_net
>     session_order_net = dict(...)
>
> In the above case, you wouldn't expect the second line to have any effect 
> on session.sale_order_net -- the second line simply makes the first line 
> irrelevant (i.e., it simply overwrites the value of the session_order_net 
> variable that is local to the function).
>
> The earlier line:
>
>     session_order[id] = ...
>
> works because in that case, you are not assigning a new object to the 
> session_order variable but merely mutating the object to which 
> session_order refers (i.e., session.order).
>
> If you want to completely replace the value of session.sale_order_net, 
> then pass in the session object and do:
>
>     session.sale_order_net = ...
>
> Anthony
>
>
>
>
>
> On Wednesday, January 13, 2016 at 12:48:11 AM UTC-5, 黄祥 wrote:
>>
>> is it possible to update 2 sessions values using web2py module? i've 
>> tested it only first session value work, the second session value work if 
>> explicit define in the module (but the module is used by another 
>> controller, so i want to create just 1 module for all controllers).
>> e.g.
>> *modules/transaction.py*
>> def callback_0(session_order, session_order_net):
>> if current.request.vars.action == 'adjust_total':
>> id = int(current.request.vars.id)
>> quantity = int(current.request.vars['quantity_%s' % id])
>> price = int(current.request.vars['price_%s' % id])
>> *session_order[id] = quantity, price # the first parameter work*
>> total_price = quantity * price
>> total_quantity = 0
>> grand_total = 0
>> for calculation_id, (calculation_quantity, calculation_price) in 
>> session_order.items():
>> calculation_total_price = calculation_quantity * calculation_price
>> total_quantity += calculation_quantity
>> grand_total += calculation_total_price
>> return "jQuery('#total_price_%s').html('%s'); 
>> jQuery('#total_quantity').html('%s'); jQuery('#grand_total').html('%s');" % 
>> (id, 
>>   format(total_price, ",d").replace(",", "."), format(total_quantity, 
>> ",d").replace(",", "."), 
>>   format(grand_total, ",d").replace(",", ".") )
>> if current.request.vars.action == 'adjust_total_net':
>> discount = int(current.request.vars['discount'] )
>> delivery_fee = int(current.request.vars['delivery_fee'] )
>> packing_fee = int(current.request.vars['packing_fee'] )
>> stamp_fee = int(current.request.vars['stamp_fee'] )
>> paid = int(current.request.vars['paid'] )
>>
>> * current.session.sale_order_net = dict(discount = discount, delivery_fee 
>> = delivery_fee, packing_fee = packing_fee, stamp_fee = stamp_fee, paid = 
>> paid) # this work when explicit tell the session name*
>>
>> * #session_order_net = dict(discount = discount, delivery_fee = 
>> delivery_fee, packing_fee = packing_fee, stamp_fee = stamp_fee, paid = 
>> paid)** # the second parameter not work, no error traceback occured but 
>> the result is not expected (not updated value)*
>>
>> grand_total = sum(calculation_quantity * calculation_price for 
>> calculation_id, (calculation_quantity, calculation_price) in 
>> session_order.items() )
>> grand_total_net = grand_total-discount+delivery_fee+packing_fee+stamp_fee
>> paid_return = paid-grand_total_net
>>
>> return "jQuery('#grand_total_net').html('%s'); 
>> jQuery('#paid_return').html('%s');" % (
>>   format(grand_total_net, ",d").replace(",", "."), format(paid_return, 
>> ",d").replace(",", ".") )
>>
>> as in the example code above the bold code is work if i explicit it and 
>> if i use the second parameter (*session_order_net*) that been passed by 
>> function in controller, it is not work, the funny things is the first 
>> parameter work (*session_order*). no error traceback occured but the 
>> result is not expected.
>>
>> any idea how to get it work in web2py way?
>>
>> thanks and best regards,
>> stifan
>>
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to