تخطي للذهاب إلى المحتوى
القائمة
لقد تم الإبلاغ عن هذا السؤال
3 الردود
1265 أدوات العرض

I am trying to add more date ranges to the spreadsheet/dashboard filters. This worked in 16, but it does not work in 17.


import { patch } from "@web/core/utils/patch";
import { _t } from "@web/core/l10n/translation";

patch(require('@spreadsheet/helpers/constants'), {
    RELATIVE_DATE_RANGE_TYPES: [
        { type: "year_to_date", description: _t("Year to Date") },
        { type: "last_week", description: _t("Last 7 Days") },
        { type: "last_month", description: _t("Last 30 Days") },
        { type: "last_three_months", description: _t("Last 90 Days") },
        { type: "last_six_months", description: _t("Last 180 Days") },
        { type: "last_year", description: _t("Last 365 Days") },
        { type: "last_three_years", description: _t("Last 3 Years") },
        { type: "o_last_business_day", description: _t("Last Business Day") },
        { type: "o_last_week", description: _t("Last Week") },
        { type: "o_last_month", description: _t("Last Month") },
    ]
});

And I insert in the __manifest__.py after the original:

'assets': {
    'spreadsheet.o_spreadsheet': [
        ('after', 'spreadsheet/static/src/helpers/constants.js', 'spreadsheet_dates/static/src/helpers_constants.js'),
        ('after', 'spreadsheet/static/src/global_filters/helpers.js', 'spreadsheet_dates/static/src/global_filters_helpers.js'),
    ],
}

I see the patch code in the final javascript looking at the browsers code, but it does not seem to apply. (I also patched getRelativeDateDomain to support the new filters, but that does not seem to apply either. I am testing that with just a conole.log)


What am I doing wrong, any help is appreciated.

Thanks,

-Matt

الصورة الرمزية
إهمال
الكاتب أفضل إجابة

I found the issue. I need to prepend the patch files. I believe (and someone can correct me if I wrong for the next person), that odoo.define dependencies parameter will cause the module to queue until after the dependent modules are loaded. So in my case, a module that depends on '@spreadsheet/helpers/constants' was defined before the module '@spreadsheet/helpers/constants' was defined, and then loaded before my patch is loaded.

odoo.define('@spreadsheet/global_filters/components/filter_value/filter_value', ['@spreadsheet/helpers/constants' ], function() {})
odoo.define('@spreadsheet/helpers/constants', function() { RELATIVE_DATE_RANGE_TYPES  = ...)
// @spreadsheet/global_filters/components/filter_value/filter_value is now loaded with the original RELATIVE_DATE_RANGE_TYPES 
odoo.define('@spreadsheet_dates/constants', ['@spreadsheet/helpers/constants' ], function() { RELATIVE_DATE_RANGE_TYPES  = ...)
// Now my patch applies

With my module prepended:

odoo.define('@spreadsheet_dates/constants', ['@spreadsheet/helpers/constants' ], function() { RELATIVE_DATE_RANGE_TYPES  = ...)
odoo.define('@spreadsheet/global_filters/components/filter_value/filter_value', ['@spreadsheet/helpers/constants' ], function() {})
odoo.define('@spreadsheet/helpers/constants', function() { RELATIVE_DATE_RANGE_TYPES  = ...)
// Now my patch applies
// @spreadsheet/global_filters/components/filter_value/filter_value is now loaded with the patched RELATIVE_DATE_RANGE_TYPES 

 

الصورة الرمزية
إهمال
أفضل إجابة

It helped me also, Thank you.

الصورة الرمزية
إهمال
أفضل إجابة

Is it possible to give more details on your solution? I am trying to do the exact same thing as you and cannot get it to work. Are you still using patch in your final solution with your added files loaded after the source files in the manifest?

الصورة الرمزية
إهمال
الكاتب

The files are prepended in the __manifest__.py file:
```
'assets': {
'spreadsheet.o_spreadsheet': [
('prepend', 'spreadsheet_dates/static/src/helpers_constants.js'),
('prepend', 'spreadsheet_dates/static/src/global_filters_helpers.js'),
],
}
```

Then in helpers_contants.js:
```
import { patch } from "@web/core/utils/patch";
import { _t } from "@web/core/l10n/translation";

patch(require('@spreadsheet/helpers/constants'), {
RELATIVE_DATE_RANGE_TYPES: [
{ type: "year_to_date", description: _t("Year to Date") },
{ type: "last_week", description: _t("Last 7 Days") },
{ type: "last_month", description: _t("Last 30 Days") },
{ type: "last_three_months", description: _t("Last 90 Days") },
{ type: "last_six_months", description: _t("Last 180 Days") },
{ type: "last_year", description: _t("Last 365 Days") },
{ type: "last_three_years", description: _t("Last 3 Years") },
{ type: "o_last_business_day", description: _t("Last Business Day") },
{ type: "o_last_week", description: _t("Last Week") },
{ type: "o_last_month", description: _t("Last Month") },
]
});
```

And global_filters_helpers.js
```
import { patch } from "@web/core/utils/patch";
import { serializeDate, serializeDateTime } from "@web/core/l10n/dates";
import { Domain } from "@web/core/domain";

var helpers = require('@spreadsheet/global_filters/helpers');
var _super = helpers.getRelativeDateDomain;
patch(helpers, {
getRelativeDateDomain(now, offset, rangeType, fieldName, fieldType) {
var s = _super(...arguments)
// Do stuff if _super returns none
}
});
```

I got it to work, thank you so much!

المنشورات ذات الصلة الردود أدوات العرض النشاط
2
مارس 15
7252
2
ديسمبر 24
805
0
ديسمبر 24
1091
2
فبراير 23
1596
1
أبريل 25
207