From a064e3a2006510e7921bdd1a78efec6b077d9052 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 8 Feb 2016 14:51:14 +0530 Subject: [PATCH] [minor] validate address template before saving --- erpnext/utilities/doctype/address/address.py | 21 ++++++++++++------- .../address_template/address_template.py | 3 +++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/erpnext/utilities/doctype/address/address.py b/erpnext/utilities/doctype/address/address.py index da529fb5b3..7f47731453 100644 --- a/erpnext/utilities/doctype/address/address.py +++ b/erpnext/utilities/doctype/address/address.py @@ -8,6 +8,7 @@ from frappe import throw, _ 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 @@ def get_address_display(address_dict): 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 aa6ef25ab0..e759be4919 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 @@ class AddressTemplate(Document): 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: