[minor] validate address template before saving
diff --git a/erpnext/utilities/doctype/address/address.py b/erpnext/utilities/doctype/address/address.py
index da529fb..7f47731 100644
--- a/erpnext/utilities/doctype/address/address.py
+++ b/erpnext/utilities/doctype/address/address.py
@@ -8,6 +8,7 @@
from frappe.utils import cstr
from frappe.model.document import Document
+from jinja2 import TemplateSyntaxError
class Address(Document):
def __setup__(self):
@@ -85,16 +86,22 @@
if not isinstance(address_dict, dict):
address_dict = frappe.db.get_value("Address", address_dict, "*", as_dict=True) or {}
- template = frappe.db.get_value("Address Template", \
- {"country": address_dict.get("country")}, "template")
- if not template:
- template = frappe.db.get_value("Address Template", \
- {"is_default": 1}, "template")
+ data = frappe.db.get_value("Address Template", \
+ {"country": address_dict.get("country")}, ["name", "template"])
+ if not data:
+ data = frappe.db.get_value("Address Template", \
+ {"is_default": 1}, ["name", "template"])
- if not template:
+ if not data:
frappe.throw(_("No default Address Template found. Please create a new one from Setup > Printing and Branding > Address Template."))
- return frappe.render_template(template, address_dict)
+ name, template = data
+
+ try:
+ return frappe.render_template(template, address_dict)
+ except TemplateSyntaxError:
+ frappe.throw(_("There is an error in your Address Template {0}").format(name))
+
def get_territory_from_address(address):
"""Tries to match city, state and country of address to existing territory"""
diff --git a/erpnext/utilities/doctype/address_template/address_template.py b/erpnext/utilities/doctype/address_template/address_template.py
index aa6ef25..e759be4 100644
--- a/erpnext/utilities/doctype/address_template/address_template.py
+++ b/erpnext/utilities/doctype/address_template/address_template.py
@@ -4,6 +4,7 @@
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
+from frappe.utils.jinja import validate_template
from frappe import _
class AddressTemplate(Document):
@@ -14,6 +15,8 @@
self.is_default = 1
frappe.msgprint(_("Setting this Address Template as default as there is no other default"))
+ validate_template(self.template)
+
def on_update(self):
if self.is_default and self.defaults:
for d in self.defaults: