From 1d163454d1481fa05495dc91742903b1dc95c6be Mon Sep 17 00:00:00 2001 From: Tyler Matteson Date: Tue, 14 May 2024 17:27:38 -0400 Subject: [PATCH 1/8] wip: print preview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Print Preview Changes by FossERP (#245) * remove print Get pdf * fetch all payment entry preview in one single preview * override a print button * print page breake issue resolve * print on specific url * fix: Url of print * PDF Button override * on draft stage only allow check run default print format * on draft stage only allow check run default print format * if check run in draft then print should show msg * remove unrelevent controll * ci: track overrides por Payment Entry (#248) * on change of doctype change list of print format * change the preview and print view on change of selcted options * render pdf base on selected print_sel * create new print format 'Check Run' * remove standard formats * added a background image in check format * set the size of check format background image * back ground image only allow in print not in pdf * Confirm print pop up * Secondary print format added * remove background image in pdf * reformat by pre-commit * Change syntex * closed the window after action on print window --------- Co-authored-by: Francisco Roldán wip: configurable PDF generation or preview wip: print preview working wip: update prettier approach ci: update override commit hashes test: fix duplicated date feat: add printable MOP in settings, update print formats docs: update for print settings feat: add multiselect child table ci: update override commit hashes -correct branch chore: add patch for multiselect printable mops wip: refactor to dynamic link ci: update track override commits refactor: add page break in print format refactor: lists references vs table if secondary print format set feat: limit table to 6 references otherwise comma separate chore: update track overrides hash values --- .pre-commit-config.yaml | 7 + .prettierrc.js => .prettierrc.cjs | 0 check_run/.editorconfig | 15 + .../check_run/doctype/check_run/check_run.js | 84 +- .../check_run/doctype/check_run/check_run.py | 147 +++- .../check_run_printable_mop/__init__.py | 0 .../check_run_printable_mop.json | 30 + .../check_run_printable_mop.py | 9 + .../check_run_settings/check_run_settings.js | 8 + .../check_run_settings.json | 105 +-- check_run/check_run/page/__init__.py | 0 .../page/print_check_run/__init__.py | 0 .../page/print_check_run/print_check_run.js | 750 ++++++++++++++++++ .../page/print_check_run/print_check_run.json | 19 + .../print_skeleton_loading.html | 159 ++++ .../print_format/check_run/__init__.py | 0 .../print_format/check_run/check_run.json | 32 + .../example_secondary_print_format.json | 4 +- .../example_voucher/example_voucher.json | 6 +- check_run/overrides/payment_entry.py | 686 ++++++++-------- check_run/patches.txt | 3 +- .../patches/patch_printable_mop_table.py | 19 + check_run/tests/setup.py | 26 +- check_run/www/__init__.py | 0 check_run/www/print_check_run.html | 37 + check_run/www/print_check_run.py | 177 +++++ .../assets/print_format_example_voucher.png | Bin 0 -> 179503 bytes .../en/assets/print_format_secondary.png | Bin 0 -> 117591 bytes .../en/assets/settings_print_section.png | Bin 0 -> 78523 bytes docs/version-14/en/exampleprint.md | 14 +- docs/version-14/en/settings.md | 15 + 31 files changed, 1841 insertions(+), 511 deletions(-) rename .prettierrc.js => .prettierrc.cjs (100%) create mode 100644 check_run/.editorconfig create mode 100644 check_run/check_run/doctype/check_run_printable_mop/__init__.py create mode 100644 check_run/check_run/doctype/check_run_printable_mop/check_run_printable_mop.json create mode 100644 check_run/check_run/doctype/check_run_printable_mop/check_run_printable_mop.py create mode 100644 check_run/check_run/page/__init__.py create mode 100644 check_run/check_run/page/print_check_run/__init__.py create mode 100644 check_run/check_run/page/print_check_run/print_check_run.js create mode 100644 check_run/check_run/page/print_check_run/print_check_run.json create mode 100644 check_run/check_run/page/print_check_run/print_skeleton_loading.html create mode 100644 check_run/check_run/print_format/check_run/__init__.py create mode 100644 check_run/check_run/print_format/check_run/check_run.json create mode 100644 check_run/patches/patch_printable_mop_table.py create mode 100644 check_run/www/__init__.py create mode 100644 check_run/www/print_check_run.html create mode 100644 check_run/www/print_check_run.py create mode 100644 docs/version-14/en/assets/print_format_example_voucher.png create mode 100644 docs/version-14/en/assets/print_format_secondary.png create mode 100644 docs/version-14/en/assets/settings_print_section.png diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 18bcb07a..18c1de04 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -76,6 +76,13 @@ repos: entry: npx prettier . --write --ignore-path .prettierignore language: node + - repo: local + hooks: + - id: prettier + name: prettier + entry: npx prettier -w . --config .prettierrc.cjs --ignore-path .prettierignore + language: system + ci: autoupdate_schedule: weekly skip: [] diff --git a/.prettierrc.js b/.prettierrc.cjs similarity index 100% rename from .prettierrc.js rename to .prettierrc.cjs diff --git a/check_run/.editorconfig b/check_run/.editorconfig new file mode 100644 index 00000000..b72767b9 --- /dev/null +++ b/check_run/.editorconfig @@ -0,0 +1,15 @@ +# Root editor config file +root = true + +# Common settings +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +# python, js indentation settings +[{*.py,*.js,*.vue,*.css,*.scss,*.html}] +indent_style = tab +indent_size = 2 +max_line_length = 99 diff --git a/check_run/check_run/doctype/check_run/check_run.js b/check_run/check_run/doctype/check_run/check_run.js index c45e028a..f1fd5040 100644 --- a/check_run/check_run/doctype/check_run/check_run.js +++ b/check_run/check_run/doctype/check_run/check_run.js @@ -9,7 +9,7 @@ frappe.ui.form.on('Check Run', { show_progress_bar(frm, data, 'Processing') }) frappe.realtime.on('render_check_progress', data => { - show_progress_bar(frm, data, 'Printing') + show_progress_bar(frm, data, 'Rendering') }) }, validate: frm => { @@ -66,6 +66,17 @@ frappe.ui.form.on('Check Run', { frm.set_df_property('final_check_number', 'read_only', 1) } check_settings(frm) + $('[data-original-title="Print"]').hide() + if (frappe.model.can_print(null, frm)) { + frm.page.add_action_icon( + 'printer', + () => { + frappe.set_route('print-check-run', frm.doc.name) + }, + '', + __('Print') + ) + } }, onload_post_render: frm => { frm.page.wrapper.find('.layout-side-section').hide() @@ -343,6 +354,9 @@ function confirm_print(frm) { } function reprint_checks(frm) { + if (frm.settings.print_preview == 'Print from Print Preview') { + return + } frm.set_value('status', 'Submitted') let d = new frappe.ui.Dialog({ title: __('Re-Print'), @@ -375,43 +389,51 @@ function reprint_checks(frm) { } function ach_only(frm) { - frappe - .xcall('check_run.check_run.doctype.check_run.check_run.ach_only', { - docname: frm.doc.name, - }) - .then(r => { - if (!r.ach_only) { - if (frm.doc.docstatus == 1) { - if (frm.doc.print_count > 0 && frm.doc.status != 'Ready to Print') { - if (frappe.perm.has_perm('Check Run', 0, 'print')) { - frm.add_custom_button(__('Re-Print Checks'), () => { - reprint_checks(frm) - }) + if (frm.settings.print_preview != 'Print from Print Preview') { + frappe + .xcall('check_run.check_run.doctype.check_run.check_run.ach_only', { + docname: frm.doc.name, + }) + .then(r => { + if (!r.ach_only) { + if (frm.doc.docstatus == 1) { + if (frm.doc.print_count > 0 && frm.doc.status != 'Ready to Print') { + if (frappe.perm.has_perm('Check Run', 0, 'print')) { + frm.add_custom_button(__('Re-Print Checks'), () => { + reprint_checks(frm) + }) + } + } else if (frm.doc.print_count == 0 && frm.doc.status == 'Submitted') { + if (frappe.perm.has_perm('Check Run', 0, 'print')) { + render_checks(frm) + } } - } else if (frm.doc.print_count == 0 && frm.doc.status == 'Submitted') { + } + if (frm.doc.status == 'Ready to Print') { if (frappe.perm.has_perm('Check Run', 0, 'print')) { - render_checks(frm) + frm.add_custom_button(__('Download Checks'), () => { + download_checks(frm) + }) } + } else if ( + frm.doc.print_count == 0 && + frm.doc.status == 'Submitted' && + frm.doc.__onload.print_preview == 'Automatically Render PDF after Submit' + ) { + render_checks(frm) } } - if (frm.doc.status == 'Ready to Print') { - if (frappe.perm.has_perm('Check Run', 0, 'print')) { - frm.add_custom_button(__('Download Checks'), () => { - download_checks(frm) - }) - } - } - } - if (!r.print_checks_only) { - if (frm.doc.docstatus == 1) { - if (frappe.perm.has_perm('Check Run', 0, 'print')) { - frm.add_custom_button(__('Download NACHA File'), () => { - download_nacha(frm) - }) + if (!r.print_checks_only) { + if (frm.doc.docstatus == 1) { + if (frappe.perm.has_perm('Check Run', 0, 'print')) { + frm.add_custom_button(__('Download NACHA File'), () => { + download_nacha(frm) + }) + } } } - } - }) + }) + } } function validate_mode_of_payment_mandatory(frm) { diff --git a/check_run/check_run/doctype/check_run/check_run.py b/check_run/check_run/doctype/check_run/check_run.py index 19fb8292..3657ec4d 100644 --- a/check_run/check_run/doctype/check_run/check_run.py +++ b/check_run/check_run/doctype/check_run/check_run.py @@ -6,8 +6,11 @@ from itertools import groupby, zip_longest from io import StringIO from typing_extensions import Self - +from frappe.www.printview import validate_print_permission +from frappe.translate import print_language from PyPDF2 import PdfFileWriter +from bs4 import BeautifulSoup + import frappe from frappe.desk.query_report import run, build_xlsx_data, format_duration_fields from frappe.desk.utils import get_csv_bytes, pop_csv_params @@ -15,7 +18,6 @@ from frappe.utils import get_link_to_form from frappe.utils.data import flt from frappe.utils.data import nowdate, getdate, now, get_datetime -from frappe.utils.print_format import read_multi_pdf from frappe.utils.xlsxutils import make_xlsx from frappe.permissions import has_permission from frappe.utils.file_manager import save_file, remove_all @@ -426,14 +428,18 @@ def increment_print_count(self: Self, reprint_check_number: int | None = None) - frappe.enqueue_doc( self.doctype, self.name, - "render_check_pdf", + "render_check_run", reprint_check_number=reprint_check_number, queue="short", now=True, ) @frappe.whitelist() - def render_check_pdf(self: Self, reprint_check_number: int | None = None) -> None: + def render_check_run( + self: Self, reprint_check_number: int | None = None, pdf: bool = True + ) -> None | str: + from frappe.utils.print_format import read_multi_pdf # imported here to prevent circular imports + self.print_count = self.print_count + 1 self.set_status("Submitted") if not frappe.db.exists("File", "Home/Check Run"): @@ -449,6 +455,7 @@ def render_check_pdf(self: Self, reprint_check_number: int | None = None) -> Non self.initial_check_number = int(reprint_check_number) output = PdfFileWriter() secondary_print_output = PdfFileWriter() + html = [] transactions = json.loads(self.transactions) check_increment = 0 _transactions = [] @@ -467,20 +474,33 @@ def render_check_pdf(self: Self, reprint_check_number: int | None = None) -> Non "Payment Entry", pe, settings.secondary_print_format or frappe.get_meta("Payment Entry").default_print_format, - as_pdf=True, - output=secondary_print_output, + as_pdf=pdf, + output=secondary_print_output if pdf else "", no_letterhead=0, ) if docstatus == 1 and frappe.db.get_value("Mode of Payment", mode_of_payment, "type") == "Bank": if mode_of_payment == "Check": - output = frappe.get_print( - "Payment Entry", - pe, - settings.print_format or frappe.get_meta("Payment Entry").default_print_format, - as_pdf=True, - output=output, - no_letterhead=0, - ) + if pdf: + output = frappe.get_print( + "Payment Entry", + pe, + settings.print_format or frappe.get_meta("Payment Entry").default_print_format, + as_pdf=True, + output=output, + no_letterhead=0, + ) + else: + _output = frappe.get_print( + "Payment Entry", + pe, + settings.print_format or frappe.get_meta("Payment Entry").default_print_format, + as_pdf=False, + no_letterhead=0, + ) + soup = BeautifulSoup(_output, "html.parser") + soup.find("div", class_="action-banner").decompose() + soup.find("div", class_="print-format-gutter").unwrap() + html.append(soup.prettify()) if initial_check_number != reprint_check_number: frappe.db.set_value( "Payment Entry", pe, "reference_no", self.initial_check_number + check_increment @@ -513,22 +533,27 @@ def render_check_pdf(self: Self, reprint_check_number: int | None = None) -> Non self.db_set("status", "Ready to Print") self.db_set("print_count", self.print_count) frappe.db.set_value("Bank Account", self.bank_account, "check_number", self.final_check_number) - file_path = save_file( - f"{self.name}.pdf", read_multi_pdf(output), "Check Run", self.name, "Home/Check Run", False, 0 - ) - if settings.secondary_print_format: - save_file( - f"Supplementary {self.name}.pdf", - read_multi_pdf(secondary_print_output), - "Check Run", - self.name, - "Home/Check Run", - False, - 0, + if pdf: + file_path = save_file( + f"{self.name}.pdf", read_multi_pdf(output), "Check Run", self.name, "Home/Check Run", False, 0 + ) + # TODO: this is raising an issue + # save_file( + # f"{self.name}.pdf", + # read_multi_pdf(se_print_output), + # "Check Run", + # self.name, + # "Home/Check Run", + # False, + # 0, + # ) + frappe.db.commit() + frappe.publish_realtime("reload", "{}", doctype=self.doctype, docname=self.name) + return file_path + else: + return '


'.join( + html ) - frappe.db.commit() - frappe.publish_realtime("reload", "{}", doctype=self.doctype, docname=self.name) - return file_path def create_and_attach_positive_pay(self): settings = get_check_run_settings(self) @@ -1066,3 +1091,67 @@ def process_check_run(docname: str) -> None: ) doc = frappe.get_doc("Check Run", docname) doc.process_check_run() + + +@frappe.whitelist(allow_guest=True) +def download_pdf( + doctype, + name, + formattype=None, + print_format=None, + doc=None, + no_letterhead=0, + language=None, + letterhead=None, + baseurl=None, + printcss=None, +): + doc = doc or frappe.get_doc(doctype, name) + validate_print_permission(doc) + from check_run.www.print_check_run import get_check_run_format + + out = get_check_run_format( + doc, name=doc.name, doctype_to_print=formattype, print_format=print_format + ) + data = "" + for d in out.get("html"): + data += d[0] + + style = out.get("style") + + hide_image = """ + @media print { + @print { + margin: 0; + } + + .back_image { + background: none !important; + } + } + """ + + html = """""".format( + style, baseurl, printcss + ) + + html += f"" + + modified_html_string = html.replace("", hide_image + "") + html = modified_html_string + with print_language(language): + pdf_file = frappe.get_print( + doctype, + name, + html=html, + doc=doc, + as_pdf=True, + letterhead=letterhead, + no_letterhead=no_letterhead, + ) + + frappe.local.response.filename = "{name}.pdf".format( + name=name.replace(" ", "-").replace("/", "-") + ) + frappe.local.response.filecontent = pdf_file + frappe.local.response.type = "pdf" diff --git a/check_run/check_run/doctype/check_run_printable_mop/__init__.py b/check_run/check_run/doctype/check_run_printable_mop/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/check_run/check_run/doctype/check_run_printable_mop/check_run_printable_mop.json b/check_run/check_run/doctype/check_run_printable_mop/check_run_printable_mop.json new file mode 100644 index 00000000..237de0f9 --- /dev/null +++ b/check_run/check_run/doctype/check_run_printable_mop/check_run_printable_mop.json @@ -0,0 +1,30 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2024-07-31 17:10:07.841441", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": ["mode_of_payment"], + "fields": [ + { + "fieldname": "mode_of_payment", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Mode of Payment", + "options": "Mode of Payment" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2024-07-31 17:10:56.744398", + "modified_by": "Administrator", + "module": "Check Run", + "name": "Check Run Printable MOP", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} diff --git a/check_run/check_run/doctype/check_run_printable_mop/check_run_printable_mop.py b/check_run/check_run/doctype/check_run_printable_mop/check_run_printable_mop.py new file mode 100644 index 00000000..093c50d6 --- /dev/null +++ b/check_run/check_run/doctype/check_run_printable_mop/check_run_printable_mop.py @@ -0,0 +1,9 @@ +# Copyright (c) 2024, AgriTheory and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class CheckRunPrintableMOP(Document): + pass diff --git a/check_run/check_run/doctype/check_run_settings/check_run_settings.js b/check_run/check_run/doctype/check_run_settings/check_run_settings.js index 9ba74675..3b09dad2 100644 --- a/check_run/check_run/doctype/check_run_settings/check_run_settings.js +++ b/check_run/check_run/doctype/check_run_settings/check_run_settings.js @@ -27,5 +27,13 @@ frappe.ui.form.on('Check Run Settings', { }, } }) + frm.set_query('secondary_print_format', () => { + return { + filters: { + disabled: 0, + doc_type: 'Payment Entry', + }, + } + }) }, }) diff --git a/check_run/check_run/doctype/check_run_settings/check_run_settings.json b/check_run/check_run/doctype/check_run_settings/check_run_settings.json index aae4a8fa..f410813a 100644 --- a/check_run/check_run/doctype/check_run_settings/check_run_settings.json +++ b/check_run/check_run/doctype/check_run_settings/check_run_settings.json @@ -8,10 +8,8 @@ "field_order": [ "company", "bank_account", - "approver_role", "column_break_3", "pay_to_account", - "print_format", "section_break_4", "include_purchase_invoices", "include_journal_entries", @@ -19,23 +17,27 @@ "pre_check_overdue_items", "allow_cancellation", "cascade_cancellation", - "allow_removal", "validate_unique_check_number", - "set_payment_entry_posting_date", "column_break_9", "number_of_invoices_per_voucher", - "secondary_print_format", "split_by_address", "automatically_release_on_hold_invoices", "file_preview_threshold", "allow_stand_alone_debit_notes", + "print_settings_section", + "print_preview", + "print_format", + "secondary_print_format", + "column_break_ctnqm", + "printable_mop_in_check_run", + "check_formats_with_background_image", + "background_image", "default_modes_of_payment_section_section", "purchase_invoice", "journal_entry", "column_break_21", "expense_claim", "ach_settings_section", - "allow_only_verified_accounts_in_nacha_generation", "ach_file_extension", "ach_service_class_code", "ach_standard_class_code", @@ -43,28 +45,20 @@ "column_break_27", "immediate_origin", "company_discretionary_data", - "custom_post_processing_hook", - "positive_pay_settings_section", - "attach_positive_pay", - "positive_pay_file_format", - "csv_delimiter", - "csv_quoting" + "custom_post_processing_hook" ], "fields": [ { "fieldname": "company", "fieldtype": "Link", - "in_list_view": 1, "label": "Company", - "options": "Company", - "reqd": 1 + "options": "Company" }, { "fieldname": "bank_account", "fieldtype": "Link", "label": "Bank Account", - "options": "Bank Account", - "reqd": 1 + "options": "Bank Account" }, { "fieldname": "section_break_4", @@ -135,8 +129,7 @@ "fieldname": "pay_to_account", "fieldtype": "Link", "label": "Payable Account", - "options": "Account", - "reqd": 1 + "options": "Account" }, { "fieldname": "ach_service_class_code", @@ -241,12 +234,6 @@ "fieldtype": "Check", "label": "Validate Unique Check Number" }, - { - "fieldname": "secondary_print_format", - "fieldtype": "Link", - "label": "Secondary Print Format", - "options": "Print Format" - }, { "default": "No", "fieldname": "allow_stand_alone_debit_notes", @@ -255,68 +242,48 @@ "options": "Yes\nNo" }, { - "default": "Use Today's Date", - "fieldname": "set_payment_entry_posting_date", - "fieldtype": "Select", - "label": "Set Payment Entry Posting Date", - "options": "Use Today's Date\nUse Check Run's Posting Date" - }, - { - "fieldname": "approver_role", + "fieldname": "secondary_print_format", "fieldtype": "Link", - "label": "Approver Role", - "options": "Role" - }, - { - "default": "0", - "fieldname": "allow_only_verified_accounts_in_nacha_generation", - "fieldtype": "Check", - "label": "Allow only verified accounts in NACHA generation" + "label": "Secondary Print Format", + "options": "Print Format" }, { "default": "0", - "fieldname": "allow_removal", + "fieldname": "check_formats_with_background_image", "fieldtype": "Check", - "label": "Allow removal of Payment Entries from Check Run after processing" + "label": "Check formats with background image" }, { - "fieldname": "positive_pay_settings_section", - "fieldtype": "Section Break", - "label": "Positive Pay Settings" + "depends_on": "eval:doc.check_formats_with_background_image", + "fieldname": "background_image", + "fieldtype": "Attach", + "label": "Background Image" }, { - "default": "0", - "fieldname": "attach_positive_pay", - "fieldtype": "Check", - "label": "Automatically Generate and Attach Positive Pay to Check Run" + "default": "Automatically Render PDF After Submit", + "fieldname": "print_preview", + "fieldtype": "Select", + "label": "Print Preview", + "options": "Automatically Render PDF After Submit\nPrint from Print Preview" }, { - "default": "CSV", - "depends_on": "attach_positive_pay", - "fieldname": "positive_pay_file_format", - "fieldtype": "Select", - "label": "Positive Pay File Format", - "options": "CSV\nExcel" + "fieldname": "print_settings_section", + "fieldtype": "Section Break", + "label": "Print Settings" }, { - "default": ",", - "depends_on": "eval:doc.attach_positive_pay && doc.positive_pay_file_format === \"CSV\"", - "fieldname": "csv_delimiter", - "fieldtype": "Data", - "label": "CSV Delimiter", - "length": 1 + "fieldname": "column_break_ctnqm", + "fieldtype": "Column Break" }, { - "default": "Non-numeric", - "depends_on": "eval:doc.attach_positive_pay && doc.positive_pay_file_format === \"CSV\"", - "fieldname": "csv_quoting", - "fieldtype": "Select", - "label": "CSV Quoting", - "options": "Minimal\nAll\nNon-numeric\nNone" + "fieldname": "printable_mop_in_check_run", + "fieldtype": "Table MultiSelect", + "label": "Printable Modes of Payment in Check Run", + "options": "Check Run Printable MOP" } ], "links": [], - "modified": "2025-06-04 16:39:03.097246", + "modified": "2024-07-31 13:23:01.397590", "modified_by": "Administrator", "module": "Check Run", "name": "Check Run Settings", diff --git a/check_run/check_run/page/__init__.py b/check_run/check_run/page/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/check_run/check_run/page/print_check_run/__init__.py b/check_run/check_run/page/print_check_run/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/check_run/check_run/page/print_check_run/print_check_run.js b/check_run/check_run/page/print_check_run/print_check_run.js new file mode 100644 index 00000000..2d1480ea --- /dev/null +++ b/check_run/check_run/page/print_check_run/print_check_run.js @@ -0,0 +1,750 @@ +frappe.pages['print-check-run'].on_page_load = function (wrapper) { + frappe.ui.make_app_page({ + parent: wrapper, + }) + + let print_view = new frappe.ui.form.PrintView(wrapper) + + $(wrapper).bind('show', () => { + const route = frappe.get_route() + const doctype = 'Check Run' + const docname = route[1] + if (!frappe.route_options || !frappe.route_options.frm) { + frappe.model.with_doc(doctype, docname, () => { + let frm = { doctype: doctype, docname: docname } + frm.doc = frappe.get_doc(doctype, docname) + frappe.model.with_doctype(doctype, () => { + frm.meta = frappe.get_meta(route[1]) + print_view.show(frm) + }) + }) + } else { + print_view.frm = frappe.route_options.frm.doctype ? frappe.route_options.frm : frappe.route_options.frm.frm + frappe.route_options.frm = null + print_view.show(print_view.frm) + } + }) +} + +frappe.ui.form.PrintView = class { + constructor(wrapper) { + this.wrapper = $(wrapper) + this.page = wrapper.page + this.make() + } + + make() { + this.print_wrapper = this.page.main.empty().html( + `` + ) + + this.print_settings = frappe.model.get_doc(':Print Settings', 'Print Settings') + this.setup_menu() + this.setup_toolbar() + this.setup_sidebar() + this.setup_keyboard_shortcuts() + } + + set_title() { + this.page.set_title(this.frm.docname) + } + + setup_toolbar() { + this.page.set_primary_action(__('Print'), () => this.printit(), 'printer') + + this.page.add_button(__('Full Page'), () => this.render_page('/print_check_run?'), { + icon: 'full-page', + }) + + this.page.add_button(__('PDF'), () => this.render_pdf(), { icon: 'small-file' }) + + this.page.add_button(__('Refresh'), () => this.refresh_print_format(), { + icon: 'refresh', + }) + + this.page.add_action_icon( + 'file', + () => { + this.go_to_form_view() + }, + '', + __('Form') + ) + } + + get_language_options() { + return frappe.get_languages() + } + + setup_sidebar() { + frappe.db.get_doc('Check Run', frappe.get_route()[1]).then(checkrun => { + frappe.db + .get_value( + 'Check Run Settings', + { bank_account: checkrun.bank_account, pay_to_account: checkrun.pay_to_account, company: checkrun.company }, + ['number_of_invoices_per_voucher', 'print_format'] + ) + .then(r => { + let inv_per_voucher = + r && r.message && r.message.number_of_invoices_per_voucher > 0 + ? r.message.number_of_invoices_per_voucher + : 5 + let default_print_format = + r && r.message && r.message.print_format ? r.message.print_format : __('Select Print Format') + + this.sidebar = this.page.sidebar.addClass('print-preview-sidebar') + + this.doctype_to_print = this.add_sidebar_item({ + fieldtype: 'Select', + fieldname: 'doctype', + placeholder: 'Payment Entry', + options: ['Check Run', 'Payment Entry'], + default: 'Payment Entry', + change: () => { + this.print_sel[0].value = '' + this.preview() + this.refresh_print_options() + this.preview() + }, + }).$input + + this.print_sel = this.add_sidebar_item({ + fieldtype: 'Link', + fieldname: 'print_format', + label: 'Print Format', + options: 'Print Format', + change: () => this.refresh_print_format(), + default: __(default_print_format), + get_query: () => { + return { + filters: { doc_type: this.doctype_to_print[0].value }, + } + }, + }).$input + + this.invoices_per_voucher = this.add_sidebar_item({ + fieldtype: 'Int', + fieldname: 'invoices_per_voucher', + label: 'Invoices Per Voucher', + change: () => this.refresh_print_format(), + default: inv_per_voucher, + read_only: 1, + }).$input + + this.update_check_ref = this.add_sidebar_item({ + fieldtype: 'Select', + fieldname: 'update_check_ref', + label: 'Update Check Reference', + options: ['No', 'Yes'], + change: () => this.refresh_print_format(), + default: __('No'), + }).$input + }) + }) + } + + add_sidebar_item(df, is_dynamic) { + if (df.fieldtype == 'Select') { + df.input_class = 'btn btn-default btn-sm text-left' + } + + let field = frappe.ui.form.make_control({ + df: df, + parent: is_dynamic ? this.sidebar_dynamic_section : this.sidebar, + render_input: 1, + }) + + if (df.default != null) { + field.set_input(df.default) + } + + return field + } + + get_default_option_for_select(value) { + return { + label: value, + value: value, + disabled: true, + } + } + + setup_menu() { + this.page.clear_menu() + + this.page.add_menu_item(__('Print Settings'), () => { + frappe.set_route('Form', 'Print Settings') + }) + + if (this.print_settings.enable_raw_printing == '1') { + this.page.add_menu_item(__('Raw Printing Setting'), () => { + this.printer_setting_dialog() + }) + } + + if (cint(this.print_settings.enable_print_server)) { + this.page.add_menu_item(__('Select Network Printer'), () => this.network_printer_setting_dialog()) + } + } + + show(frm) { + this.frm = frm + this.set_title() + + let tasks = [this.refresh_print_options, this.preview].map(fn => fn.bind(this)) + + return frappe.run_serially(tasks) + } + + refresh_print_format() { + this.preview() + } + + setup_keyboard_shortcuts() { + this.wrapper.find('.print-toolbar a.btn-default').each((i, el) => { + frappe.ui.keys.get_shortcut_group(this.frm.page).add($(el)) + }) + } + + preview() { + let print_format = this.get_print_format() + if (print_format.print_format_builder_beta) { + this.preview_beta() + return + } + + const $print_format = this.print_wrapper.find('iframe') + this.$print_format_body = $print_format.contents() + this.get_print_html(out => { + if (!out.html) { + out.html = this.get_no_preview_html() + } + + this.setup_print_format_dom(out, $print_format) + + const print_height = $print_format.get(0).offsetHeight + const $message = this.wrapper.find('.page-break-message') + + const print_height_inches = frappe.dom.pixel_to_inches(print_height) + // if contents are large enough, indicate that it will get printed on multiple pages + // Maximum height for an A4 document is 11.69 inches + if (print_height_inches > 11.69) { + $message.text(__('This may get printed on multiple pages')) + } else { + $message.text('') + } + }) + } + + get_letterhead() { + return this.letterhead_selector.val() + } + + preview_beta() { + let print_format = this.get_print_format() + const iframe = this.print_wrapper.find('.preview-beta-wrapper iframe') + let params = new URLSearchParams({ + doctype: this.frm.doc.doctype, + name: this.frm.doc.name, + print_format: print_format.name, + }) + iframe.prop('src', `/printpreview?${params.toString()}`) + } + + setup_print_format_dom(out, $print_format) { + this.print_wrapper.find('.print-format-skeleton').remove() + let base_url = frappe.urllib.get_base_url() + let print_css = frappe.assets.bundled_asset('print.bundle.css', frappe.utils.is_rtl(this.lang_code)) + this.$print_format_body.find('html').attr('dir', frappe.utils.is_rtl(this.lang_code) ? 'rtl' : 'ltr') + this.$print_format_body.find('html').attr('lang', this.lang_code) + this.$print_format_body.find('head').html( + ` + ` + ) + if (this.doctype_to_print.val() == 'Check Run') { + this.$print_format_body.find('body').html(``) + } else { + this.$print_format_body.find('body').html(``) + + let $parentDiv = this.$print_format_body.find('.print-format-preview') + + // Use forEach to append each HTML string to the parent div + out.html.forEach(function (htmlContent) { + $parentDiv.append(htmlContent) + $parentDiv.append(`
`) + }) + } + + this.show_footer() + + this.$print_format_body.find('.print-format').css({ + display: 'flex', + flexDirection: 'column', + }) + + this.$print_format_body.find('.page-break').css({ + display: 'flex', + 'flex-direction': 'column', + flex: '1', + }) + + setTimeout(() => { + $print_format.height(this.$print_format_body.find('.print-format').outerHeight()) + }, 500) + } + + hide() { + if (this.frm.setup_done && this.frm.page.current_view_name === 'print') { + this.frm.page.set_view( + this.frm.page.previous_view_name === 'print' ? 'main' : this.frm.page.previous_view_name || 'main' + ) + } + } + + go_to_form_view() { + frappe.route_options = { + frm: this, + } + frappe.set_route('Form', this.frm.doctype, this.frm.docname) + } + + show_footer() { + // footer is hidden by default as reqd by pdf generation + // simple hack to show it in print preview + + this.$print_format_body.find('#footer-html').attr( + 'style', + ` + display: block !important; + order: 1; + margin-top: auto; + padding-top: var(--padding-xl) + ` + ) + } + + printit() { + let me = this + + if (cint(me.print_settings.enable_print_server)) { + if (localStorage.getItem('network_printer')) { + me.print_by_server() + } else { + me.network_printer_setting_dialog(() => me.print_by_server()) + } + } else if (me.get_mapped_printer().length === 1) { + // printer is already mapped in localstorage (applies for both raw and pdf ) + if (me.is_raw_printing()) { + me.get_raw_commands(function (out) { + frappe.ui.form + .qz_connect() + .then(function () { + let printer_map = me.get_mapped_printer()[0] + let data = [out.raw_commands] + let config = qz.configs.create(printer_map.printer) + return qz.print(config, data) + }) + .then(frappe.ui.form.qz_success) + .catch(err => { + frappe.ui.form.qz_fail(err) + }) + }) + } else { + frappe.show_alert( + { + message: __('PDF printing via "Raw Print" is not supported.'), + subtitle: __('Please remove the printer mapping in Printer Settings and try again.'), + indicator: 'info', + }, + 14 + ) + //Note: need to solve "Error: Cannot parse (FILE) as a PDF file" to enable qz pdf printing. + } + } else if (me.is_raw_printing()) { + // printer not mapped in localstorage and the current print format is raw printing + frappe.show_alert( + { + message: __('Printer mapping not set.'), + subtitle: __('Please set a printer mapping for this print format in the Printer Settings'), + indicator: 'warning', + }, + 14 + ) + me.printer_setting_dialog() + } else { + me.render_page('/print_check_run?', true) + } + this.confirm_print(me) + } + + print_by_server() { + let me = this + if (localStorage.getItem('network_printer')) { + frappe.call({ + method: 'frappe.utils.print_format.print_by_server', + args: { + doctype: me.frm.doc.doctype, + name: me.frm.doc.name, + printer_setting: localStorage.getItem('network_printer'), + print_format: me.selected_format(), + no_letterhead: true, + letterhead: null, + }, + callback: function () {}, + }) + } + } + network_printer_setting_dialog(callback) { + frappe.call({ + method: 'frappe.printing.doctype.network_printer_settings.network_printer_settings.get_network_printer_settings', + callback: function (r) { + if (r.message) { + let d = new frappe.ui.Dialog({ + title: __('Select Network Printer'), + fields: [ + { + label: 'Printer', + fieldname: 'printer', + fieldtype: 'Select', + reqd: 1, + options: r.message, + }, + ], + primary_action: function () { + localStorage.setItem('network_printer', d.get_values().printer) + if (typeof callback == 'function') { + callback() + } + d.hide() + }, + primary_action_label: __('Select'), + }) + d.show() + } + }, + }) + } + + render_pdf() { + let print_format = this.get_print_format() + if (print_format.print_format_builder_beta) { + let params = new URLSearchParams({ + doctype: this.frm.doc.doctype, + name: this.frm.doc.name, + print_format: print_format.name, + letterhead: null, + }) + let w = window.open(`/api/method/frappe.utils.weasyprint.download_pdf?${params}`) + if (!w) { + frappe.msgprint(__('Please enable pop-ups')) + return + } + } else { + this.render_check_run_pdf('/api/method/check_run.check_run.doctype.check_run.check_run.download_pdf?') + } + } + + set_user_lang() { + console.log(this.language_sel.val()) + this.lang_code = this.language_sel.val() + } + + render_check_run_pdf(method) { + let base_url = frappe.urllib.get_base_url() + let print_css = frappe.assets.bundled_asset('print.bundle.css', frappe.utils.is_rtl(this.lang_code)) + let w = window.open( + frappe.urllib.get_full_url(`${method} + doctype=${encodeURIComponent(this.frm.doc.doctype)} + &name=${encodeURIComponent(this.frm.doc.name)} + &formattype=${encodeURIComponent(this.doctype_to_print.val())} + &print_format=${encodeURIComponent(this.print_sel.val())} + &baseurl=${encodeURIComponent(base_url)} + &printcss=${encodeURIComponent(print_css)} + &lang=${encodeURIComponent('en')}`) + ) + } + + render_page(method, printit = false) { + let w = window.open( + frappe.urllib.get_full_url(`${method} + doctype=${encodeURIComponent(this.frm.doc.doctype)} + &name=${encodeURIComponent(this.frm.doc.name)} + &formattype=${encodeURIComponent(this.doctype_to_print)} + &lang=${encodeURIComponent('en')}`) + ) + + this.get_print_html(out => { + let base_url = frappe.urllib.get_base_url() + let print_css = frappe.assets.bundled_asset('print.bundle.css', frappe.utils.is_rtl(this.lang_code)) + w.document.write(` + `) + w.document.write(``) + w.document.close() + if (printit) { + w.print() + } + var afterPrint = function () { + w.close() + } + if (w.matchMedia) { + var mediaQueryList = w.matchMedia('print') + mediaQueryList.addListener(function (mql) { + if (!mql.matches) { + console.log('out') + afterPrint() + } + }) + } + window.onafterprint = afterPrint + }) + if (!w) { + frappe.msgprint(__('Please enable pop-ups')) + return + } + } + + get_print_html(callback) { + let print_format = this.get_print_format() + if (print_format.raw_printing) { + callback({ + html: this.get_no_preview_html(), + }) + return + } + if (this._req) { + this._req.abort() + } + this._req = frappe.call({ + method: 'check_run.www.print_check_run.get_html_and_style', + args: { + doc: this.frm.doc, + doctype_to_print: this.doctype_to_print.val(), + print_format: this.selected_format(), + no_letterhead: true, + letterhead: null, + settings: this.additional_settings, + _lang: this.lang_code, + }, + callback: function (r) { + if (!r.exc) { + callback(r.message) + } + }, + }) + } + + get_no_preview_html() { + return `
+ ${__('No Preview Available')} +
` + } + + get_mapped_printer() { + // returns a list of "print format: printer" mapping filtered by the current print format + let print_format_printer_map = this.get_print_format_printer_map() + if (print_format_printer_map[this.frm.doctype]) { + return print_format_printer_map[this.frm.doctype].filter( + printer_map => printer_map.print_format == this.selected_format() + ) + } else { + return [] + } + } + + get_print_format_printer_map() { + // returns the whole object "print_format_printer_map" stored in the localStorage. + try { + let print_format_printer_map = JSON.parse(localStorage.print_format_printer_map) + return print_format_printer_map + } catch (e) { + return {} + } + } + + async refresh_print_options() { + this.print_formats = frappe.meta.get_print_formats(this.frm.doctype) + if (this.doctype_to_print.val() == 'Payment Entry') { + this.print_formats = await frappe.xcall('check_run.www.print_check_run.get_formats', { doctype: 'Payment Entry' }) + } + if (this.doctype_to_print.val() == 'Payment Entry Secondary Format') { + this.print_formats = await frappe.xcall('check_run.www.print_check_run.get_formats', { + doctype: this.frm.docname, + }) + } + const print_format_select_val = this.print_sel.val() + this.print_sel + .empty() + .add_options([this.get_default_option_for_select(__('Select Print Format')), ...this.print_formats]) + return this.print_formats.includes(print_format_select_val) && this.print_sel.val(print_format_select_val) + } + + selected_format() { + return this.print_sel.val() || 'Standard' + } + + is_raw_printing(format) { + return this.get_print_format(format).raw_printing === 1 + } + + get_print_format(format) { + let print_format = {} + if (!format) { + format = this.selected_format() + } + + if (locals['Print Format'] && locals['Print Format'][format]) { + print_format = locals['Print Format'][format] + } + + return print_format + } + + with_letterhead() { + return cint(this.get_letterhead() !== __('No Letterhead')) + } + + set_style(style) { + frappe.dom.set_style(style || frappe.boot.print_css, 'print-style') + } + + confirm_print(me) { + if (this.update_check_ref.val() == 'No') { + return + } + + let frm = me.frm + let d = new frappe.ui.Dialog({ + title: __('Confirm Print'), + fields: [ + { + fieldname: 'ht', + fieldtype: 'HTML', + options: ` + +

`, + }, + { + fieldname: 'reprint_check_number', + fieldtype: 'Data', + label: __('New Initial Check Number'), + }, + ], + minimizable: false, + static: true, + }) + d.wrapper.find('#confirm-print').on('click', () => { + frappe + .xcall('check_run.check_run.doctype.check_run.check_run.confirm_print', { + docname: frm.doc.name, + }) + .then(() => { + d.hide() + }) + }) + d.wrapper.find('#reprint').on('click', () => { + d.fields_dict.reprint_check_number.df.reqd = 1 + let values = cur_dialog.get_values() + this.render_checks(me, frm, values.reprint_check_number || undefined) + frm.doc.status = 'Submitted' + me.page.set_indicator(__('Submitted'), 'blue') + d.hide() + }) + d.show() + } + + render_checks(me, frm, reprint_check_number = undefined) { + frappe + .call({ + method: 'increment_print_count', + doc: frm.doc, + args: { reprint_check_number: reprint_check_number }, + }) + .done(() => { + frappe.msgprint('Check Reference No updated successfully') + }) + .fail(r => {}) + } + + printer_setting_dialog() { + // dialog for the Printer Settings + this.print_format_printer_map = this.get_print_format_printer_map() + this.data = this.print_format_printer_map[this.frm.doctype] || [] + this.printer_list = [] + frappe.ui.form.qz_get_printer_list().then(data => { + this.printer_list = data + const dialog = new frappe.ui.Dialog({ + title: __('Printer Settings'), + fields: [ + { + fieldtype: 'Section Break', + }, + { + fieldname: 'printer_mapping', + fieldtype: 'Table', + label: __('Printer Mapping'), + in_place_edit: true, + data: this.data, + get_data: () => { + return this.data + }, + fields: [ + { + fieldtype: 'Select', + fieldname: 'print_format', + default: 0, + options: this.print_formats, + read_only: 0, + in_list_view: 1, + label: __('Print Format'), + }, + { + fieldtype: 'Select', + fieldname: 'printer', + default: 0, + options: this.printer_list, + read_only: 0, + in_list_view: 1, + label: __('Printer'), + }, + ], + }, + ], + primary_action: () => { + let printer_mapping = dialog.get_values()['printer_mapping'] + if (printer_mapping && printer_mapping.length) { + let print_format_list = printer_mapping.map(a => a.print_format) + let has_duplicate = print_format_list.some((item, idx) => print_format_list.indexOf(item) != idx) + if (has_duplicate) frappe.throw(__('Cannot have multiple printers mapped to a single print format.')) + } else { + printer_mapping = [] + } + dialog.print_format_printer_map = this.get_print_format_printer_map() + dialog.print_format_printer_map[this.frm.doctype] = printer_mapping + localStorage.print_format_printer_map = JSON.stringify(dialog.print_format_printer_map) + dialog.hide() + }, + primary_action_label: __('Save'), + }) + dialog.show() + if (!(this.printer_list && this.printer_list.length)) { + frappe.throw(__('No Printer is Available.')) + } + }) + } +} diff --git a/check_run/check_run/page/print_check_run/print_check_run.json b/check_run/check_run/page/print_check_run/print_check_run.json new file mode 100644 index 00000000..a40dce28 --- /dev/null +++ b/check_run/check_run/page/print_check_run/print_check_run.json @@ -0,0 +1,19 @@ +{ + "content": null, + "creation": "2024-05-14 16:02:02.168387", + "docstatus": 0, + "doctype": "Page", + "idx": 0, + "modified": "2024-05-14 16:02:02.168387", + "modified_by": "Administrator", + "module": "Check Run", + "name": "print-check-run", + "owner": "Administrator", + "page_name": "print-check-run", + "roles": [], + "script": null, + "standard": "Yes", + "style": null, + "system_page": 0, + "title": "Check Run" +} diff --git a/check_run/check_run/page/print_check_run/print_skeleton_loading.html b/check_run/check_run/page/print_check_run/print_skeleton_loading.html new file mode 100644 index 00000000..9cdae686 --- /dev/null +++ b/check_run/check_run/page/print_check_run/print_skeleton_loading.html @@ -0,0 +1,159 @@ + diff --git a/check_run/check_run/print_format/check_run/__init__.py b/check_run/check_run/print_format/check_run/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/check_run/check_run/print_format/check_run/check_run.json b/check_run/check_run/print_format/check_run/check_run.json new file mode 100644 index 00000000..d2edbe75 --- /dev/null +++ b/check_run/check_run/print_format/check_run/check_run.json @@ -0,0 +1,32 @@ +{ + "absolute_value": 0, + "align_labels_right": 0, + "creation": "2024-06-04 04:59:24.275841", + "css": " .container_ {\n width:100%;\n display: flex;\n padding-right: 0px;\n padding-left: 0px;\n margin-right: auto;\n margin-left: auto;\n }\n.box {\n flex: 1; /* This makes each div take up equal space */\n margin: 10px;\n}\n.print-format td{\n padding:2px !important;\n}\n.print-format th{\n padding:2px !important;\n}\ntable{\n font-size:12px!important;\n}", + "custom_format": 1, + "default_print_language": "en", + "disabled": 0, + "doc_type": "Check Run", + "docstatus": 0, + "doctype": "Print Format", + "font_size": 14, + "html": "
\n\t
\n\t\t

\n\t\t\t
Check Run
\n\t\t\tACC-CR-2024-00001\n\t\t

\n\t
\n
\n
\n
\n

Check Run End Date:

\n {{doc.end_date or ''}}\n
\n
\n

Initial Check Number:

\n {{ doc.initial_check_number}}\n
\n
\n

Company

\n {{ doc.company }}\n
\n
\n
\n
\n

Posting Date:

\n {{doc.posting_date or ''}}\n
\n
\n

Final Check Number:

\n {{ doc.final_check_number }}\n
\n
\n

Paid From (Bank Account):

\n {{ doc.bank_account }}\n
\n
\n
\n
\n

Beginning Bank Account Balance:

\n {{frappe.format(doc.beg_balance,{'fieldtype':\"Currency\"} ) or ''}}\n
\n
\n

Amount in Check Run

\n {{frappe.format(doc.amount_check_run ,{'fieldtype':\"Currency\"} ) or ''}}\n
\n
\n

Accounts Payable:

\n {{ doc.pay_to_account }}\n
\n
\n{% set pe_list = frappe.db.get_list(\"Payment Entry\", {\"check_run\":doc.name}) %}\n\n \n \n \n \n \n \n \n \n \n \n {% for row in pe_list %}\n {% set doc_ = frappe.get_doc(\"Payment Entry\", row.name) %}\n {% for d in doc_.references %}\n \n \n \n \n \n \n \n \n {% endfor %}\n {% endfor %}\n \n
PartyDocumentDocument DateOutstanding AmountDue DateReference
{{ doc_.party }}{{ d.reference_name }}{{ frappe.db.get_value(d.reference_doctype, d.reference_name, \"posting_date\") or ''}}{{ doc_.paid_amount or '' }}{{ frappe.db.get_value(d.reference_doctype, d.reference_name, \"due_date\") or '' }}{{ doc_.name }}
\n\n \n \n\n", + "idx": 0, + "line_breaks": 0, + "margin_bottom": 15.0, + "margin_left": 15.0, + "margin_right": 15.0, + "margin_top": 15.0, + "modified": "2024-06-06 03:54:20.194111", + "modified_by": "Administrator", + "module": "Check Run", + "name": "Check Run", + "owner": "Administrator", + "page_number": "Hide", + "print_format_builder": 0, + "print_format_builder_beta": 0, + "print_format_type": "Jinja", + "raw_printing": 0, + "show_section_headings": 0, + "standard": "Yes" +} diff --git a/check_run/check_run/print_format/example_secondary_print_format/example_secondary_print_format.json b/check_run/check_run/print_format/example_secondary_print_format/example_secondary_print_format.json index 94eb9531..88bbf036 100644 --- a/check_run/check_run/print_format/example_secondary_print_format/example_secondary_print_format.json +++ b/check_run/check_run/print_format/example_secondary_print_format/example_secondary_print_format.json @@ -11,14 +11,14 @@ "doctype": "Print Format", "font": "Default", "font_size": 0, - "html": "\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for reference in doc.references %}\r\n \r\n {% if reference.reference_doctype == 'Purchase Invoice' %}\r\n \r\n \r\n {% elif reference.reference_doctype == 'Sales Invoice' %}\r\n \r\n \r\n {% elif reference.reference_doctype == 'Expense Claim' %}\r\n \r\n \r\n {% elif reference.reference_doctype == 'Journal Entry' %}\r\n \r\n \r\n {% endif %}\r\n \r\n \r\n \r\n {% endfor %}\r\n
\r\n Cheque Number: {{ doc.reference_no or '' }}\r\n
{{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
Date Reference Amount Payment
{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"bill_date\")) or \"\"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"bill_no\") or \"\" }}{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"po_date\")) or \"\"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"po_no\") or \"\" }}{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"posting_date\")) or \" \"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"name\") or \" \" }} {{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"posting_date\")) or \" \"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"name\") or \" \" }} {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'), 2, 'USD')}} {{ reference.get_formatted('allocated_amount')}}
", + "html": "{% set checkrun = frappe.get_doc(\"Check Run\", doc.check_run) %}\n{% set checkrunsetting = frappe.db.get_list(\"Check Run Settings\", {\"bank_account\": checkrun.bank_account, \"pay_to_account\": checkrun.pay_to_account , \"company\": checkrun.company}) %}\n{% set crs_doc = frappe.get_doc(\"Check Run Settings\", checkrunsetting[0]) %}\n{% set printable_mop = frappe.db.get_list(\"Check Run Printable MOP\", {\"parent\": crs_doc.name}, \"mode_of_payment\", pluck=\"mode_of_payment\") %}\n\n{% if doc.mode_of_payment in printable_mop %}\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {% for reference in doc.references %}\n \n {% if reference.reference_doctype == 'Purchase Invoice' %}\n \n \n {% elif reference.reference_doctype == 'Sales Invoice' %}\n \n \n {% elif reference.reference_doctype == 'Expense Claim' %}\n \n \n {% elif reference.reference_doctype == 'Journal Entry' %}\n \n \n {% endif %}\n \n \n \n {% endfor %}\n
\n Check Number: {{ doc.reference_no or '' }}\n
{{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
Date Reference Amount Payment
{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"bill_date\")) or \"\"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"bill_no\") or \"\" }}{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"po_date\")) or \"\"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"po_no\") or \"\" }}{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"posting_date\")) or \" \"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"name\") or \" \" }} {{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"posting_date\")) or \" \"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"name\") or \" \" }} {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'), 2, 'USD')}} {{ frappe.utils.fmt_money(reference.get_formatted('allocated_amount'), 2, 'USD')}}
\n{% endif %}", "idx": 0, "line_breaks": 0, "margin_bottom": 0.0, "margin_left": 0.0, "margin_right": 0.0, "margin_top": 0.0, - "modified": "2024-03-28 01:38:34.472380", + "modified": "2024-07-31 14:30:07.415365", "modified_by": "Administrator", "module": "Check Run", "name": "Example Secondary Print Format", diff --git a/check_run/check_run/print_format/example_voucher/example_voucher.json b/check_run/check_run/print_format/example_voucher/example_voucher.json index 65e12199..36de619e 100644 --- a/check_run/check_run/print_format/example_voucher/example_voucher.json +++ b/check_run/check_run/print_format/example_voucher/example_voucher.json @@ -2,7 +2,7 @@ "absolute_value": 0, "align_labels_right": 0, "creation": "2022-08-30 12:27:45.736571", - "css": "@font-face {\n font-family: 'EntezareZohoor2';\n src: url('fonts/EntezareZohoor2.eot'), url('fonts/EntezareZohoor2.ttf') format('truetype'), url('fonts/EntezareZohoor2.svg') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n\n.print-format {\n\tpadding: 0px;\n}\n@media screen {\n\t.print-format {\n\t\tpadding: 0in;\n\t}\n}\n#payer_check_window_block {\n top: 0.7cm; \n left: 0.7cm;\n height: 2.2cm;\n width: 8.8cm;\n position: absolute;\n \n}\n\n#payer_name_block{\n top: 0.1cm; \n left: 1cm;\n position: absolute;\n}\n\n#payee_address_window_block {\n top:4.9cm;\n left: 1.9cm;\n position: absolute; \n width: 8.8cm; \n height:2.2cm;\n}\n\n#address_block{\n top: 0.2cm; \n left: 0.2cm;\n position: relative;\n}\n\n\n\n#memo_block {\n top:7.1cm;\n left: 2cm;\n position: absolute; \n width: 6cm;\n}\n\n\n#check_section_1 {\n font-size: 15px;\n width:20.0cm;\n height:8.9cm;\n}\n\n#check_section_2 {\n height:8.9cm;\n}\n\n#check_section_3 {\n height:8.9cm;\n}\n\n\n#payer_name_block {\ntext-align: center; \n\n}\n\n#payer_name_block {\nwidth:4cm;\ntext-align: center; \nposition: absolute;\n}\n\n#bank_info_block {\nfont-size: 10px;\nwidth:2.5cm;\nheight:1.8cm;\ntext-align: center; \nposition: absolute;\n}\n\n\n#payment_in_words_block {\n font-size: 13px;\n}\n\n#memo_block {\nfont-size: 10px;\n}\n\n#signature_block {\ncolor: blue;\nfont-family: cursive;\n\n}\n#payment_amount_block{\n top:3.3cm;\n left: 17.6cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n\n}\n\n.payment_reference_block {\npadding-left:1cm; \npadding-right:1cm; \n}\n\n.payment_name_cell {\ntext-align: right; \n}\n\n#payment_amount_number_block {\n top:3.3cm;\n left: 17.6cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n}\n\n\n.right_stamp {\n top:2.8cm;\n left: 16.6cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.sig_stamp {\n top:6.3cm;\n left: 13.8cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.big_stamp {\n top:2.8cm;\n left: 6.1cm;\n width: 7cm;\n\theight: 3cm;\n\tfont-size: 80px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n\n.stamp {\n\tmargin: 0px;\n\toverflow: hidden;\n display: flex;\n justify-content: space-around;\n align-items: center;\n vertical-align: middle;\n text-align: center;\n\n flex-direction: row;\n color: #555;\n\tfont-weight: 700;\n\tborder: 0.25rem solid #555;\n\tdisplay: inline-block;\n\t\n\ttext-transform: uppercase;\n\tborder-radius: 1rem;\n\tfont-family: 'Courier';\n\t-webkit-mask-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/8399/grunge.png');\n -webkit-mask-size: 944px 604px;\n mix-blend-mode: multiply;\n}\n\n\n.is-nope {\n color: #ff5858;\n border: 0.5rem double #D23;\n \t-webkit-mask-position: 2rem 3rem;\n \t\n \n}\n\n.is-draft {\n\tcolor: #ff5858;\n\tborder: 1rem double #ff5858;\n font-size: 6rem;\n font-family: \"Open sans\", Helvetica, Arial, sans-serif;\n border-radius: 0;\n padding: 0.5rem;\n} ", + "css": "@font-face {\n font-family: 'EntezareZohoor2';\n src: url('fonts/EntezareZohoor2.eot'), url('fonts/EntezareZohoor2.ttf') format('truetype'), url('fonts/EntezareZohoor2.svg') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n\n.print-format {\n\tpadding: 0px;\n}\n@media screen {\n\t.print-format {\n\t\tpadding: 0in;\n\t}\n}\n#payer_check_window_block {\n top: 0.7cm; \n left: 0.7cm;\n height: 2.2cm;\n width: 8.8cm;\n position: absolute;\n \n}\n\n#payer_name_block{\n top: 0.1cm; \n left: 1cm;\n position: absolute;\n}\n\n#payee_address_window_block {\n top:4.9cm;\n left: 1.9cm;\n position: absolute; \n width: 8.8cm; \n height:2.2cm;\n}\n\n#address_block{\n top: 0.2cm; \n left: 0.2cm;\n position: relative;\n}\n\n\n\n#memo_block {\n top:7.1cm;\n left: 2cm;\n position: absolute; \n width: 6cm;\n}\n\n\n#check_section_1 {\n font-size: 15px;\n width:20.0cm;\n height:8.9cm;\n}\n\n#check_section_2 {\n height:8.9cm;\n}\n\n#check_section_3 {\n height:8.9cm;\n}\n\n\n#payer_name_block {\ntext-align: center; \n\n}\n\n#payer_name_block {\nwidth:4cm;\ntext-align: center; \nposition: absolute;\n}\n\n#bank_info_block {\nfont-size: 10px;\nwidth:2.5cm;\nheight:1.8cm;\ntext-align: center; \nposition: absolute;\n}\n\n\n#payment_in_words_block {\n font-size: 13px;\n}\n\n#memo_block {\nfont-size: 10px;\n}\n\n#signature_block {\ncolor: blue;\nfont-family: cursive;\n\n}\n#payment_amount_block{\n top:3.3cm;\n left: 17.6cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n\n}\n\n.payment_reference_block {\npadding-left:1cm; \npadding-right:1cm; \n}\n\n.payment_name_cell {\ntext-align: right; \n}\n\n#payment_amount_number_block {\n top:3.3cm;\n left: 16cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n}\n\n\n.right_stamp {\n top:2.8cm;\n left: 16.6cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.sig_stamp {\n top:6.3cm;\n left: 13.8cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.big_stamp {\n top:2.8cm;\n left: 6.1cm;\n width: 7cm;\n\theight: 3cm;\n\tfont-size: 80px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n\n.stamp {\n\tmargin: 0px;\n\toverflow: hidden;\n display: flex;\n justify-content: space-around;\n align-items: center;\n vertical-align: middle;\n text-align: center;\n\n flex-direction: row;\n color: #555;\n\tfont-weight: 700;\n\tborder: 0.25rem solid #555;\n\tdisplay: inline-block;\n\t\n\ttext-transform: uppercase;\n\tborder-radius: 1rem;\n\tfont-family: 'Courier';\n\t-webkit-mask-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/8399/grunge.png');\n -webkit-mask-size: 944px 604px;\n mix-blend-mode: multiply;\n}\n\n\n.is-nope {\n color: #ff5858;\n border: 0.5rem double #D23;\n \t-webkit-mask-position: 2rem 3rem;\n \t\n \n}\n\n.is-draft {\n\tcolor: #ff5858;\n\tborder: 1rem double #ff5858;\n font-size: 6rem;\n font-family: \"Open sans\", Helvetica, Arial, sans-serif;\n border-radius: 0;\n padding: 0.5rem;\n} ", "custom_format": 1, "default_print_language": "en", "disabled": 0, @@ -11,14 +11,14 @@ "doctype": "Print Format", "font": "Default", "font_size": 0, - "html": "
\r\n
\r\n {% if doc.docstatus == 0 %}\r\n VOID DRAFT\r\n VOID DRAFT\r\n {% elif doc.docstatus == 2 or overwrite_void %}\r\n VOID\r\n VOID\r\n VOID\r\n {% endif %}\r\n
\r\n \r\n {{ doc.company }}\r\n \r\n
\r\n \r\n {{ doc.get_formatted('posting_date') }} \r\n \r\n \r\n {{ doc.party_name }}\r\n \r\n \r\n
\r\n {{ doc.party_name }}
\r\n {% set address = get_default_address(doc.party_type, doc.party) %}\r\n {% if address %}\r\n {{ frappe.get_doc('Address', address).get_display() }}\r\n {% endif %}\r\n
\r\n
\r\n \r\n {% set money_number = doc.get_formatted('paid_amount')[1:].strip() %} \r\n {% if money_number|length < 18 %}\r\n {% set money_number = ( money_number + '***************************')[:18] %}\r\n {% endif %}\r\n {{ money_number }}\r\n \r\n \r\n {% set money_in_words = frappe.utils.money_in_words(doc.paid_amount)[:-5] %}\r\n {% if money_in_words|length < 90 %}\r\n {% set money_in_words = (money_in_words + '************************************************************************')[:100] %}\r\n {% endif %}\r\n {{ money_in_words }}\r\n \r\n \r\n {{ doc.check_memo or '' }} {% if test_lines %} MEMO {% endif %}\r\n \r\n \r\n SIGNATURE\r\n \r\n \r\n CHECK#\r\n \r\n \r\n ACCOUNT NUMBER {{ doc.account_no or '' }}\r\n \r\n \r\n ROUTING_NUMBER\r\n \r\n
\r\n
\r\n{% set number_of_invoice = frappe.db.get_value(\"Check Run Settings\", {'bank_account':doc.bank_account,'company':doc.company}, ['number_of_invoices_per_voucher']) %}\r\n\r\n{% for i in range(0,2) %}\r\n{% if i == 0 %}\r\n
\r\n{% endif %}\r\n{% if i == 1 and not doc.references|length >= number_of_invoice %}\r\n
\r\n {% endif %}\r\n{% if i == 1 and doc.references|length >= number_of_invoice %}\r\n
\r\n {% endif %}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {% if doc.references|length >= number_of_invoice %}\r\n \r\n \r\n \r\n {% else %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for reference in doc.references %}\r\n \r\n {% if reference.reference_doctype == 'Purchase Invoice' %}\r\n \r\n \r\n {% elif reference.reference_doctype == 'Sales Invoice' %}\r\n \r\n \r\n {% elif reference.reference_doctype == 'Expense Claim' %}\r\n \r\n \r\n {% elif reference.reference_doctype == 'Journal Entry' %}\r\n \r\n \r\n {% endif %}\r\n \r\n \r\n \r\n {% endfor %}\r\n {% endif %}\r\n
{{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
\r\n {% for reference in doc.references %}\r\n {% if reference.reference_doctype == 'Purchase Invoice' %}\r\n {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"bill_no\") or \"\"}}, \r\n {% elif reference.reference_doctype == 'Sales Invoice' %}\r\n {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"po_no\") or \"\" }},\r\n {% elif reference.reference_doctype == 'Expense Claim' %}\r\n {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"name\") or \" \" }}, \r\n {% elif reference.reference_doctype == 'Journal Entry' %}\r\n {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"name\") or \" \" }},\r\n {% endif %}\r\n {% endfor %}\r\n
Date Reference Amount Payment
{{i }}{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"bill_date\")) or \"\"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"bill_no\") or \"\" }}{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"po_date\")) or \"\"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"po_no\") or \"\" }}{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"posting_date\")) or \" \"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"name\") or \" \" }} {{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"posting_date\")) or \" \"}} {{ frappe.db.get_value(reference.reference_doctype, reference.reference_name, \"name\") or \" \" }} {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'), 2, 'USD')}} {{ frappe.utils.fmt_money(reference.get_formatted('allocated_amount'), 2, doc.paid_from_account_currency) }}
\r\n
\r\n
\r\n{% endfor %}", + "html": "{% set checkrun = frappe.get_doc(\"Check Run\", doc.check_run) %}\n{% set checkrunsetting = frappe.db.get_list(\"Check Run Settings\", {\"bank_account\": checkrun.bank_account,\n\"pay_to_account\": checkrun.pay_to_account , \"company\": checkrun.company}) %}\n{% set crs_doc = frappe.get_doc(\"Check Run Settings\", checkrunsetting[0]) %}\n{% set printable_mop = frappe.db.get_list(\"Check Run Printable MOP\", {\"parent\": crs_doc.name}, \"mode_of_payment\",\npluck=\"mode_of_payment\") %}\n{% set pdf_page_size = frappe.db.get_value(\"Print Settings\", \"Print Settings\", \"pdf_page_size\") %}\n\n{% if doc.mode_of_payment in printable_mop %}\n\n\t.back_image {\n\t\tbackground-image: url({{crs_doc.background_image or ''}});\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 876px 364px;\n\t\tmargin-top: 0px !important;\n\t\tmargin-bottom: 0px !important;\n\t}\n\n\n
\n\t
\n\t\t
\n\t\t\t{% if doc.docstatus == 0 %}\n\t\t\tVOID DRAFT\n\t\t\tVOID DRAFT\n\t\t\t{% elif doc.docstatus == 2 or overwrite_void %}\n\t\t\tVOID\n\t\t\tVOID\n\t\t\tVOID\n\t\t\t{% endif %}\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{{ doc.company }}\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\t\t{{ doc.get_formatted('posting_date') }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{{ doc.party_name }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{{ doc.party_name }}
\n\t\t\t\t\t{% set address = get_default_address(doc.party_type, doc.party) %}\n\t\t\t\t\t{% if address %}\n\t\t\t\t\t{{ frappe.get_doc('Address', address).get_display() }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\t\t\t\t{% set money_number = doc.get_formatted('paid_amount')[1:].strip() %}\n\n\t\t\t\t{% if money_number|length < 18 %} {% set money_number=( money_number + '***************************'\n\t\t\t\t\t)[:18] %} {% endif %} {{ money_number }} \n\n\t\t\t\t\t\n\t\t\t\t\t\t{% set money_in_words = frappe.utils.money_in_words(doc.paid_amount)[:-5] %}\n\t\t\t\t\t\t{% if money_in_words|length < 90 %} {% set money_in_words=(money_in_words\n\t\t\t\t\t\t\t+ '************************************************************************' )[:100] %} {%\n\t\t\t\t\t\t\tendif %} {{ money_in_words }} \n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ doc.check_memo or '' }} {% if test_lines %} MEMO {% endif %}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSIGNATURE\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tCHECK#\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tACCOUNT NUMBER {{ doc.account_no or '' }}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tROUTING_NUMBER\n\t\t\t\t\t\t\t\n\t\t
\n\t
\n\n\t
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{% if crs_doc.secondary_print_format or (not crs_doc.secondary_print_format and doc.references|length > 6) %}\n\t\t\t\t\n\t\t\t\t
{{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
\n\t\t\t\t
\n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\t{{ reference.reference_name }}\n\t\t\t\t\t{{ \", \" if not loop.last else \"\" }}\n\t\t\t\t{% endfor %}\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t Date \n\t\t\t\t\t Reference \n\t\t\t\t\t Amount \n\t\t\t\t\t Payment \n\t\t\t\t\n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\n\t\t\t\t\t{% if reference.reference_doctype == 'Purchase Invoice' %}\n\t\t\t\t\t{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Sales Invoice' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Expense Claim' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Journal Entry' %}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'),\n\t\t\t\t\t\t2, 'USD')}}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.fmt_money(reference.get_formatted('allocated_amount'), 2, 'USD')}}\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t
\n\t
\n
\n
\n{% endif %}", "idx": 0, "line_breaks": 0, "margin_bottom": 0.0, "margin_left": 0.0, "margin_right": 0.0, "margin_top": 0.0, - "modified": "2024-03-28 01:37:54.409479", + "modified": "2024-10-11 11:49:39.890146", "modified_by": "Administrator", "module": "Check Run", "name": "Example Voucher", diff --git a/check_run/overrides/payment_entry.py b/check_run/overrides/payment_entry.py index 1ebd87f3..d5ec474e 100644 --- a/check_run/overrides/payment_entry.py +++ b/check_run/overrides/payment_entry.py @@ -1,357 +1,329 @@ -# Copyright (c) 2023, AgriTheory and contributors -# For license information, please see license.txt - -import json -import base64 - -import frappe -from frappe.utils import get_link_to_form, flt -from erpnext.accounts.general_ledger import make_gl_entries, process_gl_map -from frappe.utils.data import getdate -from frappe.core.doctype.file.utils import get_local_image -from erpnext.accounts.doctype.payment_entry.payment_entry import ( - PaymentEntry, - get_outstanding_reference_documents, -) -from frappe import _, safe_decode - - -class CheckRunPaymentEntry(PaymentEntry): - def make_gl_entries(self, cancel=0, adv_adj=0): - """ - HASH: 7e847f27ddf6b2c198b535a81cb51ad909ddcd5a - REPO: https://github.com/frappe/erpnext/ - PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py - METHOD: make_gl_entries - """ - if self.payment_type in ("Receive", "Pay") and not self.get("party_account_field"): - self.setup_party_account_field() - - if self.status == "Voided": - original_posting_date = self.posting_date - self.voided_date = self.posting_date = getdate() - - gl_entries = [] - self.add_party_gl_entries(gl_entries) - self.add_bank_gl_entries(gl_entries) - self.add_deductions_gl_entries(gl_entries) - self.add_tax_gl_entries(gl_entries) - - gl_entries = process_gl_map(gl_entries) - make_gl_entries(gl_entries, cancel=cancel, adv_adj=adv_adj) - - if self.status == "Voided": - self.posting_date = original_posting_date - - def set_status(self): - """ - HASH: 7e847f27ddf6b2c198b535a81cb51ad909ddcd5a - REPO: https://github.com/frappe/erpnext/ - PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py - METHOD: set_status - """ - if self.status == "Voided": - pass - elif self.docstatus == 2: - self.status = "Cancelled" - elif self.docstatus == 1: - self.status = "Submitted" - else: - self.status = "Draft" - - self.db_set("status", self.status, update_modified=True) - - # Bug Fix - def get_valid_reference_doctypes(self): - """ - HASH: 7e847f27ddf6b2c198b535a81cb51ad909ddcd5a - REPO: https://github.com/frappe/erpnext/ - PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py - METHOD: get_valid_reference_doctypes - """ - if self.party_type == "Customer": - return ("Sales Order", "Sales Invoice", "Journal Entry", "Dunning") - elif self.party_type == "Supplier": - return ("Purchase Order", "Purchase Invoice", "Journal Entry") - elif self.party_type == "Shareholder": - return ("Journal Entry",) - elif self.party_type == "Employee": - return ("Journal Entry", "Expense Claim") # Expense Claim - - """ - Because Check Run processes multiple payment entries in a background queue, errors generally do not include - enough data to identify the problem since there were written and remain appropriate for the context of an individual - Payment Entry. This code is copied from: - - https://github.com/frappe/erpnext/blob/version-14/erpnext/accounts/doctype/payment_entry/payment_entry.py#L164 - - https://github.com/frappe/erpnext/blob/version-14/erpnext/accounts/doctype/payment_entry/payment_entry.py#L194 - """ - - def validate_allocated_amount(self): - """ - HASH: 7e847f27ddf6b2c198b535a81cb51ad909ddcd5a - REPO: https://github.com/frappe/erpnext/ - PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py - METHOD: validate_allocated_amount - """ - if self.payment_type == "Internal Transfer": - return - - if self.party_type in ("Customer", "Supplier"): - self.validate_allocated_amount_with_latest_data() - else: - fail_message = _( - "{0} Row {1} / {2}: Allocated Amount of {3} cannot be greater than outstanding amount of {4}." - ) - for d in self.get("references"): - if (flt(d.allocated_amount)) > 0 and flt(d.allocated_amount) > flt(d.outstanding_amount): - frappe.throw( - fail_message.format( - self.party_name, - d.idx, - get_link_to_form(d.reference_doctype, d.reference_name), - d.allocated_amount, - d.outstanding_amount, - ) - ) - - # Check for negative outstanding invoices as well - if flt(d.allocated_amount) < 0 and flt(d.allocated_amount) < flt(d.outstanding_amount): - frappe.throw( - fail_message.format( - self.party_name, - d.idx, - get_link_to_form(d.reference_doctype, d.reference_name), - d.allocated_amount, - d.outstanding_amount, - ) - ) - - def validate_allocated_amount_with_latest_data(self): - """ - HASH: 7e847f27ddf6b2c198b535a81cb51ad909ddcd5a - REPO: https://github.com/frappe/erpnext/ - PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py - METHOD: validate_allocated_amount_with_latest_data - """ - if self.references: - unique_vouchers = {(x.reference_doctype, x.reference_name) for x in self.references} - vouchers = [frappe._dict({"voucher_type": x[0], "voucher_no": x[1]}) for x in unique_vouchers] - latest_references = get_outstanding_reference_documents( - { - "posting_date": self.posting_date, - "company": self.company, - "party_type": self.party_type, - "payment_type": self.payment_type, - "party": self.party, - "party_account": self.paid_from if self.payment_type == "Receive" else self.paid_to, - "get_outstanding_invoices": True, - "get_orders_to_be_billed": True, - "vouchers": vouchers, - } - ) - - # Group latest_references by (voucher_type, voucher_no) - latest_lookup = {} - for d in latest_references: - d = frappe._dict(d) - latest_lookup.setdefault((d.voucher_type, d.voucher_no), frappe._dict())[d.payment_term] = d - - for idx, d in enumerate(self.get("references"), start=1): - latest = latest_lookup.get((d.reference_doctype, d.reference_name)) or frappe._dict() - - # If term based allocation is enabled, throw - if ( - d.payment_term is None or d.payment_term == "" - ) and self.term_based_allocation_enabled_for_reference( - d.reference_doctype, d.reference_name - ): - frappe.throw( - _( - "{0} has Payment Term based allocation enabled. Select a Payment Term for Row #{1} in Payment References section" - ).format(frappe.bold(d.reference_name), frappe.bold(idx)) - ) - - # if no payment template is used by invoice and has a custom term(no `payment_term`), then invoice outstanding will be in 'None' key - latest = latest.get(d.payment_term) or latest.get(None) - # The reference has already been fully paid - if not latest: - frappe.throw( - _("{0} {1} has already been fully paid.").format(_(d.reference_doctype), d.reference_name) - ) - # The reference has already been partly paid - elif ( - latest.outstanding_amount < latest.invoice_amount - and flt(d.outstanding_amount, d.precision("outstanding_amount")) - != flt(latest.outstanding_amount, d.precision("outstanding_amount")) - and d.payment_term == "" - ): - frappe.throw( - _( - "{0} {1} has already been partly paid. Please use the 'Get Outstanding Invoice' or the 'Get Outstanding Orders' button to get the latest outstanding amounts." - ).format(_(d.reference_doctype), d.reference_name) - ) - - fail_message = _( - "Row #{1} {0} / {2}: Allocated Amount of {3} cannot be greater than outstanding amount of {4}." - ) - - if ( - d.payment_term - and ( - (flt(d.allocated_amount)) > 0 - and latest.payment_term_outstanding - and (flt(d.allocated_amount) > flt(latest.payment_term_outstanding)) - ) - and self.term_based_allocation_enabled_for_reference(d.reference_doctype, d.reference_name) - ): - frappe.throw( - _( - "Row #{0}: Allocated amount:{1} is greater than outstanding amount:{2} for Payment Term {3}" - ).format( - d.idx, d.allocated_amount, latest.payment_term_outstanding, d.payment_term - ) - ) - - if (flt(d.allocated_amount)) > 0 and flt(d.allocated_amount) > flt(latest.outstanding_amount): - frappe.throw( - fail_message.format( - self.party_name, - d.idx, - get_link_to_form(d.reference_doctype, d.reference_name), - d.allocated_amount, - d.outstanding_amount, - ) - ) - - # Check for negative outstanding invoices as well - if flt(d.allocated_amount) < 0 and flt(d.allocated_amount) < flt(latest.outstanding_amount): - frappe.throw( - fail_message.format( - self.party_name, - d.idx, - get_link_to_form(d.reference_doctype, d.reference_name), - d.allocated_amount, - d.outstanding_amount, - ) - ) - - -@frappe.whitelist() -def update_check_number(doc: PaymentEntry, method: str | None = None) -> None: - mode_of_payment_type = frappe.db.get_value("Mode of Payment", doc.mode_of_payment, "type") - if doc.bank_account and mode_of_payment_type == "Bank" and str(doc.reference_no).isdigit(): - frappe.db.set_value("Bank Account", doc.bank_account, "check_number", doc.reference_no) - - -@frappe.whitelist() -def validate_duplicate_check_number(doc: PaymentEntry, method: str | None = None) -> None: - check_run_settings = frappe.db.exists( - "Check Run Settings", {"bank_account": doc.bank_account, "pay_to_account": doc.paid_to} - ) - if not check_run_settings or not frappe.db.get_value( - "Check Run Settings", check_run_settings, "validate_unique_check_number" - ): - return - - mode_of_payment_type = frappe.db.get_value("Mode of Payment", doc.mode_of_payment, "type") - if mode_of_payment_type != "Bank" or not str(doc.reference_no).isdigit(): - return - - pe_names = frappe.get_all( - "Payment Entry", - { - "payment_type": "Pay", - "name": ["!=", doc.name], - "docstatus": ["!=", 2], - "reference_no": doc.reference_no, - }, - ) - if not pe_names: - return - - error_message = "
  • ".join([get_link_to_form("Payment Entry", p.name) for p in pe_names]) - frappe.throw( - msg=frappe._( - f"Check Number {doc.reference_no} is already set in:

    • {error_message}
    " - ), - title="Check Number already exists", - ) - - -@frappe.whitelist() -def update_outstanding_amount(doc: PaymentEntry, method: str | None = None): - paid_amount = doc.paid_amount if method == "on_submit" else 0.0 - for r in doc.get("references"): - if r.reference_doctype != "Purchase Invoice": - continue - payment_schedules = frappe.get_all( - "Payment Schedule", - {"parent": r.reference_name}, - ["name", "outstanding", "payment_term", "payment_amount"], - order_by="due_date ASC", - ) - if not payment_schedules: - continue - - payment_schedule = frappe.get_doc("Payment Schedule", payment_schedules[0]["name"]) - precision = payment_schedule.precision("outstanding") - payment_schedules = payment_schedules if method == "on_submit" else reversed(payment_schedules) - - for term in payment_schedules: - if r.payment_term and term.payment_term != r.payment_term: - continue - - if method == "on_submit": - if term.outstanding > 0.0 and paid_amount > 0.0: - if term.outstanding > paid_amount: - frappe.db.set_value( - "Payment Schedule", - term.name, - "outstanding", - flt(term.outstanding - paid_amount, precision), - ) - break - else: - paid_amount = flt(paid_amount - term.outstanding, precision) - frappe.db.set_value("Payment Schedule", term.name, "outstanding", 0) - if paid_amount <= 0.0: - break - - if method == "on_cancel": - if term.outstanding != term.payment_amount: - # if this payment term had previously been allocated against - paid_amount += flt(paid_amount + (term.payment_amount - term.outstanding), precision) - reverse = ( - flt(paid_amount + term.outstanding, precision) - if paid_amount < term.payment_amount - else term.payment_amount - ) - frappe.db.set_value("Payment Schedule", term.name, "outstanding", reverse) - if paid_amount >= doc.paid_amount: - break - - -@frappe.whitelist() -def remove_from_check_run(check_run, payment_entry): - cr = frappe.get_doc("Check Run", check_run) - transactions = json.loads(cr.transactions) if cr.transactions else [] - new_transactions = [] - for transaction in transactions: - if transaction.get("payment_entry") != payment_entry: - new_transactions.append(transaction) - cr.db_set("transactions", json.dumps(new_transactions)) - frappe.db.set_value("Payment Entry", payment_entry, "check_run", "") - frappe.msgprint(_("Removed from Check Run"), alert=True) - return "removed" - - -@frappe.whitelist() -def get_image_base64_data(file_url): - file_doc = frappe.get_doc("File", {"file_url": file_url}) - if not file_doc.has_permission(ptype="read"): - return "" - image, unused_filename, extn = get_local_image(file_url) - file_content = file_doc.get_content() - return f"data:image/{extn};base64,{safe_decode(base64.b64encode(file_content).decode('utf-8'))}" +# Copyright (c) 2023, AgriTheory and contributors +# For license information, please see license.txt + +import frappe +from frappe.utils import get_link_to_form, flt +from erpnext.accounts.general_ledger import make_gl_entries, process_gl_map +from frappe.utils.data import getdate +from erpnext.accounts.doctype.payment_entry.payment_entry import ( + PaymentEntry, + get_outstanding_reference_documents, +) +from frappe import _ + + +class CheckRunPaymentEntry(PaymentEntry): + def make_gl_entries(self, cancel=0, adv_adj=0): + """ + HASH: f6b91969b2d1f86b69ed86f611885f92ba36c077 + REPO: https://github.com/frappe/erpnext/ + PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py + METHOD: make_gl_entries + """ + if self.payment_type in ("Receive", "Pay") and not self.get("party_account_field"): + self.setup_party_account_field() + + if self.status == "Voided": + original_posting_date = self.posting_date + self.voided_date = self.posting_date = getdate() + + gl_entries = [] + self.add_party_gl_entries(gl_entries) + self.add_bank_gl_entries(gl_entries) + self.add_deductions_gl_entries(gl_entries) + self.add_tax_gl_entries(gl_entries) + + gl_entries = process_gl_map(gl_entries) + make_gl_entries(gl_entries, cancel=cancel, adv_adj=adv_adj) + + if self.status == "Voided": + self.posting_date = original_posting_date + + def set_status(self): + """ + HASH: f6b91969b2d1f86b69ed86f611885f92ba36c077 + REPO: https://github.com/frappe/erpnext/ + PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py + METHOD: set_status + """ + if self.status == "Voided": + pass + elif self.docstatus == 2: + self.status = "Cancelled" + elif self.docstatus == 1: + self.status = "Submitted" + else: + self.status = "Draft" + + self.db_set("status", self.status, update_modified=True) + + # Bug Fix + def get_valid_reference_doctypes(self): + """ + HASH: f6b91969b2d1f86b69ed86f611885f92ba36c077 + REPO: https://github.com/frappe/erpnext/ + PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py + METHOD: get_valid_reference_doctypes + """ + if self.party_type == "Customer": + return ("Sales Order", "Sales Invoice", "Journal Entry", "Dunning") + elif self.party_type == "Supplier": + return ("Purchase Order", "Purchase Invoice", "Journal Entry") + elif self.party_type == "Shareholder": + return ("Journal Entry",) + elif self.party_type == "Employee": + return ("Journal Entry", "Expense Claim") # Expense Claim + + """ + Because Check Run processes multiple payment entries in a background queue, errors generally do not include + enough data to identify the problem since there were written and remain appropriate for the context of an individual + Payment Entry. This code is copied from: + + https://github.com/frappe/erpnext/blob/version-14/erpnext/accounts/doctype/payment_entry/payment_entry.py#L164 + + https://github.com/frappe/erpnext/blob/version-14/erpnext/accounts/doctype/payment_entry/payment_entry.py#L194 + """ + + def validate_allocated_amount(self): + """ + HASH: f6b91969b2d1f86b69ed86f611885f92ba36c077 + REPO: https://github.com/frappe/erpnext/ + PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py + METHOD: validate_allocated_amount + """ + if self.payment_type == "Internal Transfer": + return + + if self.party_type in ("Customer", "Supplier"): + self.validate_allocated_amount_with_latest_data() + else: + fail_message = _( + "{0} Row {1} / {2}: Allocated Amount of {3} cannot be greater than outstanding amount of {4}." + ) + for d in self.get("references"): + if (flt(d.allocated_amount)) > 0 and flt(d.allocated_amount) > flt(d.outstanding_amount): + frappe.throw( + fail_message.format( + self.party_name, + d.idx, + get_link_to_form(d.reference_doctype, d.reference_name), + d.allocated_amount, + d.outstanding_amount, + ) + ) + + # Check for negative outstanding invoices as well + if flt(d.allocated_amount) < 0 and flt(d.allocated_amount) < flt(d.outstanding_amount): + frappe.throw( + fail_message.format( + self.party_name, + d.idx, + get_link_to_form(d.reference_doctype, d.reference_name), + d.allocated_amount, + d.outstanding_amount, + ) + ) + + def validate_allocated_amount_with_latest_data(self): + """ + HASH: f6b91969b2d1f86b69ed86f611885f92ba36c077 + REPO: https://github.com/frappe/erpnext/ + PATH: erpnext/accounts/doctype/payment_entry/payment_entry.py + METHOD: validate_allocated_amount_with_latest_data + """ + if self.references: + unique_vouchers = {(x.reference_doctype, x.reference_name) for x in self.references} + vouchers = [frappe._dict({"voucher_type": x[0], "voucher_no": x[1]}) for x in unique_vouchers] + latest_references = get_outstanding_reference_documents( + { + "posting_date": self.posting_date, + "company": self.company, + "party_type": self.party_type, + "payment_type": self.payment_type, + "party": self.party, + "party_account": self.paid_from if self.payment_type == "Receive" else self.paid_to, + "get_outstanding_invoices": True, + "get_orders_to_be_billed": True, + "vouchers": vouchers, + } + ) + + # Group latest_references by (voucher_type, voucher_no) + latest_lookup = {} + for d in latest_references: + d = frappe._dict(d) + latest_lookup.setdefault((d.voucher_type, d.voucher_no), frappe._dict())[d.payment_term] = d + + for idx, d in enumerate(self.get("references"), start=1): + latest = latest_lookup.get((d.reference_doctype, d.reference_name)) or frappe._dict() + + # If term based allocation is enabled, throw + if ( + d.payment_term is None or d.payment_term == "" + ) and self.term_based_allocation_enabled_for_reference( + d.reference_doctype, d.reference_name + ): + frappe.throw( + _( + "{0} has Payment Term based allocation enabled. Select a Payment Term for Row #{1} in Payment References section" + ).format(frappe.bold(d.reference_name), frappe.bold(idx)) + ) + + # if no payment template is used by invoice and has a custom term(no `payment_term`), then invoice outstanding will be in 'None' key + latest = latest.get(d.payment_term) or latest.get(None) + # The reference has already been fully paid + if not latest: + frappe.throw( + _("{0} {1} has already been fully paid.").format(_(d.reference_doctype), d.reference_name) + ) + # The reference has already been partly paid + elif ( + latest.outstanding_amount < latest.invoice_amount + and flt(d.outstanding_amount, d.precision("outstanding_amount")) + != flt(latest.outstanding_amount, d.precision("outstanding_amount")) + and d.payment_term == "" + ): + frappe.throw( + _( + "{0} {1} has already been partly paid. Please use the 'Get Outstanding Invoice' or the 'Get Outstanding Orders' button to get the latest outstanding amounts." + ).format(_(d.reference_doctype), d.reference_name) + ) + + fail_message = _( + "Row #{1} {0} / {2}: Allocated Amount of {3} cannot be greater than outstanding amount of {4}." + ) + + if ( + d.payment_term + and ( + (flt(d.allocated_amount)) > 0 + and latest.payment_term_outstanding + and (flt(d.allocated_amount) > flt(latest.payment_term_outstanding)) + ) + and self.term_based_allocation_enabled_for_reference(d.reference_doctype, d.reference_name) + ): + frappe.throw( + _( + "Row #{0}: Allocated amount:{1} is greater than outstanding amount:{2} for Payment Term {3}" + ).format( + d.idx, d.allocated_amount, latest.payment_term_outstanding, d.payment_term + ) + ) + + if (flt(d.allocated_amount)) > 0 and flt(d.allocated_amount) > flt(latest.outstanding_amount): + frappe.throw( + fail_message.format( + self.party_name, + d.idx, + get_link_to_form(d.reference_doctype, d.reference_name), + d.allocated_amount, + d.outstanding_amount, + ) + ) + + # Check for negative outstanding invoices as well + if flt(d.allocated_amount) < 0 and flt(d.allocated_amount) < flt(latest.outstanding_amount): + frappe.throw( + fail_message.format( + self.party_name, + d.idx, + get_link_to_form(d.reference_doctype, d.reference_name), + d.allocated_amount, + d.outstanding_amount, + ) + ) + + +@frappe.whitelist() +def update_check_number(doc: PaymentEntry, method: str | None = None) -> None: + mode_of_payment_type = frappe.db.get_value("Mode of Payment", doc.mode_of_payment, "type") + if doc.bank_account and mode_of_payment_type == "Bank" and str(doc.reference_no).isdigit(): + frappe.db.set_value("Bank Account", doc.bank_account, "check_number", doc.reference_no) + + +@frappe.whitelist() +def validate_duplicate_check_number(doc: PaymentEntry, method: str | None = None) -> None: + check_run_settings = frappe.db.exists( + "Check Run Settings", {"bank_account": doc.bank_account, "pay_to_account": doc.paid_to} + ) + if not check_run_settings or not frappe.db.get_value( + "Check Run Settings", check_run_settings, "validate_unique_check_number" + ): + return + + mode_of_payment_type = frappe.db.get_value("Mode of Payment", doc.mode_of_payment, "type") + if mode_of_payment_type != "Bank" or not str(doc.reference_no).isdigit(): + return + + pe_names = frappe.get_all( + "Payment Entry", + { + "payment_type": "Pay", + "name": ["!=", doc.name], + "docstatus": ["!=", 2], + "reference_no": doc.reference_no, + }, + ) + if not pe_names: + return + + error_message = "
  • ".join([get_link_to_form("Payment Entry", p.name) for p in pe_names]) + frappe.throw( + msg=frappe._( + f"Check Number {doc.reference_no} is already set in:

    • {error_message}
    " + ), + title="Check Number already exists", + ) + + +@frappe.whitelist() +def update_outstanding_amount(doc: PaymentEntry, method: str | None = None): + paid_amount = doc.paid_amount if method == "on_submit" else 0.0 + for r in doc.get("references"): + if r.reference_doctype != "Purchase Invoice": + continue + payment_schedules = frappe.get_all( + "Payment Schedule", + {"parent": r.reference_name}, + ["name", "outstanding", "payment_term", "payment_amount"], + order_by="due_date ASC", + ) + if not payment_schedules: + continue + + payment_schedule = frappe.get_doc("Payment Schedule", payment_schedules[0]["name"]) + precision = payment_schedule.precision("outstanding") + payment_schedules = payment_schedules if method == "on_submit" else reversed(payment_schedules) + + for term in payment_schedules: + if r.payment_term and term.payment_term != r.payment_term: + continue + + if method == "on_submit": + if term.outstanding > 0.0 and paid_amount > 0.0: + if term.outstanding > paid_amount: + frappe.db.set_value( + "Payment Schedule", + term.name, + "outstanding", + flt(term.outstanding - paid_amount, precision), + ) + break + else: + paid_amount = flt(paid_amount - term.outstanding, precision) + frappe.db.set_value("Payment Schedule", term.name, "outstanding", 0) + if paid_amount <= 0.0: + break + + if method == "on_cancel": + if term.outstanding != term.payment_amount: + # if this payment term had previously been allocated against + paid_amount += flt(paid_amount + (term.payment_amount - term.outstanding), precision) + reverse = ( + flt(paid_amount + term.outstanding, precision) + if paid_amount < term.payment_amount + else term.payment_amount + ) + frappe.db.set_value("Payment Schedule", term.name, "outstanding", reverse) + if paid_amount >= doc.paid_amount: + break diff --git a/check_run/patches.txt b/check_run/patches.txt index d2e8badd..2628fb7d 100644 --- a/check_run/patches.txt +++ b/check_run/patches.txt @@ -1,2 +1,3 @@ check_run.patches.patch_payment_schedule # 12/19/23 -check_run.patches.patch_voided_check_workflow # 01/05/24 \ No newline at end of file +check_run.patches.patch_voided_check_workflow # 01/05/24 +check_run.patches.patch_printable_mop_table # 07/31/24 \ No newline at end of file diff --git a/check_run/patches/patch_printable_mop_table.py b/check_run/patches/patch_printable_mop_table.py new file mode 100644 index 00000000..6bbd85d9 --- /dev/null +++ b/check_run/patches/patch_printable_mop_table.py @@ -0,0 +1,19 @@ +import frappe + + +def execute(): + cr_settings = frappe.get_all("Check Run Settings", pluck="name") + bank_mop = frappe.get_all("Mode of Payment", {"type": "Bank"}, pluck="name") + + if not cr_settings or not bank_mop: + return + + for crs in cr_settings: + crs = frappe.get_doc("Check Run Settings", crs) + crs_mops = frappe.get_all( + "Check Run Printable MOP", {"parent": crs}, "mode_of_payment", pluck="mode_of_payment" + ) + for mop in bank_mop: + if mop not in crs_mops: + crs.append("printable_mop_in_check_run", {"mode_of_payment": mop}) + crs.save() diff --git a/check_run/tests/setup.py b/check_run/tests/setup.py index 151deae7..d3e6a6b5 100644 --- a/check_run/tests/setup.py +++ b/check_run/tests/setup.py @@ -1,6 +1,3 @@ -# Copyright (c) 2025, AgriTheory and contributors -# For license information, please see license.txt - import datetime import types @@ -73,8 +70,8 @@ def create_test_data(): create_employees(settings) create_expense_claim(settings) for month in range(1, 13): - create_payroll_journal_entry(settings) settings.day = settings.day.replace(month=month) + create_payroll_journal_entry(settings) create_manual_payment_entry(settings) @@ -156,7 +153,6 @@ def create_bank_and_bank_account(settings): def setup_accounts(): - frappe.flags.in_test = True frappe.rename_doc( "Account", "1000 - Application of Funds (Assets) - CFC", "1000 - Assets - CFC", force=True ) @@ -265,7 +261,6 @@ def create_suppliers(settings): if biz.supplier_default_mode_of_payment == "ACH/EFT": biz.bank = "Local Bank" biz.bank_account = "123456789" - biz.ach_account_type = "Checking" biz.currency = "USD" biz.default_price_list = "Standard Buying" biz.payment_terms = supplier[4] @@ -318,7 +313,7 @@ def create_invoices(settings): pi = frappe.new_doc("Purchase Invoice") pi.company = settings.company pi.set_posting_time = 1 - pi.posting_date = settings.day + pi.bill_date = pi.posting_date = settings.day pi.supplier = "Tireless Equipment Rental, Inc" pi.append( "items", @@ -339,7 +334,7 @@ def create_invoices(settings): pi = frappe.new_doc("Purchase Invoice") pi.company = settings.company pi.set_posting_time = 1 - pi.posting_date = settings.day + pi.bill_date = pi.posting_date = settings.day pi.supplier = supplier[0] pi.append( "items", @@ -355,7 +350,7 @@ def create_invoices(settings): pi = frappe.new_doc("Purchase Invoice") pi.company = settings.company pi.set_posting_time = 1 - pi.posting_date = settings.day + pi.bill_date = pi.posting_date = settings.day pi.supplier = suppliers[0][0] pi.append( "items", @@ -372,7 +367,7 @@ def create_invoices(settings): pi = frappe.new_doc("Purchase Invoice") pi.company = settings.company pi.set_posting_time = 1 - pi.posting_date = settings.day + pi.bill_date = pi.posting_date = settings.day pi.supplier = suppliers[4][0] pi.append( "items", @@ -395,7 +390,7 @@ def create_invoices(settings): pi = frappe.new_doc("Purchase Invoice") pi.company = settings.company pi.set_posting_time = 1 - pi.posting_date = next_day + pi.bill_date = pi.posting_date = next_day pi.supplier = supplier[0] pi.append( "items", @@ -413,7 +408,7 @@ def create_invoices(settings): pi = frappe.new_doc("Purchase Invoice") pi.company = settings.company pi.set_posting_time = 1 - pi.posting_date = next_day + pi.bill_date = pi.posting_date = next_day pi.supplier = suppliers[0][0] pi.append( "items", @@ -430,7 +425,7 @@ def create_invoices(settings): pi = frappe.new_doc("Purchase Invoice") pi.company = settings.company pi.set_posting_time = 1 - pi.posting_date = settings.day + pi.bill_date = pi.posting_date = settings.day pi.supplier = suppliers[4][0] pi.append( "items", @@ -448,7 +443,7 @@ def create_invoices(settings): pi = frappe.new_doc("Purchase Invoice") pi.company = settings.company pi.set_posting_time = 1 - pi.posting_date = settings.day + pi.bill_date = pi.posting_date = settings.day pi.supplier = suppliers[1][0] pi.append( "items", @@ -541,7 +536,6 @@ def create_employees(settings): if emp.mode_of_payment == "ACH/EFT": emp.bank = "Local Bank" emp.bank_account = f"{employee_number}12345" - emp.ach_account_type = "Checking" emp.save() @@ -725,7 +719,7 @@ def create_extra_invoices(settings): pi = frappe.new_doc("Purchase Invoice") pi.company = settings.company pi.set_posting_time = 1 - pi.posting_date = _day + pi.bill_date = pi.posting_date = _day pi.supplier = supplier[0] pi.append( "items", diff --git a/check_run/www/__init__.py b/check_run/www/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/check_run/www/print_check_run.html b/check_run/www/print_check_run.html new file mode 100644 index 00000000..6c57940d --- /dev/null +++ b/check_run/www/print_check_run.html @@ -0,0 +1,37 @@ + + + + + + {{ title }} + + {{ include_style('print.bundle.css') }} {% if print_style %} + + {% endif %} + + + + + + + {%- if comment -%} + + {%- endif -%} + diff --git a/check_run/www/print_check_run.py b/check_run/www/print_check_run.py new file mode 100644 index 00000000..d03f6e8c --- /dev/null +++ b/check_run/www/print_check_run.py @@ -0,0 +1,177 @@ +import json + +import frappe +from frappe.www.printview import ( + get_html_and_style as frappe_get_html_and_style, + get_print_style, + escape_html, +) +from frappe.www.printview import set_link_titles, get_rendered_template, get_print_format_doc + +from check_run.check_run.doctype.check_run.check_run import get_check_run_settings + + +def get_context(context): + """Build context for print""" + if not ((frappe.form_dict.doctype and frappe.form_dict.name) or frappe.form_dict.doc): + return { + "body": f""" +

    Error

    +

    Parameters doctype and name required

    +
    {escape_html(frappe.as_json(frappe.form_dict, indent=2))}
    + """ + } + if frappe.form_dict.doc: + doc = frappe.form_dict.doc + else: + doc = frappe.get_doc(frappe.form_dict.doctype, frappe.form_dict.name) + + +@frappe.whitelist() +def get_html_and_style( + doc, + name=None, + doctype_to_print=None, + print_format=None, + meta=None, + no_letterhead=None, + letterhead=None, + trigger_print=False, + style=None, + settings=None, + templates=None, +): + if isinstance(doc, str) and isinstance(name, str): + doc = frappe.get_doc(doc, name) + + if isinstance(doc, str): + doc = frappe.get_doc(json.loads(doc)) + if doc.doctype == "Check Run": + return get_check_run_format( + doc, + name, + doctype_to_print, + print_format, + meta, + no_letterhead, + letterhead, + trigger_print, + style, + settings, + templates, + ) + + return frappe_get_html_and_style( + doc, + name, + print_format, + meta, + no_letterhead, + letterhead, + trigger_print, + style, + settings, + templates, + ) + + +def get_check_run_format( + doc, + name=None, + doctype_to_print=None, + print_format=None, + meta=None, + no_letterhead=None, + letterhead=None, + trigger_print=False, + style=None, + settings=None, + templates=None, +): + check_run_settings = get_check_run_settings(doc) + if not settings: + settings = {} + settings["payment_entry_format"] = check_run_settings.print_format + settings["secondary_print_format"] = check_run_settings.secondary_print_format + + if doctype_to_print == "Check Run": + print_format = get_print_format_doc(print_format, meta=meta or frappe.get_meta("Check Run")) + set_link_titles(doc) + try: + html = get_rendered_template( + doc, + name=name, + print_format=print_format, + meta=meta, + no_letterhead=no_letterhead, + letterhead=letterhead, + trigger_print=trigger_print, + settings=frappe.parse_json(settings), + ) + except frappe.TemplateNotFoundError: + frappe.clear_last_message() + html = None + + return {"html": html, "style": get_print_style(style=style, print_format=print_format)} + + transaction = json.loads(doc.transactions) if isinstance(doc.transactions, str) else None + html = [] + pe = [] + if transaction and doc.docstatus == 1: + for row in transaction: + pe.append(row.get("payment_entry")) + + payment_entry = list(set(pe)) + for row in payment_entry: + pe_doc = frappe.get_doc("Payment Entry", row) + + settings = json.loads(settings) if isinstance(doc, str) else settings + + print_formats = get_print_format_doc( + print_format, meta=meta or frappe.get_meta("Payment Entry") + ) + set_link_titles(pe_doc) + + try: + html_ = [] + html_code = get_rendered_template( + pe_doc, + name=name, + print_format=print_formats, + meta=meta, + no_letterhead=no_letterhead, + letterhead=letterhead, + trigger_print=trigger_print, + settings=frappe.parse_json(settings), + ) + # html_code += "
    " + html_.append(html_code) + html.append(html_) + except frappe.TemplateNotFoundError: + frappe.clear_last_message() + html = None + + return {"html": html, "style": get_print_style(style=style, print_format=print_formats)} + return { + "html": [ + "

    Please Process Check Run First And Create Payment Entry

    " + ], + "style": None, + } + + +@frappe.whitelist() +def get_formats(doctype): + if doctype == "Check Run": + print_format = frappe.db.get_list("Print Format", filters={"doc_type": doctype}, pluck="name") + + return print_format + elif doctype == "Payment Entry": + print_format = frappe.db.get_list( + "Print Format", filters={"doc_type": "Payment Entry"}, pluck="name" + ) + return print_format + else: + doc = frappe.get_doc("Check Run", doctype) + check_run_settings = get_check_run_settings(doc) + return [check_run_settings.secondary_print_format] diff --git a/docs/version-14/en/assets/print_format_example_voucher.png b/docs/version-14/en/assets/print_format_example_voucher.png new file mode 100644 index 0000000000000000000000000000000000000000..24d0431bae99857ec1b5b799653e4326c46da99b GIT binary patch literal 179503 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 z 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 %bRsF>)8WwlBMFSFr^J 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 Kw)nyGSN{hH@9pCN literal 0 HcmV?d00001 diff --git a/docs/version-14/en/assets/print_format_secondary.png b/docs/version-14/en/assets/print_format_secondary.png new file mode 100644 index 0000000000000000000000000000000000000000..5819c9442d278b0ce51a3235ba4c93a6f0f74481 GIT binary patch literal 117591 zcmeFYWmH_vwl3Td2o_uuoFurrJ0!Sk;{x0077mUquxG061R&0D2z&EhH!H%h@9U zfLLrMA|fv#B0?f>Z)0p`X#@a#4T(#DQ&w8Q`7zdZ5D|}d5U>h!0P_<=7)hIZ9$vy% zUKkz*orjqd`eSG)JoWd;P)bf}vA$5sdLf0XBj0z>gPiJU*l{j?Vz#?w;8k~zvbNEL zG_Tu*y;6_U2L=EZY`J28=mi{O9y-=KwQ| zT%iDBY5Pr9R5|-6tej3|SyxJY{SN?F<^&oE7~f&R&2UQ{GR2_d$jZE61}suq@p(2n zy0oZsrhtfF1fRsyOUJ@r%Vjs$%=?DS?VCcF(^rRLH~0dRHkD5=U#~b{8uIcaO=cNI zQ&T@(Ad88A-X12(&3znF$0Ek!?G}Dfe!-%U@cL++m@p8Trq4e&rOVF2MydA$GhmfK zBaK$}?i~_yTbHqVG!ZqBMyShpgi(#TrJVJ%FpeCC?YA3;n64aSP9WZU*6t)K{g)ap zOAReD56xYdM{N6V4mHtTUPc~!qqhubRmK*^;zRCRNW5*v4rJf% zH)&B9G&iTwG}=jKzTk`vqr{Ai2owEYXd9A?z>cl;UJ2*W4{xE#Xtr4^E$ z-4>re*xbR;H&Dd!4_s!1^8dK0F>Is`)LepQbki*$4sy9J@_?VH80ov@2G}B`Cnj?8 z;UoQq%0xd%x^reXu6+Xt1^CifxGGBAI$9pm>;H7|<;{dr$%MW3WnzSz?I7ZO zB*+L4$E1g_?)T~E56AX*r7%Z=P?XRqozC)5#U1>%@C2~^LM)uf^u9yu+>Nl!ordFY z9y)0lq4|C7;J@3V!Db5=|78CLND`Vw!?X`<%>+>c+qGPt8+T>(q*m%L*v${<0nXq7@|p}I1(Rb{wClwvrx z@P~lD>>|^*iv%a(w_;y1-S*#In>#W!Lwmum1XzDr69Q*{8DC?>3V+-8ZYy9zFPkYO z(I^pG`u#2-AKd|AD&nBuv%{duu@rq4>L@ItliW~EFRZGi3VHr&p5Bt!87ru}Xmi+> zzEO_=HzAOwfGqA`>y70=??0NQ^-$G(3T7a z^DbZ~0He!Wm}Y}KD}zy1`O^nz?@@^O9pH2pb;p2cjixd6#*hWS|lv7+V~>C{#7H zGt?}!H#7*lf*OT-BlcZfYwVrmz2svoJ@t)(f-)a<%3w};!D)d`_U%+9>&Fj4@zONe zgn3Sr;<0hDR&gKW9AatW#wfw#3XUS&LFtkVS;PfvIX>w*TtRGK7)`cPAGjL!!ix$^ z8cX1n5mi1YH>>cMFe|qyD=9Y=vX}6yh?FE1)5!z#>%W{tFIIBPtZ1Ya=oETuJ^y-J zs$Yy=TqSIn(T5zNAVViZEK{{BI}(=Mt?5YTQueLPO4Fq7M{Ut!`J(WN)#6^QE_3XA zT5;-})QM5NiHY%xnO}#>M~;W#M;{Kv_jeE2_xWc&9x~lvT-P7e9YpL~9Kjt{Ojk_# zd=q5U`|#=gG2=cX9t$gTIPU70OOXC=3Rqb?osTKvLuhSRLfE3G4=|Uv${+mjQX|)E3h@a zK!Cw{HQtTzs$FAIBVY5h!P7GD+m1<`$&C5U?BaB?iME;7+z*2-tD3(2-rb0@q_Pg@ zsFOE5#oC!GZ(G<~DsEA3F&^C?N#VSLID@oNz)7se@HL5Uz35x}8;yMzwObSv9tE@o zTe3b}DLe(7#Lh&iHmtggKCe&wxZ1eoQgu>MG~H~YP8AkWDUtYdWql`2E$KXK&%Td< zp@6ty?k@Ke{R7eq(`!6Ko+`DfF^_CsFJ2@*p0?OlvR3NWbhjgS3imm;sJr?5(sQn} zu!|e;%BDv~&cKG9IoC&T6z`I!#pi(+{TJ+)u{Y9hK0%fF*=Fjl&vsAEres>^v+f5;blsd>x|p`$cqdWZ(y9&SR0rFRl`ITku=(W}?7c&+Y8r zi@&QV#|kG4)A!vbO0p~Z3wz-WH4W^lepSI4e8F|6TW+uP`L&Y$T?~waPdBRJ=@haU zJ^k4vevn~@o)0}JBrKGN033)vT(%L}=dkJ08+AV4O4zFA>GHz<^0Pxso*M6~tpueE zp0uOHax!P^cD!;tEA2NVngE+H7> zpQP%5Jl4XVe?9Ve8^36I2%ZQ|_*KA(!Fiwr5}8*x6_)Xp+BN2)l*h~> z6KXha&nk@N(B16b%phO?$TnP0yq+J@-Slp9S$=h0Lf8#?h0xu_7WO19;fX=J>DcSu0IpGp84CU~&8Q1Qt^H~h+L3B?1j$hjAZdc(p=c3;t zLoXeRU&U4PR(eZg^uJnnve z{S!Q1mVl&t3&H?>Af~@lx){^0h|tY=8hWn4|2XmS+2)fC`6>=b$;;)u?c}k3;^%}3 z@g#qE6t=hWv+F+Ql~Vs+;nj zbqQk`82~jT4G(~U`T&51q@W-VKNS9dr^TTt0dM}whXw$G%m6U|tRo9~|G9obokN*H*+HkXucvZ@3Y^K0HFV)I}^

    UJAKoU+3kmigyxI9o`d(lNRW=C4iP3ZJVHVlCMG6Fxu=%b zb-!`J0GQ#|pMo94FahWIU!KBnIp}-ke)?hr`ygPFD-S-|aV?PdHGe|?=0+O_k7*_tB0&r&{OPTc^_@yv?W4!*bwjryz%bjBiR2nAgUBL1`p_isgw9~wnROpwdj zs>;g>$VIM!5fJe?d5|0MYJGTmtw8@9Fu<^D zbq`OXthX-_x&Gn<{=4rNZ4t;Qo$NSd2P+&$79{=9FnToEJfn5OxL%(7RbIBa zU6J>~59!KY1m4B-iXlpVDrMY4ERk-3ZG`WOD91J$IhK3Q$l*sF5 z5A4foecRXEDFUBua9{ewMby}G$&H68bbT&zt-7s#xtAC>2S0m3eKwZyPI#jY83xV` z`9{6*19p&edZ--SSZ~%=!r9bFi|r~#3Nb~iGo713w#igqj#`HMSJ;~6oaqoEy1d$} z24tA^dC$Q{_J6OLV5p$d1zUYy`L#jbX+*)PhL!nJDe)MeC9!f{!k0p^pcNDp91kvy zjBdHDTU}$BjU+=U>}_yA>XioF{;u-iWke1S87IQ*^aeXeEyxp8IJ3adfM=~y7OT*% zd`&lg!PMSX&I=-%L+9y)NX_U*X2IBn9N$@Wrv(BCrlSZr;Qqbt^P}j%47R-YI9X&9 zdoprqDVoa7YGiL&LiQZ9?X@L67Yv^$Q7fmk9&pQMRVh~1(SSBA4eAfBwD@a4=XjW% zt4J+2q$_9|t zHxp8T6vl6%|3zJ5UHCIq?%34YHl>ILgUkYV7%<>rKKc!HVcbOq%caRT`Ws8>$*R)% zxmBlP_BDSerG42Oa@7OiVd^uz6E4PV4_~l-U(wD8UjUxPg;3}`1I-7tfRkXo=5@`7 ztH>Z0ux2^gW4Axlg-V%%=GS&_mD2|Yr7rVk>3?OwZJ14M(n7mqPMk?*qd}OVHF(Hc ztUA@Fa(mpCk}ccu>eZ|6ZOg*+siWRf9IZUN@etja<6*8c^=q`FpF0o#m~y>|hl+uN zQ+o>zXxOt(!R)%6YfxiR9W$0%Ulq%tYPW?u8L+`Wkr4sRVs!HVdnOVkf#M1o)CQ4h z9oavvT^~%6?%Kda2Ff2X_sh4s9zh=U!pNQ-Nn^HpC+uO|qVQYAYm-g{}^2@krG2s`%Q zTX=#n=s#l$myMjCJ@-Zl4WtIYNyLbw!8)?VA}lw10jsp+qCbUf(ktAG(Lfkgig_aq zNQf#8Wk}ZAFI;#%dYFj3cVQkU)Cg)&<=T%3oax6H|Nb2Oh);di*78_-;Z8t(<@v7Z z(aLZd1xD{9Gv)sx2;oT~bl?IxpM2=;>5{&PEXCpa|Ghy(GK}y$L^(+W3+W1usBc9H z32s@&?4HJftIsI1im1|*NOmNkITR{Ab6FEvc_-sz^eiboy zjpC-|d|d%DTe>B5JRE+{?XXL$-R>DUnJXdlp7~qm@j`muX76f&<(TnJqjno6y-u_A z5r<{=7KQA%nO&R19=&|^H;Fh4qtVz9L|l4NHwVxmp1QjgOm(=xwDZZT2*38aUz2Xn^Wz&+YjfSYxh1iEqfadev zk}f&frbn~Hrr_1KO}8}M(*K+bG?&YXBeyHO<*d3*+r}TDH42MQ3P^urHG?SMRNn2> z*8vI9mq!f9MhgLqSzQDa)&k;Va+v$oQS%B89^0DnQ9WV95!SeJU?1Td@oRoD>Z~y7 zEw1YgXKq9X+#-Li#lnKgSB_+VwlZ{%LGvBiH;vS8wEcycK$+9iIYFT4tUDBwvOAVk z?($plegB+Bl{xYVurm1eFt~L_w=Vpq^%~Dkghs{I-63*0Bd$z`o z8H@3hZ)f*#@jj7M9Q9|FqC3($%hlLu3b}k>|EVwz@|UQTuQj`)1xpP!DeSMQ>XhR< zLnzAIZNm9C({OI@n71}^`X=j+=4OIY>$gH&x$~srGIwP@OuXuNb{-@ypdkJ9dhq#( zLtvTzxT$GeB>2)$^r)sgd9{$iQnGtHZ&u}-t(AB9qcxfJE_N}@4x@0}rmvc~#raiK z7ySGq^7*QQc5-CRm5+hVYT9>|;i>%8uBJ;K^kFkWiSO*CIY&i^WW)%oK>J0((M;_T~PJG&8@&{-K3Tuc=J zit~w|M5w zl~7UdpYNTi+b9w%ww z>F8w9Ir81UCf>>noSs3~kRhs07)8Jyj0ggbpKw_QKDzbGc70z}SD$5%CJ}-@yilPi z)~SoW{kh|HI<;H2gnR_22)N}iTo~{Z`7srHP_td0*D5o#JDqLzQOc=Fu~4^r?JUOV zXCeIG$XX>Ws5x*KWGt^hu zmoRV{qg71fby|#>N@F#Re<@1`n^9|{+n6=83 z)xF8&aXE9hO&C=fN}v<-e*kAScG;_>ctYst@$3Q4q>iKhtqpW=w$m=Le#3p)pP^It zXqFa*Wucc7vw%_Uy@k`Gx{*#^4^R9cBS3v4WY?|q`tXQ1Q>qj-AG$QvGiJH{)26lB zQMb*RukK`g;5yn5!}oba-PwM89G%r|QM&0!LFY9lsz|Bd*?J7&#^UbL%N_|0`)`_p zBp6;0fRG*J2fRq~ZNS{Mbvb2u$h7RRiW7SFY3#D{oc zGmc$`Jf<+~9^lidwO1lsVeMGmf$D$+zQ>waVfbHuk_0C8>QrEy^y7H9g>1KYo1@vX zCFLqjI&Qnm*d2#(>h=do*$3xaR)Z3Woay@Kgj!Ab;&yUppH|yb>7`9H{FSkdwb#rK z#6FS`Urtpr7N#p8`?H>d%)~I8ur>Tzd);e!$RoQPsH@0w5fTd^%{g5 zn6ho@xHG82ef@|o@++?YheE5G%j^lkV}hYrjctCyJnZcvwp2)2){SD`A#sQ+sC?5Y zTNHuHB$7a~buDI-kjL>3eg)*SmWM!O1DvbK{v;9INWem^SMp$wT|#AN6LDzkmI__*QW_gRJ{%x)_hnAF4%!c+`L5<0anMOBQuZFL%DSB zn77FI8|BINo;Tnyx_-K6MfH06XYWAk7TV@G%3J=nWSWHFng?FHcLvUZybhzh+zz*? zr(D`RPPxs*bCZ0xE0bqM4h=fZ{qw~QT1k_!JZiG;pZA7B>rOzz!@AciiVr&tZ<_aF zX?0@7QHe`Eh9iaR@5&Un47>62X^q=~m4F=#@NhOw*gh!KBaP3-uUvkBp*tGZfogAv zfomoG7l7Ad@sm6G)s&=mWU!-3BR#*@!#k__+Q9e<^*sFU_^m=&G+l3Ja%cP}or_8O zF6+MV_onio)oa-o&&Z)Fj~#De+F5)h-uS+7yv;%yj_mC0BGCmz$CoEqjqTqS%4O0c z$*l6r$u;m}r&*xmNf~s1!Z;!uj!-S>DJ#AUTx%`M<$BerTkb>Ac&( zclIS=me>5rmWU7IYBv*F|_Cc2`%y>}?R5_Z3puD9MYjv`jb z77Z~y3}8||Pix@g$E9c_Ml}|W7U&Pq9wVowmP{h{rpMB4h^G^4}{qdMtiqdU@H%Jk_pHKT?01kIJNr;yI{v$FGdo;OB z+QuYn3yk$bYY0Y#vW>59BgAZJI4Y#Ewky@Fw^gS22<7@*Yy`0cO{P@{m;UH_i7bM{YFg}xqy)|uclZ656Zu^DZ%zf|Pq{Bc zcZMc8p4*+DIzORS!kVr;$m~Bv;8%YgxYsDvYX0fUTclLM|7>>pBz8z9nM4L#hJo~% zIah8^d6b7%G@(MvfBw5#S|~1^u;CXJ72NmMueC13UXz(2Q-h1H2FtlJDSf?UoM;e4 z>OD)azzZ*RD}v|tvK`*Xpy)EjP>hxjH>H5*EO{qoFvlF@Nm$XQ|pf+ zMPkMJ8^$j96H{J}=(0>a6yT}hI>BvG*{JjUdy^u#;z>J?{>t$&_|D^`^BL~iKJt}I zSm}>7Kbp=XcMw2PR?q`&Lvw(tk7cXtx;B+>QvEGImP*Mq?4$kK5`u#do%3C`l#3>1 zI1NUy-L+;q@8*3963t;y{odYlXacARGY~#?jRQTgdsG{A${W=^x9JuwEtdp*kDr#p z?Ibx!NgKP>A6C$AwPKaSUK{6jN;YI@`0j+s=60k{q!3Ahul-c2rf2z_p~dI??%Cwx z?#%GDnIwYdU3oQ`r0vkd(`0dYltiT`{K)DH*}ar=sBeyE#em0G z{4G%44W?Aho;#sZK!3RFEY#kFFpbTt;+bNpf`Hy~_LKSQ)d7_%4rs;(vu|x}<_l!F z=*k|b>Bn-Z%xOQ~5$`xk?iR32>^jk;4NmhofV981J)p?rQZ2PK*w}|+j@X%nCD_%y z>=1JdQ&n}MwiivAgowd+YcJZY)yEA*)r*g4PTmr>q#mjk%j?kE?(Zn)uTD6qj0%&t z%sVGE%3&AJX8XK6j}@7ByE}y#qT8&rcNZ zr^D^K&!~cZ7Q)`9RtS(G63_$^;LM%xJ#It4gZ;Z&hK8Ar3G!_5L-QR=6Oa=)UY044 zO~XJc=?za$2%-3%f#XAr>q=5{lW63(xqRY*u?fiq7J`dW-GIY{q&EO^hoGoK%A~_q-&5yaLUwde3Wi!P6w1BI5 zDjME5@eEtM8NYE^c@iR6U9GFcXQ-9SB*psgW>*U}@DH2gdOat`{Z7}UZn%t>jJHVf z0&|~1M44qv-e@`~a)@t!gmrD{le;UlE-{31RSCnc*)azgpjy$WR(xjH+u%;m6?lC} zk&LS-^+5Cp7`m7Yi{${9Oh44@#^V<5v*%MSgNG`VfvyPOppqj@6?4DJLaf@{=-$=2 z>F|}6e7YrSqTBp%Vv*ieABId0Lw4hx2#A_ELGu+jo7X^~F%cVE_t1lCll(JUM7nm(Hp9H#1{@f{gW2-1$dg;0X4)cIn!-oQq6e5r;AiB|Nl>)x$M(aw-HstK zIi5?idbNOYR$8|fY`$K^i47$i=k_3Mj$ewnm~M-kykRW}gPo8ahwl*T>6rz-=d&h@ z_`uVdHzH$^FqJ>DR5<1x$QNos` z6(TNo-iV}iPgKh?ko|(N`A5-7L8J~pz2P&HQ;t{qA6>`Ku+A%wjf_Q*c%awzKmw^2g&$0%94Z2+|D1gLDnmb!?|Q?y`s1RYU`1{BBf z*DmK``DzGyU){9+*vpeh)1;kz9XxN0d*h7MLEtTE73aLs_4(mwo~haKpqi|37+oim zOa`Y!Qxb8p#ZT`%FDg$)kpFonZRw65oBV~m#vMh{0{fKp-F?)|ND zM>;~}%X5PP)X-_(Ug#L+OKR=Mi){RtW1|ZHHV;P?{)#)EpbRm_&+r|)aw3Qw5%{x8 z!syj-W12H1h)ip)^b4(GdpTK`tK4gK&mP7E+cVRkjco&f4^qeR@6D$03n~TAXYlQ= z_QkX9L3*oLlmiu@X1?X-i~@vx-<+h_lXHBqsf0ngPSl1cLfGCS+|YZ&D{+JPxd5Cl zC)!=FRp3uyz{{o5aGJ7!skmluW;&(oV!Hmpd6nSs$(w7K0 zz}wmCy{<-*-vtqXg;I3>2@cV*FB6k#G22Y3+gBfbsApuY#$vM^9`SS5bmr3E;bx+rvWhNHYIaA9v<4$@U){yP@#TpAQZSez}ljSOk|wqSoaU02YYTs=Y~HB%L+O&$E*Jt7&irAw6}^8P#q4Q0kBxHt;9 zGFxL@HV}WoH~hNKPyKSP=W+r*asu^3a1G`fiWaH>XmGgb@ZIAWva7Y7{+>R zL{Kul+pnT``o!W!qE$}%xFunI<8_%UGY$K%n7^MMDajtobW^HmEf8zVweWtGj=D=} zCGWw>Lg`o689FebkBTw4a6qb{Ymib)QdcQ92bXcTw9G>1EjnZ8;hwp1AVpTZ7e2O4mZT5^i<9 z^VA2c?-5no%#$`hN-p!zdrovmyv*q7vo?jn8>d?;t26Lfp7&6x7Q@+CYm{O zQrgfN3DC(I>&oyIKFq|Ks?GWyqqnY!H^ZTZefs8jl^q|olLSx$Jhg6n7zZ0f{+i;k z0eyzKJB+1)_;BKlT`y;M2%jD2%86a3x;_tKiM+%4{&;;XE(OxvsDWi{$y{qO470bo zd3DtXgw;v)u-(=C5O6sDdR%qp%P7AoM%_uU^Z~l^eo7UoL#t-3gEaIrBg5*xk$=Is zo{!DQ!Mw|KxPNQtsttz^V#k3}PaYH7l)_?eSM2PksyOQu*n~FwIa=8Dp$204kpWz- z@@QTO0&_LqJTyDZsfvP}qHZ!Z)M|Q)`zn&PD}*9lH&Os`o7A(K?$uBn3E&a-C`a5! z;Ie>>(u`q3M_rfQOj(zz{N9f5k3TA_GQVlNm3)S*#^^=2d^L)0?Otcr8y(m~vwJLk z%$zUdVG^ci4Qi>xcv0W`l94udTVG}$S4?y2KC@RK5u@2dHeU!4KubWV#4Q!+MBb4d zqQ0mP;$mwI$BIP1zZbI|jdyl~c(kMGtb;taj>S!`)%92SM`xO!3kXxFR0d;Z_bgo6 z-}8p&k0zGUHfCOO{iKc!oj`^n zf0+0q&DKOWoYKIiSj11Nos26F%1?y>yK z?y+e-V}QB?3%ul3Log2L+3#Fa_xAOjR+mpQ%->i6~xXj zg~5yNr=CV_iHUe(p5W=r$UtKnCfyyUZ=-WkB&9gdX{~9D;2^;8rbY`x^BpaKg{7X{ znr`=29Y%+&HD~AAcC|MYz+?RM=>xB4EE!sjJZ(&zg9fLuoHy^SWCE@1R?l)Gw}zRB z_FB1B%>~*Lv~4WBzA6Mmde|BR1@ko`6F)`h!!zu5+L?Wcd|yFJ8%$wvV?6v*s0z<` z%!c8cPh^R@>?CaMFTgNzRf@5*zPEUf*ksUr zWiDV|h3ehYD3|d}F@cKJVxK8;TnpDm)AM`A$J2)%pSn%D^Xce=yccS^2TqEmU>OjN zN7KJ}f$X$L%x9i!3KG7lO$DJ4S9vZ zUx)+RZ8ylg)a%H#CqmkCurE&5HzWl1Ms!8_9+6B7LI{p-#1?fm#^Y!oBGrx4i?8Y>*9zZ3d2qv{QXDJE zd+KO5MP1-V4X7!x!1-E6?u?x8%rLqK`@QN{+(m1W(g8B2nz5%3h>%ls#=@s7MYc$6 zN_;xs$l;4dqgM9>X&AoyR;b*JM+Pl>i22_+TKO-IHhh8D8UzM@)e3FR*D3{(@m$M| zZZW%FEnll-V=3%tR~Cs?3bqHLCwc~^ieA^VSUtx9#drD|8ojJwalkI16fmPM)2xwgBIi;l!<-=6BPO6O%zYp|o$eyi(4oHL1COlkP-v5)OqI(|43 zSiSgT3nqnqxKG3qNy3tFRCSXs0BCZ%+NblbG#BDrDq@n>3%Hg_-eJ6%mj>*5=nq|C zm&{K7CS4m3+8N|rNvAmD0KV8ihjq#DA=P`Xz!<#z!bF-Mh$jDhdkB{3Chr=#PnibE z$sJPcR&#`KHL;kCHmkp@&;}_4M5bg73w-GpovIn*&B5EMwOSCiqbXx8yUwUaQ@mMY$4+RYG`KZui zx4jA*99C~4o^aiMHKo6mG%&xGwNL)M`Q}W3NCX*?JjYW5Q}I&N?!aGRug69!d$w0; zoM!<;Va;i7e|+EzeWpe&kro%*vpse4+p-qfnN>;g`ic+HW7J@HXE^=&PcUEkNbB$X&h!l=wpx8J+L?(;@>=J_izhc4^Xu? z8BDiU)3KNs8q?XUmfqwDn5x_AZ$OOp)3b6b{AsazOH>>Ilm%Q6dl{C%ZY{lktyAj) zF`F@T1d+hRWzkJ9@#i$|dWUHcjcVeKS4pO!u668vCJZvJ0OzqRCMs8#l!aDnu=)%~onAc;o6j9-MgqHj z7GEZ>b#JZ>gjlUV7M+iCgT*cR5+7%@91o}8i^Xn4)?y?1&V>0I?XkmGh0yV6SW3oH z{z8M(g`gPsQRUhoSwc~GmU?Nv%RPm~8pE2HAv0%E;7ty9Xd$Lr;#w=2XfLqAdIHpy zM;FE947I8qFka2$#-o3V3N=rUJ0AUu;Y0&nPs5Z({rZhqs!|JVy?uFWf4zaiD@2bM z)+Fv(Ojf4T{y;K?3;BY7h3i#-_fEN7KK%#EaRJw1>r$%|kHJ}_xY<+g zR>)hwZiKtYOZ;-xt{dwyK>w~)HJHm@NBL9CQ|Vsf{Kx)q%-QjY&D7&iU%Ea2g{}3% zEdOn)`kkta_kE-&sIT5V5bF*zZ+kf2KSTOR=0mVhGoaLx9z0iwe@$^!BCQ5`;Kb*5BIExvKVqTjhB&#D(w zoLu&5D6B*as>u!gVp6e&`@>o^LmE^F-=Q67t0hXH1f(>wzL6n~nTI3tu5uuezYK^ZR>NLOu=IKaIed`yN+>Q% z=E#euOXiGID^~z|%D-$V$CHYTnB$TWB#2nV zmA2u$G8U@lWh+%x@TPuXSy;Hb;x}JztqacEetI$bnh_aK|Dei&g3%vg1SOxQGms?G zh?!gh0T*_$JD$E|vfmspCh-?*$N-O>*Y>$=X*bO<`w!c{R8RatEFU6LcFLnc&$IZf z4u_%zVOK0YCdDVH6la-xs2zDU0?3bWr zOV=y@CNqqnzs1LqP$Cpkpx(drR{*qA1$0BADR}P6mMVYEPuBUIr7M@XV}A!63yPp1 z(UMk5(M&)hO+p8r4nqM$q$7uj{;(*IJ=yd?qdA*N;f38wpq$b0x@q`c)4Z=A?jh>_ zRLo!kT^T$ZuXz4gYEJMeExag_TD>_`qF6j+E;Lp(XfJL@W3i186uJULn2XazvwFZ{ z602S#wo0?zm`;dq+~sGf%eT7|&?Eo}oWdRF<*4$W!g1q?Ox@dWPZ0p3_Y(vbBj?;I ztGweV3vL89oMpOiHeuuHkB~^_0}5!x4mXEa&F1XMY%f>GrwLw0OG6^r>*;I{)0g zf9#hwHyGE>v>@axkVDreg0sgLi)JD2CIvQh9D=Nv4c;+*!aZAV!x!`afl^SkSyNh{ z*uTxCosGZ!oqusBTos6*Ftha()jSF1Pr4t;Xn$t{_#X(2HVxAKui+5*Z` zE%^G;#|z_>+55>=wyOUgZ*D^B84fus009G$A)Vz01xU?ehz2|>%foMIihd90M%7le zjta$Tw#j)tdKFUGilznGymC?~%kd4FDICKYsr64z3A3+uLANiMbl!&hs#A2e=1{z? z;+pzdDZU@ZT0~!U8VhPa!>+@1O}fm1T+H^#v-Xzl+Z&Sr1Rt-Ll;#Wy9|w;dcL#IW zr^utE-p~|eS$0Xf9&|3Tiq{s&qVGUIH28lpUGt-WpnN39tFlzfeacj?ek&u~b#rP@ zdK=ini?s#=(C7v0umzh4U3nwpzYJ3cT}}G7FM6Qk+2e}j^TWJ|Fi1@4`VQaFw9^yd3 z(*tTmhxOt0KFe)Eu43y}7lz_#7-2I_Q{)jWj&HQ8EyXqkU}i$pI;)%-TWY<#$<6QG zz9g8pZYIA{UVnPu6k~ie<5rU&?YL1oM~(!d1(aaE0*s|BPY{3qV~biut=68mCkj$5iO)a@#@jZa4qk^g}Mvet5F&-IJ02bn75gzt?JGz#DbkB`<|0MA8duRK9o=) z&$N*hS?1t&nHGp9OFM6gJ3B`qn~oJfKul$H`08~n@n&PykwJ!l<+~(~&n1|&C20rL zB!Kyj+jCXYE3|s$`KX=M0^+s;=>QCx)#2REr{X&SE|m)1Z<~f=&g<@yEnyoUJm&7H z6Oi2G*G~f6AWFW%-LtH5WcElEwW@HHvb{n8RuAXVe9q#lz{!0QHzI>20gfcOTn`YZ z-t9Ed&~7Y^NsN7?65w5-2i1GhxaA8G$%oU^wF+J;A!jKN7`{Fr_fK%heOSWy{)T^? zOAlDbef2vJR3fa(E#-hdx?8(@j_nj}3}jbgLnUSmE$&D;8p42prLmi`-V0rBJ#T3j zKM4%=h2c%-iPDTvL35ignOgYJ zOzEDQ4GTO4!BC|}Qdq}{Zq3##hX;SmtSvcv>Uw;5qrMuXGpbL-If5b1wMx$Nw(4fp zeF;~06mqJ&G=q->fvS=e`wR3{l$18_?DqG2zhoD-wrdc5A@IC82yoo?WOdSXkIT*u zq_!Z{K=;)hN%sArA}i$*xU>_xHO2#DOa;h5R|O%P=w{>DX{8Lq=#`h?#O^fh=t>D& zAr@fGb}~)7*4I291!MTmS-%LW*QFomEpo9WWj z=@qfzN&9|wX`>49mO4M=Fg6d2)S~G!=+4IfqO9RX1LoS}Y-v55(@tj4DnBRoSp4?+ zwDf`CBks=o-eN;*DMA);FCv>7j|67y5{&*s6$)oy-ix6a(Umg57(6eNEbu<1nlL9- zTYn^lZR7xQn1$aRs!% z+4E5HNUqjx6n)=|cn8+KMFTD@#Qg*9ISv~#<|Asar4ZAq2UI9$wdUNXkhR~gbqNM; z6}^y^KB&j;1>O}Y<=IdF+PgiSh&%LD?p7#os5(o~Eix}_zCNVkGP`$)!hy5pTllfc zReiirIyOFgQ?gwS(GRY{$fQ){yF_jApr6d(mb3noF2%|Asxt&eDgcFS>hA$7exH{N zJ{KLk{$Z|`Fk%k-#HlVc-BlYJXhwX0OO1xfJf0^m@NG-477lJ94J70=mD}+lRI|af z*p+DA@YpFc`h0nS{#Xq$hhFD;i+*6tJ%>radK2pdr(?jmpn{5P_WnjWS5#z5gvP?p z2M>Jc%4ZO8-u!9$pvK@rggs>W7t5nS)Jqwy{7=>0NPh!=+o{sxtwb!}iWM(GnLwusX-kI$ zCNbW@D{0|}?XqpMw;U545p$;9SuNFw5>T%9Sxc<;IW>9ZrQgT_y6w-t=CaPS@9$b! z2R0|4e!QpLeG#GN=+k%&r-Zu8b!Cbq;LC?`NDzFE4l78LXjJp2bCCtHjzv_%;`QfE zkUP^n>Niy{8W{Qfyj!1ZhL@$&QancUp)J%#aM+3LYIp(DsI}B?p_VKMh9xM@rMGF9 z??{!ZCiGd-Q);z_-{th)8*O5nI9I&eS-KSi$i~xBA>*_99y@D%!`^d|0#VctZ^I%T z_H0Ga*-81x3u_-&mr(>?Cd_3$x2(Km{qDLwpD@&3+`j81!0*yF$O84xJ)8Qe-xSKw zzR2Rn51o3)-eAzQ-$zM086fTEA?+Q$Ko!lck(1TidQ>&f=t`U=JF}!STjgJND=on} z`=za|M_Fkk7^Y9Z)MhO^Z9@*U(KDQk2p<2kAsyL0y)qn=MbZEEj|4D$P&cB?YqV!e zOj)IKb}h8N_h-KuK!-xkJpk{ch&j>H$p`m_l32)jGD+3fE{Ra+DmnlShvB(EeKR4` zw@k9-eU*)Y0}-;>tu-HFOw47I{V0K`NgFuSP_aAILZce;>2@oro!YPjdWCjjG3+e2 zt3_;g87jk_oz{CTEkPgkynOoz_6#;mFsZSr6Gp!vpW7j88L&!uZc=U!OG<22Ht|a+ z!1C>{Jw5f>y~dKmPrbm8Ow!sey~TCY#oAw}pR9#?X|j3Am-N(H&TzfuaCmk?Vm^`A zqt&w{MFc@~I4a>w+F%$s$MPVW)%XsLr{z!qs0d)^30YxqdC6`|RC6CHO8!gta7G2o zwOdZ`7Fb-O^nbLW4QF*#2$|sAsQmu)+>zmLsXr0|nlhg$le66Jys{Gu%#se-><#E2 zZP@2R7f}B{?7ekdRNERqJRnFNkp@W>0cjEGR7x7@8d5~0yBQFqL!~7Kq+7Z}iBUSF zI|mqGfT3e}H|O4ae#iS>&*$_0{r>)2FnjN{*0a}IPko>7<`z3GX5ciGrF1K}KMPE( z^hp#MwAPKel83!43q4n}e6EkcJp1-8;y@4a z_M5m-aWv_Ecah>qDllxWsd&wd;MH6ACU*Kz&5$hY zj*yw>GUV{%eUSTOS@uOH=IQFaGACZbil@!xCO~eo&g$l;CIoW{x=&~;y9uW`6?mFg-2wGKUb9KnMA(E%~pqs->#vmbsxRr4kjNT6BPQeEH#j8u0- z55;)42XoL4R(?{7dzfjK{OO66IsvC>;Wx)OSmZD<6s4H+k|8rA#z`Pa=R?nmmldDB zOw2KA=cT)D_1uE!srMX3Ic1%{Qeg}sd|Z7IZ|k->6`R0ez~xSN+FycDp5=1xoV#qv zoJ3Iw_AlN7K&aDmX(~QxY@&0fI**&~+xH3UD4M&~KL*#SBuda8^usHBTQ6j*-}O8^ zm0>~L0$ij0=A71Vb&9p=RR(pu>MU-QWBE_Tazb^CDo$)H@v+SPf_><0sl`1&@vN(x zDqyfZfQ0I1u-tq+H>U3t(!*DE8F%j1q*}qb@@ptp0c&Mmb8{vd&qC~`7v?Th?&`kL z_ad|i7-{Hwhr2}rKx&q&wGmYMI%0rZ{%BVsaDXTM7G3LkvzT(~Fg z_mub>qIc4nkif)ftMBupt66)dJ7F8z{i8+8+yC<768mUjF35rNL%aC`4xQ3em7O0^ zQ_jLaOyuytT$Eb)*$nk-jo{Yy*oO)hmbE4%0>N1+UCny@qkThm%-spRSgZFAbcQ8P zGM)I~xo8&K@6KD_`?>;K-#utPpZ_8sn#8Fe)=3f7X+|(!uixxE6JI`RZO5Z+bT%Kc zQz#s*h#~k6w_H%6_g*2XH_60RQIhjWN9U?=OUrx<04P~>+TDGzX}~u#7XF>~D$yK^ z`_eCmgg`g_#3?#4zdVVwSiQW7L*2<8dPw9CU0A9&q41w{O3?uDOYO4JIUmenBElXA z3*sTB^K-uE1zy{#bTH;9IvJ*La>p(B_e*9O3G|M6OkQ(?t0OJyRr?l7u_o_$y3Y>7 z!xI(x5E_;%(cd+AIQ@)lo#xA%$W?Bj3*|r*l4muT-Hc4;!4}gyav^ zKMLyPX%?st=kl>X^xS8;pLbU0*7%|_L16~VRj6!#veCK7A!~8-Ocy*bvOQ$ZGMw*N z3Nd*-JN&8oyvH6Ve+_nMSh&mZq(t1iiaP8zHJ$`QhtrwloYQ+=T-E_;if((0oHPBNB1_6 zhisftk1C8Wa33h;THVCVqFOW%D9%+<6)RsMOtj8F=c?WIg1+?rwVv>99PV|zq{UN0 z4f7HAR*8O5^kez%*qpgs6Jq~K#ZebxXcCL>=;e=dw|fnK;Lx#e)7rxiVrHJHqzHwy zP!JSNvXdK3>dD(vJX8X}iaCeuiEN+iQGqq?@d)Dnjup}j`o^}U~I1>eh>d;|-PK$kw zuyXw4oQCgtw)QN&H&{W54>g_w#Y*EZC@haJ>-t{w5n@b)ha&10mT#$cOzXSSJY0?f zzpupQi2cuYlCr^V>q#j4Ttg@F0#3M{FQ4Tl?*3t(*DcTJsfPm%&k9Y?wme2sN%Qf} z#FERLktv2=^ASrpB}Q~-(P2Nl=X^T?bTL~&{uAB9rCF_xT?p=RB~+TlL#M6^iQ6_f zAD1p2#!{NtOjIQ&-N>uqG*C-PP!$c3{RE1nYEzZ%_FKe<-Wt(mSVAhg{_(m7p9`EB zzSMjls5MeZQbVUE6xhQ0t87jcI!_`wGv+x@qD5DP^Ln7@GQ2J0`RHRW@_d(?LDr zjpkhX6{!(Li?wqeX=}YnTk7-UZy{GADmmRcZdS||;bc{g+fGX};Kw92uW$qQ(k@PE z^9;!SPlJG}3HG7|S{8{pD)uE)GVaYy5@~~habNUup$-%yTm;Y7py|wgX@a=pZPjSU zPC~du^mvwd2>4Kmq?9d^q%oop0D&jAZ{eqK&P9=M7cRs{(?XxdoW7qe4*V7o+?sAF8ydlOg- z03PBYeG~QgRZxS^wdz1d6mbJm3k3ar}L;@^+JL*Od!S@eFu8 zZ!mP7mL3_=YVg1RF^z|k#BXbj@aUUrZ9k+c*J+q3YgrN`1M+zTd1FAxk@!+iQz?1> z#|$0Tf?SMa&k>zwtE022>lv$SdEIV156Fdotaw_o?_Ie<;}|sTWL7m2>{2L9o{ZOK zSRR%{Y24~qNpkMKltiooKil^^zYk)#hK+JjsK#;WrFKP8ueqqsZSA_xHepAEnNvGI zYz~w_sxM(V8xZ+7-#c4RZHT!wC#c@A0i z>eDYISNJ1mB!T1hbFk0IfM(N6f$odtm-A?2upPYT$hP2Va|73^8`*k&z?z%qVc%V1 z=o6X!mEgq5yXa7xLr=L*zOV*$>OGtuz~4;k@KD8C5R*V=2_I4yrD)c8^3Cis5u_U0 zH)`&e`_HoMO&C_YH7hDMeK#4d8#?H+_B4#HXE(`A!*+KytDU3Kh9Flcp8H-{oAQau z>E5;`jp*W_M=%*l4`%$Z>`2I->M#!H?dZ-w_$0_X<+XXKM(lr@4n)Ac%UU{k;;O>T zpC)n}=o=Jop&0OOryv_ny$`vZ>I?%#w#trwU^Czla#P84 zpLfzt;|AT&C?{WKp{cHcE*p+O9!$_qmyK187pC!d5Q7`@9^j`sv)qH?;=`pB2Bx?@s3u zchy}bMwgo}s}*V8)+xW zzO_#|(miTz^?mn6!&o~<^nPLs|12fk_d;F@jL<^+uW4oUrSLn2-)p!1B9i-5Dwwst zMwtSk``{(-BPi^+<2YCOg0Vrix_ipZ;Aqml>zEKff?90&3b^HV>>4mua(JcE#gTFbbp)ovJ~^Jd(3Fv)JNY1IY4k$Aq!?%fUwH_`e8 zjMTRfS*X!3>r+zc0eSg+d6ZcLBuGv%Mf zS_T$&uit(NXV=^EU9CZj`K3||*mKT2OD9>9(j3$S#iR(nyGcm*6!4xCbCqckK_7cg z1zAc!yrOJa4RaL@UQo?SmfKfe29%d%2{83 zZDIE&Qy0-Z+zkCV%G24l3-Sd`%C4z7flJwhurciW&0ib;h3H#wZVV5#>L&;KYb?PZx3-{ENajePnEeH z4MW36-_(arS8z3YTNEv)E_rdh-;EJ;D>IF|VD;#>b`nh$LQ#ANC#EiUILv&?142Ng zEULrMZ`gtS%oULMdwv$-b1m8a2nK~U6Ha2`kUw()F%%8OEjxpF4YBH|TlwV3>)K;I3k+@HBC3NX|z`cjGX9v>y zf6(zLgbrHLo;STvnsKgw9K-Q)QtZPA?8*^&`kj-M@}@KZl{H*Vq?#s7&Ucbc*vwvB zx!e`TZsv*1-nc&(myQ!~2K7-&>)3pmMYj2`BF0<)Rm52QC&nrUu%ZO;7V}Mcb;bvp z78>3Pd>CDvgC7vwT^ zafx)$X;v+t;5bn6n`&`Ri~#lCUH~w8YJCld8^K9P4HhHO-Z=yi(<*FRlm1vhV*{6QapQHUW>82PI?JPY`sl84Z+LFV1Yl=s2CnV9qCU+k1^}JYsP?E zd)WP|8d}-u!`kR>DNr4;)?elINqqnS1R<@4)K}wVII}`-=Q@3RF3)T~Z*Pok(&Beq zc0OEOk7AVxU+I8?lcD|6t@we(#C8nZ+Q^)?T|Mw-1Fmb zrPY!iiNEDmy}SfN46|vKs@y=w!}=!sO3|NKCObVzF~h@(cSr`S8*i_-vLC-5Q>|T3 zyfTa;?K`t|;{b|x=LzXEeQ^j=W{YfL>fyIf*;b)GdlRD$2sh)wsY4p@rxZThkFkve ziTH(Y{l4|}{bBm9P&u$O@dp3{dmT{#f}PP<2cW@_jde{x8*CPR51P96T#4h@;hP33NtR-|l*_OvVecTuH%ikt92 z?D6162TX*#$X8lUx|j|qbaF2)HHXzm-03-AmS|DX$^UG9$%RN-ZCZG_{E57yoGlWl zBxfW-#uAIf1^%6=P4dy7IH5~yblY4^kd`}x32){RyqpY~~__%KzrG8kb6%-&#=t`bvJ9!h!Mi z7hi4NUAKpyK8hQ7B%{f`mF2OLVK1!6FR8&kva()PhRKAgeXc*Z8>(VRrR?|YehQWV z)@pSMgh=A7zX;h^HeFp9=Ul#au=;ijzk1=E$*_ae&9wpV=ctysc2Z4^7ZW4{bbdv$nL() zjV89y!H+ZH^O}*ip!M>a=b)%~RK!wx?N&jF4k?#ebUetAjqwhY{Shpp@=b4iPcksL z%DWGz7Lt}Sy`m(WRlR1^ex-@{`dqSKD&N^k#;o?C+rolr;a$<#a_r6G0#e)dp&D~b z{TiPfvlsfBx=T0jm#+dQMdHKQ-RBevVc0fDHVH3+gnO7pbM(>>k2lTJeX!rLv`rr% z($nIUg6c+TXVk2=Z3z3gHQX@)p7kDE4Aeh2}8I#jx&BY$4KB6wTuGnD@S-_3f|ON-IUiR)Uzoi z#^8sJ-Urdncd$$>AEQmSe6a5u1r2Xi)&%biRv&8QK7Z=#?OOW)-R&%ONFCqT@XZ(uv9`Ho0BWU|E^M>&NjL{M|6loJuw&UHrBO7}F7 zmfeqRDby@n82xsaVstzd8KL)$&-0w0v%mtyyzeH~-$&K4=8bTa^AY_D1Qqn{IZiY{ z3F9*Kx|mNHK{z$jN5&=c5o1-Z=Y)yDLd^0&ZU@}mhwpW`q3R6hb}IN*R8go?vZBsK zAQ*hJG3&(bt68T^w2R`s80Y?Hk6{S~4`#Lkt`SCa{7(>OKtb>)3mf;M@9fjr&ZcLrOf?o1H^5k^ER+eg4X@2K?xKpRi?y~ zSg^6NgGaZ^nN|xeBFK&(ZaUf5-r&@Aq>cHZVL5pG?eIyATyuwniV(j;))}-8%!z|B z5uY&|2`-bo=BW6@Y4*AI(=jKwF}HPztw1*oycS4uP=8|jYVAm`%$JLx(;Dl{_pw>X zuk=>96o2|UEI^^b3>vHaOUmr6=``wyR@FuzIJNVNv7woD#PS6cBXGUCsorYkeL(m^ zhond8X5u`d+Q8i9Mq6h4&l(GYHzO5#YG3yMRbQuW8sA^eC*pdN`iZ{~$qSWHY{`pG zYaG@wO9cqOK6+zb*N+BeJCf!Nwq-KL)q~Tar&TJpOu1z>mb67~Q;~XA9+OTyw>?Af z*B~ifF?Up0KeCK#clw2rJ_6v`)|*IM5v+xWi!xtKD-*trUfFr#l{rVtiz&ZmZHZLo zz4>)_&g&MeofN2{$UW!+*be1ce4KFG7Ev5&Uf-6c?+_cT9wb*jdtLv`>Yc%2-s4w9 zJMYr(M~_-rE-@gt8rFX%^SYpCuobw>I8fE;B&Cr)r)@PT`fA(RdS^LPXN3;2s0ILk zv3rS6DZ6zPD5Lve9@mhJ>yx0-P8cc62EZc~_vq;}3no`WVuoecJs1OI@&2joU82ZS zF(Ho=cVX6KJ=CfpkzNAe%g&&fI_Vm*TL&2iLWb^d|K5hC>3}noR$-Opbs*DN zW29%*&Ho;U`+Aom^??$X5D>?-7=XkM#e>XLSU&em?}d_^Vo#9Q0#UxFUz%!Lj)uBV zfm+2=uWKgEY*KOHeAx9&SjYP%i~bj_09NEREQOmI7emk_t^J)3bDJYSi)xBYL;?p> zdSnaaDu85)LoWL2#Sb%?0@LP(r`3`(|0;(Tu$#-qlu;NgF{pi)vL*Vh(FCJRTEvgV z9goLzVBkDRr|qQ5d_=fTxK^+NAOU!UCw~zsU^~eyTJOtVya}OnwB;5#d_OCd$g1@b zKyKQmz@Fw2n6SLY1&Vn*W3N{uw#lTQ4gA#~Z#S9`1z30q_ox0p&8ho*Q81JCQHH6{ zJqn2ZTtfkF+t(>&z_Gu)2jb0QnlH=XZg3I!qkI()cFiz1P?}a?xBV$Sm14;Cdb|Yk zwA~R>^D+_GR9oA-r(2Wv&xB;v;eB1jD;elHLKxB-*b^6X-EeaqyRN53QuY8aoStVU~+u5Es?2+vx zG>~W=?>SIaCI9RrORt)M8{V~4ECHziJMO%(a~dF;(rsZ~j0K9zpq63jf4$FN8j@{5 z{^;ZBX8^eyOi#Ig1LJz~tf2GEl-I-eF)H^!7!&uUH3=SGFD`rO%jR1cf%h{!E-PcVVA5J(~21rr?Bp45z1w5~Ya}-^!(7s;$*4i*E4Jt;-@ozz(m{|Ze3@}OV zJp?znM3=L($Xf`En$w$u)$v+qW<4H}`13G-v*!p>h?xN}LNN~LKb-%~qSxE?4Q@?3 z6eUt|6Byh3`*=fN)L#U*+E%qXR$aaW6*Il{{oj%ZCBobcd%5!%Y254;Z)Rrp5H+Hz zadEQ87=+buXA^5@woxu`AT<*Uk3?2VHy3PO`L+aTAxhc#B>OiFq!!c#pX$b zf9mtKBhQqp*(T4}otb(m0MGRqp!+yO48NwtvSD(#JacXE+NNfb{}==iwUy$w$&zMK zA!`1RH7Vcu2ot!ly@4SZ#K2`o_Y3~+uWGgJrQf(Nqwcvd}~Q7lX?!UFzFr z<^EJyCl>?_d6dZlFRgmJV}Cify^$vOmEy^pzO>l_0=XJu`?gG2LxQz}^G z<^i`fo~XyJKU&-^l7w05Ijeeh20&Weh~E~&@|foNY!}K+2DTVpB8+G}cl$hxN zmn>ab`lE#q5aHS%cJpDM(Ty4-$wi^qTZxJMpeXS)VJ_ExNc=};`IV#EsL5?f5Pw$S z@0g6&uzr#j%xKNQA+&+f?-ow>mNgQ3lgVFj_P)sQz9;Js+W;!YH|CnX!*_dliY7P5 zO;68tPvXz15ciJ!#hSpXup0s~Jd5{UYSza4=b7`H?_i}!(K=) z06aGVOb$sg@6(O7^8%~wEAcwC79on5_+qw^$qbz?=$A@@TRX6I zmdptu#U)N6jcDG7ZiNAmV}xn3qJCzgw+MY*9F$a8_u-oBFOMNKV%JQpm{3 zb8x@X-WD_u{v+;*-sAAAiKWMwM41ug&;4PGVmyTQ^9?d^Zo|7Z)XP7Hq{B#F?63TA z<%Hy{vpaj9Z}Rk8IHdxtwa>mnr-kTOs0P=Z3>Q$`CorjpGnr}T3DfwUdv927*j}yr zJ#4CVbJ~5$Vc3Fte`Ktn0x?v1&QdCxk>Y-Ou6jq|#F&F<0hjy-DXE1rX`)khRPOl5 zY<89WlE>wAS3W>-7xg`Z_J8m2`$7Jx(knaNc$$a&iH@QR)8F<#E|*kPKOkVdQ1!J7 zT6iXKL&;yp&<)vpH8GsHtjq%=E@N?b&e=IuXg63nq~Y)!rl8O7WY3OzMS-o zwQ*pfBn~}^g9yO4?qZ}ruoz0bDj(&JXfw=3!)h6iS4;L#UArI#QW&t+X0X1rXP5ZrX;_}m$tO~;&XL==M$t>+N zM~?576dU!k=1*f-{+SdxBMp#P&*T183Da^J($v&Poj}!KUw_<2FCCDAosU$Xq)r)D`rJqDGAAE{qAvQtNxC z(#gij+sPmeXW1kEvL+&+0lB&TeEIG{}<`kn08XTShv$A2JACUFq> z@csEqy5yps`$Tsdwk$E7)Z@4rYiCzC8)R$q1pF+LU-aAlFqhr_JkyG`QVB2mZtGs( zP&zqV04z-%sBU(>qRfieo%)C|A*pccCK2Pwg6eMqNwhfUrPO zw%YCAtV(}>uV-p@J*kb{wHBqapLKG@qiu=4C`hUV6(V{bC!=`kIh|dT&kUPw4?W_i zAH&apcfZMh(ESruZp)2vh>GU~u5zxQNvLm7O1DfXf)>pr2mvy-D78~8Q}U&q{vabM zcGF_OBDuHT(5}Z2%sjx`J!-B3bUE;0`ms)J7SN>~tfoP=LQId@nJW?aU*Zo`uam3s zN=@&n=ymr7UKX3nZZ<{dOw+LzkKs;#4oP(2q0X_?FOP|~J;%+5me^<|{7CItt?3=L z*cW97PE+WlnZM%-Hs)Dc(*%+E$Ge5|K@-D`{JU{1zsJ}q9; zU~fTsLCj4{&RPpDZW)B`T@9y}VE zZDFyU2J1|#x}R&8Axj6QmbIs4#IA@Pj<>2|V)dlBZRvy0z`wCM?_$c5zLQ-g4!Q}B zVglNkva8zmBd?Wc;tgym4=)tk*6V5Fy`2PP2j=o;VryOqIN?!6DQ7tqWk+`9yr>^_ zyL>T_UnaYnJ`?x?64fncHNDdyd&$RE>*br(LjA9Y$hEB}1J7#)MxrgBN&ml9uk=F< z_Sj(UP3ec?F4Kyb+RWl5KlfJlwY$pWh0_g5T}z0+>=&2(EO)DBsV)|^XLn7n3N3kl z&%{DhzhD`Uo85d!fljs5N_$-4s`w{QWAGdgyKj}cT$!zXck#iWzuD$Mv^PDRlz+Oa zwskw#sKYMfrFA3o*VjX|**+8g?@{?nz9emvHhn2^WwO}}j?I$w{iZ8$pEPw9O@DjF zIx=j*=P1)l2Tfm@`N-(9@2=*Y0mK>iT{%%9vV8W~_88#hv^gey=KTxW^{;Qb5U~PZ z%XpwmA>G{`-R#%3s0e$3X7CmWD5v+{;?p4v-)lP#;>q-UJi&LLh|HWn0cNfCXaNU{ zu)M!*T`a6>U$Tjm$e+ z8vXV!yYe3!L7dkgxjBD5#Ph$G+h1PazZ(J183Cr_;dH?>f?t?^e>)$d8Z6)=J=<9_ zu>T(GU%Ttq#{DP|*1~h|rFHJ#yx{+ukK_ai@R6aK7z(=oZHN8K1rNBYbRTzg(}Xkl z&)dvA_g@$TSkVF!mUdJ=EU6biz0paBPv(xNMjPIkfGMM&UFRL3&LP+#cG{Qx__#J@ zmO}vHeSAke#T(h1oXk5=za=s6J8)0ZAB2I4h3oPJ1H(a%#&JOLUw;$b{r3;QG$cFm zasAodUW-v(-}B2)e?H~k|DjWs1kDV|&Y(#C=TrWDsaiQE=0Z4~{%zTR>{1SJ;oYl< zkDLCXLo8g)Vt-JbS;$x*@jrDrIE01OMrYe0#{G}uCuhG4DxJtYH2KFa|F6jYCdB_M zvj4O0{(rN|UZX)C`zuK^Lz-gT0fY|+S;d_5F6IeO4(OBrejNO=iw60zK8b?TQ?Xl? zyP_iYmSM1m%XRzSmbf zzc$jUW6}COH^r`DJ+;{_P6AiHl>rt7B{GLa*^2~zX8E1WBvVM%=Qs_tE3Ffm`&6lE zL6oC@QXzzW?ekAYt*`60LLS{&pPv(&Zozwy-5H+cD4?dv?(q691dnZLAl{289=NiOR=QyaW)- z?`#lT;GTTNh3R4v50@HQk6Ihybxpj~8if)pl|^JekGb-p;W*`2@!v{NB_J;4U~{Nh z{@H>Rp?}1#yAs7(wkt%#@>QCvc6_TVVSE}E?t=hLyo*yf6rTB7|F&Qs)%zL+f`Abu z>_rx=@S;y{T;i93|80G>RpDkUEEtJ33J6Oi=Yr~RAsTY6J-M#Rh%3S*M_FsMO3!yI z#f(7wY`%b2^jeA!-NHuY#!^Jd$7c&wb7g#xh!2MfzteL{MUwiYf|pNTS*w9kbA44t zB;2=$nO>!Pu651K*8|G=ZUA@d#p5p3r1z>f(sBb;405pAtX^F#GRnDT3?1bEZqSm> zxCh&_>^-W~eybHX7B)v)tv2Dn9*`?sLd+KFv?F(vFtLQ=+P=TY+Mm4Pb+mQIif!Gj zD2T|zQ2SDZ`Mmu1%9NUMkg*7~GZxBrEo}`VQJ3{WDhWTIUf~{&A*LeC8sOFp+5kMg zLnPeThZx-G7Ug$&7GDSfsFLXUUKwV?EC1=?@At=z#LxnBjDhCIaXC7s?dfQb*J*My$GjubiP(D9*~XP;e7n|-kpQr z9!9Ty1LBea2~~cjvr+?H9F7~qpTZ2C`zIG@L_UB5qFHzMSfDFkk^UGr*w{ey{NK)6 z=}>4!HZ1j(h2w^yg2@?KR zf+G(Gn=l+GPE^pDBCHqWAk~qH*Gm3vWSAPa{52YFRL+kY@cgF{-!}w)vu9s>WA;&l zC`ZKeU=*O*=C9+7nA^%GZ!jFZqK^!*IY4&y^U{}0f7>5_KksdI0Q1icCOd#jl=Msz zB#Ipx^PB1Vg92Ew^dEq@*aDO>#NM?4*D1xe#bG!I*XLhw8s%-gwaqTaU*LaC)bR8- zn}P3LCP`6XlZHvLG>s@dzT$#_v3>D_ivAm62PjR z-u%8!iGf)S7>L!+xBibZ|L-~eBq9QhFYE%n)NlarvL`Fc{&$m;G$6`P0-a1FTVe(z zu0AJN4Wx@Lv7mavpSWtYZ;0qi|9OI=aTpR@%b;kN^!3RsIXzpxO+7Px!k~ z|K3TGTR=FTe_8!bm*7!Q>?Yazbge4KUW9RnQx6yE4fk1AVfWI)%CxjTmfan1Butpb zPJisyPQziauFa54_nV>@D7>bNO&T6l?+vpfJxi;W6s6^O?6wiyT%q5rhr5G|SZrLN zblVy|^B=}sM%3TS&0(ED8k+>!eDzc*Nsxzs{^hdZcJ^{sp#rYqvroYSH1;j7O@~J! zj#sm_ojwvNwOhOqAb@zruKegz(Wv*_*K;JL^8lY^vu(GK$5Mf1ht{|uB}DWrbixk7 z*)1fK!hmJhifF0ZS)2ZBJznbA@f8xfePcC#x0GLffEBjRUha;aSN{l)?gvYB@cYCm;j;f`hMy>!Ta zIYa9U(kj8lY>nk`4v;uHiP1d7w)V|icDG2y8OH(R4^|0pvxNa}AK82>S*m@r&J792T^9eA0LPQUXlas&HvJ-_uYS!k*&kBhLnm2W7sj?fQ|r|~+lk%4BS z5#@0KZGFFb!4?0@`&!@q;*|A#7opq{c~D<2arDYa5=#o9=kYv}+Q6I1pM zAz~;SZMsX--gM>6=C2LbFu%Z~@N_Y+xSeWv#^v&=j&Vd;>nT68Qquclz!u^fYBg^4 z5nfksFKA-T^-mweUx2h8Ki#TBwCSFWD|SuhK~ozav?m(-in$xuZR9L{m%1JP_|DO$)Y9yA)O*_)a=5xT0_}}$HMR~^HdEs7kCC{jty|eIT8eH& zM%B)H3LMQ^A5TE$o0mT;mWEoFHj4AlnKTPtyuT6AGw#v6xMr~2^pz6U&0b2Bm+oO0 zWxl=L-h3=Urt@k(tE%sbNtfW>1mn`kJt#~*4+_Q)&|unqM$kY1CWaYg$LA%${NHET zf7I7hm}CfnzmA^urKpKAd0QuSjX5kjs;_qP-kb+&+h^itub_D^ADnit+qw*vEg!q@ zuvdd9V|^E?bGdpZxYMCwR>G$pp?DK&V4bf~*9gq014!mA6~NH+yaP|}+E<>7Lqc(` z(9bEz=owg2ecl*p3AG=Lz!9W*H(Sx8B#vWNEHF2b?F5_-)_fn-c5UT*CmTPsqZ|Xh zh+VBRy5&p)ht^4&-YC~sBH40heYD6jdjY7KSL8rP)a`v@|LlEyRrb31v2sMJa*XKf zfmzi1vo!ZBIs%SI#*wr_k8cNz@N!qLa4+Xtm$6~@%h5agG<`T+opqn@Y2Sl#KZ3Xn z6u!(uObe9OUkr>kYQWEfZ?;)AFKW7`V(vd#J>VOkO^Pu%-T_ko#oSg~>hG_P&ynFz z?5q?sZSdPAE?u5e=t4-Hd&Ld@_>S3EmFB)?mGcO)m!tEY%}@@G;Y2+EnCmbO-hnvm z?Ub&a#_iOQuZYXFTAucU%jIMi`jSc#Z&ZnUD5bF<6Vy#qSz^wp_PApAYA`Eipb?7R zUCidVP`>9dWz_xcD0V-utT(pj?c@*&~emwsn?nNdtkq2yfFT&7e<9M?X`a zO~Q>M>D=y6S>bP?`bGKpy9# zdgi;rUP9k(-kOt zdbqr9=x z7`u&AWheOWD*NvSg`^1Sx*EoAGTe}e($GiVNZG58{K~lc)7y?lWV6JWo_F8#dk%-& z$?)`;688xv3ZvIw>yXg~3L$>2@Qjo5tgFxw6=Ct337gnq^ud~Y<2Lb?&r*Rt#v5W# zS!=&O&&dq0b*ctdy%qe@eU@6n*dc%#mT2r+LbZQNsVB21#WP)8xdIzL7-TQ2H=2Ws z*w^2?eZL5La57*5})E-j+rm43vgGE00ov3IsEQ-amN6B^87lGpjH*V`vGyzqC$M})#dtf-EkQtVj9`N zQa09n)U9YudBPkyRZEUD9X=`VaY@45X>eRTKoHd^dx>eycw_~PvwrGQi& zoU$sfgY`+qbnm6|^$*Ii*Nf0cUAv$`8DNU`RgAASux-`oJs*K~v>(rdFV)a~MRab_ zmX(KZ?Hl*F_llS(299T)=jYAlZ`=;M#M!1h-)Z(PaUPDAiWX$HtH128+bQfZJGDsc zpC-fD4Mvoa!lABSC8(Vyc+14qLc6sX@Hxo|P~BKx?gWp8pb_BodBNf7J}%*7A3~Pc zi)-ABgf7Q=2FCIiI0ZnZ^o6RPftvEoGi=stTFV7fjc1xu?>b8a3}bb~Ihrj0!v$cX z>RCFV%ncZ?UK%4E7tVrNv>J?jPdhbkA%^uE%UaN~P3OqtrK}k7a81+m ziwJHw;(IOveIAvlfN0A#@!TNSi6Lf`>)^fe$<_pWZ{HGt4Z$v1Yv#;Qf~P@O%6GsA z1-Sm)tsV~ihx-bhI~RPjmJzn@k;Ystx-)(w)qK%8x2L!26h$w$P>v{99XJA&>s#=c zPb)un^JmqOJ$PC}RU%gPhVKQBTo>WAUAzD*=E6L($(+`4{b{v|_iD9(SuAJGkMRdB zOa|w5XWBvOw@N@NBNkB4?yymAz2(bZ-T~T(tEH><)B7Nm_|^iDOkriA`+rc!b7 z0&qRXE)BOBX>*0u*SwnTiu1X>bqV^Ihye+aF+J<3rb%xkgvi?Vi@cFp=?tD-dN-gw-By06?wM=}j&J|ISN_;y{ zswyU?zKQ_iO^R8`V`<8xHQY@n>VREcE(=PfraOd@E;Z2D|6q@HpRq$+G<{aD^-?o1 z{8DgZp-LMG+zd8snHvviyx<~~SZQlgCI;!u>s+qr82O6vPdZJ%!t=LGbqszUU$trn z9HU*kr3Uu-DBy!;x@-*XYxw@iOT-PHb^pLDFV}q`xG@!+utkt?#vVFhIS}A_)YG3! zNdyvTE@1y{I6t0A&GC8xm(anXzFkkEhNByI=wl>K%aTmb(B-pZ1{S7!W_z*FUQ*{i z9&eY8VWwP)M=dA&?B%CpA}i$eth>tA2e})e@O0~bkFBrgZw@nosY%6%^4qm+M++VS zpF}Btqg7dLm%5$gnVW3ZzvVg14C=pQ2I$&Qz$S*pXn|trMEIdMeE{g1r^jrgJ5tv- z?bdR;%^Lu0i#F)xIk&lL%z&hT0oQb^!|r#h9=FOlfRF(Mx$F}t|A}9;YJDiaw|gU} zAT`2KdGu=pSG|%_s$hXOw!<3@tN>No#BEtk4i;k zpmq17Afkz2X*ck8==l!hu95e09{^>6MAfgQW{pwi0sN6OqmqF6@7C>K>o{>JZQNUnSv=@xNMN_;@B zu@rRjr>Y(|0<2D|Q@4rhaADXuA|Dbvx2- zwjqAU7iH_-l_^Ibt7?9^e&d+`2iYJFotx&28+^9>Dx=wazS*6776F^9k_GwnY`b^e zlcObN=W4YvblvF80X3~7s<7H(SyZF7#`GniYu*hlzWaP3P~ZI_;qf@GQe^c8HddRm z{pN22){+)@E+-(tTkvw0RI+hHcXRPu2g9vKk16yW0z8&WYL`0`jeZmvLLqyr&k?O- zZvL)$BnZr*_dcs_ZcQ5&+RDD1?5ZRWTl+w z`31oq@>u+P<0A`f8*?^)2CtJLs=8ypQ&&pBrbx0ZtzY_v>hG2qKUM{-Cbm`2we-f8 zT*rgOkd8w3vZPv1#J0QHwToPoiUgtu!UHK&)P1b)jrj;{b$(2NUl3U@@0 z-$pDA+vv}eajw#FMmv=$laQ7?ugk>D+7HKB-B!z@@cc)xfpEf{;As^vV+qtyON+cr z^!(+)hQ={3r2rS^!jiLZ*|qj97`VPxZ1~9}4!x6f_Icj+egt>us18^NB2fYuL%7Da z+qY28WzGA;x~BCO`^WLS0~6)TOD7urk;#_yMBY0!8ZL;b>MnENz14BYF3&*o4^VC@ z5!+VRD09x!r=XdSQ#&%h31;C|$z4ZwQZOZy3ohnx7&>+r8O^?)!XsKHHCtD0j_0mS z{+PPTn0T3WYiVmll?xvC%8J)%<@*V+2~ZowmQdT8B-=5)PpjgcG9f-_85iW7*sG)# zNO@5oP&;~g%=79XDG7+-(9FOzU!^yfjZcLzj)!^5dP>n7|{3pA?M~`QmAwb258B zc?VX+Hq6(kFg&%Pmt zIM0;Ia@K-BA7O?1q8EJnrr5dbzXa$w>l=_$3BA!&N`E4h?zeL~0l$qSbLBVEdE!pH5rm@SU*50mp418Sof-<7RQZL?}7`-Frkf`e$e^t^qvyk#+UmC-K z5hG3IcSF%^0#effQcXV+rn}h7TGF9u-`dFV`yZo}ZZ&-xnJR26uuP?+G&EMKVp8@mT2tkTa$j!o+F3&S)f7t=yi;)UviEDz-$)|`FC&Q zH8-F?ZbtqL`hVDa&!{N3rCqc^5Cj#Gv;@g2k_9A3ML^~01TK&#J|cvQ7uHweGY+b|MY16NYScdrBo!LYAiOg|7C*u&#Kkg zc?YAWNtyoYW+(9fRw05%Ek#7H`3I8UfT-_nc?e)Me^)@5R^D&vCJugiFp#cs;w0uM zR}+xMfv}4QG_?hI5W*ATo(7o4HJ}7q`)^^;LME_%MLk_H2T$IE7kdXs>fNLZ2jhBQ z`!5IJpTd*-Kq#w+_MajCe0RX8l5f7SViaHkso6Hsk4b(U;0^NH{u1P!)$=GT+zIq&XXg2aeQGDtt$e?1Fio`8!b{dH9 z1yBS&r$@2gm7{5LF&xHDiX`BXC(mOa(2G%V->G$3r#wR)Qb15j{|B7?$G|H$%sxQ` zCizu2GgF8erGG39q^J8f`EX4-!G{L!)`8!>&^8$P`f?jMl>?wCc?sOcLjzGSJ}EqJ zJQ%h13?rDX6czK3!Ek8CA|-WmYWg!u#RF7xMJBO>0Cl zwa%Ly5S!K#J4;NToVrf%&=QiESYN2*w_VXP=L86;Tl z;Yf#2lIi>GtBRfN?!guG34DX{kY2poF7=?1$~50LFZ>FISG*v`?xBL1J^>I`dmrM~ z9m~b#b+q*tzm3kR)s%aBULK3>EG>BUIr9Va!3?*HH$-XZo(okVnG7;<>yT>d_f5<0 zxXsF;wS5@ZO%hk@Aq1Ml_IkQJ*_7aQozwD75OwmTS$eofpD5!eVN8&Lq)72O&_u5x zkq^A~SMExc$}viEOWVt)m;mg5A%_!rOtMav2*Pb%9thgvZ-6EWaJ}=n@D8RD7bEgt zOf~Xo*-tH2FG#>I_ndI+1sNlWoOy{+TxHY3XUf zC`?KzhrS;qkXBlcKu{~H8Dtu_NBeXf`=}cVujm;0dC~O~<4T)Yp8K2*$PDl%90o-1Gw>`5NLDmjB6(%jZ#1rJM1qmhPF`Z1iWwN zqSJAv@ys6k8`Qc!IR{+|2SixdWUS#nw9ngpD1s>kxf@Sc@}CYhF(0jifZg6QJiE6O z$*{++H_j7EFnu86ae_&?k3~xafdIxp&~()as+_YBPlP4^M9$JXt8<$4YIcfKw=`HB z!i*dI@|%f1N}0A=RQ2k7R1#q{qOwDcQvC^fL5I&WPf!PWcmCV7;8RE`roh^u}l5jDR!om@c52c~4$EcZENoS*l;VJ`1JdtM6qKh^ji^#c3`S z#oho-*8eCz7Mau`?CB>OZ|kJ!bj}8!DedES*s-N8}%s%_PZVpuCY7p!0wQ#fuE zXcBEC@Ef1aS?2lUQ1~~@60q6HA=$8Eng#Mr-!mL#*aKJ7ZbEV=uSDZB<0V70{Kief3+)q%1rt18|J-|hwgJlyM}< z@T3uz-6Y2WMn@UW@%s#{e5SV>ILlq<3`NV?0XOTacMwz3*!hf`rw)RN^5n1x7@;J>>F#+`f zZ`DEW|M8Y~a4DoZduB$LO6J7{rUd#pF>n)-O8S9463PMQ_09Eq7$yVULkCRh zWtA8Z!2;wAe7|fdIc*F=lSmZ2}mUo{C4Ku&r6totA=)gC>yANw>#~NjctI$!8qGoG`hLF zECi-#mI{XTw}UeNaRT5BS^(@}`Dp~C$Ni(pz#9sx>M+ef77eR*mOKFaX)FK?t9vyP zieabvyU+vaQnX}5f-frtzm1SVU?Ob%^LtaH!Eebwf?e`w=pbCp##GsbII(XxOar!#}fK#J^R54+Y0T}>QMXBHR?gKQa02Uf`o4*0muCZ1`Z|BH+ z@*q_TsAm8lgQP2$`A!BJS!p}LnZUeWq$+1a6^C+JKtLprL$~$`qDU7Q^1LgX{gs?| zAvWW)>8=<)Fje$Q`A3M`_a7g*T)Id8;`h<tY9sJr;(9uN@_e*TNc#pn$A-mJ2UIUAZmKm1au8*%y5(Zu8bmzCKI}$dWYqv^5 zeyk`^?uRoGdJI}>U3yq}&4N)PwG?+y3%PvwSnI;`hsybb3`agPrjj`0`>g`#hr9(+0rRPNhb$jpW zy-|C)CB-*E$tdefQqfD8Ob-~Y>|zMnPXMfUaWhsC8%!1epbaLq7|zj zru-FEeGg>DuX+7)^2hM$Dj(2RourgGMLAX3dv&VNb8nMhcVBl3oZZwr51dB6YSG)B zy!pg2`nf-<^ok#=@f}e-Oq25VC%@(=6MCC$wk?cR)LCoNwKJ(XOktQc&+oQ z+SuYXFprg+X#DBL?_?Gt2{&yLXE7#$sCPc~xQ;>N^q*iCf)!I$ZGEn}UmOCYGLP?d zwqC`>l_1?Xg46ulR$$nu%@>5_vXI0)Uz7rZ6KvP>3(@URFv325@GTy`Mq0jyLe8?0 zFd5(heRKGLLEtx*zG4^Ngeb&6WCl?@x>|rNU;Yvmz`};#3(xayI$5B?+A1$G$An<< zogVz&tKmH3Y-OKcCtf$%um^kHPa<9r)bBL~KlJt*Q-Sb92ADA%TR(|b!g4pjyGkU5 z^l^<_k%g^dfdRDq`@}9pi2UFW`?069Dx7&S$WJ1b8%OIdB>BP1$K8UcwJ7=}W}vyb z{1x6`{n$JDa~pe_oY574v_Fe5H3_Kj@ln5J4*yU8#^earh~&!$A?>|lIzW(a}&u=)Oah!ln1{e`n-g*0FWS~rl% zHhXAd)!S_nLx0?bAdV#As_Y_uO8_2wI#*{fth1j4F22fhh*ys@e;Ww;?xjl(=9~7p z&1RbVlxbHXv_@ zFS&?{SvS3ySVLH zE*!Tx^X2wCOxv37MK;*X&}j2SU5i)Z}?%n;o*z+hXr* z14Z*8zsz1vy9tCSa}?7Jy(-D=O9fW?FByJPyY7$M%=@kj50ifJlVJD1P7P@SDV&n= zWYm+ejmg)%#*wYt!Fd@z1|QcPw0Rd1~cDK=0h6Sfi)T){VTr|s3Fsac{6 z_VewdNPEBm3qh2bN5M?LtYhz9u(?dxqei?ULo5>`#ZEOKr_GW?Fk^K+YTNo_7Z9i5 zSV(s4)nHF(JSGC1Gv&+gDme74VUONZlT}T+yWV#E@kLX=GT$X*VO)iIf?2N6G|oLM z9hTl0$$*ADHxIF(3^lD~y^Rc@9xl%{)Gi)pgLUKN(y7^m;<&WnGV& zcAHw$Wcd`YU-o{T>xiOncO$LBkGmAfF;sf?L%iD)gq*F#(Hd+vwFh}=!uFeIM6FSX zsc_$9^X6dtnG%^F*^**mkx=nEQtWKm=>YPA@nWYhCSHsX8)=;wj9QoFajGOQPIce+VD+h7MIO>z_qJ?424t=mjV@pv&|r?a%%-+aY_j~9~o3Ehz$Ewi_>Hfg~v z@YbixbMR8gPMpRALT2&fy|SZ)1lwK9qN;;<`(N&+WV-G86#5EP~`C90wtkp&dSY^a0Yx+)I}{Iw<{#IaAUNs-h-n$ga{+9U#0e zE@sGX1eAI<>~0>G?gzr=&l+bUzLgB_@LpOpe6AeeNU(+kyvCAd?A>|q=k#`3NVnX( zzH#phn5T;xMR!JKw^0q3=dEi^ef_?^AV1IA{PFc=%j^fq>%oAp!}kuPbwm#5(rY~J zZ6q5#Tis|KkLc|!_-JzV9ec&J&#CK{PRn-Xnqu}3(KIq-w)k5CWx2vb!gY+6ww}|IQ^U}=OC(&l_rPLMv$?i6S1V#g(XvM+dw_ECRORsHfg;2 z<<%TyXS-jp!y8c38vXc(eAO5S5h(%?B?N>BhZfqumzQULb(_{hwfUC$?M(1MKZfw@ zGzqX1?wwOWviDUGdPWrjyFW=7aeZ@7_QM%NLt!bW>S8@Mc?{=WWHCRi%6cQz1F|}M zL=Q#jh!{5OW}`LSzTnCso`XQ5F9B~A&~n@{ZCy+ukvn(TuIJ_#-R;Oux}|&E<9wy?%n_S` zf?l7<`P1BZK~+23+IbiE3VVWQ{NqluOZ<~g?th(D6?{j1Wef|U5%v7Ru1V&WC&p2^ zVie!Vgl2&H=n0*p)9csku6Dz$JH_dqe%o2l-V9eL_UcRt?P^(4;YxnI-c@`eM-#8m z`*`ft3sH#8l56o_o1|%*$0%K+e!WY(n|j-~mz~WHL@Ax7Uk(Tpx`hePgadj7)({aa zsJNayJB3GJ;jBYM(|GF_Z)n9F9+sV)MIGSC{~6!()1YbB(4lI}!p0R97@&r#_hmKe z*0*f~%FKhy>%K1R$2)mSH>-E>u-gbkR_tY>%fW7 zJA0An`K{Hy7nh=qqiI}>=zS2lQ!O@2&}Zfoo`uQ_F~ANg=?SfylMm}*0iE(#wDWCI zv|er#?tR|BNu^m-wl9QKaGJX~&Q_~`#k0zyg7~W@d`!tXXi0Ya_-#epHj`R6a-moa zGb^ie$~Z{pu4}xn7iNC^g#APWmE{eP`oxrFc8;B07kOB0BfpNO&(ue_WRj_W;8oYY zTijo`DpWOPuYMaSisOf!fc4@*Goxm!9-FzG2#TaC2frAOE$0>rC!XvyBWXKeCUu2X z?R~;q{fx5!6n(U=I<-!8JLSr>B(n|V(gk_s8IYJ{cZqp?Mj9=))7-$Dg|85Dd80vJ zWN$0I-2HWSKjQ1@7RVLKejyK5u z!NifaPjESAf!M^fWWoQuXcB%Bgaj%&kW(WU7`68kJw+koy2*nPCK{i$6iwreXWJ9I zoOAHUw7%V+N?Izl`h2~ozl;dyLv?*dGiPh_Ian*$0lzPKvu5=3pt8*_d+8Gz z0ddq1#?ha3y!o7cf*0Sdyhnp(!!I3lA#QN=f*%7)BD5e0cih>!tGLp|>yzrOri1TI zva2^K{0;UArpt#n23d<}y4cH9bO3kSS(in-?=aa*e$M-FOtiSYuuPF!7#2!R<%)Fm zo$y*+-~KLFJQr1zs~N+gyR&a|IO*A^MV2jv?*Z2@3a%YS$}bkzFL=0$lo}qYbG78AWiMrgYs2X8~p@;In60$Ut9jGD# z-l0inV%K&75ZPG{vjw(aX@uVxwRb#TpmbD$K(-I(c#8wte5A+|uV1Y(Mn9JZKAqTi z?IS)zS-*crQ^OJnj++P1XL?S9PPtQd4wKYV`cN;{6pE#ASNu`yB&apPuTDAmeiz&Q z`bHZy3vBDf=O*anvC)MWgOaghe50VX6rF}B+jPc3<9XU~G=7O_q1aq&_Ti-S3UaON%$8-{X)=UwoMp;wb$!Hk zQ?!&hT^Qk>pHM0xSQwd@m!KTwsKp}?_nR=}U*J%e$PP&RKe$;5KK}EF!wWDTw)2hEdz;=|oTAPu zdY=goQZ|U|d*wdmQzrDwp086!xFOtUUA`(qCazz8MuE|NRYNmNtGVD4=gXhrySy6k z4;jo+@SmN|*33>Kpaf?oMKe4uPco=bq0+}9KH}(@4acSfa?}%((u1gAKT$m6-QSI0 zwF!5dg#tkC8fL6&6Ws0i_sn ziAa%6$nyE|7;ulDM*Wm8$qXFHRM%i{`q|Yds;MR88dWjemzO8r^ZKYu z4oG0#CzqiL=>(tmHz$BnoE*R2MhM%+Y3)*?#QU;fdNxtKyLnS8lfo6&bxAH=Z&rlM z_CHZvv@*Dt(Ne){v8PE_vc%5!n09|K`qr6RRCTfX!GDepv7)`Oe9QW5k6At+5RquZ zdwTfi01gPfs{w}O#RD9vfW^>pYiiDhQwwxyjQvzxcB?d1fwocj27s!6m0vvC?rNn7 zN+@m;s(sESx;?9K&gwGZd`PL9vWzWGPR@4^(s)uDWHe6}Q#{Z&BT1knesUD)wj2jT zC)bZRz^)-W-+fsCU|7k9mgNtr#T4DdscFQ3Q5(Qs6Uixnm7M@$#FN<`h2{4)OeNo; znaR|<;OpG$yop5aY}9Ppq6@O-Rfm*C-2*R~Q_nucJq)@yktxhA&osIMI-Y3XkP=4N&T$njgVTm}M_?yI>W+J+ZZ-QFk5Pm(cENG0%eBB`B1!_u_ z=$$*wI$Yh*Q^kn(u|raeOiS za8sW$Hi)x<0V=wi7&}&5oSkg%qT@9h#ZCz+jtr=zKoF0eGbW^YWFt3kIregSikxpD zW&2*J(+L0o?{zi-Y6D@Chm&!|UD`sw-t(L1EpTamty|-klgh(BFR_k`QVZj3IuYs> zm{)K&w%1)pqKg*{;Osjq%f4r`o0<1wblv3>-BxaubZu6Kr4xx~0J9sJXJlJ*R;0nP zDpzvPR;Y5E2KA#Q?2IQ=e4%~h<#=J>LMGy&PuTfv3Yz}f)<#v7vdJkD+ObjQ=+eYo z#o(svRU$Rpn^4S2ZDR&G1xELSuh_QAZO^%vCGhLx(M9U@f*|Gs3W7NL#MOR_l{L9I zmZh#*!P5(*2w{qFQw%^%BK0ns94cbcJ)&WnF2Bn%O4uvN$ft4WyIOa?{WfxTW!2_G zk58FmqWj9nOfL8Bd38f{70NA>STQ2ie7rA2qB|OE4M=}9Nd&~Mfm^iG>{w@^%ujS{ z$NkhK$a*%vxGB^qRNx_S&Fcnvp0nS0{>6xZHb&2)L*SwSZnO}0`E##3YSI_BplzL^ zj!5=wW6sP%y{w!OPy~MIaDq5VSbZJ_Kj|{BU3kcm8&Lz+ZP~~CY?5s?)c5@C ze6W1fTz3l8g~X<$WF>+UqoBo2xcH{;R?3Lg>beoS{OnhasWicOP~jJ>EygfWnkJ;> z3%zGv0QF00Dc6k9pcY9=5RG_G@=~FI&r$sa*^nFJYTvgf1fu=|Ywbpi=^evCVtjcQ z11<7ZQ^fpJ4whFZoEJ50*Lmf#GxOFNLj}c5K&3v|O}=cZ(lL||TR>qTPipNQOy}T* zBHHMKLn~Z7S7`g$rr}q-QnPdCvT17yXA_H>rg=d1%3zRec4o6}$Ua{us|NhsNyHjm zdVh_7oO{Y=aZ&^ay1LT)a5i}RG5OV|WO=HFnVl}Fy!x~K;^+_BMNL^w4YY)WR6MwQ z=Wh-|%lc>&737kJ8GQh~b0#20?<2Z;c39gg8P6j#^p))jAx@a!`H!QneSRqreliR& zj`=uhn!u~qG0f{TUx6_C{`Si6I3Nf~P%t~4m$2jhVh;A+2#DFqGVhr?UQFO8GC+2o zik)uCxYHuEyoUr9yOk|f$+EZhtH#&sFgi6!aq@1=6PVq_N+Cof|4SRw4vl;N-=e9<_0?30iefIN@KphvX z4AdZMTQxqbj}1WzU-%SDLnit+^}J`3T`?&IpapbWre-I;$P5zhgzq&rcO!xNL-gg2G#Ml0+^)%6h49BPQJ(Y3j+DvH};ADv=xq6W$1|RT>KG6%To3Uj2mq^)xxoKEx>dSVl$U zVjuP|=V2Yj%j>*$dHy@#%o8&ud6vQgmCe$}VBiV)apd9Q8L#B=y` zsI@g3ySw3VqCt(<-u@JA)*Vaf&OmgX-DO_2-}CxJVQ+3c6$vDpO2=;CuKhBo1qIQK zT~sE>t&Vzh$e1WA+LoIi$XwPOa^BWu7y22FUJ_j$PzUOL14ZlM1b{p3Vv@ZB+XG}@ zprrjPwRumN=wYjp96MQlVZGsj=!lSbH1a-s1lAWWU?dUBRd3h;!!arOU>amx#g` z!^8y}JHe$E>y2HZB?pxG3!B=rv>*|bQ^$l!!}TYFG|jqsdDc=s#EswvE!ExdymHRk zwLG_@64>r4TXJE|DX8cB{2keVw{bJSxYRIxV_+l_w>gB&Net7VFO~s(a1r^A{>RO_ ze3coe@icyQ7L?O-?0*FbeEa59QBYeI&9ZJ;$d5fe9O0^u(O@B$HYS1Q^AeoQyGRVdeqS zYVd?w1}y9zG{^LwMhvFw8E{ynB_KLnlFN_qRT@F6V+S@uf`JBtg&hJ|EBw8Eqkvk0 zW}@JhOa@{~oS4O+7evrXNIumFT&N(tQ0-}fQQ}@;y2ol-H~)Kf2hLc%L_Th_V>h2R zx(K}I(lQ;m{YKINT-~}o8csh@BNub(3fntFRfUA|KH_{A^4AcKx;-YkCJ1;u0i%`m za?3d_PmKNrLY}E?{#O9i78K#$N-9HAEr-eAG#i(gKf#nEMJJnq_qd4=_c+`b`c^H< zfrWhyu*n@%yu__?0A%p%#mLqXdMlBS(@at(+gP4yo{GNm=Dy5yS)X`c0=TRq7s7$} zoC>4JBni+d>d(p$5j1(%I4dqqCX9yq=9DDJzcx0M0Lyd ztiP6Vo1-2CCSxFNjG!U4#Hvk zf|3-HEk{Jl#h`SQfStS--;^T2Y?5L<97yQWnf@~n;t#qdm+|_(zj`c^C!`+5;tQt* zp@US^!Lo9Lxl}y`ME%DD5BxtbxmgQ1Pdk^hzk!ROd}M-e$Kf@Z3oS9=B*)4VPx2DF znZ)|MW5eGdmTJ{^pBw=1I$#O+A2qiu+;{%qPC&yl(;3avU$!3W@H$ti zUQ(bOijg{Je@+DXA26W5D+62xmEDzn!wtRN4518M=w-|KAC%3|?hgX77wN4DFMuaRjxRiIj!?ACb}J+LbNoM{|?&MZhs0b+a? z)s!@Db1QpZ@fC3E){1!MjcT(sK=TYFz5gA_u*I&&>fD25##4ldWPZTJkWMuRWQBQm zzGsj`8z5v@=q)Oc2I$$;!D({GwHu3M@drmuB}+nWKcSKVheNNbH zT394lcJ5FuK&(pD11hvZW&u>1dzw5YWbvgffu9xFd+j(v zgPU(dNg+hXJC;b>KPxY~{u%7D9+A}6%~37>#3F^_%gEXe?CJWG;%}3701-#A^eg)C zJ7qxJn)l9F_E%SG{`B2IrCuY<0m|Mk{tjg0K9+)e2GFw)G9_e=sOcfe4nHwc*5p~y zs=RCf+@KpjQz4>Mh`z}%bpO^BeB%{L4D>C3b3ikXkr~bb-tu|D zd6kG65J$U7aNiAsH@LTO-Z84?zkdxel795%{#98((fdbVA>)XKLkZ=UclAw&Jz>rOocndbM?V|)D zKVN>k6hKt=YEW|8&# zQY5YLte31p0htbwOXG_6-g*Fbv$1)J_;cZae<(*PHkgV;!gW9KqrUg{bM{OyG~p~% zcqe=(`6+q}mcIsjlB|C+;?H|l=rj66{<48%ZSnLq{Iz)X+_B*6+F(f^OyKzvc?204~z|awLAxi_`dSHE8yI+u)P6pX8Q9TA81f>Xa;> ztqIc~$gbD@xT$S;#r&pxfY}o(`if1(=BCAYN7HTNB1Mr(vrg^{k=ZllczLt#s59<)63X5{35Zq zp;*`$Z&e5P!*8YB18uxU4zkU#+}du_3W5HXLxrkIy~!xh`6(pa)!5Wj&R90;#;0!~ zIcA?8w{4K>p@$293#QFPufulj-;NH!evO`X*rPylzxQEDPeIeS2-gT685fptaat+Z zkN#FU^`#Wwb9(aEu&~>*xYRpTb=q#|#zqo1iTxmnPYg=f{;gaf_^04*`>!Q3^iqV) zOwgpPaaV@>`cq*!UNxmF)U7{6n2>$}PIDtyIwMAtP28##O*}oFZ{z*`gbB3dg=fMT zXuArCOnZ~l7diD_{Ca&|rNE4sMRmp~i0Ri30A>%R+tU>JTBpy$2F$_g#d?Zk<>rwT1ihCr%JbP1@S$8^nYAFp zb-3qPKfMF9gD=yJAOiB#ax)e~xzM}msS;RpB+ceAVa!J!@vjnQ9Ry@-5=Cb}kcUyM z@mIr=A4IuqoU0!6#q)i8wdT#INBHuqR)fjT&7<1xV&N}{g^?oR$&b~hW}+9kLCj_y z4zej?qU%$n(f!JIbA7u)MVE@lT{~(Vg&mfsn4k4UsRW68lFN(jURrM7j&#}`wswyf zsc{@YI9mpyEEH&cV!5VrFHvx2>Uti+R@H^LU$skMiRsD0XI#V1C70G{7tL4R4ye>g z^9G4c)V$nv(V`)TQgG@=zP7(7EX=~Jm%6k*5zraU@zR;*GRBMl=`u+`y9KNFN`;W_ zswy8iAHj9qN7q({vNmS$)PFa8s^>(DCG<3JYkzKj-L&-SwxLu;xXW>;v&YU}t`MKi z4?2redC>~dPH%$su`+S6mw2*kl`E>e6m#9jZSn+qUr%v%y9}>NDYPgVr-%CR21x3s_}dkc1Q}D z_&aDkU!<(p4p&VWjmcW*FI@D_c_snDwww84gRF>YgC=rN97$xbC3Cso2KPrTT8wFh zW=xiN($=`Ub(l%JT-}PxmF7ODz%?*wW}pdjkG_ii^)Ab1R&lzcc&*odtxiFToO+&e zzEDH3_cOWZ_XD*d+Qz=iN_Wk^5%CO>?C|KMKO#Inbs+Ve5~&&DT7OiyqFN#EemcGR zzTABrO22}a+tXa1wQ!$B{zPdwd+W0KjZ?P|GWpV;>I36`0k(^jkMxXK4s zn)6&@n3tFrXag&&Dy0HQw=->DqNu_x?u=~infEGkmCh&|f>S{p;^ye-RM0zzPV z$`=aPw9if^s4IIYwj9b=dLpqX1*cll5_qwyJySN9CsHUn9-ZFOx|bGS;r!88co%Q~ zoMXedW;wD=si(NHyqZtw&z)jGFAKW6zjw7O`jZE^y>;FztEiA3_r^WaEPKUQ!$^~| zGB2OqN)(Sg+>}>+QvTQP)*e$7pby7K#wLdzp?E=rKD6>qPF(RA%o!(1$orjuQmp0p zPL&$uz>Z3ab+{n&&HJzcBoXb$r(I#M9@<;NOe~(19LJ-s-~Q4f69(UWY|wizjY06F z+G1W-h0a&cQGIkFzPRq-oaMBSgwT`r<5=-sac1d4>L%Xfs=$jRB@2kQELMXtibFAd zKToG@L0xs|gGmq*S&}Tll7+s{Bbl(2G>RFi+(f}rcwRW}Hjb1Ww%yOjYzFo{f{rhi z@A5B|*Z!q%+;;=8o7|=#lK9JACZ zg}J7of6C!-1oNWcK1#FJlm9XPwDFINODcCl-G&JA*Q!L;C`yS}?effhXbv{Sp8$bm zu|%=F$S0R?m3t+}d~ZR}xU?*j<8?;@o59Pku_P?YmbUs;iB?ut&$G~LqYZHl8c&;B>3@j(IRq{yPYQL=rq^7g`06S4N4yY>=Cvf> z*|Q@NpK6mD-4gh{Ga?c|Ka?ND>NvWg=aaW-WS6^fcz0E4rNpwdt2Wy=B3gsu@SAmb zjt-LWBR#%#o*GIKDu;jI7!C|nND+<19zTC0L&_hy*)c2gqG62p`3axR=p&lsDGL_8 z$VUVH1dblq4+z7s2xHop6FEj?J_K}2^pRp!E54~!X|OP6zF+E#8fG^$0DW|oK?BR~ zw%j*mdxV-xGExMBvE9GS)>iftx*9d%_uAt-#{?yHQEmC~?%qsU(rm7lCZ-rH$)BVx zV*$dI&S_W;v%OtsfspP)Z@nk^JMKLphnC3(5%Q;0#k^2^5u3rQ%nlZ)m>cYkI%a_)~V^|yU$T!l+c6+8GeoYZyJOk}%V`Q|~fy^nh_m+q90 z9J@bGYod_eC(gC&*50b*mI-_XoKlsHFonRJkxO~uHBO(z$v8Cp3a&H*({A2T`k+P(dARq{ zXhtfc^HCX5A;^Es8BjhPl$RDN)9w#*T#gJ2%HtvZ#s%uOxRv7Z$_;G{aSZg{Y}SRq ztLEs=MW^np3_9E?9gcr^s`Vi`CD3gAJ?Yo`Psl8)KALF?Yilp(;Wu}ROcmEwG)8>t zNIW?Dk&B#vK|`!bUHR~ZyiqqXf{nY(e$J69+k|08DCmQL7v z`c8-gEM7!7IGJx-hNKfKtw(h-cEj>N#rH>*V?W6DpgGmGb-n@xxBfh{WUd}6IM2MH z4eR6rYsN`0;(Pb4M(Yu7dQpSUa$AqKO1a%5t(!}%tvcBUy-rLsG$nqO0tU&?7xTLX zU3T~>AGnoUx!52BPimaX?n8Fv`s-UWX{Vop$Ovyj)o6#+p>04e`aYpXRx~4TM1pb`!mI`#JBw*MiqoEYi+QQ zQP9=A@BL@c)-bcSboQQnwzcqKC-+rt1V`kenwZAZ;_>PzD-Vz081wv^FZj*3<+~M2 z7o44H)U1tQ*SQBPGwx%R^!r{5w7A31)!O`;D1RvYCG?kfhj6lcEtY1bw+@ZFZLF@8w(E3H?E`+M??%#a79RO_-?H0!H4WK>U%<&{f zK%b}41-)5VSf`Ts!rC%qrblBtlGZ@_mtfCUj4DgK!WTrbo^th#{Sl3=`JeSVs2FS5 zyQsaF(q|qGYuWNxJ>RvRoUXdc5fWZ0kA19ht7^~s8N@_f>S%7ZKlNCpo!&PBzgave zzKS+TrBf^6-V=p|4E%~QE-^KnrvQV@+O7;#6Tj)sZa=UBUGGJ#3ZDx$7@f&#HJMY% zCv(Y!^4gBQSd%$5$0MRvW-R9~)U=4e9*Z}l^^JPFza@9oh9=o!%p!E{Yyj4k(de+& z72|Lk=l0Q0*(X~erg!d+?_?vZl>NqB`On+Wtb0h4qXANiZ&}WY8_Hxwn4Q0-qtAdv z{j^)=&?8^EeOT(3>Ar-q3z`3CS+v8OFGsz)wZ`Ki-3+ucLp$Egymn_k1Q7@nhb2TikE#H_8JOjmLnEK{Km+q< zkYQ=Igg!z|8tL8BOU8%E?3V5N6Jbi)hzUe}&!_2nnKArnNJ^YarPCEhM3u$+;_)ZR zQ$7}=`cN)W=?uHdzE?5R&QX-#bn*o>@Yjc*|1wvB3>UTZ$-rpNmdExJe&nVK8vhN! z{P`?X{XWaUbK!z+VWXS0>4L-SysbgKHsFh&bT(U0s>WY*-96onug}+?1;?S*R9Jf) zhp^d;YiN}}=DV)BqC#WZ)6oJ`eU$jGyXroF~iM}Bh4 zIOw?rUz2&`l)&a{#&X$^(-eq5&>wQO1n& zilt>`cZ&+GI?8kN_}{YAH@f_GegB9(GVY;`)H*r9l8Mv5{l;2wNLOb{gmTC@_8A_# z`-6zYCnHZ&O-@y+Z#fx$e3V$-mKCeRGSZJLEe1ZnySmn*yS+9RqRkyr_U1$M1aK-t zQr4KgtD_5)kgCERzTXUm+>Y*(aj3k=+8!ckPF#sqrfK>Rl1Xk|H_#&UNoh~7@kl1f z(j1{03O+zg9iew=`E|~tZbQeU_@P(UdX~h^w~adovb1JvbaiG1?U>#}bSj;m5!_gg zU?1)0B6+Lf^VVUZ9cro0mURiZG1H%H2BVZ8JIY!+26^4STVrw)`+gr>8d9uJ_I$L= zm^URNrxKwfu2o^ukT_nh=uNpW786^>JNxvP0lk6nTpyDqiT2K_xZ6W&@nb6ckm-J@ z^Jtw{Danv}>qQz$e)D&G;|lXBSJ#_Se_7fE%*JFS;D zEH#?0*Mv}}QS%87llWC2_*6a&vM2C!#dU?yr!(~f_u_eSkQ;RA?+qgV)^72i|Me$* zj@ElU|A*eIeY47Mo!-H-kRx{H>74FSVW|Y-5yr^$c32wC8ur*%_d2V^j-((p9K7(5 zkPs^-X^6?EPq?Z@L7j>*dNekr94oBE&rqmQ$A_;nghky?R6-=?N$hc0WYS7Y{Kndr zwcW2}2Q=w7GYHwQxC$;TiY9gXYPID-x}mb`I${eC+Y_%J%OBjsie0pna}b`BEfL#w`Ag?%?~aJO28wy2E`o zwURG)rh8@{k2d3OsE%qdZVOuT7d)lUWL4z#bLU3PB=Ood)?P0@n~^FY4T$PJ-WAE! ziBl@=V9?D@K9etcAHYZciOkVz_`^G*70!e)(tdytXo5pO(!*RPhuRnW>3mtj`)apf zj=}iNY}l1#pE}txN&$5B5yu^v2`6)Se#`VxEIV+x^S0u3u)m6w92taytK@iIj#n5_ zt-u*M^5V~EWTX_;WBj>0)#GCBmNmS}DQ8vBlW@#Z`20Qp6TU$v`NKYbrSZ7KHRun~ zd8bhIl_?MHKM7>`*M#iK)?Br(Cl!WK;9>Ky}>Lk*YSqBM%?1vU#K< z6My(xzU!OTHG{hh@n^_8kX@dR*CmQ@f@TMAV$oj3ZrSqU((5v(p;Uqz-UAZLReOb7 zd!)pxL-{^0JEXF(Q)UEXpdU@OExSK3_S6OKExS}!j?v$K^Ut34KmRR}N00Wp)gD3k z+OGW0W~8EX2pq{c*Gla?&KC5Y&ie>ID?VW+Cr@LPfw6qIcumf;bjrXN&7s?PZ;-x; z0gt}jxUve7)PZnYJ)kD$LP_Xo({x7hytffDm~5SDp(Ff;u$@Q)C`%>Hjq6s(2@Qv2 za>S~HeyxMNv{c!ajY?v0wX43gkmD29Y(i6i9$pO)26Ng!xzH-3RTwDaiX_No2o(yY~c(Ej^ zRPTNfX?RdP5&A$@_o0E_1y_+6=TRp9pwx}b98xNRr;0eA8BU*)Jt3ANZhfs=;ws@m zu}powo3#IS)QVd;!TQyqAY%SrT-@`THyz#e*>huMuAB59D{gb!_C&D`yY7nN+-Nt) z9z7B^T0KY-T!6Fbmb!%ss$D0=!nq*<`NKcc?ZhM1?p>eCcy84*wFZ&~x)at6l0qzx z^8K&lg5TpagoiZo;QPHfy<~6;!x&&(Lkc>`b(5G%h`U`C2Ko+NcCvFR2w?1KRyXYdzA&jvU{-Zbj8nES&)AE zigc$EKHW4~J2UbcPVqNLM;n3=1{rJt5Ns$NlQ+{1NS#8G z3}zW|gD%Jdv6i)$o4?4f#5Us*1uW+z#e8!k#u5H(>^Er5gtlF--`Ixb)~x3yuD70*`UQN_s!QY5tb@ zdzH4x=pYC4FYjS~jX613Sm~#b+ua{C(K|>V3)?`S#)JWrXz9XDu)vhw{^u3{GX&)i z?n^7yY#Knkj>CK?UcHs5;m+hStdN-#3L;}B-Sr`cz@EdXz|r?_!4_nOaOjpE{kpVx z3-dmUyCXq3ZP5RpZSy~4+x-9dD`K~?w!TO@+#hNDN{WsDqeOyZ@=)i%_BO55S{)Q} zyN-JE2`2q2K?klsw7YSa1hF<+$FI9PDtT`UG^#0H1Km3h5-zUa7P&9fb9$vx25mF8 znG9YdbrzZcp+WBPRDA^EG=@`OOql)r`n^igdyvqc5LbGPTK0wt+Lox);x<$6Y)mzb zpSv1doPW?}!VYc!{sd=6i%u&6DRSkCQmOqB#`^n$Okni-Z;mZ1qP?I*bl|=pn;(Mz;{v4-%^Au5t1!?vhU1b zM2vkmm|>8;F?KT;%X>}t{d=D7`+fT7{rmkdeYmdkJdfi#*6;T?c^-zDlUD&!!!j9` z#QWEm-M)34;)l-K&<04ZNxzy3u$zECKl@pkNMoPuY>R5|91;9ru2}{bx(Ly}Ajt$zlCpBM0v2QXsDR?qde5e1AAY z#Gmwe#fa|n8tK~LM#5{rH9xqpgQ_@=vuHilYXuKN$2UUC^nqtisiesb{@)Q8MItJS zl+%yTI~!oQgTTI#mRTtdzHQMNpFIb=0gJ!KtxRjJJ_WGz!~FagJsL4)0rAThsTn~F zZT=W`iN6`uJN&djh}8V(IcT}b*l^o&urNRJNFV-8uyvo_vRnJqtThz}qsL5+rW^ZI zOb)_Bw@m$%254E~3Flu!wsUQlC<`sRNz;fSl)D`zgRk7}_$bI|r%usmX(JQh*6=de zksp@6!tG??ThQ&pL%olpdUA(upXHVQrh4zZDbM6GodS(w_jD0{xJqb(wQxhzTUr|I z1@$WdcOqFvOPzBG@?T88zpfItJ{iMt&jbPlTd{u&wzxNsOC2HRketw{j=G4l?CXq_ zASUe>=ta3SB@K3K#)DJNpT~xwno~Bb2FluDQLcJt%vXnTE^8Yhp`9?T~+U^uYNeq z@P`H^Ui(5C-ICc=5zL$5sz)oDyWv(Ld}uRuLc^llORp&D6ZJ7+bGSDSTE+I8v+ZU_ z;oC1fxhM~~^NU8O$cUHAcOy~blZ0W_>ZqVR-0fqy=xuN}spjRb$U2t%0-d0@Dt&>7 zg>mt8^MWF?VtgPPRBNpfY!9_ogq|0C@`?B@5TD~Z1qL=^U)2&sQ)Zil;=`|}b(`;9 zr=A*ZL+-AeT*}YO+_ho%}=4?GD^atHg)8=t`Jp zmA`TATAlNS(7Ir)>lvrWEJr&~NFn@=wo zw+lbDYD@DMkpyqLkGiIK>^lw+QxS7rgIb|A@F5R4)AD$&dMcNsPQxBi*87Z%Vbu0F zOoD2-EZa$iU>y$5k~nAlq)(d5uZ)Y^9JO>pByn&nw$n?5( zjOw`dxwR9G@UL`!6K1q9#g|r$AQZ9Rr+)F|(&+XpkdNASta;bk-3DR(2B)}jzme%L zxAKooEht5n3M4%j()}nX7PU1&s^~I+L0H{?5lgOQmrv$VfEc{KMH#sGY0CD}G}6Ngp|59}i_*axKvwp@7JJ}1aF^Oq zj1C7}sbDCNO{NI)oK?}*`m1D~8+5l>3wZ()LdI0aC{@!SrwgxGlSSocs}&E!;D_nQ zI1@H|q=hB?C-x$ow8)~wc@OK1g;1iX#LGo-r-G&QYn2vLCFgIMp_9MDppI6&Hp6u` zF}r!&L*OF|hgSC+D1ukKTG_qLd&QMG@3|6ZKMVP=`pN?rY+5YRiH+$UZ~XA)Q!wCq z%-;v-M1DTR*iFWfmUaUSyq}9qT8wKH9v>!$2Ci6?p#~pG>nX{Dxm9Tj&FMV(>umix zPb5xOSYI9Rt$BfC?1Y(A_zo;7H!188(vp-x%Y6G>PdPx)Q_Iv-9dX+JJPSzKu7{w& zWziC!mM}h%0K+vr=gjub=>RkGY|}9l!%qBDW9C9>&cZWnH!(wx(wIJ{3{$Ns(hX&$slwVScu>z_WLhEUfK2QZ9<=O8g7uaUKK=G(pH#*)P_sMD zj6B{LAE8LGv%z#8Y$3^x5LeGKEv==o1y$^wpV1x`0Nh9C%2GmqOpliLlW%4GovQx6jeF$Zi zevoJ0?u5tw()V=QXSm67Kr`?#lPq7f4WJnhu+?iz#~Y`4J{ae+gOV6)ez+mMM6FU8 zLCW#wLe!^@UwC&Jgh%+ciqcnXTsL?Jx-GS@LRB)^{xQ=GFfgF4YJ5*x0wDG!5ifk{dk8nX3rBptk3m|A5{#gM6>OMZ}+dNDA zQ@n2a(-TjBNt06wWiZnYTfytEtF7L6b%#|sU*-eXlvgfKAV!P?vU0Xps|d2QpOYM_ z^Bb09=w_Gv7zD<;>PU(omASY~a^;7sa|>_m)!T%Qw^pd22fpbsGJ?QWy%TAnPmSWH z#Tx94BmJiJq_<}oCkifdu}MPBV53mdptwL(9N>dPaGBt2Hry}f&Bc*d3G-Gc`jM?7T5LQ2J_viLW)PkknzEy@RU_Q zHxFFm!cBLf{2dE_}ylh4^8c{Km+lEbJF<_A3@Am99$tEXCPVM&ET3-K+7`r^i+HTPfnP?h z+?P?Le_FC}d2q7+rk(V}P|YTD3UaMnEK4mr%uSA=u;rjXH?1=laAh3Ws*iIyopafp z@ttpTI?W3$4himx9ZkK+k1%Fmu^FYaajSm&dJ5v;a~*N={9_TvCVB*N_zx3|{h_Eg zLV9Iy3|=|VJHOT)j9i_Yh_dc=Umh0(k7I^#ef{zMm~SJiM@;nXu$sBE`m#o_%iSrG zseHc_d6^7O?Z%vF5gW>o(HIsIO`985-#eADi>ptp0rTLi_G*sXb zgn5~C3r|Xd@NZ?l<91>3XnAvEFUi^7dMEI-$0k1?pLE?WokDyF`D#_NW}akmaDyhK zs`|=oT&3s-6c-`Y+)%K-&w*FJf?&tOcJ%Xx^!kpiDlUTr604uL^p1tM6ROohy!H8( zHarfK2D2Zhzg7j5vjb{qJlT-jv#qOM>_EDj2;A)(laC)GRl+8&zg$%-61L;muxwHf z1s|HN``C;>U?n33-LALp=2*PAH)=ISe>Rxj=U$KGi1_qFgfDs}O$|O@^4%D%=tz+gFC{PZ;`|34TG&ANH)F7RVQdu)Ov>s}Ba)dL^a(4gqTvlk z?Kq@YkI!mIf+J&YTez73rk$%^R(K5NzOzv+VJiylu9vjm&KHSk?qoa`jKT3&P=6>A ztG2nw^sgvll4TVSL=ko58B#K6RBK^Pj(Vz@S?)e4P~#josOR|X8Qg=Vn3h3%IvmJj zDz<(uFg3Iir*xK$+v>BZK~v|k`aMka3xs=~9ko8;v#=ZpopjMmKqJ0?M&K=SqM^um z^~9jB6QZwfy;vjegV~_~re2qf?#`~4UUIf*6OU@Y?QAyX&A4IPIV)GY*`_YWbvBo! zCrzYTIU?friINl55dFi!UPi=AXS_>Pl;U2rfgWC)bn929TRl1-<}YiE_>$+{EcqnC zRovywMGm@$;rJCj!`JVrzS*HH?2VZ`VF!fPx*3U9a`r+Utmp>)=Ke`5@9=rF& zf?Tu#Opi!%_^cIO%6mdUmY)#35v-pyy2PM3I;NwoS=HyyI38il;Y^BHVvKnPe^2CG zb>Zm9A!mky;VccLV4zx!mDR6sT58edCth=Lj}0EknKP_viPPa3b|#Y+>OPx$lA0#& z6zNo!)!ib}fX7IVBSjP1kY49kfU=LxApmz<;eC#?3(arpFUbcX#*6DE|NjVD6C zcy*mvG9BC$J||zge?kdsmEy;@95i|8xo{rjEt#Rnzz)I#w|MTU&`m9V=>n2N|G+iS ziv+hq)``rc%aL8R6`)9h^ZJR#SX4x`g4WsS$s+?E8RE0FR0cl1yc6Gahi$BLx4mnU z7H_}!Ky3mml%o$Tt}Tma2hu>CmsP_)5oJs~z%k0OfS}QJu2?rV6Wh))v;1ctmErD{ zhC)zKf!SjbDYH4-ezxn+HQaCThA8m%DxVI(j+3J4BVBj##d#tN$*#eyGiI?I$QLNm zz|STA-qPTe>MAJ1Rj9uc6^UrsGX;PRY5d z?QShdrYF98T`F{H1VMfnfbe{Q_B*_HGEF5m_aZp3`MbEHT*(b)5R zM7PL}wRT~JpSW2K`}t?qIHqw2b!jNoxd^dGE6#87Q`%+c3Ov5VuX$$i_G|Zj@ZmBq z!-N>vz}sTSR@EwYzbVWbuLst>B6KU-qzCnjX+252g( zc@l8gA@Ahr7H?w>w(pCpsrma%Tk@D!{PB~GYrc-fW@D>cxRcdlcR5c71YJuUx9G*y zhmbuY*EnHo`Q?V70`Oq|vm*9s4vl+25h8=`x_-krS_rs~$fay50dyOV{U9Nb2?0St z`n-D@>S%x+YJdg?~>HL=qHnTEhr<9H_>p*37(BICO&e1{pQ-r{KU;?x{tEad4M9@XzV&imrR& zUGLcx1nQb>elX=YWkd#IYq7lPrjXQM*r&FJULOp@t1dUJSLI|xL8RRq8KW?2sWMNS z2Sxe64tqidctL1xI5Y}Zm3z(5YA0GjP;bfm_4UlodQ&(sg166kZ)gRfqm9Nh=^D(T zdEU~6yNxZiD)NKe?#WTQlZnD>Gh)d0wtmK0?5dwimFYo|U&lBq-;>DNK2MWa()&!| zvV_Z<#gdbdifNRvS#a*?!RF^myuH@>y;Lf#t$1}&x$$=oa&1l>Ipf-Wh{=lu{@{lI_jff z%B;O0P00u9DZGP&9kc^#zfaerDA2yQ)sh|*a!(*yFanQn%^gS*mg!N6{z>nRpYSMj zS;gFZPE`V4Bw+Fi$K5s~+{(p`(s++`w-;A|JXX7xsu0!E&XYhkqRQ@{Z2e#|eb z>8h`Ya$fM|_Dz!+e;RGXHQSydaPd+CQ0yw0Ea`X4md3u{fz8)*6Bi(0zx050bjxE5uk z9vt;V1H}IF=V?mJaFrU-y{g_>Me2+}CSbjFig;pH-k()=`?)@>U1==C>{G0uHFkw< zD?*02zh;$2`+R?0KQZ!Zff+5dUrjr~z{9AlB_YX(3WgLez3@ru<5%sxm)|BcBd!n3 zfcppr*U2e3@)YrE8!ylW%H}Pgv*sv&MZmafcfCKaU3zc#VwA~xO!oY&V=+6_R^{UL z$J{M*dVuLKGXk^*uNYLZa#!hOBQV%0vto6ic_jz^4V`o{D2?mtpk+^0uj}V{AeCl| zZ5EAgN)y*o9DYAdc8OtbOshY#EOW0-63$I=DyuVhpnj78ge-_O^i9NTW`YwOC_rY4 zDtsTWU^TTBxAlb13u~7>SpV7yXT4m7dkJqsXB5(IDTRVB65a03bTuI~@H=19qx(ev9SqLdJ;q`SHx{v-gt756d=Qm%`=JrL?9F!XiSY2QXsMvC$C9{> zgD9j*6i~(R9b94({uoOYr6>eZ1#9nm^)qaI%?rp!{R}(t9gbA*rr#N{M2ZNcJk~Vg zll0L(=ZelG)r*~vBS@@X7Ro(i? z!3=qY?OSQ;{XB1D?K%wUhHDRPmxc*zHL>t>RIe@w8BvlnJ)T#vT!%9AB`42?2*F#v z^K7@wchub!GbVb&D`Fw%ZAahr-(4;L87%>L?i0}?)i=?YVyy6jrr#we9M!ffSx4WJt4*+^; zAWvHfnnA?l#k^}eGYZ^*H0YNWHv!wb2(&!Z2$mk5X#0VmMM?u3EBsE+Q%+Q!@WC@{ zW_u1Q5xIG28bvFHqMwO%9jLtp2weIoICEn^{Dm7;N#vD{QQlCqyPhL>>c^{>8driN zs$MFflB0LyoO`A9dn6|$l!eoLh}kaq;ocqxtJcf4;%`fpT)rn5rCtM4s?t?fOWQ&G z-cvRZa+MXU9<*?Lkb3vCS16HDGXac|kBI-L#F92Swj)JeBq_sA9S~73ZTh9wEfeT= z4{*(Le-vTM!W#_>WjfNr6T+%dysM>45eD>ZP(7l%t*1Fh|@N_O!V%(()d>ipKwOL6$A6Wgq06_Id7d-R3^x83Llenqm)DD z9q(gZfVwfIZ1|J@^McsUXvH}kD{+`5n#WhjKN+0Uw3>D5PZvM*X8kpkV=<(o zTk7>|yWdQUAs#5bOgbnRUm zRZc_ux7T`K3M$BZtbH-?8P;@@t}h<@ruQ;iWR-0J7%w5Ww*!(@^%rxg2^?xr_J_Va zpx;^v_vY;M%Oxq)_@3SXkUS5TPC==bsZA!fH*L|;?ToEzz%9?2oTsT?J-ckl%`L8} zTUe}-bcNCi1DKzkthqXhJkL%AM7@i;qAB~KpQ>bK{9XTyMN`&NRb@W9!EHw0hGgnx zb{7aXUO-8jKm}D^I^6Ahy~BahSfzJ0yW!q7@7V7&jkwY`gcFD48NizrH8iE}crGk$ zQVd%0Xt91Z&|nyQToog2I+%35KP*z(saZtR&fONnG&Zgm>yt3Tc2#$Bs10|cKk1Tf z4qnS1R5xiy>X4x)cvUbt`aQ)Pp_*yA%1Py7$kG{~r9-6R!gK8Kqn%RgPsQNiu#2MR zii$A0DQR*3jwe^u-yq-qN8qAP1)hzlvNc>IzBdPFA$Pn!xcIG|_gUY-DjOR+Ii@W_gt2&(7FHhqId zwrY0&x(7-gPP>DtPGhB7145=bwCn}s(RPzRIg(?(NwKuk()~D)`>uA=ag;B)Jk{^j zM;GafRZBcFfT5&BW+Q{EgCU??E6{$|)O1y+czxgvQl)CULzoA2Pt#*bT6((1tR9iL zTwATwfX-M2QVDtKGscf$t=7=#V&nm?XCrbX4g-3jJN15B>2V-6%^aD_KYmT84aZDd z_!<0x*UnLZ?_+|3U7hihsM+ z3fE2?r8X#2Jz>LQgRV#)$MTdWsgqK{^L1vzk-wlY8YA%J>UyA&uf?>L@z@&4KQoQ4 z^4Es9*7Z~wCG%Kj!m@28OQu`l=Uw}z9%`!zYQp?-G% zvlaHabvPEK$zrT{u#x0Ta8NRTKxa}fsJ%+GteS_r(aW!e;;NpPp|1@Q+zB`oPzm&P zN3kwFiNd>SX+EHTzbanIt|bY!p`Go8Ay9|?1*EYBrC|8CehUc$x2y4>QMMuY_5<5e z*;k8n>FZAHX|Zoi>hcEXKxAw(>l|@tOz_ z#m{3MqFp%{l@(!LWI;Ap*WHad`pVP+C+xarRcw@S-G#8YxUhjKCGGYhNQ<%1MmJW+!&JFkkdSvexm;6?X#n8#Y}9 zSdZQQrQC9cVkYh%udDC30sr9WeoR%Yk#hd>F%Qgpu=yfgsNwo#{~ELGBushSV}r%m zqezbUYGZox-l}B13d{9ZHLrVt8Tle~n#GqON@snQ9?3O)_H9@UNy{=^SRw8@4uAVx zIwPyT9UI9~56&a4G)UC@TK9(;K+@IKudjyAfge}LrII=D3X6VO*#O*RP?qP|l+1{+ znJuSIf>kPqkU+|-y1JWYYB86iR{FGQ111x}#;tX7cm4Kub+HpxOWN79-!PR~_V{>9 z6GE7Sq#RGQ{c)U+ck273+hd%){n_e?bnU5Sw%rg>UgJ zw;w7UZ-nEPio2x*Tr;=wL@ukWP9Vf8jAa~$oR3kv_ZCg);CHyweD)sxq&*_% ztJgbMv`FP(ty2LhwEya||JF0?tB zn|jD;6U7Q~sd;0=XsqU>cypiLOG{nYl19*r;Zca9b4!G0aj_(bcvgQ(h^^M5o}4{c zvAsHaJ}CCtt*|-yyaW0n`&^PAs*C~7Wg`e=!dsD}Adj|2t65@B_iWO`N!9#$ch%ky zP8GKYepG9-HpOba%H%Q9MM3S+6Aj2iVhBfOmcbZMRQMR05d|2T@J3_x!}t(R)qSx4 z(37iks*H!WrwSfI&&gYeE^ncVzwREHZmoTW`0*lAWvsa7m(Q4t?;90~uu+|!>D6IKlqRfLZ2Ol1 zi-Pd4OO4%Fm-xxU9repNi0;bjD_9vRLR`edm|eF2(dtBI{@43i8DQ@dXE;ou0|+)n zcyj8Ll*6m?3R^VaMU|skkG%0=p;Ckl1f)D*e))e&_IKP^`k3!WB^G_DkK^C|)GL+l z092SCu!p#J?Wo?u?B`mn6triIfNcc59u+Oj-wgwU&~r$mtsrZyJDu^xXX*`m4=S5> zV|~5etSG;+%vm$v37_eDtRt@dLden0161%d$jb}Sf3~cYo2sNL3n)uP*=wm_yb^!6 zsG_B*i$9l+r?E-%Kci|#Jh#{LHb&^Q2U~24X7+BA3d}~blNrVg@?V=q4SX|H7PM=PVBgp9uig4dXGiMA zqhZngGp$KS{GTo}3$$&iGCpWFrKKLbdq?cDtQ$e}Z8vhML7q#)t#pS#QtSx0(wq$$ z7OD!*E0D1SbR|X$NyxDRCHr|Zd1`tMl#P!^@3`Z2@=W03gC(QI-oc;iq}##*B})tIqbdfM;1QOKH&w5sr2u7 znY`2Nwjs`G1t04bS!Z$P*H=|nCmSgs8_!=7)Kk{CRCBo~A^Wdc8*vSFT!SThjMFVr z1gq*HDuNkg?9w7x*6QLdYu7iZO=`u*vX}Z@k+5-#@*%e9=4?L)kXBW$F}nZ_Jn%h0 z73g^}+4aI(j;1kj`n%Ns#!`R&iyMD@g)r0|NhJp(4ryRRZvbBCn9%1FBoQ1r8vwFUq{WNy<9E&2DRQqifDrhDlhaPE2^F;?(%s;(OZ3G zIDyHel~*taj}TVg^;@j+w`|-~aC07!AnGNtJD}vloWy!1>ZvYfEAM~%@c)9%p3|HH zBE%2JPBN&`i+{Xl8CN7v?qD(Y6~2E`jvwfyC|TOa6E0CfKqtvo=U4zZnr6~0243Bv z2t;<%_fNLdj~LlUiE4x7Ru5PCwe7>x` zgS`Yu8(HB14j6vJa!Kt}K>5eCh(C%Xf2{2eGaUuXKxyMrDl*q`vB}k*Ks7PV)8Kfc z*R|CKQo}ely?i$V{9vT;B|(s%-;eNH){C2hZmY}i&_l0jYC((EH(7wn%v0ze zkw&Z`C&cFY4M*@IbQuG3)2`WGwnDi=J>~-mBYR-YIC&xVNdU;i&h)7*B1AFw-9vQ8TxlRE^pUTHh3q2f;()>IDclPMcfpU>H zmc>BIP~I}e`M385P|&Dk_j9^bYmpqXv+$%}od61Qt`x`6`9_z&9q9jm00#85CtC3l z2@Nh|PI^ocU-bMI*VMT~fKCq2pyUKwd7%9+~zu=w;2=sWWQ^1oS>SgQlb zf5=k*|CT>+JloHdGLKKzt0{4{XV$@Z3oiNKDt#?JnA$GX5< z^Uoi6jsp#vYg!EK*Ljtr=s4o4X-XckTg-2RJK6QK%QTWCjMNf@m>|UNYTSoNLwGxo zp|-uxW6ZXl>qz&My9<1K0K2NkW9B`Mn(CDjUAf;MC6PbBJy4(u08ak!EJiE56XXF* z)pr`SkC>~TJStJX$O*##P$tV?IZBckj$8!*3wlmIm9}M5GjGehx-Sbp=0?_SY*^2--^PSjHxrk1>aJy}!Wm8RTJj9M)~1*i=ym%o}kBQ+3AfmK=h zR&Fz}-@X_~@>7j)skm zx0ZN&0vHz445{|ZJi{(!@JRBAK>~`o)?U};a~G7Hh+!=U?w5S;Xi@mrB^?4wI#h62 zInM+_q^R|xtHVt0Xbu{`Ljr^6R_P(Juje-5;?i(oIUgV2 z=m;Kc_tEGeHOBvN?7FAs4LQfHwZ6KpDnJ5u>synYRIm1u%9Q>pfsX*g>Z#Pg)iPgz zofVjUu8osAC^#Zo3%S$5*)?XBDmsC1k%;4}8e4M@IvrR!j{PZGJKq5zdg|<70rk*s zZ%yz6Z}2LU`s*7^C;;?i06#BXdXd`k%B#h`E37y7EE17ZW(Xvpw%-bj5RVLYunn$s zdA_?>^}MbhZ`A8Z6J-O6i!4eye_&Al(=bG<0d~Q}1@oCkDv{)hIdA1RHq zy2i1(#z`W;^$;IIG<5p_+uM5H@yzi?xobIX3mEuwX`27Hfd?S*zd4Q}TL0$H zai;*Jgu&Cd=ydOclHcyw{YRYe$1%2jrwCcW2N1|33bKBQ5BM4%MeEgErk=X~!-^6j z{HO5#_2Zqh6t*65nh|u;`K2I0D**26nR0pE)iewktSbshe>+;I5@0ta3~2zRgpmTc zmjMi1E~7bfQ84H>-TK(y7zWWnzv+ZK02?4l%0A}U$+IeRYH@tJMF!ui0D*Hy&(NIZ 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

    G@S5Bu{Cb^#bCmwL+!>@H@@PmZ zyDKUvPN0m(U|hvbDGZ1e);IS1`Iya(MI8Dv5ntTeKM@fQgOzQYp?l!85L!K$P9vYN z+F44_h?X#YoppC2`GH6hWkYFCqv>R0m|a68y{|)BA2~Vq6!jw)yWD7}@1scYZW%~N z4FP7Vc)@EOk${nZU^`6;fE$1Q{DvoqH}1%O;!^*K2XlKy&k}lZE@G2AX*6Twag!RL z2fR^rYM=*G0cc9zQK#gcnRc_`ATr~N{OElKmkQ8&&aVotlG^O0p{yramU`| zFe8t#*a}%zqKhdO>FBHISqfYE)|6xNHbG6cJBBspwv@;2wFFscomz_6t0xw%8Y3)0 zz^1YtcC_#*Sn17lS7Q-Oa;(tLUf%a#-K^Fd+bV$ktm>~K4~g;r;AXp&AoebkMo95Y z|4$d2LEAeJX_|Xo$+8^EcZhjgfx7jjpQaem<{F^NYnNHhJ~)+b91W2fupNn6cDB3m z((%RYF+nkQ>AK<&?l-brj$qbBmQfzu+qMnNovC7L+aQ+_$azi0K}2tl8R#X>dU(M= z`0h--U98HQXyZdiW2b9NyX!q!r-Cyo3W2MJBo5M<-L~fFBccr*R@u15dYV+&KI0r$ zEJtQ#AhzOm9Q)IH?A(H1oE1x|re^(GiG_*EJ1SpCH!0C3>^@6Cby1)_Q)>{~Q30*41R#qA}&!?-$3r(H&T}*`L*;kB>*P6KnurfGADqAZmazRPq7uCAnc6I30@`NyUM*5HsQA*|l%-?UXB@<ajbwgA9=))WN52f#orMU`A5SKWG z9EEHn4(}|cfYa?1g=>G#TExqPvo)BxBu(5a6oNcu?YoSs6tBB|yvRN{V!{7}bu4_j zMvfm;Aa6ht%8*!cdP7oo8eYzc$rX@2+)^7c;j{b#(fTCa#wvMNw{gK9zowKC6kjz+ z;*C>auS2*Hn}|(`xaBDyE5I@hCxycqg_v2WqVlY}@4u%M4PUloumRV`!Zb+)lfmkiS z=_fa*V=rsc%|{Z}BZUM$mfE25X)-A|hc&f-=SNpz!X4(Ly*4h==-my_x3%8OvAQr| zY!}AW7t5Dv!<_aUF?!Ho_`cd-%27YGN!q;I!|o zqeD)YVqUDc&DbMjD49kWyXYy$W9nCip2R&n z)5dk)*ZP~sdLcThjjIBQDkhds0@c}A&tRSk$I7>>^BX+X77ETFTb&J@$+*?UL>}fN zefD%4!Jlef&&gT*5qF_lk$u{YQ)>8nsgWlQV?ztw$k2l3;`!rteAC#UiZpp zVmmgiVLQ(FZbM_>Smvrw<%21IjqjNUc7<^D8pBLA^HA1KPBLmuRuzv zi#k1%lj!U`HBj z-Mi06bh_m_IwvNwUkZLTvJ<&i4%vxFUqlx&G4od~`Tqt>jS@TQVpjMlzGm&Zr9b|p zZ}fXR&S{2^#=n0&<4pMC3BSlHfniXk?J5#XvuaR>?|y4^3tCKhJowY|wq?cAf)E>M zm|BxyhOW33^gW#Jcoo9L<7rBB-FtU~$L(1YjD!(Ru!EjbkQXMd_35jNZ*4Z2+%|Y% z8EjWSRl(KX6f`<4-XmXx-B70VlzTu=Nr)8M*a|PM@jf$$W09l90Z#=)%@Xb#?%}i$ z0H5GM>=d{thne^ss3FAA-WhBSdkA}3l4oCs?jpi9aeJws1IgRh;YouVj^W_R(pUIN z!Hwr%A0B3l$_neJSoCWLd>Y)fW;;sm1SVIC%>!YNTjD^9G z9o4iV`*DsDbV{w_nbXHbbBiUMy2V*LaA5o^T*Upxk;NLXjd{KFEg5UUWlA^8(2aO4 zM-bam-eI~osGA~ovW~mc@NNC1P;M@qI7`R>R$VF*zt4*F0UPPb*G)X`K425BHApKk zsy}fvzr3g4YoPrb9i>SyZM^KUxxAQ(uF_BzkW}-p6LBK~CNiLez8wyJtU);ER9mmy¥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 literal 0 HcmV?d00001 diff --git a/docs/version-14/en/assets/settings_print_section.png b/docs/version-14/en/assets/settings_print_section.png new file mode 100644 index 0000000000000000000000000000000000000000..59884c4c26ae581b030b0f369aae7128064e9e23 GIT binary patch literal 78523 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∨iEGRxsnN2R$?)59n4R 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 Date: Wed, 11 Jun 2025 15:22:48 +0530 Subject: [PATCH 2/8] fix: update example voucher format to include background image only in preview --- .../check_run_settings.json | 642 +++++++++--------- .../example_voucher/example_voucher.json | 62 +- check_run/tests/setup.py | 27 +- 3 files changed, 368 insertions(+), 363 deletions(-) diff --git a/check_run/check_run/doctype/check_run_settings/check_run_settings.json b/check_run/check_run/doctype/check_run_settings/check_run_settings.json index f410813a..d3ad428d 100644 --- a/check_run/check_run/doctype/check_run_settings/check_run_settings.json +++ b/check_run/check_run/doctype/check_run_settings/check_run_settings.json @@ -1,323 +1,323 @@ { - "actions": [], - "autoname": "format:ACC-CRS-{bank_account}-{pay_to_account}", - "creation": "2022-08-22 14:43:43.533105", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "company", - "bank_account", - "column_break_3", - "pay_to_account", - "section_break_4", - "include_purchase_invoices", - "include_journal_entries", - "include_expense_claims", - "pre_check_overdue_items", - "allow_cancellation", - "cascade_cancellation", - "validate_unique_check_number", - "column_break_9", - "number_of_invoices_per_voucher", - "split_by_address", - "automatically_release_on_hold_invoices", - "file_preview_threshold", - "allow_stand_alone_debit_notes", - "print_settings_section", - "print_preview", - "print_format", - "secondary_print_format", - "column_break_ctnqm", - "printable_mop_in_check_run", - "check_formats_with_background_image", - "background_image", - "default_modes_of_payment_section_section", - "purchase_invoice", - "journal_entry", - "column_break_21", - "expense_claim", - "ach_settings_section", - "ach_file_extension", - "ach_service_class_code", - "ach_standard_class_code", - "ach_description", - "column_break_27", - "immediate_origin", - "company_discretionary_data", - "custom_post_processing_hook" - ], - "fields": [ - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company" - }, - { - "fieldname": "bank_account", - "fieldtype": "Link", - "label": "Bank Account", - "options": "Bank Account" - }, - { - "fieldname": "section_break_4", - "fieldtype": "Section Break" - }, - { - "default": "1", - "fieldname": "include_purchase_invoices", - "fieldtype": "Check", - "label": "Include Purchase Invoices" - }, - { - "default": "1", - "fieldname": "include_journal_entries", - "fieldtype": "Check", - "label": "Include Journal Entries " - }, - { - "default": "1", - "fieldname": "include_expense_claims", - "fieldtype": "Check", - "label": "Include Expense Claims" - }, - { - "default": "0", - "description": "Payment Entries will be unlinked when Check Run is cancelled", - "fieldname": "allow_cancellation", - "fieldtype": "Check", - "label": "Allow Cancellation" - }, - { - "fieldname": "column_break_9", - "fieldtype": "Column Break" - }, - { - "default": "ach", - "description": "Common file extensions are 'ach', 'txt' and 'dat'. Your bank may require one of these.", - "fieldname": "ach_file_extension", - "fieldtype": "Data", - "label": "ACH File Extension" - }, - { - "default": "0", - "description": "Pre-Check all payables that have a due date greater than the Check Run's posting date", - "fieldname": "pre_check_overdue_items", - "fieldtype": "Check", - "label": "Pre-Check Overdue Items" - }, - { - "default": "0", - "description": "When a Check Run is cancelled, all Payment Entries linked to it will also be cancelled. This is not recommended.", - "fieldname": "cascade_cancellation", - "fieldtype": "Check", - "label": "Cascade Cancellation" - }, - { - "description": "Defaults to 5 if no value is provided", - "fieldname": "number_of_invoices_per_voucher", - "fieldtype": "Int", - "label": "Number of Invoices per Voucher", - "non_negative": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "pay_to_account", - "fieldtype": "Link", - "label": "Payable Account", - "options": "Account" - }, - { - "fieldname": "ach_service_class_code", - "fieldtype": "Select", - "label": "ACH Service Class Code", - "options": "200\n220\n225" - }, - { - "description": "PPD is only supported Entry format at this time", - "fieldname": "ach_standard_class_code", - "fieldtype": "Select", - "label": "ACH Standard Class Code", - "options": "PPD" - }, - { - "fieldname": "ach_description", - "fieldtype": "Data", - "label": "ACH Description", - "length": 10 - }, - { - "fieldname": "print_format", - "fieldtype": "Link", - "label": "Print Format", - "options": "Print Format" - }, - { - "default": "0", - "fieldname": "split_by_address", - "fieldtype": "Check", - "label": "Split Invoices by Address" - }, - { - "fieldname": "ach_settings_section", - "fieldtype": "Section Break", - "label": "ACH Settings" - }, - { - "fieldname": "column_break_21", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "automatically_release_on_hold_invoices", - "fieldtype": "Check", - "label": "Automatically Release On Hold Invoices" - }, - { - "fieldname": "immediate_origin", - "fieldtype": "Data", - "label": "Immediate Origin" - }, - { - "fieldname": "company_discretionary_data", - "fieldtype": "Data", - "label": "Company Discretionary Data", - "length": 20 - }, - { - "fieldname": "custom_post_processing_hook", - "fieldtype": "Data", - "label": "Custom Post Processing Hook", - "read_only": 1 - }, - { - "fieldname": "default_modes_of_payment_section_section", - "fieldtype": "Section Break", - "label": "Default Modes of Payment Section" - }, - { - "fieldname": "purchase_invoice", - "fieldtype": "Link", - "label": "Purchase Invoice", - "options": "Mode of Payment" - }, - { - "fieldname": "journal_entry", - "fieldtype": "Link", - "label": "Journal Entry", - "options": "Mode of Payment" - }, - { - "fieldname": "expense_claim", - "fieldtype": "Link", - "label": "Expense Claim", - "options": "Mode of Payment" - }, - { - "fieldname": "column_break_27", - "fieldtype": "Column Break" - }, - { - "default": "1000", - "description": "File preview is enabled up to this number of transactions", - "fieldname": "file_preview_threshold", - "fieldtype": "Int", - "label": "File Preview Threshold" - }, - { - "default": "0", - "fieldname": "validate_unique_check_number", - "fieldtype": "Check", - "label": "Validate Unique Check Number" - }, - { - "default": "No", - "fieldname": "allow_stand_alone_debit_notes", - "fieldtype": "Select", - "label": "Allow stand-alone debit notes?", - "options": "Yes\nNo" - }, - { - "fieldname": "secondary_print_format", - "fieldtype": "Link", - "label": "Secondary Print Format", - "options": "Print Format" - }, - { - "default": "0", - "fieldname": "check_formats_with_background_image", - "fieldtype": "Check", - "label": "Check formats with background image" - }, - { - "depends_on": "eval:doc.check_formats_with_background_image", - "fieldname": "background_image", - "fieldtype": "Attach", - "label": "Background Image" - }, - { - "default": "Automatically Render PDF After Submit", - "fieldname": "print_preview", - "fieldtype": "Select", - "label": "Print Preview", - "options": "Automatically Render PDF After Submit\nPrint from Print Preview" - }, - { - "fieldname": "print_settings_section", - "fieldtype": "Section Break", - "label": "Print Settings" - }, - { - "fieldname": "column_break_ctnqm", - "fieldtype": "Column Break" - }, - { - "fieldname": "printable_mop_in_check_run", - "fieldtype": "Table MultiSelect", - "label": "Printable Modes of Payment in Check Run", - "options": "Check Run Printable MOP" - } - ], - "links": [], - "modified": "2024-07-31 13:23:01.397590", - "modified_by": "Administrator", - "module": "Check Run", - "name": "Check Run Settings", - "naming_rule": "Expression", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts Manager", - "share": 1, - "write": 1 - } - ], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "track_changes": 1 + "actions": [], + "autoname": "format:ACC-CRS-{bank_account}-{pay_to_account}", + "creation": "2022-08-22 14:43:43.533105", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "company", + "bank_account", + "column_break_3", + "pay_to_account", + "section_break_4", + "include_purchase_invoices", + "include_journal_entries", + "include_expense_claims", + "pre_check_overdue_items", + "allow_cancellation", + "cascade_cancellation", + "validate_unique_check_number", + "set_payment_entry_posting_date", + "column_break_9", + "number_of_invoices_per_voucher", + "split_by_address", + "automatically_release_on_hold_invoices", + "file_preview_threshold", + "allow_stand_alone_debit_notes", + "print_settings_section", + "print_preview", + "print_format", + "secondary_print_format", + "column_break_ctnqm", + "printable_mop_in_check_run", + "background_image", + "default_modes_of_payment_section_section", + "purchase_invoice", + "journal_entry", + "column_break_21", + "expense_claim", + "ach_settings_section", + "ach_file_extension", + "ach_service_class_code", + "ach_standard_class_code", + "ach_description", + "column_break_27", + "immediate_origin", + "company_discretionary_data", + "custom_post_processing_hook" + ], + "fields": [ + { + "fieldname": "company", + "fieldtype": "Link", + "label": "Company", + "options": "Company" + }, + { + "fieldname": "bank_account", + "fieldtype": "Link", + "label": "Bank Account", + "options": "Bank Account" + }, + { + "fieldname": "section_break_4", + "fieldtype": "Section Break" + }, + { + "default": "1", + "fieldname": "include_purchase_invoices", + "fieldtype": "Check", + "label": "Include Purchase Invoices" + }, + { + "default": "1", + "fieldname": "include_journal_entries", + "fieldtype": "Check", + "label": "Include Journal Entries " + }, + { + "default": "1", + "fieldname": "include_expense_claims", + "fieldtype": "Check", + "label": "Include Expense Claims" + }, + { + "default": "0", + "description": "Payment Entries will be unlinked when Check Run is cancelled", + "fieldname": "allow_cancellation", + "fieldtype": "Check", + "label": "Allow Cancellation" + }, + { + "fieldname": "column_break_9", + "fieldtype": "Column Break" + }, + { + "default": "ach", + "description": "Common file extensions are 'ach', 'txt' and 'dat'. Your bank may require one of these.", + "fieldname": "ach_file_extension", + "fieldtype": "Data", + "label": "ACH File Extension" + }, + { + "default": "0", + "description": "Pre-Check all payables that have a due date greater than the Check Run's posting date", + "fieldname": "pre_check_overdue_items", + "fieldtype": "Check", + "label": "Pre-Check Overdue Items" + }, + { + "default": "0", + "description": "When a Check Run is cancelled, all Payment Entries linked to it will also be cancelled. This is not recommended.", + "fieldname": "cascade_cancellation", + "fieldtype": "Check", + "label": "Cascade Cancellation" + }, + { + "description": "Defaults to 5 if no value is provided", + "fieldname": "number_of_invoices_per_voucher", + "fieldtype": "Int", + "label": "Number of Invoices per Voucher", + "non_negative": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fieldname": "pay_to_account", + "fieldtype": "Link", + "label": "Payable Account", + "options": "Account" + }, + { + "fieldname": "ach_service_class_code", + "fieldtype": "Select", + "label": "ACH Service Class Code", + "options": "200\n220\n225" + }, + { + "description": "PPD is only supported Entry format at this time", + "fieldname": "ach_standard_class_code", + "fieldtype": "Select", + "label": "ACH Standard Class Code", + "options": "PPD" + }, + { + "fieldname": "ach_description", + "fieldtype": "Data", + "label": "ACH Description", + "length": 10 + }, + { + "fieldname": "print_format", + "fieldtype": "Link", + "label": "Print Format", + "options": "Print Format" + }, + { + "default": "0", + "fieldname": "split_by_address", + "fieldtype": "Check", + "label": "Split Invoices by Address" + }, + { + "fieldname": "ach_settings_section", + "fieldtype": "Section Break", + "label": "ACH Settings" + }, + { + "fieldname": "column_break_21", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "automatically_release_on_hold_invoices", + "fieldtype": "Check", + "label": "Automatically Release On Hold Invoices" + }, + { + "fieldname": "immediate_origin", + "fieldtype": "Data", + "label": "Immediate Origin" + }, + { + "fieldname": "company_discretionary_data", + "fieldtype": "Data", + "label": "Company Discretionary Data", + "length": 20 + }, + { + "fieldname": "custom_post_processing_hook", + "fieldtype": "Data", + "label": "Custom Post Processing Hook", + "read_only": 1 + }, + { + "fieldname": "default_modes_of_payment_section_section", + "fieldtype": "Section Break", + "label": "Default Modes of Payment Section" + }, + { + "fieldname": "purchase_invoice", + "fieldtype": "Link", + "label": "Purchase Invoice", + "options": "Mode of Payment" + }, + { + "fieldname": "journal_entry", + "fieldtype": "Link", + "label": "Journal Entry", + "options": "Mode of Payment" + }, + { + "fieldname": "expense_claim", + "fieldtype": "Link", + "label": "Expense Claim", + "options": "Mode of Payment" + }, + { + "fieldname": "column_break_27", + "fieldtype": "Column Break" + }, + { + "default": "1000", + "description": "File preview is enabled up to this number of transactions", + "fieldname": "file_preview_threshold", + "fieldtype": "Int", + "label": "File Preview Threshold" + }, + { + "default": "0", + "fieldname": "validate_unique_check_number", + "fieldtype": "Check", + "label": "Validate Unique Check Number" + }, + { + "fieldname": "secondary_print_format", + "fieldtype": "Link", + "label": "Secondary Print Format", + "options": "Print Format" + }, + { + "fieldname": "background_image", + "fieldtype": "Attach", + "label": "Background Image" + }, + { + "default": "Automatically Render PDF After Submit", + "fieldname": "print_preview", + "fieldtype": "Select", + "label": "Print Preview", + "options": "Automatically Render PDF After Submit\nPrint from Print Preview" + }, + { + "fieldname": "print_settings_section", + "fieldtype": "Section Break", + "label": "Print Settings" + }, + { + "fieldname": "column_break_ctnqm", + "fieldtype": "Column Break" + }, + { + "fieldname": "printable_mop_in_check_run", + "fieldtype": "Table MultiSelect", + "label": "Printable Modes of Payment in Check Run", + "options": "Check Run Printable MOP" + }, + { + "default": "No", + "fieldname": "allow_stand_alone_debit_notes", + "fieldtype": "Select", + "label": "Allow stand-alone debit notes?", + "options": "Yes\nNo" + }, + { + "default": "Use Today's Date", + "fieldname": "set_payment_entry_posting_date", + "fieldtype": "Select", + "label": "Set Payment Entry Posting Date", + "options": "Use Today's Date\nUse Check Run's Posting Date" + } + ], + "links": [], + "modified": "2025-06-11 05:33:02.366589", + "modified_by": "Administrator", + "module": "Check Run", + "name": "Check Run Settings", + "naming_rule": "Expression", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "share": 1, + "write": 1 + } + ], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "track_changes": 1 } diff --git a/check_run/check_run/print_format/example_voucher/example_voucher.json b/check_run/check_run/print_format/example_voucher/example_voucher.json index 36de619e..32694ac7 100644 --- a/check_run/check_run/print_format/example_voucher/example_voucher.json +++ b/check_run/check_run/print_format/example_voucher/example_voucher.json @@ -1,32 +1,32 @@ { - "absolute_value": 0, - "align_labels_right": 0, - "creation": "2022-08-30 12:27:45.736571", - "css": "@font-face {\n font-family: 'EntezareZohoor2';\n src: url('fonts/EntezareZohoor2.eot'), url('fonts/EntezareZohoor2.ttf') format('truetype'), url('fonts/EntezareZohoor2.svg') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n\n.print-format {\n\tpadding: 0px;\n}\n@media screen {\n\t.print-format {\n\t\tpadding: 0in;\n\t}\n}\n#payer_check_window_block {\n top: 0.7cm; \n left: 0.7cm;\n height: 2.2cm;\n width: 8.8cm;\n position: absolute;\n \n}\n\n#payer_name_block{\n top: 0.1cm; \n left: 1cm;\n position: absolute;\n}\n\n#payee_address_window_block {\n top:4.9cm;\n left: 1.9cm;\n position: absolute; \n width: 8.8cm; \n height:2.2cm;\n}\n\n#address_block{\n top: 0.2cm; \n left: 0.2cm;\n position: relative;\n}\n\n\n\n#memo_block {\n top:7.1cm;\n left: 2cm;\n position: absolute; \n width: 6cm;\n}\n\n\n#check_section_1 {\n font-size: 15px;\n width:20.0cm;\n height:8.9cm;\n}\n\n#check_section_2 {\n height:8.9cm;\n}\n\n#check_section_3 {\n height:8.9cm;\n}\n\n\n#payer_name_block {\ntext-align: center; \n\n}\n\n#payer_name_block {\nwidth:4cm;\ntext-align: center; \nposition: absolute;\n}\n\n#bank_info_block {\nfont-size: 10px;\nwidth:2.5cm;\nheight:1.8cm;\ntext-align: center; \nposition: absolute;\n}\n\n\n#payment_in_words_block {\n font-size: 13px;\n}\n\n#memo_block {\nfont-size: 10px;\n}\n\n#signature_block {\ncolor: blue;\nfont-family: cursive;\n\n}\n#payment_amount_block{\n top:3.3cm;\n left: 17.6cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n\n}\n\n.payment_reference_block {\npadding-left:1cm; \npadding-right:1cm; \n}\n\n.payment_name_cell {\ntext-align: right; \n}\n\n#payment_amount_number_block {\n top:3.3cm;\n left: 16cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n}\n\n\n.right_stamp {\n top:2.8cm;\n left: 16.6cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.sig_stamp {\n top:6.3cm;\n left: 13.8cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.big_stamp {\n top:2.8cm;\n left: 6.1cm;\n width: 7cm;\n\theight: 3cm;\n\tfont-size: 80px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n\n.stamp {\n\tmargin: 0px;\n\toverflow: hidden;\n display: flex;\n justify-content: space-around;\n align-items: center;\n vertical-align: middle;\n text-align: center;\n\n flex-direction: row;\n color: #555;\n\tfont-weight: 700;\n\tborder: 0.25rem solid #555;\n\tdisplay: inline-block;\n\t\n\ttext-transform: uppercase;\n\tborder-radius: 1rem;\n\tfont-family: 'Courier';\n\t-webkit-mask-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/8399/grunge.png');\n -webkit-mask-size: 944px 604px;\n mix-blend-mode: multiply;\n}\n\n\n.is-nope {\n color: #ff5858;\n border: 0.5rem double #D23;\n \t-webkit-mask-position: 2rem 3rem;\n \t\n \n}\n\n.is-draft {\n\tcolor: #ff5858;\n\tborder: 1rem double #ff5858;\n font-size: 6rem;\n font-family: \"Open sans\", Helvetica, Arial, sans-serif;\n border-radius: 0;\n padding: 0.5rem;\n} ", - "custom_format": 1, - "default_print_language": "en", - "disabled": 0, - "doc_type": "Payment Entry", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "font_size": 0, - "html": "{% set checkrun = frappe.get_doc(\"Check Run\", doc.check_run) %}\n{% set checkrunsetting = frappe.db.get_list(\"Check Run Settings\", {\"bank_account\": checkrun.bank_account,\n\"pay_to_account\": checkrun.pay_to_account , \"company\": checkrun.company}) %}\n{% set crs_doc = frappe.get_doc(\"Check Run Settings\", checkrunsetting[0]) %}\n{% set printable_mop = frappe.db.get_list(\"Check Run Printable MOP\", {\"parent\": crs_doc.name}, \"mode_of_payment\",\npluck=\"mode_of_payment\") %}\n{% set pdf_page_size = frappe.db.get_value(\"Print Settings\", \"Print Settings\", \"pdf_page_size\") %}\n\n{% if doc.mode_of_payment in printable_mop %}\n\n\t.back_image {\n\t\tbackground-image: url({{crs_doc.background_image or ''}});\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 876px 364px;\n\t\tmargin-top: 0px !important;\n\t\tmargin-bottom: 0px !important;\n\t}\n\n\n

    \n\t
    \n\t\t
    \n\t\t\t{% if doc.docstatus == 0 %}\n\t\t\tVOID DRAFT\n\t\t\tVOID DRAFT\n\t\t\t{% elif doc.docstatus == 2 or overwrite_void %}\n\t\t\tVOID\n\t\t\tVOID\n\t\t\tVOID\n\t\t\t{% endif %}\n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ doc.company }}\n\t\t\t\t\n\t\t\t
    \n\t\t\t\n\t\t\t\t{{ doc.get_formatted('posting_date') }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{{ doc.party_name }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t{{ doc.party_name }}
    \n\t\t\t\t\t{% set address = get_default_address(doc.party_type, doc.party) %}\n\t\t\t\t\t{% if address %}\n\t\t\t\t\t{{ frappe.get_doc('Address', address).get_display() }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\t\t\t\t{% set money_number = doc.get_formatted('paid_amount')[1:].strip() %}\n\n\t\t\t\t{% if money_number|length < 18 %} {% set money_number=( money_number + '***************************'\n\t\t\t\t\t)[:18] %} {% endif %} {{ money_number }} \n\n\t\t\t\t\t\n\t\t\t\t\t\t{% set money_in_words = frappe.utils.money_in_words(doc.paid_amount)[:-5] %}\n\t\t\t\t\t\t{% if money_in_words|length < 90 %} {% set money_in_words=(money_in_words\n\t\t\t\t\t\t\t+ '************************************************************************' )[:100] %} {%\n\t\t\t\t\t\t\tendif %} {{ money_in_words }} \n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ doc.check_memo or '' }} {% if test_lines %} MEMO {% endif %}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSIGNATURE\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tCHECK#\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tACCOUNT NUMBER {{ doc.account_no or '' }}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tROUTING_NUMBER\n\t\t\t\t\t\t\t\n\t\t
    \n\t
    \n\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{% if crs_doc.secondary_print_format or (not crs_doc.secondary_print_format and doc.references|length > 6) %}\n\t\t\t\t\n\t\t\t\t
    {{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
    \n\t\t\t\t
    \n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\t{{ reference.reference_name }}\n\t\t\t\t\t{{ \", \" if not loop.last else \"\" }}\n\t\t\t\t{% endfor %}\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t Date \n\t\t\t\t\t Reference \n\t\t\t\t\t Amount \n\t\t\t\t\t Payment \n\t\t\t\t\n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\n\t\t\t\t\t{% if reference.reference_doctype == 'Purchase Invoice' %}\n\t\t\t\t\t{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Sales Invoice' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Expense Claim' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Journal Entry' %}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'),\n\t\t\t\t\t\t2, 'USD')}}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.fmt_money(reference.get_formatted('allocated_amount'), 2, 'USD')}}\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t
    \n\t
    \n
    \n
    \n{% endif %}", - "idx": 0, - "line_breaks": 0, - "margin_bottom": 0.0, - "margin_left": 0.0, - "margin_right": 0.0, - "margin_top": 0.0, - "modified": "2024-10-11 11:49:39.890146", - "modified_by": "Administrator", - "module": "Check Run", - "name": "Example Voucher", - "owner": "Administrator", - "print_format_builder": 0, - "print_format_builder_beta": 0, - "print_format_type": "Jinja", - "raw_printing": 0, - "show_section_headings": 0, - "standard": "Yes" -} + "absolute_value": 0, + "align_labels_right": 0, + "creation": "2022-08-30 12:27:45.736571", + "css": "@font-face {\n font-family: 'EntezareZohoor2';\n src: url('fonts/EntezareZohoor2.eot'), url('fonts/EntezareZohoor2.ttf') format('truetype'), url('fonts/EntezareZohoor2.svg') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n\n.print-format {\n\tpadding: 0px;\n}\n\n@media screen {\n\t.print-format {\n\t\tpadding: 0in;\n\t}\n}\n\n#payer_check_window_block {\n top: 0.7cm; \n left: 0.7cm;\n height: 2.2cm;\n width: 8.8cm;\n position: absolute;\n \n}\n\n#payer_name_block{\n top: 0.1cm; \n left: 1cm;\n position: absolute;\n}\n\n#payee_address_window_block {\n top:4.9cm;\n left: 1.9cm;\n position: absolute; \n width: 8.8cm; \n height:2.2cm;\n}\n\n#address_block{\n top: 0.2cm; \n left: 0.2cm;\n position: relative;\n}\n\n\n\n#memo_block {\n top:7.1cm;\n left: 2cm;\n position: absolute; \n width: 6cm;\n}\n\n\n#check_section_1 {\n font-size: 15px;\n width:20.0cm;\n height:8.9cm;\n}\n\n#check_section_2 {\n height:8.9cm;\n}\n\n#check_section_3 {\n height:8.9cm;\n}\n\n\n#payer_name_block {\ntext-align: center; \n\n}\n\n#payer_name_block {\nwidth:4cm;\ntext-align: center; \nposition: absolute;\n}\n\n#bank_info_block {\nfont-size: 10px;\nwidth:2.5cm;\nheight:1.8cm;\ntext-align: center; \nposition: absolute;\n}\n\n\n#payment_in_words_block {\n font-size: 13px;\n}\n\n#memo_block {\nfont-size: 10px;\n}\n\n#signature_block {\ncolor: blue;\nfont-family: cursive;\n\n}\n#payment_amount_block{\n top:3.3cm;\n left: 17.6cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n\n}\n\n.payment_reference_block {\npadding-left:1cm; \npadding-right:1cm; \n}\n\n.payment_name_cell {\ntext-align: right; \n}\n\n#payment_amount_number_block {\n top:3.3cm;\n left: 16cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n}\n\n\n.right_stamp {\n top:2.8cm;\n left: 16.6cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.sig_stamp {\n top:6.3cm;\n left: 13.8cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.big_stamp {\n top:2.8cm;\n left: 6.1cm;\n width: 7cm;\n\theight: 3cm;\n\tfont-size: 80px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n\n.stamp {\n\tmargin: 0px;\n\toverflow: hidden;\n display: flex;\n justify-content: space-around;\n align-items: center;\n vertical-align: middle;\n text-align: center;\n\n flex-direction: row;\n color: #555;\n\tfont-weight: 700;\n\tborder: 0.25rem solid #555;\n\tdisplay: inline-block;\n\t\n\ttext-transform: uppercase;\n\tborder-radius: 1rem;\n\tfont-family: 'Courier';\n\t-webkit-mask-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/8399/grunge.png');\n -webkit-mask-size: 944px 604px;\n mix-blend-mode: multiply;\n}\n\n\n.is-nope {\n color: #ff5858;\n border: 0.5rem double #D23;\n \t-webkit-mask-position: 2rem 3rem;\n \t\n \n}\n\n.is-draft {\n\tcolor: #ff5858;\n\tborder: 1rem double #ff5858;\n font-size: 6rem;\n font-family: \"Open sans\", Helvetica, Arial, sans-serif;\n border-radius: 0;\n padding: 0.5rem;\n} ", + "custom_format": 1, + "default_print_language": "en", + "disabled": 0, + "doc_type": "Payment Entry", + "docstatus": 0, + "doctype": "Print Format", + "font": "Default", + "font_size": 0, + "html": "{% set checkrun = frappe.get_doc(\"Check Run\", doc.check_run) %}\n{% set checkrunsetting = frappe.db.get_list(\"Check Run Settings\", {\"bank_account\": checkrun.bank_account,\n\"pay_to_account\": checkrun.pay_to_account , \"company\": checkrun.company}) %}\n{% set crs_doc = frappe.get_doc(\"Check Run Settings\", checkrunsetting[0]) %}\n{% set printable_mop = frappe.db.get_list(\"Check Run Printable MOP\", {\"parent\": crs_doc.name}, \"mode_of_payment\",\npluck=\"mode_of_payment\") %}\n{% set pdf_page_size = frappe.db.get_value(\"Print Settings\", \"Print Settings\", \"pdf_page_size\") %}\n\n{% if doc.mode_of_payment in printable_mop %}\n\n\t.print-format {\n\t\tbackground-image: url({{crs_doc.background_image or ''}});\n\t}\n\t@media print {\n .print-format {\n background-image: none;\n }\n }\n\n\n
    \n\t
    \n\t\t
    \n\t\t\t{% if doc.docstatus == 0 %}\n\t\t\tVOID DRAFT\n\t\t\tVOID DRAFT\n\t\t\t{% elif doc.docstatus == 2 or overwrite_void %}\n\t\t\tVOID\n\t\t\tVOID\n\t\t\tVOID\n\t\t\t{% endif %}\n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ doc.company }}\n\t\t\t\t\n\t\t\t
    \n\t\t\t\n\t\t\t\t{{ doc.get_formatted('posting_date') }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{{ doc.party_name }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t{{ doc.party_name }}
    \n\t\t\t\t\t{% set address = get_default_address(doc.party_type, doc.party) %}\n\t\t\t\t\t{% if address %}\n\t\t\t\t\t{{ frappe.get_doc('Address', address).get_display() }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\t\t\t\t{% set money_number = doc.get_formatted('paid_amount')[1:].strip() %}\n\n\t\t\t\t{% if money_number|length < 18 %} {% set money_number=( money_number + '***************************'\n\t\t\t\t\t)[:18] %} {% endif %} {{ money_number }} \n\n\t\t\t\t\t\n\t\t\t\t\t\t{% set money_in_words = frappe.utils.money_in_words(doc.paid_amount)[:-5] %}\n\t\t\t\t\t\t{% if money_in_words|length < 90 %} {% set money_in_words=(money_in_words\n\t\t\t\t\t\t\t+ '************************************************************************' )[:100] %} {%\n\t\t\t\t\t\t\tendif %} {{ money_in_words }} \n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ doc.check_memo or '' }} {% if test_lines %} MEMO {% endif %}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSIGNATURE\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tCHECK#\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tACCOUNT NUMBER {{ doc.account_no or '' }}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tROUTING_NUMBER\n\t\t\t\t\t\t\t\n\t\t
    \n\t
    \n\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{% if crs_doc.secondary_print_format or (not crs_doc.secondary_print_format and doc.references|length > 6) %}\n\t\t\t\t\n\t\t\t\t
    {{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
    \n\t\t\t\t
    \n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\t{{ reference.reference_name }}\n\t\t\t\t\t{{ \", \" if not loop.last else \"\" }}\n\t\t\t\t{% endfor %}\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t Date \n\t\t\t\t\t Reference \n\t\t\t\t\t Amount \n\t\t\t\t\t Payment \n\t\t\t\t\n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\n\t\t\t\t\t{% if reference.reference_doctype == 'Purchase Invoice' %}\n\t\t\t\t\t{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Sales Invoice' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Expense Claim' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Journal Entry' %}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'),\n\t\t\t\t\t\t2, 'USD')}}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.fmt_money(reference.get_formatted('allocated_amount'), 2, 'USD')}}\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t
    \n\t
    \n
    \n
    \n{% endif %}", + "idx": 0, + "line_breaks": 0, + "margin_bottom": 0.0, + "margin_left": 0.0, + "margin_right": 0.0, + "margin_top": 0.0, + "modified": "2025-06-11 05:47:59.025737", + "modified_by": "Administrator", + "module": "Check Run", + "name": "Example Voucher", + "owner": "Administrator", + "print_format_builder": 0, + "print_format_builder_beta": 0, + "print_format_type": "Jinja", + "raw_printing": 0, + "show_section_headings": 0, + "standard": "Yes" +} \ No newline at end of file diff --git a/check_run/tests/setup.py b/check_run/tests/setup.py index d3e6a6b5..22239df2 100644 --- a/check_run/tests/setup.py +++ b/check_run/tests/setup.py @@ -13,9 +13,12 @@ def before_test(): - frappe.clear_cache() - today = frappe.utils.getdate() - setup_complete( + # avoid call to _ensure_idle_system in ERPNext's account controller + frappe.flags.in_test = True + + frappe.clear_cache() + today = frappe.utils.getdate() + setup_complete( { "currency": "USD", "full_name": "Administrator", @@ -34,14 +37,16 @@ def before_test(): "bank_account": "Primary Checking", } ) - enable_all_roles_and_domains() - set_defaults_for_tests() - frappe.db.commit() - create_test_data() - for modu in frappe.get_all("Module Onboarding"): - frappe.db.set_value("Module Onboarding", modu, "is_complete", 1) - frappe.set_value("Website Settings", "Website Settings", "home_page", "login") - frappe.db.commit() + enable_all_roles_and_domains() + set_defaults_for_tests() + frappe.db.commit() + create_test_data() + for modu in frappe.get_all("Module Onboarding"): + frappe.db.set_value("Module Onboarding", modu, "is_complete", 1) + frappe.set_value("Website Settings", "Website Settings", "home_page", "login") + frappe.db.commit() + + frappe.flags.in_test = False def create_test_data(): From 942e8fcafb3778a3f9d31018f5898338cebe71cd Mon Sep 17 00:00:00 2001 From: Rohan Bansal Date: Wed, 11 Jun 2025 15:44:35 +0530 Subject: [PATCH 3/8] fix: remove background image from all Check Run prints --- .../print_format/example_voucher/example_voucher.json | 4 ++-- check_run/hooks.py | 6 +++++- check_run/public/css/print.css | 6 ++++++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 check_run/public/css/print.css diff --git a/check_run/check_run/print_format/example_voucher/example_voucher.json b/check_run/check_run/print_format/example_voucher/example_voucher.json index 32694ac7..05f070b4 100644 --- a/check_run/check_run/print_format/example_voucher/example_voucher.json +++ b/check_run/check_run/print_format/example_voucher/example_voucher.json @@ -11,14 +11,14 @@ "doctype": "Print Format", "font": "Default", "font_size": 0, - "html": "{% set checkrun = frappe.get_doc(\"Check Run\", doc.check_run) %}\n{% set checkrunsetting = frappe.db.get_list(\"Check Run Settings\", {\"bank_account\": checkrun.bank_account,\n\"pay_to_account\": checkrun.pay_to_account , \"company\": checkrun.company}) %}\n{% set crs_doc = frappe.get_doc(\"Check Run Settings\", checkrunsetting[0]) %}\n{% set printable_mop = frappe.db.get_list(\"Check Run Printable MOP\", {\"parent\": crs_doc.name}, \"mode_of_payment\",\npluck=\"mode_of_payment\") %}\n{% set pdf_page_size = frappe.db.get_value(\"Print Settings\", \"Print Settings\", \"pdf_page_size\") %}\n\n{% if doc.mode_of_payment in printable_mop %}\n\n\t.print-format {\n\t\tbackground-image: url({{crs_doc.background_image or ''}});\n\t}\n\t@media print {\n .print-format {\n background-image: none;\n }\n }\n\n\n
    \n\t
    \n\t\t
    \n\t\t\t{% if doc.docstatus == 0 %}\n\t\t\tVOID DRAFT\n\t\t\tVOID DRAFT\n\t\t\t{% elif doc.docstatus == 2 or overwrite_void %}\n\t\t\tVOID\n\t\t\tVOID\n\t\t\tVOID\n\t\t\t{% endif %}\n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ doc.company }}\n\t\t\t\t\n\t\t\t
    \n\t\t\t\n\t\t\t\t{{ doc.get_formatted('posting_date') }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{{ doc.party_name }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t{{ doc.party_name }}
    \n\t\t\t\t\t{% set address = get_default_address(doc.party_type, doc.party) %}\n\t\t\t\t\t{% if address %}\n\t\t\t\t\t{{ frappe.get_doc('Address', address).get_display() }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\t\t\t\t{% set money_number = doc.get_formatted('paid_amount')[1:].strip() %}\n\n\t\t\t\t{% if money_number|length < 18 %} {% set money_number=( money_number + '***************************'\n\t\t\t\t\t)[:18] %} {% endif %} {{ money_number }} \n\n\t\t\t\t\t\n\t\t\t\t\t\t{% set money_in_words = frappe.utils.money_in_words(doc.paid_amount)[:-5] %}\n\t\t\t\t\t\t{% if money_in_words|length < 90 %} {% set money_in_words=(money_in_words\n\t\t\t\t\t\t\t+ '************************************************************************' )[:100] %} {%\n\t\t\t\t\t\t\tendif %} {{ money_in_words }} \n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ doc.check_memo or '' }} {% if test_lines %} MEMO {% endif %}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSIGNATURE\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tCHECK#\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tACCOUNT NUMBER {{ doc.account_no or '' }}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tROUTING_NUMBER\n\t\t\t\t\t\t\t\n\t\t
    \n\t
    \n\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{% if crs_doc.secondary_print_format or (not crs_doc.secondary_print_format and doc.references|length > 6) %}\n\t\t\t\t\n\t\t\t\t
    {{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
    \n\t\t\t\t
    \n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\t{{ reference.reference_name }}\n\t\t\t\t\t{{ \", \" if not loop.last else \"\" }}\n\t\t\t\t{% endfor %}\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t Date \n\t\t\t\t\t Reference \n\t\t\t\t\t Amount \n\t\t\t\t\t Payment \n\t\t\t\t\n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\n\t\t\t\t\t{% if reference.reference_doctype == 'Purchase Invoice' %}\n\t\t\t\t\t{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Sales Invoice' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Expense Claim' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Journal Entry' %}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'),\n\t\t\t\t\t\t2, 'USD')}}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.fmt_money(reference.get_formatted('allocated_amount'), 2, 'USD')}}\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t
    \n\t
    \n
    \n
    \n{% endif %}", + "html": "{% set checkrun = frappe.get_doc(\"Check Run\", doc.check_run) %}\n{% set checkrunsetting = frappe.db.get_list(\"Check Run Settings\", {\"bank_account\": checkrun.bank_account,\n\"pay_to_account\": checkrun.pay_to_account , \"company\": checkrun.company}) %}\n{% set crs_doc = frappe.get_doc(\"Check Run Settings\", checkrunsetting[0]) %}\n{% set printable_mop = frappe.db.get_list(\"Check Run Printable MOP\", {\"parent\": crs_doc.name}, \"mode_of_payment\",\npluck=\"mode_of_payment\") %}\n{% set pdf_page_size = frappe.db.get_value(\"Print Settings\", \"Print Settings\", \"pdf_page_size\") %}\n\n{% if doc.mode_of_payment in printable_mop %}\n\n\t.print-format {\n\t\tbackground-image: url({{crs_doc.background_image or ''}});\n\t}\n\n\n
    \n\t
    \n\t\t
    \n\t\t\t{% if doc.docstatus == 0 %}\n\t\t\tVOID DRAFT\n\t\t\tVOID DRAFT\n\t\t\t{% elif doc.docstatus == 2 or overwrite_void %}\n\t\t\tVOID\n\t\t\tVOID\n\t\t\tVOID\n\t\t\t{% endif %}\n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ doc.company }}\n\t\t\t\t\n\t\t\t
    \n\t\t\t\n\t\t\t\t{{ doc.get_formatted('posting_date') }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{{ doc.party_name }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t{{ doc.party_name }}
    \n\t\t\t\t\t{% set address = get_default_address(doc.party_type, doc.party) %}\n\t\t\t\t\t{% if address %}\n\t\t\t\t\t{{ frappe.get_doc('Address', address).get_display() }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\t\t\t\t{% set money_number = doc.get_formatted('paid_amount')[1:].strip() %}\n\n\t\t\t\t{% if money_number|length < 18 %} {% set money_number=( money_number + '***************************'\n\t\t\t\t\t)[:18] %} {% endif %} {{ money_number }} \n\n\t\t\t\t\t\n\t\t\t\t\t\t{% set money_in_words = frappe.utils.money_in_words(doc.paid_amount)[:-5] %}\n\t\t\t\t\t\t{% if money_in_words|length < 90 %} {% set money_in_words=(money_in_words\n\t\t\t\t\t\t\t+ '************************************************************************' )[:100] %} {%\n\t\t\t\t\t\t\tendif %} {{ money_in_words }} \n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ doc.check_memo or '' }} {% if test_lines %} MEMO {% endif %}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSIGNATURE\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tCHECK#\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tACCOUNT NUMBER {{ doc.account_no or '' }}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tROUTING_NUMBER\n\t\t\t\t\t\t\t\n\t\t
    \n\t
    \n\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{% if crs_doc.secondary_print_format or (not crs_doc.secondary_print_format and doc.references|length > 6) %}\n\t\t\t\t\n\t\t\t\t
    {{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
    \n\t\t\t\t
    \n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\t{{ reference.reference_name }}\n\t\t\t\t\t{{ \", \" if not loop.last else \"\" }}\n\t\t\t\t{% endfor %}\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t Date \n\t\t\t\t\t Reference \n\t\t\t\t\t Amount \n\t\t\t\t\t Payment \n\t\t\t\t\n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\n\t\t\t\t\t{% if reference.reference_doctype == 'Purchase Invoice' %}\n\t\t\t\t\t{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Sales Invoice' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Expense Claim' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Journal Entry' %}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'),\n\t\t\t\t\t\t2, 'USD')}}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.fmt_money(reference.get_formatted('allocated_amount'), 2, 'USD')}}\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t
    \n\t
    \n
    \n
    \n{% endif %}", "idx": 0, "line_breaks": 0, "margin_bottom": 0.0, "margin_left": 0.0, "margin_right": 0.0, "margin_top": 0.0, - "modified": "2025-06-11 05:47:59.025737", + "modified": "2025-06-11 06:04:46.728006", "modified_by": "Administrator", "module": "Check Run", "name": "Example Voucher", diff --git a/check_run/hooks.py b/check_run/hooks.py index aaafd6c1..7e2c4e0a 100644 --- a/check_run/hooks.py +++ b/check_run/hooks.py @@ -19,7 +19,11 @@ # ------------------ # include js, css files in header of desk.html -app_include_css = ["/assets/check_run/js/style.css", "/assets/check_run/css/file_preview.css"] +app_include_css = [ + "/assets/check_run/js/style.css", + "/assets/check_run/css/file_preview.css", + "/assets/check_run/css/print.css", +] app_include_js = [ "check_run.bundle.js", # "/assets/check_run/dist/js/check_run.js", diff --git a/check_run/public/css/print.css b/check_run/public/css/print.css new file mode 100644 index 00000000..facf9650 --- /dev/null +++ b/check_run/public/css/print.css @@ -0,0 +1,6 @@ +/* remove any attached background image from the print */ +@media print { + .print-format { + background-image: none !important; + } +} From 353de7bb1dad17189c2618d0cd09b6c2540b425d Mon Sep 17 00:00:00 2001 From: Rohan Bansal Date: Wed, 11 Jun 2025 15:49:03 +0530 Subject: [PATCH 4/8] style: fix pre-commit issues --- .pre-commit-config.yaml | 17 +- CHANGELOG.md | 28 +- .../check_run_settings.json | 642 +++++++++--------- .../example_voucher/example_voucher.json | 62 +- check_run/tests/setup.py | 28 +- check_run/tests/test_check_run.py | 4 +- check_run/tests/test_payment_entry.py | 9 - 7 files changed, 387 insertions(+), 403 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 18c1de04..a6c8235d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,14 +19,14 @@ repos: - id: debug-statements - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.5.1 + rev: v1.16.0 hooks: - id: mypy exclude: ^tests/ args: ['--install-types', '--non-interactive', '--ignore-missing-imports'] - repo: https://github.com/codespell-project/codespell - rev: v2.3.0 + rev: v2.4.1 hooks: - id: codespell args: ['--ignore-words-list=notin'] @@ -34,7 +34,7 @@ repos: - tomli - repo: https://github.com/asottile/pyupgrade - rev: v3.19.1 + rev: v3.20.0 hooks: - id: pyupgrade args: ['--py310-plus'] @@ -52,13 +52,13 @@ repos: args: [--remove-all-unused-imports, --in-place] - repo: https://github.com/PyCQA/flake8 - rev: 7.1.1 + rev: 7.2.0 hooks: - id: flake8 additional_dependencies: ['flake8-bugbear'] - repo: https://github.com/agritheory/test_utils/ - rev: v0.17.0 + rev: v1.0.0 hooks: - id: update_pre_commit_config - id: clean_customized_doctypes @@ -69,13 +69,6 @@ repos: args: ['--app', 'check_run'] # - id: sql_docstring_formatter - - repo: local - hooks: - - id: prettier - name: prettier - entry: npx prettier . --write --ignore-path .prettierignore - language: node - - repo: local hooks: - id: prettier diff --git a/CHANGELOG.md b/CHANGELOG.md index c29b9cbe..154ec568 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,15 +48,15 @@ Co-authored-by: Tyler Matteson <tyler@agritheory.com> ([`061be4e`](https:/ * print format changes -* comma saperated on bothe tablec +* comma separated on both tables * commit to solve linter test -* secondary print format with same attechment +* secondary print format with same attachment * change field name in print format -* split pdf in two attechment +* split pdf in two attachment * comment to run lint @@ -170,7 +170,7 @@ Co-authored-by: viralpatel15 <viralkansodiya167@gmail.com> ([`0b4bff0`](ht * Override a function to improve error msg (#205) -* Allocated ammount validation override for msg improvement +* Allocated amount validation override for msg improvement * comment add @@ -242,7 +242,7 @@ Co-authored-by: viralpatel15 <viralkansodiya167@gmail.com> ([`80fa4cf`](ht * feat: improvement -* feat: file preview treshold +* feat: file preview threshold * fix: refactor filters to work with prettier, also fix rendering bug @@ -502,7 +502,7 @@ Resolution for `TypeError: the JSON object must be str, bytes or bytearray, not * fix: move bank validation out of override class into hook (#142) ([`f07ad5a`](https://github.com/agritheory/check_run/commit/f07ad5a1c4a9b7e424ad534ec40731f26f6feb0c)) -* fix: only increment if check numer is numeric (#139) ([`079aa52`](https://github.com/agritheory/check_run/commit/079aa52bf013e13d3350848ef011b74b99b64bf1)) +* fix: only increment if check number is numeric (#139) ([`079aa52`](https://github.com/agritheory/check_run/commit/079aa52bf013e13d3350848ef011b74b99b64bf1)) ### Unknown @@ -548,7 +548,7 @@ Co-authored-by: Heather Kusmierz <heather.kusmierz@gmail.com> ([`4ccba65`] * fix: refactor frappe.db.sql to query builder for outstanding -* fix: refactor postive pay to query builder +* fix: refactor positive pay to query builder * chore: remove print statement @@ -666,9 +666,9 @@ Co-authored-by: agritheory <agritheory@users.noreply.github.com> ([`6f5023 * V14 ports (#98) -* chore: port payement entry check number fetch/save to V14 +* chore: port payment entry check number fetch/save to V14 -* chore: port ach_post procesing hook and company disc data +* chore: port ach_post processing hook and company disc data * chore: port docstatus fix for ach-only crs @@ -680,9 +680,9 @@ Co-authored-by: agritheory <agritheory@users.noreply.github.com> ([`6f5023 * The hook jenv is deprecated New variable is jinja -* chore: port ach_post procesing hook and company disc data +* chore: port ach_post processing hook and company disc data -* fix: fix savepoint wierdness +* fix: fix savepoint weirdness * fix: company discretionary data fix @@ -918,7 +918,7 @@ Not implemented yet: * test: stub UI test yaml - copied from Frappe -* test: add helper shell files, remove job contitionals +* test: add helper shell files, remove job conditionals * test: remove producer/consumer test dbs from install script @@ -956,7 +956,7 @@ Not implemented yet: * test: allow empty password = yes -* test: file wasnt saved +* test: file wasn't saved * test: mariadb version 10.5 => 10.3 @@ -992,7 +992,7 @@ Not implemented yet: * test: install apps -* test: add site adn skip assets +* test: add site and skip assets * test: ci=yes install-app diff --git a/check_run/check_run/doctype/check_run_settings/check_run_settings.json b/check_run/check_run/doctype/check_run_settings/check_run_settings.json index d3ad428d..d63824f4 100644 --- a/check_run/check_run/doctype/check_run_settings/check_run_settings.json +++ b/check_run/check_run/doctype/check_run_settings/check_run_settings.json @@ -1,323 +1,323 @@ { - "actions": [], - "autoname": "format:ACC-CRS-{bank_account}-{pay_to_account}", - "creation": "2022-08-22 14:43:43.533105", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "company", - "bank_account", - "column_break_3", - "pay_to_account", - "section_break_4", - "include_purchase_invoices", - "include_journal_entries", - "include_expense_claims", - "pre_check_overdue_items", - "allow_cancellation", - "cascade_cancellation", - "validate_unique_check_number", - "set_payment_entry_posting_date", - "column_break_9", - "number_of_invoices_per_voucher", - "split_by_address", - "automatically_release_on_hold_invoices", - "file_preview_threshold", - "allow_stand_alone_debit_notes", - "print_settings_section", - "print_preview", - "print_format", - "secondary_print_format", - "column_break_ctnqm", - "printable_mop_in_check_run", - "background_image", - "default_modes_of_payment_section_section", - "purchase_invoice", - "journal_entry", - "column_break_21", - "expense_claim", - "ach_settings_section", - "ach_file_extension", - "ach_service_class_code", - "ach_standard_class_code", - "ach_description", - "column_break_27", - "immediate_origin", - "company_discretionary_data", - "custom_post_processing_hook" - ], - "fields": [ - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company" - }, - { - "fieldname": "bank_account", - "fieldtype": "Link", - "label": "Bank Account", - "options": "Bank Account" - }, - { - "fieldname": "section_break_4", - "fieldtype": "Section Break" - }, - { - "default": "1", - "fieldname": "include_purchase_invoices", - "fieldtype": "Check", - "label": "Include Purchase Invoices" - }, - { - "default": "1", - "fieldname": "include_journal_entries", - "fieldtype": "Check", - "label": "Include Journal Entries " - }, - { - "default": "1", - "fieldname": "include_expense_claims", - "fieldtype": "Check", - "label": "Include Expense Claims" - }, - { - "default": "0", - "description": "Payment Entries will be unlinked when Check Run is cancelled", - "fieldname": "allow_cancellation", - "fieldtype": "Check", - "label": "Allow Cancellation" - }, - { - "fieldname": "column_break_9", - "fieldtype": "Column Break" - }, - { - "default": "ach", - "description": "Common file extensions are 'ach', 'txt' and 'dat'. Your bank may require one of these.", - "fieldname": "ach_file_extension", - "fieldtype": "Data", - "label": "ACH File Extension" - }, - { - "default": "0", - "description": "Pre-Check all payables that have a due date greater than the Check Run's posting date", - "fieldname": "pre_check_overdue_items", - "fieldtype": "Check", - "label": "Pre-Check Overdue Items" - }, - { - "default": "0", - "description": "When a Check Run is cancelled, all Payment Entries linked to it will also be cancelled. This is not recommended.", - "fieldname": "cascade_cancellation", - "fieldtype": "Check", - "label": "Cascade Cancellation" - }, - { - "description": "Defaults to 5 if no value is provided", - "fieldname": "number_of_invoices_per_voucher", - "fieldtype": "Int", - "label": "Number of Invoices per Voucher", - "non_negative": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "pay_to_account", - "fieldtype": "Link", - "label": "Payable Account", - "options": "Account" - }, - { - "fieldname": "ach_service_class_code", - "fieldtype": "Select", - "label": "ACH Service Class Code", - "options": "200\n220\n225" - }, - { - "description": "PPD is only supported Entry format at this time", - "fieldname": "ach_standard_class_code", - "fieldtype": "Select", - "label": "ACH Standard Class Code", - "options": "PPD" - }, - { - "fieldname": "ach_description", - "fieldtype": "Data", - "label": "ACH Description", - "length": 10 - }, - { - "fieldname": "print_format", - "fieldtype": "Link", - "label": "Print Format", - "options": "Print Format" - }, - { - "default": "0", - "fieldname": "split_by_address", - "fieldtype": "Check", - "label": "Split Invoices by Address" - }, - { - "fieldname": "ach_settings_section", - "fieldtype": "Section Break", - "label": "ACH Settings" - }, - { - "fieldname": "column_break_21", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "automatically_release_on_hold_invoices", - "fieldtype": "Check", - "label": "Automatically Release On Hold Invoices" - }, - { - "fieldname": "immediate_origin", - "fieldtype": "Data", - "label": "Immediate Origin" - }, - { - "fieldname": "company_discretionary_data", - "fieldtype": "Data", - "label": "Company Discretionary Data", - "length": 20 - }, - { - "fieldname": "custom_post_processing_hook", - "fieldtype": "Data", - "label": "Custom Post Processing Hook", - "read_only": 1 - }, - { - "fieldname": "default_modes_of_payment_section_section", - "fieldtype": "Section Break", - "label": "Default Modes of Payment Section" - }, - { - "fieldname": "purchase_invoice", - "fieldtype": "Link", - "label": "Purchase Invoice", - "options": "Mode of Payment" - }, - { - "fieldname": "journal_entry", - "fieldtype": "Link", - "label": "Journal Entry", - "options": "Mode of Payment" - }, - { - "fieldname": "expense_claim", - "fieldtype": "Link", - "label": "Expense Claim", - "options": "Mode of Payment" - }, - { - "fieldname": "column_break_27", - "fieldtype": "Column Break" - }, - { - "default": "1000", - "description": "File preview is enabled up to this number of transactions", - "fieldname": "file_preview_threshold", - "fieldtype": "Int", - "label": "File Preview Threshold" - }, - { - "default": "0", - "fieldname": "validate_unique_check_number", - "fieldtype": "Check", - "label": "Validate Unique Check Number" - }, - { - "fieldname": "secondary_print_format", - "fieldtype": "Link", - "label": "Secondary Print Format", - "options": "Print Format" - }, - { - "fieldname": "background_image", - "fieldtype": "Attach", - "label": "Background Image" - }, - { - "default": "Automatically Render PDF After Submit", - "fieldname": "print_preview", - "fieldtype": "Select", - "label": "Print Preview", - "options": "Automatically Render PDF After Submit\nPrint from Print Preview" - }, - { - "fieldname": "print_settings_section", - "fieldtype": "Section Break", - "label": "Print Settings" - }, - { - "fieldname": "column_break_ctnqm", - "fieldtype": "Column Break" - }, - { - "fieldname": "printable_mop_in_check_run", - "fieldtype": "Table MultiSelect", - "label": "Printable Modes of Payment in Check Run", - "options": "Check Run Printable MOP" - }, - { - "default": "No", - "fieldname": "allow_stand_alone_debit_notes", - "fieldtype": "Select", - "label": "Allow stand-alone debit notes?", - "options": "Yes\nNo" - }, - { - "default": "Use Today's Date", - "fieldname": "set_payment_entry_posting_date", - "fieldtype": "Select", - "label": "Set Payment Entry Posting Date", - "options": "Use Today's Date\nUse Check Run's Posting Date" - } - ], - "links": [], - "modified": "2025-06-11 05:33:02.366589", - "modified_by": "Administrator", - "module": "Check Run", - "name": "Check Run Settings", - "naming_rule": "Expression", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts Manager", - "share": 1, - "write": 1 - } - ], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "track_changes": 1 + "actions": [], + "autoname": "format:ACC-CRS-{bank_account}-{pay_to_account}", + "creation": "2022-08-22 14:43:43.533105", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "company", + "bank_account", + "column_break_3", + "pay_to_account", + "section_break_4", + "include_purchase_invoices", + "include_journal_entries", + "include_expense_claims", + "pre_check_overdue_items", + "allow_cancellation", + "cascade_cancellation", + "validate_unique_check_number", + "set_payment_entry_posting_date", + "column_break_9", + "number_of_invoices_per_voucher", + "split_by_address", + "automatically_release_on_hold_invoices", + "file_preview_threshold", + "allow_stand_alone_debit_notes", + "print_settings_section", + "print_preview", + "print_format", + "secondary_print_format", + "column_break_ctnqm", + "printable_mop_in_check_run", + "background_image", + "default_modes_of_payment_section_section", + "purchase_invoice", + "journal_entry", + "column_break_21", + "expense_claim", + "ach_settings_section", + "ach_file_extension", + "ach_service_class_code", + "ach_standard_class_code", + "ach_description", + "column_break_27", + "immediate_origin", + "company_discretionary_data", + "custom_post_processing_hook" + ], + "fields": [ + { + "fieldname": "company", + "fieldtype": "Link", + "label": "Company", + "options": "Company" + }, + { + "fieldname": "bank_account", + "fieldtype": "Link", + "label": "Bank Account", + "options": "Bank Account" + }, + { + "fieldname": "section_break_4", + "fieldtype": "Section Break" + }, + { + "default": "1", + "fieldname": "include_purchase_invoices", + "fieldtype": "Check", + "label": "Include Purchase Invoices" + }, + { + "default": "1", + "fieldname": "include_journal_entries", + "fieldtype": "Check", + "label": "Include Journal Entries " + }, + { + "default": "1", + "fieldname": "include_expense_claims", + "fieldtype": "Check", + "label": "Include Expense Claims" + }, + { + "default": "0", + "description": "Payment Entries will be unlinked when Check Run is cancelled", + "fieldname": "allow_cancellation", + "fieldtype": "Check", + "label": "Allow Cancellation" + }, + { + "fieldname": "column_break_9", + "fieldtype": "Column Break" + }, + { + "default": "ach", + "description": "Common file extensions are 'ach', 'txt' and 'dat'. Your bank may require one of these.", + "fieldname": "ach_file_extension", + "fieldtype": "Data", + "label": "ACH File Extension" + }, + { + "default": "0", + "description": "Pre-Check all payables that have a due date greater than the Check Run's posting date", + "fieldname": "pre_check_overdue_items", + "fieldtype": "Check", + "label": "Pre-Check Overdue Items" + }, + { + "default": "0", + "description": "When a Check Run is cancelled, all Payment Entries linked to it will also be cancelled. This is not recommended.", + "fieldname": "cascade_cancellation", + "fieldtype": "Check", + "label": "Cascade Cancellation" + }, + { + "description": "Defaults to 5 if no value is provided", + "fieldname": "number_of_invoices_per_voucher", + "fieldtype": "Int", + "label": "Number of Invoices per Voucher", + "non_negative": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fieldname": "pay_to_account", + "fieldtype": "Link", + "label": "Payable Account", + "options": "Account" + }, + { + "fieldname": "ach_service_class_code", + "fieldtype": "Select", + "label": "ACH Service Class Code", + "options": "200\n220\n225" + }, + { + "description": "PPD is only supported Entry format at this time", + "fieldname": "ach_standard_class_code", + "fieldtype": "Select", + "label": "ACH Standard Class Code", + "options": "PPD" + }, + { + "fieldname": "ach_description", + "fieldtype": "Data", + "label": "ACH Description", + "length": 10 + }, + { + "fieldname": "print_format", + "fieldtype": "Link", + "label": "Print Format", + "options": "Print Format" + }, + { + "default": "0", + "fieldname": "split_by_address", + "fieldtype": "Check", + "label": "Split Invoices by Address" + }, + { + "fieldname": "ach_settings_section", + "fieldtype": "Section Break", + "label": "ACH Settings" + }, + { + "fieldname": "column_break_21", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "automatically_release_on_hold_invoices", + "fieldtype": "Check", + "label": "Automatically Release On Hold Invoices" + }, + { + "fieldname": "immediate_origin", + "fieldtype": "Data", + "label": "Immediate Origin" + }, + { + "fieldname": "company_discretionary_data", + "fieldtype": "Data", + "label": "Company Discretionary Data", + "length": 20 + }, + { + "fieldname": "custom_post_processing_hook", + "fieldtype": "Data", + "label": "Custom Post Processing Hook", + "read_only": 1 + }, + { + "fieldname": "default_modes_of_payment_section_section", + "fieldtype": "Section Break", + "label": "Default Modes of Payment Section" + }, + { + "fieldname": "purchase_invoice", + "fieldtype": "Link", + "label": "Purchase Invoice", + "options": "Mode of Payment" + }, + { + "fieldname": "journal_entry", + "fieldtype": "Link", + "label": "Journal Entry", + "options": "Mode of Payment" + }, + { + "fieldname": "expense_claim", + "fieldtype": "Link", + "label": "Expense Claim", + "options": "Mode of Payment" + }, + { + "fieldname": "column_break_27", + "fieldtype": "Column Break" + }, + { + "default": "1000", + "description": "File preview is enabled up to this number of transactions", + "fieldname": "file_preview_threshold", + "fieldtype": "Int", + "label": "File Preview Threshold" + }, + { + "default": "0", + "fieldname": "validate_unique_check_number", + "fieldtype": "Check", + "label": "Validate Unique Check Number" + }, + { + "fieldname": "secondary_print_format", + "fieldtype": "Link", + "label": "Secondary Print Format", + "options": "Print Format" + }, + { + "fieldname": "background_image", + "fieldtype": "Attach", + "label": "Background Image" + }, + { + "default": "Automatically Render PDF After Submit", + "fieldname": "print_preview", + "fieldtype": "Select", + "label": "Print Preview", + "options": "Automatically Render PDF After Submit\nPrint from Print Preview" + }, + { + "fieldname": "print_settings_section", + "fieldtype": "Section Break", + "label": "Print Settings" + }, + { + "fieldname": "column_break_ctnqm", + "fieldtype": "Column Break" + }, + { + "fieldname": "printable_mop_in_check_run", + "fieldtype": "Table MultiSelect", + "label": "Printable Modes of Payment in Check Run", + "options": "Check Run Printable MOP" + }, + { + "default": "No", + "fieldname": "allow_stand_alone_debit_notes", + "fieldtype": "Select", + "label": "Allow stand-alone debit notes?", + "options": "Yes\nNo" + }, + { + "default": "Use Today's Date", + "fieldname": "set_payment_entry_posting_date", + "fieldtype": "Select", + "label": "Set Payment Entry Posting Date", + "options": "Use Today's Date\nUse Check Run's Posting Date" + } + ], + "links": [], + "modified": "2025-06-11 05:33:02.366589", + "modified_by": "Administrator", + "module": "Check Run", + "name": "Check Run Settings", + "naming_rule": "Expression", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "share": 1, + "write": 1 + } + ], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "track_changes": 1 } diff --git a/check_run/check_run/print_format/example_voucher/example_voucher.json b/check_run/check_run/print_format/example_voucher/example_voucher.json index 05f070b4..1489a555 100644 --- a/check_run/check_run/print_format/example_voucher/example_voucher.json +++ b/check_run/check_run/print_format/example_voucher/example_voucher.json @@ -1,32 +1,32 @@ { - "absolute_value": 0, - "align_labels_right": 0, - "creation": "2022-08-30 12:27:45.736571", - "css": "@font-face {\n font-family: 'EntezareZohoor2';\n src: url('fonts/EntezareZohoor2.eot'), url('fonts/EntezareZohoor2.ttf') format('truetype'), url('fonts/EntezareZohoor2.svg') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n\n.print-format {\n\tpadding: 0px;\n}\n\n@media screen {\n\t.print-format {\n\t\tpadding: 0in;\n\t}\n}\n\n#payer_check_window_block {\n top: 0.7cm; \n left: 0.7cm;\n height: 2.2cm;\n width: 8.8cm;\n position: absolute;\n \n}\n\n#payer_name_block{\n top: 0.1cm; \n left: 1cm;\n position: absolute;\n}\n\n#payee_address_window_block {\n top:4.9cm;\n left: 1.9cm;\n position: absolute; \n width: 8.8cm; \n height:2.2cm;\n}\n\n#address_block{\n top: 0.2cm; \n left: 0.2cm;\n position: relative;\n}\n\n\n\n#memo_block {\n top:7.1cm;\n left: 2cm;\n position: absolute; \n width: 6cm;\n}\n\n\n#check_section_1 {\n font-size: 15px;\n width:20.0cm;\n height:8.9cm;\n}\n\n#check_section_2 {\n height:8.9cm;\n}\n\n#check_section_3 {\n height:8.9cm;\n}\n\n\n#payer_name_block {\ntext-align: center; \n\n}\n\n#payer_name_block {\nwidth:4cm;\ntext-align: center; \nposition: absolute;\n}\n\n#bank_info_block {\nfont-size: 10px;\nwidth:2.5cm;\nheight:1.8cm;\ntext-align: center; \nposition: absolute;\n}\n\n\n#payment_in_words_block {\n font-size: 13px;\n}\n\n#memo_block {\nfont-size: 10px;\n}\n\n#signature_block {\ncolor: blue;\nfont-family: cursive;\n\n}\n#payment_amount_block{\n top:3.3cm;\n left: 17.6cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n\n}\n\n.payment_reference_block {\npadding-left:1cm; \npadding-right:1cm; \n}\n\n.payment_name_cell {\ntext-align: right; \n}\n\n#payment_amount_number_block {\n top:3.3cm;\n left: 16cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n}\n\n\n.right_stamp {\n top:2.8cm;\n left: 16.6cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.sig_stamp {\n top:6.3cm;\n left: 13.8cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.big_stamp {\n top:2.8cm;\n left: 6.1cm;\n width: 7cm;\n\theight: 3cm;\n\tfont-size: 80px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n\n.stamp {\n\tmargin: 0px;\n\toverflow: hidden;\n display: flex;\n justify-content: space-around;\n align-items: center;\n vertical-align: middle;\n text-align: center;\n\n flex-direction: row;\n color: #555;\n\tfont-weight: 700;\n\tborder: 0.25rem solid #555;\n\tdisplay: inline-block;\n\t\n\ttext-transform: uppercase;\n\tborder-radius: 1rem;\n\tfont-family: 'Courier';\n\t-webkit-mask-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/8399/grunge.png');\n -webkit-mask-size: 944px 604px;\n mix-blend-mode: multiply;\n}\n\n\n.is-nope {\n color: #ff5858;\n border: 0.5rem double #D23;\n \t-webkit-mask-position: 2rem 3rem;\n \t\n \n}\n\n.is-draft {\n\tcolor: #ff5858;\n\tborder: 1rem double #ff5858;\n font-size: 6rem;\n font-family: \"Open sans\", Helvetica, Arial, sans-serif;\n border-radius: 0;\n padding: 0.5rem;\n} ", - "custom_format": 1, - "default_print_language": "en", - "disabled": 0, - "doc_type": "Payment Entry", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "font_size": 0, - "html": "{% set checkrun = frappe.get_doc(\"Check Run\", doc.check_run) %}\n{% set checkrunsetting = frappe.db.get_list(\"Check Run Settings\", {\"bank_account\": checkrun.bank_account,\n\"pay_to_account\": checkrun.pay_to_account , \"company\": checkrun.company}) %}\n{% set crs_doc = frappe.get_doc(\"Check Run Settings\", checkrunsetting[0]) %}\n{% set printable_mop = frappe.db.get_list(\"Check Run Printable MOP\", {\"parent\": crs_doc.name}, \"mode_of_payment\",\npluck=\"mode_of_payment\") %}\n{% set pdf_page_size = frappe.db.get_value(\"Print Settings\", \"Print Settings\", \"pdf_page_size\") %}\n\n{% if doc.mode_of_payment in printable_mop %}\n\n\t.print-format {\n\t\tbackground-image: url({{crs_doc.background_image or ''}});\n\t}\n\n\n
    \n\t
    \n\t\t
    \n\t\t\t{% if doc.docstatus == 0 %}\n\t\t\tVOID DRAFT\n\t\t\tVOID DRAFT\n\t\t\t{% elif doc.docstatus == 2 or overwrite_void %}\n\t\t\tVOID\n\t\t\tVOID\n\t\t\tVOID\n\t\t\t{% endif %}\n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ doc.company }}\n\t\t\t\t\n\t\t\t
    \n\t\t\t\n\t\t\t\t{{ doc.get_formatted('posting_date') }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{{ doc.party_name }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t{{ doc.party_name }}
    \n\t\t\t\t\t{% set address = get_default_address(doc.party_type, doc.party) %}\n\t\t\t\t\t{% if address %}\n\t\t\t\t\t{{ frappe.get_doc('Address', address).get_display() }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\t\t\t\t{% set money_number = doc.get_formatted('paid_amount')[1:].strip() %}\n\n\t\t\t\t{% if money_number|length < 18 %} {% set money_number=( money_number + '***************************'\n\t\t\t\t\t)[:18] %} {% endif %} {{ money_number }} \n\n\t\t\t\t\t\n\t\t\t\t\t\t{% set money_in_words = frappe.utils.money_in_words(doc.paid_amount)[:-5] %}\n\t\t\t\t\t\t{% if money_in_words|length < 90 %} {% set money_in_words=(money_in_words\n\t\t\t\t\t\t\t+ '************************************************************************' )[:100] %} {%\n\t\t\t\t\t\t\tendif %} {{ money_in_words }} \n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ doc.check_memo or '' }} {% if test_lines %} MEMO {% endif %}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSIGNATURE\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tCHECK#\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tACCOUNT NUMBER {{ doc.account_no or '' }}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tROUTING_NUMBER\n\t\t\t\t\t\t\t\n\t\t
    \n\t
    \n\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{% if crs_doc.secondary_print_format or (not crs_doc.secondary_print_format and doc.references|length > 6) %}\n\t\t\t\t\n\t\t\t\t
    {{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
    \n\t\t\t\t
    \n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\t{{ reference.reference_name }}\n\t\t\t\t\t{{ \", \" if not loop.last else \"\" }}\n\t\t\t\t{% endfor %}\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t Date \n\t\t\t\t\t Reference \n\t\t\t\t\t Amount \n\t\t\t\t\t Payment \n\t\t\t\t\n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\n\t\t\t\t\t{% if reference.reference_doctype == 'Purchase Invoice' %}\n\t\t\t\t\t{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Sales Invoice' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Expense Claim' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Journal Entry' %}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'),\n\t\t\t\t\t\t2, 'USD')}}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.fmt_money(reference.get_formatted('allocated_amount'), 2, 'USD')}}\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t
    \n\t
    \n
    \n
    \n{% endif %}", - "idx": 0, - "line_breaks": 0, - "margin_bottom": 0.0, - "margin_left": 0.0, - "margin_right": 0.0, - "margin_top": 0.0, - "modified": "2025-06-11 06:04:46.728006", - "modified_by": "Administrator", - "module": "Check Run", - "name": "Example Voucher", - "owner": "Administrator", - "print_format_builder": 0, - "print_format_builder_beta": 0, - "print_format_type": "Jinja", - "raw_printing": 0, - "show_section_headings": 0, - "standard": "Yes" -} \ No newline at end of file + "absolute_value": 0, + "align_labels_right": 0, + "creation": "2022-08-30 12:27:45.736571", + "css": "@font-face {\n font-family: 'EntezareZohoor2';\n src: url('fonts/EntezareZohoor2.eot'), url('fonts/EntezareZohoor2.ttf') format('truetype'), url('fonts/EntezareZohoor2.svg') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n\n.print-format {\n\tpadding: 0px;\n}\n\n@media screen {\n\t.print-format {\n\t\tpadding: 0in;\n\t}\n}\n\n#payer_check_window_block {\n top: 0.7cm; \n left: 0.7cm;\n height: 2.2cm;\n width: 8.8cm;\n position: absolute;\n \n}\n\n#payer_name_block{\n top: 0.1cm; \n left: 1cm;\n position: absolute;\n}\n\n#payee_address_window_block {\n top:4.9cm;\n left: 1.9cm;\n position: absolute; \n width: 8.8cm; \n height:2.2cm;\n}\n\n#address_block{\n top: 0.2cm; \n left: 0.2cm;\n position: relative;\n}\n\n\n\n#memo_block {\n top:7.1cm;\n left: 2cm;\n position: absolute; \n width: 6cm;\n}\n\n\n#check_section_1 {\n font-size: 15px;\n width:20.0cm;\n height:8.9cm;\n}\n\n#check_section_2 {\n height:8.9cm;\n}\n\n#check_section_3 {\n height:8.9cm;\n}\n\n\n#payer_name_block {\ntext-align: center; \n\n}\n\n#payer_name_block {\nwidth:4cm;\ntext-align: center; \nposition: absolute;\n}\n\n#bank_info_block {\nfont-size: 10px;\nwidth:2.5cm;\nheight:1.8cm;\ntext-align: center; \nposition: absolute;\n}\n\n\n#payment_in_words_block {\n font-size: 13px;\n}\n\n#memo_block {\nfont-size: 10px;\n}\n\n#signature_block {\ncolor: blue;\nfont-family: cursive;\n\n}\n#payment_amount_block{\n top:3.3cm;\n left: 17.6cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n\n}\n\n.payment_reference_block {\npadding-left:1cm; \npadding-right:1cm; \n}\n\n.payment_name_cell {\ntext-align: right; \n}\n\n#payment_amount_number_block {\n top:3.3cm;\n left: 16cm;\n\tposition: absolute; \n\tmin-width: 4cm;\n}\n\n\n.right_stamp {\n top:2.8cm;\n left: 16.6cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.sig_stamp {\n top:6.3cm;\n left: 13.8cm;\n width: 3cm;\n\theight: 1.5cm;\n\tfont-size: 40px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n.big_stamp {\n top:2.8cm;\n left: 6.1cm;\n width: 7cm;\n\theight: 3cm;\n\tfont-size: 80px;\n \tfort-weight: bold;\n position: absolute; \n}\n\n\n.stamp {\n\tmargin: 0px;\n\toverflow: hidden;\n display: flex;\n justify-content: space-around;\n align-items: center;\n vertical-align: middle;\n text-align: center;\n\n flex-direction: row;\n color: #555;\n\tfont-weight: 700;\n\tborder: 0.25rem solid #555;\n\tdisplay: inline-block;\n\t\n\ttext-transform: uppercase;\n\tborder-radius: 1rem;\n\tfont-family: 'Courier';\n\t-webkit-mask-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/8399/grunge.png');\n -webkit-mask-size: 944px 604px;\n mix-blend-mode: multiply;\n}\n\n\n.is-nope {\n color: #ff5858;\n border: 0.5rem double #D23;\n \t-webkit-mask-position: 2rem 3rem;\n \t\n \n}\n\n.is-draft {\n\tcolor: #ff5858;\n\tborder: 1rem double #ff5858;\n font-size: 6rem;\n font-family: \"Open sans\", Helvetica, Arial, sans-serif;\n border-radius: 0;\n padding: 0.5rem;\n} ", + "custom_format": 1, + "default_print_language": "en", + "disabled": 0, + "doc_type": "Payment Entry", + "docstatus": 0, + "doctype": "Print Format", + "font": "Default", + "font_size": 0, + "html": "{% set checkrun = frappe.get_doc(\"Check Run\", doc.check_run) %}\n{% set checkrunsetting = frappe.db.get_list(\"Check Run Settings\", {\"bank_account\": checkrun.bank_account,\n\"pay_to_account\": checkrun.pay_to_account , \"company\": checkrun.company}) %}\n{% set crs_doc = frappe.get_doc(\"Check Run Settings\", checkrunsetting[0]) %}\n{% set printable_mop = frappe.db.get_list(\"Check Run Printable MOP\", {\"parent\": crs_doc.name}, \"mode_of_payment\",\npluck=\"mode_of_payment\") %}\n{% set pdf_page_size = frappe.db.get_value(\"Print Settings\", \"Print Settings\", \"pdf_page_size\") %}\n\n{% if doc.mode_of_payment in printable_mop %}\n\n\t.print-format {\n\t\tbackground-image: url({{crs_doc.background_image or ''}});\n\t}\n\n\n
    \n\t
    \n\t\t
    \n\t\t\t{% if doc.docstatus == 0 %}\n\t\t\tVOID DRAFT\n\t\t\tVOID DRAFT\n\t\t\t{% elif doc.docstatus == 2 or overwrite_void %}\n\t\t\tVOID\n\t\t\tVOID\n\t\t\tVOID\n\t\t\t{% endif %}\n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ doc.company }}\n\t\t\t\t\n\t\t\t
    \n\t\t\t\n\t\t\t\t{{ doc.get_formatted('posting_date') }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{{ doc.party_name }}\n\t\t\t\n\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t{{ doc.party_name }}
    \n\t\t\t\t\t{% set address = get_default_address(doc.party_type, doc.party) %}\n\t\t\t\t\t{% if address %}\n\t\t\t\t\t{{ frappe.get_doc('Address', address).get_display() }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\t\t\t\t{% set money_number = doc.get_formatted('paid_amount')[1:].strip() %}\n\n\t\t\t\t{% if money_number|length < 18 %} {% set money_number=( money_number + '***************************'\n\t\t\t\t\t)[:18] %} {% endif %} {{ money_number }} \n\n\t\t\t\t\t\n\t\t\t\t\t\t{% set money_in_words = frappe.utils.money_in_words(doc.paid_amount)[:-5] %}\n\t\t\t\t\t\t{% if money_in_words|length < 90 %} {% set money_in_words=(money_in_words\n\t\t\t\t\t\t\t+ '************************************************************************' )[:100] %} {%\n\t\t\t\t\t\t\tendif %} {{ money_in_words }} \n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ doc.check_memo or '' }} {% if test_lines %} MEMO {% endif %}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSIGNATURE\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tCHECK#\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tACCOUNT NUMBER {{ doc.account_no or '' }}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tROUTING_NUMBER\n\t\t\t\t\t\t\t\n\t\t
    \n\t
    \n\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t{% if crs_doc.secondary_print_format or (not crs_doc.secondary_print_format and doc.references|length > 6) %}\n\t\t\t\t\n\t\t\t\t
    {{doc.party_name}} {{ frappe.utils.formatdate(doc.reference_date) or '' }} {{doc.get_formatted(\"base_paid_amount\")}}
    \n\t\t\t\t
    \n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\t{{ reference.reference_name }}\n\t\t\t\t\t{{ \", \" if not loop.last else \"\" }}\n\t\t\t\t{% endfor %}\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t Date \n\t\t\t\t\t Reference \n\t\t\t\t\t Amount \n\t\t\t\t\t Payment \n\t\t\t\t\n\t\t\t\t{% for reference in doc.references %}\n\t\t\t\t\n\t\t\t\t\t{% if reference.reference_doctype == 'Purchase Invoice' %}\n\t\t\t\t\t{{ frappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"bill_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Sales Invoice' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_date\")) or \"\"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"po_no\") or \"\" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Expense Claim' %}\n\t\t\t\t\t{{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% elif reference.reference_doctype == 'Journal Entry' %}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.formatdate(frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"posting_date\")) or \" \"}}\n\t\t\t\t\t {{ frappe.db.get_value(reference.reference_doctype,\n\t\t\t\t\t\treference.reference_name, \"name\") or \" \" }}\n\t\t\t\t\t{% endif %}\n\t\t\t\t\t {{ frappe.utils.fmt_money(reference.get_formatted('total_amount'),\n\t\t\t\t\t\t2, 'USD')}}\n\t\t\t\t\t {{\n\t\t\t\t\t\tfrappe.utils.fmt_money(reference.get_formatted('allocated_amount'), 2, 'USD')}}\n\t\t\t\t\n\t\t\t\t{% endfor %}\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t
    \n\t
    \n
    \n
    \n{% endif %}", + "idx": 0, + "line_breaks": 0, + "margin_bottom": 0.0, + "margin_left": 0.0, + "margin_right": 0.0, + "margin_top": 0.0, + "modified": "2025-06-11 06:04:46.728006", + "modified_by": "Administrator", + "module": "Check Run", + "name": "Example Voucher", + "owner": "Administrator", + "print_format_builder": 0, + "print_format_builder_beta": 0, + "print_format_type": "Jinja", + "raw_printing": 0, + "show_section_headings": 0, + "standard": "Yes" +} diff --git a/check_run/tests/setup.py b/check_run/tests/setup.py index 22239df2..74e3be5f 100644 --- a/check_run/tests/setup.py +++ b/check_run/tests/setup.py @@ -13,12 +13,12 @@ def before_test(): - # avoid call to _ensure_idle_system in ERPNext's account controller - frappe.flags.in_test = True + # avoid call to _ensure_idle_system in ERPNext's account controller + frappe.flags.in_test = True - frappe.clear_cache() - today = frappe.utils.getdate() - setup_complete( + frappe.clear_cache() + today = frappe.utils.getdate() + setup_complete( { "currency": "USD", "full_name": "Administrator", @@ -37,16 +37,16 @@ def before_test(): "bank_account": "Primary Checking", } ) - enable_all_roles_and_domains() - set_defaults_for_tests() - frappe.db.commit() - create_test_data() - for modu in frappe.get_all("Module Onboarding"): - frappe.db.set_value("Module Onboarding", modu, "is_complete", 1) - frappe.set_value("Website Settings", "Website Settings", "home_page", "login") - frappe.db.commit() + enable_all_roles_and_domains() + set_defaults_for_tests() + frappe.db.commit() + create_test_data() + for modu in frappe.get_all("Module Onboarding"): + frappe.db.set_value("Module Onboarding", modu, "is_complete", 1) + frappe.set_value("Website Settings", "Website Settings", "home_page", "login") + frappe.db.commit() - frappe.flags.in_test = False + frappe.flags.in_test = False def create_test_data(): diff --git a/check_run/tests/test_check_run.py b/check_run/tests/test_check_run.py index 58d13b7b..aced74b4 100644 --- a/check_run/tests/test_check_run.py +++ b/check_run/tests/test_check_run.py @@ -1,5 +1,5 @@ -# Copyright (c) 2025, AgriTheory and contributors -# For license information, please see license.txt +import datetime +import pytest import datetime import re diff --git a/check_run/tests/test_payment_entry.py b/check_run/tests/test_payment_entry.py index 9596a93b..c185c1a4 100644 --- a/check_run/tests/test_payment_entry.py +++ b/check_run/tests/test_payment_entry.py @@ -1,6 +1,3 @@ -# Copyright (c) 2025, AgriTheory and contributors -# For license information, please see license.txt - import datetime import pytest import frappe @@ -11,12 +8,9 @@ from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry -from check_run.tests.test_check_run import cr # noqa - year = datetime.date.today().year -@pytest.mark.order(20) def test_partial_payment_payment_entry_with_terms(): pi_name = frappe.get_all( "Purchase Invoice", @@ -52,7 +46,6 @@ def test_partial_payment_payment_entry_with_terms(): assert pi.outstanding_amount == 0.0 -@pytest.mark.order(21) def test_payment_payment_entry_of_multiple_terms(): pi_name = frappe.get_all( "Purchase Invoice", @@ -82,7 +75,6 @@ def test_payment_payment_entry_of_multiple_terms(): assert pi.payment_schedule[0].outstanding == 1666.67 -@pytest.mark.order(22) def test_partial_payment_payment_entry_without_terms(): pi_name = frappe.get_all( "Purchase Invoice", @@ -145,7 +137,6 @@ def test_partial_payment_payment_entry_without_terms(): assert pi.outstanding_amount == 0.00 -@pytest.mark.order(23) def test_outstanding_amount_in_check_run(cr): pi_name = frappe.get_all( "Purchase Invoice", From c92e21bc2f9635928607301eb4d0ad31387ff01e Mon Sep 17 00:00:00 2001 From: Rohan Bansal Date: Tue, 17 Jun 2025 12:50:24 +0530 Subject: [PATCH 5/8] chore: remove stray editorconfig file --- check_run/.editorconfig | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 check_run/.editorconfig diff --git a/check_run/.editorconfig b/check_run/.editorconfig deleted file mode 100644 index b72767b9..00000000 --- a/check_run/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -# Root editor config file -root = true - -# Common settings -[*] -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true -charset = utf-8 - -# python, js indentation settings -[{*.py,*.js,*.vue,*.css,*.scss,*.html}] -indent_style = tab -indent_size = 2 -max_line_length = 99 From 51d03fc6692ea20f6fe9c598104cd31257459bad Mon Sep 17 00:00:00 2001 From: Rohan Bansal Date: Tue, 17 Jun 2025 12:51:26 +0530 Subject: [PATCH 6/8] ci: add pre-commit fixes --- .pre-commit-config.yaml | 2 +- check_run/public/js/check_run/CheckRun.vue | 90 ++++++++++------------ 2 files changed, 41 insertions(+), 51 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a6c8235d..02681339 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,7 +4,7 @@ fail_fast: false repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 + rev: v5.0.0 hooks: - id: trailing-whitespace files: 'check_run.*' diff --git a/check_run/public/js/check_run/CheckRun.vue b/check_run/public/js/check_run/CheckRun.vue index 3b1dde4c..6ce03c8d 100644 --- a/check_run/public/js/check_run/CheckRun.vue +++ b/check_run/public/js/check_run/CheckRun.vue @@ -6,22 +6,15 @@
    - - Party - - + Party +
    - +
    Document @@ -32,10 +25,13 @@
    - + Mode of Payment ⬍ - + @@ -43,10 +39,7 @@
    -