diff --git a/sign_oca/__manifest__.py b/sign_oca/__manifest__.py
index 95a3faff..b4ad4240 100644
--- a/sign_oca/__manifest__.py
+++ b/sign_oca/__manifest__.py
@@ -16,6 +16,7 @@
"data/data.xml",
"wizards/sign_oca_template_generate.xml",
"wizards/sign_oca_template_generate_multi.xml",
+ "views/res_config_settings_views.xml",
"views/res_partner_views.xml",
"views/sign_oca_request_log.xml",
"views/sign_oca_request.xml",
diff --git a/sign_oca/models/__init__.py b/sign_oca/models/__init__.py
index 32aa7235..1cbaaba0 100644
--- a/sign_oca/models/__init__.py
+++ b/sign_oca/models/__init__.py
@@ -1,3 +1,4 @@
+from . import res_company
from . import res_users
from . import res_partner
from . import sign_oca_template
diff --git a/sign_oca/models/res_company.py b/sign_oca/models/res_company.py
new file mode 100644
index 00000000..6b21ca54
--- /dev/null
+++ b/sign_oca/models/res_company.py
@@ -0,0 +1,14 @@
+# Copyright 2024 ForgeFlow S.L. (http://www.forgeflow.com)
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
+
+from odoo import fields, models
+
+
+class ResCompany(models.Model):
+ _inherit = "res.company"
+
+ sign_oca_send_sign_request_copy = fields.Boolean(
+ string="Send signers a copy of the final signed document",
+ help="Once all signers have signed the request, a copy of "
+ "the final document will be sent to each of them.",
+ )
diff --git a/sign_oca/models/sign_oca_request.py b/sign_oca/models/sign_oca_request.py
index cb84bc8c..e0459704 100644
--- a/sign_oca/models/sign_oca_request.py
+++ b/sign_oca/models/sign_oca_request.py
@@ -270,6 +270,40 @@ def action_send(self, sign_now=False, message=""):
email_layout_xmlid="mail.mail_notification_light",
)
+ def action_send_signed_request(self):
+ self.ensure_one()
+ if (
+ self.state != "signed"
+ or not self.env.company.sign_oca_send_sign_request_copy
+ ):
+ return
+ for signer in self.signer_ids:
+ attachments = (
+ self.env["ir.attachment"]
+ .sudo()
+ .search(
+ [
+ ("res_model", "=", "sign.oca.request"),
+ ("res_id", "=", self.id),
+ ("res_field", "=", "data"),
+ ]
+ )
+ )
+ # The message will not be linked to the record because we do not want
+ # it happen.
+ self.env["mail.thread"].message_notify(
+ body=_(
+ "%(name)s (%(email)s) has sent the signed document.",
+ name=self.create_uid.name,
+ email=self.create_uid.email,
+ ),
+ partner_ids=signer.partner_id.ids,
+ subject=_("Signed document"),
+ subtype_id=self.env.ref("mail.mt_comment").id,
+ mail_auto_delete=False,
+ attachment_ids=attachments.ids,
+ )
+
def _check_signed(self):
self.ensure_one()
if self.state != "sent":
@@ -431,6 +465,7 @@ def action_sign(self, items, access_token=False):
self.signature_hash = final_hash
self.request_id._check_signed()
self._set_action_log("sign", access_token=access_token)
+ self.request_id.action_send_signed_request()
return {
"type": "ir.actions.act_url",
"url": self.access_url,
diff --git a/sign_oca/static/description/index.html b/sign_oca/static/description/index.html
index f82e98fa..43c66281 100644
--- a/sign_oca/static/description/index.html
+++ b/sign_oca/static/description/index.html
@@ -8,11 +8,10 @@
/*
:Author: David Goodger (goodger@python.org)
-:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
+:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
-Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
@@ -275,7 +274,7 @@
margin-left: 2em ;
margin-right: 2em }
-pre.code .ln { color: gray; } /* line numbers */
+pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
@@ -301,7 +300,7 @@
span.pre {
white-space: pre }
-span.problematic, pre.problematic {
+span.problematic {
color: red }
span.section-subtitle {
@@ -505,9 +504,7 @@
This module is maintained by the OCA.
-
-
-
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
diff --git a/sign_oca/views/menu.xml b/sign_oca/views/menu.xml
index 411e2a8f..6fc13da9 100644
--- a/sign_oca/views/menu.xml
+++ b/sign_oca/views/menu.xml
@@ -11,10 +11,17 @@
sequence="16"
groups="sign_oca.sign_oca_group_user"
/>
-
-
+
diff --git a/sign_oca/views/sign_oca_role.xml b/sign_oca/views/sign_oca_role.xml
index 31f6b490..c333fff4 100644
--- a/sign_oca/views/sign_oca_role.xml
+++ b/sign_oca/views/sign_oca_role.xml
@@ -57,10 +57,11 @@
[]
{}
-
+
diff --git a/sign_oca/wizards/__init__.py b/sign_oca/wizards/__init__.py
index b173f2c6..8d660153 100644
--- a/sign_oca/wizards/__init__.py
+++ b/sign_oca/wizards/__init__.py
@@ -1,2 +1,3 @@
+from . import res_config_settings
from . import sign_oca_template_generate
from . import sign_oca_template_generate_multi
diff --git a/sign_oca/wizards/res_config_settings.py b/sign_oca/wizards/res_config_settings.py
new file mode 100644
index 00000000..bb023922
--- /dev/null
+++ b/sign_oca/wizards/res_config_settings.py
@@ -0,0 +1,12 @@
+# Copyright 2024 ForgeFlow S.L. (http://www.forgeflow.com)
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
+
+from odoo import fields, models
+
+
+class ResConfigSettings(models.TransientModel):
+ _inherit = "res.config.settings"
+
+ sign_oca_send_sign_request_copy = fields.Boolean(
+ related="company_id.sign_oca_send_sign_request_copy", readonly=False
+ )