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, 18 de febrero de 2020

Acción Automatizada para Prevenir Registros Duplicados

Acción Automaticas Revisión de Registros



     En el Sistema Odoo existe un menu que muy pocos utilizamos debido a que no sabemos realmente como funciona y sobre todo como explotar todo el potencial que tiene para evitar desarrollar restricciones que serian mucho mas faciles registrar dentro de esta Funcionalidad del Sistema.

El menu tiene por nombre Acciones Automaticas o Automatizadas dentro del menu de Configuración de Odoo.


Primero Crearemos un registro nuevo con el nombre que nos permita identificarlo de manera mas facil.

Lo primero seria:
  • Nombre de la Regla o Acción
  • Modelo al cual Aplicar.
  • Ejecución en este caso al Crear y Actualizar.




Lo segundo es generar el Codigo Python que nos va permitir aplicar la regla o restricción, para ello pulsamos dentro de la Pestaña Opciones y agregamos una Acción en Python.


El Código seria:


if record.default_code:
   existing_product = env['product.template'].search(
[('id','!=',record.id),
('default_code','=',record.default_code)
])
   if existing_product:
     raise Warning("La Referencia Interna ya existe en 
                    otro Producto en el Sistema.!")


Espero que les sea de utilidad.

Actualizar Modulo en Multiples Bases de Datos - Odoo

Actualización de Modulos en multiples Bases de Datos




El dia de hoy traigo un Query que nos permite actualizar un modulo  en multiples Bases de Datos de Odoo corriendo en una misma instancia y versión de Odoo.

Script escrito en Bash con codigo Python:


#!/usr/bin/env python

from datetime import date
import subprocess, xmlrpclib, sys, os, psycopg2, pexpect

# Database info
db_user = 'odoo'
db_passwd = ''
db_host = 'localhost'
db_port = 5432
db_name = 'postgres'
oerp_conf = '/opt/odoo/odoo.conf'
oerp_bin = "/opt/odoo/odoo-bin"
module_to_upgrade = "modulo_a_actualizar"

today = date.today()
log_date = today.strftime('%Y%m%d')
log_name = "update-{}.log".format(log_date)
base_dir = os.getcwd()

with open(log_name, 'a+') as log_file:

  # Get list of databases
  db = psycopg2.connect(user=       db_user, 
                        password=   db_passwd,
                        host=       db_host,
                        port=       db_port,
                        database=   db_name)
  cr = db.cursor()
  cr.execute("select datname from pg_database where datdba=(select usesysid from pg_user where usename='{}') order by datname".format(db_user))
  dblist = [str(name) for (name,) in cr.fetchall()]

  for database in dblist:
    # Wait for server to upgrade database, then kill it
    print "Actualizando Base de Datos {}...".format(database)
    
    dbupdate_cmd = "{} shell -c {} --database={} --update={}".format(oerp_bin, oerp_conf, database, module_to_upgrade) 
    output = pexpect.spawn(dbupdate_cmd)
    try:
      # to catch this string loading.py was altered (line 461)
      output.expect('.*Modulos Cargados.', timeout=600)

    except pexpect.ExceptionPexpect as e:
      print "Se Agoto el tiempo de espera en la actualización {}. Intente actualizar Manualmente la Base de Datos con el comando '{}'.".format(database, dbupdate_cmd)
    output.kill(0)
    status = "Base de Datos Actualizada {}.".format(database)
    print status
    log_file.write(status + "\n")

Los Parametros principales a modificar son:

  • oerp_conf
    • Es la ruta del archivo de configuración de Odoo, normalmente se encuentra dentro de /etc/odoo/odoo-server.conf
  • oerp_bin
    • Ruta del programa de administración de Odoo, se encuentra dentro de la ruta de instalación del ERP.



Fuente: http://soft29.info/blog/entry/odoo-module-upgrade-on-multiple

lunes, 3 de febrero de 2020

Uso de CFDI en Punto de Venta - Facturación Electronica


POS - Uso de CFDI 

Odoo 13.0



El siguiente modulo nos permite seleccionar el Uso de CFDI con el cual generaremosl a Factura Electronica para nuestros clientes, dentro de las principales caracteristicas  del modulo que voy a presentarles podremos encontrar:


  • Selección de Uso de CFDI desde el Formulario de Clientes

  • Selección del USo de CFDI desde el Formulario de Clientes en el Punto de Venta.


  • Visualización al seleccionar clientes en el Punto de Venta

  • Como ultima funcionalidad automaticamente relaciona el Uso de CFDI del cliente al seleccionarlo dentro de Formulario de Facturación.

El modulo lo podran descargar desde:


Con el nombre pos_customer_uso_cfdi







miƩrcoles, 29 de enero de 2020

Funcion copy_from para Importar Tablas desde Archivos Excel (CSV)

Importar Archivos CSV desde Funciones Python en Odoo



Lo primero es conocer la función llamada copy_from la cual forma parte del cursor que podemos instanciar por medio de la linea:

self.env.cr.copy_from


Parametros Necesarios para la Función

  1. CSV: Archivo de Excel en formato csv con la información de la tabla.
  2. Tabla: Nombre de la tabla a la cual sera volcada la información del archivo.
  3. Separador: Simbolo separador de la inforamción del CSV ( , por ejemplo)
  4. Columnas: Columnas separadas por el simbolo del Archivo.


Ejecución del Metodo

Lo primero es instanciar el cursor, el cual se encuentra dentro del entorno o contexto general de la API de Odoo.

  1. Para instanciar el cursor utilizamos "self.env.cr" y para crear una tabla "self.env.cr.execute"
  2. AƱadir la Ruta del CSV
  3. Crear la estructura en un arreglo tipo lista con las columnas del CSV.
  4. Volcar el CSV utilizando la función  "self.env.cr.copy_from"
  5. Cerrar el Archivo CSV.

self.env.cr.execute(""" CREATE TABLE IF NOT EXISTS odooacademy(
fecha_nacimiento date, edad integer,
nombre_curso text,
nombre_completo text)""")
self.env.cr.commit()
csv_file= open(filepath,"r")
columns=['fecha_nacimiento','edad','nombre_curso','nombre_completo']
self.env.cr.copy_from(csv_file, 'odooacademy', sep=',', columns=columns)
self.env.cr.commit()
csv_file.close()
Gracias por visitar mi Blog. ;-)

