Programacion Interactiva

Descubre una Nueva y Poderosa Herramienta.

FrameWork de Nueva Generacion

Acceso a tu Informacion desde cualquier Dispositivo con Navegador.

Enfoque en el Backend

Frontend de forma facil con Odoo y XML.

Creacion de Verticales

Creacion de nuevas Verticales Conquistando nuevos Mercados.

Tu marca aqui mismo

Llega a miles de personas.

Publicidad

Mostrando las entradas con la etiqueta development openerp. Mostrar todas las entradas
Mostrando las entradas con la etiqueta development openerp. Mostrar todas las entradas

viernes, 24 de enero de 2014

Redes Sociales en nuestros Modelos en OpenERP 7.0 y Odoo (OpenERP 8.0)

Agregar Redes Sociales en OpenERP 7.0 y Odoo (OpenERP 8.0)



    Desde la Versión 7.0 de OpenERP podemos observar en el pie de cualquier formulario la parte de Redes Sociales que de alguna manera de da un Plus a cualquier modelo de datos, para que podamos tener esa aplicación al momento de crear nuestros módulos en OpenERP tendrĆ­amos que agregar en nuestras clases el código siguiente:

1.- En la declaracion de nuestra Clase OSV tendriamos que agregar la linea:

    _inherit = ['mail.thread', 'ir.needaction_mixin'] ### Redes Sociales
  

lunes, 20 de enero de 2014

HERENCIA DE VISTAS Odoo (OPENERP)

HERENCIA DE VISTAS.

Igual que podemos heredar objetos, tambiƩn podemos heredar vistas de la siguiente manera:
<?xml version="1.0" encoding="UTF­8"?>
<openerp>
   <data>
<!­­--

id='res_partner_xxxxx_form_view_inh'
 
Este es el nuevo identificador que identifica a la vista que estamos  definiendo. Tener en cuenta que termina en 'form_view_inh', esto lo hacemos por norma, para identificar que esta vista, es una vista que
hereda De otra.
'name': Mismo nombre que el ID pero separado por '.'
'res.partner': Objeto al que pertenece la vista de la cuĆ”l estamos  heredando.
'inherid_id': AquĆ­ le indicamos el ID de la vista que estamos heredando. La '<carpetapadre> es la primera carpeta que se encuentra  en ADDONS, en la cuĆ”l se encuentra el fichero xml, en el que estĆ”
definida la vista.
-->

<record model="ir.ui.view" id="res_partner_form_view_inh">
      <field name="name">res.partner.form.view.inh</field>
      <field name="model">res.partner</field>
      <field name="type">form</field>
      <field name="inherit_id" ref="carpetapadre.idVistaPadre" />
      <field name="arch" type="xml">
 
         <field name="campoareemplazar" position="after">
 
                  <field name="nuevocampo" />
         </field>
         <notebook position="inside">
               <page string="Literal para la nueva pestaƱa">
                  <group col="2" colspan="2">
                        <separator string="Literal del separador" colspan="2"/>
                        <field name="nuevocampo2"/>
                        <field name="nuevocampo3" nolabel="1"/>
                  </group>
               </page>
         </notebook>
   </field>
   </record>
   </data>
</openerp>

Atributos en Formularios de Odoo (OPENERP)

ATRIBUTOS DEL ELEMENTO DE FORMULARIO <FIELD>


attrs (condiciones de solo lectura, invisible, y requerido).

Cuando definimos un atributo 'attr' a un campo <field>, estamos definiendo una condición.

          Las condiciones que podemos definir es que el campo sea solo de lectura, requerido, o invisible.
Supongamos que tenemos definido en nuestro archivo de Phyton una clase con los siguientes campos:

'historial': fields.boolean('Historial', help="Marque casilla si historial"),
'historial_desc': fields.char('Description', size=64),

Y en la vista, esta es la definición de los campos:

<field name="historial"/>
<field name="historial_desc" attrs="{'invisible': [('historial, '=', False)]}"/>

El campo 'historial_desc' serĆ” invisible si el campo 'historial' (booleano) es igual a 'False'.

on_change (trigger que ejecuta una función cuando el valor del campo cambia).


    Cuando el valor del 'field' cambia, automĆ”ticamente ejecuta la función que definamos en el atributo 'onchange'. La funcion 'onchange' SIEMPRE DEVUELVE EL PARAMETRO 'value'.

