From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- .../static/src/js/views/activity/activity_model.js | 124 +++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 addons/mail/static/src/js/views/activity/activity_model.js (limited to 'addons/mail/static/src/js/views/activity/activity_model.js') diff --git a/addons/mail/static/src/js/views/activity/activity_model.js b/addons/mail/static/src/js/views/activity/activity_model.js new file mode 100644 index 00000000..cfb9e36a --- /dev/null +++ b/addons/mail/static/src/js/views/activity/activity_model.js @@ -0,0 +1,124 @@ +odoo.define('mail.ActivityModel', function (require) { +'use strict'; + +const BasicModel = require('web.BasicModel'); +const session = require('web.session'); + +const ActivityModel = BasicModel.extend({ + + //-------------------------------------------------------------------------- + // Public + //-------------------------------------------------------------------------- + /** + * Add the following (activity specific) keys when performing a `get` on the + * main list datapoint: + * - activity_types + * - activity_res_ids + * - grouped_activities + * + * @override + */ + __get: function () { + var result = this._super.apply(this, arguments); + if (result && result.model === this.modelName && result.type === 'list') { + _.extend(result, this.additionalData, {getKanbanActivityData: this.getKanbanActivityData}); + } + return result; + }, + /** + * @param {Object} activityGroup + * @param {integer} resId + * @returns {Object} + */ + getKanbanActivityData(activityGroup, resId) { + return { + data: { + activity_ids: { + model: 'mail.activity', + res_ids: activityGroup.ids, + }, + activity_state: activityGroup.state, + closest_deadline: activityGroup.o_closest_deadline, + }, + fields: { + activity_ids: {}, + activity_state: { + selection: [ + ['overdue', "Overdue"], + ['today', "Today"], + ['planned', "Planned"], + ], + }, + }, + fieldsInfo: {}, + model: this.model, + type: 'record', + res_id: resId, + getContext: function () { + return {}; + }, + }; + }, + /** + * @override + * @param {Array[]} params.domain + */ + __load: function (params) { + this.originalDomain = _.extend([], params.domain); + params.domain.push(['activity_ids', '!=', false]); + this.domain = params.domain; + this.modelName = params.modelName; + params.groupedBy = []; + var def = this._super.apply(this, arguments); + return Promise.all([def, this._fetchData()]).then(function (result) { + return result[0]; + }); + }, + /** + * @override + * @param {Array[]} [params.domain] + */ + __reload: function (handle, params) { + if (params && 'domain' in params) { + this.originalDomain = _.extend([], params.domain); + params.domain.push(['activity_ids', '!=', false]); + this.domain = params.domain; + } + if (params && 'groupBy' in params) { + params.groupBy = []; + } + var def = this._super.apply(this, arguments); + return Promise.all([def, this._fetchData()]).then(function (result) { + return result[0]; + }); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Fetch activity data. + * + * @private + * @returns {Promise} + */ + _fetchData: function () { + var self = this; + return this._rpc({ + model: "mail.activity", + method: 'get_activity_data', + kwargs: { + res_model: this.modelName, + domain: this.domain, + context: session.user_context, + } + }).then(function (result) { + self.additionalData = result; + }); + }, +}); + +return ActivityModel; + +}); -- cgit v1.2.3