Merge branch 'master' of github.com:webnotes/erpnext into wsgi

Conflicts:
	accounts/doctype/account/account.py
	accounts/doctype/gl_entry/gl_entry.py
	accounts/doctype/period_closing_voucher/period_closing_voucher.py
	stock/doctype/delivery_note/delivery_note.py
	stock/doctype/landed_cost_wizard/landed_cost_wizard.py
	stock/doctype/purchase_receipt/purchase_receipt.py
	stock/doctype/stock_ledger/stock_ledger.py
	stock/doctype/warehouse/warehouse.py
	stock/stock_ledger.py
This commit is contained in:
Anand Doshi
2013-09-25 19:55:41 +05:30
242 changed files with 3879 additions and 3910 deletions

View File

@@ -5,16 +5,19 @@ test_records = [
[{
"doctype": "Warehouse",
"warehouse_name": "_Test Warehouse",
"company": "_Test Company"
"company": "_Test Company",
"create_account_under": "Stock Assets - _TC"
}],
[{
"doctype": "Warehouse",
"warehouse_name": "_Test Warehouse 1",
"company": "_Test Company"
"company": "_Test Company",
"create_account_under": "Fixed Assets - _TC"
}],
[{
"doctype": "Warehouse",
"warehouse_name": "_Test Warehouse 2",
"create_account_under": "Stock Assets - _TC",
"company": "_Test Company 1"
}, {
"doctype": "Warehouse User",

View File

@@ -15,4 +15,14 @@ cur_frm.cscript.merge = function(doc, cdt, cdn) {
if (check) {
return $c_obj(make_doclist(cdt, cdn), 'merge_warehouses', '', '');
}
}
}
cur_frm.set_query("create_account_under", function() {
return {
filters: {
"company": cur_frm.doc.company,
"debit_or_credit": "Debit",
'group_or_ledger': "Group"
}
}
})

View File

@@ -4,9 +4,9 @@
from __future__ import unicode_literals
import webnotes
from webnotes.utils import flt, validate_email_add
from webnotes.utils import cint, flt, validate_email_add
from webnotes.model.code import get_obj
from webnotes import msgprint
from webnotes import msgprint, _
class DocType:
@@ -18,39 +18,56 @@ class DocType:
suffix = " - " + webnotes.conn.get_value("Company", self.doc.company, "abbr")
if not self.doc.warehouse_name.endswith(suffix):
self.doc.name = self.doc.warehouse_name + suffix
def get_bin(self, item_code, warehouse=None):
warehouse = warehouse or self.doc.name
bin = webnotes.conn.sql("select name from tabBin where item_code = %s and \
warehouse = %s", (item_code, warehouse))
bin = bin and bin[0][0] or ''
if not bin:
bin_wrapper = webnotes.bean([{
"doctype": "Bin",
"item_code": item_code,
"warehouse": warehouse,
}])
bin_wrapper.ignore_permissions = 1
bin_wrapper.insert()
bin_obj = bin_wrapper.make_controller()
else:
bin_obj = get_obj('Bin', bin)
return bin_obj
def update_bin(self, args):
is_stock_item = webnotes.conn.get_value('Item', args.get("item_code"), 'is_stock_item')
if is_stock_item == 'Yes':
bin = self.get_bin(args.get("item_code"))
bin.update_stock(args)
return bin
else:
msgprint("[Stock Update] Ignored %s since it is not a stock item"
% args.get("item_code"))
def validate(self):
if self.doc.email_id and not validate_email_add(self.doc.email_id):
msgprint("Please enter valid Email Id", raise_exception=1)
def on_update(self):
self.create_account_head()
def create_account_head(self):
if cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")):
if not webnotes.conn.get_value("Account", {"account_type": "Warehouse",
"master_name": self.doc.name}) and not webnotes.conn.get_value("Account",
{"account_name": self.doc.warehouse_name}):
if self.doc.__islocal or not webnotes.conn.get_value("Stock Ledger Entry",
{"warehouse": self.doc.name}):
self.validate_parent_account()
ac_bean = webnotes.bean({
"doctype": "Account",
'account_name': self.doc.warehouse_name,
'parent_account': self.doc.create_account_under,
'group_or_ledger':'Ledger',
'company':self.doc.company,
"account_type": "Warehouse",
"master_name": self.doc.name,
"freeze_account": "No"
})
ac_bean.ignore_permissions = True
ac_bean.insert()
msgprint(_("Account Head") + ": " + ac_bean.doc.name + _(" created"))
def validate_parent_account(self):
if not self.doc.create_account_under:
parent_account = webnotes.conn.get_value("Account",
{"account_name": "Stock Assets", "company": self.doc.company})
if parent_account:
self.doc.create_account_under = parent_account
else:
webnotes.throw(_("Please enter account group under which account \
for warehouse ") + self.doc.name +_(" will be created"))
def on_rename(self, new, old, merge=False):
webnotes.conn.set_value("Account", {"account_type": "Warehouse", "master_name": old},
"master_name", new)
if merge:
from stock.stock_ledger import update_entries_after
for item_code in webnotes.conn.sql("""select item_code from `tabBin`
where warehouse=%s""", new):
update_entries_after({"item_code": item_code, "warehouse": new})
def merge_warehouses(self):
webnotes.conn.auto_commit_on_many_writes = 1
@@ -65,6 +82,15 @@ class DocType:
link_fields = rename_doc.get_link_fields('Warehouse')
rename_doc.update_link_field_values(link_fields, self.doc.name, self.doc.merge_with)
account_link_fields = rename_doc.get_link_fields('Account')
old_warehouse_account = webnotes.conn.get_value("Account", {"master_name": self.doc.name})
new_warehouse_account = webnotes.conn.get_value("Account",
{"master_name": self.doc.merge_with})
rename_doc.update_link_field_values(account_link_fields, old_warehouse_account,
new_warehouse_account)
webnotes.conn.delete_doc("Account", old_warehouse_account)
for item_code in items:
self.repost(item_code[0], self.doc.merge_with)
@@ -75,9 +101,10 @@ class DocType:
def repost(self, item_code, warehouse=None):
from stock.utils import get_bin
self.repost_actual_qty(item_code, warehouse)
bin = self.get_bin(item_code, warehouse)
bin = get_bin(item_code, warehouse)
self.repost_reserved_qty(bin)
self.repost_indented_qty(bin)
self.repost_ordered_qty(bin)
@@ -172,17 +199,15 @@ class DocType:
else:
webnotes.conn.sql("delete from `tabBin` where name = %s", d['name'])
warehouse_account = webnotes.conn.get_value("Account",
{"account_type": "Warehosue", "master_name": self.doc.name})
if warehouse_account:
webnotes.delete_doc("Account", warehouse_account)
# delete cancelled sle
if webnotes.conn.sql("""select name from `tabStock Ledger Entry`
where warehouse = %s and ifnull('is_cancelled', '') = 'No'""", self.doc.name):
if webnotes.conn.sql("""select name from `tabStock Ledger Entry` where warehouse = %s""", self.doc.name):
msgprint("""Warehosue can not be deleted as stock ledger entry
exists for this warehouse.""", raise_exception=1)
else:
webnotes.conn.sql("delete from `tabStock Ledger Entry` where warehouse = %s", self.doc.name)
def on_rename(self, newdn, olddn, merge=False):
if merge:
from stock.stock_ledger import update_entries_after
for item_code in webnotes.conn.sql("""select item_code from `tabBin`
where warehouse=%s""", newdn):
update_entries_after({"item_code": item_code, "warehouse": newdn})

View File

@@ -2,7 +2,7 @@
{
"creation": "2013-03-07 18:50:32",
"docstatus": 0,
"modified": "2013-07-23 12:01:16",
"modified": "2013-09-16 10:45:49",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -20,8 +20,7 @@
"name": "__common__",
"parent": "Warehouse",
"parentfield": "fields",
"parenttype": "DocType",
"read_only": 0
"parenttype": "DocType"
},
{
"doctype": "DocPerm",
@@ -43,7 +42,8 @@
"fieldtype": "Section Break",
"label": "Warehouse Detail",
"oldfieldtype": "Section Break",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"doctype": "DocField",
@@ -53,6 +53,7 @@
"oldfieldname": "warehouse_name",
"oldfieldtype": "Data",
"permlevel": 0,
"read_only": 0,
"reqd": 1
},
{
@@ -65,14 +66,26 @@
"oldfieldtype": "Link",
"options": "Company",
"permlevel": 0,
"read_only": 0,
"reqd": 1,
"search_index": 1
},
{
"depends_on": "eval:sys_defaults.auto_accounting_for_stock",
"description": "Account for the warehouse (Perpetual Inventory) will be created under this Account.",
"doctype": "DocField",
"fieldname": "create_account_under",
"fieldtype": "Link",
"label": "Create Account Under",
"options": "Account",
"permlevel": 0
},
{
"doctype": "DocField",
"fieldname": "column_break_4",
"fieldtype": "Section Break",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"description": "If set, data entry is only allowed for specified users. Else, entry is allowed for all users with requisite permissions.",
@@ -81,7 +94,8 @@
"fieldtype": "Table",
"label": "Warehouse Users",
"options": "Warehouse User",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"description": "For Reference Only.",
@@ -89,7 +103,8 @@
"fieldname": "warehouse_contact_info",
"fieldtype": "Section Break",
"label": "Warehouse Contact Info",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"doctype": "DocField",
@@ -100,7 +115,8 @@
"oldfieldname": "email_id",
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0
"print_hide": 0,
"read_only": 0
},
{
"doctype": "DocField",
@@ -110,7 +126,8 @@
"oldfieldname": "phone_no",
"oldfieldtype": "Int",
"options": "Phone",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"doctype": "DocField",
@@ -120,14 +137,16 @@
"oldfieldname": "mobile_no",
"oldfieldtype": "Int",
"options": "Phone",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "column_break0",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"doctype": "DocField",
@@ -136,7 +155,8 @@
"label": "Address Line 1",
"oldfieldname": "address_line_1",
"oldfieldtype": "Data",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"doctype": "DocField",
@@ -145,7 +165,8 @@
"label": "Address Line 2",
"oldfieldname": "address_line_2",
"oldfieldtype": "Data",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"doctype": "DocField",
@@ -156,6 +177,7 @@
"oldfieldname": "city",
"oldfieldtype": "Data",
"permlevel": 0,
"read_only": 0,
"reqd": 0
},
{
@@ -166,7 +188,8 @@
"oldfieldname": "state",
"oldfieldtype": "Select",
"options": "Suggest",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"doctype": "DocField",
@@ -175,7 +198,8 @@
"label": "PIN",
"oldfieldname": "pin",
"oldfieldtype": "Int",
"permlevel": 0
"permlevel": 0,
"read_only": 0
},
{
"description": "This feature is for merging duplicate warehouses. It will replace all the links of this warehouse by \"Merge Into\" warehouse. After merging you can delete this warehouse, as stock level for this warehouse will be zero.",
@@ -183,7 +207,8 @@
"fieldname": "merge_warehouses_section",
"fieldtype": "Section Break",
"label": "Merge Warehouses",
"permlevel": 2
"permlevel": 2,
"read_only": 0
},
{
"doctype": "DocField",
@@ -191,14 +216,16 @@
"fieldtype": "Link",
"label": "Merge Into",
"options": "Warehouse",
"permlevel": 2
"permlevel": 2,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "merge",
"fieldtype": "Button",
"label": "Merge",
"permlevel": 2
"permlevel": 2,
"read_only": 0
},
{
"amend": 0,