62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
from odoo import models, _, api, fields
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class IrAttachment(models.Model):
|
|
_inherit = 'ir.attachment'
|
|
|
|
def create(self, vals_list):
|
|
# 1. Get the limit from system parameters (set via res.config.settings)
|
|
# Default to 2048 MB (2 GB) if not set in settings
|
|
max_size_mb = float(self.env['ir.config_parameter'].sudo().get_param(
|
|
'attachment_size.max_attachment_size', default=2048.0
|
|
))
|
|
|
|
# 2. Convert MB to bytes
|
|
max_size_bytes = max_size_mb * 1024 * 1024
|
|
|
|
# 3. Validate file size
|
|
for vals in vals_list:
|
|
if vals.get('datas'):
|
|
# Base64 increases size by ~33%, so we check against max_size_bytes * 4 / 3
|
|
if len(vals['datas']) > (max_size_bytes * 4 / 3):
|
|
raise UserError(_(
|
|
"File size exceeds the maximum allowed limit of %(max_size)s MB.",
|
|
max_size=max_size_mb
|
|
))
|
|
|
|
return super().create(vals_list)
|
|
|
|
|
|
class FileSizeConfigSetting(models.TransientModel):
|
|
_inherit = 'res.config.settings'
|
|
|
|
max_attachment_size = fields.Float(
|
|
string="Maximum Attachment Size (MB)",
|
|
config_parameter='attachment_size.max_attachment_size',
|
|
help="Set the maximum size for attachments in MB. Default is 2048 MB (2 GB)."
|
|
)
|
|
|
|
|
|
class Http(models.AbstractModel):
|
|
_inherit = "ir.http"
|
|
|
|
@api.model
|
|
def session_info(self):
|
|
session_info = super().session_info()
|
|
|
|
# Get the limit from system parameters, default to 2048 MB (2 GB)
|
|
max_size_mb = float(self.env['ir.config_parameter'].sudo().get_param(
|
|
'attachment_size.max_attachment_size', default=2048.0
|
|
))
|
|
|
|
max_attachment_size_bytes = max_size_mb * 1024 * 1024 # Convert MB to Bytes
|
|
|
|
# Always update session_info so JS always has a value (no more undefined)
|
|
session_info.update({
|
|
"max_attachment_size": max_attachment_size_bytes,
|
|
"max_size": max_size_mb,
|
|
"max_file_upload_size": max_attachment_size_bytes,
|
|
})
|
|
|
|
return session_info |