1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
odoo.define('stock.popover_widget', function (require) {
'use strict';
var AbstractField = require('web.AbstractField');
var core = require('web.core');
var QWeb = core.qweb;
var Context = require('web.Context');
var data_manager = require('web.data_manager');
var fieldRegistry = require('web.field_registry');
/**
* Widget Popover for JSON field (char), by default render a simple html message
* {
* 'msg': '<CONTENT OF THE POPOVER>',
* 'icon': '<FONT AWESOME CLASS>' (optionnal),
* 'color': '<COLOR CLASS OF ICON>' (optionnal),
* 'title': '<TITLE OF POPOVER>' (optionnal),
* 'popoverTemplate': '<TEMPLATE OF THE TEMPLATE>' (optionnal)
* }
*/
var PopoverWidgetField = AbstractField.extend({
supportedFieldTypes: ['char'],
buttonTemplape: 'stock.popoverButton',
popoverTemplate: 'stock.popoverContent',
trigger: 'focus',
placement: 'top',
html: true,
color: 'text-primary',
icon: 'fa-info-circle',
_render: function () {
var value = JSON.parse(this.value);
if (!value) {
this.$el.html('');
return;
}
this.$el.css('max-width', '17px');
this.$el.html(QWeb.render(this.buttonTemplape, _.defaults(value, {color: this.color, icon: this.icon})));
this.$el.find('a').prop('special_click', true);
this.$popover = $(QWeb.render(value.popoverTemplate || this.popoverTemplate, value));
this.$popover.on('click', '.action_open_forecast', this._openForecast.bind(this));
this.$el.find('a').popover({
content: this.$popover,
html: this.html,
placement: this.placement,
title: value.title || this.title.toString(),
trigger: this.trigger,
delay: {'show': 0, 'hide': 100},
});
},
/**
* Redirect to the product forecasted report.
*
* @private
* @param {MouseEvent} event
* @returns {Promise} action loaded
*/
async _openForecast(ev) {
ev.stopPropagation();
const reportContext = {
active_model: 'product.product',
active_id: this.recordData.product_id.data.id,
};
const action = await this._rpc({
model: reportContext.active_model,
method: 'action_product_forecast_report',
args: [[reportContext.active_id]],
});
action.context = new Context(action.context, reportContext);
return this.do_action(action);
},
destroy: function () {
this.$el.find('a').popover('dispose');
this._super.apply(this, arguments);
},
});
fieldRegistry.add('popover_widget', PopoverWidgetField);
return PopoverWidgetField;
});
|