Odoo Help

Welcome!

This community 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.

0

How to add a field in existing account.invoice.line tree of customer invoice form

By
Odoo
on 5/19/14, 2:20 AM 2,257 views

How to add a field in existing account.invoice.line tree of customer invoice form ..This is my code pls help...

.py file---------------------------

import datetime
from openerp.osv import fields, osv

class account_invoice_line(osv.osv):
    
    _inherit='account.invoice.line'
    
    _columns={
              'gross_values':fields.float('Gross Amount') #gross value=unit_price*qty
              }
account_invoice_line()

 

.xml file---------------------------------

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
    <record id="account_sara_form_view" model="ir.ui.view">
    <field name="name">account.sara.form.view</field>
    <field name="model">account.invoice.line</field>
    <field name="inherit_id" ref="account.view_invoice_line_tree"/>
        <field name="arch" type="xml">
             <xpath expr="/tree/field[@name='price_unit']" position="after">
              <field name="gross_values"/>
               </xpath>
               </field>
</record>  
    </data>
</openerp>

 

it has no erro but this 'gross_values' field is not in account.invoice.line tree(invoice_line is a one2 many field in account.invoice object)

 

 

 

 

 

 

 

 

 

0

Odoo

--Odoo --
1328
| 5 2 5
kerala, India
--Odoo --

Working as a Odoo Functional and Technical Expert

Odoo
On 5/19/14, 3:41 AM

Hi NSC ,

This is the answer pls add openerp and init.py file

from osv import osv,fields
 
 
class account_new(osv.osv):
    _inherit="account.invoice.line"
 
    def onchange_schemid(self,cr,uid,ids,price_unit,quantity,context=None):
            if price_unit:
                amount_new=price_unit*quantity
                return {'value':{'new_total':amount_new}}
            return {}
         
    _columns={
              'new_total': fields.float('Gross Amount', required=True),
              }
     
     
account_new()
 
class account_invoice_line(osv.osv):
     
    _inherit='account.invoice.line'
     
    _columns={
               
              'ean_code':fields.char('EAN Code'),
              'rack_id':fields.char('Rack Id')
              #'rack_num_inhe':fields.integer('Rack Number')
              }
    #product_id_change=from product #rack number should come in invoice line,then quantity*unit_price ='gross_value'
    def product_id_change(self, cr, uid, ids, product,uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None):
        ean_val=self.pool.get('product.product').browse(cr,uid,product)
         
        #ean_val=self.pool.get('product.product').read(cr,uid,ids,['ean13'],context=context)
        print "###############################ean_val",ean_val
        #print "###############################eanval##########",ean_val.ean13.id
        if context is None:
            context = {}
        company_id = company_id if company_id != None else context.get('company_id',False)
        context = dict(context)
        context.update({'company_id': company_id, 'force_company': company_id})
        if not partner_id:
            raise osv.except_osv(_('No Partner Defined!'),_("You must first select a partner!") )
        if not product:
            if type in ('in_invoice', 'in_refund'):
                return {'value': {}, 'domain':{'product_uom':[]}}
            else:
                return {'value': {'price_unit': 0.0}, 'domain':{'product_uom':[]}}
        part = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
        fpos_obj = self.pool.get('account.fiscal.position')
        fpos = fposition_id and fpos_obj.browse(cr, uid, fposition_id, context=context) or False
 
        if part.lang:
            context.update({'lang': part.lang})
        result = {}
        res = self.pool.get('product.product').browse(cr, uid, product, context=context)
 
        if type in ('out_invoice','out_refund'):
            a = res.property_account_income.id
            if not a:
                a = res.categ_id.property_account_income_categ.id
        else:
            a = res.property_account_expense.id
            if not a:
                a = res.categ_id.property_account_expense_categ.id
        a = fpos_obj.map_account(cr, uid, fpos, a)
        if a:
            result['account_id'] = a
 
        if type in ('out_invoice', 'out_refund'):
            taxes = res.taxes_id and res.taxes_id or (a and self.pool.get('account.account').browse(cr, uid, a, context=context).tax_ids or False)
        else:
            taxes = res.supplier_taxes_id and res.supplier_taxes_id or (a and self.pool.get('account.account').browse(cr, uid, a, context=context).tax_ids or False)
        tax_id = fpos_obj.map_tax(cr, uid, fpos, taxes)
 
        if type in ('in_invoice', 'in_refund'):
            result.update( {'price_unit': price_unit or res.standard_price,'invoice_line_tax_id': tax_id} )
        else:
            result.update({'price_unit': res.list_price, 'invoice_line_tax_id': tax_id,'ean_code':ean_val.ean13,'rack_id':ean_val.loc_rack})
        result['name'] = res.partner_ref
 
        result['uos_id'] = uom_id or res.uom_id.id
        if res.description:
            result['name'] += '\n'+res.description
 
        domain = {'uos_id':[('category_id','=',res.uom_id.category_id.id)]}
 
        res_final = {'value':result, 'domain':domain}
 
        if not company_id or not currency_id:
            return res_final
 
        company = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
        currency = self.pool.get('res.currency').browse(cr, uid, currency_id, context=context)
 
        if company.currency_id.id != currency.id:
            if type in ('in_invoice', 'in_refund'):
                res_final['value']['price_unit'] = res.standard_price
            new_price = res_final['value']['price_unit'] * currency.rate
            res_final['value']['price_unit'] = new_price
 
        if result['uos_id'] and result['uos_id'] != res.uom_id.id:
            selected_uom = self.pool.get('product.uom').browse(cr, uid, result['uos_id'], context=context)
            new_price = self.pool.get('product.uom')._compute_price(cr, uid, res.uom_id.id, res_final['value']['price_unit'], result['uos_id'])
            res_final['value']['price_unit'] = new_price
        return res_final
     
