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); });