diff --git a/addons/calendar/static/tests/tours/calendar_tour.js b/addons/calendar/static/tests/tours/calendar_tour.js
index b524cdc9b2f..7b23d6c12ac 100644
--- a/addons/calendar/static/tests/tours/calendar_tour.js
+++ b/addons/calendar/static/tests/tours/calendar_tour.js
@@ -1,156 +1,161 @@
/** @odoo-module **/
- import { registry } from "@web/core/registry";
- import { stepUtils } from "@web_tour/tour_service/tour_utils";
+import { registry } from "@web/core/registry";
+import { stepUtils } from "@web_tour/tour_service/tour_utils";
- const todayDate = function() {
- let now = new Date();
- let year = now.getFullYear();
- let month = String(now.getMonth() + 1).padStart(2, '0');
- let day = String(now.getDate()).padStart(2, '0');
+const todayDate = function () {
+ const now = new Date();
+ const year = now.getFullYear();
+ const month = String(now.getMonth() + 1).padStart(2, "0");
+ const day = String(now.getDate()).padStart(2, "0");
- return `${month}/${day}/${year} 10:00:00`;
- };
+ return `${month}/${day}/${year} 10:00:00`;
+};
- registry.category("web_tour.tours").add('calendar_appointments_hour_tour', {
- url: '/web',
- test: true,
- steps: () => [stepUtils.showAppsMenuItem(),
+registry.category("web_tour.tours").add("calendar_appointments_hour_tour", {
+ url: "/web",
+ test: true,
+ steps: () => [
+ stepUtils.showAppsMenuItem(),
{
trigger: '.o_app[data-menu-xmlid="calendar.mail_menu_calendar"]',
- content: 'Open Calendar',
- run: 'click',
+ content: "Open Calendar",
+ run: "click",
},
{
- trigger: '.o-calendar-button-new',
- content: 'Create a new event',
- run: 'click',
+ trigger: ".o-calendar-button-new",
+ content: "Create a new event",
+ run: "click",
},
{
- trigger: '#name_0',
- content: 'Give a name to the new event',
- run: 'text TEST EVENT',
+ trigger: "#name_0",
+ content: "Give a name to the new event",
+ run: "text TEST EVENT",
},
{
- trigger: '#start_0',
- content: 'Give a date to the new event',
+ trigger: "#start_0",
+ content: "Give a date to the new event",
run: `text ${todayDate()}`,
},
{
- trigger: '.fa-cloud-upload',
- content: 'Save the new event',
- run: 'click',
+ trigger: ".fa-cloud-upload",
+ content: "Save the new event",
+ run: "click",
},
{
- trigger: '.o_back_button',
- content: 'Go back to Calendar view',
- run: 'click',
+ trigger: ".o_back_button",
+ content: "Go back to Calendar view",
+ run: "click",
},
{
trigger: '.dropdown-toggle:contains("Week")',
- content: 'Click to change calendar view',
- run: 'click',
+ content: "Click to change calendar view",
+ run: "click",
},
{
trigger: '.dropdown-item:contains("Month")',
- content: 'Change the calendar view to Month',
- run: 'click',
+ content: "Change the calendar view to Month",
+ run: "click",
},
{
- trigger: '.fc-day-header:contains("Monday")',
- content: 'Change the calendar view to week',
+ trigger: '.fc-day-header:contains("Mon")',
+ content: "Check the day is properly displayed",
},
{
trigger: '.fc-time:contains("10:00")',
- content: 'Check the time is properly displayed',
+ content: "Check the time is properly displayed",
},
{
trigger: '.o_event_title:contains("TEST EVENT")',
- content: 'Check the event title',
+ content: "Check the event title",
isCheck: true,
},
- ]});
+ ],
+});
- registry.category("web_tour.tours").add('test_calendar_delete_tour', {
- test: true,
- steps: () => [
+registry.category("web_tour.tours").add("test_calendar_delete_tour", {
+ test: true,
+ steps: () => [
{
- content: 'Select filter (everybody)',
+ content: "Select filter (everybody)",
trigger: 'div[data-value="all"] input',
},
{
- content: 'Click on the event (focus + waiting)',
+ content: "Click on the event (focus + waiting)",
trigger: 'a .fc-content:contains("Test Event")',
async run() {
$('a .fc-content:contains("Test Event")').click();
await new Promise((r) => setTimeout(r, 1000));
$('a .fc-content:contains("Test Event")').click();
- }
+ },
},
{
- content: 'Delete the event',
- trigger: '.o_cw_popover_delete',
+ content: "Delete the event",
+ trigger: ".o_cw_popover_delete",
},
{
- content: 'Validate the deletion',
- trigger:'button:contains("Delete")',
+ content: "Validate the deletion",
+ trigger: 'button:contains("Delete")',
async run() {
$('button:contains("Delete")').click();
await new Promise((r) => setTimeout(r, 1000));
- }
+ },
},
- ]});
-
- registry.category("web_tour.tours").add('test_calendar_decline_tour', {
- test: true,
- steps: () => [
+ ],
+});
+
+registry.category("web_tour.tours").add("test_calendar_decline_tour", {
+ test: true,
+ steps: () => [
{
- content: 'Click on the event (focus + waiting)',
+ content: "Click on the event (focus + waiting)",
trigger: 'a .fc-content:contains("Test Event")',
async run() {
$('a .fc-content:contains("Test Event")').click();
await new Promise((r) => setTimeout(r, 1000));
$('a .fc-content:contains("Test Event")').click();
- }
+ },
},
{
- content: 'Delete the event',
- trigger: '.o_cw_popover_delete',
+ content: "Delete the event",
+ trigger: ".o_cw_popover_delete",
},
{
- content: 'Wait declined status',
- trigger: '.o_attendee_status_declined',
+ content: "Wait declined status",
+ trigger: ".o_attendee_status_declined",
isCheck: true,
},
- ]});
-
- registry.category("web_tour.tours").add('test_calendar_decline_with_everybody_filter_tour', {
- test: true,
- steps: () => [
+ ],
+});
+
+registry.category("web_tour.tours").add("test_calendar_decline_with_everybody_filter_tour", {
+ test: true,
+ steps: () => [
{
- content: 'Select filter (everybody)',
+ content: "Select filter (everybody)",
trigger: 'div[data-value="all"] input',
},
{
- content: 'Click on the event (focus + waiting)',
+ content: "Click on the event (focus + waiting)",
trigger: 'a .fc-content:contains("Test Event")',
async run() {
$('a .fc-content:contains("Test Event")').click();
await new Promise((r) => setTimeout(r, 1000));
$('a .fc-content:contains("Test Event")').click();
- }
+ },
},
{
- content: 'Delete the event',
- trigger: '.o_cw_popover_delete',
+ content: "Delete the event",
+ trigger: ".o_cw_popover_delete",
},
{
- content: 'Select filter (everybody)',
+ content: "Select filter (everybody)",
trigger: 'div[data-value="all"] input',
},
{
- content: 'Wait declined status',
- trigger: '.o_attendee_status_declined',
+ content: "Wait declined status",
+ trigger: ".o_attendee_status_declined",
isCheck: true,
},
- ]});
+ ],
+});
diff --git a/addons/hr_homeworking/static/src/calendar/common/calendar_common_renderer.js b/addons/hr_homeworking/static/src/calendar/common/calendar_common_renderer.js
index 09cba22b3f2..fdef67f320b 100644
--- a/addons/hr_homeworking/static/src/calendar/common/calendar_common_renderer.js
+++ b/addons/hr_homeworking/static/src/calendar/common/calendar_common_renderer.js
@@ -3,39 +3,13 @@
import { AttendeeCalendarCommonRenderer } from "@calendar/views/attendee_calendar/common/attendee_calendar_common_renderer";
import { patch } from "@web/core/utils/patch";
import { renderToString } from "@web/core/utils/render";
+
const { DateTime } = luxon;
patch(AttendeeCalendarCommonRenderer.prototype, {
get options(){
- let a = Object.assign(super.options, {
- columnHeaderHtml: function(date) {
- const datetime = DateTime.fromJSDate(date);
- if (this.props.model.scale === 'week'){
- return (
- "
" +
- datetime.toFormat("ccc dd") +
- "
" +
- renderToString(this.constructor.HeaderCalendarTemplate, {
- date: date,
- today: new Date(),
- })
- );
- }
- if (this.props.model.scale === 'day'){
- return (
- "" +
- datetime.toFormat("LLLL dd, yyyy") +
- "
" +
- renderToString(this.constructor.HeaderCalendarTemplate, {
- date: date,
- today: new Date(),
- })
- );
- }
- return "" + datetime.toFormat("cccc") + "
";
- }
- });
- return Object.assign(a, {
+ return {
+ ...super.options,
eventOrder: function(event1, event2){
if (event1.extendedProps.worklocation){
return -1;
@@ -46,8 +20,8 @@ patch(AttendeeCalendarCommonRenderer.prototype, {
return event1.title.localeCompare(event2.title);
}
}
- }
- })
+ },
+ };
},
fcEventToRecord(event) {
const res = super.fcEventToRecord(...arguments);
@@ -133,7 +107,8 @@ patch(AttendeeCalendarCommonRenderer.prototype, {
return;
const content = renderToString(this.constructor.ButtonWorklocationTemplate, {})
const {children } = new DOMParser().parseFromString(content, "text/html").body
- box.appendChild(...children)
+ box.appendChild(...children);
+ info.homework = true;
}
super.onDayRender(...arguments);
},
@@ -205,7 +180,7 @@ patch(AttendeeCalendarCommonRenderer.prototype, {
}
},
onDateClick(info){
- if (info.jsEvent && info.jsEvent.target.tagName ==="BUTTON") {
+ if (info.jsEvent && info.jsEvent.target.closest(".btnWorklocation")) {
info.homework = true
this.props.createRecord(this.fcEventToRecord(info));
} else {
@@ -215,5 +190,5 @@ patch(AttendeeCalendarCommonRenderer.prototype, {
});
AttendeeCalendarCommonRenderer.WorklocationTemplate = "hr.homeworking.CalendarCommonRenderer.worklocation";
-AttendeeCalendarCommonRenderer.HeaderCalendarTemplate = "hr.homeworking.CalendarCommonRenderer.buttonWorklocation";
AttendeeCalendarCommonRenderer.ButtonWorklocationTemplate = "hr.homeworking.CalendarCommonRenderer.buttonWorklocation";
+AttendeeCalendarCommonRenderer.headerTemplate = "hr_homeworking.CalendarCommonRendererHeader";
diff --git a/addons/hr_homeworking/static/src/calendar/common/calender_common_renderer.xml b/addons/hr_homeworking/static/src/calendar/common/calender_common_renderer.xml
index 0c82ec67777..40517b6a681 100644
--- a/addons/hr_homeworking/static/src/calendar/common/calender_common_renderer.xml
+++ b/addons/hr_homeworking/static/src/calendar/common/calender_common_renderer.xml
@@ -31,6 +31,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/web/static/tests/views/calendar/calendar_common_renderer_tests.js b/addons/web/static/tests/views/calendar/calendar_common_renderer_tests.js
index 170b957a7b5..2d517ddd1f5 100644
--- a/addons/web/static/tests/views/calendar/calendar_common_renderer_tests.js
+++ b/addons/web/static/tests/views/calendar/calendar_common_renderer_tests.js
@@ -67,7 +67,7 @@ QUnit.module("CalendarView - CommonRenderer", ({ beforeEach }) => {
QUnit.test("Day: check date", async (assert) => {
await start({ model: { scale: "day" } });
assert.containsOnce(target, ".fc-day-header");
- assert.strictEqual(target.querySelector(".fc-day-header").textContent, "July 16, 2021");
+ assert.strictEqual(target.querySelector(".fc-day-header").textContent, "Fri 16");
});
QUnit.test("Day: click all day slot", async (assert) => {
diff --git a/addons/web/static/tests/views/calendar/calendar_view_tests.js b/addons/web/static/tests/views/calendar/calendar_view_tests.js
index 2b9774e95ad..4ca1bf2978f 100644
--- a/addons/web/static/tests/views/calendar/calendar_view_tests.js
+++ b/addons/web/static/tests/views/calendar/calendar_view_tests.js
@@ -3994,7 +3994,7 @@ QUnit.module("Views", ({ beforeEach }) => {
);
assert.strictEqual(
target.querySelector(".o_calendar_renderer .fc-day-header").textContent,
- "January 30, 2016",
+ "Sat 30",
"should display day passed in the context"
);
});
@@ -4030,12 +4030,12 @@ QUnit.module("Views", ({ beforeEach }) => {
const dayHeaders = target.querySelectorAll(".fc-day-header");
assert.strictEqual(
dayHeaders[0].textContent,
- "Sunday",
+ "Sun 1",
"The first day of the week should be Sunday"
);
assert.strictEqual(
dayHeaders[dayHeaders.length - 1].textContent,
- "Saturday",
+ "Sat 7",
"The last day of the week should be Saturday"
);
@@ -4085,12 +4085,12 @@ QUnit.module("Views", ({ beforeEach }) => {
const dayHeaders = target.querySelectorAll(".fc-day-header");
assert.strictEqual(
dayHeaders[0].textContent,
- "Monday",
+ "Mon 26",
"The first day of the week should be Monday"
);
assert.strictEqual(
dayHeaders[dayHeaders.length - 1].textContent,
- "Sunday",
+ "Sun 1",
"The last day of the week should be Sunday"
);