Ejemplo:

<field name="historial"/>
<field name="historial_des" on_change="onchange_historial_des(historial_desc)"     attrs="{'invisible': [('historial', '=', False)]}"/>

Cuando el valor del campo 'onchange_historial_desc'. 'historial_desc' cambie, ejecutaremos la función :

def onchange_historial_desc(self, cr, uid, ids, historial_desc, context={}):
    res = {}
    for xxxx in self.browse(cr, uid, ids):
            res = {
                'historial_desc': (xxxx.historial_desc or '') + _('\n') +  (historial_desc or ''),
            }
        return {'value': res}

    En esta primera opción, no estoy haciendo caso al parĆ”metro 'historial_des', ya que en este campo no viene un ID, sino un texto. Por lo tanto, hago referencia al parĆ”metro de entrada 'ids'.

Opción 2 de la función:

def onchange_historial_des(self, cr, uid, ids, historial_id, context={}):
    res = {}
    if historial_id:
       xx_obj = self.pool.get('xxxx')
       xx = xxxx_obj.browse(cr, uid, historial_id)
       res = {
                'historial_des': (xxxx.historial_desc or '') + _('\n') +  (historial_des or ''),
          }
       return {'value': res

Como Funciona la Herencia en Odoo (OpenERP)


HERENCIA DE CLASES Y METODOS Odoo (OPENERP)

_inherit (Herencia de objetos).

    Al hacer referencia a este atributo, hacemos referencia a la HERENCIA. Un hijo hereda
todos los campos, y funciones de su padre.

Ejemplo: 

    Como todos sabemos, existe una clase que se llama “res.partner”. En el siguiente ejemplo vamos a crear una nueva clase que herede de “res.partner”. A esta nueva clase le aƱadiremos 2 Campos uno para Identificar que elementos de "res.partner" (Clientes/Proveedores) tienen facebook y cual seria el facebook de dichos registros:

 Esta serĆ­a la declaración de la nueva clase:

class res_partner(osv.osv):

<!--­­ Aqui indico el atributo 'name' del Objeto Padre ­­-->

_inherit ='res.partner'
     
<!--­­ Nuevo campo que voy a aƱadir al Objeto res.partner ­­-->
   
_columns= {
    'facebook': fields.boolean('Facebook'),
    'facebook_description': fields.boolean('URL Facebook'),
}
 
res_partner()

 Heredar funciones, y llamar a funciones padre con SUPER.

     A veces nos puede interesar heredar una función de una clase, para poder modificarla. Vamos a poner como ejemplo la función 'onchange_xxxxx' que estĆ” definida en la clase 'mi.clase'.

       Esta función se ejecuta cada vez que cambiemos el id de “mi.clase”, asĆ­ que imaginemos que queremos cambiar el funcionamiento de dicha función. Teniendo en cuenta que en mi.clase existe la función onchange_xxxxx(self, cr, uid, ids, part), vamos a ver el siguiente ejemplo:

class mi_clase(osv.osv):

    <!--­­ HEREDAMOS DE LA CLASE ­­-->

    _inherit = 'mi.clase'

    <!--­­ DECLARAMOS OTRA VEZ LA FUNCIƓN QUE VAMOS A MODIFICAR --­­>
 
    def onchange_xxxxx(self, cr, uid, ids, part):
        value = {}
        miclase_obj = self.pool.get('mi.clase')

  <!­­-- LLAMAMOS A LA FUNCION PADRE ­­-->

  <!­­-- super(mi_clase,self): De esta manera llamamos a la función padre.   Hay que pasarle 2 parĆ”metro: la clase padre, y 'self' ­­ -->

        res = super(mi_clase, self).onchange_xxxxx(cr, uid, ids, part)
        value = res['value']
        if part:
            miclase = miclase_obj.browse(cr, uid, part)

<!--­­  Modificamos 'value', si en value existe 'client_order_ref'  modifica su valor, si no existe, lo crea  dentro de value  -->
            value.update({
               'client_order_ref': miclase.name,
            })
  <!­­ La función 'onchange' siempre devuelve un value ­­>

return {'value': value}
 
sale_order()