diff --git a/sign_oca/__manifest__.py b/sign_oca/__manifest__.py
index 11b20872..0479d490 100644
--- a/sign_oca/__manifest__.py
+++ b/sign_oca/__manifest__.py
@@ -48,6 +48,7 @@
"sign_oca/static/src/elements/text.esm.js",
"sign_oca/static/src/elements/signature.esm.js",
"sign_oca/static/src/elements/check.esm.js",
+ "sign_oca/static/src/elements/date.esm.js",
"sign_oca/static/src/components/sign_oca_pdf/sign_oca_pdf.esm.js",
"sign_oca/static/src/js/*.js",
"sign_oca/static/src/xml/*.xml",
@@ -77,6 +78,7 @@
"sign_oca/static/src/elements/text.esm.js",
"sign_oca/static/src/elements/signature.esm.js",
"sign_oca/static/src/elements/check.esm.js",
+ "sign_oca/static/src/elements/date.esm.js",
"sign_oca/static/src/components/sign_oca_pdf/sign_oca_pdf.esm.js",
"sign_oca/static/src/components/sign_oca_pdf_portal/sign_oca_pdf_portal.esm.js",
"sign_oca/static/src/components/sign_oca_pdf_portal/sign_oca_pdf_portal.xml",
diff --git a/sign_oca/data/data.xml b/sign_oca/data/data.xml
index 0b7a6393..f5f8a8e0 100644
--- a/sign_oca/data/data.xml
+++ b/sign_oca/data/data.xml
@@ -27,6 +27,10 @@
Check
check
+
+ Date
+ date
+
Customer
[]
diff --git a/sign_oca/models/sign_oca_field.py b/sign_oca/models/sign_oca_field.py
index 05736ff0..8bc8f47b 100644
--- a/sign_oca/models/sign_oca_field.py
+++ b/sign_oca/models/sign_oca_field.py
@@ -10,7 +10,7 @@ class SignOcaField(models.Model):
name = fields.Char(required=True)
field_type = fields.Selection(
- [("text", "Text"), ("signature", "Signature"), ("check", "Check")],
+ [("text", "Text"), ("signature", "Signature"), ("check", "Check"), ("date", "Date")],
required=True,
default="text",
)
diff --git a/sign_oca/static/src/elements/date.esm.js b/sign_oca/static/src/elements/date.esm.js
new file mode 100644
index 00000000..52bc0c11
--- /dev/null
+++ b/sign_oca/static/src/elements/date.esm.js
@@ -0,0 +1,73 @@
+/** @odoo-module QWeb **/
+
+import {registry} from "@web/core/registry";
+import {renderToString} from "@web/core/utils/render";
+
+const dateSignOca = {
+ change: function (value, parent, item) {
+ // Store the date as a locale-formatted string for PDF rendering
+ if (value) {
+ const dateObj = new Date(value + "T00:00:00");
+ item.value = dateObj.toLocaleDateString("en-US", {
+ year: "numeric",
+ month: "2-digit",
+ day: "2-digit",
+ });
+ } else {
+ item.value = value;
+ }
+ // Keep the raw ISO value for the input element
+ item._raw_date = value;
+ parent.checkFilledAll();
+ },
+ generate: function (parent, item, signatureItem) {
+ var input = $(
+ renderToString("sign_oca.sign_iframe_field_date", {
+ item: item,
+ role_id: parent.info.role_id,
+ })
+ )[0];
+ signatureItem[0].addEventListener("focus_signature", () => {
+ input.focus();
+ });
+ input.addEventListener("focus", (ev) => {
+ // Auto-fill with today's date when focused if empty
+ if (!item.value) {
+ const today = new Date();
+ const isoDate = today.toISOString().split("T")[0];
+ ev.target.value = isoDate;
+ this.change(isoDate, parent, item, signatureItem);
+ }
+ });
+ input.addEventListener("change", (ev) => {
+ this.change(ev.srcElement.value, parent, item, signatureItem);
+ });
+ input.addEventListener("keydown", (ev) => {
+ if ((ev.keyCode || ev.which) !== 9) {
+ return true;
+ }
+ ev.preventDefault();
+ var next_items = Object.values(parent.info.items)
+ .filter(
+ (i) =>
+ i.tabindex > item.tabindex && i.role_id === parent.info.role_id
+ )
+ .sort((a, b) => a.tabindex - b.tabindex);
+ if (next_items.length > 0) {
+ ev.currentTarget.blur();
+ const nextItem = next_items[0];
+ if (nextItem && parent.items && parent.items[nextItem.id]) {
+ parent.items[nextItem.id].dispatchEvent(
+ new Event("focus_signature")
+ );
+ }
+ }
+ });
+ return input;
+ },
+ check: function (item) {
+ return Boolean(item.value);
+ },
+};
+registry.category("sign_oca").add("date", dateSignOca);
+export default dateSignOca;
diff --git a/sign_oca/static/src/elements/elements.xml b/sign_oca/static/src/elements/elements.xml
index 10fa65c7..93d2711a 100644
--- a/sign_oca/static/src/elements/elements.xml
+++ b/sign_oca/static/src/elements/elements.xml
@@ -34,6 +34,21 @@
/>
+
+
+
+