Ir al contenido

¡Bienvenido a los foros Aeodoo!

Somos la comunidad de Odoo internacional hispanohablante.
Estos foros son para compartir y debatir dudas técnicas, funcionales y mejores prácticas para Odoo. Recuerda que no están permitidos los insultos, descalificaciones o spam, cualquier conducta reprobable supondrá el baneo del usuario.

 
Ocultar IntroRegistro

Esta pregunta ha sido marcada
2 Respuestas
37 Vistas

 he revisado documnetacion para corregir  un campo debido a la necesidad de que en la propiedad stone=False me muestra datos de determinado campo en este caso campo 'carga' originalmente este campo tiene fecha y se podria filtrar por la misma para acomodo de la informacion de los viajes, se pidio que agregara hora patio y hora carga entones muestra 3 datos, pero no esta activo el filtro a raiz de este cambio revisando el codigo 

carga_info = fields.Html(string='Programación Carga', compute='_compute_carga_info', store=False )

  si cambio a True si aparece el filtro pero ya no me manda los datos en la vista o sea manda el campo vacio solo ese, leyendo y haciendo pruebas trato de entender del por que no lo hace, puedeser que write no recalcule archivos viejos, no recalcule compute almacnados o sea el cmpo existe, el filtro si aparece, los datos siguen vacios solo si colvemos stone a True, descubri que write maneja what app para notificaciones, maneja cambios de estado y guarda los logs vi una linea 

# Guarda en BD

    res = super(LogisticaOperacion, self).write(vals)  

OTRA COSA QUE  he revisado es que en odoo los cmpos 'compute' y 'store=True' no llenan con write (), se llenan en automatico con @api.depends;  'write()' no es la solucion correcta para este caso donde se pretende que ese campo muestre los datos y se pueda filtrar por fecha 


y otra cosa depsues de mover stone a True modificar el @api.depends aacrualiar repo no hace nada  

fragmento donde se ve write 

def write(self, vals):


    if 'estatus_mv' in vals:

        vals['last_whatsapp_update'] = fields.Datetime.now()


    if 'mensaje_formateado' in vals and len(vals) == 1:

        return super(LogisticaOperacion, self).write(vals)


    estatus_anterior_map = {}

    if 'state' in vals:

        for operacion in self:

            estatus_anterior_map[operacion.id] = operacion._get_state_label(operacion.state)


    # Guarda en BD

    res = super(LogisticaOperacion, self).write(vals)


    if 'state' in vals:

        estatus_nuevo_label = self._get_state_label(vals['state'])

        for operacion in self:

            if operacion.id in estatus_anterior_map:

                self.env['logistica.operacion.log'].create({

                    'operacion_id': operacion.id,

                    'fecha': fields.Datetime.now(),

                    'estatus_anterior': estatus_anterior_map[operacion.id],

                    'estatus_nuevo': estatus_nuevo_label,

                    'usuario_id': self.env.user.id,

                })


    # LOGISTICA: recompute carga_info para permitir filtros

    if any(k in vals for k in [

        'fecha_de_carga',

        'cita_en_patio',

        'cita_de_carga',


    ]):

        self._compute_carga_info()

    return res


fragmento de comoe sta @api.depends

  @api.depends('fecha_de_carga', 'cita_en_patio', 'cita_de_carga')

    def _compute_carga_info(self):

        for record in self:

            info = []

            if record.fecha_de_carga:

                info.append(record.fecha_de_carga.strftime('%d/%m/%Y'))

            if record.cita_en_patio or record.cita_en_patio == 0:

                hours = int(record.cita_en_patio)

                minutes = int((record.cita_en_patio * 60) % 60)

                info.append(f"Patio: {hours:02d}:{minutes:02d}")


            if record.cita_de_carga or record.cita_de_carga == 0:

                hours = int(record.cita_de_carga)

                minutes = int((record.cita_de_carga * 60) % 60)

                info.append(f"Carga: {hours:02d}:{minutes:02d}")

            record.carga_info = "<br/>".join(info)


lo que solicito es rero de como solucionar esta parte para poder tener el filtro de ese campo 'carga' o que muestre los datos que solicitan espero haberme explicado

Avatar
Descartar
Autor

 por si le s interesa y llegan a tener este problema se soluciono entrando a modo desarrollador en el modulo d odoo pestana de tecnico y nos fuimos ala opcion tecnico/automatizaciones/acciones planificadas y se ecribio este codigo

 records = env['logistica.operacion'].search([])

records._compute_carga_info()

escogiendo el modelo indicado en mi caso Op viaje 


saludos cordiales cualquier consulta estoy a la orden en el siguente mail  falconavellana@gmail.com


Avatar
Descartar

Hola Adolfo, según he entendido hay un filtro sobre el campo 'carga_info' que era un campo calculado y almacenado y necesitas ampliar la función que calcula este campo  '_compute_carga_info'.


En primer lugar plantéate si puedes utilizar los campos almacenados ('fecha_de_carga', 'cita_en_patio','cita_de_carga') para cualquier filtro, en lugar del campo calculado 'carga_info'.


En la dirección en la que vas actualmente, si quieres mantener el filtro sobre 'carga_info' necesitas que el campo sea almacenado (store=True) o no habrá datos que filtrar.


Tendrías que asegurar que se ejecute '_compute_carga_info' para todos los registros existentes y para los nuevos registros ya se calcularía según el  @api.depends cuando se agreguen o modifiquen los campos 'fecha_de_carga', 'cita_en_patio' o 'cita_de_carga'. No hay necesidad de forzar la ejecución de '_compute_carga_info' en el 'write'.


Puedes ejecutar un fragmento de código que ejecute '_compute_carga_info' para los registros que necesites mediante las migraciones de versiones:  https://www.odoo.com/documentation/18.0/developer/reference/upgrades/upgrade_scripts.html



Avatar
Descartar