From faae0abe5c76126714e820df9b7c7e143df2bec1 Mon Sep 17 00:00:00 2001 From: Thibault Libioulle Date: Tue, 4 May 2021 10:18:39 +0200 Subject: [PATCH] [REF] project: migrate js modules to es6 PR : #68899 task-2393768 --- addons/project/static/src/js/portal_rating.js | 8 +- .../project/static/src/js/project_calendar.js | 23 +- addons/project/static/src/js/project_form.js | 224 +++++++++--------- .../project/static/src/js/project_kanban.js | 34 ++- addons/project/static/src/js/project_list.js | 204 ++++++++-------- .../project_name_with_subtask_count_widget.js | 59 ++--- .../static/src/js/project_rating_reporting.js | 35 ++- .../src/js/project_task_kanban_examples.js | 55 ++--- 8 files changed, 301 insertions(+), 341 deletions(-) diff --git a/addons/project/static/src/js/portal_rating.js b/addons/project/static/src/js/portal_rating.js index a333b2553aa..55b28cc6a87 100644 --- a/addons/project/static/src/js/portal_rating.js +++ b/addons/project/static/src/js/portal_rating.js @@ -1,8 +1,7 @@ -odoo.define('website_rating_project.rating', function (require) { -'use strict'; +/** @odoo-module **/ -var time = require('web.time'); -var publicWidget = require('web.public.widget'); +import time from 'web.time'; +import publicWidget from 'web.public.widget'; publicWidget.registry.ProjectRatingImage = publicWidget.Widget.extend({ selector: '.o_portal_project_rating .o_rating_image', @@ -29,4 +28,3 @@ publicWidget.registry.ProjectRatingImage = publicWidget.Widget.extend({ return this._super.apply(this, arguments); }, }); -}); diff --git a/addons/project/static/src/js/project_calendar.js b/addons/project/static/src/js/project_calendar.js index 51b3488ee20..e6279f64723 100644 --- a/addons/project/static/src/js/project_calendar.js +++ b/addons/project/static/src/js/project_calendar.js @@ -1,22 +1,19 @@ -odoo.define('project.ProjectCalendarView', function (require) { -"use strict"; +/** @odoo-module **/ -const CalendarController = require('web.CalendarController'); -const CalendarView = require('web.CalendarView'); -const viewRegistry = require('web.view_registry'); +import CalendarController from 'web.CalendarController'; +import CalendarView from 'web.CalendarView'; +import viewRegistry from 'web.view_registry'; const ProjectCalendarController = CalendarController.extend({ _renderButtonsParameters() { - return _.extend({}, this._super(...arguments), {scaleDrop: true}); + return Object.assign({}, this._super(...arguments), {scaleDrop: true}); }, }); -const ProjectCalendarView = CalendarView.extend({ - config: _.extend({}, CalendarView.prototype.config, { - Controller: ProjectCalendarController, - }), - }); +export const ProjectCalendarView = CalendarView.extend({ + config: Object.assign({}, CalendarView.prototype.config, { + Controller: ProjectCalendarController, + }), +}); viewRegistry.add('project_calendar', ProjectCalendarView); -return ProjectCalendarView; -}); diff --git a/addons/project/static/src/js/project_form.js b/addons/project/static/src/js/project_form.js index 2f5f184c689..8289ad235b2 100644 --- a/addons/project/static/src/js/project_form.js +++ b/addons/project/static/src/js/project_form.js @@ -1,122 +1,116 @@ -odoo.define('project.ProjectFormView', function (require) { - "use strict"; +/** @odoo-module **/ - const Dialog = require('web.Dialog'); - const FormView = require('web.FormView'); - const FormController = require('web.FormController'); - const core = require('web.core'); - const { device } = require('web.config'); - const view_registry = require('web.view_registry'); +import Dialog from 'web.Dialog'; +import FormView from 'web.FormView'; +import FormController from 'web.FormController'; +import { bus, _t } from 'web.core'; +import { device } from 'web.config'; +import viewRegistry from 'web.view_registry'; - const _t = core._t; - - const ProjectFormController = FormController.extend({ - init() { - this._super(...arguments); - if (!device.isMobile) { - core.bus.on("DOM_updated", this, () => { - const $editable = this.$el.find('.note-editable'); - if ($editable.length) { - const resizerHeight = this.$el.find('.o_wysiwyg_resizer').outerHeight(); - const newHeight = window.innerHeight - $editable.offset().top - resizerHeight - 1; - $editable.outerHeight(newHeight); - } - }); - } - }, - _getActionMenuItems(state) { - if (!this.archiveEnabled || !state.data['recurrence_id']) { - return this._super(...arguments); - } - - this.archiveEnabled = false; - let actions = this._super(...arguments); - this.archiveEnabled = true; - - if (actions) { - const activeField = this.model.getActiveField(state); - actions.items.other.unshift({ - description: state.data[activeField] ? _t('Archive') : _t('Unarchive'), - callback: () => this._stopRecurrence(state.data['id'], state.data[activeField]?'archive':'unarchive'), - }); - } - - return actions; - }, - - _onDeleteRecord() { - const record = this.model.get(this.handle); - - if(!record.data.recurrence_id) { - return this._super(...arguments); - } - this._stopRecurrence(record.res_id, 'delete'); - }, - - _stopRecurrence(res_id, mode) { - new Dialog(this, { - buttons: [ - { - classes: 'btn-primary', - click: () => { - this._rpc({ - model: 'project.task', - method: 'action_stop_recurrence', - args: [res_id], - }).then(() => { - if (mode === 'archive') { - this._toggleArchiveState(true); - } else if (mode === 'unarchive') { - this._toggleArchiveState(false); - } else if (mode === 'delete') { - this._deleteRecords([this.handle]); - } - }); - }, - close: true, - text: _t('Stop Recurrence'), - }, - { - click: () => { - this._rpc({ - model: 'project.task', - method: 'action_continue_recurrence', - args: [res_id], - }).then(() => { - if (mode === 'archive') { - this._toggleArchiveState(true); - } else if (mode === 'unarchive') { - this._toggleArchiveState(false); - } else if (mode === 'delete') { - this._deleteRecords([this.handle]); - } - }); - }, - close: true, - text: _t('Continue Recurrence'), - }, - { - close: true, - text: _t('Discard'), - } - ], - size: 'medium', - title: _t('Confirmation'), - $content: $('
', { - role: 'alert', - text: _t('It seems that this task is part of a recurrence.'), - }), - }).open(); +const ProjectFormController = FormController.extend({ + init() { + this._super(...arguments); + if (!device.isMobile) { + bus.on("DOM_updated", this, () => { + const $editable = this.$el.find('.note-editable'); + if ($editable.length) { + const resizerHeight = this.$el.find('.o_wysiwyg_resizer').outerHeight(); + const newHeight = window.innerHeight - $editable.offset().top - resizerHeight - 1; + $editable.outerHeight(newHeight); + } + }); + } + }, + _getActionMenuItems(state) { + if (!this.archiveEnabled || !state.data['recurrence_id']) { + return this._super(...arguments); } - }); - const ProjectFormView = FormView.extend({ - config: _.extend({}, FormView.prototype.config, { - Controller: ProjectFormController, - }), - }); + this.archiveEnabled = false; + let actions = this._super(...arguments); + this.archiveEnabled = true; - view_registry.add('project_form', ProjectFormView); + if (actions) { + const activeField = this.model.getActiveField(state); + actions.items.other.unshift({ + description: state.data[activeField] ? _t('Archive') : _t('Unarchive'), + callback: () => this._stopRecurrence(state.data['id'], state.data[activeField] ? 'archive' : 'unarchive'), + }); + } - return ProjectFormView; + return actions; + }, + + _onDeleteRecord() { + const record = this.model.get(this.handle); + + if (!record.data.recurrence_id) { + return this._super(...arguments); + } + this._stopRecurrence(record.res_id, 'delete'); + }, + + _stopRecurrence(resId, mode) { + new Dialog(this, { + buttons: [ + { + classes: 'btn-primary', + click: () => { + this._rpc({ + model: 'project.task', + method: 'action_stop_recurrence', + args: [resId], + }).then(() => { + if (mode === 'archive') { + this._toggleArchiveState(true); + } else if (mode === 'unarchive') { + this._toggleArchiveState(false); + } else if (mode === 'delete') { + this._deleteRecords([this.handle]); + } + }); + }, + close: true, + text: _t('Stop Recurrence'), + }, + { + click: () => { + this._rpc({ + model: 'project.task', + method: 'action_continue_recurrence', + args: [resId], + }).then(() => { + if (mode === 'archive') { + this._toggleArchiveState(true); + } else if (mode === 'unarchive') { + this._toggleArchiveState(false); + } else if (mode === 'delete') { + this._deleteRecords([this.handle]); + } + }); + }, + close: true, + text: _t('Continue Recurrence'), + }, + { + close: true, + text: _t('Discard'), + } + ], + size: 'medium', + title: _t('Confirmation'), + $content: $('
', { + role: 'alert', + text: _t('It seems that this task is part of a recurrence.'), + }), + }).open(); + } }); + +export const ProjectFormView = FormView.extend({ + config: Object.assign({}, FormView.prototype.config, { + Controller: ProjectFormController, + }), +}); + +viewRegistry.add('project_form', ProjectFormView); diff --git a/addons/project/static/src/js/project_kanban.js b/addons/project/static/src/js/project_kanban.js index 41aa7e7b065..1c3de60bc4f 100644 --- a/addons/project/static/src/js/project_kanban.js +++ b/addons/project/static/src/js/project_kanban.js @@ -1,11 +1,10 @@ -odoo.define('project.project_kanban', function (require) { -'use strict'; +/** @odoo-module **/ -var KanbanController = require('web.KanbanController'); -var KanbanView = require('web.KanbanView'); -var KanbanColumn = require('web.KanbanColumn'); -var view_registry = require('web.view_registry'); -var KanbanRecord = require('web.KanbanRecord'); +import KanbanController from 'web.KanbanController'; +import KanbanView from 'web.KanbanView'; +import KanbanColumn from 'web.KanbanColumn'; +import viewRegistry from 'web.view_registry'; +import KanbanRecord from 'web.KanbanRecord'; KanbanRecord.include({ //-------------------------------------------------------------------------- @@ -27,20 +26,20 @@ KanbanRecord.include({ }, }); -var ProjectKanbanController = KanbanController.extend({ - custom_events: _.extend({}, KanbanController.prototype.custom_events, { +export const ProjectKanbanController = KanbanController.extend({ + custom_events: Object.assign({}, KanbanController.prototype.custom_events, { 'kanban_column_delete_wizard': '_onDeleteColumnWizard', }), _onDeleteColumnWizard: function (ev) { ev.stopPropagation(); const self = this; - const column_id = ev.target.id; - var state = this.model.get(this.handle, {raw: true}); + const columnId = ev.target.id; + const state = this.model.get(this.handle, {raw: true}); this._rpc({ model: 'project.task.type', method: 'unlink_wizard', - args: [column_id], + args: [columnId], context: state.getContext(), }).then(function (res) { self.do_action(res); @@ -48,9 +47,9 @@ var ProjectKanbanController = KanbanController.extend({ } }); -var ProjectKanbanView = KanbanView.extend({ - config: _.extend({}, KanbanView.prototype.config, { - Controller: ProjectKanbanController +const ProjectKanbanView = KanbanView.extend({ + config: Object.assign({}, KanbanView.prototype.config, { + Controller: ProjectKanbanController, }), }); @@ -65,7 +64,4 @@ KanbanColumn.include({ } }); -view_registry.add('project_kanban', ProjectKanbanView); - -return ProjectKanbanController; -}); +viewRegistry.add('project_kanban', ProjectKanbanView); diff --git a/addons/project/static/src/js/project_list.js b/addons/project/static/src/js/project_list.js index 48be808876d..b48e5d0f449 100644 --- a/addons/project/static/src/js/project_list.js +++ b/addons/project/static/src/js/project_list.js @@ -1,112 +1,106 @@ -odoo.define('project.ProjectListView', function (require) { - "use strict"; +/** @odoo-module **/ - const Dialog = require('web.Dialog'); - const ListView = require('web.ListView'); - const ListController = require('web.ListController'); - const core = require('web.core'); - const view_registry = require('web.view_registry'); - - const _t = core._t; - - const ProjectListController = ListController.extend({ - _getActionMenuItems(state) { - if(!this.archiveEnabled) { - return this._super(...arguments); - } - - const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id); - this.archiveEnabled = recurringRecords.length == 0; - let actions = this._super(...arguments); - this.archiveEnabled = true; - - if(actions && recurringRecords.length > 0) { - actions.items.other.unshift({ - description: _t('Archive'), - callback: () => this._stopRecurrence(recurringRecords, this.selectedRecords, 'archive'), - }, { - description: _t('Unarchive'), - callback: () => this._toggleArchiveState(false) - }); - } - return actions; - }, - - _onDeleteSelectedRecords() { - const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id); - if(recurringRecords.length > 0) { - return this._stopRecurrence(recurringRecords, this.selectedRecords, 'delete'); - } +import { _t } from 'web.core'; +import Dialog from 'web.Dialog'; +import ListView from 'web.ListView'; +import ListController from 'web.ListController'; +import viewRegistry from 'web.view_registry'; +const ProjectListController = ListController.extend({ + _getActionMenuItems(state) { + if (!this.archiveEnabled) { return this._super(...arguments); - }, - - _stopRecurrence(recurring_res_ids, res_ids, mode) { - let warning; - if (res_ids.length > 1) { - warning = _t('It seems that some tasks are part of a recurrence.'); - } else { - warning = _t('It seems that this task is part of a recurrence.'); - } - return new Dialog(this, { - buttons: [ - { - classes: 'btn-primary', - click: () => { - this._rpc({ - model: 'project.task', - method: 'action_stop_recurrence', - args: [recurring_res_ids], - }).then(() => { - if (mode === 'archive') { - this._toggleArchiveState(true); - } else if (mode === 'delete') { - this._deleteRecords(res_ids); - } - }); - }, - close: true, - text: _t('Stop Recurrence'), - }, - { - click: () => { - this._rpc({ - model: 'project.task', - method: 'action_continue_recurrence', - args: [recurring_res_ids], - }).then(() => { - if (mode === 'archive') { - this._toggleArchiveState(true); - } else if (mode === 'delete') { - this._deleteRecords(res_ids); - } - }); - }, - close: true, - text: _t('Continue Recurrence'), - }, - { - close: true, - text: _t('Discard'), - } - ], - size: 'medium', - title: _t('Confirmation'), - $content: $('
', { - role: 'alert', - text: warning, - }), - }).open(); } - }); - - const ProjectListView = ListView.extend({ - config: _.extend({}, ListView.prototype.config, { - Controller: ProjectListController, - }), - }); - view_registry.add('project_list', ProjectListView); + const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id); + this.archiveEnabled = recurringRecords.length == 0; + let actions = this._super(...arguments); + this.archiveEnabled = true; - return ProjectListView; + if (actions && recurringRecords.length > 0) { + actions.items.other.unshift({ + description: _t('Archive'), + callback: () => this._stopRecurrence(recurringRecords, this.selectedRecords, 'archive'), + }, { + description: _t('Unarchive'), + callback: () => this._toggleArchiveState(false) + }); + } + return actions; + }, + + _onDeleteSelectedRecords() { + const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id); + if (recurringRecords.length > 0) { + return this._stopRecurrence(recurringRecords, this.selectedRecords, 'delete'); + } + + return this._super(...arguments); + }, + + _stopRecurrence(recurringResIds, resIds, mode) { + let warning; + if (resIds.length > 1) { + warning = _t('It seems that some tasks are part of a recurrence.'); + } else { + warning = _t('It seems that this task is part of a recurrence.'); + } + return new Dialog(this, { + buttons: [ + { + classes: 'btn-primary', + click: () => { + this._rpc({ + model: 'project.task', + method: 'action_stop_recurrence', + args: [recurringResIds], + }).then(() => { + if (mode === 'archive') { + this._toggleArchiveState(true); + } else if (mode === 'delete') { + this._deleteRecords(resIds); + } + }); + }, + close: true, + text: _t('Stop Recurrence'), + }, + { + click: () => { + this._rpc({ + model: 'project.task', + method: 'action_continue_recurrence', + args: [recurringResIds], + }).then(() => { + if (mode === 'archive') { + this._toggleArchiveState(true); + } else if (mode === 'delete') { + this._deleteRecords(resIds); + } + }); + }, + close: true, + text: _t('Continue Recurrence'), + }, + { + close: true, + text: _t('Discard'), + } + ], + size: 'medium', + title: _t('Confirmation'), + $content: $('
', { + role: 'alert', + text: warning, + }), + }).open(); + } }); + +export const ProjectListView = ListView.extend({ + config: Object.assign({}, ListView.prototype.config, { + Controller: ProjectListController, + }), +}); + +viewRegistry.add('project_list', ProjectListView); diff --git a/addons/project/static/src/js/project_name_with_subtask_count_widget.js b/addons/project/static/src/js/project_name_with_subtask_count_widget.js index cc2080d52e8..a5adeb94cf0 100644 --- a/addons/project/static/src/js/project_name_with_subtask_count_widget.js +++ b/addons/project/static/src/js/project_name_with_subtask_count_widget.js @@ -1,38 +1,31 @@ -odoo.define('project.name_with_subtask_count', function (require) { - "use strict"; +/** @odoo-module **/ - const fieldRegistry = require('web.field_registry'); - const FieldChar = require('web.basic_fields').FieldChar; +import fieldRegistry from 'web.field_registry'; +import { FieldChar } from 'web.basic_fields'; - const FieldNameWithSubTaskCount = FieldChar.extend({ - /** - * @override - */ - init() { - this._super(...arguments); - if (this.viewType === 'kanban') { - // remove click event handler - const {click, ...events} = this.events; - this.events = events; - } - }, - - /** - * @override - */ - _render() { - let result = this._super.apply(this, arguments); - if (this.recordData.child_text) { - this.$el.append($('') - .addClass("text-muted ml-2") - .text(this.recordData.child_text) - .css('font-weight', 'normal')); - } - return result; +export const FieldNameWithSubTaskCount = FieldChar.extend({ + /** + * @override + */ + init() { + this._super(...arguments); + if (this.viewType === 'kanban') { + // remove click event handler + const {click, ...events} = this.events; + this.events = events; } - }); + }, - fieldRegistry.add('name_with_subtask_count', FieldNameWithSubTaskCount); - - return FieldNameWithSubTaskCount; + _render: function () { + let result = this._super.apply(this, arguments); + if (this.recordData.child_text) { + this.$el.append($('') + .addClass("text-muted ml-2") + .text(this.recordData.child_text) + .css('font-weight', 'normal')); + } + return result; + } }); + +fieldRegistry.add('name_with_subtask_count', FieldNameWithSubTaskCount); diff --git a/addons/project/static/src/js/project_rating_reporting.js b/addons/project/static/src/js/project_rating_reporting.js index 8e393c677f0..737795c917e 100644 --- a/addons/project/static/src/js/project_rating_reporting.js +++ b/addons/project/static/src/js/project_rating_reporting.js @@ -1,24 +1,19 @@ -odoo.define('project.project_rating_reporting', function (require) { -'use strict'; +/** @odoo-module **/ -const core = require('web.core'); -const _t = core._t; +import { _t } from 'web.core'; +import GraphController from 'web.GraphController'; +import GraphView from 'web.GraphView'; +import PivotController from 'web.PivotController'; +import PivotView from 'web.PivotView'; +import viewRegistry from 'web.view_registry'; -const viewRegistry = require('web.view_registry'); - -const PivotController = require('web.PivotController'); -const PivotView = require('web.PivotView'); - -const GraphController = require('web.GraphController'); -const GraphView = require('web.GraphView'); - -var ProjectPivotController = PivotController.extend({ +const ProjectPivotController = PivotController.extend({ /** * @override */ init: function () { this._super.apply(this, arguments); - var measures = JSON.parse(JSON.stringify(this.measures)); + const measures = JSON.parse(JSON.stringify(this.measures)); if ('res_id' in measures) { measures.res_id.string = _t('Task'); } @@ -32,15 +27,15 @@ var ProjectPivotController = PivotController.extend({ }, }); -var ProjectPivotView = PivotView.extend({ - config: _.extend({}, PivotView.prototype.config, { +const ProjectPivotView = PivotView.extend({ + config: Object.assign({}, PivotView.prototype.config, { Controller: ProjectPivotController, }), }); viewRegistry.add('project_rating_pivot', ProjectPivotView); -var ProjectGraphController = GraphController.extend({ +const ProjectGraphController = GraphController.extend({ /** * @override */ @@ -58,12 +53,10 @@ var ProjectGraphController = GraphController.extend({ }, }); -var ProjectGraphView = GraphView.extend({ - config: _.extend({}, GraphView.prototype.config, { +const ProjectGraphView = GraphView.extend({ + config: Object.assign({}, GraphView.prototype.config, { Controller: ProjectGraphController, }), }); viewRegistry.add('project_rating_graph', ProjectGraphView); - -}); diff --git a/addons/project/static/src/js/project_task_kanban_examples.js b/addons/project/static/src/js/project_task_kanban_examples.js index 9cce29fcde1..e7001a0e59b 100644 --- a/addons/project/static/src/js/project_task_kanban_examples.js +++ b/addons/project/static/src/js/project_task_kanban_examples.js @@ -1,21 +1,18 @@ -odoo.define('project.task_kanban_examples', function (require) { -'use strict'; +/** @odoo-module **/ -var core = require('web.core'); -var kanbanExamplesRegistry = require('web.kanban_examples_registry'); +import { _lt } from 'web.core'; +import kanbanExamplesRegistry from 'web.kanban_examples_registry'; -var _lt = core._lt; +const greenBullet = ''; +const redBullet = ''; +const star = ''; +const clock = ''; -var greenBullet = ''; -var redBullet = ''; -var star = ''; -var clock = '' - -var description_activities = escFormat(_lt('%s Use the %s icon to organize your daily activities.'), '
', clock); -var description = escFormat(_lt('Prioritize Tasks by using the %s icon.'+ - '%s Use the %s button to signalize to your colleagues that a task is ready for the next stage.'+ - '%s Use the %s to signalize a problem or a need for discussion on a task.'+ - '%s'), star, '
', greenBullet, '
', redBullet, description_activities); +const descriptionActivities = escFormat(_lt('%s Use the %s icon to organize your daily activities.'), '
', clock); +const description = escFormat(_lt('Prioritize Tasks by using the %s icon.' + + '%s Use the %s button to signalize to your colleagues that a task is ready for the next stage.' + + '%s Use the %s to signalize a problem or a need for discussion on a task.' + + '%s'), star, '
', greenBullet, '
', redBullet, descriptionActivities); /** * Helper function to escape a text before formatting it. @@ -28,7 +25,7 @@ var description = escFormat(_lt('Prioritize Tasks by using the %s icon.'+ * @returns {string} the formatted and escaped string */ function escFormat() { - var args = arguments; + const args = arguments; return { toString: function () { args[0] = _.escape(args[0]); @@ -43,56 +40,56 @@ kanbanExamplesRegistry.add('project', { examples:[{ name: _lt('Software Development'), columns: [_lt('Backlog'), _lt('Specifications'), _lt('Development'), _lt('Tests'), _lt('Delivered')], - description: escFormat(_lt('Prioritize Tasks by using the %s icon.'+ - '%s Use the %s button to inform your colleagues that a task is ready for the next stage.'+ - '%s Use the %s to indicate a problem or a need for discussion on a task.'+ - '%s'), star, '
', greenBullet, '
', redBullet, description_activities), + description: escFormat(_lt('Prioritize Tasks by using the %s icon.' + + '%s Use the %s button to inform your colleagues that a task is ready for the next stage.' + + '%s Use the %s to indicate a problem or a need for discussion on a task.' + + '%s'), star, '
', greenBullet, '
', redBullet, descriptionActivities), bullets: [greenBullet, redBullet, star], }, { name: _lt('Agile Scrum'), columns: [_lt('Backlog'), _lt('Sprint Backlog'), _lt('Sprint in Progress'), _lt('Sprint Complete'), _lt('Old Completed Sprint')], - description: escFormat(_lt('Waiting for the next stage: use %s and %s bullets. %s'), greenBullet, redBullet, description_activities), + description: escFormat(_lt('Waiting for the next stage: use %s and %s bullets. %s'), greenBullet, redBullet, descriptionActivities), bullets: [greenBullet, redBullet], }, { name: _lt('Digital Marketing'), columns: [_lt('Ideas'), _lt('Researching'), _lt('Writing'), _lt('Editing'), _lt('Done')], description: escFormat(_lt('Everyone can propose ideas, and the Editor marks the best ones ' + 'as %s. Attach all documents or links to the task directly, to have all information about ' + - 'a research centralized. %s'), greenBullet, description_activities), + 'a research centralized. %s'), greenBullet, descriptionActivities), bullets: [greenBullet, redBullet], }, { name: _lt('Customer Feedback'), columns: [_lt('New'), _lt('In development'), _lt('Done'), _lt('Refused')], description: escFormat(_lt('Customers propose feedbacks by email; Odoo creates tasks ' + 'automatically, and you can communicate on the task directly. Your managers decide which ' + - 'feedback is accepted %s and which feedback is moved to the %s column. %s'), greenBullet, _lt('"Refused"'), description_activities), + 'feedback is accepted %s and which feedback is moved to the %s column. %s'), greenBullet, _lt('"Refused"'), descriptionActivities), bullets: [greenBullet, redBullet], }, { name: _lt('Getting Things Done (GTD)'), columns: [_lt('Inbox'), _lt('Today'), _lt('This Week'), _lt('This Month'), _lt('Long Term')], description: escFormat(_lt('Fill your Inbox easily with the email gateway. Periodically review your ' + 'Inbox and schedule tasks by moving them to others columns. Every day, you review the ' + - '%s column to move important tasks %s. Every Monday, you review the %s column. %s'), _lt('"This Week"'), _lt('"Today"'), _lt('"This Month"'), description_activities), + '%s column to move important tasks %s. Every Monday, you review the %s column. %s'), _lt('"This Week"'), _lt('"Today"'), _lt('"This Month"'), descriptionActivities), }, { name: _lt('Consulting'), columns: [_lt('New Projects'), _lt('Resources Allocation'), _lt('In Progress'), _lt('Done')], - description: escFormat(_lt('Manage the lifecycle of your project using the kanban view. Add newly acquired projects, assign them and use the %s and %s to define if the project is ready for the next step. %s'), greenBullet, redBullet, description_activities), + description: escFormat(_lt('Manage the lifecycle of your project using the kanban view. Add newly acquired projects, assign them and use the %s and %s to define if the project is ready for the next step. %s'), greenBullet, redBullet, descriptionActivities), bullets: [greenBullet, redBullet], }, { name: _lt('Research Project'), columns: [_lt('Brainstorm'), _lt('Research'), _lt('Draft'), _lt('Final Document')], - description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, description_activities), + description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, descriptionActivities), bullets: [greenBullet, redBullet], }, { name: _lt('Website Redesign'), columns: [_lt('Page Ideas'), _lt('Copywriting'), _lt('Design'), _lt('Live')], - description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, description_activities), + description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, descriptionActivities), }, { name: _lt('T-shirt Printing'), columns: [_lt('New Orders'), _lt('Logo Design'), _lt('To Print'), _lt('Done')], description: escFormat(_lt('Communicate with customers on the task using the email gateway. ' + 'Attach logo designs to the task, so that information flow from designers to the workers ' + - 'who print the t-shirt. Organize priorities amongst orders %s using the icon. %s'), star, description_activities), + 'who print the t-shirt. Organize priorities amongst orders %s using the icon. %s'), star, descriptionActivities), bullets: [star], }, { name: _lt('Design'), @@ -116,5 +113,3 @@ kanbanExamplesRegistry.add('project', { bullets: [greenBullet, redBullet, star, clock], }], }); - -});