over 11 years ago
Adding a button on an OpenERP view is very easy and calling a function on it too. For example I created a function to add cartage amount on the sales order, I created a field to add cartage amount on it and then on button click it will be added to the total amount of the invoice. Lets see how:
Create a function
- def get_cartage(self, cr, uid, ids, invoice_id, context=None):
- res = {}
- acc_id = 39
- name = 'Cartage'
- amount = 0.0
- quantity = 1
- disc = 0.00
- val = 'TRUE'
- order = self.pool.get('sale.order')
- line = self.pool.get('account.invoice.line')
- for invoice in self.browse(cr,uid,ids):
- if invoice.cflag is False:
- amount = invoice.cartage
- if amount == 0.0:
- raise osv.except_osv(_('No Value !')_('You must add cartage'))
- if amount > 0.0:
- cr.execute('insert into account_invoice_line (invoice_id,name,account_id,origin,price_unit,quantity,discount,partner_id,uos_id,price_subtotal,company_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',(invoice.id,name,acc_id,invoice.origin,amount,quantity,disc,invoice.partner_id.id,quantity,amount,invoice.company_id.id))
- cr.execute('update account_invoice set cflag = %s where id = %s',(val,invoice.id))
- if invoice.cflag is True and invoice.cartage > 0.0:
- raise osv.except_osv(_('Message'),_('Cartage already added'))
- #raise osv.except_osv(_('No Value !'),_(str(invoice.cflag)))
- return res
def get_cartage(self, cr, uid, ids, invoice_id, context=None): res = {} acc_id = 39 name = 'Cartage' amount = 0.0 quantity = 1 disc = 0.00 val = 'TRUE' order = self.pool.get('sale.order') line = self.pool.get('account.invoice.line') for invoice in self.browse(cr,uid,ids): if invoice.cflag is False: amount = invoice.cartage if amount == 0.0: raise osv.except_osv(_('No Value !')_('You must add cartage')) if amount > 0.0: cr.execute('insert into account_invoice_line (invoice_id,name,account_id,origin,price_unit,quantity,discount,partner_id,uos_id,price_subtotal,company_id) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',(invoice.id,name,acc_id,invoice.origin,amount,quantity,disc,invoice.partner_id.id,quantity,amount,invoice.company_id.id)) cr.execute('update account_invoice set cflag = %s where id = %s',(val,invoice.id)) if invoice.cflag is True and invoice.cartage > 0.0: raise osv.except_osv(_('Message'),_('Cartage already added')) #raise osv.except_osv(_('No Value !'),_(str(invoice.cflag))) return res
Add a button in view
Note the name attribute, I used name of the function to be called and type as object. This is all you have to do for a function call on a button.
0 Comment(s)