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