Publicidad

miércoles, 27 de mayo de 2015

Corregir el Error de la Zona Horario en Odoo (OpenERP)


Corregir el Error de la Zona Horario en Formularios Odoo (OpenERP




    Muchos Tenemos Errores al momento de generar, Facturas, Pedidos de Venta, Compras, etc..., debido a que Odoo maneja el horario Estándar y aunque se configura la Zona Horaria Correcta para cada usuario, esta no se ve reflejada.

Si tu no encuentras Solución Para este Error, aquí te presento la Solución:

Primero Tenemos que tener Instaladas las librerias:

  • datetime
  • pytz
  • time

Ahora en Odoo importamos estas librerias:
from datetime import date, datetime, timedelta
import time
import pytz

Ahora un ejemplo, primero tomare la fecha actual que me ofrece odoo y la transformare a la Zona Horaria del Usuario Logeado:
date_now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
start = datetime.strptime(date_now, "%Y-%m-%d %H:%M:%S")
user = self.pool.get('res.users').browse(cr, uid, uid)
tz = pytz.timezone(user.tz) if user.tz else pytz.utc
start = pytz.utc.localize(start).astimezone(tz)     
tz_date = start.strftime("%Y-%m-%d %H:%M:%S")
### tz_date es la fecha correcta con la zona hroaria
print "########################## DATE FINAL TZ >>> ", tz_date

Si necesitáramos corregir la fecha y hora de un registro bastaria con hacerlo de la siguiente forma:

for rec in self.browse(cr, uid, ids, context):
    field_date = rec.date ## Campo Fecha del Formulario
    start = datetime.strptime(field_date, "%Y-%m-%d %H:%M:%S")
    user = self.pool.get('res.users').browse(cr, uid, uid)
    tz = pytz.timezone(user.tz) if user.tz else pytz.utc
    start = pytz.utc.localize(start).astimezone(tz)     
    tz_date = start.strftime("%Y-%m-%d %H:%M:%S")
    ### tz_date es la fecha correcta con la zona hroaria
    print "########################## DATE FINAL TZ >>> ", tz_date

Como vimos en el ejemplo anterior, primero obtenemos el valor de campo fecha/fecha_hora, después solo hacemos unas conversiones para pasarlo a la librería pytz.


Espero que les sea de ayuda.



1 comentario:

  1. Hola Germán, me asalta la duda de como utilizar este ejemplo, debería crear un nuevo archivo con llamadas? copiar esto dentro de orm.py? es que no me queda del todo claro.
    De antemano muchas gracias

    ResponderBorrar