forked from Mapan/odoo17e
50 lines
2.1 KiB
Python
50 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
import io
|
|
import base64
|
|
|
|
from odoo import api, models, fields, _
|
|
from odoo.exceptions import UserError, ValidationError
|
|
from odoo.tools.pdf import PdfFileReader, PdfReadError
|
|
|
|
class SignDuplicateTemplatePDF(models.TransientModel):
|
|
_name = 'sign.duplicate.template.pdf'
|
|
_description = 'Sign Duplicate Template with new PDF'
|
|
|
|
new_pdf = fields.Binary(string="File name", required=True)
|
|
original_template_id = fields.Many2one(
|
|
'sign.template', string="Original File", required=True, ondelete='cascade',
|
|
default=lambda self: self.env.context.get('active_id', None),
|
|
)
|
|
new_template = fields.Char('New Template Name')
|
|
|
|
def duplicate_template_with_pdf(self):
|
|
if not self._compare_page_templates(self.original_template_id.datas, self.new_pdf):
|
|
raise UserError(_("The template has more pages than the current file, it can't be applied."))
|
|
|
|
self.original_template_id.check_access_rights('write')
|
|
self.original_template_id.check_access_rule('write')
|
|
pdf = self.env['ir.attachment'].create({
|
|
'name': self.new_template or self.original_template_id.name,
|
|
'datas': self.new_pdf,
|
|
'type': 'binary'
|
|
})
|
|
|
|
new_template = self.original_template_id.sudo().copy({
|
|
'name': pdf.name,
|
|
'attachment_id': pdf.id,
|
|
'active': True,
|
|
'favorited_ids': [(4, self.env.user.id)],
|
|
})
|
|
|
|
return new_template.go_to_custom_template()
|
|
|
|
@api.model
|
|
def _compare_page_templates(self, original_file, new_file):
|
|
pages_original_file = PdfFileReader(io.BytesIO(base64.b64decode(original_file)), strict=False, overwriteWarnings=False).getNumPages()
|
|
try:
|
|
pages_new_file = PdfFileReader(io.BytesIO(base64.b64decode(new_file)), strict=False, overwriteWarnings=False).getNumPages()
|
|
except PdfReadError:
|
|
raise ValidationError(_("The uploaded file is not a valid PDF. Please upload a valid PDF file."))
|
|
return pages_new_file >= pages_original_file
|