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 @@ />
+ + +
+