OpenERP: Cosas sueltas

Cambiar la cantidad de registros que se ven en los listados (vistas tree):

Pues creo que nadie se ha dado cuenta pero puedes cambiar la catidad de registros que muestra el paginador que esta en la parte de arriba de los listados (vistas tree) pues es muy facil solo dale doble click en donde dice “80-260” y aparece un combo para que puedas elegir la cantidad de registros que quieres mostrar, existen varias opciones como 80 (por defecto), 200, 500, Ilimitado (en cuanto a los numeros no los ruerdo exactamente peron son algo parecido), ahora si te preguntas y como hago para que salga 10 por ejemplo pues muy facil vente al modulo “web” en addons y edita el javascript que esta en: static/src/js/view_list.js y busca la palabra “Unlimited” hasta que encuentres esto:

var $select = $(‘<select>’)
.appendTo($this.empty())
.click(function (e) {e.stopPropagation();})
.append(‘<option value=”80″>80</option>’ +
‘<option value=”200″>200</option>’ +
‘<option value=”500″>500</option>’ +
‘<option value=”2000″>2000</option>’ +
‘<option value=”NaN”>’ + _t(“Unlimited”) + ‘</option>’)
.change(function () {
var val = parseInt($select.val(), 10);
self._limit = (isNaN(val) ? null : val);
self.page = 0;
self.reload_content();
}).blur(function() {
$(this).trigger(‘change’);
})

y le dicionas una linea mas para que quede como esto:

var $select = $(‘<select>’)
.appendTo($this.empty())
.click(function (e) {e.stopPropagation();})
.append(‘<option value=”80″>80</option>’ +
‘<option value=”10″>10</option>’ +
‘<option value=”200″>200</option>’ +
‘<option value=”500″>500</option>’ +
‘<option value=”2000″>2000</option>’ +
‘<option value=”NaN”>’ + _t(“Unlimited”) + ‘</option>’)
.change(function () {
var val = parseInt($select.val(), 10);
self._limit = (isNaN(val) ? null : val);
self.page = 0;
self.reload_content();
}).blur(function() {
$(this).trigger(‘change’);
})

Pulsa F5 y ahora cuando des dobleclick en el paginador veras que ahora puedes paginar de 10 en 10. SI ya se eso es meterse con los modulos basicos y no es recomendable pero funciona, ya buscare la forma de hacerlo desde programacion de modulos.

Hacer mas rapido el actualizar modulos desde la interface:

Pues a personas como yo que toca personalizar o crear modulos siempre me ha sido un martirio hacer esto pues siempre cambias algo en los módulos y tienes que reinicir el servicio y luego ir a la interface, dale en configuracion y luego a modulos instalado, buscar tu modulo y decirle “Update”, venga si tengo que hacer esto por cada vez que modifico un modulo mientras lo estoy creando pues me mero de hacerlo asi que he ideado una maera que ahorra la busqueda, cuando ya tengo el moduuulo ubicado osea puse en el buscador la palabra que identifa el modulos, digamos que mi modulo se llama jackdaniels_persolalizacion pues le pongo “jack”, beno me muestra todos los modulos que tengan la pabra jack, pues alli voy al menu de la busqueda (ese con el que filtras los registros) y le pobo adicionar al dashboard, asi a la prosima solo voy a informes y me sale ya esa opcion.

COmo nota agregada, si vaz a modificar los elementos como los xml para las vistas, menus, actios y demas si tienes que actualizar el modulo pero si lo que haz modificado es una funcion o metodo y no agregastes campos con solo reinicar el servicio es suficiente no tienes que actualizar el modulo.

Que campo devuelve una clase por defecto:

OpenErp (el framework) esta diseñado para buscar un campo llamado “name” para mostralo por defecto, asi cuando creas una clase sin ese campo por defecto te muestra el ID de la tabla (que como sabemos es un autonumerico para la gente de SQLSERVER o sequencia para los de postgresql) asi que es beno tener un campo llamado “name” pero si no queremos tenerlo pues vamos usamos el atributo _rac_name=’nombredelcampo/columnaamostrar’, esto es importante ya que se usa por defecto en los campos referenciados como many2one o en la parte superior cuando editas un registro.

Ejecutar consultas directamente a la base de datos:

Si se han fijado siempre y por siempre en todas las funcioanes del orm y similares se incluye el parametro cr (database cursor) pues con ese puedes ejecutar consultas directamente a la BD, de esta manera:

def mifuncion(self,cr,uid, ids):
cr.execute(‘select * from res_partner’)
clientes = cr.fetchall

pues con esto estoy recibiendo una coleccion de todos los registros que esten en la tabla res_partners que son clientes, proveedores y demas en OpenERP, ahora iterar sobre ellos pues muy facil:

for registro in clientes:
id = registro[0]

Pues la ejecucion de la consulta SQL te va a devolver un array, aqui estas fuera del ORM asi que no son objetos sino elemtos y siempre el primer elemnto es el ID, con eso podemos hacer que el ORM nos mande un registro con esto:

oCliente = self.pool.get(‘res.partner’).browse(cr, uid, id, context=context)

el objeto oCliente ahora contiene los datos del cliente identificado con ese ID que obtuvimos al ejecutar nuestro sql de alli en adelante podemos usarlo como objeto:

