1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
odoo.define('mail.ActivityController', function (require) {
"use strict";
require('mail.Activity');
var BasicController = require('web.BasicController');
var core = require('web.core');
var field_registry = require('web.field_registry');
var ViewDialogs = require('web.view_dialogs');
var KanbanActivity = field_registry.get('kanban_activity');
var _t = core._t;
var ActivityController = BasicController.extend({
custom_events: _.extend({}, BasicController.prototype.custom_events, {
empty_cell_clicked: '_onEmptyCell',
send_mail_template: '_onSendMailTemplate',
schedule_activity: '_onScheduleActivity',
}),
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
* @override
* @param parent
* @param model
* @param renderer
* @param {Object} params
* @param {String} params.title The title used in schedule activity dialog
*/
init: function (parent, model, renderer, params) {
this._super.apply(this, arguments);
this.title = params.title;
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
* Overridden to remove the pager as it makes no sense in this view.
*
* @override
*/
_getPagingInfo: function () {
return null;
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* @private
*/
_onScheduleActivity: function () {
var self = this;
var state = this.model.get(this.handle);
new ViewDialogs.SelectCreateDialog(this, {
res_model: state.model,
domain: this.model.originalDomain,
title: _.str.sprintf(_t("Search: %s"), this.title),
no_create: !this.activeActions.create,
disable_multiple_selection: true,
context: state.context,
on_selected: function (record) {
var fakeRecord = state.getKanbanActivityData({}, record[0]);
var widget = new KanbanActivity(self, 'activity_ids', fakeRecord, {});
widget.scheduleActivity();
},
}).open();
},
/**
* @private
* @param {OdooEvent} ev
*/
_onEmptyCell: function (ev) {
var state = this.model.get(this.handle);
this.do_action({
type: 'ir.actions.act_window',
res_model: 'mail.activity',
view_mode: 'form',
view_type: 'form',
views: [[false, 'form']],
target: 'new',
context: {
default_res_id: ev.data.resId,
default_res_model: state.model,
default_activity_type_id: ev.data.activityTypeId,
},
res_id: false,
}, {
on_close: this.reload.bind(this),
});
},
/**
* @private
* @param {CustomEvent} ev
*/
_onSendMailTemplate: function (ev) {
var templateID = ev.data.templateID;
var activityTypeID = ev.data.activityTypeID;
var state = this.model.get(this.handle);
var groupedActivities = state.grouped_activities;
var resIDS = [];
Object.keys(groupedActivities).forEach(function (resID) {
var activityByType = groupedActivities[resID];
var activity = activityByType[activityTypeID];
if (activity) {
resIDS.push(parseInt(resID));
}
});
this._rpc({
model: this.model.modelName,
method: 'activity_send_mail',
args: [resIDS, templateID],
});
},
});
return ActivityController;
});
|