account_invoice_line()

 

------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
            <record id="project_view_inherited" model="ir.ui.view">
                <field name="name">task view</field>
                <field name="model">account.invoice</field>
                <field name="type">form</field>
                <field name="inherit_id" ref="account.invoice_form"/>
                <field name="arch" type="xml">
 
                    <xpath expr="/form/sheet/notebook/page[1]/field[1]/tree/field[9]" position="after">
                        <field name="new_total"/>
                    </xpath>
                    <xpath expr="/form/sheet/notebook/page[1]/field[1]/tree/field[9]" position="attributes">
                        <attribute name='invisible'>1</attribute>
                    </xpath>
                    <xpath expr="/form/sheet/notebook/page[1]/field[1]/tree/field[7]" position="attributes">
                        <attribute name='invisible'>1</attribute>
                    </xpath>
 
                    <xpath expr="/form/sheet/notebook/page[1]/field[1]/tree/field[9]" position="after">
                        <field name="price_unit" on_change="onchange_schemid(price_unit,quantity)"/>
                    </xpath>
                
                    <xpath expr="/form/sheet/notebook/page[1]/field[1]/tree/field[7]" position="after">
                        <field name="quantity" on_change="onchange_schemid(price_unit,quantity)"/>
                    </xpath>
                    
                    <xpath expr="//page[@string='Invoice Lines']/field[@name='invoice_line']/tree[@string='Invoice Lines']/field[@name='name']" position="after">
            <field name="ean_code"/>
            <field name="rack_id"/>
        </xpath>                    
                </field>
                </record>
    </data>
</openerp>