martes, 28 de enero de 2020

Instalar Python 3.7 en Ubuntu 16.04

Paso 1 - Instalación de Python 3.7 mediante Repositorios Externos.

  • Actualizamos los Paquetes y Repositorios necesarios
apt update
sudo apt install software-properties-common
  • AƱadimos el Repositorio
sudo add-apt-repository ppa:deadsnakes/ppa
Note: Puede pedirte Enter pasa continuar.
  • Una vez que termine la actualización, instalamos el paquete con el comando:
sudo apt install python3.7
Comprobamos la versión instalada:
python3.7 --version

Paso 2 Actualizamos las Alternativas de Python

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2



Paso 3 - Selecciona la opción Principal

sudo update-alternatives --config python3




Step 4 - Probar el Resultado

python3 -V

Notas:
Debemos instalar lo siguiente:

  • sudo apt-get install python3-pip
  • sudo apt-get install python3.7-sqlalchemy
  • sudo apt-get install python3.7-dev
  • sudo pip3 install --upgrade --force-reinstall setuptools

lunes, 1 de julio de 2019

Facturación Electrónica CFDI 3.3 con Complemento de Pagos para Odoo 8, Odoo 9 y Odoo 10

Factura Electrónica CFDI 3.3 con Integración de Pagos Electrónicos
(Complemento de Pagos)


Introducción a Facturación Electrónica CFDI 3.3

La Migración de Esquemas de Facturación Electrónica CFDI 3.2 a 3.3 se presento a comienzos del Año 2016 el cual tiene como objetivo cambiar la factura electrónica con el uso de plantillas y catÔlogos, con la finalidad de tener uniformidad en los datos registrados y que permitan a la autoridad fiscal identificar al contribuyente emisor y el tipo de transacción, los periodos de emisión del CFDI y fundamentalmente las fechas y formas de pago de los CFDI.

Este nuevo esquema se presenta como Opcional a partir del 1ro de Julio y como Obligatorio a partir del 1ro de Diciembre.

Debido a este nuevo reto y al mismo tiempo Obligación Fiscal, nos dimos a la tarea de desarrollar esta Solución Integrada 100 % a Odoo desde la Versión 7 (OpenERP) hasta Odoo 10.

El proceso es bastante sencillo y transparente para los usuarios finales.

Dentro de los cambios principales observaremos los CatƔlogos:
  • Uso CFDI
  • Formas de Pago
  • MĆ©todos de Pago
  • Impuestos
  • Catalogo Productos/Servicios
  • Unidades de Medida
  • Códigos Postales
Para el Uso de Comercio Exterior:
  • Ciudades
  • Localidades
  • Colonias
  • Paises
  • Estados
  • Pedimentos
  • Aduanas
Podemos observar toda la funcionalidad en el siguiente vĆ­deo:


Localizacion Mexicana Odoo con Facturacion Electronica 3.3

Cualquier información: info@argil.mx


viernes, 4 de enero de 2019

Cabeceras para Reportes Qweb

Tipos de Cabeceras para Reportes Qweb en Odoo 11 y Odoo 12



