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

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.


martes, 1 de agosto de 2017

Localización Mexicana para Odoo 10

Adaptaciones Contables para México


Hola a todos, este pequeño Post es para anunciar la Localización Mexicana para la version 10 de Odoo, una cosa importante que quiero resaltar es que esta localizacion es compatible con la version Comunitaria y la Version Enterprise de Odoo, algunas de sus funcionalidades mas importantes son:
  • Contabilidad Electrónica
    • Catalogo de Cuentas XML
    • Balanza de Comprobación
    • Complementos XML
    • Plan de Cuentas
    • Auxiliares Contables
    • Polizas
  • Facturación Electrónica
  • DIOT
  • Catalogo de Cuentas Jerárquico
  • Reportes IFRS
  • Reclasificacion de Impuestos
  • Periodos Fiscales y Años Fiscales
  • Mucho mas ....


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


martes, 4 de julio de 2017

Consulta de Fecha Actual a traves de la API de Odoo

Consulta de la Fecha Actual utilizando Odoo


    La API de Odoo incorpora en la clase fields la posibilidad de manipular los valores de los campos de tipo fecha/fecha hora, lo cual podemos utilizar para poder consultar la fecha actual en la zona horaria que deseemos:

Fields - Date

  • context_today Retorna la Fecha en Zona horaria del Usuario.
  • today Retorna la fecha del Sistema Operativo en un String
  • from_string Retorna una fecha desde un string a una instancia datetime.date() 
  • to_string rCaso contrario, devuelve una fecha en formato de texto desde una instancia de Fecha datetime.date()
Ejemplos Gráficos
>>> from openerp import fields

>>> adate = fields.Date()
>>> fields.Date.today()
'2014-06-15'
>>> fields.Date.context_today(self)
'2014-06-15'
>>> fields.Date.context_today(self, timestamp=datetime.datetime.now())
'2014-06-15'
>>> fields.Date.from_string(fields.Date.today())
datetime.datetime(2014, 6, 15, 19, 32, 17)
>>> fields.Date.to_string(datetime.datetime.today())
'2014-06-15'

Fields - Datetime

Los valores disponibles para fecha Hora son los siguientes:
  • context_timestamp Retorna la fecha y hora en formato de Zona Horaria del Usuario.
  • now Retorna la fecha y hora del Sistema Operativo
  • from_string Retorna la fecha y hora en formato de texto desde una instancia datetime.date
  • to_string Retorna una instancia de fecha en formato datetime.date desde una fecha de Texto.
Ejemplos Gráficos:
>>> fields.Datetime.context_timestamp(self, timestamp=datetime.datetime.now())
datetime.datetime(2014, 6, 15, 21, 26, 1, 248354, tzinfo=<DstTzInfo 'Europe/Brussels' CEST+2:00:00 DST>)
>>> fields.Datetime.now()
'2014-06-15 19:26:13'
>>> fields.Datetime.from_string(fields.Datetime.now())
datetime.datetime(2014, 6, 15, 19, 32, 17)
>>> fields.Datetime.to_string(datetime.datetime.now())
'2014-06-15 19:26:13'

lunes, 3 de julio de 2017

Mensaje de Confirmación en la ejecución de Botones

Mensaje de Confirmación en funciones ejecutadas desde una Vista



    En la definición de Botones de Tipo Objeto podemos añadir un nuevo atributo el cual nos pedirá una segunda confirmación para desencadenar el proceso que hayamos programado, el atributo es muy sencillo y tiene por nombre confirm mas el mensaje que deseamos enviar al Usuario, el fragmento es el siguiente:


<button name="mi_metodo_odoo" type="object" string="Ejecutar 
Proceso" confirm="Estas Seguro que deseas pulsar este Boton?" />

El Resultado durante la ejecución es la siguiente:


Como podemos observar existe una doble validación del botón para poder evitar algún click por accidente, este tipo de advertencias podrán utilizarse en procesos clave de nuestros desarrollos.




viernes, 23 de junio de 2017

Descarga de Reporte con Nombres Dinámicos en Odoo 9 y Odoo 10

Generación de Reportes con Nombres Dinámicos en Odoo



Dentro de las grandes virtudes de Odoo podemos ver una actualización muy util al apartado de Reportes, la cual es la generación del nombre del archivo descargado (Ej. Pedido 01.pdf) de forma dinámica tomando información de un campo del formulario donde se imprime el Reporte.

El primero paso es activar el modo desarrollador.

Con este paso, podremos visualizar en Configuración --> Informes --> Formulario --> Campo Printed Report Name