Hi NSC, This is the actual requirement and here i attached my total code --------------- from osv import osv,fields class account_new(osv.osv): _inherit="account.invoice.line" def onchange_schemid(self,cr,uid,ids,price_unit,quantity,context=None): if price_unit: amount_new=price_unit*quantity return {'value':{'new_total':amount_new}} return {} _columns={ 'new_total': fields.float('Gross Amount', required=True), } account_new() class account_invoice_line(osv.osv): _inherit='account.invoice.line' _columns={ 'ean_code':fields.char('EAN Code'), 'rack_id':fields.char('Rack Id') #'rack_num_inhe':fields.integer('Rack Number') } #product_id_change=from product #rack number should come in invoice line,then quantity*unit_price ='gross_value' def product_id_change(self, cr, uid, ids, product,uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None): ean_val=self.pool.get('product.product').browse(cr,uid,product) #ean_val=self.pool.get('product.product').read(cr,uid,ids,['ean13'],context=context) print "###############################ean_val",ean_val #print "###############################eanval##########",ean_val.ean13.id if context is None: context = {} company_id = company_id if company_id != None else context.get('company_id',False) context = dict(context) context.update({'company_id': company_id, 'force_company': company_id}) if not partner_id: raise osv.except_osv(_('No Partner Defined!'),_("You must first select a partner!") ) if not product: if type in ('in_invoice', 'in_refund'): return {'value': {}, 'domain':{'product_uom':[]}} else: return {'value': {'price_unit': 0.0}, 'domain':{'product_uom':[]}} part = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) fpos_obj = self.pool.get('account.fiscal.position') fpos = fposition_id and fpos_obj.browse(cr, uid, fposition_id, context=context) or False if part.lang: context.update({'lang': part.lang}) result = {} res = self.pool.get('product.product').browse(cr, uid, product, context=context) if type in ('out_invoice','out_refund'): a = res.property_account_income.id if not a: a = res.categ_id.property_account_income_categ.id else: a = res.property_account_expense.id if not a: a = res.categ_id.property_account_expense_categ.id a = fpos_obj.map_account(cr, uid, fpos, a) if a: result['account_id'] = a if type in ('out_invoice', 'out_refund'): taxes = res.taxes_id and res.taxes_id or (a and self.pool.get('account.account').browse(cr, uid, a, context=context).tax_ids or False) else: taxes = res.supplier_taxes_id and res.supplier_taxes_id or (a and self.pool.get('account.account').browse(cr, uid, a, context=context).tax_ids or False) tax_id = fpos_obj.map_tax(cr, uid, fpos, taxes) if type in ('in_invoice', 'in_refund'): result.update( {'price_unit': price_unit or res.standard_price,'invoice_line_tax_id': tax_id} ) else: result.update({'price_unit': res.list_price, 'invoice_line_tax_id': tax_id,'ean_code':ean_val.ean13,'rack_id':ean_val.loc_rack}) result['name'] = res.partner_ref result['uos_id'] = uom_id or res.uom_id.id if res.description: result['name'] += '\n'+res.description domain = {'uos_id':[('category_id','=',res.uom_id.category_id.id)]} res_final = {'value':result, 'domain':domain} if not company_id or not currency_id: return res_final company = self.pool.get('res.company').browse(cr, uid, company_id, context=context) currency = self.pool.get('res.currency').browse(cr, uid, currency_id, context=context) if company.currency_id.id != currency.id: if type in ('in_invoice', 'in_refund'): res_final['value']['price_unit'] = res.standard_price new_price = res_final['value']['price_unit'] * currency.rate res_final['value']['price_unit'] = new_price if result['uos_id'] and result['uos_id'] != res.uom_id.id: selected_uom = self.pool.get('product.uom').browse(cr, uid, result['uos_id'], context=context) new_price = self.pool.get('product.uom')._compute_price(cr, uid, res.uom_id.id, res_final['value']['price_unit'], result['uos_id']) res_final['value']['price_unit'] = new_price return res_final account_invoice_line() 2).xml---------------------------- task viewaccount.invoiceform11 <xpath expr="//page[@string='Invoice Lines']/field[@name='invoice_line']/tree[@string='Invoice Lines']/field[@name='name']" position="after">

Odoo
on 5/27/14, 1:49 AM
0
NSC
On 5/23/14, 6:22 AM

This is interesting to me, too. What I do not understand, is how you inserted calculated value to this new field... Calculation is only commented inside your code... Shouldn' t you use a function field for this (fields.function(...) or similar)? Would be nice if you posted your complete code, because this may be interesting for many many people... Regarding invoicing - what is net price from customer's view? - Quite uninteresting - for customers, gross price counts...

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

2 follower(s)

Stats

Asked: 5/19/14, 2:20 AM
Seen: 2257 times
Last updated: 3/16/15, 8:10 AM