How to button object use?

Asked by shanky

Hi,
I want to make simple calculator module as tutorial?
    my main object is :

class am_calculator(osv.osv):
    pdb.set_trace()
    _name = "am.calculator"
    _description = 'AM Calculator'
    _columns = {
    'aVal': fields.float('Value1', required=True),
    'bVal': fields.float('Value2', required=True),
    'ans': fields.float("Answer", readonly=True),
    }
am_calculator()

 My view is as follows:
<openerp>
    <data>
        <menuitem name="AM Calculator" id="main_menu_am_calculator"/>
        <record model="ir.ui.view" id="view_calculator_form">
            <field name="name">am.calculator.form</field>
            <field name="model">am.calculator</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
                <form string="Calculator">
                    <group col="2" colspan="2">
                        <field name="aVal" />
                        <field name="bVal" />
                    </group>
                    <group col='2' colspan='2'>
                        <field name="ans" />
                        <button string="+" name="addition" confirm="Do u want to make addition" type="object"/>
                        <button string="-" name="substraction" confirm="Do u want to make substraction" type="object"/>
                    </group>
                </form>
            </field>
        </record>
        <record model="ir.actions.act_window" id="action_calculator_view">
            <field name="name">Calculator</field>
            <field name="res_model">am.calculator</field>
            <field name="view_type">form</field>
            <field name="view_mode">form,tree</field>
        </record>
        <menuitem action="action_calculator_view" parent="main_menu_am_calculator" icon="terp-sale"/>
    </data>
</openerp>

Question is if I put value in "aVal" ,"bVal" field , show there addition or subtractions in "ans" field
what will be code for the addition and subtraction function?

Any one help me?
Shankar

Question information

Language:
English Edit question
Status:
Solved
For:
OpenERP Edit question
Assignee:
No assignee Edit question
Solved by:
Vinay Rana (OpenERP)
Solved:
Last query:
Last reply:
Revision history for this message
Vinay Rana (OpenERP) (vra-openerp) said :
#1

Hello Shankar,

It is very easy. You have to define separate two method which calculate the answer and write this answer in to ans field of am.calculator object .

Hope this will help you.
Thanks.

Revision history for this message
shanky (shankar-shinde-deactivatedaccount) said :
#2

Hello Vra(openerp),

   I am new to openerp object, I tried with following code, I fail to make addition of two field,

Case:1)

code in openerp Object:
    def addition(self,cr,uid,ids):
        _columns['ans'] = float (_columns['aVal']) + float(_columns['bVal'])

Error:

Traceback (most recent call last):
  File "/usr/lib/python2.5/site-packages/openerp-server/netsvc.py", line 244, in dispatch
    result = LocalService(service_name)(method, *params)
  File "/usr/lib/python2.5/site-packages/openerp-server/netsvc.py", line 73, in __call__
    return getattr(self, method)(*params)
  File "/usr/lib/python2.5/site-packages/openerp-server/service/web_services.py", line 583, in execute
    res = service.execute(db, uid, object, method, *args)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/osv.py", line 59, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/osv.py", line 118, in execute
    res = pool.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/osv.py", line 110, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/orm.py", line 1279, in fields_view_get
    xarch, xfields = self.__view_look_dom_arch(cr, user, doc, view_id, context=context)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/orm.py", line 1084, in __view_look_dom_arch
    cr.execute('select name, model from ir_ui_view where (id=%s or inherit_id=%s) and arch like %s', (view_id, view_id, '%%%s%%' % field))
  File "/usr/lib/python2.5/site-packages/openerp-server/sql_db.py", line 76, in wrapper
    return f(self, *args, **kwargs)
  File "/usr/lib/python2.5/site-packages/openerp-server/sql_db.py", line 120, in execute
    res = self._obj.execute(query, params)
ProgrammingError: operator does not exist: integer = boolean
LINE 1: select name, model from ir_ui_view where (id=false or inheri...
                                                    ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
-----------------------------------------------------------------------------------------------------------------------------
Case :2)
code In openerp Object:

    def addition1(self,cr,uid,ids,c, d):
        print "value of a: ", c, "value of b: ", d
 return {'value':{'ans': c+d}}

code In XML file:
       <field name="ans" on_change= "addition1(aVal,bVal)"/>

Error:
Traceback (most recent call last):
  File "/usr/lib/python2.5/site-packages/openerp-server/netsvc.py", line 244, in dispatch
    result = LocalService(service_name)(method, *params)
  File "/usr/lib/python2.5/site-packages/openerp-server/netsvc.py", line 73, in __call__
    return getattr(self, method)(*params)
  File "/usr/lib/python2.5/site-packages/openerp-server/service/web_services.py", line 583, in execute
    res = service.execute(db, uid, object, method, *args)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/osv.py", line 59, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/osv.py", line 118, in execute
    res = pool.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/osv.py", line 110, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/orm.py", line 2084, in read
    result = self._read_flat(cr, user, select, fields, context, load)
  File "/usr/lib/python2.5/site-packages/openerp-server/osv/orm.py", line 2138, in _read_flat
    self._order), sub_ids)
  File "/usr/lib/python2.5/site-packages/openerp-server/sql_db.py", line 76, in wrapper
    return f(self, *args, **kwargs)
  File "/usr/lib/python2.5/site-packages/openerp-server/sql_db.py", line 120, in execute
    res = self._obj.execute(query, params)
ProgrammingError: column "ans" does not exist
LINE 1: SELECT "aVal","bVal","ans",COALESCE(write_date, create_date,...

I need more help.
Shankar

Revision history for this message
Vinay Rana (OpenERP) (vra-openerp) said :
#3

Hello Shankar,

You need to define the method with same name of button which you did assign in the view.

    def addition(self, cr, uid, ids, context={}):
        if ids:
            obj = self.browse(cr, uid, ids, context)
            sum = obj[0].aVal + obj[0].bVal
            self.write(cr, uid, ids, {'ans': sum})
        return True
 Similarly for subtractions.

Hope this will help you.

Thanks.

Revision history for this message
shanky (shankar-shinde-deactivatedaccount) said :
#4

Hello vra,

  I use the given code.Test module on local system and remote sever it give me same above error message is:

ProgrammingError: operator does not exist: integer = boolean
LINE 1: select name, model from ir_ui_view where (id=false or inheri...
                                                    ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.

I don't get what is twist in the code.
Shankar

Revision history for this message
Vinay Rana (OpenERP) (vra-openerp) said :
#5

Hello Shankar,

There are so many example exist in tiny existing code you can search and understand.
You can use workflow function also.
Like invoice workflow for example.

Thanks.

Revision history for this message
shanky (shankar-shinde-deactivatedaccount) said :
#6

Hello vra,

   I will try tomorrow u suggested tricks.

   I observed in OpenERP data on the view form get saved then any required operation we do.
ex.
   on "purchase.order.form" view we fill the data for the field "Purchase Order Lines" if we press save button Or Refresh button Or Compute button then (Untaxed amount, Taxes, Total ) get calculate respective value and fill on the form

I think ,In mine case data in the "aVal" and "bVal" field only on view form , if click on add button call goes for python object, but value on form do not get for operation in object.

Is this my interpretation correct or wrong I don't know?

Shankar

Revision history for this message
Best Vinay Rana (OpenERP) (vra-openerp) said :
#7

Hello Shankar,

Can you please close this if your problem is solved.

Thanks.

Revision history for this message
shanky (shankar-shinde-deactivatedaccount) said :
#8

Thanks vra (openerp), that solved my question.