Este campo nos permitirá ingresar una serie de evaluaciones del registro del cual se imprime la información para generar el nombre de descarga del Archivo PDF, por ejemplo en el reporte de Facturas podria generar el siguiente nombre:


El resultado sera de 2 maneras, si no existe numero de factura:


Existiendo un numero de folio (factura confirmada):


El Nombre del reporte con concatenaciones puede ser dinámico o fijo, reemplazando el valor original del reporte.


Espero les ayude tanto como a mi.


martes, 30 de mayo de 2017

Contabilidad electrónica 1.3 para OpenERP 7, Odoo 8, Odoo 9 y Odoo10

Contabilidad electrónica 1.3 para todas las versiones de Odoo.





Muchos de nosotros hemos escuchado acerca de los nuevos cambios en la Contabilidad Electrónica proceso fiscal electrónico en México desde el 2014, en Argil Consulting estamos listos para cumplir con esta norma, los detalles los describimos a continuación.

Están obligadas al envío de la contabilidad electrónica:
  • Las personas morales, incluidas las personas morales con fines no lucrativos.
  • Las personas físicas con actividad empresarial, actividades profesionales con ingresos superiores a $ 2,000.000.00 y arrendamiento, con la condicionante de que no estén haciendo uso de la aplicación Mis cuentas.
A continuación, encontrarás el detalle de los cambios que hemos encontrados después de realizar un análisis detallado a los documentos liberados:
Auxiliares y Pólizas
  • La versión ha sido cambiada a 1.3
  • Se ha cambiado la expresión regular del número de orden (NumOrden)
  • El número de tramite (NumTramite) ha cambiado su tamaño, el cual estaba en 10 y ha pasado a 14, y también se modificado su expresión regular permitiendo letras en el valor del mismo.
  • Ahora los importes permiten números más grandes.
Balanza de comprobación
  • Ahora la versión es 1.3
  • A la fecha de la última modificación (FechaModBal) se la definido como valor mínimo 01/01/2015.
  • Ahora los importes permiten números más grandes.
Catálogo de cuentas
  • El único cambio que existe en este, es la versión que ha sido actualizada a la 1.3
Otros Cambios
Adicional a lo ya comentado, el SAT ha realizado otros cambios, que, aunque son menores, consideramos que es importante mencionarlos:

  • Se actualizo el archivo de digestión de SHA-1 a SHA-2.
  • Cambio la ruta dentro del servidor del SAT donde se encuentran los respectivos schemas.
Si eres un cliente nuestro no dudes en que pronto estarás recibiendo esta actualización y si no lo eres aún, no lo dudes mas, no pongas en riesgo la integridad de tu negocio ¡Acércate ya!

Fuentes Consultadas:

http://www.facturando.mx
https://contadormx.com
http://www.sat.gob.mx/fichas_tematicas/buzon_tributario/Paginas/contabilidad_electronica.aspx




jueves, 20 de abril de 2017

Localización Mexicana para Odoo 8, Odoo 9 y Odoo 10

Adaptaciones Contables para México en cualquier Versión de Odoo


Hola a todos, este pequeño Post es para anunciar la Localización Mexicana para cualquier versión de Odoo (Odoo 8, Odoo 9 y Odoo 10), la cual incluye entre lo mas destacado:
  • Contabilidad Electrónica
    • Catalogo de Cuentas XML
    • Balanza de Comprobación
    • Complementos XML
    • Plan de Cuentas
    • Auxiliares Contables
    • Polizas
  • Facturación Electrónica
  • DIOT
  • Catalogo de Cuentas Jerárquico
  • Reportes IFRS
  • Reclasificacion de Impuestos
  • Periodos Fiscales y Años Fiscales
  • Mucho mas ....



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


lunes, 27 de marzo de 2017

Modulo de Captura de Datos para pagos con Tarjeta en TPV

Captura de los últimos 4 Dígitos para Pagos en el Punto de Venta



Un dato importante para el uso de puntos de venta en México es la obtención y resguardo de los últimos 4 dígitos de pagos con tarjeta de crédito/débito esto nos ayuda en auditorias y obtención de reportes como cierres de caja, etc.

Al no encontrar ningún modulo relacionado en la tienda de Odoo me di a la tarea de crear este modulo y compartirlo con la comunidad en estos tiempos donde ya no encontramos módulos útiles que sean gratuitos.

El modulo añade un input en la captura del pago donde podemos capturar la información de cada pago con tarjeta:


El input captura solamente 4 dígitos como máximo, para validar la seguridad de la información del Cliente.


