feat: add jinja templating in contract template
diff --git a/erpnext/crm/doctype/contract/contract.js b/erpnext/crm/doctype/contract/contract.js
index ee9e895..6c0d739 100644
--- a/erpnext/crm/doctype/contract/contract.js
+++ b/erpnext/crm/doctype/contract/contract.js
@@ -1,23 +1,27 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
-cur_frm.add_fetch("contract_template", "contract_terms", "contract_terms");
-cur_frm.add_fetch("contract_template", "requires_fulfilment", "requires_fulfilment");
-
-// Add fulfilment terms from contract template into contract
frappe.ui.form.on("Contract", {
contract_template: function (frm) {
- // Populate the fulfilment terms table from a contract template, if any
if (frm.doc.contract_template) {
- frappe.model.with_doc("Contract Template", frm.doc.contract_template, function () {
- var tabletransfer = frappe.model.get_doc("Contract Template", frm.doc.contract_template);
-
- frm.doc.fulfilment_terms = [];
- $.each(tabletransfer.fulfilment_terms, function (index, row) {
- var d = frm.add_child("fulfilment_terms");
- d.requirement = row.requirement;
- frm.refresh_field("fulfilment_terms");
- });
+ frappe.call({
+ method: 'erpnext.crm.doctype.contract_template.contract_template.get_contract_template',
+ args: {
+ template_name: frm.doc.contract_template,
+ doc: frm.doc
+ },
+ callback: function(r) {
+ if(r && r.message){
+ frm.set_value("contract_terms", r.message.contract_terms);
+
+ // Populate the fulfilment terms table from a contract template, if any
+ r.message.contract_template.fulfilment_terms.forEach(element => {
+ let d = frm.add_child("fulfilment_terms");
+ d.requirement = element.requirement;
+ });
+ frm.refresh_field("fulfilment_terms");
+ }
+ }
});
}
}
diff --git a/erpnext/crm/doctype/contract/contract.json b/erpnext/crm/doctype/contract/contract.json
index 0026e4a..fbc9f1c 100755
--- a/erpnext/crm/doctype/contract/contract.json
+++ b/erpnext/crm/doctype/contract/contract.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"allow_import": 1,
"allow_rename": 1,
"creation": "2018-04-12 06:32:04.582486",
@@ -175,6 +176,7 @@
},
{
"default": "0",
+ "fetch_from": "contract_template.requires_fulfilment",
"fieldname": "requires_fulfilment",
"fieldtype": "Check",
"label": "Requires Fulfilment"
@@ -247,7 +249,7 @@
],
"is_submittable": 1,
"links": [],
- "modified": "2020-03-30 06:56:07.257932",
+ "modified": "2020-12-02 21:12:44.118155",
"modified_by": "Administrator",
"module": "CRM",
"name": "Contract",
diff --git a/erpnext/crm/doctype/contract_template/contract_template.py b/erpnext/crm/doctype/contract_template/contract_template.py
index 601ee9a..48ab8aa 100644
--- a/erpnext/crm/doctype/contract_template/contract_template.py
+++ b/erpnext/crm/doctype/contract_template/contract_template.py
@@ -5,6 +5,29 @@
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
+from frappe.utils.jinja import validate_template
+from six import string_types
+import json
class ContractTemplate(Document):
pass
+
+ def validate(self):
+ if self.contract_terms:
+ validate_template(self.contract_terms)
+
+@frappe.whitelist()
+def get_contract_template(template_name, doc):
+ if isinstance(doc, string_types):
+ doc = json.loads(doc)
+
+ contract_template = frappe.get_doc("Contract Template", template_name)
+ contract_terms = None
+
+ if contract_template.contract_terms:
+ contract_terms = frappe.render_template(contract_template.contract_terms, doc)
+
+ return {
+ 'contract_template': contract_template,
+ 'contract_terms': contract_terms
+ }
\ No newline at end of file