diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/mrp/static/src/js/mrp_documents_controller_mixin.js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/mrp/static/src/js/mrp_documents_controller_mixin.js')
| -rw-r--r-- | addons/mrp/static/src/js/mrp_documents_controller_mixin.js | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/addons/mrp/static/src/js/mrp_documents_controller_mixin.js b/addons/mrp/static/src/js/mrp_documents_controller_mixin.js new file mode 100644 index 00000000..9bcaf3d6 --- /dev/null +++ b/addons/mrp/static/src/js/mrp_documents_controller_mixin.js @@ -0,0 +1,126 @@ +odoo.define('mrp.controllerMixin', function (require) { +'use strict'; + +const { _t, qweb } = require('web.core'); +const fileUploadMixin = require('web.fileUploadMixin'); +const DocumentViewer = require('mrp.MrpDocumentViewer'); + +const MrpDocumentsControllerMixin = Object.assign({}, fileUploadMixin, { + events: { + 'click .o_mrp_documents_kanban_upload': '_onClickMrpDocumentsUpload', + }, + custom_events: Object.assign({}, fileUploadMixin.custom_events, { + kanban_image_clicked: '_onKanbanPreview', + upload_file: '_onUploadFile', + }), + + //-------------------------------------------------------------------------- + // Public + //-------------------------------------------------------------------------- + + /** + * Called right after the reload of the view. + */ + async reload() { + await this._renderFileUploads(); + }, + + /** + * @override + * @param {jQueryElement} $node + */ + renderButtons($node) { + this.$buttons = $(qweb.render('MrpDocumentsKanbanView.buttons')); + this.$buttons.appendTo($node); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @override + */ + _getFileUploadRoute() { + return '/mrp/upload_attachment'; + }, + + /** + * @override + * @param {integer} param0.recordId + */ + _makeFileUploadFormDataKeys() { + const context = this.model.get(this.handle, { raw: true }).getContext(); + return { + res_id: context.default_res_id, + res_model: context.default_res_model, + }; + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @private + */ + _onClickMrpDocumentsUpload() { + const $uploadInput = $('<input>', { + type: 'file', + name: 'files[]', + multiple: 'multiple' + }); + $uploadInput.on('change', async ev => { + await this._uploadFiles(ev.target.files); + $uploadInput.remove(); + }); + $uploadInput.click(); + }, + + /** + * Handles custom event to display the document viewer. + * + * @private + * @param {OdooEvent} ev + * @param {integer} ev.data.recordID + * @param {Array<Object>} ev.data.recordList + */ + _onKanbanPreview(ev) { + ev.stopPropagation(); + const documents = ev.data.recordList; + const documentID = ev.data.recordID; + const documentViewer = new DocumentViewer(this, documents, documentID); + documentViewer.appendTo(this.$('.o_mrp_documents_kanban_view')); + }, + + /** + * Specially created to call `_uploadFiles` method from tests. + * + * @private + * @param {OdooEvent} ev + */ + async _onUploadFile(ev) { + await this._uploadFiles(ev.data.files); + }, + + /** + * @override + * @param {Object} param0 + * @param {XMLHttpRequest} param0.xhr + */ + _onUploadLoad({ xhr }) { + const result = xhr.status === 200 + ? JSON.parse(xhr.response) + : { + error: _.str.sprintf(_t("status code: %s </br> message: %s"), xhr.status, xhr.response) + }; + if (result.error) { + this.do_notify(_t("Error"), result.error, true); + } + fileUploadMixin._onUploadLoad.apply(this, arguments); + }, +}); + +return MrpDocumentsControllerMixin; + +}); |
