0

I am facing an issue with recomputing the compute_recent_customer method in my custom module for Odoo 15. The method is decorated with @api.depends and depends on the recent_order_days field, as well as other related fields. However, despite trying various approaches, the method does not get re-computed when the value of recent_order_days is changed.

I have attempted different solutions, including adding recent_order_days as a dependency in the @api.depends decorator, explicitly updating the dependent fields, and ensuring the correct usage of the @api.depends decorator. Unfortunately, none of these attempts have resolved the issue.

from odoo import models, fields, api
from datetime import datetime, timedelta

class ResConfigSettings(models.TransientModel):

    _inherit = 'res.config.settings'

    recent_order_days = fields.Integer(string='Recent Order Days')

    @api.model
    def get_values(self):
        res = super(ResConfigSettings, self).get_values()
        recent_order_days = self.env['ir.config_parameter'].sudo().get_param('crm_res_partner.recent_order_days')
        res.update(recent_order_days=int(recent_order_days))
        return res

    def set_values(self):
        super(ResConfigSettings, self).set_values()
        self.env['ir.config_parameter'].sudo().set_param('crm_res_partner.recent_order_days', self.recent_order_days)
        self.env.cr.execute("UPDATE res_partner SET recent_order_days = %s""", 
                    [self.recent_order_days])
        
class ResPartner(models.Model):
    _inherit = 'res.partner'

    recent_order_days = fields.Integer(string='Recent Order Days')
    is_recent_pos_customer = fields.Boolean(
        compute='_compute_recent_customer',
        string='Recent POS Customer',store=True)
    
    is_recent_sale_customer = fields.Boolean(
        compute='_compute_recent_customer',
        string='Recent Sales Customer',store=True)

    @api.depends('recent_order_days','sale_order_ids.date_order', 'pos_order_ids.date_order', 'sale_order_ids.state', 'pos_order_ids.state')
    def _compute_recent_customer(self):
        
        days = partner.recent_order_days
        date_threshold = fields.Datetime.now() - timedelta(days=int(days))
        
        for partner in self:
            pos_orders = partner.pos_order_ids.filtered(
                lambda o: o.state in ['done'] and 
                          o.date_order > date_threshold)
            
            sales_orders = partner.sale_order_ids.filtered(
                lambda o: o.state in ['done'] and 
                          o.date_order > date_threshold)
                          
            partner.is_recent_pos_customer = bool(pos_orders)
            partner.is_recent_sale_customer = bool(sales_orders)

0 Answers0