Publicidad

lunes, 21 de mayo de 2018

Creación de Campos con Precisión Decimal Dinamica en Odoo

Creación de Campos con Decimales Dinamicos




Un aspecto fundamental en la parte administrativa es la contable donde la presición decimal debe ser muy controlada, tanto en la generación de reportes como en la creación de algunos formularios.

Dentro de las muchas bondades que siempre describo en mis articulos, Odoo cuenta con una presición dinamica, esta precisón puede ser moderada por el usuario final (cliente), esto le ayudara a aumentar o disminuir el numero de decimales en Odoo de acuerdo a sus necesidades y sin tener que programar o editar el codigo fuente.

La precisión decimal la encontramos en el Menu Configuración --> Tenico --> Estructura de la Base de Datos --> Presición Decimal.

El primer paso es crear tu precisión Decimal mediante una vista XML.

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
   <data>
  <!--  Mi presicion decimal-->

  <record model="decimal.precision" id="precision_discounts">
    <field name="name">Discount</field>
    <field name="digits">6</field>
  </record>  

   </data>
</odoo>

Al instalar nuestro modulo o actualizarlo, nos creara el registro correspondiente al XML:


El valor digits es el numero de decimales que tendra el campo que lo utilice como su presición decimal.

El paso final es asignar esta presición en la creación del campo en una clase Odoo.

# -*- coding: utf-8 -*-
from openerp.exceptions import UserError
from openerp import api, fields, models, _, tools
import openerp.addons.decimal_precision as dp

class Accountinvoice(models.Model):
    _inherit = 'account.invoice'
    _name = 'account.invoice'
    
    invoice_discount_amount = fields.Float(digits=dp.get_precision('Discount'), 
                                string='Descuento Total en Monto')


En el ejemplo anterior herede facturas y cree mi campo llamado Descuento Total con 6 Decimales en su parte flotante, el campo se visualiza de la siguiente manera en el Sistema:

Si modificamos la presición decimal a 4.


Veriamos el campo actualizado y los registros anteriores redondeados al nuevo numero de decimales.

Una presición puede ser reutilzada muchas veces no es necesario crear una por cada campo a menos que el proceso lo requiera.

Espero que les ayude esta información y no se olviden dejar sus comentarios.




5 comentarios:

  1. Estoy empezando sumergirme en este mundo de Phyton y Odoo; solo tengo conocimiento basico de programacion html5 y php.

    Lo que no logro desde la configuracion tecnica -> precision decimal es: fijar entero para stock producto de inventario; pero que en Lista de Materiales acepte 4 dígitos.

    Con el ejemplo que compartes serias tan amable de guiarme es este tema paso a paso? que sea paso a paso... Mil Gracias.

    ResponderEliminar
  2. Hola buenas noches soy nuevo en Odoo mi problema es el siguiente cree un campo personalizado que calcula el volumen de una pieza por medio de tres campos x_espesor, x_largo,x_ancho la operación matemática del calculo esta hecha pero mi problema es que el campo en float y solo me pone 2 decimales y necesito 8 decimales, ya cree en la precisión decimal una variable llamada Volumen y le coloque como valor el numero 8 pero hasta aquí llego porque no se como asignarle al campo x_volumenpza esa precisión decimal. le agradecería si me pueden ayudar al respecto. Muchas Gracias.

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Eduardo.
    Como veras tuve un caso similar, verifique los registro de la base de datos y pude observar que efectivamente se guardaban con las precisiones que deseaba: sin embargo en la vistas y reportes me mostraba solo con 2 digitos. Para mis propositos lo que hice fue editar los archivos xml algo asi: Donde 14 puede ser cualquier numero de caracteres decimales y 3 el numero de digitos a mostrar. Ojala te sea util

    ResponderEliminar
  5. Verifico que se el codigo se borra aqui no se porque, escribeme un correo a edmer_184@hotmail.com

    ResponderEliminar