From 8bf1486da56d3afe459eb97e5e2f100b63c54b90 Mon Sep 17 00:00:00 2001 From: jpr-odoo Date: Tue, 19 Feb 2019 06:41:37 +0000 Subject: [PATCH] [IMP] mrp: added support embedded google slide on work center This commit adds new `embed_viewer` widget which will be used display URLs via embedded iframes. You can add any valid URL to display page via iframe, although widget automatically converts raw google slide URL into embedded URL. Task ID: 1909010 closes odoo/odoo#29404 Signed-off-by: Simon Lejeune (sle) Co-authored-by: pga-odoo --- addons/mrp/models/mrp_routing.py | 8 +- addons/mrp/models/mrp_workorder.py | 4 + addons/mrp/static/src/js/mrp.js | 126 ++++++++++++++++++++- addons/mrp/static/src/scss/mrp_fields.scss | 8 ++ addons/mrp/static/tests/mrp_tests.js | 47 ++++++++ addons/mrp/views/mrp_routing_views.xml | 6 +- addons/mrp/views/mrp_templates.xml | 1 + addons/mrp/views/mrp_workorder_views.xml | 6 +- 8 files changed, 201 insertions(+), 5 deletions(-) create mode 100644 addons/mrp/static/src/scss/mrp_fields.scss diff --git a/addons/mrp/models/mrp_routing.py b/addons/mrp/models/mrp_routing.py index f697df1cb3d..85f60bbb82b 100644 --- a/addons/mrp/models/mrp_routing.py +++ b/addons/mrp/models/mrp_routing.py @@ -50,7 +50,13 @@ class MrpRoutingWorkcenter(models.Model): company_id = fields.Many2one( 'res.company', 'Company', readonly=True, related='routing_id.company_id', store=True) - worksheet = fields.Binary('worksheet') + worksheet = fields.Binary('PDF', help="Upload your PDF file.") + worksheet_type = fields.Selection([ + ('pdf', 'PDF'), ('google_slide', 'Google Slide')], + string="Work Sheet", default="pdf", + help="Defines if you want to use a PDF or a Google Slide as work sheet." + ) + worksheet_google_slide = fields.Char('Google Slide', help="Paste the url of your Google Slide. Make sure the access to the document is public.") time_mode = fields.Selection([ ('auto', 'Compute based on real time'), ('manual', 'Set duration manually')], string='Duration Computation', diff --git a/addons/mrp/models/mrp_workorder.py b/addons/mrp/models/mrp_workorder.py index 667ccc32fa5..58903a3aec5 100644 --- a/addons/mrp/models/mrp_workorder.py +++ b/addons/mrp/models/mrp_workorder.py @@ -88,6 +88,10 @@ class MrpWorkorder(models.Model): 'mrp.routing.workcenter', 'Operation') # Should be used differently as BoM can change in the meantime worksheet = fields.Binary( 'Worksheet', related='operation_id.worksheet', readonly=True) + worksheet_type = fields.Selection( + 'Worksheet Type', related='operation_id.worksheet_type', readonly=True) + worksheet_google_slide = fields.Char( + 'Worksheet URL', related='operation_id.worksheet_google_slide', readonly=True) move_raw_ids = fields.One2many( 'stock.move', 'workorder_id', 'Raw Moves', domain=[('raw_material_production_id', '!=', False), ('production_id', '=', False)]) diff --git a/addons/mrp/static/src/js/mrp.js b/addons/mrp/static/src/js/mrp.js index 8843d9ab3cd..22abd2b0d91 100644 --- a/addons/mrp/static/src/js/mrp.js +++ b/addons/mrp/static/src/js/mrp.js @@ -3,6 +3,7 @@ odoo.define('mrp.mrp_state', function (require) { var AbstractField = require('web.AbstractField'); var core = require('web.core'); +var fields = require('web.basic_fields'); var field_registry = require('web.field_registry'); var time = require('web.time'); @@ -125,8 +126,131 @@ var TimeCounter = AbstractField.extend({ }, }); +var FieldEmbedURLViewer = fields.FieldChar.extend({ + + //-------------------------------------------------------------------------- + // Public + //-------------------------------------------------------------------------- + + /** + * @override + */ + init: function () { + this._super.apply(this, arguments); + this.page = 1; + this.srcDirty = false; + }, + + /** + * force to set 'src' for embed iframe viewer when its value has changed + * + * @override + * + */ + reset: function () { + this._super.apply(this, arguments); + this._updateIframePreview(); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Initializes and returns an iframe for the viewer + * + * @private + * @returns {jQueryElement} + */ + _prepareIframe: function () { + return $('