From 87fa59a710cb42a26964be260910331a55629be6 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 10 Mar 2017 14:56:19 +0530 Subject: [PATCH] [Fix] Customer delete, customer edit functionality, added country field in the pos profile --- .../doctype/pos_profile/pos_profile.json | 113 ++++++++++- erpnext/accounts/doctype/sales_invoice/pos.py | 16 +- .../sales_invoice/test_sales_invoice.py | 2 +- erpnext/accounts/page/pos/pos.js | 180 ++++++++---------- erpnext/public/css/erpnext.css | 1 + erpnext/public/js/pos/customer_toolbar.html | 2 +- erpnext/public/js/pos/pos_invoice_list.html | 12 +- 7 files changed, 207 insertions(+), 119 deletions(-) diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.json b/erpnext/accounts/doctype/pos_profile/pos_profile.json index a25dd5198d8..9232cd3a16d 100644 --- a/erpnext/accounts/doctype/pos_profile/pos_profile.json +++ b/erpnext/accounts/doctype/pos_profile/pos_profile.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "autoname": "hash", @@ -21,7 +22,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Applicable for User", "length": 0, "no_copy": 0, @@ -50,7 +53,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Series", "length": 0, "no_copy": 1, @@ -81,7 +86,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Update Stock", "length": 0, "no_copy": 0, @@ -108,7 +115,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Warehouse", "length": 0, "no_copy": 0, @@ -137,7 +146,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Campaign", "length": 0, "no_copy": 0, @@ -165,7 +176,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -191,7 +204,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Customer", "length": 0, "no_copy": 0, @@ -220,7 +235,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Company", "length": 0, "no_copy": 0, @@ -238,6 +255,36 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "country", + "fieldtype": "Read Only", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Country", + "length": 0, + "no_copy": 0, + "options": "company.country", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -249,7 +296,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Currency", "length": 0, "no_copy": 0, @@ -278,7 +327,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Ignore Pricing Rule", "length": 0, "no_copy": 0, @@ -305,7 +356,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Allow Delete", "length": 0, "no_copy": 0, @@ -332,7 +385,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Allow user to edit Rate", "length": 0, "no_copy": 0, @@ -359,7 +414,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -385,7 +442,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Sales Invoice Payment", "length": 0, "no_copy": 0, @@ -413,7 +472,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -439,7 +500,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Item Groups", "length": 0, "no_copy": 0, @@ -467,7 +530,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -493,7 +558,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Customer Groups", "length": 0, "no_copy": 0, @@ -521,7 +588,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -548,7 +617,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Print Format", "length": 0, "no_copy": 0, @@ -576,7 +647,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Letter Head", "length": 0, "no_copy": 0, @@ -605,7 +678,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Print Heading", "length": 0, "no_copy": 0, @@ -634,7 +709,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Terms and Conditions", "length": 0, "no_copy": 0, @@ -663,7 +740,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "oldfieldtype": "Column Break", @@ -690,7 +769,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 1, + "in_standard_filter": 0, "label": "Territory", "length": 0, "no_copy": 0, @@ -719,7 +800,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Price List", "length": 0, "no_copy": 0, @@ -748,7 +831,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Apply Discount", "length": 0, "no_copy": 0, @@ -777,7 +862,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Apply Discount On", "length": 0, "no_copy": 0, @@ -805,7 +892,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -832,7 +921,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Write Off Account", "length": 0, "no_copy": 0, @@ -860,7 +951,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Write Off Cost Center", "length": 0, "no_copy": 0, @@ -888,7 +981,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Account for Change Amount", "length": 0, "no_copy": 0, @@ -916,7 +1011,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Taxes and Charges", "length": 0, "no_copy": 0, @@ -945,7 +1042,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "length": 0, "no_copy": 0, "permlevel": 0, @@ -971,7 +1070,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Income Account", "length": 0, "no_copy": 0, @@ -1001,7 +1102,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Expense Account", "length": 0, "no_copy": 0, @@ -1028,7 +1131,9 @@ "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, + "in_global_search": 0, "in_list_view": 0, + "in_standard_filter": 0, "label": "Cost Center", "length": 0, "no_copy": 0, @@ -1047,18 +1152,18 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "icon-cog", "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-12-28 15:14:59.411457", + "modified": "2017-03-10 16:53:56.390210", "modified_by": "rohit@erpnext.com", "module": "Accounts", "name": "POS Profile", @@ -1074,7 +1179,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -1095,7 +1199,6 @@ "export": 0, "if_owner": 0, "import": 0, - "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -1110,8 +1213,10 @@ "quick_entry": 0, "read_only": 0, "read_only_onload": 0, + "show_name_in_global_search": 0, "sort_field": "modified", "sort_order": "DESC", "title_field": "user", + "track_changes": 0, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py index d24df3abac0..cfbd1b20872 100644 --- a/erpnext/accounts/doctype/sales_invoice/pos.py +++ b/erpnext/accounts/doctype/sales_invoice/pos.py @@ -63,6 +63,8 @@ def get_company_data(company): def update_pos_profile_data(doc, pos_profile, company_data): doc.campaign = pos_profile.get('campaign') + if not pos_profile.get('country'): + pos_profile["country"] = company_data.country doc.write_off_account = pos_profile.get('write_off_account') or \ company_data.write_off_account @@ -273,17 +275,17 @@ def get_pricing_rule_data(doc): return pricing_rules @frappe.whitelist() -def make_invoice(doc_list, email_queue_list, customers_list): +def make_invoice(doc_list={}, email_queue_list={}, customers_list={}): if isinstance(doc_list, basestring): doc_list = json.loads(doc_list) if isinstance(email_queue_list, basestring): - email_queue = json.loads(email_queue_list) + email_queue_list = json.loads(email_queue_list) if isinstance(customers_list, basestring): - customers = json.loads(customers_list) + customers_list = json.loads(customers_list) - customers = make_customer_and_address(customers) + customers = make_customer_and_address(customers_list) name_list = [] for docs in doc_list: for name, doc in docs.items(): @@ -297,7 +299,7 @@ def make_invoice(doc_list, email_queue_list, customers_list): else: name_list.append(name) - email_queue = make_email_queue(email_queue) + email_queue = make_email_queue(email_queue_list) return { 'invoice': name_list, 'email_queue': email_queue, @@ -330,8 +332,6 @@ def add_customer(name): def make_address(args, customer): if args.get('name'): address = frappe.get_doc('Address', args.get('name')) - address.is_primary_address = 1 - address.is_shipping_address = 1 else: address = frappe.new_doc('Address') address.country = frappe.db.get_value('Company', args.get('company'), 'country') @@ -340,6 +340,8 @@ def make_address(args, customer): 'link_name': customer }) + address.is_primary_address = 1 + address.is_shipping_address = 1 address.update(args) address.save(ignore_permissions = True) diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 3dfe6808830..f3d311b56d9 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -558,7 +558,7 @@ class TestSalesInvoice(unittest.TestCase): {'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 330}] invoice_data = [{'09052016142': pos}] - si = make_invoice(invoice_data) + si = make_invoice(invoice_data).get('invoice') self.assertEquals(si[0], '09052016142') sales_invoice = frappe.get_all('Sales Invoice', fields =["*"], filters = {'offline_pos_name': '09052016142', 'docstatus': 1}) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index 299e34aa64a..b86f9e15bba 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -166,11 +166,6 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ dialog_actions: function () { var me = this; - $(this.list_body).find('.list-column').click(function () { - me.name = $(this).parents().attr('invoice-name') - me.edit_record(); - }) - $(this.list_body).find('.list-select-all').click(function () { me.removed_items = []; $(me.list_body).find('.list-delete').prop("checked", $(this).is(":checked")) @@ -182,7 +177,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }) } - me.toggle_primary_action(); + me.toggle_delete_button(); }) $(this.list_body).find('.list-delete').click(function () { @@ -193,7 +188,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.removed_items.pop(me.name) } - me.toggle_primary_action(); + me.toggle_delete_button(); }) }, @@ -212,19 +207,32 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ delete_records: function () { var me = this; + this.validate_list() this.remove_doc_from_localstorage() this.update_localstorage(); - this.dialog_actions(); - this.toggle_primary_action(); + // this.dialog_actions(); + this.toggle_delete_button(); }, - toggle_primary_action: function () { + validate_list: function() { var me = this; - if(this.frm.doc.allow_delete) { + this.si_docs = this.get_submitted_invoice() + $.each(this.removed_items, function(index, name){ + $.each(me.si_docs, function(key, data){ + if(me.si_docs[key][name] && me.si_docs[key][name].offline_pos_name == name ){ + frappe.throw(__("Submitted orders can not be deleted")) + } + }) + }) + }, + + toggle_delete_button: function () { + var me = this; + if(this.pos_profile_data["allow_delete"]) { if (this.removed_items && this.removed_items.length > 0) { - $(this.wrapper).find('.btn-danger').show(); + $(this.page.wrapper).find('.btn-danger').show(); } else { - $(this.wrapper).find('.btn-danger').hide(); + $(this.page.wrapper).find('.btn-danger').hide(); } } }, @@ -348,7 +356,6 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }, setup: function () { - this.frm.doc.allow_delete = this.pos_profile_data["allow_delete"]; this.make(); this.set_primary_action(); this.party_field.$input.attr('disabled', false); @@ -403,18 +410,6 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }, 1000); }); - // this.search_item_group = frappe.ui.form.make_control({ - // df: { - // "fieldtype": "Select", - // "options": me.item_groups, - // "label": __("Item Group"), - // "fieldname": "item_group", - // "placeholder": __("Item Group") - // }, - // parent: this.wrapper.find(".search-item-group"), - // only_input: true, - // }); - this.search_item_group = this.wrapper.find('.search-item-group'); var dropdown_html = me.item_groups.map(function(item_group) { @@ -432,13 +427,6 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.make_item_list(); }) - // this.search_item_group.make_input(); - // this.search_item_group.$input.on("change", function () { - // me.page_len = 20; - // me.items = me.get_items(); - // me.make_item_list(); - // }); - me.toggle_more_btn(); this.wrapper.on("click", ".btn-more", function() { @@ -499,17 +487,17 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ $(this).toggleClass("view_customer"); if($(this).hasClass("view_customer")) { me.render_list_customers(); - me.bind_delete_event() - me.party_field.$input.attr('disabled', true); me.list_customers.show(); me.pos_bill.hide(); me.numeric_keypad.hide(); + me.toggle_delete_button() } else { if(me.frm.doc.docstatus == 0) { me.party_field.$input.attr('disabled', false); } me.pos_bill.show(); me.toggle_totals_area(false); + me.toggle_delete_button() me.list_customers.hide(); if(me.frm.doc.items.length > 0) { me.numeric_keypad.show(); @@ -544,7 +532,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.numeric_val += me.val; me.selected_field.val(flt(me.numeric_val)) me.selected_field.trigger("change") - me.render_selected_item() + // me.render_selected_item() } if(me.numeric_id && $(this).hasClass('pos-operation')) { @@ -561,7 +549,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.numeric_val = cstr(flt(me.selected_field.val())).slice(0, -1); me.selected_field.val(me.numeric_val); me.selected_field.trigger("change") - me.render_selected_item() + // me.render_selected_item() }) $(this.numeric_keypad).find('.pos-pay').click(function(){ @@ -578,27 +566,28 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.removed_items = []; // this.list_customers.empty(); this.si_docs = this.get_doc_from_localstorage(); - if (!this.si_docs.length) { return; } var html = ""; - this.si_docs.forEach(function (data, i) { - for (key in data) { - html += frappe.render_template("pos_invoice_list", { - sr: i + 1, - name: key, - customer: data[key].customer, - paid_amount: format_currency(data[key].paid_amount, me.frm.doc.currency), - grand_total: format_currency(data[key].grand_total, me.frm.doc.currency), - data: me.get_doctype_status(data[key]) - }); - } - }); + if(this.si_docs.length) { + this.si_docs.forEach(function (data, i) { + for (key in data) { + html += frappe.render_template("pos_invoice_list", { + sr: i + 1, + name: key, + customer: data[key].customer, + paid_amount: format_currency(data[key].paid_amount, me.frm.doc.currency), + grand_total: format_currency(data[key].grand_total, me.frm.doc.currency), + data: me.get_doctype_status(data[key]) + }); + } + }); + } this.list_customers.find('.list-customers-table').html(html); - this.list_customers.find('.list-column').click(function () { + this.list_customers.on('click', '.customer-row', function () { me.list_customers.hide(); me.numeric_keypad.show(); me.list_customers_btn.toggleClass("view_customer"); @@ -620,7 +609,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }); } - me.toggle_primary_action(); + me.toggle_delete_button(); }); $(this.wrapper).find('.list-delete').click(function () { @@ -631,16 +620,17 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.removed_items.pop(me.name) } - me.toggle_primary_action(); + me.toggle_delete_button(); }); }, bind_delete_event: function() { var me = this; - $(this.wrapper).find('.btn-danger').click(function(){ + $(this.page.wrapper).on('click', '.btn-danger', function(){ frappe.confirm(__("Delete permanently?"), function () { me.delete_records(); + me.list_customers.find('.list-customers-table').html(""); me.render_list_customers(); }) }) @@ -660,7 +650,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ if(!this.party_field) { if(this.page.wrapper.find('.pos-bill-toolbar').length === 0) { $(frappe.render_template('customer_toolbar', { - allow_delete: this.frm.doc.allow_delete + allow_delete: this.pos_profile_data["allow_delete"] })).insertAfter(this.page.$title_area.hide()); } @@ -678,6 +668,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.party_field.make_input(); setTimeout(this.set_focus.bind(this), 500); + me.toggle_delete_button(); } if (this.default_customer && !this.frm.doc.customer) { @@ -816,6 +807,12 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ { "fieldtype": "Section Break" }, + { + "label": __("Address Name"), + "read_only": 1, + "fieldname": "name", + "fieldtype": "Data" + }, { "label": __("Address Line 1"), "fieldname": "address_line1", @@ -826,11 +823,6 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ "fieldname": "address_line2", "fieldtype": "Data" }, - { - "label": __("Fax"), - "fieldname": "fax", - "fieldtype": "Data" - }, { "fieldtype": "Column Break" }, @@ -848,12 +840,6 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ "label": __("ZIP Code"), "fieldname": "pincode", "fieldtype": "Data" - }, - { - "label": __("ZIP Code"), - "hidden": 1, - "fieldname": "name", - "fieldtype": "Data" } ] }) @@ -870,15 +856,10 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ render_address_data: function() { var me = this; this.address_data = this.address[this.frm.doc.customer] || this.get_address_from_localstorage(); - prompt_obj = me.customer_doc.fields_dict; - $.each(this.address_data, function(key, value){ - if(prompt_obj[key] && key!='name') { - prompt_obj[key].$input.val(value) - } - }) + this.customer_doc.set_values(this.address_data) - if(!prompt_obj.full_name.$input.val()) { - prompt_obj.full_name.$input.val(this.frm.doc.customer) + if(!this.customer_doc.fields_dict.full_name.$input.val()) { + this.customer_doc.set_value("full_name", this.frm.doc.customer) } }, @@ -889,6 +870,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ make_offline_customer: function() { this.frm.doc.customer = this.frm.doc.customer || this.customer_doc.get_values().full_name; + this.customer_details = this.get_customers_details(); this.customer_details[this.frm.doc.customer] = this.get_prompt_details(); this.party_field.$input.val(this.frm.doc.customer); this.customers.push({ @@ -902,7 +884,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ get_prompt_details: function() { this.prompt_details = this.customer_doc.get_values(); - this.prompt_details['country'] = this.frm.doc.country; + this.prompt_details['country'] = this.pos_profile_data.country; return JSON.stringify(this.prompt_details) }, @@ -1066,6 +1048,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ var item_code = $(this).parents(".pos-selected-item-action").attr("data-item-code"); var qty = $(this).val(); me.update_qty(item_code, qty) + me.render_selected_item() }) $(this.wrapper).find("[data-action='increase-qty']").on("click", function () { @@ -1084,6 +1067,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ var item_code = $(this).parents(".pos-selected-item-action").attr("data-item-code"); var discount = $(this).val(); me.update_discount(item_code, discount) + me.render_selected_item() }) }, @@ -1100,6 +1084,8 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ me.add_to_cart(); } }); + + me.bind_delete_event() }, update_qty: function (item_code, qty) { @@ -1173,7 +1159,6 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ var me = this; idx = 0 this.items = [] - idx = 0 $.each(this.frm.doc["items"] || [], function (i, d) { if (!in_list(me.remove_item, d.idx)) { d.idx = idx; @@ -1374,39 +1359,31 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ set_primary_action: function () { var me = this; - this.page.set_primary_action(__("New Order"), function () { - me.save_previous_entry(); - me.create_new(); - me.refresh(); - me.toggle_input_field(); - me.set_focus(); + this.page.set_primary_action(__("New Cart"), function () { + me.make_new_cart() }, "fa fa-plus") - if (this.frm.doc.docstatus == 0) { - // this.page.set_primary_action(__("Pay"), function () { - // me.validate(); - // me.update_paid_amount_status(true); - // me.create_invoice(); - // me.make_payment(); - // }, "fa fa-credit-card"); - } else if (this.frm.doc.docstatus == 1) { + + if (this.frm.doc.docstatus == 1) { this.page.set_secondary_action(__("Print"), function () { html = frappe.render(me.print_template_data, me.frm.doc) me.print_document(html) }) - } else { - this.page.clear_primary_action() } + }, - // this.page.set_secondary_action(__("New"), function () { - // me.save_previous_entry(); - // me.create_new(); - // }, "fa fa-plus").addClass("btn-primary"); + make_new_cart: function (){ + this.save_previous_entry(); + this.create_new(); + this.refresh(); + this.toggle_input_field(); + this.render_list_customers(); + this.set_focus(); }, print_dialog: function () { var me = this; - msgprint = frappe.msgprint(format('{0}\ {1}', [ __('Print'), __('New') @@ -1418,8 +1395,8 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ }) $('.new_doc').click(function () { - msgprint.hide() - me.create_new(); + me.msgprint.hide() + me.make_new_cart() }) }, @@ -1456,6 +1433,8 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ $(this.wrapper).find('select').attr("disabled", disabled); $(this.wrapper).find('input').attr("disabled", disabled); $(this.wrapper).find('select').attr("disabled", disabled); + $(this.wrapper).find('button').attr("disabled", disabled); + this.party_field.$input.attr('disabled', disabled); if (this.frm.doc.docstatus == 1) { pointer_events = 'none'; @@ -1527,7 +1506,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.email_queue_list = this.get_email_queue() || {}; this.customers_list = this.get_customers_details() || {}; - if (this.si_docs.length || this.email_queue_list) { + if (this.si_docs.length || this.email_queue_list || this.customers_list) { frappe.call({ method: "erpnext.accounts.doctype.sales_invoice.pos.make_invoice", args: { @@ -1580,6 +1559,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ } } }) + this.removed_items = []; this.si_docs = this.new_si_docs; this.update_localstorage(); } diff --git a/erpnext/public/css/erpnext.css b/erpnext/public/css/erpnext.css index a51472feaa7..697c0782897 100644 --- a/erpnext/public/css/erpnext.css +++ b/erpnext/public/css/erpnext.css @@ -327,3 +327,4 @@ body[data-route="pos"] .btn-more { body[data-route="pos"] .collapse-btn { cursor: pointer; } + diff --git a/erpnext/public/js/pos/customer_toolbar.html b/erpnext/public/js/pos/customer_toolbar.html index a2cd834b543..3ba5ccbc673 100644 --- a/erpnext/public/js/pos/customer_toolbar.html +++ b/erpnext/public/js/pos/customer_toolbar.html @@ -10,7 +10,7 @@ {% if (allow_delete) { %} - {% } %} \ No newline at end of file diff --git a/erpnext/public/js/pos/pos_invoice_list.html b/erpnext/public/js/pos/pos_invoice_list.html index 9680cd59fa8..13aa52055ac 100644 --- a/erpnext/public/js/pos/pos_invoice_list.html +++ b/erpnext/public/js/pos/pos_invoice_list.html @@ -1,9 +1,9 @@
-
- - {%= customer %} + -
{{ data.status }}
-
{%= paid_amount %}
-
{%= grand_total %}
+
{{ data.status }}
+
{%= paid_amount %}
+
{%= grand_total %}