summaryrefslogtreecommitdiff
path: root/addons/resource/static/src/js/section_fields_backend.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/resource/static/src/js/section_fields_backend.js')
-rw-r--r--addons/resource/static/src/js/section_fields_backend.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/addons/resource/static/src/js/section_fields_backend.js b/addons/resource/static/src/js/section_fields_backend.js
new file mode 100644
index 00000000..e96757c5
--- /dev/null
+++ b/addons/resource/static/src/js/section_fields_backend.js
@@ -0,0 +1,89 @@
+
+odoo.define('resource.section_backend', function (require) {
+// The goal of this file is to contain JS hacks related to allowing
+// section on resource calendar.
+
+"use strict";
+var FieldOne2Many = require('web.relational_fields').FieldOne2Many;
+var fieldRegistry = require('web.field_registry');
+var ListRenderer = require('web.ListRenderer');
+
+var SectionListRenderer = ListRenderer.extend({
+ /**
+ * We want section to take the whole line (except handle and trash)
+ * to look better and to hide the unnecessary fields.
+ *
+ * @override
+ */
+ _renderBodyCell: function (record, node, index, options) {
+ var $cell = this._super.apply(this, arguments);
+
+ var isSection = record.data.display_type === 'line_section';
+
+ if (isSection) {
+ if (node.attrs.widget === "handle") {
+ return $cell;
+ } else if (node.attrs.name === "name") {
+ var nbrColumns = this._getNumberOfCols();
+ if (this.handleField) {
+ nbrColumns--;
+ }
+ if (this.addTrashIcon) {
+ nbrColumns--;
+ }
+ $cell.attr('colspan', nbrColumns);
+ } else {
+ return $cell.addClass('o_hidden');
+ }
+ }
+
+ return $cell;
+ },
+ /**
+ * We add the o_is_{display_type} class to allow custom behaviour both in JS and CSS.
+ *
+ * @override
+ */
+ _renderRow: function (record, index) {
+ var $row = this._super.apply(this, arguments);
+
+ if (record.data.display_type) {
+ $row.addClass('o_is_' + record.data.display_type);
+ }
+
+ return $row;
+ },
+ /**
+ * We want to add .o_section_list_view on the table to have stronger CSS.
+ *
+ * @override
+ * @private
+ */
+ _renderView: function () {
+ var self = this;
+ return this._super.apply(this, arguments).then(function () {
+ self.$('.o_list_table').addClass('o_section_list_view');
+ });
+ },
+});
+
+// We create a custom widget because this is the cleanest way to do it:
+// to be sure this custom code will only impact selected fields having the widget
+// and not applied to any other existing ListRenderer.
+var SectionFieldOne2Many = FieldOne2Many.extend({
+ /**
+ * We want to use our custom renderer for the list.
+ *
+ * @override
+ */
+ _getRenderer: function () {
+ if (this.view.arch.tag === 'tree') {
+ return SectionListRenderer;
+ }
+ return this._super.apply(this, arguments);
+ },
+});
+
+fieldRegistry.add('section_one2many', SectionFieldOne2Many);
+
+});