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

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

viernes, 20 de abril de 2018

Instalación Odoo 11 con Docker

Instalación de Odoo en un Docker Ubuntu


    Las herramientas de virtualización son una gran ayuda en el mundo de las tecnologias de información, ya que encapsulan los servicios, librerias y herramientas necesarias para la ejecución de programas, aplicaciones, servicios, etc. al mismo tiempo que lo hacen portable e independiente del Sistema Operativo, anterior a docker podiamos encontrar hypervisor como una de las mas conocidas, en la actualidad docker tiene ventajas sobre otras y se ha vuelto una de las mas importantes, en el mundo de Odoo desde la versión 10 y ahora versión 11 es casi un estandar para los desarrolladores, ya que nos permite tener diferentes instancias o proyectos de forma independiente con la posibilidad de poder llevar este contenedor al entorno de Producción de un cliente de forma facil y rapida, homologando la versión de Python, la versión de sus librerias y las aplicaciones.

En Odoo podemos encontrar el Docker oficial desde Github o el repositorio oficial de Docker:
  • https://github.com/odoo/docker
  • https://hub.docker.com/_/odoo/
La versión oficial contiene una serie de instrucciones para poder hacer nuestra instalación y quede lista para ponerse en marcha para nuestros desarrollos o en nuestro Cliente para su uso final.

En este Post quiero enseñar una maner alternativa a la oficial, usando la imagen (docker) de Ubuntu y montando nuestro Contenedor para instalar Odoo, Postgres y las librerias requeridas para la ejecución de Odoo.

1.   Instalación de Docker
Lo mas importante es tener instalado nuestro docker en el Servidor o Maquina donde vamos a trabajar, en mi caso utilizo Ubuntu 17.04 y los pasos para instalador docker son:


Actualizar los Repositorios:

sudo apt-get update


Instalar las librerias necesarias:

 sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

AƱadir el repositorio Docker :

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


sudo apt-key fingerprint 0EBFCD88


sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update


sudo apt-get install docker-ce


Debemos crear una cuenta en la Pagina Oficial https://hub.docker.com/

Como paso final de la instalación debemos hacer un loggin en nuestro Sistema Operativo:

docker login

2.   Descarga de Imagen Ubuntu

En este ejemplo usare Ubuntu 16.04 como mi imagen base para ello ejecuto en terminal

sudo docker pull ubuntu:16.04

Podremos visualizar nuestras Imagenes con el comando:

sudo docker images


3.   Creación de nuestro Contenedor

Crearemos un contenedor con las siguientes caracteristicas:
  • Con el puerto 8069 abierto para acceder desde el anfitrion
  • Con el Puerto 22 abierto
  • Con una Terminal Interactiva
  • Con un Directorio Compartido entre huesped (docker) y anfitrion (SO)

docker run -it -p 22 -p 8069:8069 -v /opt/odoo:/home/odoo --name odoo_11_dev ubuntu:16.04

Es importante indicar la versión de la Imagen descargada para ello al final indicamos ubuntu:16.04
(docker run -it -p 22 -p 8069:8069 -v /opt/odoo:/home/odoo --name odoo_11_dev ubuntu:16.04)

El resultado es una consolta interactiva, en la cual podemos ejecutar comandos.

Si cerramos la terminal el docker seguira corriendo y ya no existe necesidad de ejecutar nuevamente el comando anterior, ahora debemos ejecutar el comando para listar los contenededores activos:

docker ps


Si queremos ver todos los que hemos creado:

docker ps -a

Para poder ingresar al contenedor activo:

docker attach odoo_11_dev

Si no vemos la terminal pasados unos segundos es importante dar un enter mas o dos.

4.   Instalación de Aplicaciones

Una ves que tenemos nuestro Contenedor Ubuntu 16.04, vamos a instalar las aplicaciones y librerias.

Primero debemos hacer un update a los repositorios:

apt-get update

Instalamos Python 3 para Odoo 11:

apt-get install python3 -y

Instalamos Pip 3:

apt-get install python3-pip -y

Instalamos algunas dependencias de Odoo:

