Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions sign_oca/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
4 changes: 4 additions & 0 deletions sign_oca/data/data.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
<field name="name">Check</field>
<field name="field_type">check</field>
</record>
<record id="sign_field_date" model="sign.oca.field">
<field name="name">Date</field>
<field name="field_type">date</field>
</record>
<record id="sign_role_customer" model="sign.oca.role">
<field name="name">Customer</field>
<field name="domain">[]</field>
Expand Down
2 changes: 1 addition & 1 deletion sign_oca/models/sign_oca_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)
Expand Down
73 changes: 73 additions & 0 deletions sign_oca/static/src/elements/date.esm.js
Original file line number Diff line number Diff line change
@@ -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;
15 changes: 15 additions & 0 deletions sign_oca/static/src/elements/elements.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,21 @@
/>
<div style="width:100%;height:100%" t-else="" t-out="placeholder" />
</t>
<t t-name="sign_oca.sign_iframe_field_date">
<input
style="width:100%;height:100%"
type="date"
t-att-tabindex="-1"
t-att-value="item._raw_date ? item._raw_date : undefined"
t-att-placeholder="item.placeholder || item.name"
t-if="item.role == role"
/>
<div
style="width:100%;height:100%"
t-out="item.value ? item.value : undefined"
t-else=""
/>
</t>
<t t-name="sign_oca.sign_oca_sign_dialog">
<div>
<div class="o_sign_oca_signature" />
Expand Down
Loading