diff options
| author | Martin Geubelle <mge@odoo.com> | 2017-04-25 16:03:52 +0200 |
|---|---|---|
| committer | Martin Geubelle <mge@odoo.com> | 2017-04-27 16:56:47 +0200 |
| commit | 5ec62a0b31a5c8a03dfd527500189e469bc9c752 (patch) | |
| tree | 8b217c24c69cfe7f46743b0827ba72767c384a5d /addons/mrp/static/src/js | |
| parent | 67d7cbd06bbffaba6687dda9d4c883529d645e56 (diff) | |
[FIX] mrp: reintroduce pdf_viewer field widget
This field widget has been adapted to the new views.
This commit also introduces some tests.
Diffstat (limited to 'addons/mrp/static/src/js')
| -rw-r--r-- | addons/mrp/static/src/js/mrp.js | 129 |
1 files changed, 118 insertions, 11 deletions
diff --git a/addons/mrp/static/src/js/mrp.js b/addons/mrp/static/src/js/mrp.js index a40f43beabb..d078bffe1b4 100644 --- a/addons/mrp/static/src/js/mrp.js +++ b/addons/mrp/static/src/js/mrp.js @@ -2,22 +2,129 @@ odoo.define('mrp.mrp_state', function (require) { "use strict"; var AbstractField = require('web.AbstractField'); +var basic_fields = require('web.basic_fields'); var core = require('web.core'); -var time = require('web.time'); var field_registry = require('web.field_registry'); +var time = require('web.time'); +var utils = require('web.utils'); +var FieldBinaryFile = basic_fields.FieldBinaryFile; var _t = core._t; +var FieldPdfViewer = FieldBinaryFile.extend({ + supportedFieldTypes: ['binary'], + template: 'FieldPdfViewer', + /** + * @override + */ + init: function () { + this._super.apply(this, arguments); + this.PDFViewerApplication = false; + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @private + * @param {DOMElement} iframe + */ + _disableButtons: function (iframe) { + if (this.mode === 'readonly') { + $(iframe).contents().find('button#download').hide(); + } + $(iframe).contents().find('button#openFile').hide(); + }, + /** + * @private + * @returns {string} the pdf viewer URI + */ + _getURI: function () { + var queryObj = { + model: this.model, + field: this.name, + id: this.res_id, + }; + var queryString = $.param(queryObj); + var url = encodeURIComponent('/web/image?' + queryString); + var viewerURL = '/web/static/lib/pdfjs/web/viewer.html?file='; + return viewerURL + url; + }, + /** + * @private + * @override + */ + _render: function () { + var self = this; + var $pdfViewer = this.$('.o_form_pdf_controls').children().add(this.$('.o_pdfview_iframe')); + var $selectUpload = this.$('.o_select_file_button').first(); + var $iFrame = this.$('.o_pdfview_iframe'); + + $iFrame.on('load', function () { + self.PDFViewerApplication = this.contentWindow.window.PDFViewerApplication; + self._disableButtons(this); + }); + if (this.mode === "readonly" && this.value) { + $iFrame.attr('src', this._getURI()); + } else { + if (this.value) { + var binSize = utils.is_bin_size(this.value); + $pdfViewer.removeClass('o_hidden'); + $selectUpload.addClass('o_hidden'); + if (binSize) { + $iFrame.attr('src', this._getURI()); + } + } else { + $pdfViewer.addClass('o_hidden'); + $selectUpload.removeClass('o_hidden'); + } + } + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @override + * @private + * @param {Event} ev + */ + on_file_change: function (ev) { + this._super.apply(this, arguments); + if (this.PDFViewerApplication) { + var files = ev.target.files; + if (!files || files.length === 0) { + return; + } + var file = files[0]; + // TOCheck: is there requirement to fallback on FileReader if browser don't support URL + this.PDFViewerApplication.open(URL.createObjectURL(file), 0); + } + }, + /** + * Remove the behaviour of on_save_as in FieldBinaryFile. + * + * @override + * @private + * @param {MouseEvent} ev + */ + on_save_as: function (ev) { + ev.stopPropagation(); + }, + +}); var SetBulletStatus = AbstractField.extend({ - init: function() { + init: function () { this._super.apply(this, arguments); this.classes = this.nodeOptions && this.nodeOptions.classes || {}; }, - render_readonly: function() { + render_readonly: function () { this._super.apply(this, arguments); var bullet_class = this.classes[this.value] || 'default'; - if (this.value){ + if (this.value) { var title = this.value === 'waiting'? _t('Waiting Materials') : _t('Ready to produce'); this.$el.attr({'title': title, 'style': 'display:inline'}); this.$el.removeClass('text-success text-danger text-default'); @@ -27,12 +134,12 @@ var SetBulletStatus = AbstractField.extend({ }); var TimeCounter = AbstractField.extend({ - start_time_counter: function(){ + start_time_counter: function () { var self = this; clearTimeout(this.timer); if (this.record.data.is_user_working) { this.duration += 1000; - this.timer = setTimeout(function() { + this.timer = setTimeout(function () { self.start_time_counter(); }, 1000); } else { @@ -40,7 +147,7 @@ var TimeCounter = AbstractField.extend({ } this.$el.html($('<span>' + moment.utc(this.duration).format("HH:mm:ss") + '</span>')); }, - render: function() { + render: function () { var self = this; this._super.apply(this, arguments); var productivity_domain = [['workorder_id', '=', this.record.data.id], ['user_id', '=', self.session.uid]]; @@ -52,7 +159,7 @@ var TimeCounter = AbstractField.extend({ if (self.mode === "readonly") { var current_date = new Date(); self.duration = 0; - _.each(result, function(data) { + _.each(result, function (data) { self.duration += data.date_end ? self.get_date_difference(data.date_start, data.date_end) : self.get_date_difference(time.auto_str_to_date(data.date_start), current_date); }); self.start_time_counter(); @@ -60,11 +167,11 @@ var TimeCounter = AbstractField.extend({ }, }); }, - get_date_difference: function(date_start, date_end) { + get_date_difference: function (date_start, date_end) { var difference = moment(date_end).diff(moment(date_start)); return moment.duration(difference); }, - has_no_value: function() { + has_no_value: function () { return false; } }); @@ -72,6 +179,6 @@ var TimeCounter = AbstractField.extend({ field_registry .add('bullet_state', SetBulletStatus) .add('mrp_time_counter', TimeCounter) - .add('pdf_viewer', AbstractField); // TODO + .add('pdf_viewer', FieldPdfViewer); }); |
