summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_model.js1
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_renderer.js19
-rw-r--r--addons/web/static/src/scss/web_calendar.scss4
-rw-r--r--addons/web/static/src/xml/web_calendar.xml1
-rw-r--r--addons/web/static/tests/views/calendar_tests.js110
5 files changed, 125 insertions, 10 deletions
diff --git a/addons/web/static/src/js/views/calendar/calendar_model.js b/addons/web/static/src/js/views/calendar/calendar_model.js
index 0fe12456e46..2f2c6339ac6 100644
--- a/addons/web/static/src/js/views/calendar/calendar_model.js
+++ b/addons/web/static/src/js/views/calendar/calendar_model.js
@@ -728,6 +728,7 @@ return AbstractModel.extend({
r.allDay = true;
r.start = date_start.format('YYYY-MM-DD');
r.end = date_stop.startOf('day').format('YYYY-MM-DD');
+ r.showTime = true;
}
return r;
diff --git a/addons/web/static/src/js/views/calendar/calendar_renderer.js b/addons/web/static/src/js/views/calendar/calendar_renderer.js
index a22f39ec4ec..f563f793203 100644
--- a/addons/web/static/src/js/views/calendar/calendar_renderer.js
+++ b/addons/web/static/src/js/views/calendar/calendar_renderer.js
@@ -422,7 +422,6 @@ return AbstractRenderer.extend({
element.find('.fc-content').after($('<div/>', {class: 'fc-bg'}));
}
- // For month view: Show background for all-day/multidate events only
if (view.name === 'month' && event.record) {
var start = event.r_start || event.start;
var end = event.r_end || event.end;
@@ -430,7 +429,12 @@ return AbstractRenderer.extend({
// note: add & remove 1 min to avoid issues with 00:00
var isSameDayEvent = start.clone().add(1, 'minute').isSame(end.clone().subtract(1, 'minute'), 'day');
if (!event.record.allday && isSameDayEvent) {
+ // For month view: do not show background for non allday, single day events
element.addClass('o_cw_nobg');
+ if (event.showTime && !self.hideTime) {
+ const displayTime = start.format(self._getDbTimeFormat());
+ element.find('.fc-content .fc-time').text(displayTime);
+ }
}
}
@@ -662,6 +666,16 @@ return AbstractRenderer.extend({
return Promise.resolve(prom);
},
/**
+ * Returns the time format from database parameters (only hours and minutes).
+ * FIXME: this looks like a weak heuristic...
+ *
+ * @private
+ * @returns {string}
+ */
+ _getDbTimeFormat: function () {
+ return _t.database.parameters.time_format.search('%H') !== -1 ? 'HH:mm' : 'hh:mm a';
+ },
+ /**
* Prepare context to display in the popover.
*
* @private
@@ -686,8 +700,7 @@ return AbstractRenderer.extend({
// Do not display timing if the event occur across multiple days. Otherwise use user's timing preferences
if (!this.hideTime && !eventData.record.allday && isSameDayEvent) {
- // Fetch user's preferences
- var dbTimeFormat = _t.database.parameters.time_format.search('%H') != -1 ? 'HH:mm': 'hh:mm a';
+ var dbTimeFormat = this._getDbTimeFormat();
context.eventTime.time = start.clone().format(dbTimeFormat) + ' - ' + end.clone().format(dbTimeFormat);
diff --git a/addons/web/static/src/scss/web_calendar.scss b/addons/web/static/src/scss/web_calendar.scss
index 1a5bdf5c078..8ba1157f003 100644
--- a/addons/web/static/src/scss/web_calendar.scss
+++ b/addons/web/static/src/scss/web_calendar.scss
@@ -277,11 +277,9 @@ $o-cw-filter-avatar-size: 20px;
.fc-event {
margin: 0 3px 2px;
- .o_event_title {
- @include text-truncate();
- }
.fc-content {
+ @include text-truncate();
margin: 4px 4px 3px;
}
diff --git a/addons/web/static/src/xml/web_calendar.xml b/addons/web/static/src/xml/web_calendar.xml
index 80b60d2902a..4166b5e123e 100644
--- a/addons/web/static/src/xml/web_calendar.xml
+++ b/addons/web/static/src/xml/web_calendar.xml
@@ -13,6 +13,7 @@
<t t-name="calendar-box">
<div t-att-style="typeof color === 'string' ? ('background-color:' + color) + ';' : ''" t-attf-class="#{record.is_highlighted ? 'o_event_hightlight' : ''} #{typeof color === 'number' ? _.str.sprintf('o_calendar_color_%s', color) : 'o_calendar_color_1'}">
+ <span class="fc-time"/>
<div class="o_event_title" t-esc="record.display_name"/>
</div>
</t>
diff --git a/addons/web/static/tests/views/calendar_tests.js b/addons/web/static/tests/views/calendar_tests.js
index 0a3c31474e1..0bdddb7bfae 100644
--- a/addons/web/static/tests/views/calendar_tests.js
+++ b/addons/web/static/tests/views/calendar_tests.js
@@ -1732,6 +1732,108 @@ QUnit.module('Views', {
assert.strictEqual($('#ui-datepicker-div:empty').length, 0, "should have a clean body");
});
+ QUnit.test('show start time of single day event for month mode', async function (assert) {
+ assert.expect(4);
+
+ var calendar = await createCalendarView({
+ View: CalendarView,
+ model: 'event',
+ data: this.data,
+ arch:
+ '<calendar class="o_calendar_test" ' +
+ 'string="Events" ' +
+ 'date_start="start" ' +
+ 'date_stop="stop" ' +
+ 'all_day="allday" ' +
+ 'mode="month"/>',
+ archs: archs,
+ viewOptions: {
+ initialDate: initialDate,
+ },
+ session: {
+ getTZOffset: function () {
+ return -240;
+ },
+ },
+ });
+
+ assert.strictEqual(calendar.$('.fc-event:contains(event 2) .fc-content .fc-time').text(), "06:55",
+ "should have a correct time 06:55 AM in month mode");
+ assert.strictEqual(calendar.$('.fc-event:contains(event 4) .fc-content .fc-time').text(), "",
+ "should not display a time for all day event");
+ assert.strictEqual(calendar.$('.fc-event:contains(event 5) .fc-content .fc-time').text(), "",
+ "should not display a time for multiple days event");
+ // switch to week mode
+ await testUtils.dom.click(calendar.$('.o_calendar_button_week'));
+ assert.strictEqual(calendar.$('.fc-event:contains(event 2) .fc-content .fc-time').text(), "",
+ "should not show time in week mode as week mode already have time on y-axis");
+
+ calendar.destroy();
+ });
+
+ QUnit.test('start time should not shown for date type field', async function (assert) {
+ assert.expect(1);
+
+ this.data.event.fields.start.type = "date";
+
+ var calendar = await createCalendarView({
+ View: CalendarView,
+ model: 'event',
+ data: this.data,
+ arch:
+ '<calendar class="o_calendar_test" ' +
+ 'string="Events" ' +
+ 'date_start="start" ' +
+ 'date_stop="stop" ' +
+ 'mode="month"/>',
+ archs: archs,
+ viewOptions: {
+ initialDate: initialDate,
+ },
+ session: {
+ getTZOffset: function () {
+ return -240;
+ },
+ },
+ });
+
+ assert.strictEqual(calendar.$('.fc-event:contains(event 2) .fc-content .fc-time').text(), "",
+ "should not show time for date type field");
+
+ calendar.destroy();
+ });
+
+ QUnit.test('start time should not shown in month mode if hide_time is true', async function (assert) {
+ assert.expect(1);
+
+ var calendar = await createCalendarView({
+ View: CalendarView,
+ model: 'event',
+ data: this.data,
+ arch:
+ '<calendar class="o_calendar_test" ' +
+ 'string="Events" ' +
+ 'date_start="start" ' +
+ 'date_stop="stop" ' +
+ 'hide_time="True" ' +
+ 'mode="month"/>',
+ archs: archs,
+ viewOptions: {
+ initialDate: initialDate,
+ },
+ session: {
+ getTZOffset: function () {
+ return -240;
+ },
+ },
+ });
+
+ assert.strictEqual(calendar.$('.fc-event:contains(event 2) .fc-content .fc-time').text(), "",
+ "should not show time for hide_time attribute");
+
+ calendar.destroy();
+ });
+
QUnit.test('readonly date_start field', async function (assert) {
assert.expect(4);
@@ -2523,11 +2625,11 @@ QUnit.module('Views', {
},
});
- assert.strictEqual(calendar.$('.fc-event:eq(0)').text().trim(), "event 1");
+ assert.strictEqual(calendar.$('.fc-event:eq(0)').text().replace(/\s/g, ''), "08:00event1");
await testUtils.dom.click(calendar.$('.fc-event:eq(0)'));
assert.strictEqual(calendar.$('.o_field_widget[name="start"]').text(), "12/09/2016 08:00:00");
- assert.strictEqual(calendar.$('.fc-event:eq(5)').text().trim(), "event 6");
+ assert.strictEqual(calendar.$('.fc-event:eq(5)').text().replace(/\s/g, ''), "16:00event6");
await testUtils.dom.click(calendar.$('.fc-event:eq(5)'));
assert.strictEqual(calendar.$('.o_field_widget[name="start"]').text(), "12/16/2016 16:00:00");
@@ -2538,11 +2640,11 @@ QUnit.module('Views', {
);
await testUtils.nextTick();
- assert.strictEqual(calendar.$('.fc-event:first').text().trim(), "event 6");
+ assert.strictEqual(calendar.$('.fc-event:eq(0)').text().replace(/\s/g, ''), "16:00event6");
await testUtils.dom.click(calendar.$('.fc-event:eq(0)'));
assert.strictEqual(calendar.$('.o_field_widget[name="start"]').text(), "11/27/2016 16:00:00");
- assert.strictEqual(calendar.$('.fc-event:eq(1)').text().trim(), "event 1");
+ assert.strictEqual(calendar.$('.fc-event:eq(1)').text().replace(/\s/g, ''), "08:00event1");
await testUtils.dom.click(calendar.$('.fc-event:eq(1)'));
assert.strictEqual(calendar.$('.o_field_widget[name="start"]').text(), "12/09/2016 08:00:00");