fixes in warehouse validation

This commit is contained in:
Anand Doshi 2013-03-11 19:44:52 +05:30
parent 88ac485541
commit df6ff1385f
13 changed files with 59 additions and 35 deletions

View File

@ -537,8 +537,7 @@ class DocType(SellingController):
if not w: if not w:
ps = webnotes.conn.sql("select name, warehouse from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % self.doc.company) ps = webnotes.conn.sql("select name, warehouse from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % self.doc.company)
if not ps: if not ps:
msgprint("To make POS entry, please create POS Setting from Accounts --> POS Setting page and refresh the system.") msgprint("To make POS entry, please create POS Setting from Accounts --> POS Setting page and refresh the system.", raise_exception=True)
raise Exception
elif not ps[0][1]: elif not ps[0][1]:
msgprint("Please enter warehouse in POS Setting") msgprint("Please enter warehouse in POS Setting")
else: else:

View File

@ -21,7 +21,7 @@
wn.provide("erpnext.buying"); wn.provide("erpnext.buying");
erpnext.buying.BuyingController = erpnext.utils.Controller.extend({ erpnext.buying.BuyingController = wn.ui.form.Controller.extend({
setup: function() { setup: function() {
var me = this; var me = this;

View File

@ -132,6 +132,10 @@ class DocType(BuyingController):
for d in getlist(self.doclist, 'po_details'): for d in getlist(self.doclist, 'po_details'):
#1. Check if is_stock_item == 'Yes' #1. Check if is_stock_item == 'Yes'
if webnotes.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes": if webnotes.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes":
# this happens when item is changed from non-stock to stock item
if not d.warehouse:
continue
ind_qty, po_qty = 0, flt(d.qty) * flt(d.conversion_factor) ind_qty, po_qty = 0, flt(d.qty) * flt(d.conversion_factor)
if is_stopped: if is_stopped:
po_qty = flt(d.qty) > flt(d.received_qty) and \ po_qty = flt(d.qty) > flt(d.received_qty) and \

View File

@ -17,7 +17,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import webnotes import webnotes
from webnotes.utils import getdate, validate_email_add from webnotes.utils import getdate, validate_email_add, cstr
from webnotes.model.doc import make_autoname from webnotes.model.doc import make_autoname
from webnotes import msgprint, _ from webnotes import msgprint, _
@ -104,7 +104,7 @@ class DocType:
fname, fid = file_args.split(",") fname, fid = file_args.split(",")
if self.doc.image == fname: if self.doc.image == fname:
new_file_args = fname + "," + fid new_file_args = fname + "," + fid
file_list = profile_wrapper.doc.file_list.split("\n") file_list = cstr(profile_wrapper.doc.file_list).split("\n")
if new_file_args not in file_list: if new_file_args not in file_list:
file_list += [new_file_args] file_list += [new_file_args]
profile_wrapper.doc.file_list = "\n".join(file_list) profile_wrapper.doc.file_list = "\n".join(file_list)

View File

@ -18,7 +18,7 @@
wn.require("public/app/js/utils.js"); wn.require("public/app/js/utils.js");
wn.provide("erpnext.hr"); wn.provide("erpnext.hr");
erpnext.hr.AttendanceControlPanel = erpnext.utils.Controller.extend({ erpnext.hr.AttendanceControlPanel = wn.ui.form.Controller.extend({
onload: function() { onload: function() {
this.frm.set_value("att_fr_date", get_today()); this.frm.set_value("att_fr_date", get_today());
this.frm.set_value("att_to_date", get_today()); this.frm.set_value("att_to_date", get_today());

View File

@ -18,7 +18,7 @@ wn.provide("erpnext.projects");
cur_frm.add_fetch("project", "company", "company"); cur_frm.add_fetch("project", "company", "company");
erpnext.projects.Task = erpnext.utils.Controller.extend({ erpnext.projects.Task = wn.ui.form.Controller.extend({
setup: function() { setup: function() {
this.frm.fields_dict.project.get_query = function() { this.frm.fields_dict.project.get_query = function() {
return "select name from `tabProject` \ return "select name from `tabProject` \

View File

@ -16,7 +16,7 @@
wn.provide("erpnext.stock"); wn.provide("erpnext.stock");
erpnext.stock.StockController = erpnext.utils.Controller.extend({ erpnext.stock.StockController = wn.ui.form.Controller.extend({
show_stock_ledger: function() { show_stock_ledger: function() {
var me = this; var me = this;
this.frm.add_custom_button("Show Stock Ledger", function() { this.frm.add_custom_button("Show Stock Ledger", function() {

View File

@ -23,11 +23,4 @@ erpnext.get_currency = function(company) {
return wn.model.get(":Company", company).default_currency || wn.boot.sysdefaults.currency; return wn.model.get(":Company", company).default_currency || wn.boot.sysdefaults.currency;
else else
return wn.boot.sysdefaults.currency; return wn.boot.sysdefaults.currency;
} }
// TODO
erpnext.utils.Controller = wn.ui.form.Controller.extend({
refresh: function() {
erpnext.hide_naming_series();
}
});

View File

@ -156,9 +156,13 @@ class DocType(SellingController):
f = [d.item_code, d.description] f = [d.item_code, d.description]
#check item is stock item #check item is stock item
st_itm = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code) st_itm = sql("select is_stock_item from `tabItem` where name = %s", d.item_code)
if st_itm and st_itm[0][0] == 'Yes': if st_itm and st_itm[0][0] == 'Yes':
if not d.reserved_warehouse:
msgprint("""Please enter Reserved Warehouse for item %s
as it is stock Item""" % d.item_code, raise_exception=1)
if e in check_list: if e in check_list:
msgprint("Item %s has been entered twice." % d.item_code) msgprint("Item %s has been entered twice." % d.item_code)
else: else:
@ -333,10 +337,6 @@ class DocType(SellingController):
def update_stock_ledger(self, update_stock, is_stopped = 0): def update_stock_ledger(self, update_stock, is_stopped = 0):
for d in self.get_item_list(is_stopped): for d in self.get_item_list(is_stopped):
if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes": if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
if not d['reserved_warehouse']:
msgprint("""Please enter Reserved Warehouse for item %s
as it is stock Item""" % d['item_code'], raise_exception=1)
args = { args = {
"item_code": d['item_code'], "item_code": d['item_code'],
"reserved_qty": flt(update_stock) * flt(d['reserved_qty']), "reserved_qty": flt(update_stock) * flt(d['reserved_qty']),

View File

@ -156,7 +156,7 @@ class DocType(SellingController):
if not self.doc.billing_status: self.doc.billing_status = 'Not Billed' if not self.doc.billing_status: self.doc.billing_status = 'Not Billed'
if not self.doc.installation_status: self.doc.installation_status = 'Not Installed' if not self.doc.installation_status: self.doc.installation_status = 'Not Installed'
def validate_mandatory(self): def validate_mandatory(self):
if self.doc.amended_from and not self.doc.amendment_date: if self.doc.amended_from and not self.doc.amendment_date:
msgprint("Please Enter Amendment Date") msgprint("Please Enter Amendment Date")
@ -332,10 +332,10 @@ class DocType(SellingController):
self.values = [] self.values = []
for d in self.get_item_list(): for d in self.get_item_list():
if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes": if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
if not d['warehouse']: # this happens when item is changed from non-stock to stock item
msgprint("Please enter Warehouse for item %s as it is stock item" if not d["warehouse"]:
% d['item_code'], raise_exception=1) continue
if d['reserved_qty'] < 0 : if d['reserved_qty'] < 0 :
# Reduce reserved qty from reserved warehouse mentioned in so # Reduce reserved qty from reserved warehouse mentioned in so
args = { args = {
@ -395,6 +395,15 @@ class DocType(SellingController):
sl.scrub_serial_nos(self) sl.scrub_serial_nos(self)
sl.scrub_serial_nos(self, 'packing_details') sl.scrub_serial_nos(self, 'packing_details')
self.validate_warehouse()
def validate_warehouse(self):
for d in self.get_item_list():
if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes":
if not d['warehouse']:
msgprint("Please enter Warehouse for item %s as it is stock item"
% d['item_code'], raise_exception=1)
def make_gl_entries(self): def make_gl_entries(self):
if not cint(webnotes.defaults.get_global_default("auto_inventory_accounting")): if not cint(webnotes.defaults.get_global_default("auto_inventory_accounting")):
return return

View File

@ -20,15 +20,12 @@ import webnotes
from webnotes.utils import cstr, flt from webnotes.utils import cstr, flt
from webnotes.model.doc import addchild from webnotes.model.doc import addchild
from webnotes.model.bean import getlist from webnotes.model.bean import getlist
from webnotes import msgprint from webnotes import msgprint, _
sql = webnotes.conn.sql sql = webnotes.conn.sql
class DocType: from webnotes.model.controller import DocListController
def __init__(self, doc, doclist=[]): class DocType(DocListController):
self.doc = doc
self.doclist = doclist
def get_tax_rate(self, tax_type): def get_tax_rate(self, tax_type):
rate = sql("select tax_rate from tabAccount where name = %s", tax_type) rate = sql("select tax_rate from tabAccount where name = %s", tax_type)
ret = { ret = {
@ -196,6 +193,8 @@ class DocType:
if self.doc.name: if self.doc.name:
self.old_page_name = webnotes.conn.get_value('Item', self.doc.name, 'page_name') self.old_page_name = webnotes.conn.get_value('Item', self.doc.name, 'page_name')
self.validate_is_stock_item()
def check_non_asset_warehouse(self): def check_non_asset_warehouse(self):
if self.doc.is_asset_item == "Yes": if self.doc.is_asset_item == "Yes":
@ -215,6 +214,15 @@ class DocType:
'description' : file and file[0]['description'] or '' 'description' : file and file[0]['description'] or ''
} }
return ret return ret
def validate_is_stock_item(self):
if not self.doc.fields.get("__islocal"):
if webnotes.conn.get_value("Item", self.doc.name, "is_stock_item")=="Yes" and \
((not self.doc.is_stock_item) or self.doc.is_stock_item == "No"):
if self.check_if_sle_exists() == "exists":
webnotes.msgprint(self.meta.get_label("is_stock_item") + ": "
+ _("""Cannot change to Yes. Reason: Stock Ledger Entries exist for""")
+ """ "%s" """ % self.doc.name, raise_exception=True)
def check_if_sle_exists(self): def check_if_sle_exists(self):
sle = sql("select name from `tabStock Ledger Entry` where item_code = %s and ifnull(is_cancelled, 'No') = 'No'", self.doc.name) sle = sql("select name from `tabStock Ledger Entry` where item_code = %s and ifnull(is_cancelled, 'No') = 'No'", self.doc.name)

View File

@ -125,7 +125,7 @@ class DocType(BuyingController):
self.update_raw_materials_supplied("pr_raw_material_details") self.update_raw_materials_supplied("pr_raw_material_details")
self.update_valuation_rate("purchase_receipt_details") self.update_valuation_rate("purchase_receipt_details")
def on_update(self): def on_update(self):
if self.doc.rejected_warehouse: if self.doc.rejected_warehouse:
for d in getlist(self.doclist,'purchase_receipt_details'): for d in getlist(self.doclist,'purchase_receipt_details'):
@ -146,6 +146,9 @@ class DocType(BuyingController):
self.values = [] self.values = []
for d in getlist(self.doclist, 'purchase_receipt_details'): for d in getlist(self.doclist, 'purchase_receipt_details'):
if webnotes.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes": if webnotes.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes":
if not d.warehouse:
continue
ord_qty = 0 ord_qty = 0
pr_qty = flt(d.qty) * flt(d.conversion_factor) pr_qty = flt(d.qty) * flt(d.conversion_factor)

View File

@ -29,9 +29,9 @@ import json
sql = webnotes.conn.sql sql = webnotes.conn.sql
from utilities.transaction_base import TransactionBase from controllers.accounts_controller import AccountsController
class DocType(TransactionBase): class DocType(AccountsController):
def __init__(self, doc, doclist=[]): def __init__(self, doc, doclist=[]):
self.doc = doc self.doc = doc
self.doclist = doclist self.doclist = doclist
@ -44,12 +44,14 @@ class DocType(TransactionBase):
pro_obj = self.doc.production_order and \ pro_obj = self.doc.production_order and \
get_obj('Production Order', self.doc.production_order) or None get_obj('Production Order', self.doc.production_order) or None
self.validate_item()
self.validate_warehouse(pro_obj) self.validate_warehouse(pro_obj)
self.validate_production_order(pro_obj) self.validate_production_order(pro_obj)
self.get_stock_and_rate() self.get_stock_and_rate()
self.validate_incoming_rate() self.validate_incoming_rate()
self.validate_bom() self.validate_bom()
self.validate_finished_goods() self.validate_finished_goods()
self.validate_return_reference_doc() self.validate_return_reference_doc()
self.validate_with_material_request() self.validate_with_material_request()
@ -78,6 +80,12 @@ class DocType(TransactionBase):
sl_obj.scrub_serial_nos(self) sl_obj.scrub_serial_nos(self)
sl_obj.validate_serial_no(self, 'mtn_details') sl_obj.validate_serial_no(self, 'mtn_details')
def validate_item(self):
for item in self.doclist.get({"parentfield": "mtn_details"}):
if item.item_code not in self.stock_items:
msgprint(_("""Only Stock Items are allowed for Stock Entry"""),
raise_exception=True)
def validate_warehouse(self, pro_obj): def validate_warehouse(self, pro_obj):
"""perform various (sometimes conditional) validations on warehouse""" """perform various (sometimes conditional) validations on warehouse"""