From 12425ce85e96904e09a9db596106fa93db439a8a Mon Sep 17 00:00:00 2001 From: Akhilesh Darjee Date: Mon, 2 Sep 2013 18:48:39 +0530 Subject: [PATCH] [pos] [minor] pos completed --- .../Print Format/POS Invoice/POS Invoice.txt | 4 +- accounts/doctype/pos_setting/pos_setting.py | 18 ++++- accounts/doctype/sales_invoice/pos.js | 77 +++++++++++-------- accounts/doctype/sales_invoice/pos.py | 1 + .../doctype/sales_invoice/sales_invoice.js | 20 +++-- .../doctype/sales_invoice/sales_invoice.txt | 3 +- patches/patch_list.py | 2 + patches/september_2013/__init__.py | 1 + .../p01_add_user_defaults_from_pos_setting.py | 13 ++++ 9 files changed, 96 insertions(+), 43 deletions(-) create mode 100644 patches/september_2013/__init__.py create mode 100644 patches/september_2013/p01_add_user_defaults_from_pos_setting.py diff --git a/accounts/Print Format/POS Invoice/POS Invoice.txt b/accounts/Print Format/POS Invoice/POS Invoice.txt index 2d48fff430..ebf25e4253 100644 --- a/accounts/Print Format/POS Invoice/POS Invoice.txt +++ b/accounts/Print Format/POS Invoice/POS Invoice.txt @@ -2,14 +2,14 @@ { "creation": "2011-12-21 11:08:55", "docstatus": 0, - "modified": "2013-08-29 17:40:19", + "modified": "2013-08-30 12:46:21", "modified_by": "Administrator", "owner": "Administrator" }, { "doc_type": "Sales Invoice", "doctype": "Print Format", - "html": "\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n
RECEIPT NO: DATE:
M/s
\n\n
\n\n\n", + "html": "\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n
RECEIPT NO: DATE:
M/s
\n\n
\n\n\n", "module": "Accounts", "name": "__common__", "print_format_type": "Client", diff --git a/accounts/doctype/pos_setting/pos_setting.py b/accounts/doctype/pos_setting/pos_setting.py index 73f5ed6e72..b794c668a0 100755 --- a/accounts/doctype/pos_setting/pos_setting.py +++ b/accounts/doctype/pos_setting/pos_setting.py @@ -7,7 +7,7 @@ from webnotes import msgprint, _ from webnotes.utils import cint class DocType: - def __init__(self,doc,doclist=[]): + def __init__(self,doc,doclist): self.doc, self.doclist = doc,doclist def get_series(self): @@ -18,6 +18,7 @@ class DocType: return series and series[0] or '' def validate(self): + self.prev_user = webnotes.conn.get_value("POS Setting", self.doc.name, "user") self.check_for_duplicate() self.validate_expense_account() @@ -36,4 +37,17 @@ class DocType: def validate_expense_account(self): if cint(webnotes.defaults.get_global_default("auto_inventory_accounting")) \ and not self.doc.expense_account: - msgprint(_("Expense Account is mandatory"), raise_exception=1) \ No newline at end of file + msgprint(_("Expense Account is mandatory"), raise_exception=1) + + def on_update(self): + webnotes.defaults.clear_default("is_pos") + + pos_view_users = webnotes.conn.sql_list("""select user from `tabPOS Setting`""") + for user in pos_view_users: + if user: + webnotes.defaults.set_user_default("is_pos", 1, user) + else: + webnotes.defaults.set_global_default("is_pos", 1) + + def on_trash(self): + self.on_update() \ No newline at end of file diff --git a/accounts/doctype/sales_invoice/pos.js b/accounts/doctype/sales_invoice/pos.js index 6ef48112af..a092e2863f 100644 --- a/accounts/doctype/sales_invoice/pos.js +++ b/accounts/doctype/sales_invoice/pos.js @@ -199,13 +199,16 @@ erpnext.POS = Class.extend({ })).appendTo($wrap); }); - $("div.pos-item").on("click", function() { - if(!cur_frm.doc.customer) { - msgprint("Please select customer first."); - return; - } - me.add_to_cart($(this).attr("data-item_code")); - }); + // if form is local then allow this function + if (cur_frm.doc.docstatus===0) { + $("div.pos-item").on("click", function() { + if(!cur_frm.doc.customer) { + msgprint("Please select customer first."); + return; + } + me.add_to_cart($(this).attr("data-item_code")); + }); + } } }); }, @@ -303,33 +306,45 @@ erpnext.POS = Class.extend({ this.wrapper.find(".grand-total").text(format_currency(this.frm.doc.grand_total_export, cur_frm.doc.price_list_currency)); - $("input.qty").on("focus", function() { - $(this).select(); - }); + // if form is local then only run all these functions + if (cur_frm.doc.docstatus===0) { + $("input.qty").on("focus", function() { + $(this).select(); + }); - // append quantity to the respective item after change from input box - $("input.qty").on("change", function() { - var item_code = $(this).closest("tr")[0].id; - me.update_qty(item_code, $(this).val(), true); - }); + // append quantity to the respective item after change from input box + $("input.qty").on("change", function() { + var item_code = $(this).closest("tr")[0].id; + me.update_qty(item_code, $(this).val(), true); + }); + + // on td click toggle the highlighting of row + $("#cart tbody tr td").on("click", function() { + var row = $(this).closest("tr"); + if (row.attr("data-selected") == "false") { + row.attr("class", "warning"); + row.attr("data-selected", "true"); + } + else { + row.prop("class", null); + row.attr("data-selected", "false"); + } + me.refresh_delete_btn(); + + }); - // on td click toggle the highlighting of row - $("#cart tbody tr td").on("click", function() { - var row = $(this).closest("tr"); - if (row.attr("data-selected") == "false") { - row.attr("class", "warning"); - row.attr("data-selected", "true"); - } - else { - row.prop("class", null); - row.attr("data-selected", "false"); - } me.refresh_delete_btn(); - - }); - - me.refresh_delete_btn(); - cur_frm.pos.barcode.$input.focus(); + cur_frm.pos.barcode.$input.focus(); + } + + // if form is submitted & cancelled then disable all input box & buttons + if (cur_frm.doc.docstatus>=1) { + me.wrapper.find('input, button').each(function () { + $(this).prop('disabled', true); + }); + $(".delete-items").hide(); + $(".make-payment").hide(); + } }, refresh_delete_btn: function() { $(".delete-items").toggle($(".item-cart .warning").length ? true : false); diff --git a/accounts/doctype/sales_invoice/pos.py b/accounts/doctype/sales_invoice/pos.py index 2f2ad6a36c..1b867cb8db 100644 --- a/accounts/doctype/sales_invoice/pos.py +++ b/accounts/doctype/sales_invoice/pos.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import webnotes +from webnotes import msgprint @webnotes.whitelist() def get_items(price_list, item=None, item_group=None): diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js index 5cfc27105d..20df233bfe 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.js +++ b/accounts/doctype/sales_invoice/sales_invoice.js @@ -26,9 +26,18 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte } } - if(this.frm.doc.is_pos) { + // toggle to pos view if is_pos is 1 in user_defaults + if (cint(wn.defaults.get_user_defaults("is_pos"))===1 || cur_frm.doc.is_pos) { + this.frm.set_value("is_pos", 1); + this.is_pos(); cur_frm.cscript.toggle_pos(true); } + + // if document is POS then change default print format to "POS Invoice" + if(cur_frm.doc.is_pos && cur_frm.doc.docstatus===1) { + locals.DocType[cur_frm.doctype].default_print_format = "POS Invoice"; + cur_frm.setup_print(); + } }, refresh: function(doc, dt, dn) { @@ -94,7 +103,8 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte }); }); } - + + // Show POS button only if it enabled from features setup if(cint(sys_defaults.fs_pos_view)===1) cur_frm.cscript.pos_btn(); }, @@ -115,13 +125,9 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte cur_frm.cscript.toggle_pos(); cur_frm.cscript.pos_btn(); }, icon); - }, - toggle_pos: function(show) { - // if(cint(sys_defaults.fs_pos_view)===0) return; - // if(!(this.frm.doc.is_pos && this.frm.doc.docstatus===0)) return; - + toggle_pos: function(show) { if (!this.frm.doc.selling_price_list) msgprint(wn._("Please select Price List")) else { diff --git a/accounts/doctype/sales_invoice/sales_invoice.txt b/accounts/doctype/sales_invoice/sales_invoice.txt index dbdf42fd3e..ca2b4b243f 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.txt +++ b/accounts/doctype/sales_invoice/sales_invoice.txt @@ -2,13 +2,14 @@ { "creation": "2013-05-24 19:29:05", "docstatus": 0, - "modified": "2013-08-09 14:45:42", + "modified": "2013-09-01 05:26:13", "modified_by": "Administrator", "owner": "Administrator" }, { "allow_attach": 1, "autoname": "naming_series:", + "default_print_format": "Standard", "doctype": "DocType", "document_type": "Transaction", "icon": "icon-file-text", diff --git a/patches/patch_list.py b/patches/patch_list.py index 1d382a56bd..dd95e2dfd7 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -257,4 +257,6 @@ patch_list = [ "execute:webnotes.reload_doc('accounts', 'Print Format', 'POS Invoice') # 2013-08-16", "patches.august_2013.p06_fix_sle_against_stock_entry", "execute:webnotes.bean('Style Settings').save() #2013-08-20", + "patches.september_2013.p01_add_user_defaults_from_pos_setting", + "execute:webnotes.reload_doc('accounts', 'Print Format', 'POS Invoice') # 2013-09-02", ] \ No newline at end of file diff --git a/patches/september_2013/__init__.py b/patches/september_2013/__init__.py new file mode 100644 index 0000000000..baffc48825 --- /dev/null +++ b/patches/september_2013/__init__.py @@ -0,0 +1 @@ +from __future__ import unicode_literals diff --git a/patches/september_2013/p01_add_user_defaults_from_pos_setting.py b/patches/september_2013/p01_add_user_defaults_from_pos_setting.py new file mode 100644 index 0000000000..f3a9344464 --- /dev/null +++ b/patches/september_2013/p01_add_user_defaults_from_pos_setting.py @@ -0,0 +1,13 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import webnotes + +def execute(): + pos_view_users = webnotes.conn.sql_list("""select user from `tabPOS Setting`""") + for user in pos_view_users: + if user: + webnotes.defaults.set_user_default("is_pos", 1, user) + else: + webnotes.defaults.set_global_default("is_pos", 1) \ No newline at end of file