blob: 1b4087d77bad347501a6e6e13f0c0a835b64de21 [file] [log] [blame]
Raffael Meyer9aae0c22020-04-08 05:26:57 +02001"""Import Address Templates from ./templates directory."""
2import os
3import frappe
4
5def set_up_address_templates(default_country=None):
6 for country, html in get_address_templates():
7 is_default = 1 if country == default_country else 0
8 update_address_template(country, html, is_default)
9
10def get_address_templates():
11 """
12 Return country and path for all HTML files in this directory.
Ankush Menat4551d7d2021-08-19 13:41:10 +053013
Raffael Meyer9aae0c22020-04-08 05:26:57 +020014 Returns a list of dicts.
15 """
16 def country(file_name):
17 """Convert 'united_states.html' to 'United States'."""
18 suffix_pos = file_name.find(".html")
19 country_snake_case = file_name[:suffix_pos]
20 country_title_case = " ".join(country_snake_case.split("_")).title()
21 return country_title_case
22
23 def get_file_content(file_name):
24 """Convert 'united_states.html' to '/path/to/united_states.html'."""
25 full_path = os.path.join(template_dir, file_name)
26 with open(full_path, "r") as f:
27 content = f.read()
28 return content
29
30 dir_name = os.path.dirname(__file__)
31 template_dir = os.path.join(dir_name, "templates")
32 file_names = os.listdir(template_dir)
33 html_files = [file for file in file_names if file.endswith(".html")]
34
35 return [(country(file_name), get_file_content(file_name)) for file_name in html_files]
36
37
38def update_address_template(country, html, is_default=0):
39 """Update existing Address Template or create a new one."""
40 if not frappe.db.exists("Country", country):
41 frappe.log_error("Country {} for regional Address Template does not exist.".format(country))
42 return
43
44 if frappe.db.exists("Address Template", country):
45 frappe.db.set_value("Address Template", country, "template", html)
46 frappe.db.set_value("Address Template", country, "is_default", is_default)
47 else:
48 frappe.get_doc(dict(
49 doctype="Address Template",
50 country=country,
51 is_default=is_default,
52 template=html
53 )).insert()