浏览代码

Merge branch 'develop'

version-14
Pratik Vyas 10 年前
父节点
当前提交
54aaf48137
共有 10 个文件被更改,包括 54 次插入36 次删除
  1. +1
    -1
      frappe/__version__.py
  2. +1
    -1
      frappe/hooks.py
  3. +8
    -5
      frappe/model/document.py
  4. +11
    -9
      frappe/public/js/frappe/form/grid.js
  5. +4
    -2
      frappe/public/js/frappe/form/layout.js
  6. +10
    -8
      frappe/public/js/frappe/model/create_new.js
  7. +4
    -2
      frappe/public/js/frappe/model/meta.js
  8. +12
    -7
      frappe/public/js/frappe/model/model.js
  9. +2
    -0
      frappe/utils/email_lib/email_body.py
  10. +1
    -1
      setup.py

+ 1
- 1
frappe/__version__.py 查看文件

@@ -1 +1 @@
__version__ = "4.11.0"
__version__ = "4.11.1"

+ 1
- 1
frappe/hooks.py 查看文件

@@ -3,7 +3,7 @@ app_title = "Frappe Framework"
app_publisher = "Web Notes Technologies Pvt. Ltd." app_publisher = "Web Notes Technologies Pvt. Ltd."
app_description = "Full Stack Web Application Framework in Python" app_description = "Full Stack Web Application Framework in Python"
app_icon = "assets/frappe/images/frappe.svg" app_icon = "assets/frappe/images/frappe.svg"
app_version = "4.11.0"
app_version = "4.11.1"
app_color = "#3498db" app_color = "#3498db"
app_email = "support@frappe.io" app_email = "support@frappe.io"




+ 8
- 5
frappe/model/document.py 查看文件

@@ -411,10 +411,17 @@ class Document(BaseDocument):
fn.__name__ = method.encode("utf-8") fn.__name__ = method.encode("utf-8")
return Document.hook(fn)(self, *args, **kwargs) return Document.hook(fn)(self, *args, **kwargs)


@staticmethod
def whitelist(f):
f.whitelisted = True
return f

@whitelist.__func__
def submit(self): def submit(self):
self.docstatus = 1 self.docstatus = 1
self.save() self.save()


@whitelist.__func__
def cancel(self): def cancel(self):
self.docstatus = 2 self.docstatus = 2
self.save() self.save()
@@ -451,16 +458,12 @@ class Document(BaseDocument):
elif self._action=="update_after_submit": elif self._action=="update_after_submit":
self.run_method("on_update_after_submit") self.run_method("on_update_after_submit")



def check_no_back_links_exist(self): def check_no_back_links_exist(self):
from frappe.model.delete_doc import check_if_doc_is_linked from frappe.model.delete_doc import check_if_doc_is_linked
if not self.get("ignore_links"): if not self.get("ignore_links"):
check_if_doc_is_linked(self, method="Cancel") check_if_doc_is_linked(self, method="Cancel")


@staticmethod
def whitelist(f):
f.whitelisted = True
return f

@staticmethod @staticmethod
def hook(f): def hook(f):
def add_to_return_value(self, new_return_value): def add_to_return_value(self, new_return_value):


+ 11
- 9
frappe/public/js/frappe/form/grid.js 查看文件

@@ -142,9 +142,10 @@ frappe.ui.form.Grid = Class.extend({
set_column_disp: function(fieldname, show) { set_column_disp: function(fieldname, show) {
if($.isArray(fieldname)) { if($.isArray(fieldname)) {
var me = this; var me = this;
$.each(fieldname, function(i, fname) {
for(var i=0, l=fieldname.length; i<l; i++) {
var fname = fieldname[i];
frappe.meta.get_docfield(me.doctype, fname, me.frm.docname).hidden = show ? 0 : 1; frappe.meta.get_docfield(me.doctype, fname, me.frm.docname).hidden = show ? 0 : 1;
});
}
} else { } else {
frappe.meta.get_docfield(this.doctype, fieldname, this.frm.docname).hidden = show ? 0 : 1; frappe.meta.get_docfield(this.doctype, fieldname, this.frm.docname).hidden = show ? 0 : 1;
} }
@@ -292,17 +293,17 @@ frappe.ui.form.GridRow = Class.extend({


add_buttons: function() { add_buttons: function() {
var me = this; var me = this;
if(this.doc && this.grid.is_editable()) {
if(!this.grid.$row_actions) {
this.grid.$row_actions = $('<div class="col-xs-1 pull-right" \
if(this.doc && this.grid.is_editable() && this.frm.doc[this.doc.parentfield].length <= 50) {
if(!this.grid.row_actions) {
this.grid.row_actions = '<div class="col-xs-1 pull-right" \
style="text-align: right; padding-right: 5px;">\ style="text-align: right; padding-right: 5px;">\
<span class="text-success grid-insert-row" style="padding: 4px;">\ <span class="text-success grid-insert-row" style="padding: 4px;">\
<i class="icon icon-plus-sign"></i></span>\ <i class="icon icon-plus-sign"></i></span>\
<span class="grid-delete-row" style="padding: 4px;">\ <span class="grid-delete-row" style="padding: 4px;">\
<i class="icon icon-trash"></i></span>\ <i class="icon icon-trash"></i></span>\
</div>');
</div>';
} }
$col = this.grid.$row_actions.clone().appendTo(this.row);
$col = $(this.grid.row_actions).appendTo(this.row);


if($col.width() < 50) { if($col.width() < 50) {
$col.toggle(false); $col.toggle(false);
@@ -478,9 +479,10 @@ frappe.ui.form.GridRow = Class.extend({
this.layout.refresh(this.doc); this.layout.refresh(this.doc);


// copy get_query to fields // copy get_query to fields
$.each(this.grid.fieldinfo || {}, function(fieldname, fi) {
for(var fieldname in (this.grid.fieldinfo || {})) {
var fi = this.grid.fieldinfo[fieldname];
$.extend(me.fields_dict[fieldname], fi); $.extend(me.fields_dict[fieldname], fi);
})
}


this.toggle_add_delete_button_display(this.wrapper.find(".panel:first")); this.toggle_add_delete_button_display(this.wrapper.find(".panel:first"));




+ 4
- 2
frappe/public/js/frappe/form/layout.js 查看文件

@@ -50,7 +50,8 @@ frappe.ui.form.Layout = Class.extend({


this.wrapper.find(".empty-form-alert").remove(); this.wrapper.find(".empty-form-alert").remove();


$.each(this.fields_list, function(i, fieldobj) {
for(var i=0, l=this.fields_list.length; i<l; i++) {
var fieldobj = this.fields_list[i];
if(me.doc) { if(me.doc) {
fieldobj.doc = me.doc; fieldobj.doc = me.doc;
fieldobj.doctype = me.doc.doctype; fieldobj.doctype = me.doc.doctype;
@@ -61,7 +62,8 @@ frappe.ui.form.Layout = Class.extend({
fieldobj.perm = me.frm.perm; fieldobj.perm = me.frm.perm;
}; };
fieldobj.refresh && fieldobj.refresh(); fieldobj.refresh && fieldobj.refresh();
});
}

if(this.frm && this.frm.wrapper) if(this.frm && this.frm.wrapper)
$(this.frm.wrapper).trigger("refresh-fields"); $(this.frm.wrapper).trigger("refresh-fields");
setTimeout(function() { setTimeout(function() {


+ 10
- 8
frappe/public/js/frappe/model/create_new.js 查看文件

@@ -149,20 +149,21 @@ $.extend(frappe.model, {
// create row doc // create row doc
idx = idx ? idx - 0.1 : (parent_doc[parentfield] || []).length + 1; idx = idx ? idx - 0.1 : (parent_doc[parentfield] || []).length + 1;


var d = frappe.model.get_new_doc(doctype, parent_doc, parentfield);
d.idx = idx;
var child = frappe.model.get_new_doc(doctype, parent_doc, parentfield);
child.idx = idx;


// renum for fraction // renum for fraction
if(idx !== cint(idx)) { if(idx !== cint(idx)) {
var sorted = parent_doc[parentfield].sort(function(a, b) { return a.idx - b.idx; }); var sorted = parent_doc[parentfield].sort(function(a, b) { return a.idx - b.idx; });
$.each(sorted, function(i, d) {
for(var i=0, j=sorted.length; i<j; i++) {
var d = sorted[i];
d.idx = i + 1; d.idx = i + 1;
});
}
} }


if (cur_frm && cur_frm.doc == parent_doc) cur_frm.dirty(); if (cur_frm && cur_frm.doc == parent_doc) cur_frm.dirty();


return d;
return child;
}, },


copy_doc: function(doc, from_amend, parent_doc, parentfield) { copy_doc: function(doc, from_amend, parent_doc, parentfield) {
@@ -176,11 +177,12 @@ $.extend(frappe.model, {
if(df && key.substr(0,2)!='__' if(df && key.substr(0,2)!='__'
&& !in_list(no_copy_list, key) && !in_list(no_copy_list, key)
&& !(df && (!from_amend && cint(df.no_copy)==1))) { && !(df && (!from_amend && cint(df.no_copy)==1))) {
value = doc[key];
var value = doc[key] || [];
if(df.fieldtype==="Table") { if(df.fieldtype==="Table") {
$.each(value || [], function(i, d) {
for(var i=0, j=value.length; i<j; i++) {
var d = value[i];
frappe.model.copy_doc(d, from_amend, newdoc, df.fieldname); frappe.model.copy_doc(d, from_amend, newdoc, df.fieldname);
});
}
} else { } else {
newdoc[key] = doc[key]; newdoc[key] = doc[key];
} }


+ 4
- 2
frappe/public/js/frappe/model/meta.js 查看文件

@@ -41,9 +41,11 @@ $.extend(frappe.meta, {
if(!c[doctype][docname]) if(!c[doctype][docname])
c[doctype][docname] = {}; c[doctype][docname] = {};


$.each(frappe.meta.docfield_list[doctype] || [], function(i, df) {
var docfield_list = frappe.meta.docfield_list[doctype] || [];
for(var i=0, j=docfield_list.length; i<j; i++) {
var df = docfield_list[i];
c[doctype][docname][df.fieldname || df.label] = copy_dict(df); c[doctype][docname][df.fieldname || df.label] = copy_dict(df);
})
}
}, },


get_docfield: function(dt, fn, dn) { get_docfield: function(dt, fn, dn) {


+ 12
- 7
frappe/public/js/frappe/model/model.js 查看文件

@@ -343,9 +343,12 @@ $.extend(frappe.model, {
get_no_copy_list: function(doctype) { get_no_copy_list: function(doctype) {
var no_copy_list = ['name','amended_from','amendment_date','cancel_reason']; var no_copy_list = ['name','amended_from','amendment_date','cancel_reason'];


$.each(frappe.get_doc("DocType", doctype).fields || [], function(i, df) {
var docfields = frappe.get_doc("DocType", doctype).fields || [];
for(var i=0, j=docfields.length; i<j; i++) {
var df = docfields[i];
if(cint(df.no_copy)) no_copy_list.push(df.fieldname); if(cint(df.no_copy)) no_copy_list.push(df.fieldname);
})
}

return no_copy_list; return no_copy_list;
}, },


@@ -412,9 +415,10 @@ $.extend(frappe.model, {
fieldnames = frappe.meta.get_fieldnames(doc.doctype, doc.parent, fieldnames = frappe.meta.get_fieldnames(doc.doctype, doc.parent,
{"fieldtype": ["in", ["Currency", "Float"]]}); {"fieldtype": ["in", ["Currency", "Float"]]});
} }
$.each(fieldnames, function(i, fieldname) {
for(var i=0, j=fieldnames.length; i < j; i++) {
var fieldname = fieldnames[i];
doc[fieldname] = flt(doc[fieldname], precision(fieldname, doc)); doc[fieldname] = flt(doc[fieldname], precision(fieldname, doc));
});
}
}, },


validate_missing: function(doc, fieldname) { validate_missing: function(doc, fieldname) {
@@ -428,9 +432,10 @@ $.extend(frappe.model, {
var all = [doc]; var all = [doc];
for(key in doc) { for(key in doc) {
if($.isArray(doc[key])) { if($.isArray(doc[key])) {
$.each(doc[key], function(i, d) {
all.push(d);
});
var children = doc[key];
for (var i=0, l=children.length; i < l; i++) {
all.push(children[i]);
}
} }
} }
return all; return all;


+ 2
- 0
frappe/utils/email_lib/email_body.py 查看文件

@@ -23,6 +23,8 @@ def get_email(recipients, sender='', msg='', subject='[No Subject]',
for attach in (attachments or []): for attach in (attachments or []):
emailobj.add_attachment(**attach) emailobj.add_attachment(**attach)


emailobj.validate()

return emailobj return emailobj


class EMail: class EMail:


+ 1
- 1
setup.py 查看文件

@@ -1,7 +1,7 @@
from setuptools import setup, find_packages from setuptools import setup, find_packages
import os import os


version = "4.11.0"
version = "4.11.1"


with open("requirements.txt", "r") as f: with open("requirements.txt", "r") as f:
install_requires = f.readlines() install_requires = f.readlines()


正在加载...
取消
保存