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