### Install erpnext_thailand App Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/README.md Use this command to install the erpnext_thailand application within your Frappe bench environment. ```bash cd frappe-bench bench get-app https://github.com/ecosoft-frappe/erpnext_thailand bench install-app erpnext_thailand ``` -------------------------------- ### Loop Through Data Rows for Current Page Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Iterates through the data entries for the current page, calculating the start and end indices for the loop. It assumes a maximum of 6 entries per page. ```html {% for (var index = (page - 1) * 6; index < Math.min(page * 6, data.length - 1); index++) { %} {% var wht_line = data[index] %} ``` -------------------------------- ### Initialize Report Variables and Loop Through Pages Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Initializes variables for tracking numbers and totals, and calculates the total number of pages required for the report. It then begins a loop to iterate through each page of the report data. ```html {% var number = 0 %} {% var sum_total_base = 0 %} {% var sum_total_amount = 0 %} {% var total_page = Math.ceil((data.length - 1) / 6) %} {% for(var page = 1; page <= total_page; page++) { %} ``` -------------------------------- ### Execute Post-Model Sync Utilities Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Executes utility functions after model synchronization. This includes importing Thai zip code data. ```python execute:from erpnext_thailand.utils import import_thai_zip_code_data; import_thai_zip_code_data() ``` -------------------------------- ### Jinja Template for Sales Tax Report Summary Calculations Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/sales_tax_report/sales_tax_report.html Calculates and initializes variables for grand totals and summary data for the sales tax report. It prepares for iterating through data sets and accumulating tax base and amount. ```html {% var grand_tax_base = 0 %} {% var grand_tax_amount = 0 %} {% var grand_tax_total = 0 %} {% var number_per_set = 10 %} {% var total_set = Math.ceil((data.length - 1) / number_per_set) %} {% var summary = { "amount_base": {}, "amount_tax": 0, "amount_total": 0 } %} {% for(var set_number = 1; set_number <= total_set; set_number++) { %} {% var sum_tax_base = 0 %} {% var sum_tax_amount = 0 %} {% var sum_tax_total = 0 %} {% for (var i = (set_number - 1) * number_per_set; i < Math.min(set_number * number_per_set, data.length - 1); i++) { %} {% var row = data[i] %} {% if(summary["amount_base"].hasOwnProperty(row.tax_percent)) { %} {% summary["amount_base"].tax_percent = summary["amount_base"].tax_percent + row.tax_base %} {% } else { %} {% summary["amount_base"].tax_percent = row.tax_base %} {% } %} {% summary["amount_tax"] = summary["amount_tax"] + row.tax_amount %} {% summary["amount_total"] = summary["amount_total"] + row.tax_base + row.tax_amount %} {% } %} {% if (set_number == total_set) { %} {% } %} ``` -------------------------------- ### Render Current Page and Total Pages Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Displays the current page number and the total number of pages for the report. This is typically used for pagination within the document. ```html {%= page %} {%= total_page %} ``` -------------------------------- ### PND53 Report Jinja Templating Logic Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd53/pnd53.html Implements Jinja templating for the PND53 report, calculating page numbers, total pages, and iterating through data to display company and supplier tax details. ```html {% var number = 0 %} {% var sum_total_base = 0 %} {% var sum_total_amount = 0 %} {% var total_page = Math.ceil((data.length - 1) / 6) %} {% for(var page = 1; page <= total_page; page++) { %} {% var total_base = 0 %} {% var total_amount = 0 %} {% var company_tax = data[0].company_tax_id %} {% if(company_tax) { %} {%= company_tax.substring(0, 1) %} {%= company_tax.substring(1, 2) %} {%= company_tax.substring(2, 3) %} {%= company_tax.substring(3, 4) %} {%= company_tax.substring(4, 5) %} {%= company_tax.substring(5, 6) %} {%= company_tax.substring(6, 7) %} {%= company_tax.substring(7, 8) %} {%= company_tax.substring(8, 9) %} {%= company_tax.substring(9, 10) %} {%= company_tax.substring(10, 11) %} {%= company_tax.substring(11, 12) %} {%= company_tax.substring(12, 13) %} {% } %} {% var company_branch = data[0].company_branch %} {% if (company_branch) { %} {%= company_branch.substring(0, 1) %} {%= company_branch.substring(1, 2) %} {%= company_branch.substring(2, 3) %} {%= company_branch.substring(3, 4) %} {%= company_branch.substring(4, 5) %} {% } %} {%= page %} {%= total_page %} {% for (var index = (page - 1) * 6; index < Math.min(page * 6, data.length - 1); index++) { %} {% var wht_line = data[index] %} {% var number = number + 1 %} {%= number %} {% var supplier_tax = wht_line.supplier_tax_id %} {% if supplier_tax %} {%= supplier_tax.substring(0, 1) %} {%= supplier_tax.substring(1, 2) %} {%= supplier_tax.substring(2, 3) %} {%= supplier_tax.substring(3, 4) %} {%= supplier_tax.substring(4, 5) %} {%= supplier_tax.substring(5, 6) %} {%= supplier_tax.substring(6, 7) %} {%= supplier_tax.substring(7, 8) %} {%= supplier_tax.substring(8, 9) %} {%= supplier_tax.substring(9, 10) %} {%= supplier_tax.substring(10, 11) %} {%= supplier_tax.substring(11, 12) %} {%= supplier_tax.substring(12, 13) %} {% endif %} {% var supplier_branch = wht_line.branch %} {% if supplier_branch %} {%= supplier_branch.substring(0, 1) %} {%= supplier_branch.substring(1, 2) %} {%= supplier_branch.substring(2, 3) %} {%= supplier_branch.substring(3, 4) %} ``` -------------------------------- ### Initialize Page Totals and Render Company Tax ID Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Resets the total base and amount for the current page and then renders the company's tax ID, extracting each digit into a separate element. This section assumes the company tax ID is available in data[0].company_tax_id. ```html {% var total_base = 0 %} {% var total_amount = 0 %} {% var company_tax = data[0].company_tax_id %} {% if(company_tax) { %} {%= company_tax.substring(0, 1) %} {%= company_tax.substring(1, 2) %} {%= company_tax.substring(2, 3) %} {%= company_tax.substring(3, 4) %} {%= company_tax.substring(4, 5) %} {%= company_tax.substring(5, 6) %} {%= company_tax.substring(6, 7) %} {%= company_tax.substring(7, 8) %} {%= company_tax.substring(8, 9) %} {%= company_tax.substring(9, 10) %} {%= company_tax.substring(10, 11) %} {%= company_tax.substring(11, 12) %} {%= company_tax.substring(12, 13) %} {% } %} ``` -------------------------------- ### Purchase Tax Report Data Iteration and Calculation Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/purchase_tax_report/purchase_tax_report.html Iterates through purchase data to calculate and display tax base, tax amount, and total amount per entry. It also calculates running totals for each page and grand totals. ```html {% var grand_tax_base = 0 %} {% var grand_tax_amount = 0 %} {% var grand_tax_total = 0 %} {% var number_per_set = 10 %} {% var total_set = Math.ceil((data.length - 1) / number_per_set) %} {% for(var set_number = 1; set_number <= total_set; set_number++) { %} {% var sum_tax_base = 0 %} {% var sum_tax_amount = 0 %} {% var sum_tax_total = 0 %} {% for (var i = (set_number - 1) * number_per_set; i < Math.min(set_number * number_per_set, data.length - 1); i++) { %} {% var row = data[i] %} {% } {% if (set_number == total_set) { %} {% } **ลำดับ** **ใบกำกับภาษี** **เลขที่เอกสาร** **ชื่อผู้ขายสินค้า/ผู้ให้บริการ** **เลขประจำตัวผู้เสียภาษีอากรของชื่อผู้ขายสินค้า/ผู้ให้บริการ** **สถานประกอบการ** **มูลค่าสินค้าหรือบริการ** **จำนวนเงินภาษีมูลค่าเพิ่ม** **จำนวนเงินรวม** **วันที่** **เลขที่** **สำนักงานใหญ่** **สาขาที่** {%= i + 1 %} {% if (row.date) { %} {%= row.date.substring(8, 10) + "/" + row.date.substring(5, 7) + "/" + (Number(row.date.substring(0, 4)) + 543) %} {% } {%= row.name %} {%= row.voucher_no %} {%= row.party_name %} {%= row.tax_id %} {% if (!row.branch_code || row.branch_code == "-" || row.branch_code == "00000") { %} 00000 {% } %} {% if (row.branch_code && row.branch_code != "-" && row.branch_code != "00000") { %} {%= row.branch_code %} {% } {% var sum_tax_base = sum_tax_base + row.tax_base %} {%= row.tax_base.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %} {% var sum_tax_amount = sum_tax_amount + row.tax_amount %} {%= row.tax_amount.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %} {% var sum_tax_total = sum_tax_total + row.tax_base + row.tax_amount %} {%= (row.tax_base + row.tax_amount).toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %} **รวมหน้า** {% var grand_tax_base = grand_tax_base + sum_tax_base %} **{%= sum_tax_base.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %}** {% var grand_tax_amount = grand_tax_amount + sum_tax_amount %} **{%= sum_tax_amount.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %}** {% } ``` -------------------------------- ### Purchase Tax Report Header Generation Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/purchase_tax_report/purchase_tax_report.html Generates the header for the purchase tax report, including the tax month and year, company name, tax ID, and branch information. It dynamically displays branch details based on availability. ```html **รายงานภาษีซื้อ** **เดือนภาษี {%= month_dict[filters.month] %} ปี {%= parseInt(filters.year) + 543 %}** ชื่อผู้ประกอบการ {%= data[0].company_name %} เลขประจำตัวผู้เสียภาษีอากร {%= data[0].company_tax_id %} ชื่อสถานประกอบการ {%= data[0].company_name %} {% if (!data[0].company_branch_code || data[0].company_branch_code == "-" || data[0].company_branch_code == "00000") { %} {% } else { %} {% } %} สำนักงานใหญ่ {% if (data[0].company_branch_code && data[0].company_branch_code != "-" && data[0].company_branch_code != "00000") { %} {% } else { %} {% } %} สาขาที่ {% if (data[0].company_branch_code && data[0].company_branch_code != "-" && data[0].company_branch_code != "00000") { %} {%= data[0].company_branch_code %} {% } %} {{ __("หน้าที่ {0} / {1}", [` `, ` `]) }} ที่อยู่ {{ data[0].company_address_line1 }} {{ data[0].company_address_line2 }} {{ data[0].company_city }} {{ data[0].company_county }} {{ data[0].company_state }} {{ data[0].company_pincode }} ``` -------------------------------- ### Calculate and Format Total Base and Amount Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Accumulates the total base and total amount for tax lines, and formats the current line's tax base and tax amount to two decimal places. ```Jinja {% var total_base = total_base + wht_line.tax_base %} {% var sum_total_base = sum_total_base + wht_line.tax_base %} {%= wht_line.tax_base.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) %} ``` ```Jinja {% var total_amount = total_amount + wht_line.tax_amount %} {% var sum_total_amount = sum_total_amount + wht_line.tax_amount %} {%= wht_line.tax_amount.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) %} ``` -------------------------------- ### Rerun Deposit Custom Fields Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Reruns the patch for adding deposit custom fields. ```python erpnext_thailand.patches.rerun_deposit_custom_fields ``` -------------------------------- ### Jinja Template for Sales Tax Report Table Headers Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/sales_tax_report/sales_tax_report.html Defines the table headers for the sales tax report, including columns for sequence number, invoice details, party information, tax percentage, amounts, and dates. It uses Jinja for dynamic rendering. ```html **ลำดับ** **ใบกำกับภาษี** **เลขที่เอกสาร** **ชื่อผู้ซื้อสินค้า/ผู้รับบริการ** **เลขประจำตัวผู้เสียภาษีอากรของชื่อผู้ซื้อสินค้า/ผู้รับบริการ** **สถานประกอบการ** **% ภาษี** **มูลค่าสินค้าหรือบริการ** **จำนวนเงินภาษีมูลค่าเพิ่ม** **จำนวนเงินรวม** **วันที่** **เลขที่** **สำนักงานใหญ่** **สาขาที่** ``` -------------------------------- ### Apply Sales Tax Invoice Tax Percent Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to update the tax percent in sales tax invoices. ```python erpnext_thailand.patches.update_sales_tax_invoice_tax_percent ``` -------------------------------- ### Jinja Template for Sales Tax Report Table Rows Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/sales_tax_report/sales_tax_report.html Renders individual rows of the sales tax report table, displaying details for each transaction. It includes formatting for dates, party names, tax IDs, branch codes, tax percentages, and monetary values. ```html {%= i + 1 %} {% if (row.date) { %} {%= row.date.substring(8, 10) + "/" + row.date.substring(5, 7) + "/" + (Number(row.date.substring(0, 4)) + 543) %} {% } %} {%= row.name %} {%= row.voucher_no %} {%= row.party_name %} {%= row.tax_id %} {% if (!row.branch_code || row.branch_code == "-" || row.branch_code == "00000") { %} 00000 {% } %} {% if (row.branch_code && row.branch_code != "-" && row.branch_code != "00000") { %} {%= row.branch_code %} {% } %} {%= row.tax_percent %} {% var sum_tax_base = sum_tax_base + row.tax_base %} {%= row.tax_base.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %} {% var sum_tax_amount = sum_tax_amount + row.tax_amount %} {%= row.tax_amount.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %} ``` -------------------------------- ### Render Company Branch Information Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Renders the company's branch information by extracting each character into a separate element. This assumes the company branch is available in data[0].company_branch. ```html {% var company_branch = data[0].company_branch %} {% if (company_branch) { %} {%= company_branch.substring(0, 1) %} {%= company_branch.substring(1, 2) %} {%= company_branch.substring(2, 3) %} {%= company_branch.substring(3, 4) %} {%= company_branch.substring(4, 5) %} {% } %} ``` -------------------------------- ### CSS for Purchase Tax Report Formatting Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/purchase_tax_report/purchase_tax_report.html Defines styles for the purchase tax report, including font, margins, table formatting, and column widths. It also includes a Thai month dictionary for dynamic date display. ```css @font-face { font-family: "THSarabun"; src: url("{{ frappe.urllib.get_full_url('/assets/erpnext_thailand/fonts/THSarabun.ttf') }}") format("truetype"); font-weight: normal; } .print-format { font-family: "THSarabun" !important; font-size: 17px; margin-left: 3mm; margin-right: 3mm; margin-bottom: 0mm; margin-top: 47mm; } .title { font-size: 24px !important; } .month { font-size: 20px !important; } .checkbox, .uncheckbox { display: inline-block; width: 15px; height: 15px; border: 2px solid #333; position: relative; text-align: center; line-height: 15px; font-size: 15px; margin: 0px; vertical-align: middle; } .checkbox::after { content: "✔"; } .print-format table { width: 100%; border-collapse: collapse; } .print-format td { vertical-align: top !important; padding: 2px !important; color: #000000 !important; line-height: 1.2; } .print-format th { vertical-align: top !important; padding: 2px !important; border: 1px solid #000000; color: #000000 !important; } .border-left-right { border-left: 1px solid black; border-right: 1px solid black; } .border { border: 1px solid black; } .col-1 { width: 2%; } .col-2 { width: 6%; } .col-3 { width: 11%; } .col-4 { width: 11%; } .col-5 { width: 19%; } .col-6 { width: 13%; } .col-7 { width: 7%; } .col-8 { width: 7%; } .col-9 { width: 8%; } .col-10 { width: 8%; } .col-11 { width: 8%; } .bg-grey { background-color: #d3d3d3; } {% var month_dict = { "1": "มกราคม", "2": "กุมภาพันธ์", "3": "มีนาคม", "4": "เมษายน", "5": "พฤษภาคม", "6": "มิถุนายน", "7": "กรกฎาคม", "8": "สิงหาคม", "9": "กันยายน", "10": "ตุลาคม", "11": "พฤศจิกายน", "12": "ธันวาคม", } %} ``` -------------------------------- ### Display Total Formatted Amounts Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Displays the accumulated total base and total amount, formatted to two decimal places. This is typically shown at the end of a report section. ```Jinja {%= total_base.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) %} ``` ```Jinja {%= total_amount.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) %} ``` -------------------------------- ### Add Deposit Custom Fields Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add custom fields related to deposits. ```python erpnext_thailand.patches.add_deposit_custom_fields ``` -------------------------------- ### Display Tax Description Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Displays the description of the withholding tax line item. ```Jinja {%= wht_line.description %} ``` -------------------------------- ### Display Address Details Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Conditionally displays address components (line1, city, county, state, pincode) if they are present for the tax payer. ```Jinja {% if wht_line.address_line1 %} {%= wht_line.address_line1 %} {% endif %} {% if wht_line.city %} {%= wht_line.city %} {% endif %} {% if wht_line.county %} {%= wht_line.county %} {% endif %} {% if wht_line.state %} {%= wht_line.state %} {% endif %} {% if wht_line.pincode %} {%= wht_line.pincode %} {% endif %} ``` -------------------------------- ### Define THSarabun Font and Report Styles Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Defines the THSarabun font using a URL to the font file and sets basic styling for the report, including margins and font size. This ensures consistent typography and layout for the PND3 report. ```css @font-face { font-family: "THSarabun"; src: url("{{ frappe.urllib.get_full_url('/assets/erpnext_thailand/fonts/THSarabun.ttf') }}") format("truetype"); } .print-format { margin-top: 0mm; margin-left: 0mm; margin-right: 0mm; margin-bottom: 0mm; } .o_report_rd_withholding_tax_report_pnd3 { font-family: "THSarabun"; font-size: 18px; line-height: 90%; } ``` -------------------------------- ### Rerun Is Deposit Invoice Position in Invoice Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Reruns the patch for 'is_deposit_invoice_position_in_invoice'. ```python erpnext_thailand.patches.rerun_is_deposit_invoice_position_in_invoice ``` -------------------------------- ### Add Deposit Amount Field Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add the 'deposit_amount' field. ```python erpnext_thailand.patches.add_deposit_amount_field ``` -------------------------------- ### Jinja Template for Sales Tax Report Header Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/sales_tax_report/sales_tax_report.html Renders the header section of the sales tax report, including the report title, tax period, company details, and address. It uses Jinja templating to dynamically insert data. ```html {% var month_dict = { "1": "มกราคม", "2": "กุมภาพันธ์", "3": "มีนาคม", "4": "เมษายน", "5": "พฤษภาคม", "6": "มิถุนายน", "7": "กรกฎาคม", "8": "สิงหาคม", "9": "กันยายน", "10": "ตุลาคม", "11": "พฤศจิกายน", "12": "ธันวาคม", } %} **รายงานภาษีขาย** **เดือนภาษี {%= month_dict[filters.month] %} ปี {%= parseInt(filters.year) + 543 %}** ชื่อผู้ประกอบการ {%= data[0].company_name %} เลขประจำตัวผู้เสียภาษีอากร {%= data[0].company_tax_id %} ชื่อสถานประกอบการ {%= data[0].company_name %} {% if (!data[0].company_branch_code || data[0].company_branch_code == "-" || data[0].company_branch_code == "00000") { %} {% } else { %} {% } %} สำนักงานใหญ่      {% if (data[0].company_branch_code && data[0].company_branch_code != "-" && data[0].company_branch_code != "00000") { %} {% } else { %} {% } %} สาขาที่ {% if (data[0].company_branch_code && data[0].company_branch_code != "-" && data[0].company_branch_code != "00000") { %} {%= data[0].company_branch_code %} {% } %} {{ __('หน้าที่ {0} / {1}', [` `, ` `]) }} ที่อยู่ {{ data[0].company_address_line1 }} {{ data[0].company_address_line2 }} {{ data[0].company_city }} {{ data[0].company_county }} {{ data[0].company_state }} {{ data[0].company_pincode }} ``` -------------------------------- ### Update Document Naming Settings Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to update document naming settings. ```python erpnext_thailand.patches.update_document_naming_settings ``` -------------------------------- ### Add Custom Field for Tax Invoice Creation Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add a custom field for creating tax invoices. ```python erpnext_thailand.patches.add_custom_field_create_tax_invoice ``` -------------------------------- ### Add Currency Bot Fields Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add fields related to the currency bot. ```python erpnext_thailand.patches.add_currency_bot_fields ``` -------------------------------- ### Display Tax Payer Name Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Displays the first and last name of the tax payer. ```Jinja {%= wht_line.firstname %} ``` ```Jinja {%= wht_line.lastname %} ``` -------------------------------- ### Rerun Purchase Invoice Custom Fields Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Reruns the patch for adding custom fields to purchase invoices. ```python erpnext_thailand.patches.rerun_purchase_invoice_custom_fields ``` -------------------------------- ### Display Grand Totals on Last Page Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Conditionally displays the grand total base and grand total amount only on the last page of the report. ```Jinja {% if page == total_page %} {%= sum_total_base.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) %} {%= sum_total_amount.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) %} {% endif %} ``` -------------------------------- ### Format Date for Thai Calendar Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Formats a given date string into DD/MM/YYYY format and adds 543 to the year to convert it to the Buddhist Era (BE) calendar, commonly used in Thailand. ```Jinja {% if wht_line.date %} {%= wht_line.date.substring(8, 10) + "/" + wht_line.date.substring(5, 7) + "/" + (Number(wht_line.date.substring(0, 4)) + 543) %} {% endif %} ``` -------------------------------- ### Update Currency Exchange Settings Frankfurter Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to update currency exchange settings for Frankfurter. ```python erpnext_thailand.patches.update_currency_exchange_settings_for_frankfurter ``` -------------------------------- ### Rename Deposit Label Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to rename the 'desposit' label to 'deposit'. ```python erpnext_thailand.patches.rename_desposit_to_deposit_label ``` -------------------------------- ### Extract Supplier Branch Details Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Extracts and displays individual characters of the supplier branch identifier. This is useful for parsing or displaying specific parts of a branch code. ```Jinja {% var supplier_branch = wht_line.branch %} {% if supplier_branch %} {%= supplier_branch.substring(0, 1) %} {%= supplier_branch.substring(1, 2) %} {%= supplier_branch.substring(2, 3) %} {%= supplier_branch.substring(3, 4) %} {%= supplier_branch.substring(4, 5) %} {% endif %} ``` -------------------------------- ### Display Tax Payer Information Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Displays the tax payer's identifier. ```Jinja {%= wht_line.tax_payer %} ``` -------------------------------- ### Style Report Elements for PND3 Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Provides specific CSS classes to style various elements within the PND3 withholding tax report. These classes control layout, alignment, and spacing for different data fields like company tax ID, supplier details, and amounts. ```css .box-tax { width: 12px; text-align: center; vertical-align: sub; display: inline-block; } .tab-tax { margin-left: 7px; } .company-tax-group { height: 38px; } .number-page-group { margin-top: 7px; height: 15px; } .wht-group { margin-top: 89px; height: 442px; } .supplier-tax-group { height: 20px; } .supplier-name-group { margin-top: 8px; height: 15px; } .total-group { margin-top: 6px; height: 16px; } .sum-total-group { margin-top: 10px; height: 16px; } .company-tax { margin-top: 20px; margin-left: 501px; width: 234px; display: inline-block; } .company-branch { margin-top: 20px; margin-left: 277px; width: 76px; display: inline-block; } .number-page-from { margin-left: 935px; width: 38px; text-align: center; display: inline-block; } .number-page-to { margin-left: 44px; width: 48px; text-align: center; display: inline-block; } .number { margin-left: 30px; width: 44px; text-align: center; vertical-align: sub; display: inline-block; } .supplier-tax { margin-left: 6px; display: inline-block; } .supplier-branch { margin-left: 61px; display: inline-block; } .supplier-firstname { margin-left: 97px; width: 226px; vertical-align: top; display: inline-block; } .supplier-lastname { margin-left: 37px; width: 170px; vertical-align: top; display: inline-block; } .wht-date { margin-top: 5px; margin-left: 77px; width: 83px; text-align: center; vertical-align: top; display: inline-block; } .description { margin-top: 2px; margin-left: -2px; width: 150px; line-height: 1.2; vertical-align: top; display: inline-block; } .tax-rate { margin-top: 5px; margin-left: -3px; width: 30px; text-align: center; vertical-align: top; display: inline-block; } .tax-base { margin-top: 5px; margin-left: -3px; margin-right: 10px; width: 120px; vertical-align: top; text-align: right; display: inline-block; } .tax-amount { margin-top: 5px; margin-right: 10px; width: 115px; text-align: right; vertical-align: top; display: inline-block; } .tax-payer { margin-top: 5px; margin-left: -5px; width: 30px; text-align: center; vertical-align: top; display: inline-block; } .supplier-address { margin-top: 9px; margin-left: 104px; height: 22px; width: 430px; line-height: 0.7; vertical-align: top; display: inline-block; } .total-base { margin-left: 801px; margin-right: 10px; width: 124px; text-align: right; display: inline-block; } .total-amount { margin-left: -2px; margin-right: 10px; width: 117px; text-align: right; display: inline-block; } .sum-total-base { margin-left: 801px; margin-right: 10px; width: 124px; text-align: right; display: inline-block; } .sum-total-amount { margin-left: -2px; margin-right: 10px; width: 117px; text-align: right; display: inline-block; } ``` -------------------------------- ### Format Tax Rate Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Formats the tax rate to display with exactly two decimal places, using 'en-US' locale for consistent formatting. ```Jinja {%= wht_line.tax_rate.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) %} ``` -------------------------------- ### Add Custom Field to Address Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add a custom field to the address document. ```python erpnext_thailand.patches.add_custom_field_address ``` -------------------------------- ### Rerun Expense Claim Custom Fields Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Reruns the patch for adding custom fields to expense claims. ```python erpnext_thailand.patches.rerun_expense_claim_custom_fields ``` -------------------------------- ### Add Comment Info to Print Format Field Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add comment information to print format fields. ```python erpnext_thailand.patches.add_print_format_field_add_comment_info ``` -------------------------------- ### Format Currency in Purchase Tax Report Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/purchase_tax_report/purchase_tax_report.html Formats currency values to two decimal places with US locale for display in the purchase tax report. This is used for displaying tax base, tax amount, and grand total. ```HTML {% var grand_tax_total = grand_tax_total + sum_tax_total %} **{%= sum_tax_total.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %}** **รวมทั้งสิ้น** **{%= grand_tax_base.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %}** **{%= grand_tax_amount.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %}** **{%= grand_tax_total.toLocaleString("en-US", {minimumFractionDigits: 2, maximumFractionDigits: 2}) %}** {% } ``` -------------------------------- ### Add Petty Cash Holder Field to GL Entry Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add the 'petty_cash_holder' field to general ledger entries. ```python erpnext_thailand.patches.add_gl_entry_field_petty_cash_holder ``` -------------------------------- ### CSS for Sales Tax Report Print Format Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/sales_tax_report/sales_tax_report.html Defines styles for the sales tax report's print format, including font, margins, table layout, and cell styling. It also includes a font-face declaration for THSarabun font. ```css @font-face { font-family: "THSarabun"; src: url("{{ frappe.urllib.get_full_url('/assets/erpnext_thailand/fonts/THSarabun.ttf') }}") format("truetype"); font-weight: normal; } .print-format { font-family: "THSarabun" !important; font-size: 17px; margin-left: 3mm; margin-right: 3mm; margin-bottom: 0mm; margin-top: 47mm; } .title { font-size: 24px !important; } .month { font-size: 20px !important; } .checkbox, .uncheckbox { display: inline-block; width: 15px; height: 15px; border: 2px solid #333; position: relative; text-align: center; line-height: 15px; font-size: 15px; margin: 0px; vertical-align: middle; } .checkbox::after { content: "✔"; } .print-format table { width: 100%; border-collapse: collapse; } .print-format td { vertical-align: top !important; padding: 2px !important; color: #000000 !important; line-height: 1.2; } .print-format th { vertical-align: top !important; padding: 2px !important; border: 1px solid #000000; color: #000000 !important; } .border-left-right { border-left: 1px solid black; border-right: 1px solid black; } .border { border: 1px solid black; } .col-1 { width: 2%; } .col-2 { width: 6%; } .col-3 { width: 10%; } .col-4 { width: 10%; } .col-5 { width: 18%; } .col-6 { width: 13%; } .col-7 { width: 6%; } .col-8 { width: 6%; } .col-9 { width: 8%; } .col-10 { width: 8%; } .col-11 { width: 8%; } .col-12 { width: 5%; } .col-sum-1 { width: 90%; } .col-sum-2 { width: 10%; } .bg-grey { background-color: #d3d3d3; } ``` -------------------------------- ### Add Petty Cash Holder Field to Payment Entry Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add the 'petty_cash_holder' field to payment entries. ```python erpnext_thailand.patches.add_payment_entry_field_petty_cash_holder ``` -------------------------------- ### Add Petty Cash Account Field Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add the 'is_petty_cash_account' field to the account document. ```python erpnext_thailand.patches.add_account_field_is_petty_cash_account ``` -------------------------------- ### Add Petty Cash Holder Field to Expense Claim Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add the 'petty_cash_holder' field to expense claims. ```python erpnext_thailand.patches.add_expense_claim_field_petty_cash_holder ``` -------------------------------- ### Add Petty Cash Holder Field to Journal Entry Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add the 'petty_cash_holder' field to journal entries. ```python erpnext_thailand.patches.add_journal_entry_account_field_petty_cash_holder ``` -------------------------------- ### Increment Row Number and Render Supplier Tax ID Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd3/pnd3.html Increments a counter for the row number and then renders the supplier's tax ID, extracting each digit into a separate element. This assumes the supplier tax ID is available in the current data entry (wht_line.supplier_tax_id). ```html {% var number = number + 1 %} {%= number %} {% var supplier_tax = wht_line.supplier_tax_id %} {% if supplier_tax %} {%= supplier_tax.substring(0, 1) %} {%= supplier_tax.substring(1, 2) %} {%= supplier_tax.substring(2, 3) %} {%= supplier_tax.substring(3, 4) %} {%= supplier_tax.substring(4, 5) %} {%= supplier_tax.substring(5, 6) %} {%= supplier_tax.substring(6, 7) %} {%= supplier_tax.substring(7, 8) %} {%= supplier_tax.substring(8, 9) %} {%= supplier_tax.substring(9, 10) %} {%= supplier_tax.substring(10, 11) %} {%= supplier_tax.substring(11, 12) %} {%= supplier_tax.substring(12, 13) %} {% endif %} ``` -------------------------------- ### Rename Exchange Client ID to Token Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to rename the 'exchange_client_id' field to 'token'. ```python erpnext_thailand.patches.rename_exchange_client_id_to_token ``` -------------------------------- ### Add Print Format Field Default Condition Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add a default condition to print format fields. ```python erpnext_thailand.patches.add_print_format_field_default_condition ``` -------------------------------- ### Hide Series for Amended Invoices Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to hide the series for amended invoices. ```python erpnext_thailand.patches.amended_invoice_hide_series ``` -------------------------------- ### Rerun Withholding Tax Type Field Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Reruns the patch for the 'withholding_tax_type' field. ```python erpnext_thailand.patches.rerun_withholding_tax_type_field ``` -------------------------------- ### Add Custom Field for Exchange Client ID Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to add a custom field for the exchange client ID. ```python erpnext_thailand.patches.add_custom_field_exchange_client_id ``` -------------------------------- ### PND53 Report CSS Styling Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/thai_tax/report/pnd53/pnd53.html Defines CSS styles for the PND53 withholding tax report, including font, margins, and specific element styling for tax-related information. ```css @font-face { font-family: "THSarabun"; src: url("{{ frappe.urllib.get_full_url('/assets/erpnext_thailand/fonts/THSarabun.ttf') }}") format("truetype"); } .print-format { margin-top: 0mm; margin-left: 0mm; margin-right: 0mm; margin-bottom: 0mm; } .o_report_rd_withholding_tax_report_pnd53 { font-family: "THSarabun"; font-size: 18px; line-height: 90%; } .box-tax { width: 12px; text-align: center; vertical-align: sub; display: inline-block; } .tab-tax { margin-left: 7px; } .company-tax-group { height: 38px; } .number-page-group { margin-top: 5px; height: 16px; } .wht-group { margin-top: 89px; height: 420px; } .supplier-tax-group { height: 20px; } .supplier-name-group { margin-top: 3px; height: 19px; } .total-group { margin-top: 6px; height: 16px; } .sum-total-group { margin-top: 10px; height: 16px; } .company-tax { margin-top: 18px; margin-left: 501px; width: 234px; display: inline-block; } .company-branch { margin-top: 18px; margin-left: 45px; width: 76px; display: inline-block; } .number-page-from { margin-left: 930px; width: 38px; text-align: center; display: inline-block; } .number-page-to { margin-left: 44px; width: 48px; text-align: center; display: inline-block; } .number { margin-left: 31px; width: 43px; text-align: center; vertical-align: sub; display: inline-block; } .supplier-tax { margin-left: 4px; display: inline-block; } .supplier-branch { margin-left: 130px; display: inline-block; } .supplier-name { margin-left: 97px; width: 350px; vertical-align: top; display: inline-block; } .wht-date { margin-left: 84px; width: 83px; text-align: center; vertical-align: top; display: inline-block; } .description { margin-left: -2px; width: 150px; line-height: 0.8; vertical-align: top; display: inline-block; } .tax-rate { margin-left: -3px; width: 30px; text-align: center; vertical-align: top; display: inline-block; } .tax-base { margin-left: -3px; margin-right: 10px; width: 123px; vertical-align: top; text-align: right; display: inline-block; } .tax-amount { margin-right: 10px; width: 115px; text-align: right; vertical-align: top; display: inline-block; } .tax-payer { margin-left: -5px; width: 30px; text-align: center; vertical-align: top; display: inline-block; } .supplier-address { margin-top: -3px; margin-left: 104px; height: 31px; width: 344px; line-height: 0.7; vertical-align: top; display: inline-block; } .total-base { margin-left: 801px; margin-right: 10px; width: 124px; text-align: right; display: inline-block; } .total-amount { margin-left: -2px; margin-right: 10px; width: 117px; text-align: right; display: inline-block; } .sum-total-base { margin-left: 801px; margin-right: 10px; width: 124px; text-align: right; display: inline-block; } .sum-total-amount { margin-left: -2px; margin-right: 10px; width: 117px; text-align: right; display: inline-block; } ``` -------------------------------- ### Change Withholding Tax Rate Fieldtype to Float Patch Source: https://github.com/ecosoft-frappe/erpnext_thailand/blob/main/erpnext_thailand/patches.txt Applies a patch to change the fieldtype of 'withholding_tax_rate' to float. ```python erpnext_thailand.patches.change_withholding_tax_rate_fieldtype_to_float ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.