From 1379fe609d8dc0f340fddd9fc4c2603fbecfc9da Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Wed, 27 Sep 2023 09:58:37 -0400 Subject: [PATCH] Got file upload working to add a document to a project. --- bemade_project_documents/__init__.py | 1 + bemade_project_documents/__manifest__.py | 19 +++++-- .../controllers/__init__.py | 1 + bemade_project_documents/controllers/main.py | 17 ++++++ .../security/ir.model.access.csv | 2 + .../src/js/documents_controller_patch.js | 44 ++++++++++++++++ .../static/src/xml/documents_views.xml | 14 +++++ .../wizard/request_approvals_wizard.py | 5 +- .../wizard/request_approvals_wizard.xml | 52 +++++++++++++++++++ 9 files changed, 151 insertions(+), 4 deletions(-) create mode 100644 bemade_project_documents/controllers/__init__.py create mode 100644 bemade_project_documents/controllers/main.py create mode 100644 bemade_project_documents/security/ir.model.access.csv create mode 100644 bemade_project_documents/static/src/js/documents_controller_patch.js create mode 100644 bemade_project_documents/static/src/xml/documents_views.xml create mode 100644 bemade_project_documents/wizard/request_approvals_wizard.xml diff --git a/bemade_project_documents/__init__.py b/bemade_project_documents/__init__.py index 9b42961..6bac603 100644 --- a/bemade_project_documents/__init__.py +++ b/bemade_project_documents/__init__.py @@ -1,2 +1,3 @@ from . import models from . import wizard +from . import controllers diff --git a/bemade_project_documents/__manifest__.py b/bemade_project_documents/__manifest__.py index ed8fa4f..a5e1405 100644 --- a/bemade_project_documents/__manifest__.py +++ b/bemade_project_documents/__manifest__.py @@ -29,9 +29,22 @@ 'author': 'Bemade Inc.', 'website': 'https://www.bemade.org', 'license': 'OPL-1', - 'depends': ['bemade_documents_portal', 'documents_project'], - 'data': ['views/project_views.xml'], - 'demo': [], + 'depends': ['documents', + 'bemade_documents_portal', + 'documents_project', + ], + 'data': ['views/project_views.xml', + 'wizard/request_approvals_wizard.xml', + 'security/ir.model.access.csv', + ], + 'assets': { + 'web.assets_backend': [ + 'bemade_project_documents/static/src/js/documents_controller_patch.js' + ], + 'web.assets_qweb': [ + 'bemade_project_documents/static/src/xml/documents_views.xml' + ] + }, 'installable': True, 'auto_install': False, } diff --git a/bemade_project_documents/controllers/__init__.py b/bemade_project_documents/controllers/__init__.py new file mode 100644 index 0000000..12a7e52 --- /dev/null +++ b/bemade_project_documents/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/bemade_project_documents/controllers/main.py b/bemade_project_documents/controllers/main.py new file mode 100644 index 0000000..2f1b548 --- /dev/null +++ b/bemade_project_documents/controllers/main.py @@ -0,0 +1,17 @@ +from odoo.addons.documents.controllers.main import ShareRoute +from odoo.http import route, request +import json + + +class DocumentsController(ShareRoute): + + @route('/documents/upload_attachment', type='http', methods=['POST'], auth='user') + def upload_document(self, folder_id, ufile, tag_ids, res_model, res_id, + document_id=False, partner_id=False, owner_id=False): + res = super().upload_document(folder_id, ufile, tag_ids, document_id, partner_id, + owner_id) + res_data = json.loads(res.data) + if 'ids' in res_data and res_model and res_id: + docs = request.env['documents.document'].browse(res_data['ids']) + docs.write({'res_model': res_model, 'res_id': res_id}) + return res diff --git a/bemade_project_documents/security/ir.model.access.csv b/bemade_project_documents/security/ir.model.access.csv new file mode 100644 index 0000000..43e7a3a --- /dev/null +++ b/bemade_project_documents/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_documents_request_approval_wizard,access.documents.request_approval_wizard,model_project_documents_approval_wizard,documents.group_documents_user,1,1,1,0 diff --git a/bemade_project_documents/static/src/js/documents_controller_patch.js b/bemade_project_documents/static/src/js/documents_controller_patch.js new file mode 100644 index 0000000..71a533e --- /dev/null +++ b/bemade_project_documents/static/src/js/documents_controller_patch.js @@ -0,0 +1,44 @@ +/** @odoo-module **/ + +const DocumentsListController = require('documents.DocumentsListController'); +const DocumentsKanbanController = require('documents.DocumentsKanbanController'); +const DocumentsControllerMixin = require('documents.controllerMixin'); + +import {patch} from 'web.utils'; + +const prototype_addins = { + _onClickRequestApprovals: function (ev) { + ev.preventDefault(); + const context = this.model.get(this.handle, {raw: true}).getContext(); + this.do_action('bemade_project_documents.action_request_approval_form', { + additional_context: { + default_document_ids: this._selectedRecordIds, + }, + on_close: () => this.reload(), + }); + }, + _makeFileUpload({ recordId }) { + const context = this.model.get(this.handle, {raw: true}).getContext(); + return Object.assign({ + res_model: context.default_res_model || false, + res_id: context.default_res_id || false, + }, this._super(...arguments)); + }, + _makeFileUploadFormDataKeys({ recordId }) { + const context = this.model.get(this.handle, {raw: true}).getContext(); + return Object.assign({ + res_model: context && context.default_res_model, + res_id: context && context.default_res_id, + }, this._super(...arguments)); + }, +}; + +const patch_name = "bemade_project_documents.DocumentsControllerPatch"; + +patch(DocumentsControllerMixin, patch_name, { + events: _.extend({}, DocumentsControllerMixin.events, { + 'click .o_documents_kanban_request_approvals': '_onClickRequestApprovals', + }), +}); +patch(DocumentsListController.prototype, patch_name, prototype_addins); +patch(DocumentsKanbanController.prototype, patch_name, prototype_addins); diff --git a/bemade_project_documents/static/src/xml/documents_views.xml b/bemade_project_documents/static/src/xml/documents_views.xml new file mode 100644 index 0000000..4a54415 --- /dev/null +++ b/bemade_project_documents/static/src/xml/documents_views.xml @@ -0,0 +1,14 @@ + + +
+ + + +
+
\ No newline at end of file diff --git a/bemade_project_documents/wizard/request_approvals_wizard.py b/bemade_project_documents/wizard/request_approvals_wizard.py index 1080d09..65153a0 100644 --- a/bemade_project_documents/wizard/request_approvals_wizard.py +++ b/bemade_project_documents/wizard/request_approvals_wizard.py @@ -4,5 +4,8 @@ from odoo import models, fields, api class RequestDocumentApprovalsWizard(models.TransientModel): _name = 'project_documents.approval.wizard' - project_id = fields.Many2one('project.project') + document_ids = fields.Many2many('documents.document', string='Documents') + partner_ids = fields.Many2many('res.partner') + def request_approvals(self): + pass \ No newline at end of file diff --git a/bemade_project_documents/wizard/request_approvals_wizard.xml b/bemade_project_documents/wizard/request_approvals_wizard.xml new file mode 100644 index 0000000..6fcd1da --- /dev/null +++ b/bemade_project_documents/wizard/request_approvals_wizard.xml @@ -0,0 +1,52 @@ + + + + + + documents.document + + + + + + + + Request Approvals + project_documents.approval.wizard + +
+ + + + + + + + + + + + + + + +
+
+
+
+
+
+ + Request Approvals + project_documents.approval.wizard + form + { + 'form_view_ref': 'bemade_project_documents.documents_request_approval_form_view'} + new + +
+
\ No newline at end of file