From de607a7296a02eac47611cc6f3fd40eb31587f5a Mon Sep 17 00:00:00 2001 From: Chenyun Yang Date: Thu, 13 Apr 2023 11:14:58 +0000 Subject: [PATCH] [IMP] spreadsheet: add YTD in period filters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds YTD (year to date) filter to global period filters in dashboard. YTD filter gets the data from Jan 1st of the current year to today (included). The unit of its offset is year. task 3215947 closes odoo/odoo#118466 Signed-off-by: Lucas Lefèvre (lul) --- .../static/src/global_filters/helpers.js | 6 ++++++ .../spreadsheet/static/src/helpers/constants.js | 1 + .../global_filters/global_filter_helper_test.js | 15 +++++++++++++++ .../global_filters/global_filters_model_test.js | 8 ++++++++ 4 files changed, 30 insertions(+) diff --git a/addons/spreadsheet/static/src/global_filters/helpers.js b/addons/spreadsheet/static/src/global_filters/helpers.js index 5b5571de392..5eb9648eeb8 100644 --- a/addons/spreadsheet/static/src/global_filters/helpers.js +++ b/addons/spreadsheet/static/src/global_filters/helpers.js @@ -75,6 +75,12 @@ export function getRelativeDateDomain(now, offset, rangeType, fieldName, fieldTy let endDate = now.endOf("day"); let startDate = endDate; switch (rangeType) { + case "year_to_date": { + const offsetParam = { years: offset }; + startDate = now.startOf("year").plus(offsetParam); + endDate = now.endOf("day").plus(offsetParam); + break; + } case "last_week": { const offsetParam = { days: 7 * offset }; endDate = endDate.plus(offsetParam); diff --git a/addons/spreadsheet/static/src/helpers/constants.js b/addons/spreadsheet/static/src/helpers/constants.js index 476c8b992f8..30d2daeaeb7 100644 --- a/addons/spreadsheet/static/src/helpers/constants.js +++ b/addons/spreadsheet/static/src/helpers/constants.js @@ -19,6 +19,7 @@ export const MEASURE_STYLE = { fillColor: "#f2f2f2", textColor: "#756f6f" }; export const UNTITLED_SPREADSHEET_NAME = _lt("Untitled spreadsheet"); export const RELATIVE_DATE_RANGE_TYPES = [ + { type: "year_to_date", description: _lt("Year to Date") }, { type: "last_week", description: _lt("Last 7 Days") }, { type: "last_month", description: _lt("Last 30 Days") }, { type: "last_three_months", description: _lt("Last 90 Days") }, diff --git a/addons/spreadsheet/static/tests/global_filters/global_filter_helper_test.js b/addons/spreadsheet/static/tests/global_filters/global_filter_helper_test.js index 240e0a6e7fd..02b2ad1f11b 100644 --- a/addons/spreadsheet/static/tests/global_filters/global_filter_helper_test.js +++ b/addons/spreadsheet/static/tests/global_filters/global_filter_helper_test.js @@ -8,6 +8,12 @@ import { const { DateTime } = luxon; QUnit.module("spreadsheet > Global filters helpers", {}, () => { + QUnit.test("getRelativeDateDomain > year_to_date (year to date)", async function (assert) { + const now = DateTime.fromISO("2022-05-16"); + const domain = getRelativeDateDomain(now, 0, "year_to_date", "field", "date"); + assertDateDomainEqual(assert, "field", "2022-01-01", "2022-05-16", domain); + }); + QUnit.test("getRelativeDateDomain > last_week (last 7 days)", async function (assert) { const now = DateTime.fromISO("2022-05-16"); const domain = getRelativeDateDomain(now, 0, "last_week", "field", "date"); @@ -108,6 +114,15 @@ QUnit.module("spreadsheet > Global filters helpers", {}, () => { } ); + QUnit.test( + "getRelativeDateDomain > with offset > year_to_date (year to date)", + async function (assert) { + const now = DateTime.fromISO("2022-05-16"); + const domain = getRelativeDateDomain(now, -1, "year_to_date", "field", "date"); + assertDateDomainEqual(assert, "field", "2021-01-01", "2021-05-16", domain); + } + ); + QUnit.test( "getRelativeDateDomain > with offset > last_week (last 7 days)", async function (assert) { diff --git a/addons/spreadsheet/static/tests/global_filters/global_filters_model_test.js b/addons/spreadsheet/static/tests/global_filters/global_filters_model_test.js index 6184817cfdc..e30fff098f2 100644 --- a/addons/spreadsheet/static/tests/global_filters/global_filters_model_test.js +++ b/addons/spreadsheet/static/tests/global_filters/global_filters_model_test.js @@ -1287,6 +1287,10 @@ QUnit.module("spreadsheet > Global filters model", {}, () => { assert.equal(getDateDomainDurationInDays(computedDomain), 7); assertDateDomainEqual(assert, "date", "2022-05-10", "2022-05-16", computedDomain); + await setGlobalFilterValue(model, { id: "42", value: "year_to_date" }); + computedDomain = model.getters.getPivotComputedDomain("1"); + assertDateDomainEqual(assert, "date", "2022-01-01", "2022-05-16", computedDomain); + await setGlobalFilterValue(model, { id: "42", value: "last_month" }); computedDomain = model.getters.getPivotComputedDomain("1"); assert.equal(getDateDomainDurationInDays(computedDomain), 30); @@ -1334,6 +1338,10 @@ QUnit.module("spreadsheet > Global filters model", {}, () => { assert.equal(getDateDomainDurationInDays(computedDomain), 7); assertDateDomainEqual(assert, "date", "2022-05-03", "2022-05-09", computedDomain); + await setGlobalFilterValue(model, { id: "42", value: "year_to_date" }); + computedDomain = model.getters.getPivotComputedDomain("1"); + assertDateDomainEqual(assert, "date", "2021-01-01", "2021-05-16", computedDomain); + await setGlobalFilterValue(model, { id: "42", value: "last_month" }); computedDomain = model.getters.getPivotComputedDomain("1"); assert.equal(getDateDomainDurationInDays(computedDomain), 30);