PURPOSE Make sure the Rainbowman animation is rightly triggered whichever way the user marks the opportunity as won. Especially relevant for the onboarding as we want to show the first rainbowman to users completing the tour. SPECIFICATIONS Now the rainbowman and its finely-tuned message are displayed to the user when he uses the statusbar, mark lead as won using action buttons or drag and drop a lead in the won stage in kanban view. LINKS Task ID-2287758 PR #54553
57 lines
3.5 KiB
JavaScript
57 lines
3.5 KiB
JavaScript
odoo.define('crm.MockServer', function (require) {
|
|
'use strict';
|
|
|
|
var MockServer = require('web.MockServer');
|
|
|
|
MockServer.include({
|
|
//--------------------------------------------------------------------------
|
|
// Private
|
|
//--------------------------------------------------------------------------
|
|
|
|
/**
|
|
* @override
|
|
* @private
|
|
*/
|
|
async _performRpc(route, args) {
|
|
if (args.model === 'crm.lead' && args.method === 'get_rainbowman_message') {
|
|
let message = false;
|
|
const records = this.data['crm.lead'].records;
|
|
const record = records.find(r => r.id === args.args[0][0]);
|
|
const won_stage = this.data['crm.stage'].records.find(s => s.is_won);
|
|
if (record.stage_id === won_stage.id && record.user_id && record.team_id && record.planned_revenue > 0) {
|
|
const now = moment();
|
|
let query_result = {};
|
|
// Total won
|
|
query_result['total_won'] = records.filter(r => r.stage_id === won_stage.id && r.user_id === record.user_id).length;
|
|
// Max team 30 days
|
|
const recordsTeam30 = records.filter(r => r.stage_id === won_stage.id && r.team_id === record.team_id && (!r.date_closed || moment.duration(now.diff(moment(r.date_closed))).days() <= 30));
|
|
query_result['max_team_30'] = Math.max(...recordsTeam30.map(r => r.planned_revenue));
|
|
// Max team 7 days
|
|
const recordsTeam7 = records.filter(r => r.stage_id === won_stage.id && r.team_id === record.team_id && (!r.date_closed || moment.duration(now.diff(moment(r.date_closed))).days() <= 7));
|
|
query_result['max_team_7'] = Math.max(...recordsTeam7.map(r => r.planned_revenue));
|
|
// Max User 30 days
|
|
const recordsUser30 = records.filter(r => r.stage_id === won_stage.id && r.user_id === record.user_id && (!r.date_closed || moment.duration(now.diff(moment(r.date_closed))).days() <= 30));
|
|
query_result['max_user_30'] = Math.max(...recordsUser30.map(r => r.planned_revenue));
|
|
// Max User 7 days
|
|
const recordsUser7 = records.filter(r => r.stage_id === won_stage.id && r.user_id === record.user_id && (!r.date_closed || moment.duration(now.diff(moment(r.date_closed))).days() <= 7));
|
|
query_result['max_user_7'] = Math.max(...recordsUser7.map(r => r.planned_revenue));
|
|
|
|
if (query_result.total_won === 1) {
|
|
message = "Go, go, go! Congrats for your first deal.";
|
|
} else if (query_result.max_team_30 === record.planned_revenue) {
|
|
message = "Boom! Team record for the past 30 days.";
|
|
} else if (query_result.max_team_7 === record.planned_revenue) {
|
|
message = "Yeah! Deal of the last 7 days for the team.";
|
|
} else if (query_result.max_user_30 === record.planned_revenue) {
|
|
message = "You just beat your personal record for the past 30 days.";
|
|
} else if (query_result.max_user_7 === record.planned_revenue) {
|
|
message = "You just beat your personal record for the past 7 days.";
|
|
}
|
|
}
|
|
return message;
|
|
}
|
|
return this._super(...arguments);
|
|
},
|
|
});
|
|
});
|