Filtrar sobre un campo computado no almacenado

21 views
Skip to first unread message

Edgar de la Cruz

unread,
Mar 3, 2019, 11:32:22 PM3/3/19
to Odoo Colombia
Hola amigos, me gustaría saber si es posible filtrar sobre un campo computado que no es almacenado, ya que actualmente estoy haciendo un calculo de horas sobre tal campo pero gustaría poder filtrar si ese campo es mayor a 8 horas o menor, les dejo mi codigo, agregué el metodo search pero al buscarlo en el filtro el campo y aplicar el filtro se queda cargadno y tarda mucho, son alrededor de 16 mil registros, saludos

class CrmLeadActivity(models.Model):
    _inherit = 'crm.lead'
        
    elapsed_hours =  fields.Float(string='Hours elapsed', compute='_compute_elapsed_hours', search='_search_hours_elapsed')

    @api.depends('date_last_stage_update')
    def _compute_elapsed_hours(self):
        for record in self:
            if record.x_stage_name in ['Proposition', 'Propuesta', 'Approve', 'Aprobado']:
                user = self.env.user.partner_id
                tz_name = user.tz or 'America/Mexico_City'
                tz_info = pytz.timezone(tz_name)
                now = datetime.now(tz_info)

                date_last_stage_update = datetime.strptime(record.date_last_stage_update ,"%Y-%m-%d %H:%M:%S")
                local_dt = date_last_stage_update.replace(tzinfo=pytz.utc).astimezone(tz_info)
                date_last_stage_update_tz = tz_info.normalize(local_dt)
               
                time_elapsed = now - date_last_stage_update_tz
                time_elapsed_hours = math.floor(time_elapsed.total_seconds() / 3600)

                day = timedelta(days=1)
                weekend_days = 0
                while date_last_stage_update_tz <= now:
                    if date_last_stage_update_tz.weekday() in [5,6]:
                        weekend_days += 1
                    date_last_stage_update_tz = date_last_stage_update_tz + day         
                record.elapsed_hours =  time_elapsed_hours - (weekend_days * 24)

    def _search_hours_elapsed(self, operator, value):
        return [('elapsed_hours', operator, value)]
Reply all
Reply to author
Forward
0 new messages