コンテンツへスキップ
メニュー
この質問にフラグが付けられました
2 返信
636 ビュー

Hola, 

Tengo este cogido para obtener edad que me funcionó hasta Odoo 16, no logro que funcione en Odoo 18. Si alguime me puede mostrar el error. El campo de fecha de nacimiento es x_dob, el campo donde retorna la edad es x_studio_age_1. Esto es para implementar con Odoo Studio. el codigo esta en el campo calculado x_studio_age_1.

Este código lo tome de un forum anterior, no tengo el hilo.


for record in self:

    if record.x_dob:

        today = datetime.date.today()

        born = record.x_dob


        # Calcular años

        years = today.year - born.year - ((today.month, today.day) < (born.month, born.day))


        # Calcular meses

        months = today.month - born.month

        if today.day < born.day:

            months -= 1

        if months < 0:

            months += 12


        # Calcular días

        if today.day >= born.day:

            days = today.day - born.day

        else:

            previous_month = (today.replace(day=1) - timedelta(days=1)).day

            previous_month = today.month - 1

           

        record['x_studio_age_1'] = f"{years} años, {months} meses, {days} días"


    else:

        record['x_studio_age_1'] = "Sin fecha de nacimiento"

アバター
破棄
最善の回答

te arroja algún error?

アバター
破棄
著作者

Hola Flavio, este es el link del error

https://www.aventuradecolores.com/documents/TbQeX3SNTSmVh0TDlaKHXwo4d

El error esta en el calculo de los día, he probado varios métodos propuestos, pero no me funciona.

Actualmente he reemplazado el codigo de calculo de días por este:

Codigo que no funciona_________________________

else:
previous_month = (today.replace(day=1) - timedelta(days=1)).day
previous_month = today.month - 1

Codigo temporal_____________________

else:
days = 31 - (born.day - today.day)

Pero esta solución solo es temporal, ya que no es exacto.

oh ya veo
previous_month = (today.replace(day=1) - timedelta(days=1)).day
en ese pedazo de código intenta
previous_month = (today.replace(day=1) - datetime.timedelta(days=1)).day
con eso debería funcionar de nuevo tu código

著作者

Muchas Gracias Flavio,
La correción funciono de maravilla.

Dejo todo el codigo para la comunidad, probado en Odoo 18.1

for record in self:
if record.x_dob:
today = datetime.date.today()
born = record.x_dob

# Calcular años
years = today.year - born.year - ((today.month, today.day) < (born.month, born.day))

# Calcular meses
months = today.month - born.month
if today.day < born.day:
months -= 1
if months < 0:
months += 12

# Calcular días
if today.day >= born.day:
days = today.day - born.day
else:
previous_month = (today.replace(day=1) - datetime.timedelta(days=1)).day
days = previous_month - born.day + today.day

record['x_studio_age_1'] = f"{years}a, {months}m, {days}d"

else:
record['x_studio_age_1'] = ""

著作者 最善の回答

El error esta en el calculo de los día, he probado varios métodos propuestos, pero no me funciona.

Actualmente he reemplazado el codigo de calculo de días por este:

Codigo que no funciona_________________________

else:

    previous_month = (today.replace(day=1) - timedelta(days=1)).day

    previous_month = today.month - 1


Codigo temporal_____________________

else:

    days = 31 - (born.day - today.day)


Pero esta solución solo es temporal, ya que no es exacto.

アバター
破棄
関連投稿 返信 ビュー 活動
2
1月 24
1422
0
7月 18
4112
2
3月 15
7760
1
5月 25
94
1
5月 25
253