Got file upload working to add a document to a project.

This commit is contained in:
Marc Durepos 2023-09-27 09:58:37 -04:00
parent 6c88f4a2d0
commit 1379fe609d
9 changed files with 151 additions and 4 deletions

View file

@ -1,2 +1,3 @@
from . import models from . import models
from . import wizard from . import wizard
from . import controllers

View file

@ -29,9 +29,22 @@
'author': 'Bemade Inc.', 'author': 'Bemade Inc.',
'website': 'https://www.bemade.org', 'website': 'https://www.bemade.org',
'license': 'OPL-1', 'license': 'OPL-1',
'depends': ['bemade_documents_portal', 'documents_project'], 'depends': ['documents',
'data': ['views/project_views.xml'], 'bemade_documents_portal',
'demo': [], '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, 'installable': True,
'auto_install': False, 'auto_install': False,
} }

View file

@ -0,0 +1 @@
from . import main

View file

@ -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

View file

@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_documents_request_approval_wizard access.documents.request_approval_wizard model_project_documents_approval_wizard documents.group_documents_user 1 1 1 0

View file

@ -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);

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates xml:space="preserve">
<div t-name="DocumentViews.buttons"
t-inherit="documents.DocumentsViews.buttons" t-inherit-mode="extension">
<xpath expr="//button[hasclass('o_documents_kanban_share_domain')]"
position="after">
<button type="button" title="Request approvals"
groups="project.group_project_manager"
class="btn btn-secondary o_documents_kanban_request_approvals">
Request Approvals
</button>
</xpath>
</div>
</templates>

View file

@ -4,5 +4,8 @@ from odoo import models, fields, api
class RequestDocumentApprovalsWizard(models.TransientModel): class RequestDocumentApprovalsWizard(models.TransientModel):
_name = 'project_documents.approval.wizard' _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

View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id="documents_view_list_inherit" model="ir.ui.view">
<field name="inherit_id" ref="documents.documents_view_list"/>
<field name="model">documents.document</field>
<field name="arch" type="xml">
<xpath expr="//tree[@js_class='documents_list']" position="attributes">
</xpath>
</field>
</record>
<record id="documents_request_approval_form_view" model="ir.ui.view">
<field name="name">Request Approvals</field>
<field name="model">project_documents.approval.wizard</field>
<field name="arch" type="xml">
<form>
<!-- TODO: Add field labels -->
<sheet>
<field name="partner_ids" domain="[('is_company', '=', True)]">
<tree editable="bottom">
<field name="name" colspan="3"/>
<field name="email"/>
<field name="title"/>
</tree>
</field>
<field name="document_ids">
<!-- TODO: Add a domain to restrict to context domain -->
<tree>
<field name="name"/>
</tree>
</field>
<footer>
<button name="request_approvals" type="object"
string="Request" class="btn btn-primary"/>
<button string="Cancel" class="btn-secondary"
special="cancel" data-hotkey="z"/>
</footer>
</sheet>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_request_approval_form">
<field name="name">Request Approvals</field>
<field name="res_model">project_documents.approval.wizard</field>
<field name="view_mode">form</field>
<field name="context">{
'form_view_ref': 'bemade_project_documents.documents_request_approval_form_view'}</field>
<field name="target">new</field>
</record>
</data>
</odoo>