changed stock_frozen_upto to stock_frozen_upto_days, and added validation for it in stock ledger
diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index f059451..4828ca4 100644
--- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -1,3 +1,4 @@
+
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
@@ -6,6 +7,7 @@
from webnotes import msgprint
from webnotes.utils import flt, getdate
from webnotes.model.controller import DocListController
+from datetime import timedelta, date
class DocType(DocListController):
def __init__(self, doc, doclist=[]):
@@ -19,30 +21,30 @@
validate_warehouse_user(self.doc.warehouse)
validate_warehouse_company(self.doc.warehouse, self.doc.company)
self.scrub_posting_time()
-
+
from accounts.utils import validate_fiscal_year
validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year, self.meta.get_label("posting_date"))
-
+
def on_submit(self):
self.check_stock_frozen_date()
self.actual_amt_check()
-
+
from stock.doctype.serial_no.serial_no import process_serial_no
process_serial_no(self.doc)
-
+
#check for item quantity available in stock
def actual_amt_check(self):
if self.doc.batch_no:
- batch_bal_after_transaction = flt(webnotes.conn.sql("""select sum(actual_qty)
- from `tabStock Ledger Entry`
- where warehouse=%s and item_code=%s and batch_no=%s""",
+ batch_bal_after_transaction = flt(webnotes.conn.sql("""select sum(actual_qty)
+ from `tabStock Ledger Entry`
+ where warehouse=%s and item_code=%s and batch_no=%s""",
(self.doc.warehouse, self.doc.item_code, self.doc.batch_no))[0][0])
-
+
if batch_bal_after_transaction < 0:
self.doc.fields.update({
'batch_bal': batch_bal_after_transaction - self.doc.actual_qty
})
-
+
webnotes.throw("""Not enough quantity (requested: %(actual_qty)s, \
current: %(batch_bal)s in Batch <b>%(batch_no)s</b> for Item \
<b>%(item_code)s</b> at Warehouse <b>%(warehouse)s</b> \
@@ -60,27 +62,27 @@
msgprint("Warehouse: '%s' does not exist in the system. Please check." % self.doc.fields.get(k), raise_exception = 1)
def validate_item(self):
- item_det = webnotes.conn.sql("""select name, has_batch_no, docstatus,
- is_stock_item, has_serial_no, serial_no_series
- from tabItem where name=%s""",
+ item_det = webnotes.conn.sql("""select name, has_batch_no, docstatus,
+ is_stock_item, has_serial_no, serial_no_series
+ from tabItem where name=%s""",
self.doc.item_code, as_dict=True)[0]
if item_det.is_stock_item != 'Yes':
webnotes.throw("""Item: "%s" is not a Stock Item.""" % self.doc.item_code)
-
+
# check if batch number is required
if item_det.has_batch_no =='Yes' and self.doc.voucher_type != 'Stock Reconciliation':
if not self.doc.batch_no:
webnotes.throw("Batch number is mandatory for Item '%s'" % self.doc.item_code)
-
+
# check if batch belongs to item
- if not webnotes.conn.sql("""select name from `tabBatch`
+ if not webnotes.conn.sql("""select name from `tabBatch`
where item='%s' and name ='%s' and docstatus != 2""" % (self.doc.item_code, self.doc.batch_no)):
webnotes.throw("'%s' is not a valid Batch Number for Item '%s'" % (self.doc.batch_no, self.doc.item_code))
-
+
if not self.doc.stock_uom:
self.doc.stock_uom = item_det.stock_uom
-
+
def check_stock_frozen_date(self):
stock_frozen_upto = webnotes.conn.get_value('Stock Settings', None, 'stock_frozen_upto') or ''
if stock_frozen_upto:
@@ -88,13 +90,22 @@
if getdate(self.doc.posting_date) <= getdate(stock_frozen_upto) and not stock_auth_role in webnotes.user.get_roles():
msgprint("You are not authorized to do / modify back dated stock entries before %s" % getdate(stock_frozen_upto).strftime('%d-%m-%Y'), raise_exception=1)
+ stock_frozen_upto_days = webnotes.conn.get_value('Stock Settings', None, 'stock_frozen_upto_days') or 0
+ if stock_frozen_upto_days:
+ stock_auth_role = webnotes.conn.get_value('Stock Settings', None,'stock_auth_role')
+ posting_date = getdate(self.doc.posting_date)
+ frozen_days = timedelta(days=stock_frozen_upto_days)
+ if posting_date + frozen_days <= date.today() and not stock_auth_role in webnotes.user.get_roles():
+ msgprint("You are not authorized to do / modify back dated stock entries %d ago" %stock_frozen_upto_days, raise_exception=1)
+
+
def scrub_posting_time(self):
if not self.doc.posting_time or self.doc.posting_time == '00:0':
self.doc.posting_time = '00:00'
def on_doctype_update():
- if not webnotes.conn.sql("""show index from `tabStock Ledger Entry`
+ if not webnotes.conn.sql("""show index from `tabStock Ledger Entry`
where Key_name="posting_sort_index" """):
webnotes.conn.commit()
- webnotes.conn.sql("""alter table `tabStock Ledger Entry`
+ webnotes.conn.sql("""alter table `tabStock Ledger Entry`
add index posting_sort_index(posting_date, posting_time, name)""")
\ No newline at end of file
diff --git a/stock/doctype/stock_settings/stock_settings.py b/stock/doctype/stock_settings/stock_settings.py
index a98ed40..a061aaa 100644
--- a/stock/doctype/stock_settings/stock_settings.py
+++ b/stock/doctype/stock_settings/stock_settings.py
@@ -21,7 +21,7 @@
self.doc.get("item_naming_by")=="Naming Series", hide_name_field=True)
stock_frozen_limit = 356
- submitted_stock_frozen = self.doc.fields.get("stock_frozen_upto")
+ submitted_stock_frozen = self.doc.fields.get("stock_frozen_upto_days")
if submitted_stock_frozen > stock_frozen_limit:
- self.doc.fields["stock_frozen_upto"] = stock_frozen_limit
+ self.doc.fields["stock_frozen_upto_days"] = stock_frozen_limit
webnotes.msgprint (_("Stocks cannot be freezed for days larger than %d.") %stock_frozen_limit)
diff --git a/stock/doctype/stock_settings/stock_settings.txt b/stock/doctype/stock_settings/stock_settings.txt
index 59710ff..ca12296 100644
--- a/stock/doctype/stock_settings/stock_settings.txt
+++ b/stock/doctype/stock_settings/stock_settings.txt
@@ -2,7 +2,7 @@
{
"creation": "2013-06-24 16:37:54",
"docstatus": 0,
- "modified": "2014-01-27 13:29:56",
+ "modified": "2014-01-27 17:29:56",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -117,9 +117,9 @@
},
{
"doctype": "DocField",
- "fieldname": "stock_frozen_upto",
+ "fieldname": "stock_frozen_upto_days",
"fieldtype": "Int",
- "label": "Stock Frozen Upto"
+ "label": "Stock Frozen Upto [Days Ago]"
},
{
"doctype": "DocField",