1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/sign/wizard/sign_duplicate_template_with_pdf.py
2024-12-10 09:04:09 +07:00

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