From 65608a109ca83014ed8580e61c563179daaf6976 Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Wed, 20 Dec 2023 18:42:35 +0100 Subject: [PATCH] [UPD] next and previous date widget --- static/src/js/canvas.js | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/static/src/js/canvas.js b/static/src/js/canvas.js index 2a63ca8..b8639ad 100644 --- a/static/src/js/canvas.js +++ b/static/src/js/canvas.js @@ -748,14 +748,28 @@ odoo.define("oacc_portal_overview_cdc.canvas", function (require) { this._onChangePeriod("next"); }, _onChangePeriod: function (type) { - const delta_days = moment(this.last_day, "DD/MM/YYYY") - moment(this.first_day, "DD/MM/YYYY"); + const first_day = moment(this.first_day, "DD/MM/YYYY"); + const last_day = moment(this.last_day, "DD/MM/YYYY"); + const delta_days = last_day - first_day; + let delta_month = 0; + + if (first_day.isSame(first_day.clone().startOf('month'), 'day') && last_day.isSame(last_day.clone().endOf('month'), 'day')) { + delta_month = last_day.month() - first_day.month() + 1; + } + if (type == "previous") { // Compare for first day - let next_first = moment(this.first_day, "DD/MM/YYYY").subtract(delta_days).subtract(1, 'd'); + let next_first = first_day.clone().subtract(delta_days).subtract(1, 'd'); let moment_min = moment(this.minDate, "DD/MM/YYYY"); - - this.first_day = moment_min < next_first ? next_first.format("DD/MM/YYYY") : moment_min.format("DD/MM/YYYY"); this.last_day = moment(this.last_day, "DD/MM/YYYY").subtract(delta_days).subtract(1, 'd').format("DD/MM/YYYY"); + + if (delta_month > 0) { + next_first = first_day.subtract(delta_month, 'months'); + this.last_day = last_day.subtract(delta_month, 'months').endOf('month').format("DD/MM/YYYY"); + } + + this.first_day = moment.max([next_first, moment_min]).format("DD/MM/YYYY"); + this.date_range_picker .data("daterangepicker") .setStartDate(this.first_day); @@ -765,11 +779,15 @@ odoo.define("oacc_portal_overview_cdc.canvas", function (require) { } if (type == "next") { // Compare for last day - let next_last = moment(this.last_day, "DD/MM/YYYY").add(delta_days).add(1, 'd'); + let next_last = last_day.clone().add(delta_days).add(1, 'd'); let moment_max = moment(this.maxDate, "DD/MM/YYYY"); + if (delta_month > 0) { + next_last = last_day.add(delta_month, 'months').endOf('month'); + this.first_day = first_day.add(1, 'months').format("DD/MM/YYYY"); + } + + this.last_day = moment.min([next_last, moment_max]).format("DD/MM/YYYY"); - this.first_day = moment(this.first_day, "DD/MM/YYYY").add(delta_days).subtract(1, 'd').format("DD/MM/YYYY"); - this.last_day = moment_max > next_last ? next_last.format("DD/MM/YYYY") : moment_max.format("DD/MM/YYYY"); this.date_range_picker .data("daterangepicker") .setStartDate(this.first_day); -- GitLab