Ejemplo para crear consecutivos en OpenERP (Odoo)

OpenERP posee una clase destinada para crear variables consecutivas que indican el correlativo de algún registro. El siguiente es un ejemplo sencillo para generar un número consecutivo de un registro específico.

Antes que nada, cuando se crea una base de datos nueva, sus tablas registran el número incremental a 1 y por defecto el primer número de registro será 1 en el campo id, dicho valor puede ser usado para tomar en cuenta el nuevo registro por defecto que será incrementado.

Quizás no es un script un tanto seguro, es muy sencillo pero que puede ayudar en ciertos casos.

En el archivo .py donde generamos la clase para crear el campo incremental y su respectivo método será parecido al siguiente:

# -*- coding: utf-8 -*-

from openerp.osv import fields, osv
from datetime import *

class estudiante_estudiante(osv.Model):

    _name = 'estudiante.estudiante'
    _description = 'Tabla de estudiantes'
    
    def _get_consecutivo_num(self, cr, uid, context=None):
        last_id = 0
        get_count = self.search(cr, uid, [(1, '=', 1)], order='id')        
        if get_count:
            for item in self.browse(cr, uid, get_count, context):
                sec = item.consecutivo.split('-')
                sec_num = int(sec[1]) + 1
                last_id = sec_num
        else:
            last_id = 1
        prefijo = 'EST-'
        serie = last_id
        consecutivo = prefijo + str(serie).rjust(5, '0')
        return consecutivo    
    
    _columns = {
        'name': fields.char('Nombre', size=250),
        'descripcion': fields.char('Descripcion', size=250),
        'consecutivo': fields.char('Numero de registro', size=250)
    }
    
    _defaults = {
        'consecutivo': _get_consecutivo_num
    }

En el método _get_consecutivo_num, se genera el número que será asignado al próximo registro, el número irá asociado a un prefijo en caracteres y es por eso que se deja el tipo del campo como char, la variable get_count simplemente obtiene un listado de todos los registros ordenados por id, que se recorre desde el for con el método self.browse().

El número consecutivo llevará por defecto 4 caracteres y 5 dígitos, por lo que se utilizan algunos métodos de python para ajustar dicha cantidad de dígitos, la función es rjust(5, ‘0’), donde el 5 indica la cantidad de dígitos que debe tener la cifra y 0 indica los complementos de dicha cifra, que se vería algo parecido a: EST-00001.

A esta clase junto con todo lo anterior, se le puede declarar un constraint al campo consecutivo, los constraint permiten que no se repitan consecutivos repetidos, y se declararía después de _defaults de la siguiente manera:

_sql_constraints = [
    ('consecutivo_uniq', 'unique(consecutivo)', 'Este campo debe ser unico')
]
Advertisements

About felixurbina

Humano con todos los defectos y virtudes que vienen de fábrica.
This entry was posted in Odoo, OpenERP. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s