9aae0c27c2
* feat: a central place for regional address templates * set up address templates during install * why don't the tests run? * fix: remove unused variables, fix cwd * fix: .get() dicts contents * fix: choose the right default * fix: fieldname is template, not html * fix: import unittest * fix: remove unnecessary code * fix: ensure country exists * fix: ensure country exists * feat: test updating an existing template * fix(regional): DuplicateEntryError in test_update_address_template * refactor and set 'is_default' * fix codacy * fix: patch gst_fixes * fix: patch update_address_template_for_india Co-authored-by: Nabin Hait <nabinhait@gmail.com>
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
"""Import Address Templates from ./templates directory."""
|
|
import os
|
|
import frappe
|
|
|
|
def set_up_address_templates(default_country=None):
|
|
for country, html in get_address_templates():
|
|
is_default = 1 if country == default_country else 0
|
|
update_address_template(country, html, is_default)
|
|
|
|
def get_address_templates():
|
|
"""
|
|
Return country and path for all HTML files in this directory.
|
|
|
|
Returns a list of dicts.
|
|
"""
|
|
def country(file_name):
|
|
"""Convert 'united_states.html' to 'United States'."""
|
|
suffix_pos = file_name.find(".html")
|
|
country_snake_case = file_name[:suffix_pos]
|
|
country_title_case = " ".join(country_snake_case.split("_")).title()
|
|
return country_title_case
|
|
|
|
def get_file_content(file_name):
|
|
"""Convert 'united_states.html' to '/path/to/united_states.html'."""
|
|
full_path = os.path.join(template_dir, file_name)
|
|
with open(full_path, "r") as f:
|
|
content = f.read()
|
|
return content
|
|
|
|
dir_name = os.path.dirname(__file__)
|
|
template_dir = os.path.join(dir_name, "templates")
|
|
file_names = os.listdir(template_dir)
|
|
html_files = [file for file in file_names if file.endswith(".html")]
|
|
|
|
return [(country(file_name), get_file_content(file_name)) for file_name in html_files]
|
|
|
|
|
|
def update_address_template(country, html, is_default=0):
|
|
"""Update existing Address Template or create a new one."""
|
|
if not frappe.db.exists("Country", country):
|
|
frappe.log_error("Country {} for regional Address Template does not exist.".format(country))
|
|
return
|
|
|
|
if frappe.db.exists("Address Template", country):
|
|
frappe.db.set_value("Address Template", country, "template", html)
|
|
frappe.db.set_value("Address Template", country, "is_default", is_default)
|
|
else:
|
|
frappe.get_doc(dict(
|
|
doctype="Address Template",
|
|
country=country,
|
|
is_default=is_default,
|
|
template=html
|
|
)).insert()
|