apt-get install python3-dev libxml2-dev libxslt1-dev libevent-dev \
libsasl2-dev libldap2-dev libpq-dev libpng12-dev libjpeg-dev \
poppler-utils node-less node-clean-css python3-pypdf2 npm python3-babel \
python3-decorator python3-docutils -y

Creamos un Usuario del Sistema para Gestionar Odoo

useradd -d /home/odoo -s /bin/bash odoo

Cambiamos la contraseƱa del usuario:

passwd odoo

Instalamos Git

apt-get install git

Descargamos Odoo, dentro de la carpeta /opt

cd /opt

git clone https://github.com/odoo/odoo --branch 11.0

Cambiamos los permisos de la carpeta hacia el usuario odoo:

chown odoo.odoo /opt/odoo -R

Instalamos las dependencias de odoo

pip3 install /opt/odoo/requirements.txt -r

pip3 install /opt/odoo/doc/requirements.txt -r

Instalacion de Wkhtmltopdf:

apt-get install wget -y

wget https://nightly.odoo.com/extra/wkhtmltox-0.12.1.2_linux-jessie-amd64.deb

dpkg -i wkhtmltox-0.12.1.2_linux-jessie-amd64.deb

apt-get -f install


Instalamos Postgres:

apt-get install postgresql

Iniciamos Postgres:

service postgresql start

Creamos el usuario de Postgres para Odoo:

su postgres

createuser -s -P -e odoo

ContraseƱa: odoo

Instalamos un Editor de Textos, por ejemplo nano:

apt-get install nano

Cambiamos al usuario odoo:

su odoo

Ejecutamos Odoo y creamos nuestro Archivo de configuración:

python3 /opt/odoo/odoo-bin -c odoo_server.conf -s

Editamos el Archivo de Configuración y modificamos los Parametros de Base de Datos:

nano odoo_server.conf

db_host = localhost
db_password = odoo
db_port = 5432
db_sslmode = prefer
db_template = template1
db_user = odoo


Una ves Editado, guardamos con el Comando Ctrl + O

Volvemos a ejecutar sin el  parametro -s

python3 /opt/odoo/odoo-bin -c odoo_server.conf

Y listo, en nuestro navegador podemos acceder a Odoo:

Ante cualquier error de fuentes podemos consultar:
https://poncesoft.blogspot.mx/2016/05/solucion-al-error-bundle.html



miƩrcoles, 18 de abril de 2018

Lectura Archivos Python 3 y Odoo 11

Lectura de archivos y conversión a base64




La actual migración de Python 2.7 a Python 3 para Odoo 11, fue un gran cambio en el manejo de algunos tipos de datos, por ejemplo en la lectura de un archivo que puede ser una imagen, un csv o un txt nos llega a generar errores ya que nos puede devolver una instancia IO o generarnos algunos errores, para ello me di a la tarea de indagar en el manejo interno de Odoo y el mismo me dio la solución, una pequeña linea capaz de leer cualquier archivo y convertirlo a Base64 para grabarlo en un Campo Binario de nuestra Tabla.

Primero Debemos Importar la libreria base64:

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

import base64



Ahora debemos obtener la ruta de la Imagen o archivo que queremos grabar en nuestra tabla, por ejemplo /tmp/qr_cfdi.png

La lectura de mi archivo y conversión quedaria de la siguiente manera:

f_b64 = base64.b64encode(open('/tmp/qr_cfdi.png','rb').read())


El paso final seria grabarlo en la tabla correspondiente, en mi caso la imagen QR necesito guardarla en la tabla de Facturas (account.invoice).