La información enviada mediante es campo es guardada en el registro de Pedido del POS:


El campo donde observaremos la información tiene por nombre últimos 4 Digitos:



La liga del modulo es la siguiente, por el momento solo funciona en Odoo 9 y 10:

viernes, 10 de marzo de 2017

Herencia de propiedades en Vistas Formulario

Recepción de Propiedades mediante el contexto Odoo de las Vistas Formulario


Una propiedad muy interesante en la programación Odoo es poder heredar propiedades, valores, etc.
Esto es posible gracias a un parametro heredable en todos los aspectos de Odoo (Funciones, Vistas, Acciones de Ventana. etc..) llamado context.

Existe una infinidad de usos que podemos darle al contexto de odoo, desde enviar una cantidad infinita de variables en este parámetro dentro de una función, hasta la posibilidad de heredar valores desde la vista formulario en campos relación.

Dentro de nuestro formulario podemos enviar valores al contexto como lo mencione anteriormente, por ejemplo en la relación de lineas de pedido (order_line_ids) enviare el Almacén del Pedido, esto lo haria en la vista de esta manera:

<field name="order_line_ids" context ="{'warehouse_id': warehouse_id} />

En este ejemplo el campo warehouse_id es necesario que exista en la vista de donde lo enviamos, acto seguido si definimos cualquier método dentro del registro de ventas, podemos observar dentro del contexto el campo warehouse_id con el Almacén del Pedido de Venta.



lunes, 13 de febrero de 2017

Inserción de Datos a una nueva tabla desde una consulta SQL

Insertar Datos a una tabla Many2many desde una consulta SQL


Un problema que tuve al momento de generar una base de datos nueva y cargar un catalogo de productos fue que olvide activar una ruta creada, entonces me surgió una duda como puedo insertar datos a una tabla relacional producto de un campo many2many desde una consulta SQL sin usar funciones en la base de datos, pues la respuesta fue muy sencilla y a continuación les describo mi script:

insert into stock_route_product(product_id,route_id) select id as product_id,
5 as route_id from product_template;


  • Primero detectamos la tabla many2many2 que contiene la información por la cual se crean las relaciones.
  • Segundo ingresamos las 2 columnas que se necesitan para obtener la relación muchos a muchos, en mi caso la ruta que quería insertar era la que tenia el ID 5 para cada producto.
  • Por ultimo hice la consulta de la tabla product_template y de forma automática PostreSQL inserto cada registro de la tabla mencionada y su relación correspondiente en la tabla de rutas.


Espero les sea de ayuda.


viernes, 27 de enero de 2017

Automatización de Respaldos de Bases de Datos Odoo desde Bash

Automatización de Respaldos en Odoo desde Bash



  1. Crear un Script (Backup-Script) en la Ruta /var/scripts/dump_db.sh
    #!/bin/sh    
    hostname='hostname'
    
    ##########################################
    ## Odoo Backup
    ## Respaldo de las Bases: odoodb1, odoob2
    ##########################################
    
    # Detener el Servicio de Odoo
    /etc/init.d/odoo-server stop
    
    # Dump DB (Backup de 2 Bases de Datos)
    for db in odoodb1 odoodb2
    do
      date='date +"%Y%m%d_%H%M%N"' # Respaldo con la fecha actual.
      filename="/var/pgdump/${hostname}_${db}_${date}.sql"
      pg_dump -E UTF-8 -p 5433 -F p -b -f $filename $db
      gzip $filename # Comprimiendo la Base de Datos
    done
    
    # Iniciando el servicio de Odoo nuevamente
    /etc/init.d/odoo-server start
    
    exit 0
    
  2. Script de Eliminación de los Backups, creamos un script en la ruta /var/scripts/housekeeping.sh (Solo borrara backups con una antiguedad de 30 dias para atras).
    #!/bin/sh
    path=/var/pgdump
    logfile=/var/log/$0
    
    rm -f $logfile
    for file in 'find /var/pgdump/ -mtime +30 -type f -name *.sql.gz'
    do
      echo "Borrando: " $file >> $logfile
      rm $file
    done
    
    exit 0 
  3. Programar la ejecucion de los scripts, modificamos el crontab en  /etc/crontab. La programación de los Backups se ejecutara a la 1 am y la limpieza de backups a las 5 am.
    # m h dom mon dow user  command
    0 1 * * * postgres /var/scripts/dump_db.sh
    0 5 * * * postgres /var/scripts/housekeeping.sh

Si queremos que nuestro Respaldo pese mucho menos podríamos comprimirlo con la librería 7zip en lugar de gzip:



