diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/crm/static/src | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/crm/static/src')
| -rw-r--r-- | addons/crm/static/src/img/autofill.gif | bin | 0 -> 15971 bytes | |||
| -rw-r--r-- | addons/crm/static/src/img/generate-leads.gif | bin | 0 -> 19967 bytes | |||
| -rw-r--r-- | addons/crm/static/src/img/mapview-toggle.gif | bin | 0 -> 35546 bytes | |||
| -rw-r--r-- | addons/crm/static/src/img/pipeline-progress.gif | bin | 0 -> 42184 bytes | |||
| -rw-r--r-- | addons/crm/static/src/img/probability-rate.gif | bin | 0 -> 33059 bytes | |||
| -rw-r--r-- | addons/crm/static/src/js/crm_form.js | 91 | ||||
| -rw-r--r-- | addons/crm/static/src/js/crm_kanban.js | 52 | ||||
| -rw-r--r-- | addons/crm/static/src/js/systray_activity_menu.js | 57 | ||||
| -rw-r--r-- | addons/crm/static/src/js/tours/crm.js | 94 |
9 files changed, 294 insertions, 0 deletions
diff --git a/addons/crm/static/src/img/autofill.gif b/addons/crm/static/src/img/autofill.gif Binary files differnew file mode 100644 index 00000000..d6e6ad6d --- /dev/null +++ b/addons/crm/static/src/img/autofill.gif diff --git a/addons/crm/static/src/img/generate-leads.gif b/addons/crm/static/src/img/generate-leads.gif Binary files differnew file mode 100644 index 00000000..1fc56ceb --- /dev/null +++ b/addons/crm/static/src/img/generate-leads.gif diff --git a/addons/crm/static/src/img/mapview-toggle.gif b/addons/crm/static/src/img/mapview-toggle.gif Binary files differnew file mode 100644 index 00000000..b611d456 --- /dev/null +++ b/addons/crm/static/src/img/mapview-toggle.gif diff --git a/addons/crm/static/src/img/pipeline-progress.gif b/addons/crm/static/src/img/pipeline-progress.gif Binary files differnew file mode 100644 index 00000000..f97de03f --- /dev/null +++ b/addons/crm/static/src/img/pipeline-progress.gif diff --git a/addons/crm/static/src/img/probability-rate.gif b/addons/crm/static/src/img/probability-rate.gif Binary files differnew file mode 100644 index 00000000..57517833 --- /dev/null +++ b/addons/crm/static/src/img/probability-rate.gif diff --git a/addons/crm/static/src/js/crm_form.js b/addons/crm/static/src/js/crm_form.js new file mode 100644 index 00000000..40845647 --- /dev/null +++ b/addons/crm/static/src/js/crm_form.js @@ -0,0 +1,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, + }; +}); diff --git a/addons/crm/static/src/js/crm_kanban.js b/addons/crm/static/src/js/crm_kanban.js new file mode 100644 index 00000000..dbc50064 --- /dev/null +++ b/addons/crm/static/src/js/crm_kanban.js @@ -0,0 +1,52 @@ +odoo.define('crm.crm_kanban', function (require) { + "use strict"; + + /** + * This Kanban Model make sure we display a rainbowman + * message when a lead is won after we moved it in the + * correct column and when it's grouped by stage_id (default). + */ + + var KanbanModel = require('web.KanbanModel'); + var KanbanView = require('web.KanbanView'); + var viewRegistry = require('web.view_registry'); + + var CrmKanbanModel = KanbanModel.extend({ + /** + * Check if the kanban view is grouped by "stage_id" before checking if the lead is won + * and displaying a possible rainbowman message. + * @override + */ + moveRecord: async function (recordID, groupID, parentID) { + var result = await this._super(...arguments); + if (this.localData[parentID].groupedBy[0] === this.defaultGroupedBy[0]) { + const message = await this._rpc({ + model: 'crm.lead', + method : 'get_rainbowman_message', + args: [[parseInt(this.localData[recordID].res_id)]], + }); + if (message) { + this.trigger_up('show_effect', { + message: message, + type: 'rainbow_man', + }); + } + } + return result; + }, + }); + + var CrmKanbanView = KanbanView.extend({ + config: _.extend({}, KanbanView.prototype.config, { + Model: CrmKanbanModel, + }), + }); + + viewRegistry.add('crm_kanban', CrmKanbanView); + + return { + CrmKanbanModel: CrmKanbanModel, + CrmKanbanView: CrmKanbanView, + }; + +}); diff --git a/addons/crm/static/src/js/systray_activity_menu.js b/addons/crm/static/src/js/systray_activity_menu.js new file mode 100644 index 00000000..8a1f71b0 --- /dev/null +++ b/addons/crm/static/src/js/systray_activity_menu.js @@ -0,0 +1,57 @@ +odoo.define('crm.systray.ActivityMenu', function (require) { +"use strict"; + +var ActivityMenu = require('mail.systray.ActivityMenu'); + +ActivityMenu.include({ + + //-------------------------------------------------- + // Private + //-------------------------------------------------- + + /** + * @override + */ + _getViewsList(model) { + if (model === "crm.lead") { + return [[false, 'list'], [false, 'kanban'], + [false, 'form'], [false, 'calendar'], + [false, 'pivot'], [false, 'graph'], + [false, 'activity'] + ]; + } + return this._super(...arguments); + }, + + //----------------------------------------- + // Handlers + //----------------------------------------- + + /** + * @private + * @override + */ + _onActivityFilterClick: function (event) { + // fetch the data from the button otherwise fetch the ones from the parent (.o_mail_preview). + var data = _.extend({}, $(event.currentTarget).data(), $(event.target).data()); + var context = {}; + if (data.res_model === "crm.lead") { + if (data.filter === 'my') { + context['search_default_activities_overdue'] = 1; + context['search_default_activities_today'] = 1; + } else { + context['search_default_activities_' + data.filter] = 1; + } + // Necessary because activity_ids of mail.activity.mixin has auto_join + // So, duplicates are faking the count and "Load more" doesn't show up + context['force_search_count'] = 1; + this.do_action('crm.crm_lead_action_my_activities', { + additional_context: context, + clear_breadcrumbs: true, + }); + } else { + this._super.apply(this, arguments); + } + }, +}); +}); diff --git a/addons/crm/static/src/js/tours/crm.js b/addons/crm/static/src/js/tours/crm.js new file mode 100644 index 00000000..8c2e1350 --- /dev/null +++ b/addons/crm/static/src/js/tours/crm.js @@ -0,0 +1,94 @@ +odoo.define('crm.tour', function(require) { +"use strict"; + +var core = require('web.core'); +var tour = require('web_tour.tour'); + +var _t = core._t; + +tour.register('crm_tour', { + url: "/web", + rainbowManMessage: _t("Congrats, best of luck catching such big fish! :)"), + sequence: 10, +}, [tour.stepUtils.showAppsMenuItem(), { + trigger: '.o_app[data-menu-xmlid="crm.crm_menu_root"]', + content: _t('Ready to boost your sales? Let\'s have a look at your <b>Pipeline</b>.'), + position: 'bottom', + edition: 'community', +}, { + trigger: '.o_app[data-menu-xmlid="crm.crm_menu_root"]', + content: _t('Ready to boost your sales? Let\'s have a look at your <b>Pipeline</b>.'), + position: 'bottom', + edition: 'enterprise', +}, { + trigger: '.o-kanban-button-new', + extra_trigger: '.o_opportunity_kanban', + content: _t("<b>Create your first opportunity.</b>"), + position: 'bottom', +}, { + trigger: ".o_kanban_quick_create .o_field_widget[name='partner_id']", + content: _t('<b>Write a few letters</b> to look for a company, or create a new one.'), + position: "top", + run: function (actions) { + actions.text("Brandon Freeman", this.$anchor.find("input")); + }, +}, { + trigger: ".ui-menu-item > a", + auto: true, + in_modal: false, +}, { + trigger: ".o_kanban_quick_create .o_kanban_add", + content: _t("Now, <b>add your Opportunity</b> to your Pipeline."), + position: "bottom", +}, { + trigger: ".o_opportunity_kanban .o_kanban_group:first-child .o_kanban_record:last-child .oe_kanban_content", + extra_trigger: ".o_opportunity_kanban", + content: _t("<b>Drag & drop opportunities</b> between columns as you progress in your sales cycle."), + position: "right", + run: "drag_and_drop .o_opportunity_kanban .o_kanban_group:eq(2) ", +}, { + trigger: ".o_kanban_record:not(.o_updating) .o_activity_color_default", + extra_trigger: ".o_opportunity_kanban", + content: _t("Looks like nothing is planned. :(<br><br><i>Tip : Schedule activities to keep track of everything you have to do!</i>"), + position: "bottom", +}, { + trigger: ".o_schedule_activity", + extra_trigger: ".o_opportunity_kanban", + content: _t("Let's <b>Schedule an Activity.</b>"), + position: "bottom", + width: 200, +}, { + trigger: '.modal-footer button[name="action_close_dialog"]', + content: _t("All set. Let’s <b>Schedule</b> it."), + position: "top", // dot NOT move to bottom, it would cause a resize flicker, see task-2476595 + run: function (actions) { + actions.auto('.modal-footer button[special=cancel]'); + }, +}, { + id: "drag_opportunity_to_won_step", + trigger: ".o_opportunity_kanban .o_kanban_record:last-child", + content: _t("Drag your opportunity to <b>Won</b> when you get the deal. Congrats !"), + position: "bottom", + run: "drag_and_drop .o_opportunity_kanban .o_kanban_group:eq(3) ", +}, { + trigger: ".o_kanban_record", + extra_trigger: ".o_opportunity_kanban", + content: _t("Let’s have a look at an Opportunity."), + position: "right", + run: function (actions) { + actions.auto(".o_kanban_record"); + }, +}, { + trigger: ".o_lead_opportunity_form .o_statusbar_status", + content: _t("This bar also allows you to switch stage."), + position: "bottom" +}, { + trigger: ".breadcrumb-item:not(.active):first", + content: _t("Click on the breadcrumb to go back to the Pipeline."), + position: "bottom", + run: function (actions) { + actions.auto(".breadcrumb-item:not(.active):last"); + } +}]); + +}); |
