seitime-frappe/frappe/public/js/frappe/form/quick_entry.js
2017-06-02 15:00:14 +05:30

129 lines
3.1 KiB
JavaScript

frappe.provide('frappe.ui.form');
frappe.ui.form.quick_entry = function(doctype, success) {
frappe.model.with_doctype(doctype, function() {
var mandatory = $.map(frappe.get_meta(doctype).fields,
function(d) { return (d.reqd || d.bold && !d.read_only) ? d : null });
var meta = frappe.get_meta(doctype);
var doc = frappe.model.get_new_doc(doctype, null, null, true);
if(meta.quick_entry != 1) {
frappe.set_route('Form', doctype, doc.name);
return;
}
if(mandatory.length > 7) {
// too many fields, show form
frappe.set_route('Form', doctype, doc.name);
return;
}
if($.map(mandatory, function(d) { return d.fieldtype==='Table' ? d : null }).length) {
// has mandatory table, quit!
frappe.set_route('Form', doctype, doc.name);
return;
}
if(meta.autoname && meta.autoname.toLowerCase()==='prompt') {
mandatory = [{fieldname:'__name', label:__('{0} Name', [meta.name]),
reqd: 1, fieldtype:'Data'}].concat(mandatory);
}
var dialog = new frappe.ui.Dialog({
title: __("New {0}", [__(doctype)]),
fields: mandatory,
});
var update_doc = function() {
var data = dialog.get_values(true);
$.each(data, function(key, value) {
if(key==='__name') {
dialog.doc.name = value;
} else {
if(!is_null(value)) {
dialog.doc[key] = value;
}
}
});
return dialog.doc;
}
var open_doc = function() {
dialog.hide();
update_doc();
frappe.set_route('Form', doctype, doc.name);
}
dialog.doc = doc;
// refresh dependencies etc
dialog.refresh();
dialog.set_primary_action(__('Save'), function() {
if(dialog.working) return;
var data = dialog.get_values();
if(data) {
dialog.working = true;
var values = update_doc();
frappe.call({
method: "frappe.client.insert",
args: {
doc: values
},
callback: function(r) {
dialog.hide();
// delete the old doc
frappe.model.clear_doc(dialog.doc.doctype, dialog.doc.name);
var doc = r.message;
if(success) {
success(doc);
}
frappe.ui.form.update_calling_link(doc.name);
},
error: function() {
open_doc();
},
always: function() {
dialog.working = false;
},
freeze: true
});
}
});
var $link = $('<div class="text-muted small" style="padding-left: 10px; padding-top: 15px;">' +
__("Ctrl+enter to save") + ' | <a class="edit-full">' + __("Edit in full page") + '</a></div>').appendTo(dialog.body);
$link.find('.edit-full').on('click', function() {
// edit in form
open_doc();
});
// ctrl+enter to save
dialog.wrapper.keydown(function(e) {
if((e.ctrlKey || e.metaKey) && e.which==13) {
if(!frappe.request.ajax_count) {
// not already working -- double entry
dialog.get_primary_btn().trigger("click");
e.preventDefault();
return false;
}
}
});
dialog.show();
// set defaults
$.each(dialog.fields_dict, function(fieldname, field) {
field.doctype = doc.doctype;
field.docname = doc.name;
if(!is_null(doc[fieldname])) {
field.set_input(doc[fieldname]);
}
});
});
}