Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/cost_center/cost_center.py b/accounts/doctype/cost_center/cost_center.py
index e57b6a3..a767245 100644
--- a/accounts/doctype/cost_center/cost_center.py
+++ b/accounts/doctype/cost_center/cost_center.py
@@ -81,7 +81,7 @@
"""
Cost Center name must be unique
"""
- if (self.doc.__islocal or not self.doc.name) and webnotes.conn.sql("select name from `tabCost Center` where cost_center_name = %s and company_name=%s", (self.doc.cost_center_name, self.doc.company_name)):
+ if (self.doc.fields.get("__islocal") or not self.doc.name) and webnotes.conn.sql("select name from `tabCost Center` where cost_center_name = %s and company_name=%s", (self.doc.cost_center_name, self.doc.company_name)):
msgprint("Cost Center Name already exists, please rename", raise_exception=1)
self.validate_mandatory()
diff --git a/buying/doctype/purchase_order/test_purchase_order.py b/buying/doctype/purchase_order/test_purchase_order.py
index bd27f07..be2e294 100644
--- a/buying/doctype/purchase_order/test_purchase_order.py
+++ b/buying/doctype/purchase_order/test_purchase_order.py
@@ -27,6 +27,12 @@
po.insert()
self.assertEquals(len(po.doclist.get({"parentfield": "po_raw_material_details"})), 2)
+ def test_warehouse_company_validation(self):
+ from controllers.buying_controller import WrongWarehouseCompany
+ po = webnotes.bean(copy=test_records[0])
+ po.doc.company = "_Test Company 1"
+ self.assertRaises(WrongWarehouseCompany, po.insert)
+
test_dependencies = ["BOM"]
diff --git a/controllers/buying_controller.py b/controllers/buying_controller.py
index e167dc5..cd822e6 100644
--- a/controllers/buying_controller.py
+++ b/controllers/buying_controller.py
@@ -26,10 +26,13 @@
from controllers.stock_controller import StockController
+class WrongWarehouseCompany(Exception): pass
+
class BuyingController(StockController):
def validate(self):
super(BuyingController, self).validate()
self.validate_stock_or_nonstock_items()
+ self.validate_warehouse_belongs_to_company()
if self.meta.get_field("currency"):
self.company_currency = get_company_currency(self.doc.company)
self.validate_conversion_rate("currency", "conversion_rate")
@@ -42,7 +45,15 @@
# set total in words
self.set_total_in_words()
-
+
+ def validate_warehouse_belongs_to_company(self):
+ for d in self.doclist.get({"warehouse": True}):
+ warehouse_company = webnotes.conn.get_value("Warehouse", d.warehouse, "company")
+ if warehouse_company and warehouse_company != self.doc.company:
+ webnotes.msgprint(_("Warehouse must belong to company") + \
+ (": %s (%s, %s)" % (d.warehouse, warehouse_company, self.doc.company)),
+ raise_exception=WrongWarehouseCompany)
+
def validate_stock_or_nonstock_items(self):
items = [d.item_code for d in self.doclist.get({"parentfield": self.fname})]
if self.stock_items:
diff --git a/projects/utils.py b/projects/utils.py
index a7a016a..7a45b08 100644
--- a/projects/utils.py
+++ b/projects/utils.py
@@ -5,4 +5,4 @@
@webnotes.whitelist()
def get_time_log_list(doctype, txt, searchfield, start, page_len, filters):
- return webnotes.conn.get_values("Time Log", filters, ["name", "activity_type", "owner"], debug=True)
\ No newline at end of file
+ return webnotes.conn.get_values("Time Log", filters, ["name", "activity_type", "owner"])
\ No newline at end of file
diff --git a/setup/doctype/backup_manager/backup_dropbox.py b/setup/doctype/backup_manager/backup_dropbox.py
index ac07824..054d2b2 100644
--- a/setup/doctype/backup_manager/backup_dropbox.py
+++ b/setup/doctype/backup_manager/backup_dropbox.py
@@ -85,6 +85,7 @@
os.path.basename(backup.backup_path_db))
upload_file_to_dropbox(filename, "/database", dropbox_client)
+ webnotes.conn.close()
response = dropbox_client.metadata("/files")
# upload files to files folder
@@ -108,6 +109,7 @@
did_not_upload.append(filename)
error_log.append(cstr(e))
+ webnotes.connect()
return did_not_upload, list(set(error_log))
def get_dropbox_session():
diff --git a/setup/doctype/backup_manager/backup_googledrive.py b/setup/doctype/backup_manager/backup_googledrive.py
index 7d980de..a705f0e 100644
--- a/setup/doctype/backup_manager/backup_googledrive.py
+++ b/setup/doctype/backup_manager/backup_googledrive.py
@@ -34,7 +34,6 @@
"authorize_url": authorize_url,
}
-@webnotes.whitelist()
def upload_files(name, mimetype, service, folder_id):
if not webnotes.conn:
webnotes.connect()
@@ -78,6 +77,9 @@
did_not_upload = []
error_log = []
+ files_folder_id = webnotes.conn.get_value("Backup Manager", None, "files_folder_id")
+
+ webnotes.conn.close()
path = os.path.join(get_base_path(), "public", "files")
for filename in os.listdir(path):
found = False
@@ -91,9 +93,7 @@
#Compare Local File with Server File
param = {}
- children = drive_service.children().list(
- folderId=webnotes.conn.get_value("Backup Manager", None, "files_folder_id"),
- **param).execute()
+ children = drive_service.children().list(folderId=files_folder_id, **param).execute()
for child in children.get('items', []):
file = drive_service.files().get(fileId=child['id']).execute()
if filename == file['title'] and size == int(file['fileSize']):
@@ -101,12 +101,12 @@
break
if not found:
try:
- upload_files(filepath, mimetype, drive_service,
- webnotes.conn.get_value("Backup Manager", None, "files_folder_id"))
+ upload_files(filepath, mimetype, drive_service, files_folder_id)
except Exception, e:
did_not_upload.append(filename)
error_log.append(cstr(e))
+ webnotes.connect()
return did_not_upload, list(set(error_log))
def get_gdrive_flow():
diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py
index fce6f32..6b6dfb3 100644
--- a/stock/doctype/item/item.py
+++ b/stock/doctype/item/item.py
@@ -55,7 +55,7 @@
ch.conversion_factor = 1
def check_stock_uom_with_bin(self):
- if not self.doc.__islocal:
+ if not self.doc.fields.get("__islocal"):
bin = webnotes.conn.sql("select stock_uom from `tabBin` where item_code = %s",
self.doc.name)
if self.doc.stock_uom and bin and cstr(bin[0][0]) \
diff --git a/stock/doctype/material_request/test_material_request.py b/stock/doctype/material_request/test_material_request.py
index 080989f..f5dbb52 100644
--- a/stock/doctype/material_request/test_material_request.py
+++ b/stock/doctype/material_request/test_material_request.py
@@ -263,6 +263,12 @@
se = webnotes.bean(copy=se_doclist)
self.assertRaises(webnotes.MappingMismatchError, se.insert)
+ def test_warehouse_company_validation(self):
+ from controllers.buying_controller import WrongWarehouseCompany
+ mr = webnotes.bean(copy=test_records[0])
+ mr.doc.company = "_Test Company 1"
+ self.assertRaises(WrongWarehouseCompany, mr.insert)
+
test_records = [
[
{
diff --git a/stock/doctype/warehouse/test_warehouse.py b/stock/doctype/warehouse/test_warehouse.py
index 26501be..f3a0458 100644
--- a/stock/doctype/warehouse/test_warehouse.py
+++ b/stock/doctype/warehouse/test_warehouse.py
@@ -2,7 +2,8 @@
[{
"doctype": "Warehouse",
"warehouse_name": "_Test Warehouse",
- "warehouse_type": "_Test Warehouse Type"
+ "warehouse_type": "_Test Warehouse Type",
+ "company": "_Test Company"
}],
[{
"doctype": "Warehouse",