seitime-frappe/webnotes/public/js/wn/model/meta.js
Nabin Hait 6154712b85 Merge branch 'develop' of github.com:webnotes/wnframework into 4.0.0-wip
Conflicts:
	config.json
	webnotes/build.py
	webnotes/translate.py
2014-01-30 13:03:17 +05:30

165 lines
No EOL
4.7 KiB
JavaScript

// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// MIT License. See license.txt
wn.provide('wn.meta.docfield_map');
wn.provide('wn.meta.docfield_copy');
wn.provide('wn.meta.docfield_list');
wn.provide('wn.meta.doctypes');
wn.provide("wn.meta.precision_map");
$.extend(wn.meta, {
// build docfield_map and docfield_list
add_field: function(df) {
wn.provide('wn.meta.docfield_map.' + df.parent);
wn.meta.docfield_map[df.parent][df.fieldname || df.label] = df;
if(!wn.meta.docfield_list[df.parent])
wn.meta.docfield_list[df.parent] = [];
// check for repeat
for(var i in wn.meta.docfield_list[df.parent]) {
var d = wn.meta.docfield_list[df.parent][i];
if(df.fieldname==d.fieldname)
return; // no repeat
}
wn.meta.docfield_list[df.parent].push(df);
},
make_docfield_copy_for: function(doctype, docname) {
var c = wn.meta.docfield_copy;
if(!c[doctype])
c[doctype] = {};
if(!c[doctype][docname])
c[doctype][docname] = {};
$.each(wn.meta.docfield_list[doctype] || [], function(i, df) {
c[doctype][docname][df.fieldname || df.label] = copy_dict(df);
})
},
get_docfield: function(dt, fn, dn) {
return wn.meta.get_docfield_copy(dt, dn)[fn];
},
get_docfields: function(doctype, name, filters) {
var docfield_map = wn.meta.get_docfield_copy(doctype, name);
var docfields = wn.meta.sort_docfields(docfield_map);
if(filters) {
docfields = wn.utils.filter_dict(docfields, filters);
}
return docfields;
},
get_restricted_fields: function(doctype, name, restricted_types) {
return $.map(wn.meta.get_docfields(doctype, name), function(df) {
return (df.fieldtype==="Link" && df.ignore_restrictions!==1 &&
restricted_types.indexOf(df.options)!==-1) ? df : null;
});
},
sort_docfields: function(docs) {
return values(docs).sort(function(a, b) { return a.idx - b.idx });
},
get_docfield_copy: function(doctype, name) {
if(!name) return wn.meta.docfield_map[doctype];
if(!(wn.meta.docfield_copy[doctype] && wn.meta.docfield_copy[doctype][name])) {
wn.meta.make_docfield_copy_for(doctype, name);
}
return wn.meta.docfield_copy[doctype][name];
},
get_fieldnames: function(doctype, name, filters) {
return $.map(wn.utils.filter_dict(wn.meta.docfield_map[doctype], filters),
function(df) { return df.fieldname; });
},
has_field: function(dt, fn) {
return wn.meta.docfield_map[dt][fn];
},
get_parentfield: function(parent_dt, child_dt) {
var df = wn.model.get("DocField", {parent:parent_dt, fieldtype:"Table",
options:child_dt})
if(!df.length)
throw "parentfield not found for " + parent_dt + ", " + child_dt;
return df[0].fieldname;
},
get_label: function(dt, fn, dn) {
if(fn==="owner") {
return "Owner";
} else {
return this.get_docfield(dt, fn, dn).label || fn;
}
},
get_print_formats: function(doctype) {
var print_format_list = ["Standard"];
var default_print_format = locals.DocType[doctype].default_print_format;
var print_formats = wn.model.get("Print Format", {doc_type: doctype})
.sort(function(a, b) { return (a > b) ? 1 : -1; });
$.each(print_formats, function(i, d) {
if(!in_list(print_format_list, d.name))
print_format_list.push(d.name);
});
if(default_print_format && default_print_format != "Standard") {
var index = print_format_list.indexOf(default_print_format) - 1;
print_format_list.sort().splice(index, 1);
print_format_list.unshift(default_print_format);
}
return print_format_list;
},
sync_messages: function(doc) {
if(doc.__messages) {
$.extend(wn._messages, doc.__messages);
}
},
get_field_currency: function(df, doc) {
var currency = wn.boot.sysdefaults.currency;
if(!doc && cur_frm)
doc = cur_frm.doc;
if(df && df.options) {
if(doc && df.options.indexOf(":")!=-1) {
var options = df.options.split(":");
if(options.length==3) {
// get reference record e.g. Company
var docname = doc[options[1]];
if(!docname && cur_frm) {
docname = cur_frm.doc[options[1]];
}
currency = wn.model.get_value(options[0], docname, options[2]) ||
wn.model.get_value(":" + options[0], docname, options[2]) ||
currency;
}
} else if(doc && doc[df.options]) {
currency = doc[df.options];
} else if(cur_frm && cur_frm.doc[df.options]) {
currency = cur_frm.doc[df.options];
}
}
return currency;
},
get_field_precision: function(df, doc) {
var precision = wn.defaults.get_default("float_precision") || 3;
if(df && df.fieldtype === "Currency") {
var currency = this.get_field_currency(df, doc);
var number_format = get_number_format(currency);
var number_format_info = get_number_format_info(number_format);
precision = number_format_info.precision || precision;
}
return precision;
},
});