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

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.




jueves, 17 de mayo de 2018

Duplicar Base de Datos en 5 Minutos Odoo y PostgreSQL

Duplicar una base de datos a nivel directorio Fisico PostgreSQL


Todas las Bases de Datos creadas en Postgres son guardadas en archivos y directorios del Sistema Operativo, utilizando un metodo sencillo podemos duplicar una Base de Datos a nivel fisico.

1. Creamos nuestra Base de Datos copia

Creamos nuestra Base de Datos Copia por medio de terminal.

sudo su postgres

createdb BASE_2 -O odoo10

2. Verificamos el Nombre del Directorio

El ID origen llamado OID en el template de postgres, es el nombre del directorio que contiene tu Base de Datos, es necesario conocerlo para poder duplicar nuestra Base de Datos.

Obtenemos el OID de la Base Origen

sudo su postgres

psql template1

select datname,oid from pg_database where datname like 'BASE_ORIGEN';

Obtenemos el OID de la Base Destino

sudo su postgres

psql template1

select datname,oid from pg_database where datname like 'BASE_2';

3. Nos colocamos en el directorio de Postgres

En este ejemplo estoy utilizando PostgreSQL 9.6 y el ejemplo que mostrare es la ubicacion de mis bases de datos.

cd /var/lib/postgresql/9.6/main/base


4. Duplicamos el Directorio de la Base Origen

Es Importante que este proceso lo hagamos con el usuario postgres del Sistema Operativo.

El primer Base es Eliminar el Directorio de nuestra Base 2

rm -r OID_BASE_2


Como paso final duplicamos el directorio de la Base Origen a la Base 2 

cp OID_ORIGEN OID_BASE_2


Listo, con estos sencillos pasos obtenemos una copia de nuestra Base de Datos de una forma rapida y sin esperar.

Nota Importante: Es importante tambien, duplicar el directorio de archivos binarios (data_dir) de tu base de datos origen con el nombre de tu base de datos destino.

miércoles, 16 de mayo de 2018

Creación Metodos Automatizados en Odoo (Cron) v 11

Creación de nuestro primer Metodo Planificado


Una caracteristica dentro de la API de Odoo es el uso de un Cron, el cual te permite generar una planificacion en la ejecución de un Metodo, de forma dinamica, diaria, semanal, mensual, cada X periodo de tiempo, etc.

Este tipo de Metodos los podemos encontrar en el apartado de Planificacion en la Configuración Tecnica.


Lo primero que debemos hacer es  decidir en que Clase de Odoo pondremos nuestro metodo, por ejemplo creare un metodo que valide el vencimiento de las facturas y envie un correo al administrador con los Folios de estas.

Heredamos Facturas

class AccountInvoice(models.Model):
    _name = 'account.invoice'
    _inherit ='account.invoice'

Creamos nuestro Metodo

class AccountInvoice(models.Model):
    _name = 'account.invoice'
    _inherit ='account.invoice'

    @api.model
    def revision_due_invoices(self, id=None):
        print "### Revisando las Facturas Vencidas"

Creamos el Registro de Automatización (Objedo ir.cron)

Para la creación utilizaremos un registro en nuestro XML

<data noupdate="1">

    <record forcecreate="True" id="revision_due_invoices_v1" model="ir.cron">
           <field name="name">Revision de Facturas Vencidas</field>
           <field eval="True" name="active" />
           <field name="user_id" ref="base.user_root" />
           <field name="interval_number">24</field>
           <field name="interval_type">hours</field>
           <field name="numbercall">-1</field>
           <field ref="model_account_invoice" name="model_id" />
            <field name="state">code</field>
           <field name="code">model.revision_due_invoices()</field>
           <field eval="False" name="doall"/>
           <field name="function">True</field>

        </record>


</data>

Podemos Observar que la Ejecucion Sera Cada 24 Horas con Ciclos Ilimitados.



Para la revisión de las Facturas Vencidas utilizaremos el campo llamado due_invoice:

    @api.model
    def revision_due_invoices(self, id=None):
        print "### Revisando las Facturas Vencidas"
        date_act = fields.Datetime.now()
        invoice_due_ids = self.search([('due_invoice','<=',date_act),
        ('state','=','open')])
        if invoice_due_ids:
            # Folios de Facturas Vencidas
            ref_list_due = [x.name for x in invoice_due_ids]


El Metodo completo quedaria como el siguiente:

    @api.model
    def revision_due_invoices(self, id=None):
        print "### Revisando las Facturas Vencidas"
        date_act = fields.Datetime.now()
        invoice_due_ids = self.search([('due_invoice','<=',date_act),
        ('state','=','open')])
        if invoice_due_ids:
            # Folios de Facturas Vencidas
            ref_list_due = [x.number for x in invoice_due_ids]
            from odoo import SUPERUSER_ID
            user_admin = self.env.['res.user'].browse(SUPERUSER_ID)
            my_user = self.env.user
            mail_from = my_user.partner_id.email
            mail_to = user_admin.partner_id.email

            mail_vals = {
                    'subject': 'Notificacion de Facturas Vencidas %s' % date_act,
                    'author_id': my_user.id,
                    'email_from': mail_from,
                    'email_to': mail_to,
                    'message_type':'email',
                    'body_html': 'En la Fecha %s se encontraron las \
                    siguientes Facturas Vencidas %s' % (date_act, str(ref_list_due)) ,
                        }
            mail_id = self.env.['mail.mail'].create(mail_vals)
            mail_id.send()


No se olviden dejar sus comentarios.




miércoles, 9 de mayo de 2018

Odoo Complemento Detallista

Complemento Detallista para Odoo

    Actualmente contamos con el complemento de Detallista para Odoo 9, 10 y Odoo 11 tanto Enterprise como versiones Comunitarias, la configuración es muy sencilla y esta relacionada directamente con la información previamente capturada dentro de la Facturación Electronica.

Configuración Producto:


Configuración Cliente:



Captura del Comprobante (Factura):


Resultado XML Timbrado:





PDF Timbrado:


Para Cualquier Información: info@argil.mx o german.ponce@argil.mx

Odoo Complemento Comercio Exterior

Complemento de Comercio Exterior para Odoo



    Actualmente contamos con el complemento de Comercio exterior para Odoo 9, 10 y Odoo 11 tanto Enterprise como versiones Comunitarias, la configuración es muy sencilla y esta relacionada directamente con la información previamente capturada dentro de la Facturación Electronica.

Configuración Producto:


Configuración Cliente:



Captura del Comprobante (Factura):


Resultado XML Timbrado:





PDF Timbrado:


Para Cualquier Información: info@argil.mx o german.ponce@argil.mx