create customer from POS
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index 3619e98..f5721e8 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -41,6 +41,7 @@
'pos_profile': pos_profile,
'meta': {
'invoice': frappe.get_meta('Sales Invoice'),
+ 'customer': frappe.get_meta('Customer'),
'items': frappe.get_meta('Sales Invoice Item'),
'taxes': frappe.get_meta('Sales Taxes and Charges')
}
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index c0f82bc..cae2d99 100644
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -325,6 +325,7 @@
$.each(this.meta, function(i, data){
frappe.meta.sync(data)
+ locals["DocType"][data.name] = data;
})
this.print_template_data = frappe.render_template("print_template",
@@ -412,21 +413,26 @@
autoFocus: true,
source: function (request, response) {
me.customer_data = me.get_customers(request.term)
+ me.add_customer();
+
response($.map(me.customer_data, function(data){
- return {label: data.name, value: data.name,
- customer_group: data.customer_group, territory: data.territory}
+ return {label: data.name, customer_name: data.name, customer_group: data.customer_group,
+ territory: data.territory, onclick: data.onclick}
}))
},
- change: function(event, ui){
- if(ui.item){
- me.frm.doc.customer = ui.item.label;
- me.frm.doc.customer_name = ui.item.customer_name;
- me.frm.doc.customer_group = ui.item.customer_group;
- me.frm.doc.territory = ui.item.territory;
- }else{
- me.frm.doc.customer = me.party_field.$input.val();
+ select: function(event, ui){
+ if(ui.item.onclick) {
+ ui.item.value = ""
+ ui.item.onclick(me);
+ }else if(ui.item) {
+ me.update_customer_data(ui.item)
}
me.refresh();
+ },
+ change: function(event, ui) {
+ if(!ui.item) {
+ me.frm.doc.customer = $(this).val();
+ }
}
}).on("focus", function(){
setTimeout(function() {
@@ -434,7 +440,43 @@
me.party_field.$input.autocomplete( "search", " " );
}
}, 500);
- });
+ }).autocomplete(this.party_field).data('ui-autocomplete')._renderItem = function(ul, d){
+ var html = "<span>" + __(d.label) + "</span>";
+ return $('<li></li>')
+ .data('item.autocomplete', d)
+ .html('<a><p>' + html + '</p></a>')
+ .appendTo(ul);
+ }
+ },
+
+ add_customer: function() {
+ var me = this;
+ if(this.connection_status) {
+ this.customer_data.push({
+ name: "<span class='text-primary link-option'>"
+ + "<i class='fa fa-plus' style='margin-right: 5px;'></i> "
+ + __("Create a new Customer")
+ + "</span>",
+ onclick: me.new_customer
+ });
+ }
+ },
+
+ new_customer: function(obj) {
+ var me = obj;
+ frappe.ui.form.quick_entry('Customer', function(doc){
+ me.customers.push(doc)
+ me.party_field.$input.val(doc.name);
+ me.update_customer_data(doc)
+ })
+ },
+
+ update_customer_data: function(doc) {
+ var me = this;
+ this.frm.doc.customer = doc.label || doc.name;
+ this.frm.doc.customer_name = doc.customer_name;
+ this.frm.doc.customer_group = doc.customer_group;
+ this.frm.doc.territory = doc.territory;
},
get_customers: function(key){