oCliente.id

o si fuese esto:

oVenta=self.pool.get(‘sale.order’).browse(cr, uid, id, context=context)

podriamos usar los valores de la clase orden de venta asi:

oVenta.partner_id.name, asi tendria el nombre del cliente.

Acerca de

Antes que nada voy a dejar en claro algo, en este blog escribo como se me place, asi que no busquen errores de ortografia o de redaccion que los van a encontrar a montones y tampoco me critiquen o me digan nada sobre ellos pues no tengo intencion alguna de cambiarlos, lo que escribo lo dejo asi y no lo corrijo,claro esta a menos que sean lineas de codigo. Jorge Prado Anci, profesional en desarrollo de aplicaciones, en especial las dirigidas a bases de datos. He trabajado con VFP en casi todas sus versiones, se algo de Java (que no me gusta, es eso solo no me gusta, es bueno pero no me gusta), lo suficiente de PHP como para tener mi propio CMS(es que sigue sin gustarme por la capacidad de desorden que te permite este “lenguaje”), VB lo conoci y lo deteste tanto que lo olvide al punto de no querer adoptar ni por obligacion a su reemplazante VB .NET (por lo mismo de Java) y si C# este si me encanta y aun que conozco bastante bien el lenguaje, la verdad es que me falta mucho del Framework (del 100% estare en un 65%). Soy un apasionado por el orden (en los proyectos de desarrollo), de la programacion en capas (de MVC conozco pero no he aplicado mucho), los estandares y las condenadas pruebas unitaria. Venga creo que ya con esto fue suficiente.

Tagged with: , , , ,
Publicado en OpenERP
10 comments on “OpenERP: Cosas sueltas
  1. […] del 2013: Incié el ultim mes del año hablando sobre OpenERP pero sobre pequeños trucos y cosas diversas ya todo pensado en el desarrollo de módulos para esta herramienta, luego le […]

  2. Fernando dice:

    hola, gracias a tus tutoriales he conseguido muchos avances en mi proyecto fin de carrera.

    Quería saber si me podias decir como crear una lista, una lista de personas por ejemplo en la que poner el nombre y el teléfono. Por lo que he leído se hace con una one2many list, pero no tengo ni idea de como programar eso….

    Lo único que se me ha ocurrido es poner 15 veces dos campos, uno de “nombre” y otro de “teléfono” y si tuviera 16 pues iría jodido…

    ya sé que para nombres y telefonos hay otros módulos, pero sería un apartado dentro de otro propio.

    Muchas gracias

    • xmeele dice:

      Veamos si lo que quieres es tener algo como una lista digamos “Listas” y que esta haga referencia a muchas personas, puedes crear una clase que tenga dos campos uno para el nombre de la lista y un campo one2many y otra clase que tenga tus dos campos nombre y telefono y la llamaria “personas” pero ahora OpenERP necesita saber contra que campo va enlazar estas dos tablas (todas las clase son tablas), pues bien le agregas a la segunda tabla un campo many2one que referencia a tu tabla listas y punto, veamos si me sale bien aqui:
      class listas_lista(osv.osv):
      _name=”listas.lista”
      _columns={
      ‘name’:fields.char(‘Nombre de lista’,size=200),
      ‘personas_id’:fields.one2many(‘listas.persona’,’lista_id’,’Personas en la lista’),
      }
      listas_lista()
      class listas_personas(osv.osv):
      _name=”listas.persona”
      _columns={
      ‘name’:fields.char(‘Nombre’,size=200),
      ‘telefono’:fields.char(‘Telefono’,size=200),
      ‘lista_id’:fields.many2one(‘listas.lista’,’Ubicado en la lista’),
      }
      listas_persona()
      COn eso ya tienes, ahora para mostrar en la interface en el form puedes crear un tree que haga referencia a la clase listas.lista y un form a la misma clase, no puedo escribir por algún motivo código en xml aqui pero puedes darle una mirada a como define openerp en el modulo sale, las sale.order, alli debe de tener un campo one2many (order_line si no me equivoco) y si vez en el archivo xml sale_view.xml la defincion de view_order_form y vez como define el campo order_line, es como debes de definir tu campo one2many.

  3. Pedro pablo dice:

    hola ,quisiera saber como puedo desde javascript llamar a un modelo de openerp y obtener todos los campos de este modelo

  4. vici0us dice:

    Hola amigo, la verdad si que es una p****ada tener que actualizar los modulos, hay una manera mas simple si usas linux, es un programita que se llama erpeek … es un cliente en modo texto solamente, usando el protocolo XML-RPC para conectarte
    erpeek -u admin -d miBaseDeDatos –server=http://ipdelservidor.org:8069
    para instalar un modulo
    client.install(‘mimodulo’)
    y para actualizar
    client.upgrade(‘mimodulo’)

    y listo el pato…

  5. Yunier Cobas Chaveco dice:

    Hola mi nobre es Yunier Cobas Chaveco y quiciera saber como se hacer dashborad para algun modulo que yo crea

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevos mensajes por correo.

Únete a otros 441 seguidores

Blog Stats
  • 304,137 hits
A %d blogueros les gusta esto: