From fe7a5b305f7cd1f15a3da5de25f2a7cbbe4f79ed Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 27 Dec 2016 14:15:52 +0530 Subject: [PATCH] create customer from POS --- erpnext/accounts/doctype/sales_invoice/pos.py | 1 + erpnext/accounts/page/pos/pos.js | 64 +++++++++++++++---- 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py index 3619e989d8..f5721e884d 100644 --- a/erpnext/accounts/doctype/sales_invoice/pos.py +++ b/erpnext/accounts/doctype/sales_invoice/pos.py @@ -41,6 +41,7 @@ def get_pos_data(): '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 c0f82bc526..cae2d996a1 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -325,6 +325,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ $.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 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ 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 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.party_field.$input.autocomplete( "search", " " ); } }, 500); - }); + }).autocomplete(this.party_field).data('ui-autocomplete')._renderItem = function(ul, d){ + var html = "" + __(d.label) + ""; + return $('
  • ') + .data('item.autocomplete', d) + .html('

    ' + html + '

    ') + .appendTo(ul); + } + }, + + add_customer: function() { + var me = this; + if(this.connection_status) { + this.customer_data.push({ + name: "" + + " " + + __("Create a new Customer") + + "", + 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){