From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- addons/mrp/static/src/img/mrp-tablet.png | Bin 0 -> 22438 bytes addons/mrp/static/src/js/mrp.js | 268 +++++++++++++++++++++ addons/mrp/static/src/js/mrp_bom_report.js | 228 ++++++++++++++++++ .../mrp/static/src/js/mrp_document_kanban_view.js | 20 ++ .../src/js/mrp_documents_controller_mixin.js | 126 ++++++++++ .../static/src/js/mrp_documents_document_viewer.js | 19 ++ .../src/js/mrp_documents_kanban_controller.js | 37 +++ .../static/src/js/mrp_documents_kanban_record.js | 50 ++++ .../static/src/js/mrp_documents_kanban_renderer.js | 27 +++ addons/mrp/static/src/js/mrp_should_consume.js | 81 +++++++ addons/mrp/static/src/js/mrp_workorder_popover.js | 51 ++++ addons/mrp/static/src/scss/mrp_bom_report.scss | 50 ++++ .../static/src/scss/mrp_document_kanban_view.scss | 3 + addons/mrp/static/src/scss/mrp_fields.scss | 11 + addons/mrp/static/src/scss/mrp_gantt.scss | 19 ++ .../mrp/static/src/scss/mrp_workorder_kanban.scss | 10 + addons/mrp/static/src/xml/mrp.xml | 49 ++++ .../mrp/static/src/xml/mrp_document_template.xml | 10 + 18 files changed, 1059 insertions(+) create mode 100644 addons/mrp/static/src/img/mrp-tablet.png create mode 100644 addons/mrp/static/src/js/mrp.js create mode 100644 addons/mrp/static/src/js/mrp_bom_report.js create mode 100644 addons/mrp/static/src/js/mrp_document_kanban_view.js create mode 100644 addons/mrp/static/src/js/mrp_documents_controller_mixin.js create mode 100644 addons/mrp/static/src/js/mrp_documents_document_viewer.js create mode 100644 addons/mrp/static/src/js/mrp_documents_kanban_controller.js create mode 100644 addons/mrp/static/src/js/mrp_documents_kanban_record.js create mode 100644 addons/mrp/static/src/js/mrp_documents_kanban_renderer.js create mode 100644 addons/mrp/static/src/js/mrp_should_consume.js create mode 100644 addons/mrp/static/src/js/mrp_workorder_popover.js create mode 100644 addons/mrp/static/src/scss/mrp_bom_report.scss create mode 100644 addons/mrp/static/src/scss/mrp_document_kanban_view.scss create mode 100644 addons/mrp/static/src/scss/mrp_fields.scss create mode 100644 addons/mrp/static/src/scss/mrp_gantt.scss create mode 100644 addons/mrp/static/src/scss/mrp_workorder_kanban.scss create mode 100644 addons/mrp/static/src/xml/mrp.xml create mode 100644 addons/mrp/static/src/xml/mrp_document_template.xml (limited to 'addons/mrp/static/src') diff --git a/addons/mrp/static/src/img/mrp-tablet.png b/addons/mrp/static/src/img/mrp-tablet.png new file mode 100644 index 00000000..f60fbbb7 Binary files /dev/null and b/addons/mrp/static/src/img/mrp-tablet.png differ diff --git a/addons/mrp/static/src/js/mrp.js b/addons/mrp/static/src/js/mrp.js new file mode 100644 index 00000000..f895aef9 --- /dev/null +++ b/addons/mrp/static/src/js/mrp.js @@ -0,0 +1,268 @@ +odoo.define('mrp.mrp_state', function (require) { +"use strict"; + +var AbstractField = require('web.AbstractField'); +var core = require('web.core'); +var fields = require('web.basic_fields'); +var fieldUtils = require('web.field_utils'); +var field_registry = require('web.field_registry'); +var time = require('web.time'); + +var _t = core._t; + +/** + * This widget is used to display the availability on a workorder. + */ +var SetBulletStatus = AbstractField.extend({ + // as this widget is based on hardcoded values, use it in another context + // probably won't work + // supportedFieldTypes: ['selection'], + /** + * @override + */ + init: function () { + this._super.apply(this, arguments); + this.classes = this.nodeOptions && this.nodeOptions.classes || {}; + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @private + * @override + */ + _renderReadonly: function () { + this._super.apply(this, arguments); + var bullet_class = this.classes[this.value] || 'default'; + if (this.value) { + var title = this.value === 'waiting' ? _t('Waiting Materials') : ''; + this.$el.attr({'title': title, 'style': 'display:inline'}); + this.$el.removeClass('text-success text-danger text-default'); + this.$el.html($('' + title + '').addClass('badge badge-' + bullet_class)); + } + } +}); + +var TimeCounter = fields.FieldFloatTime.extend({ + + init: function () { + this._super.apply(this, arguments); + this.duration = this.record.data.duration; + }, + + willStart: function () { + var self = this; + var def = this._rpc({ + model: 'mrp.workcenter.productivity', + method: 'search_read', + domain: [ + ['workorder_id', '=', this.record.data.id], + ['date_end', '=', false], + ], + }).then(function (result) { + var currentDate = new Date(); + var duration = 0; + if (result.length > 0) { + duration += self._getDateDifference(time.auto_str_to_date(result[0].date_start), currentDate); + } + var minutes = duration / 60 >> 0; + var seconds = duration % 60; + self.duration += minutes + seconds / 60; + if (self.mode === 'edit') { + self.value = self.duration; + } + }); + return Promise.all([this._super.apply(this, arguments), def]); + }, + + destroy: function () { + this._super.apply(this, arguments); + clearTimeout(this.timer); + }, + + //-------------------------------------------------------------------------- + // Public + //-------------------------------------------------------------------------- + + /** + * @override + */ + isSet: function () { + return true; + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Compute the difference between two dates. + * + * @private + * @param {string} dateStart + * @param {string} dateEnd + * @returns {integer} the difference in millisecond + */ + _getDateDifference: function (dateStart, dateEnd) { + return moment(dateEnd).diff(moment(dateStart), 'seconds'); + }, + /** + * @override + */ + _renderReadonly: function () { + if (this.record.data.is_user_working) { + this._startTimeCounter(); + } else { + this._super.apply(this, arguments); + } + }, + /** + * @private + */ + _startTimeCounter: function () { + var self = this; + clearTimeout(this.timer); + if (this.record.data.is_user_working) { + this.timer = setTimeout(function () { + self.duration += 1/60; + self._startTimeCounter(); + }, 1000); + } else { + clearTimeout(this.timer); + } + this.$el.text(fieldUtils.format.float_time(this.duration)); + }, +}); + +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 $('