summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorHiral Bhavsar <hbh@odoo.com>2018-02-21 18:50:38 +0530
committerMartin Geubelle <mge@odoo.com>2018-04-25 09:50:44 +0200
commit5c651a09e12b4657bfe64e37e353c0a86f40a0ce (patch)
treedf9bfb43b9273966d4a77fc21614a77de0ac02d9 /addons/web/static/src
parentb192431aeecc59b48898ce9c6f276b82d65cbfa6 (diff)
[IMP] web: Kanban: allow to archive/restore column records
This feature has been removed in rev. odoo/odoo@e533085 but this commit reintroduces it. It was considered as "too dangerous" for new users. Instead of removing the feature, a confirmation request has been added to warn the user about his potentially harmful action. The same warning has also been added in List view when archiving records. Task 60393 Co-authored-by: Mohammed Shekha <msh@openerp.com>
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_column.js24
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_controller.js22
-rw-r--r--addons/web/static/src/js/views/list/list_controller.js8
-rw-r--r--addons/web/static/src/xml/kanban.xml4
4 files changed, 57 insertions, 1 deletions
diff --git a/addons/web/static/src/js/views/kanban/kanban_column.js b/addons/web/static/src/js/views/kanban/kanban_column.js
index e66601816c2..5dfcbce01c8 100644
--- a/addons/web/static/src/js/views/kanban/kanban_column.js
+++ b/addons/web/static/src/js/views/kanban/kanban_column.js
@@ -27,6 +27,8 @@ var KanbanColumn = Widget.extend({
'click .o_kanban_quick_add': '_onAddQuickCreate',
'click .o_kanban_load_more': '_onLoadMore',
'click .o_kanban_toggle_fold': '_onToggleFold',
+ 'click .o_column_archive_records': '_onArchiveRecords',
+ 'click .o_column_unarchive_records': '_onUnarchiveRecords'
},
/**
* @override
@@ -355,6 +357,28 @@ var KanbanColumn = Widget.extend({
ev.data.callback(record.$el, record.state.data);
});
},
+ /**
+ * @private
+ * @param {MouseEvent} event
+ */
+ _onArchiveRecords: function (event) {
+ event.preventDefault();
+ Dialog.confirm(this, _t("Are you sure that you want to archive all the records from this column?"), {
+ confirm_callback: this.trigger_up.bind(this, 'kanban_column_records_toggle_active', {
+ archive: true,
+ }),
+ });
+ },
+ /**
+ * @private
+ * @param {MouseEvent} event
+ */
+ _onUnarchiveRecords: function (event) {
+ event.preventDefault();
+ this.trigger_up('kanban_column_records_toggle_active', {
+ archive: false,
+ });
+ }
});
return KanbanColumn;
diff --git a/addons/web/static/src/js/views/kanban/kanban_controller.js b/addons/web/static/src/js/views/kanban/kanban_controller.js
index 986fff3a53e..86f1cb72589 100644
--- a/addons/web/static/src/js/views/kanban/kanban_controller.js
+++ b/addons/web/static/src/js/views/kanban/kanban_controller.js
@@ -30,6 +30,7 @@ var KanbanController = BasicController.extend({
kanban_load_more: '_onLoadMore',
kanban_load_records: '_onLoadColumnRecords',
column_toggle_fold: '_onToggleColumn',
+ kanban_column_records_toggle_active: '_onToggleActiveRecords',
}),
/**
* @override
@@ -443,6 +444,27 @@ var KanbanController = BasicController.extend({
ev.data.force_save = true;
this._applyChanges(ev.target.db_id, changes, ev);
},
+ /**
+ * Allow the user to archive/restore all the records of a column.
+ *
+ * @private
+ * @param {OdooEvent} event
+ */
+ _onToggleActiveRecords: function (event) {
+ var self = this;
+ var active = !event.data.archive;
+ var column = event.target;
+ var recordIds = _.pluck(column.records, 'db_id');
+ if (recordIds.length) {
+ this.model
+ .toggleActive(recordIds, active, column.db_id)
+ .then(function (dbID) {
+ var data = self.model.get(dbID);
+ self.renderer.updateColumn(dbID, data);
+ self._updateEnv();
+ });
+ }
+ },
});
return KanbanController;
diff --git a/addons/web/static/src/js/views/list/list_controller.js b/addons/web/static/src/js/views/list/list_controller.js
index b42da9665ad..ae1a8f7305b 100644
--- a/addons/web/static/src/js/views/list/list_controller.js
+++ b/addons/web/static/src/js/views/list/list_controller.js
@@ -10,6 +10,7 @@ odoo.define('web.ListController', function (require) {
var core = require('web.core');
var BasicController = require('web.BasicController');
var DataExport = require('web.DataExport');
+var Dialog = require('web.Dialog');
var pyeval = require('web.pyeval');
var Sidebar = require('web.Sidebar');
@@ -136,6 +137,7 @@ var ListController = BasicController.extend({
* @param {jQuery Node} $node
*/
renderSidebar: function ($node) {
+ var self = this;
if (this.hasSidebar) {
var other = [{
label: _t("Export"),
@@ -144,7 +146,11 @@ var ListController = BasicController.extend({
if (this.archiveEnabled) {
other.push({
label: _t("Archive"),
- callback: this._onToggleArchiveState.bind(this, true)
+ callback: function () {
+ Dialog.confirm(self, _t("Are you sure that you want to archive all the selected records?"), {
+ confirm_callback: self._onToggleArchiveState.bind(self, true),
+ });
+ }
});
other.push({
label: _t("Unarchive"),
diff --git a/addons/web/static/src/xml/kanban.xml b/addons/web/static/src/xml/kanban.xml
index 23af895b8ea..9c3fac6574a 100644
--- a/addons/web/static/src/xml/kanban.xml
+++ b/addons/web/static/src/xml/kanban.xml
@@ -22,6 +22,10 @@
<li t-if="widget.editable and widget.id"><a class="o_column_edit" href="#">Edit Stage</a></li>
<li t-if="widget.deletable and widget.id"><a class="o_column_delete" href="#">Delete</a></li>
</t>
+ <t t-if="widget.has_active_field">
+ <li><a class="o_column_archive_records" href="#">Archive All</a></li>
+ <li><a class="o_column_unarchive_records" href="#">Restore All</a></li>
+ </t>
</ul>
</span>
<span t-if="widget.quick_create" class="o_kanban_quick_add"><i class="fa fa-plus"/></span>