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
|
odoo.define("crm.crm_form", function (require) {
"use strict";
/**
* This From Controller makes sure we display a rainbowman message
* when the stage is won, even when we click on the statusbar.
* When the stage of a lead is changed and data are saved, we check
* if the lead is won and if a message should be displayed to the user
* with a rainbowman like when the user click on the button "Mark Won".
*/
var FormController = require('web.FormController');
var FormView = require('web.FormView');
var viewRegistry = require('web.view_registry');
var CrmFormController = FormController.extend({
/**
* Main method used when saving the record hitting the "Save" button.
* We check if the stage_id field was altered and if we need to display a rainbowman
* message.
*
* @override
*/
saveRecord: function () {
return this._super(...arguments).then((modifiedFields) => {
if (modifiedFields.indexOf('stage_id') !== -1) {
this._checkRainbowmanMessage(this.renderer.state.res_id)
}
});
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
* Apply change may be called with 'event.data.force_save' set to True.
* This typically happens when directly clicking in the statusbar widget on a new stage.
* If it's the case, we check for a modified stage_id field and if we need to display a
* rainbowman message.
*
* @param {string} dataPointID
* @param {Object} changes
* @param {OdooEvent} event
* @override
* @private
*/
_applyChanges: function (dataPointID, changes, event) {
return this._super(...arguments).then(() => {
if (event.data.force_save && 'stage_id' in changes) {
this._checkRainbowmanMessage(parseInt(event.target.res_id));
}
});
},
/**
* When updating a crm.lead, through direct use of the status bar or when saving the
* record, we check for a rainbowman message to display.
*
* (see Widget docstring for more information).
*
* @param {integer} recordId
*/
_checkRainbowmanMessage: async function(recordId) {
const message = await this._rpc({
model: 'crm.lead',
method : 'get_rainbowman_message',
args: [[recordId]],
});
if (message) {
this.trigger_up('show_effect', {
message: message,
type: 'rainbow_man',
});
}
}
});
var CrmFormView = FormView.extend({
config: _.extend({}, FormView.prototype.config, {
Controller: CrmFormController,
}),
});
viewRegistry.add('crm_form', CrmFormView);
return {
CrmFormController: CrmFormController,
CrmFormView: CrmFormView,
};
});
|