En la declaración de la Vista Qweb referente a nuestro Reporte en Odoo, podemos ejecutar 3 tipos:


  • basic_layout
    • Elimina la Cabecera de nuestros Reportes Odoo
  • external_layout
    • Genera un llamado al template que agrega la cabecera base de todos los Reportes
  • internal_layout
    • Genera un llamado al template base que solo contiene el numero de Pagina y el nombre de nuestra CompaƱia.

Ejemplos:


basic_layout


            <t t-call="web.basic_layout">
            </t>

external_layout


            <t t-call="web.external_layout">
            </t>

internal_layout


            <t t-call="web.internal_layout">
            </t>

Resultado:

basic_layout


external_layout


internal_layout


domingo, 4 de noviembre de 2018

Integración de Buzón Tributario con Odoo y OpenERP

Integración de Cancelaciones


De acuerdo a los nuevos lineamientos por parte del SAT para este aƱo 2018 sera obligatorio para los
Emisores de CFDI, la integración del Buzón Tributario para la generación de Solicitudes de Cancelación de Facturas, de acuerdo a los criterios establecidos por esta entidad.

Dentro de los criterios establecidos podemos encontrar lo siguiente:

Restricciones

  • Solo se permite generar 3 solicitudes como mĆ”ximo, si al tercer intento de cancelación no es
  • aceptada, esta se convierte en no Cancelable.
  • Solo se puede generar una nueva solicitud pasadas 24 horas de la ultima.
  • Si el CFDI tiene un documento relacionado vigente en el SAT la Factura no puede ser
  • Cancelable.

No requiere autorización

  • CFDI que ampare ingresos hasta 5,000 pesos con impuestos y retenciones.
  • CFDI de Nomina.
  • CFDI de Egresos como Notas de CrĆ©dito.
  • CFDI de Traslado, Carta Porte.
  • CFDI de Ingresos para Clientes con el RĆ©gimen de Incorporación Fiscal (RIF)
  • Que amparen CFDI de Retenciones.
  • CFDI Emitidos a Residentes en el Extranjero con el RFC: XEXX010101000.
Actualmente tenemos soportada esta modificaciones para las siguientes versiones del Sistema:
  • OpenERP 6.1
  • OpenERP 7.0
  • Odoo12
  • Odoo 11
  • Odoo 10
  • Odoo 09
  • Odoo 08
El siguiente video ejemplifica la forma de trabajar con esta nueva regla:



Cualquier información pueden encontrarme en los correos:
  • german.ponce@outlook.com 
  • info@argil.mx.

jueves, 4 de octubre de 2018

Instsalación Odoo 12 en Linux

Instalación Odoo 12 en Linux, Ubuntu Server y Desktop 16.x , Ubuntu 17.x y Ubuntu 18.x


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
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 12.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

Instalación Dependencias Externas


sudo apt-get install nodejs -y
sudo apt-get install npm -y
apt-get install node-less
sudo npm install -g less
sudo npm install -g less-plugin-clean-css
sudo ln -s /usr/local/bin/lessc /usr/bin/lessc
sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo apt-get install sassc

Iniciamos nuestro Servidor de Odoo 12


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 12:

Desde mi perspectiva Odoo 12 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.
Y ahora con el manejo de Multi Sitios Web.

jueves, 9 de agosto de 2018

Definición y lectura de campos multi Compañia en Odoo

Lectura de campos de tipo propiedad con Odoo



Los campos multi-compañia o propiedad permiten al usuario tener un control interno por compañia dentro de la base de datos, esto permite la segmentación de la información para que una Base de Datos conserve sus propias particularidades, configuración, valores, etc.
Los datos de tipo propiedad podemos encontrarlos dentro de Clientes o Productos, principalmente para la parte Contable.

Como podemos definir un campo de tipo propiedad, antes de la Api  se definia un campo llamandolo fields.property pero con la migración a la nueva api, el valor property es cambiado por el parametro company_dependent, por ejemplo, voy a definir una tarifa secundaria dentro de Clientes, pero quiero que esta tarifa sea unica por CompaƱia:

class ResPartner(models.Model):
    _inherit = 'res.partner'

    second_product_pricelist = fields.Many2one('product.pricelist', 
         'Tarifa Secundaria', company_dependent=True)

Ahora, como podemos dar lectura al campo de tipo propiedad para obtener el valor, aqui entra en función el Contexto (context), utilizamos un parametro llamado force_company  dentro del código, por ejemplo si tengo 2 compaƱias, una con el ID 1 la otra con el ID 2, la lectura seria:

# Company 1
partner_br = self.env['res.partner'].with_context(force_company=1).browse(256)
second_product_pricelist_company_1 = partner_br.second_product_pricelist.id

#Company 2

partner_br = self.env['res.partner'].with_context(force_company=2).browse(256)
second_product_pricelist_company_2 = partner_br.second_product_pricelist.id

El parametro force_company recibe el ID de la compaƱia de la cual se obtendran los valores y el browse del ejemplo es el ID de un Cliente.

No se olviden comentar ...