From 0dbe898d82260f25c756f528522a0124d10672b7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 4 Feb 2013 13:56:50 +0530 Subject: [PATCH] added warehouse user to retrict entry and also introduced query handlers --- home/page/latest_updates/latest_updates.js | 3 ++ startup/query_handlers.py | 5 +++ .../stock_ledger_entry/stock_ledger_entry.py | 11 ++++++ stock/doctype/warehouse/warehouse.txt | 17 ++++++++- stock/doctype/warehouse_user/__init__.py | 0 .../doctype/warehouse_user/warehouse_user.py | 8 +++++ .../doctype/warehouse_user/warehouse_user.txt | 36 +++++++++++++++++++ stock/utils.py | 19 +++++++++- 8 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 startup/query_handlers.py create mode 100644 stock/doctype/warehouse_user/__init__.py create mode 100644 stock/doctype/warehouse_user/warehouse_user.py create mode 100644 stock/doctype/warehouse_user/warehouse_user.txt diff --git a/home/page/latest_updates/latest_updates.js b/home/page/latest_updates/latest_updates.js index d1561e05bf..db64849e72 100644 --- a/home/page/latest_updates/latest_updates.js +++ b/home/page/latest_updates/latest_updates.js @@ -1,4 +1,7 @@ erpnext.updates = [ + ["2nd February, 2013", [ + "Warehouse: Added table Warehouse User to restrict Warehouse Entry per user.", + ]], ["28st January, 2013", [ "List Views are now configurable: To set list views, check 'In List View' in Setup > Customize Form View in the fields table.", ]], diff --git a/startup/query_handlers.py b/startup/query_handlers.py new file mode 100644 index 0000000000..5e2860865f --- /dev/null +++ b/startup/query_handlers.py @@ -0,0 +1,5 @@ +from __future__ import unicode_literals + +standard_queries = { + "Warehouse": "stock.utils.get_warehouse_list" +} \ No newline at end of file diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 2b1af33e50..d1fe3d95b2 100644 --- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -16,6 +16,7 @@ from __future__ import unicode_literals import webnotes +from webnotes import _ from webnotes.utils import cint, flt, getdate @@ -33,6 +34,7 @@ class DocType: def validate(self): self.validate_mandatory() self.validate_item() + self.validate_warehouse_user() self.actual_amt_check() self.check_stock_frozen_date() self.scrub_posting_time() @@ -51,6 +53,15 @@ class DocType: self.doc.fields.pop('batch_bal') + def validate_warehouse_user(self): + if webnotes.session.user=="Administrator": + return + warehouse_users = [p[0] for p in webnotes.conn.sql("""select user from `tabWarehouse User` + where parent=%s""", self.doc.warehouse)] + + if warehouse_users and not webnotes.session.user in warehouse_users: + webnotes.msgprint(_("User not allowed entry in the Warehouse") \ + + ": " + webnotes.session.user + " / " + self.doc.warehouse, raise_exception = 1) def validate_mandatory(self): mandatory = ['warehouse','posting_date','voucher_type','voucher_no','actual_qty','company'] diff --git a/stock/doctype/warehouse/warehouse.txt b/stock/doctype/warehouse/warehouse.txt index e76754382c..d0dd73c086 100644 --- a/stock/doctype/warehouse/warehouse.txt +++ b/stock/doctype/warehouse/warehouse.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:30", "docstatus": 0, - "modified": "2013-01-29 13:29:21", + "modified": "2013-02-04 11:35:53", "modified_by": "Administrator", "owner": "Administrator" }, @@ -80,6 +80,21 @@ "permlevel": 0, "search_index": 1 }, + { + "doctype": "DocField", + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "permlevel": 0 + }, + { + "description": "If set, data entry is only allowed for specified users. Else, entry is allowed for all users with requisite permissions.", + "doctype": "DocField", + "fieldname": "warehouse_users", + "fieldtype": "Table", + "label": "Warehouse Users", + "options": "Warehouse User", + "permlevel": 0 + }, { "description": "For Reference Only.", "doctype": "DocField", diff --git a/stock/doctype/warehouse_user/__init__.py b/stock/doctype/warehouse_user/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/stock/doctype/warehouse_user/warehouse_user.py b/stock/doctype/warehouse_user/warehouse_user.py new file mode 100644 index 0000000000..928aa9ff9f --- /dev/null +++ b/stock/doctype/warehouse_user/warehouse_user.py @@ -0,0 +1,8 @@ +# For license information, please see license.txt + +from __future__ import unicode_literals +import webnotes + +class DocType: + def __init__(self, d, dl): + self.doc, self.doclist = d, dl \ No newline at end of file diff --git a/stock/doctype/warehouse_user/warehouse_user.txt b/stock/doctype/warehouse_user/warehouse_user.txt new file mode 100644 index 0000000000..6cb02ae7fd --- /dev/null +++ b/stock/doctype/warehouse_user/warehouse_user.txt @@ -0,0 +1,36 @@ +[ + { + "creation": "2013-02-04 11:33:57", + "docstatus": 0, + "modified": "2013-02-04 11:36:16", + "modified_by": "Administrator", + "owner": "Administrator" + }, + { + "doctype": "DocType", + "document_type": "Other", + "istable": 1, + "module": "Stock", + "name": "__common__" + }, + { + "doctype": "DocField", + "fieldname": "user", + "fieldtype": "Link", + "label": "User", + "name": "__common__", + "options": "Profile", + "parent": "Warehouse User", + "parentfield": "fields", + "parenttype": "DocType", + "permlevel": 0, + "width": "200px" + }, + { + "doctype": "DocType", + "name": "Warehouse User" + }, + { + "doctype": "DocField" + } +] \ No newline at end of file diff --git a/stock/utils.py b/stock/utils.py index 46dd9d01a9..87f4c02ad1 100644 --- a/stock/utils.py +++ b/stock/utils.py @@ -146,4 +146,21 @@ def get_valid_serial_nos(sr_nos, qty=0, item_code=''): + cstr(abs(qty)) + " quantity against item code: " + item_code, raise_exception=1) - return valid_serial_nos \ No newline at end of file + return valid_serial_nos + +def get_warehouse_list(doctype, txt, searchfield, start, page_len): + """used in search queries""" + wlist = [] + for w in webnotes.conn.sql_list("""select name from tabWarehouse + where name like '%%%s%%'""" % txt): + if webnotes.session.user=="Administrator": + wlist.append([w]) + else: + warehouse_users = webnotes.conn.sql_list("""select user from `tabWarehouse User` + where parent=%s""", w) + if not warehouse_users: + wlist.append([w]) + elif webnotes.session.user in warehouse_users: + wlist.append([w]) + return wlist + \ No newline at end of file