diff --git a/print_designer/patches.txt b/print_designer/patches.txt index 5cd0b74..3de7206 100644 --- a/print_designer/patches.txt +++ b/print_designer/patches.txt @@ -15,3 +15,4 @@ print_designer.patches.introduce_dynamic_height print_designer.patches.remove_unused_rectangle_gs_properties print_designer.patches.change_dynamic_height_variable print_designer.patches.introduce_z_index +print_designer.patches.move_header_footers_to_new_schema diff --git a/print_designer/patches/move_header_footers_to_new_schema.py b/print_designer/patches/move_header_footers_to_new_schema.py new file mode 100644 index 0000000..143e5a8 --- /dev/null +++ b/print_designer/patches/move_header_footers_to_new_schema.py @@ -0,0 +1,96 @@ +import frappe + +from print_designer.pdf import is_older_schema + + +def patch_format(): + print_formats = frappe.get_all( + "Print Format", + filters={"print_designer": 1}, + fields=[ + "name", + "print_designer_header", + "print_designer_body", + "print_designer_after_table", + "print_designer_footer", + "print_designer_print_format", + "print_designer_settings", + ], + ) + for pf in print_formats: + settings = frappe.json.loads(pf.print_designer_settings or "{}") + + header_childrens = frappe.json.loads(pf.print_designer_header or "[]") + header_data = [ + { + "type": "page", + "childrens": header_childrens, + "firstPage": True, + "oddPage": True, + "evenPage": True, + "lastPage": True, + } + ] + + footer_childrens = frappe.json.loads(pf.print_designer_footer or "[]") + footer_data = [ + { + "type": "page", + "childrens": footer_childrens, + "firstPage": True, + "oddPage": True, + "evenPage": True, + "lastPage": True, + } + ] + for child in footer_childrens: + child["startY"] -= ( + settings["page"].get("height", 0) + - settings["page"].get("marginTop", 0) + - settings["page"].get("footerHeight", 0) + ) + + childrens = frappe.json.loads(pf.print_designer_body or "[]") + bodyPage = [ + { + "index": 0, + "type": "page", + "childrens": childrens, + "isDropZone": True, + } + ] + object_to_save = { + "print_designer_header": frappe.json.dumps(header_data), + "print_designer_body": frappe.json.dumps(bodyPage), + "print_designer_footer": frappe.json.dumps(footer_data), + "print_designer_settings": frappe.json.dumps(settings), + } + if not is_older_schema(settings=settings, current_version="1.1.0"): + pf_print_format = frappe.json.loads(pf.print_designer_print_format) + if "header" in pf_print_format: + pf_print_format["header"] = { + "firstPage": pf_print_format["header"], + "oddPage": pf_print_format["header"], + "evenPage": pf_print_format["header"], + "lastPage": pf_print_format["header"], + } + if "footer" in pf_print_format: + pf_print_format["footer"] = { + "firstPage": pf_print_format["footer"], + "oddPage": pf_print_format["footer"], + "evenPage": pf_print_format["footer"], + "lastPage": pf_print_format["footer"], + } + object_to_save["print_designer_print_format"] = frappe.json.dumps(pf_print_format) + + frappe.set_value( + "Print Format", + pf.name, + object_to_save, + ) + return print_formats + + +def execute(): + """Updating Table and Dynamic Text Elements to have property isDynamicHeight with default value as True""" + patch_format() diff --git a/print_designer/print_designer/page/print_designer/jinja/header_footer.html b/print_designer/print_designer/page/print_designer/jinja/header_footer.html index e7f024d..552e490 100644 --- a/print_designer/print_designer/page/print_designer/jinja/header_footer.html +++ b/print_designer/print_designer/page/print_designer/jinja/header_footer.html @@ -51,7 +51,70 @@ y[j].textContent = vars[x[i]]; } } - } + + const headers = { + firstPage : document.getElementById("firstPageHeader"), + oddPage : document.getElementById("oddPageHeader"), + evenPage : document.getElementById("evenPageHeader"), + lastPage : document.getElementById("lastPageHeader"), + } + const footers = { + firstPage : document.getElementById("firstPageFooter"), + oddPage : document.getElementById("oddPageFooter"), + evenPage : document.getElementById("evenPageFooter"), + lastPage : document.getElementById("lastPageFooter"), + } + function displayHeaderFooter(elements, selectedElements) { + for (var key in elements) { + if (elements[key]) { + if (elements[key] === selectedElements) { + elements[key].style.display = "block"; + } else { + elements[key].style.display = "none"; + } + } + } + } + var page_no = parseInt(vars["page"]); + var total_page_no = parseInt(vars["topage"]); + if (page_no == 1) { + if (headers.firstPage) { + displayHeaderFooter(headers, headers.firstPage); + } else { + displayHeaderFooter(headers, headers.oddPage); + } + if (footers.firstPage) { + displayHeaderFooter(footers, footers.firstPage); + } else { + displayHeaderFooter(footers, footers.oddPage); + } + } else if (page_no == total_page_no) { + if (headers.lastPage) { + displayHeaderFooter(headers, headers.lastPage); + } else { + if (total_page_no % 2 == 0) { + displayHeaderFooter(headers, headers.evenPage); + } else { + displayHeaderFooter(headers, headers.oddPage); + } + } + if (footers.lastPage) { + displayHeaderFooter(footers, footers.lastPage); + } else { + if (total_page_no % 2 == 0) { + displayHeaderFooter(footers, footers.evenPage); + } else { + displayHeaderFooter(footers, footers.oddPage); + } + } + } else if (page_no % 2 == 0) { + displayHeaderFooter(headers, headers.evenPage); + displayHeaderFooter(footers, footers.evenPage); + } else { + displayHeaderFooter(headers, headers.oddPage); + displayHeaderFooter(footers, footers.oddPage); + } + } {% for tag in styles -%} diff --git a/print_designer/print_designer/page/print_designer/jinja/macros/rectangle.html b/print_designer/print_designer/page/print_designer/jinja/macros/rectangle.html index e795ad7..52a6b63 100644 --- a/print_designer/print_designer/page/print_designer/jinja/macros/rectangle.html +++ b/print_designer/print_designer/page/print_designer/jinja/macros/rectangle.html @@ -1,9 +1,9 @@ {% macro rectangle(element, render_element, send_to_jinja, heightType) -%} {%- set heightType = element.get("heightType") -%} - {%- if settings.get("schema_version") == "1.1.0" -%} + {%- if settings.get("schema_version") == "1.1.0" or heightType == None -%} {%- set heightType = "auto" if element.get("isDynamicHeight", False) else "fixed" -%} {%- endif -%} -