You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.7 KiB

  1. /* Copyright 2016 Antonio Espinosa - <antonio.espinosa@tecnativa.com>
  2. Copyright 2018 David Vidal - <david.vidal@tecnativa.com>
  3. License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). */
  4. odoo.define('mail_tracking.partner_tracking', function(require){
  5. "use strict";
  6. var core = require('web.core');
  7. var ActionManager = require('web.ActionManager');
  8. var AbstractMessage = require('mail.model.AbstractMessage');
  9. var Message = require('mail.model.Message');
  10. var ThreadWidget = require('mail.widget.Thread');
  11. var _t = core._t;
  12. AbstractMessage.include({
  13. /**
  14. * Messages do not have any PartnerTrackings.
  15. *
  16. * @return {boolean}
  17. */
  18. hasPartnerTrackings: function () {
  19. return false;
  20. },
  21. });
  22. Message.include({
  23. init: function (parent, data, emojis) {
  24. this._super.apply(this, arguments);
  25. this._partnerTrackings = data.partner_trackings || [];
  26. },
  27. /**
  28. * State whether this message contains some PartnerTrackings values
  29. *
  30. * @override
  31. * @return {boolean}
  32. */
  33. hasPartnerTrackings: function () {
  34. return !!(this._partnerTrackings && (this._partnerTrackings.length > 0));
  35. },
  36. /**
  37. * Get the PartnerTrackings values of this message
  38. * If this message has no PartnerTrackings values, returns []
  39. *
  40. * @override
  41. * @return {Object[]}
  42. */
  43. getPartnerTrackings: function () {
  44. if (!this.hasPartnerTrackings()) {
  45. return [];
  46. }
  47. return this._partnerTrackings;
  48. },
  49. });
  50. ThreadWidget.include({
  51. events: _.extend(ThreadWidget.prototype.events, {
  52. 'click .o_mail_action_tracking_partner': 'on_tracking_partner_click',
  53. 'click .o_mail_action_tracking_status': 'on_tracking_status_click',
  54. }),
  55. on_tracking_partner_click: function (event) {
  56. var partner_id = this.$el.find(event.currentTarget).data('partner');
  57. var state = {
  58. 'model': 'res.partner',
  59. 'id': partner_id,
  60. 'title': _t("Tracking partner"),
  61. };
  62. event.preventDefault();
  63. this.action_manager.do_push_state(state);
  64. var action = {
  65. type:'ir.actions.act_window',
  66. view_type: 'form',
  67. view_mode: 'form',
  68. res_model: 'res.partner',
  69. views: [[false, 'form']],
  70. target: 'current',
  71. res_id: partner_id,
  72. };
  73. this.do_action(action);
  74. },
  75. on_tracking_status_click: function (event) {
  76. var tracking_email_id = $(event.currentTarget).data('tracking');
  77. var state = {
  78. 'model': 'mail.tracking.email',
  79. 'id': tracking_email_id,
  80. 'title': _t("Message tracking"),
  81. };
  82. event.preventDefault();
  83. this.action_manager.do_push_state(state);
  84. var action = {
  85. type:'ir.actions.act_window',
  86. view_type: 'form',
  87. view_mode: 'form',
  88. res_model: 'mail.tracking.email',
  89. views: [[false, 'form']],
  90. target: 'new',
  91. res_id: tracking_email_id,
  92. };
  93. this.do_action(action);
  94. },
  95. init: function (parent, options) {
  96. this._super.apply(this, arguments);
  97. this.action_manager = this.findAncestor(function(ancestor){
  98. return ancestor instanceof ActionManager;
  99. });
  100. },
  101. });
  102. });