invoice_br = self.env['account.invoice].browse(ID_FACT)

invoice_br.cfdi_cbb = f_b64

# Utilizando el Metodo Write:

invoice_br.write({'cfdi_cbb':f_b64})



El ejemplo anterior utiliza el metodo browse para poder obtener una instancia de Facturas del registro en el cual quiero grabar la imagen obtenida de otro proceso, el campo cfdi_cbb es un binario de la tabla donde quiero guardar la imagen y el resultado podria observarse como la siguiente imagen:




martes, 27 de marzo de 2018

Reportes Word en Odoo


Generación de reportes en formato Doc/Docx integrado a Odoo




Mas de uno de nosotros hemos tenido la curiosidad o necesidad de Generar reportes en formato Doc(x),  esto es posible gracias a Python y a la gran cantidad de librerias que se crean y existen, en este Post les enseƱare un par de librerias que nos ayudan a generar este tipo de Reportes.


Instalación

Haremos uso de la libreria python-docx alojada en los Repositorios de Python, para ello podemos utilizar la aplicación Pip en Linux o easy_install.

sudo pip install python-docx
o
sudo easy_install install python-docx


Implementación

El primer paso que debemos realizar como cualquier libreria es importarla en nuestra Clase Odoo.

from docx import Document

Creamos una instancia de la libreria y la asignamos a una variable para poder generar nuestro Documento.

report_word = Document()

A partir de nuestra variable instanciada, podemos ir añadiendo información tomada de nuestro recordset o bien para ejemplos, podemos usar información ficticia.

Algunos ejemplos de lo que podemos hacer con la  libreria son:

Agregar un Parrafo


report_word = Document()

paragraph  = report_word.add_paragraph('Hola, este es mi primer parrafo con la libreria docx')


Agregar una cabecera


report_word = Document()

report_word.add_heading('Dream big and start with something small')

Agregar una tabla

report_word = Document()

report_word.add_table(rows=2, cols=2)

Un ejemplo completo seria:

from docx import Document
from docx.shared import Inches

document = Document()

document.add_heading('Document Title', 0)

p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True

document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')

document.add_paragraph(
    'first item in unordered list', style='ListBullet'
)
document.add_paragraph(
    'first item in ordered list', style='ListNumber'
)

document.add_picture('monty-truth.png', width=Inches(1.25))

table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
    row_cells = table.add_row().cells
    row_cells[0].text = str(item.qty)
    row_cells[1].text = str(item.id)
    row_cells[2].text = item.desc

document.add_page_break()

document.save('demo.docx')

Si quieren conocer mas acerca de la libreria:

https://python-docx.readthedocs.io/en/latest/

martes, 31 de octubre de 2017

Portal Auto Facturación en Linea con Odoo

Portal de Auto Facturación Integrado con Odoo


Hola a todos, gracias por visitar este blog, en esta ocasión le vengo a hablar sobre un desarrollo muy necesario para muchas Empresas dedicadas a la venta de productos y es la necesidad de que el cliente pueda generar sus propias facturas electrónicas a través de nuestro Sistema de facturación y que mejor que este integrado con nuestro ERP Odoo.





Facturacion electronica CFDI 3.3 con complemento de Pagos:

https://poncesoft.blogspot.mx/2017/09/facturacion-electronica-cfdi-33-con.html

Cualquier información: info@argil.mx


miƩrcoles, 25 de octubre de 2017

Obtener ID en Metodos Onchange API Odoo

Obtener el ID del Registro que ejecuta un metodo Onchange


Anteriormente con OpenERP podriamos acceder a los parametros base de una forma facil ya que estos tenian estar implicitos en la declaración de los metodos en  cada una de nuestras clases, este panorama obtiene un cambio radical con la llegada de la nueva API, anteriormente podiamos acceder a los IDS del registro que ejecutaba un metodo onchange de forma facil, pero cambia en la programación con la API de Odoo.

Al ejecutar la siguiente instrucción en un metodo onchange:

self.id

Obtendremos:

<odoo.models.NewId object at 0x7fd5a8048ed0>

Esto en algĆŗn momento me ha llegado a limitar al realizar consultas o actualizaciones por Query duro, ya que es una instancia lo que estamos recibiendo y no un valor Numerico.

Existe una solución muy simple y es una variable del entorno de desarrollo de la API (Environment):

self._origin.id

La instrucción anterior nos dara el ID del Registro que esta ejecutando el metodo onchange.

viernes, 6 de octubre de 2017

Instalación Odoo 11 en Linux

Instalación Odoo 11 en Linux, Ubuntu 16.x , Ubuntu 17.x y Ubuntu Server


PASOS PARA LA INSTALACIƓN: 

Antes que nada necesitamos instalar las dependencias que utiliza Odoo (una dependencia es una aplicación o una biblioteca requerida por otro programa para poder funcionar correctamente. Por ello se dice que dicho programa depende de tal aplicación o biblioteca).
Antes de instalar las dependencias, necesitamos una actualizacion de los repositorios:
sudo apt-get update && sudo apt-get upgrade
Abrimos una Terminal de Ubuntu o una manera rƔpida es presionando las teclas Alt+Ctrl+T y escribimos lo siguiente:
sudo apt-get install subversion git bzr bzrtools python-pip postgresql python-all-dev 
python-dev python-setuptools libxml2-dev libxslt1-dev libevent-dev libsasl2-dev
libldap2-dev pkg-config libtiff5-dev libjpeg8-dev libjpeg-dev zlib1g-dev libfreetype6-dev 
liblcms2-dev liblcms2-utils libwebp-dev tcl8.6-dev tk8.6-dev python-tk libyaml-dev 
fontconfig node-less python-pip gdebi-core python-dateutil python-feedparser python-ldap
python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python-pybabel 
python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python-tz 
python-vatnumber python-vobject python-webdav python-werkzeug python-xlwt python-yaml 
python-zsi python-docutils python-psutil python-mock python-unittest2 python-jinja2 
python-pypdf python-decorator python-requests python-passlib python-pil -y
Nota: Debemos copiar y pegar las dependencias en un bloc de notas y quitar los saltos de linea que tiene el formato del Blog.
Creamos un directorio en la ruta /opt llamada Odoo:
cd /opt
Despues:
sudo mkdir odoo
Cambiamos los permisos de la carpeta odoo al usuario que usara esta ruta (german es el usuario del sistema):
sudo chown german.german * -R odoo
Descargamos Odoo desde el Repositorio Oficial:
sudo git clone https://www.github.com/odoo/odoo --depth 1 --branch 11.0 --single-branch .
Instalamos las dependencias de la aplicación:
sudo pip install -r /opt/odoo/doc/requirements.txt
sudo pip install -r /opt/odoo/requirements.txt

Creamos nuestro Usuario Postgres
Entramos al prompt de postgres:
sudo su postgres
Creamos el Usuario:
createuser -s -P -e odoo
Tecleamos la contraseña (odoo) 2 veces. Ahora para evitar algún error modificamos el template principal de postgres (template1)
psql template1
Y una vez dentro del template:
alter role odoo with password 'odoo';
Para salir del prompt de postgres solo ejecutamos:
psql \q
Creamos nuestro archivo de configuracion de Odoo, para ello vamos al directorio de instalación (/opt/odoo/) y ejecutamos:
python odoo-bin -c odoo.conf -s
Lo que estamos haciendo es crear un archivo de configuración para Odoo.
Ahora debemos pausar la ejecución del servidor con la combinación de teclas ctr+c.
Listo, ahora editamos el archivo de configuración llamado odoo.conf, con el editor vi, vim, nano o gedit si estÔn en modo grÔfico y modificamos los valores:
db_host = localhost
db_maxconn = 64
db_name = False
db_password = odoo
db_port = 5432
db_template = template1
db_user = odoo
Guardamos y ahora para ejecutar el servidor odoo, usamos el comando:
python /opt/odoo/odoo-bin -c /opt/odoo/odoo.conf
Una Captura de Odoo 11:

Desde mi perspectiva Odoo 11 es 3 veces mas rapido y mejor optimizado en cuestion del manejo de Datos, podemos optimizar aĆŗn mas el rendimiento montando un Servidor Web (Nginx) con un certificado de Serguridad HTTPS.

martes, 8 de agosto de 2017

Ejecutar Script SQL Terminal Postgres

Ejecución de Scripts Terminal Linux (PostgreSQL)



Una parte importante en la administración de Odoo es poder correr modificaciones mediante Base de Datos, para optimizar la actualización de Registros en Diferentes Tablas, el proceso es muy sencillo primero Debemos entrar en modo Terminal PostgreSQL para ello existen varios metodos, el mas sencillo es  ejecutar:


sudo su postgres

El paso primordial es indicarle a Postgres la Base de Datos y la ruta del Script en formato SQL:

psql BaseDeDatos < /ruta/archivo.sql  


Nota: Es importante que cada sentencia en el Script finalice con el sĆ­mbolo ; ya que esto indica el fin de cada expresión.