From 91e4c144705e1c2417e77100ac9678120c20dc97 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 1 May 2013 12:00:44 +0530 Subject: [PATCH 1/4] [fixes] [__islocal] use doc.fields.get('__islocal') instead of doc.__islocal --- accounts/doctype/cost_center/cost_center.py | 2 +- stock/doctype/item/item.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/accounts/doctype/cost_center/cost_center.py b/accounts/doctype/cost_center/cost_center.py index e57b6a3758..a7672452aa 100644 --- a/accounts/doctype/cost_center/cost_center.py +++ b/accounts/doctype/cost_center/cost_center.py @@ -81,7 +81,7 @@ class DocType(DocTypeNestedSet): """ 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/stock/doctype/item/item.py b/stock/doctype/item/item.py index fce6f32543..6b6dfb3700 100644 --- a/stock/doctype/item/item.py +++ b/stock/doctype/item/item.py @@ -55,7 +55,7 @@ class DocType(DocListController): 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]) \ From 4120ffefa1657255eae64d89b5cc276afe4ed200 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 1 May 2013 12:14:57 +0530 Subject: [PATCH 2/4] [project] [query] removed debug --- projects/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/utils.py b/projects/utils.py index a7a016ab3e..7a45b08d9d 100644 --- a/projects/utils.py +++ b/projects/utils.py @@ -5,4 +5,4 @@ import webnotes @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 From e97b07e43fe436049daf8b9e9620dd151d16d1fd Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 1 May 2013 14:12:19 +0530 Subject: [PATCH 3/4] [backup manager] [fix] manage mysql connection --- setup/doctype/backup_manager/backup_dropbox.py | 2 ++ setup/doctype/backup_manager/backup_googledrive.py | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/setup/doctype/backup_manager/backup_dropbox.py b/setup/doctype/backup_manager/backup_dropbox.py index ac07824a88..054d2b26b6 100644 --- a/setup/doctype/backup_manager/backup_dropbox.py +++ b/setup/doctype/backup_manager/backup_dropbox.py @@ -85,6 +85,7 @@ def backup_to_dropbox(): 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 @@ def backup_to_dropbox(): 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 7d980debe7..a705f0efa9 100644 --- a/setup/doctype/backup_manager/backup_googledrive.py +++ b/setup/doctype/backup_manager/backup_googledrive.py @@ -34,7 +34,6 @@ def get_gdrive_authorize_url(): "authorize_url": authorize_url, } -@webnotes.whitelist() def upload_files(name, mimetype, service, folder_id): if not webnotes.conn: webnotes.connect() @@ -78,6 +77,9 @@ def backup_to_gdrive(): 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 @@ def backup_to_gdrive(): #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 @@ def backup_to_gdrive(): 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(): From ecb36f2cb0486055ea076432878e99a3fddd5cfb Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 2 May 2013 11:34:37 +0530 Subject: [PATCH 4/4] [purchase] [validation] validate warehouse belongs to company if set --- .../doctype/purchase_order/test_purchase_order.py | 6 ++++++ controllers/buying_controller.py | 13 ++++++++++++- .../material_request/test_material_request.py | 6 ++++++ stock/doctype/warehouse/test_warehouse.py | 3 ++- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/buying/doctype/purchase_order/test_purchase_order.py b/buying/doctype/purchase_order/test_purchase_order.py index bd27f07687..be2e2946a9 100644 --- a/buying/doctype/purchase_order/test_purchase_order.py +++ b/buying/doctype/purchase_order/test_purchase_order.py @@ -27,6 +27,12 @@ class TestPurchaseOrder(unittest.TestCase): 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 e167dc57b7..cd822e6ecc 100644 --- a/controllers/buying_controller.py +++ b/controllers/buying_controller.py @@ -26,10 +26,13 @@ from webnotes.model.utils import round_floats_in_doc 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 @@ class BuyingController(StockController): # 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/stock/doctype/material_request/test_material_request.py b/stock/doctype/material_request/test_material_request.py index 080989f2d9..f5dbb52bbe 100644 --- a/stock/doctype/material_request/test_material_request.py +++ b/stock/doctype/material_request/test_material_request.py @@ -263,6 +263,12 @@ class TestMaterialRequest(unittest.TestCase): 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 26501beab9..f3a04581a9 100644 --- a/stock/doctype/warehouse/test_warehouse.py +++ b/stock/doctype/warehouse/test_warehouse.py @@ -2,7 +2,8 @@ test_records = [ [{ "doctype": "Warehouse", "warehouse_name": "_Test Warehouse", - "warehouse_type": "_Test Warehouse Type" + "warehouse_type": "_Test Warehouse Type", + "company": "_Test Company" }], [{ "doctype": "Warehouse",