Odoo Help

0

XML Button to call python function

By
Billiard R Made
on 11/19/14, 7:26 AM 6,383 views

I am getting an error when on the number of parameters passed when a user clicks my Calculate button. I want to pass some parameters to the function, user input data on the form, for use in the calculation.

    <record id="view_dt_fx_transaction_form" model="ir.ui.view">
        <field name="name">dt.fx.transaction.form.view</field>
        <field name="model">dt.fx.transaction</field>
            <!-- this will be our title of list/tree view -->
            <form string="Forex Transaction">
                <field name="txntype" />
                <field name="fxamt" />
                <field name="fxcurrency" />
                <field name="fxrate" />
                <field name="fxvalue" />
                <button name="calculate_forex" string="(calculate) " type="object" context="{'fldAmt' : fxamt,'fldCurrency' : fxcurrency}"/>        
                <field name="customertype" />
                <field name="nationality" />
                <field name="idtype" />
                <field name="idno" />
                <field name="firstname" />
                <field name="middlename" />
                <field name="surname" />
                <field name="address" />                    
            </form>
        </field>
    </record>


   def calculate_forex(self, cr, uid, ids,context={'fldAmt','fldCurrency'}):                       
        for prod in self.browse(cr, uid, ids, context=context):
            cr.execute("SELECT buyingrate,sellingrate FROM dt_fx_currency " )
            values = cr.fetchone()
        if values[0] >= 0:
            buyrate = values[0]
        if values[1] >= 0:
            sellrate = values[1]
        #if self.txntype == 'purchasing':
        self.write(cr, uid, prod.id, {'fxrate': buyrate })
        self.write(cr, uid, prod.id, {'fxvalue': buyrate * fldAmt })

There is something I am definetly doing wrong. Please assist

1

Hi,

You have to define your def as like below to get the value which are passed from context.

def calculate_forex(self, cr, uid, ids,context={}):                       
        context = context or {}

        for prod in self.browse(cr, uid, ids, context=context):
            cr.execute("SELECT buyingrate,sellingrate FROM dt_fx_currency " )
            values = cr.fetchone()
        if values[0] >= 0:
            buyrate = values[0]
        if values[1] >= 0:
            sellrate = values[1]

        fldAmt = context.get('fldAmt',1) #get the value from context.
        #if self.txntype == 'purchasing':
        self.write(cr, uid, prod.id, {'fxrate': buyrate })
        self.write(cr, uid, prod.id, {'fxvalue': buyrate * fldAmt })

I hope you will get your result.

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

Register

Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

1 follower(s)

Stats

Asked: 11/19/14, 7:26 AM
Seen: 6383 times
Last updated: 8/23/15, 12:56 PM