diff --git a/sign_oca/controllers/main.py b/sign_oca/controllers/main.py
index 4d61d537..404127c4 100644
--- a/sign_oca/controllers/main.py
+++ b/sign_oca/controllers/main.py
@@ -1,3 +1,5 @@
+from werkzeug.wrappers import Response
+
from odoo import http
from odoo.exceptions import AccessError, MissingError
from odoo.http import request
@@ -12,7 +14,15 @@ def get_sign_resources(self, ext):
bundle = "sign_oca.sign_assets"
files, _ = request.env["ir.qweb"]._get_asset_content(bundle)
asset = AssetsBundle(bundle, files)
- mock_attachment = getattr(asset, ext)()
+ try:
+ mock_attachment = getattr(asset, ext)()
+ except Exception:
+ # Bundle has no assets for this type (e.g. no JS in a CSS-only bundle)
+ content_type = "application/javascript" if ext == "js" else "text/css"
+ return Response("", content_type=content_type, status=200)
+ if not mock_attachment:
+ content_type = "application/javascript" if ext == "js" else "text/css"
+ return Response("", content_type=content_type, status=200)
if isinstance(
mock_attachment, list
): # suppose that CSS asset will not required to be split in pages
diff --git a/sign_oca/models/sign_oca_request.py b/sign_oca/models/sign_oca_request.py
index 0459e7d2..dabec98f 100644
--- a/sign_oca/models/sign_oca_request.py
+++ b/sign_oca/models/sign_oca_request.py
@@ -279,6 +279,12 @@ def action_send_signed_request(self):
]
)
)
+ # Set a proper filename for the PDF attachment
+ doc_name = self.template_id.name or self.name or "signed_document"
+ pdf_filename = doc_name + ".pdf"
+ for att in attachments:
+ if att.name != pdf_filename:
+ att.sudo().write({"name": pdf_filename})
# The message will not be linked to the record because we do not want
# it happen.
self.env["mail.thread"].message_notify(
@@ -398,11 +404,20 @@ def _onchange_role_id(self):
def get_info(self, access_token=False):
self.ensure_one()
self._set_action_log("view", access_token=access_token)
+ # Use sudo to read to_sign to avoid ACL issues when computed fields
+ # traverse signer_ids in the public user context.
+ # For logged-in users, the compute still correctly matches partner_id.
+ to_sign = self.sudo().request_id.to_sign
+ # For public/anonymous users, to_sign is always False because the
+ # public user's partner won't match any signer. Fall back to checking
+ # this specific signer's state directly.
+ if not to_sign and not self.signed_on and self.request_id.state == "0_sent":
+ to_sign = True
return {
"role_id": self.role_id.id if not self.signed_on else False,
"name": self.request_id.template_id.name,
"items": self.request_id.signatory_data,
- "to_sign": self.request_id.to_sign,
+ "to_sign": to_sign,
"ask_location": self.request_id.ask_location,
"partner": {
"id": self.partner_id.id,
@@ -565,6 +580,10 @@ def _get_pdf_page_signature(self, item, box):
new_pdf = PdfFileReader(packet)
return new_pdf.getPage(0)
+ def _get_pdf_page_date(self, item, box):
+ """Render date field as text in the PDF."""
+ return self._get_pdf_page_text(item, box)
+
def _get_pdf_page(self, item, box):
return getattr(self, "_get_pdf_page_%s" % item["field_type"])(item, box)
diff --git a/sign_oca/security/ir.model.access.csv b/sign_oca/security/ir.model.access.csv
index a7530d69..cc336415 100644
--- a/sign_oca/security/ir.model.access.csv
+++ b/sign_oca/security/ir.model.access.csv
@@ -10,8 +10,10 @@ edit_sign_field_admin,edit_sign_field_admin,model_sign_oca_field,sign_oca_group_
edit_sign_request_base_user,edit_sign_request,model_sign_oca_request,base.group_user,1,0,0,0
edit_sign_request,edit_sign_request,model_sign_oca_request,sign_oca_group_user,1,1,1,0
edit_sign_request_admin,edit_sign_request_admin,model_sign_oca_request,sign_oca_group_admin,1,1,1,1
+access_sign_request_public,access_sign_request_public,model_sign_oca_request,base.group_public,1,0,0,0
edit_sign_request_signer_base_user,edit_sign_request_signer_base_user,model_sign_oca_request_signer,base.group_user,1,0,0,0
edit_sign_request_signer,edit_sign_request_signer,model_sign_oca_request_signer,sign_oca_group_user,1,1,1,1
+access_sign_request_signer_public,access_sign_request_signer_public,model_sign_oca_request_signer,base.group_public,1,0,0,0
edit_sign_generate,edit_sign_generate,model_sign_oca_template_generate,sign_oca_group_user,1,1,1,1
edit_sign_generate_signer,edit_sign_generate_signer,model_sign_oca_template_generate_signer,sign_oca_group_user,1,1,1,1
edit_sign_generate_multi,edit_sign_generate_multi,model_sign_oca_template_generate_multi,sign_oca_group_user,1,1,1,1
diff --git a/sign_oca/security/security.xml b/sign_oca/security/security.xml
index d59777fa..b4279d36 100644
--- a/sign_oca/security/security.xml
+++ b/sign_oca/security/security.xml
@@ -96,4 +96,25 @@