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.

99 lines
3.7 KiB

  1. odoo.define('mail_activity_team.systray', function (require) {
  2. "use strict";
  3. var systray = require('mail.systray');
  4. var session = require("web.session");
  5. systray.ActivityMenu.include({
  6. events: _.extend({}, systray.ActivityMenu.prototype.events, {
  7. 'click .o_filter_button': 'on_click_filter_button',
  8. }),
  9. start: function () {
  10. this._super.apply(this, arguments);
  11. this.$filter_buttons = this.$('.o_filter_button');
  12. this.$my_activities = this.$filter_buttons.first();
  13. this.filter = 'my';
  14. session.user_context = _.extend({}, session.user_context, {
  15. 'team_activities': false
  16. });
  17. },
  18. _updateCounter: function (data) {
  19. this._super.apply(this, arguments);
  20. this.$('.o_new_notification_counter').text(this.activityCounter);
  21. },
  22. on_click_filter_button: function (event) {
  23. var self = this;
  24. event.stopPropagation();
  25. self.$filter_buttons.removeClass('active');
  26. var $target = $(event.currentTarget);
  27. $target.addClass('active');
  28. self.filter = $target.data('filter');
  29. session.user_context = _.extend({}, session.user_context, {
  30. 'team_activities': self.filter === 'team'
  31. });
  32. self._updateActivityPreview();
  33. },
  34. _onActivityFilterClick: function (event) {
  35. if (this.filter === 'my') {
  36. this._super.apply(this, arguments);
  37. }
  38. if (this.filter === 'team') {
  39. var data = _.extend(
  40. {},
  41. $(event.currentTarget).data(),
  42. $(event.target).data()
  43. );
  44. var context = {};
  45. if (data.filter === 'my') {
  46. context.search_default_activities_overdue = 1;
  47. context.search_default_activities_today = 1;
  48. } else {
  49. context['search_default_activities_' + data.filter] = 1;
  50. }
  51. this.do_action({
  52. type: 'ir.actions.act_window',
  53. name: data.model_name,
  54. res_model: data.res_model,
  55. views: [[false, 'kanban'], [false, 'form']],
  56. search_view_id: [false],
  57. domain: [
  58. ['activity_team_user_ids', 'in', session.uid]
  59. ],
  60. context:context,
  61. });
  62. }
  63. },
  64. _getActivityData: function(){
  65. var self = this;
  66. return self._super.apply(self, arguments).then(function (data) {
  67. session.user_context = _.extend({}, session.user_context, {
  68. 'team_activities': !session.user_context['team_activities'],
  69. });
  70. self._rpc({
  71. model: 'res.users',
  72. method: 'activity_user_count',
  73. kwargs: {
  74. context: session.user_context,
  75. },
  76. }).then(function (data) {
  77. self.activityCounter += _.reduce(data, function(
  78. total_count, p_data
  79. ){ return total_count + p_data.total_count; }, 0);
  80. self.$('.o_new_notification_counter').text(self.activityCounter);
  81. self.$el.toggleClass('o_no_notification', !self.activityCounter);
  82. session.user_context = _.extend({}, session.user_context, {
  83. 'team_activities': !session.user_context['team_activities'],
  84. });
  85. });
  86. });
  87. }
  88. });
  89. });