Ir al contenido
Odoo Menú
  • Identificarse
  • Pruébalo gratis
  • Aplicaciones
    Finanzas
    • Contabilidad
    • Facturación
    • Gastos
    • Hoja de cálculo (BI)
    • Documentos
    • Firma electrónica
    Ventas
    • CRM
    • Ventas
    • TPV para tiendas
    • TPV para restaurantes
    • Suscripciones
    • Alquiler
    Sitios web
    • Creador de sitios web
    • Comercio electrónico
    • Blog
    • Foro
    • Chat en directo
    • eLearning
    Cadena de suministro
    • Inventario
    • Fabricación
    • PLM
    • Compra
    • Mantenimiento
    • Calidad
    Recursos Humanos
    • Empleados
    • Reclutamiento
    • Ausencias
    • Evaluación
    • Referencias
    • Flota
    Marketing
    • Marketing social
    • Marketing por correo electrónico
    • Marketing por SMS
    • Eventos
    • Automatización de marketing
    • Encuestas
    Servicios
    • Proyecto
    • Partes de horas
    • Servicio de campo
    • Servicio de asistencia
    • Planificación
    • Citas
    Productividad
    • Conversaciones
    • Aprobaciones
    • IoT
    • VoIP
    • Información
    • WhatsApp
    Aplicaciones de terceros Studio de Odoo Plataforma de Odoo Cloud
  • Industrias
    Comercio al por menor
    • Librería
    • Tienda de ropa
    • Tienda de muebles
    • Tienda de ultramarinos
    • Ferretería
    • Juguetería
    Food & Hospitality
    • Bar y taberna
    • Restaurante
    • Comida rápida
    • Guest House
    • Distribuidor de bebidas
    • Hotel
    Real Estate
    • Real Estate Agency
    • Estudio de arquitectura
    • Construcción
    • Gestión inmobiliaria
    • Jardinería
    • Asociación de propietarios
    Consulting
    • Accounting Firm
    • Partner de Odoo
    • Agencia de marketing
    • Bufete de abogados
    • Adquisición de talentos
    • Auditorías y certificaciones
    Fabricación
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Regalos de empresas
    Salud y bienestar
    • Club deportivo
    • Óptica
    • Gimnasio
    • Terapeutas
    • Farmacia
    • Peluquería
    Trades
    • Handyman
    • Hardware y asistencia informática
    • Solar Energy Systems
    • Zapatero
    • Servicios de limpieza
    • HVAC Services
    Others
    • Nonprofit Organization
    • Agencia de protección del medio ambiente
    • Alquiler de paneles publicitarios
    • Estudio fotográfico
    • Alquiler de bicicletas
    • Distribuidor de software
    Browse all Industries
  • Comunidad
    Aprender
    • Tutoriales
    • Documentación
    • Certificaciones
    • Formación
    • Blog
    • Podcast
    Potenciar la educación
    • Programa de formación
    • Scale Up! El juego empresarial
    • Visita Odoo
    Obtener el software
    • Descargar
    • Comparar ediciones
    • Versiones
    Colaborar
    • GitHub
    • Foro
    • Eventos
    • Traducciones
    • Convertirse en partner
    • Services for Partners
    • Registrar tu empresa contable
    Obtener servicios
    • Encontrar un partner
    • Encontrar un asesor fiscal
    • Contacta con un experto
    • Servicios de implementación
    • Referencias de clientes
    • Ayuda
    • Actualizaciones
    GitHub YouTube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Solicitar una demostración
  • Precios
  • Ayuda

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Contabilidad
  • Inventario
  • PoS
  • Proyecto
  • MRP
All apps
Debe estar registrado para interactuar con la comunidad.
Todas las publicaciones Personas Insignias
Etiquetas (Ver todo)
odoo accounting v14 pos v15
Acerca de este foro
Debe estar registrado para interactuar con la comunidad.
Todas las publicaciones Personas Insignias
Etiquetas (Ver todo)
odoo accounting v14 pos v15
Acerca de este foro
Ayuda

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

Suscribirse

Reciba una notificación cuando haya actividad en esta publicación

Se marcó esta pregunta
2 Respuestas
8852 Vistas
Avatar
ABU K

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
Avatar
Descartar
Avatar
ABU K
Autor Mejor respuesta

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>

0
Avatar
Descartar
ABU K
Autor

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">

Avatar
NSC
Mejor respuesta

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

0
Avatar
Descartar
¿Le interesa esta conversación? ¡Participe en ella!

Cree una cuenta para poder utilizar funciones exclusivas e interactuar con la comunidad.

Inscribirse
Comunidad
  • Tutoriales
  • Documentación
  • Foro
Código abierto
  • Descargar
  • GitHub
  • Runbot
  • Traducciones
Servicios
  • Alojamiento Odoo.sh
  • Ayuda
  • Actualizar
  • Desarrollos personalizados
  • Educación
  • Encontrar un asesor fiscal
  • Encontrar un partner
  • Convertirse en partner
Sobre nosotros
  • Nuestra empresa
  • Activos de marca
  • Contacta con nosotros
  • Puestos de trabajo
  • Eventos
  • Podcast
  • Blog
  • Clientes
  • Información legal • Privacidad
  • Seguridad
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo es un conjunto de aplicaciones de código abierto que cubren todas las necesidades de tu empresa: CRM, comercio electrónico, contabilidad, inventario, punto de venta, gestión de proyectos, etc.

La propuesta única de valor de Odoo es ser muy fácil de usar y totalmente integrado.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now