7zr a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on Mi_Backup.7z /path/to/database.dump


Nota: La detención del proceso de Odoo, puede variar dependiendo la instalación que hayan realizado, podría ser simplemente service odoo stop/start o podemos matar el proceso directamente con sudo fuser -k 8069/tcp.

miércoles, 25 de enero de 2017

Obtener ID de registro desde datos XML Odoo

Método para obtener el ID de la tabla desde el ID de una Vista de un modulo Odoo



Se que el titulo sonada un poco extraño, pero la idea es muy sencilla, existe un metodo de Odoo que te permite obtener el ID de un registro ya creado en la base de datos, enviandole el ID con el cual lo creamos desde un XML, para que sea un poco mas claro vamos a analizarlo.

  • Normalmente creamos un registro desde un XML de la siguiente manera:
<record id="product_uom_categ_kgm" model="product.uom.categ">
            <field name="name">Weight</field>
</record>
     


El ejemplo anterior es una categoría creada desde el modulo product.

  • Si necesitáramos saber el ID que tiene esa categoría en la base de datos:

          La manera natural o normal que yo realizaría es:
          categ_id = self.env['product.category'].search([('name','=','Weight'])
         Utilizando el método de odoo seria de la siguiente manera:
          uom_categ_id = self.env['ir.model.data'].xmlid_to_res_id( 'product.product_uom_categ_kgm')

Los parámetros que recibe son:

  • Nombre del Modulo.
  • ID del registro en el XML.


En resumen el metodo xml_to_res_id, te permite conocer el ID de cualquier registro en cualquier tabla siempre y cuando se haya creado desde un XML en un modulo de Odoo.


jueves, 12 de enero de 2017

Reset Password Odoo desde Base de Datos

Actualizar contraseña de usuarios Odoo desde la Base de Datos


Anteriormente en versiones 7 de Odoo (OpenERP) podiamos consultar la contraseña de un usuario mediante la columna password  de la tabla res_users, a partir de la versión 8 añaden una seguridad extra que es el HASH (Encriptación) de las mismas, como administradores de Odoo muchas veces tenemos que consultar o resetear las contraseñas de algunos usuarios para ello basta con ejecutar el siguiente script sql desde la base de datos:

UPDATE res_users SET password='', password_crypt='HASH' WHERE id=1;

Dentro de la variable password pondriamos la nueva contraseña que puede ser la que el usuario prefiera.


Odoo 8.0:

Change the password directly in the Postgres Database, as it is saved in plain text:
~$  sudo su postgres
~$  psql
postgres=# \connect Your_Database_Name
You are now connected to database "Your_database_Name" as user "postgres"
YOurDatabase_Name=# update res_users set password='YourNewPassword' where id='1';

Odoo 9.0 and Odoo 10.0:

Create a hash and then change the hash in the Postgres database:
~$ python
>>> from passlib.context import CryptContext
>>> print CryptContext(['pbkdf2_sha512']).encrypt('YourNewPassword')
Copy the Hash created
Ctrl D
~$  sudo su postgres~$  psqlpostgres=# \connect Your_Database_NameYou are now connected to database "Your_database_Name" as user "postgres"
YOurDatabase_Name=# UPDATE res_users SET password='', password_crypt='YourCopiedHash' WHERE id=1;YOurDatabase_Name=# \q

Odoo 11:

Create a hash using Python 3 and change the hash in the Postgres database:
~$ python3
>>> from passlib.context import CryptContext
>>> setpw = CryptContext(schemes=['pbkdf2_sha512'])
>>> setpw.encrypt('YourNewPassword')
Copy the Hash created
Ctrl D
~$  sudo su postgres
~$  psql
postgres=# \connect Your_Database_Name
You are now connected to database "Your_database_Name" as user "postgres"
YOurDatabase_Name=# UPDATE res_users SET password='', password_crypt='YourCopiedHash' WHERE id=1;
YOurDatabase_Name=# \q

Odoo 12 and Odoo 13:

Create a hash using Python 3 and change the hash in the Postgres database:
~$ python3
>>> from passlib.context import CryptContext
>>> setpw = CryptContext(schemes=['pbkdf2_sha512'])
>>> setpw.encrypt('YourNewPassword')
Copy the Hash created
Ctrl D
~$  sudo su postgres
~$  psql
postgres=# \connect Your_Database_Name
You are now connected to database "Your_database_Name" as user "postgres"
YOurDatabase_Name=# UPDATE res_users SET password='YourCopiedHash' WHERE id=2;YOurDatabase_Name=# \q