forked from Mapan/odoo17e
79 lines
4.0 KiB
Python
79 lines
4.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, models, fields, _
|
|
|
|
|
|
class MailActivity(models.Model):
|
|
_inherit = 'mail.activity'
|
|
|
|
def _prepare_next_activity_values(self):
|
|
vals = super()._prepare_next_activity_values()
|
|
current_activity_type = self.activity_type_id
|
|
next_activity_type = current_activity_type.triggered_next_type_id
|
|
|
|
if current_activity_type.category == 'upload_file' and self.res_model == 'documents.document' and next_activity_type.category == 'upload_file':
|
|
existing_document = self.env['documents.document'].search([('request_activity_id', '=', self.id)], limit=1)
|
|
if 'summary' not in vals:
|
|
vals['summary'] = self.summary or _('Upload file request')
|
|
new_doc_request = self.env['documents.document'].create({
|
|
'owner_id': existing_document.owner_id.id,
|
|
'folder_id': next_activity_type.folder_id.id if next_activity_type.folder_id else existing_document.folder_id.id,
|
|
'tag_ids': [(6, 0, next_activity_type.tag_ids.ids)],
|
|
'name': vals['summary'],
|
|
})
|
|
vals['res_id'] = new_doc_request.id
|
|
return vals
|
|
|
|
def _action_done(self, feedback=False, attachment_ids=None):
|
|
if self and attachment_ids:
|
|
documents = self.env['documents.document'].search([
|
|
('request_activity_id', 'in', self.ids),
|
|
('attachment_id', '=', False)
|
|
])
|
|
if documents:
|
|
# TODO: since the route `mail_attachment_upload` has been overridden to avoid having two
|
|
# documents created when uploading an attachment through an activity, we should remove
|
|
# the following code in master (we keep it just in case some existing documents have been
|
|
# created with the old behavior).
|
|
to_remove = self.env['documents.document'].search([('attachment_id', '=', attachment_ids[0])])
|
|
if to_remove:
|
|
to_remove.unlink()
|
|
if not feedback:
|
|
feedback = _("Document Request: %s Uploaded by: %s", documents[0].name, self.env.user.name)
|
|
documents.write({
|
|
'attachment_id': attachment_ids[0],
|
|
'request_activity_id': False
|
|
})
|
|
|
|
return super(MailActivity, self)._action_done(feedback=feedback, attachment_ids=attachment_ids)
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
activities = super().create(vals_list)
|
|
upload_activities = activities.filtered(lambda act: act.activity_category == 'upload_file')
|
|
|
|
# link back documents and activities
|
|
upload_documents_activities = upload_activities.filtered(lambda act: act.res_model == 'documents.document')
|
|
if upload_documents_activities:
|
|
documents = self.env['documents.document'].browse(upload_documents_activities.mapped('res_id'))
|
|
for document, activity in zip(documents, upload_documents_activities):
|
|
if not document.request_activity_id:
|
|
document.request_activity_id = activity.id
|
|
|
|
# create underlying documents if related record is not a document
|
|
doc_vals = [{
|
|
'res_model': activity.res_model,
|
|
'res_id': activity.res_id,
|
|
'owner_id': activity.activity_type_id.default_user_id.id,
|
|
'folder_id': activity.activity_type_id.folder_id.id,
|
|
'tag_ids': [(6, 0, activity.activity_type_id.tag_ids.ids)],
|
|
'name': activity.summary or activity.res_name or 'upload file request',
|
|
'request_activity_id': activity.id,
|
|
} for activity in upload_activities.filtered(
|
|
lambda act: act.res_model != 'documents.document' and act.activity_type_id.folder_id
|
|
)]
|
|
if doc_vals:
|
|
self.env['documents.document'].sudo().create(doc_vals)
|
|
return activities
|