From c109f32a6734b5d624f0b54407acab0c8f4f8f8a Mon Sep 17 00:00:00 2001 From: hparfr Date: Fri, 15 Mar 2019 16:56:27 +0100 Subject: [PATCH 1/6] Refactor dial button --- base_phone/static/src/js/phone_widget.js | 130 +++++++++++++---------- 1 file changed, 73 insertions(+), 57 deletions(-) diff --git a/base_phone/static/src/js/phone_widget.js b/base_phone/static/src/js/phone_widget.js index a39bde7..ad67d6a 100644 --- a/base_phone/static/src/js/phone_widget.js +++ b/base_phone/static/src/js/phone_widget.js @@ -8,76 +8,92 @@ odoo.define('base_phone.updatedphone_widget', function (require) { var core = require('web.core'); - var web_client = require('web.web_client'); - var basicFields = require('web.basic_fields'); - var InputField = basicFields.InputField; - var originalFieldPhone = basicFields.FieldPhone; - var fieldRegistry = require('web.field_registry'); - var QWeb = core.qweb; + var FieldPhone = require('web.basic_fields').FieldPhone; var _t = core._t; - var updatedFieldPhone = originalFieldPhone.extend({ + FieldPhone.include({ /* Always enable phone link tel:, not only on small screens */ _canCall: function () { return true; }, + showDialButton: function () { + // must be inherited by ipbx specific modules + // and set to true + return false; + }, _renderReadonly: function() { + // create a link to trigger action on server + // this link will be after the this._super(); - if (this.mode == "readonly") { - var self = this; - var phone_num = this.value; - this.$el.filter('a[href^="tel:"]').off('click'); - this.$el.filter('a[href^="tel:"]') - .on('click', function(ev) { - self.do_notify( - _t('Click2dial started'), - _t('Unhook your ringing phone'), - false); - var arg = { - 'phone_number': phone_num, - 'click2dial_model': self.model, - 'click2dial_id': self.res_id}; - self._rpc({ - route: '/base_phone/click2dial', - params: arg, - }).done(function(r) { - // TODO: check why it never goes in there - if (r === false) { - self.do_warn("Click2dial failed"); - } else if (typeof r === 'object') { - self.do_notify( - _t('Click2dial successfull'), - _t('Number dialed:') + ' ' + r.dialed_number, - false); - if (r.action_model) { - var context = { - 'click2dial_model': self.model, - 'click2dial_id': self.res_id, - 'phone_number': phone_num, - }; - var action = { - name: r.action_name, - type: 'ir.actions.act_window', - res_model: r.action_model, - view_mode: 'form', - views: [[false, 'form']], - target: 'new', - context: context, - }; - this.do_action(action); - } - } - }); - }); + + if (!this.showDialButton()) { + return; } - } - }); + var self = this; + // create our link + var dial = $('📞 Dial'); -fieldRegistry.add('phone', updatedFieldPhone); + // add a parent element + // it's not possible to append to $el directly + // because $el don't have any parent yet + var parent = $('
'); + parent.append([this.$el[0], ' ', dial]); -return updatedFieldPhone; + // replace this.$el by our new container + this.$el = parent; + + var phone_num = this.value; + dial.click(function(evt) { + self.click2dial(phone_num); + }); + }, + click2dial: function(phone_num) { + var self = this; + this.do_notify( + _t('Click2dial started'), + _t('Unhook your ringing phone'), + false); + var params = { + 'phone_number': phone_num, + 'click2dial_model': this.model, + 'click2dial_id': this.res_id}; + return this._rpc({ + route: '/base_phone/click2dial', + params: params, + }).then(function(r) { + console.log('successfull', r); + // TODO: check why it never goes in there + if (r === false) { + self.do_warn("Click2dial failed"); + } else if (typeof r === 'object') { + self.do_notify( + _t('Click2dial successfull'), + _t('Number dialed:') + ' ' + r.dialed_number, + false); + if (r.action_model) { + var action = { + name: r.action_name, + type: 'ir.actions.act_window', + res_model: r.action_model, + view_mode: 'form', + views: [[false, 'form']], + target: 'new', + context: params, + }; + return this.do_action(action); + } + } + }, function (r) { + console.log('on error'); + self.do_warn("Click2dial failed"); + }); + } + }); + return { + 'FieldPhone': FieldPhone + }; }); From 21dbdb65f8ecc859ef14f115bbad5ff7ee1cc5bc Mon Sep 17 00:00:00 2001 From: hparfr Date: Fri, 15 Mar 2019 16:57:09 +0100 Subject: [PATCH 2/6] Refactor dial button --- .../static/src/js/asterisk_click2dial.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/asterisk_click2dial/static/src/js/asterisk_click2dial.js b/asterisk_click2dial/static/src/js/asterisk_click2dial.js index a20a99f..1d41dd4 100644 --- a/asterisk_click2dial/static/src/js/asterisk_click2dial.js +++ b/asterisk_click2dial/static/src/js/asterisk_click2dial.js @@ -12,7 +12,14 @@ var Widget = require('web.Widget'); var _t = core._t; -var click2dial = {}; +var FieldPhone = require('base_phone.updatedphone_widget').FieldPhone; + +FieldPhone.include({ + showDialButton: function () { + return true; + } +}); + var OpenCallerMenu = Widget.extend({ @@ -22,10 +29,6 @@ var OpenCallerMenu = Widget.extend({ 'click': 'on_open_caller', }, - start: function () { - this._super(); - }, - on_open_caller: function (event) { event.stopPropagation(); var self = this; @@ -33,7 +36,7 @@ var OpenCallerMenu = Widget.extend({ self._rpc({ route: '/asterisk_click2dial/get_record_from_my_channel', params: {local_context: context, }, - }).done(function(r) { + }).then(function(r) { // console.log('RESULT RPC r='+r); // console.log('RESULT RPC type r='+typeof r); // console.log('RESULT RPC isNaN r='+isNaN(r)); From 91637fd0cf2faead7cdb6848ef1fec107f98bea5 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Fri, 15 Mar 2019 18:47:22 +0100 Subject: [PATCH 3/6] Improve style of Dial button Improve messages in notification pop-up Fix short disconnect upon click2dial Add active button for asterisk.server form view Fix add call in CRM wizard --- .../static/src/js/asterisk_click2dial.js | 13 ++++++------- asterisk_click2dial/views/asterisk_server.xml | 10 +++++++++- base_phone/static/src/js/phone_widget.js | 9 ++++----- crm_phone/wizard/create_crm_phonecall.py | 5 +---- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/asterisk_click2dial/static/src/js/asterisk_click2dial.js b/asterisk_click2dial/static/src/js/asterisk_click2dial.js index 1d41dd4..1f6c12e 100644 --- a/asterisk_click2dial/static/src/js/asterisk_click2dial.js +++ b/asterisk_click2dial/static/src/js/asterisk_click2dial.js @@ -7,7 +7,6 @@ odoo.define('asterisk_click2dial.systray.OpenCaller', function (require) { var core = require('web.core'); var SystrayMenu = require('web.SystrayMenu'); -var web_client = require('web.web_client'); var Widget = require('web.Widget'); var _t = core._t; @@ -42,8 +41,8 @@ var OpenCallerMenu = Widget.extend({ // console.log('RESULT RPC isNaN r='+isNaN(r)); if (r === false) { self.do_warn( - _t('Failure'), - _t('Problem in the connection to Asterisk'), + _t('IPBX error'), + _t('Calling party number not retreived from IPBX or IPBX unreachable by Odoo'), false); } else if (typeof r == 'string' && isNaN(r)) { @@ -62,13 +61,13 @@ var OpenCallerMenu = Widget.extend({ target: 'new', context: {'default_calling_number': r}, }; - web_client.action_manager.do_action(action); + self.do_action(action); } else if (typeof r == 'object' && r.length == 3) { self.do_notify( - _t('Success'), - _.str.sprintf(_t('Moving to %s ID %d'), r[0], r[1]), + _.str.sprintf(_t("On the phone with '%s'"), r[2]), + _.str.sprintf(_t("Moving to form view of '%s' (%s ID %d)"), r[2], r[0], r[1]), false); var action = { type: 'ir.actions.act_window', @@ -86,7 +85,7 @@ var OpenCallerMenu = Widget.extend({ target: 'current', context: {}, }; - web_client.action_manager.do_action(action); + self.do_action(action); } }); }, diff --git a/asterisk_click2dial/views/asterisk_server.xml b/asterisk_click2dial/views/asterisk_server.xml index 246d838..d7305bc 100644 --- a/asterisk_click2dial/views/asterisk_server.xml +++ b/asterisk_click2dial/views/asterisk_server.xml @@ -14,6 +14,8 @@ + + @@ -24,6 +26,13 @@
+
+ +