bemade-addons/bemade_document_versions/wizard/document_revision_wizard.py

73 lines
3.4 KiB
Python
Raw Permalink Normal View History

from odoo import models, fields, _, api
from odoo.exceptions import UserError
class DocumentRevisionWizard(models.TransientModel):
_name = 'documents.revision.wizard'
_description = 'Allows the creation of new document revisions'
document_id = fields.Many2one('documents.document', 'Document')
document_name = fields.Char()
file = fields.Binary('File to upload')
2023-10-18 08:57:01 -04:00
revision_name = fields.Char(required=True, readonly=True)
revision_sequence = fields.Many2one('ir.sequence', required=True)
revision_sequence_prefix = fields.Char(related='revision_sequence.prefix',
readonly=False)
revision_sequence_suffix = fields.Char(related='revision_sequence.suffix',
readonly=False)
revision_sequence_padding = fields.Integer(related='revision_sequence.padding',
readonly=False)
def default_get(self, fields_list):
ctx = self._context
vals = {}
if 'document_id' not in ctx:
raise UserError(
_('You must select a document for which you are creating a revision.'))
document = self.env['documents.document'].browse(ctx.get('document_id'))
vals['document_name'] = document.name
vals['document_id'] = document.id
sequence = document.revision_sequence or self.env.ref(
'bemade_document_versions.document_revision_sequence_default')
if document.revision_sequence:
2023-10-18 08:57:01 -04:00
vals['revision_name'] = document.get_next_revision_name()
else:
vals['revision_name'] = sequence.get_next_char(0)
vals['revision_sequence_prefix'] = sequence.prefix
vals['revision_sequence_suffix'] = sequence.suffix
vals['revision_sequence_padding'] = sequence.padding
return vals
2023-10-18 08:57:01 -04:00
@api.depends('document_id', 'document_id.revision_sequence',
'revision_sequence')
def action_upload_revision(self):
for wizard in self:
if not wizard.file:
raise UserError(_('You must upload a file.'))
2023-10-18 08:57:01 -04:00
wizard.revision_sequence.write({
'prefix': wizard.revision_sequence_prefix,
'suffix': wizard.revision_sequence_suffix,
'padding': wizard.revision_sequence_padding,
})
prev_attachment = wizard.document_id.attachment_id
attachment = self.env['ir.attachment'].with_context(
{'no_document': True}).create({
'name': prev_attachment.name,
'datas': wizard.file,
'res_model': prev_attachment.res_model,
'res_id': prev_attachment.res_id,
'company_id': prev_attachment.company_id.id,
'public': prev_attachment.public,
})
if not wizard.document_id.revision_sequence:
2023-10-18 08:57:01 -04:00
wizard.document_id.set_up_revisions(wizard.revision_sequence_prefix,
wizard.revision_sequence_suffix,
wizard.revision_sequence_padding)
else:
self.env['documents.revision'].create({
'document_id': wizard.document_id.id,
'attachment_id': attachment.id,
2023-10-18 08:57:01 -04:00
'name': wizard.document_id.revision_sequence.next_by_id(),
'attachment_id': attachment.id,
})