Merge pull request #1191 from rmehta/filter-fix
[filter] fix for filters and fix tabs in web_form.html
This commit is contained in:
commit
9bf2c8e6b7
12 changed files with 206 additions and 172 deletions
|
|
@ -102,7 +102,7 @@ class CustomizeForm(Document):
|
|||
meta = frappe.get_meta(self.doc_type)
|
||||
# doctype property setters
|
||||
for property in self.doctype_properties:
|
||||
if property != "idx" and self.get(property) != meta.get(property):
|
||||
if self.get(property) != meta.get(property):
|
||||
self.make_property_setter(property=property, value=self.get(property),
|
||||
property_type=self.doctype_properties[property])
|
||||
|
||||
|
|
@ -117,7 +117,7 @@ class CustomizeForm(Document):
|
|||
continue
|
||||
|
||||
for property in self.docfield_properties:
|
||||
if df.get(property) != meta_df[0].get(property):
|
||||
if property != "idx" and df.get(property) != meta_df[0].get(property):
|
||||
if property == "fieldtype":
|
||||
self.validate_fieldtype_change(df, meta_df[0].get(property), df.get(property))
|
||||
|
||||
|
|
@ -260,4 +260,3 @@ class CustomizeForm(Document):
|
|||
and ifnull(field_name, '')!='naming_series'""", self.doc_type)
|
||||
frappe.clear_cache(doctype=self.doc_type)
|
||||
self.fetch_to_customize()
|
||||
|
||||
|
|
|
|||
|
|
@ -72,111 +72,3 @@ def delete_fields(args_dict, delete=0):
|
|||
", ".join(["DROP COLUMN `%s`" % f for f in fields if f in existing_fields])
|
||||
frappe.db.commit()
|
||||
frappe.db.sql(query)
|
||||
|
||||
def rename_field(doctype, old_fieldname, new_fieldname):
|
||||
"""This functions assumes that doctype is already synced"""
|
||||
|
||||
meta = frappe.get_meta(doctype, cached=False)
|
||||
new_field = meta.get_field(new_fieldname)
|
||||
if not new_field:
|
||||
print "rename_field: " + (new_fieldname) + " not found in " + doctype
|
||||
return
|
||||
|
||||
if new_field.fieldtype == "Table":
|
||||
# change parentfield of table mentioned in options
|
||||
frappe.db.sql("""update `tab%s` set parentfield=%s
|
||||
where parentfield=%s""" % (new_field.options.split("\n")[0], "%s", "%s"),
|
||||
(new_fieldname, old_fieldname))
|
||||
elif new_field.fieldtype not in no_value_fields:
|
||||
if meta.issingle:
|
||||
frappe.db.sql("""update `tabSingles` set field=%s
|
||||
where doctype=%s and field=%s""",
|
||||
(new_fieldname, doctype, old_fieldname))
|
||||
else:
|
||||
# copy field value
|
||||
frappe.db.sql("""update `tab%s` set `%s`=`%s`""" % \
|
||||
(doctype, new_fieldname, old_fieldname))
|
||||
|
||||
update_reports(doctype, old_fieldname, new_fieldname)
|
||||
update_users_report_view_settings(doctype, old_fieldname, new_fieldname)
|
||||
|
||||
# update in property setter
|
||||
frappe.db.sql("""update `tabProperty Setter` set field_name = %s
|
||||
where doc_type=%s and field_name=%s""", (new_fieldname, doctype, old_fieldname))
|
||||
|
||||
def update_reports(doctype, old_fieldname, new_fieldname):
|
||||
def _get_new_sort_by(report_dict, report, key):
|
||||
sort_by = report_dict.get(key) or ""
|
||||
if sort_by:
|
||||
sort_by = sort_by.split(".")
|
||||
if len(sort_by) > 1:
|
||||
if sort_by[0]==doctype and sort_by[1]==old_fieldname:
|
||||
sort_by = doctype + "." + new_fieldname
|
||||
report_dict["updated"] = True
|
||||
elif report.ref_doctype == doctype and sort_by[0]==old_fieldname:
|
||||
sort_by = doctype + "." + new_fieldname
|
||||
report_dict["updated"] = True
|
||||
|
||||
if isinstance(sort_by, list):
|
||||
sort_by = '.'.join(sort_by)
|
||||
|
||||
return sort_by
|
||||
|
||||
reports = frappe.db.sql("""select name, ref_doctype, json from tabReport
|
||||
where report_type = 'Report Builder' and ifnull(is_standard, 'No') = 'No'
|
||||
and json like %s and json like %s""",
|
||||
('%%%s%%' % old_fieldname , '%%%s%%' % doctype), as_dict=True)
|
||||
|
||||
for r in reports:
|
||||
report_dict = json.loads(r.json)
|
||||
|
||||
# update filters
|
||||
new_filters = []
|
||||
for f in report_dict.get("filters"):
|
||||
if f and len(f) > 1 and f[0] == doctype and f[1] == old_fieldname:
|
||||
new_filters.append([doctype, new_fieldname, f[2], f[3]])
|
||||
report_dict["updated"] = True
|
||||
else:
|
||||
new_filters.append(f)
|
||||
|
||||
# update columns
|
||||
new_columns = []
|
||||
for c in report_dict.get("columns"):
|
||||
if c and len(c) > 1 and c[0] == old_fieldname and c[1] == doctype:
|
||||
new_columns.append([new_fieldname, doctype])
|
||||
report_dict["updated"] = True
|
||||
else:
|
||||
new_columns.append(c)
|
||||
|
||||
# update sort by
|
||||
new_sort_by = _get_new_sort_by(report_dict, r, "sort_by")
|
||||
new_sort_by_next = _get_new_sort_by(report_dict, r, "sort_by_next")
|
||||
|
||||
if report_dict.get("updated"):
|
||||
new_val = json.dumps({
|
||||
"filters": new_filters,
|
||||
"columns": new_columns,
|
||||
"sort_by": new_sort_by,
|
||||
"sort_order": report_dict.get("sort_order"),
|
||||
"sort_by_next": new_sort_by_next,
|
||||
"sort_order_next": report_dict.get("sort_order_next")
|
||||
})
|
||||
|
||||
frappe.db.sql("""update `tabReport` set `json`=%s where name=%s""", (new_val, r.name))
|
||||
|
||||
def update_users_report_view_settings(doctype, ref_fieldname, new_fieldname):
|
||||
user_report_cols = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` where
|
||||
defkey like '_list_settings:%'""")
|
||||
for key, value in user_report_cols:
|
||||
new_columns = []
|
||||
columns_modified = False
|
||||
for field, field_doctype in json.loads(value):
|
||||
if field == ref_fieldname and field_doctype == doctype:
|
||||
new_columns.append([new_fieldname, field_doctype])
|
||||
columns_modified=True
|
||||
else:
|
||||
new_columns.append([field, field_doctype])
|
||||
|
||||
if columns_modified:
|
||||
frappe.db.sql("""update `tabDefaultValue` set defvalue=%s
|
||||
where defkey=%s""" % ('%s', '%s'), (json.dumps(new_columns), key))
|
||||
|
|
|
|||
18
frappe/model/utils/__init__.py
Normal file
18
frappe/model/utils/__init__.py
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# MIT License. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe, json
|
||||
from frappe import _
|
||||
"""
|
||||
Model utilities, unclassified functions
|
||||
"""
|
||||
|
||||
def set_default(doc, key):
|
||||
"""Set is_default property of given doc and unset all others filtered by given key."""
|
||||
if not doc.is_default:
|
||||
frappe.db.set(doc, "is_default", 1)
|
||||
|
||||
frappe.db.sql("""update `tab%s` set `is_default`=0
|
||||
where `%s`=%s and name!=%s""" % (doc.doctype, key, "%s", "%s"),
|
||||
(doc.get(key), doc.name))
|
||||
115
frappe/model/utils/rename_field.py
Normal file
115
frappe/model/utils/rename_field.py
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# MIT License. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe
|
||||
import json
|
||||
|
||||
def rename_field(doctype, old_fieldname, new_fieldname):
|
||||
"""This functions assumes that doctype is already synced"""
|
||||
|
||||
meta = frappe.get_meta(doctype, cached=False)
|
||||
new_field = meta.get_field(new_fieldname)
|
||||
if not new_field:
|
||||
print "rename_field: " + (new_fieldname) + " not found in " + doctype
|
||||
return
|
||||
|
||||
if new_field.fieldtype == "Table":
|
||||
# change parentfield of table mentioned in options
|
||||
frappe.db.sql("""update `tab%s` set parentfield=%s
|
||||
where parentfield=%s""" % (new_field.options.split("\n")[0], "%s", "%s"),
|
||||
(new_fieldname, old_fieldname))
|
||||
elif new_field.fieldtype not in no_value_fields:
|
||||
if meta.issingle:
|
||||
frappe.db.sql("""update `tabSingles` set field=%s
|
||||
where doctype=%s and field=%s""",
|
||||
(new_fieldname, doctype, old_fieldname))
|
||||
else:
|
||||
# copy field value
|
||||
frappe.db.sql("""update `tab%s` set `%s`=`%s`""" % \
|
||||
(doctype, new_fieldname, old_fieldname))
|
||||
|
||||
update_reports(doctype, old_fieldname, new_fieldname)
|
||||
update_users_report_view_settings(doctype, old_fieldname, new_fieldname)
|
||||
|
||||
# update in property setter
|
||||
frappe.db.sql("""update `tabProperty Setter` set field_name = %s
|
||||
where doc_type=%s and field_name=%s""", (new_fieldname, doctype, old_fieldname))
|
||||
|
||||
def update_reports(doctype, old_fieldname, new_fieldname):
|
||||
def _get_new_sort_by(report_dict, report, key):
|
||||
sort_by = report_dict.get(key) or ""
|
||||
if sort_by:
|
||||
sort_by = sort_by.split(".")
|
||||
if len(sort_by) > 1:
|
||||
if sort_by[0]==doctype and sort_by[1]==old_fieldname:
|
||||
sort_by = doctype + "." + new_fieldname
|
||||
report_dict["updated"] = True
|
||||
elif report.ref_doctype == doctype and sort_by[0]==old_fieldname:
|
||||
sort_by = doctype + "." + new_fieldname
|
||||
report_dict["updated"] = True
|
||||
|
||||
if isinstance(sort_by, list):
|
||||
sort_by = '.'.join(sort_by)
|
||||
|
||||
return sort_by
|
||||
|
||||
reports = frappe.db.sql("""select name, ref_doctype, json from tabReport
|
||||
where report_type = 'Report Builder' and ifnull(is_standard, 'No') = 'No'
|
||||
and json like %s and json like %s""",
|
||||
('%%%s%%' % old_fieldname , '%%%s%%' % doctype), as_dict=True)
|
||||
|
||||
for r in reports:
|
||||
report_dict = json.loads(r.json)
|
||||
|
||||
# update filters
|
||||
new_filters = []
|
||||
for f in report_dict.get("filters"):
|
||||
if f and len(f) > 1 and f[0] == doctype and f[1] == old_fieldname:
|
||||
new_filters.append([doctype, new_fieldname, f[2], f[3]])
|
||||
report_dict["updated"] = True
|
||||
else:
|
||||
new_filters.append(f)
|
||||
|
||||
# update columns
|
||||
new_columns = []
|
||||
for c in report_dict.get("columns"):
|
||||
if c and len(c) > 1 and c[0] == old_fieldname and c[1] == doctype:
|
||||
new_columns.append([new_fieldname, doctype])
|
||||
report_dict["updated"] = True
|
||||
else:
|
||||
new_columns.append(c)
|
||||
|
||||
# update sort by
|
||||
new_sort_by = _get_new_sort_by(report_dict, r, "sort_by")
|
||||
new_sort_by_next = _get_new_sort_by(report_dict, r, "sort_by_next")
|
||||
|
||||
if report_dict.get("updated"):
|
||||
new_val = json.dumps({
|
||||
"filters": new_filters,
|
||||
"columns": new_columns,
|
||||
"sort_by": new_sort_by,
|
||||
"sort_order": report_dict.get("sort_order"),
|
||||
"sort_by_next": new_sort_by_next,
|
||||
"sort_order_next": report_dict.get("sort_order_next")
|
||||
})
|
||||
|
||||
frappe.db.sql("""update `tabReport` set `json`=%s where name=%s""", (new_val, r.name))
|
||||
|
||||
def update_users_report_view_settings(doctype, ref_fieldname, new_fieldname):
|
||||
user_report_cols = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue` where
|
||||
defkey like '_list_settings:%'""")
|
||||
for key, value in user_report_cols:
|
||||
new_columns = []
|
||||
columns_modified = False
|
||||
for field, field_doctype in json.loads(value):
|
||||
if field == ref_fieldname and field_doctype == doctype:
|
||||
new_columns.append([new_fieldname, field_doctype])
|
||||
columns_modified=True
|
||||
else:
|
||||
new_columns.append([field, field_doctype])
|
||||
|
||||
if columns_modified:
|
||||
frappe.db.sql("""update `tabDefaultValue` set defvalue=%s
|
||||
where defkey=%s""" % ('%s', '%s'), (json.dumps(new_columns), key))
|
||||
|
|
@ -80,4 +80,5 @@ frappe.patches.v5_0.fix_text_editor_file_urls
|
|||
execute:frappe.db.sql("update `tabComment` set comment_type='Comment' where comment_doctype='Blog Post' and ifnull(comment_type, '')=''")
|
||||
frappe.patches.v5_0.modify_session
|
||||
frappe.patches.v5_0.expire_old_scheduler_logs
|
||||
execute:frappe.permissions.reset_perms("DocType")
|
||||
execute:frappe.permissions.reset_perms("DocType")
|
||||
execute:frappe.db.sql("delete from `tabProperty Setter` where `property` = 'idx'")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.model import rename_field
|
||||
from frappe.model.utils import rename_field
|
||||
from frappe.model.meta import get_table_columns
|
||||
|
||||
def execute():
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.model import rename_field
|
||||
from frappe.model.utils import rename_field
|
||||
|
||||
def execute():
|
||||
tables = frappe.db.sql_list("show tables")
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
import frappe
|
||||
from frappe.model import rename_field
|
||||
from frappe.model.utils import rename_field
|
||||
from frappe.modules import scrub, get_doctype_module
|
||||
|
||||
rename_map = {
|
||||
|
|
|
|||
|
|
@ -1029,6 +1029,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
|
|||
this.$input.cache = {};
|
||||
this.$input.autocomplete({
|
||||
minLength: 0,
|
||||
autoFocus: true,
|
||||
source: function(request, response) {
|
||||
var doctype = me.get_options();
|
||||
if(!doctype) return;
|
||||
|
|
|
|||
|
|
@ -272,7 +272,8 @@ frappe.ui.Filter = Class.extend({
|
|||
} else if(df.fieldtype=='Check') {
|
||||
df.fieldtype='Select';
|
||||
df.options='No\nYes';
|
||||
} else if(['Text','Small Text','Text Editor','Code','Tag','Comments','Dynamic Link', 'Read Only'].indexOf(df.fieldtype)!=-1) {
|
||||
} else if(['Text','Small Text','Text Editor','Code','Tag','Comments',
|
||||
'Dynamic Link','Read Only','Assign'].indexOf(df.fieldtype)!=-1) {
|
||||
df.fieldtype = 'Data';
|
||||
} else if(df.fieldtype=='Link' && this.$w.find('.condition').val()!="=") {
|
||||
df.fieldtype = 'Data';
|
||||
|
|
@ -306,13 +307,20 @@ frappe.ui.Filter = Class.extend({
|
|||
}
|
||||
|
||||
if(this.get_condition()==='like') {
|
||||
// add % only if not there at the end
|
||||
if ((val.length === 0) || (val.lastIndexOf("%") !== (val.length - 1))) {
|
||||
val = (val || "") + '%';
|
||||
// automatically append wildcards
|
||||
if(val) {
|
||||
if(val.slice(0,1) !== "%") {
|
||||
val = "%" + val;
|
||||
}
|
||||
if(val.slice(-1) !== "%") {
|
||||
val = val + "%";
|
||||
}
|
||||
}
|
||||
} else if(in_list(["in", "not in"], this.get_condition())) {
|
||||
val = $.map(val.split(","), function(v) { return strip(v); });
|
||||
} if(val === '%') val = "";
|
||||
} if(val === '%') {
|
||||
val = "";
|
||||
}
|
||||
|
||||
return val;
|
||||
},
|
||||
|
|
@ -392,6 +400,7 @@ frappe.ui.FieldSelect = Class.extend({
|
|||
.autocomplete({
|
||||
source: me.options,
|
||||
minLength: 0,
|
||||
autoFocus: true,
|
||||
focus: function(event, ui) {
|
||||
ui.item && me.$select.val(ui.item.label);
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -5,25 +5,25 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block header_actions %}
|
||||
{% if params.name or params.new %}
|
||||
<button type="submit" class="btn btn-primary btn-sm btn-form-submit">
|
||||
{{ _("Submit") if params.new else _("Update") }}</button>
|
||||
<a href="{{ pathname }}" class="btn btn-default btn-sm">
|
||||
{{ _("Cancel") }}</a>
|
||||
{% elif is_list %}
|
||||
<a href="/{{ pathname }}?new=1" class="btn btn-primary btn-new btn-sm">
|
||||
{{ _("New {0}").format(_(doc_type)) }}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if params.name or params.new %}
|
||||
<button type="submit" class="btn btn-primary btn-sm btn-form-submit">
|
||||
{{ _("Submit") if params.new else _("Update") }}</button>
|
||||
<a href="{{ pathname }}" class="btn btn-default btn-sm">
|
||||
{{ _("Cancel") }}</a>
|
||||
{% elif is_list %}
|
||||
<a href="/{{ pathname }}?new=1" class="btn btn-primary btn-new btn-sm">
|
||||
{{ _("New {0}").format(_(doc_type)) }}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- no-sidebar -->
|
||||
<div class="introduction">
|
||||
{% if introduction_text %}
|
||||
<p class="lead">{{ introduction_text }}</p>
|
||||
<hr>
|
||||
{% endif %}
|
||||
{% if introduction_text %}
|
||||
<p class="lead">{{ introduction_text }}</p>
|
||||
<hr>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if login_required and frappe.user=="Guest" %}
|
||||
<div class="login-required">
|
||||
|
|
@ -37,31 +37,31 @@
|
|||
</p>
|
||||
</div>
|
||||
{% elif is_list %}
|
||||
{% include "templates/includes/list/list.html" %}
|
||||
<script>{% include "templates/includes/list/list.js" %}</script>
|
||||
{% include "templates/includes/list/list.html" %}
|
||||
<script>{% include "templates/includes/list/list.js" %}</script>
|
||||
{% else %}
|
||||
|
||||
<br>
|
||||
|
||||
{%- macro properties(field) %}
|
||||
name="{{ field.fieldname }}" id="{{ field.fieldname }}"
|
||||
{% if field.placeholder %}placeholder="{{ field.placeholder }}"{% endif %}
|
||||
data-label="{{ field.label }}" data-fieldtype="{{ field.fieldtype }}"
|
||||
{{ (field.reqd and field.fieldtype!="Attach") and "required" or "" }}
|
||||
{{ field.read_only and "disabled" or "" }}
|
||||
name="{{ field.fieldname }}" id="{{ field.fieldname }}"
|
||||
{% if field.placeholder %}placeholder="{{ field.placeholder }}"{% endif %}
|
||||
data-label="{{ field.label }}" data-fieldtype="{{ field.fieldtype }}"
|
||||
{{ (field.reqd and field.fieldtype!="Attach") and "required" or "" }}
|
||||
{{ field.read_only and "disabled" or "" }}
|
||||
{% endmacro -%}
|
||||
|
||||
{%- macro value(field) -%}{% if doc %}{{ doc.get(field.fieldname) or field.default or "" }}{% else %}{{ getCookie(field.options) or field.default or "" }}{% endif %}{%- endmacro -%}
|
||||
|
||||
{%- macro help(field) -%}
|
||||
{% if field.description -%}
|
||||
<span class="help-block small">{{ field.description }}</span>
|
||||
{%- endif -%}
|
||||
{% if field.description -%}
|
||||
<span class="help-block small">{{ field.description }}</span>
|
||||
{%- endif -%}
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro label(field) %}
|
||||
<label for="{{ field.fieldname }}" class="control-label text-muted small">
|
||||
{{ field.label }}</label>
|
||||
<label for="{{ field.fieldname }}" class="control-label text-muted small">
|
||||
{{ field.label }}</label>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro render_field(field) %}
|
||||
|
|
@ -138,7 +138,7 @@
|
|||
<div class="row">
|
||||
<div class="col-sm-9">
|
||||
<div class="text-muted">
|
||||
<a href="{{ ('/' + doc.parent_website_route) if doc.parent_website_route else '' }}/{{ doc.page_name }}">
|
||||
<a href="{{ ('/' + doc.parent_website_route) if doc.parent_website_route else '' }}/{{ doc.page_name }}">
|
||||
{{ web_page_link_text }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -150,17 +150,17 @@
|
|||
<input type="hidden" name="name" value="{{ params.name }}">
|
||||
{%- endif %}
|
||||
|
||||
{% for section in layout %}
|
||||
<div class="row">
|
||||
{% for column in section %}
|
||||
<div class="col-sm-{{ (12 / (section|len))|int }}">
|
||||
{% for field in column %}
|
||||
{{ render_field(field) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% for section in layout %}
|
||||
<div class="row">
|
||||
{% for column in section %}
|
||||
<div class="col-sm-{{ (12 / (section|len))|int }}">
|
||||
{% for field in column %}
|
||||
{{ render_field(field) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</form>
|
||||
{% if allow_comments and not params.new -%}
|
||||
<div class="comments">
|
||||
|
|
@ -176,7 +176,7 @@
|
|||
<script>
|
||||
frappe.ready(function() {
|
||||
window.file_reading = false;
|
||||
window.success_message = "{{ success_message or "" }}";
|
||||
window.success_message = "{{ success_message or "" }}";
|
||||
frappe.datepicker_format = "{{ frappe.date_format.replace('yyyy', 'yy') }}";
|
||||
var $form = $("form[data-web-form='{{ name }}']");
|
||||
|
||||
|
|
@ -257,18 +257,18 @@ frappe.ready(function() {
|
|||
btn: $form.find("[type='submit']"),
|
||||
callback: function(data) {
|
||||
if(!data.exc) {
|
||||
window.saving = false;
|
||||
if(window.success_message) {
|
||||
$form.addClass("hide");
|
||||
$(".comments, .introduction").addClass("hide");
|
||||
scroll(0, 0);
|
||||
$(".form-message")
|
||||
.html('{{ success_message }}<p><a href="{{ success_url }}">\
|
||||
{{ _("Continue") }}</a></p>')
|
||||
.removeClass("hide");
|
||||
} else {
|
||||
window.location.href = "{{ success_url }}";
|
||||
}
|
||||
window.saving = false;
|
||||
if(window.success_message) {
|
||||
$form.addClass("hide");
|
||||
$(".comments, .introduction").addClass("hide");
|
||||
scroll(0, 0);
|
||||
$(".form-message")
|
||||
.html('{{ success_message }}<p><a href="{{ success_url }}">\
|
||||
{{ _("Continue") }}</a></p>')
|
||||
.removeClass("hide");
|
||||
} else {
|
||||
window.location.href = "{{ success_url }}";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ from frappe import _
|
|||
import frappe.model.document
|
||||
import frappe.utils
|
||||
import frappe.sessions
|
||||
import frappe.model.utils
|
||||
import werkzeug.utils
|
||||
from werkzeug.local import LocalProxy
|
||||
from werkzeug.wsgi import wrap_file
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue