Use case : In the CRM app, I want to be able to filter on the task changed this week/last24H/no change in the past 30 days.
How to :
1. Create a new filter with the date you want to filter in Odoo with studio (search view). Any filter would work, we just need Studio to create a view.
2. Open the studio view that was created (Odoo Studio: MODEL.search.inherit.VIEW customization)
3. Change the domain :
CHANGED THIS WEEK :
domain="[('date','<',time.strftime('%%Y-%%m-%%d 23:59:59')),('date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d 00:00:00'))]"
CHANGED THIS DAY :
domain="[('date','<',time.strftime('%%Y-%%m-%%d 23:59:59')),('date','>=',(datetime.date.today()-datetime.timedelta(hours=24)).strftime('%%Y-%%m-%%d 00:00:00'))]"
NO CHANGE LAST 30 DAYS
domain="[('date','<',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d 00:00:00'))]"
'date' = update this field and use the name of field you need to filter.
********
Example :
<xpath expr="//filter[@name='activities_upcoming_all']" position="after">
<separator/>
<filter name="stage_change_week" string="Stage Changed This Week" domain="[('date_last_stage_update','<',time.strftime('%%Y-%%m-%%d 23:59:59')),('date_last_stage_update','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d 00:00:00'))]"/>
<filter name="stage_change_day" string="Stage Changed 24 Hrs" domain="[('date_last_stage_update','<',time.strftime('%%Y-%%m-%%d 23:59:59')),('date_last_stage_update','>=',(datetime.date.today()-datetime.timedelta(hours=24)).strftime('%%Y-%%m-%%d 00:00:00'))]"/>
<filter name="no_stage_change_month" string="No Stage Change 30 Days" domain="[('date_last_stage_update','<',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d 00:00:00'))]"/>
</xpath>
Hello,
If you're looking for a dynamic solution for date filters, other filters, or group by options, check out the link below, it could be helpful.
https://apps.odoo.com/apps/modules/17.0/cr_smart_filters
Thanks,
info@creyox.com