sql injection fixes
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index 2b7a0b1..0ed44c9 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -241,7 +241,7 @@
 			rebuild_tree("Account", "parent_account")
 
 def get_master_name(doctype, txt, searchfield, start, page_len, filters):
-	conditions = (" and company='%s'"% filters["company"]) if doctype == "Warehouse" else ""
+	conditions = (" and company='%s'"% filters["company"].replace("'", "\'")) if doctype == "Warehouse" else ""
 		
 	return frappe.db.sql("""select name from `tab%s` where %s like %s %s
 		order by name limit %s, %s""" %
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index cbe94fd..c5a7028 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -143,7 +143,7 @@
 		
 	# Update outstanding amt on against voucher
 	if against_voucher_type in ["Sales Invoice", "Purchase Invoice"]:
-		frappe.db.sql("update `tab%s` set outstanding_amount=%s where name='%s'" %
+		frappe.db.sql("update `tab%s` set outstanding_amount=%s where name=%s",
 		 	(against_voucher_type, bal, against_voucher))
 			
 def validate_frozen_account(account, adv_adj=None):
diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
index c1635bd..f4e886b 100644
--- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
+++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
@@ -88,7 +88,7 @@
 					msgprint("You can not enter current voucher in 'Against JV' column",
 						raise_exception=1)
 				elif not frappe.db.sql("""select name from `tabJournal Voucher Detail` 
-						where account = '%s' and docstatus = 1 and parent = '%s'""" % 
+						where account = %s and docstatus = 1 and parent = %s""", 
 						(d.account, d.against_jv)):
 					msgprint("Against JV: %s is not valid." % d.against_jv, raise_exception=1)
 		
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index f0a9ecb..1d7af8a 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -137,7 +137,7 @@
 		for d in getlist(self.doclist,'entries'):
 			if d.purchase_order and not d.purchase_order in check_list and not d.purchase_receipt:
 				check_list.append(d.purhcase_order)
-				stopped = frappe.db.sql("select name from `tabPurchase Order` where status = 'Stopped' and name = '%s'" % d.purchase_order)
+				stopped = frappe.db.sql("select name from `tabPurchase Order` where status = 'Stopped' and name = %s", d.purchase_order)
 				if stopped:
 					msgprint("One cannot do any transaction against 'Purchase Order' : %s, it's status is 'Stopped'" % (d.purhcase_order))
 					raise Exception
@@ -238,11 +238,11 @@
 	def check_prev_docstatus(self):
 		for d in getlist(self.doclist,'entries'):
 			if d.purchase_order:
-				submitted = frappe.db.sql("select name from `tabPurchase Order` where docstatus = 1 and name = '%s'" % d.purchase_order)
+				submitted = frappe.db.sql("select name from `tabPurchase Order` where docstatus = 1 and name = %s", d.purchase_order)
 				if not submitted:
 					frappe.throw("Purchase Order : "+ cstr(d.purchase_order) +" is not submitted")
 			if d.purchase_receipt:
-				submitted = frappe.db.sql("select name from `tabPurchase Receipt` where docstatus = 1 and name = '%s'" % d.purchase_receipt)
+				submitted = frappe.db.sql("select name from `tabPurchase Receipt` where docstatus = 1 and name = %s", d.purchase_receipt)
 				if not submitted:
 					frappe.throw("Purchase Receipt : "+ cstr(d.purchase_receipt) +" is not submitted")
 					
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index c2d7c4b..74ff03f 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -15,7 +15,7 @@
 		condition = "i.is_purchase_item='Yes'"
 	
 	if item_group and item_group != "All Item Groups":
-		condition += " and i.item_group='%s'" % item_group
+		condition += " and i.item_group='%s'" % item_group.replace("'", "\'")
 
 	if item:
 		condition += " and CONCAT(i.name, i.item_name) like %(name)s"
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 769a01e..a261334 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -257,7 +257,7 @@
 
 
 	def validate_debit_acc(self):
-		acc = frappe.db.sql("select debit_or_credit, is_pl_account from tabAccount where name = '%s' and docstatus != 2" % self.doc.debit_to)
+		acc = frappe.db.sql("select debit_or_credit, is_pl_account from tabAccount where name = %s and docstatus != 2", self.doc.debit_to)
 		if not acc:
 			msgprint("Account: "+ self.doc.debit_to + " does not exist")
 			raise Exception
@@ -272,8 +272,11 @@
 	def validate_fixed_asset_account(self):
 		"""Validate Fixed Asset Account and whether Income Account Entered Exists"""
 		for d in getlist(self.doclist,'entries'):
-			item = frappe.db.sql("select name,is_asset_item,is_sales_item from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life >	now())"% d.item_code)
-			acc =	frappe.db.sql("select account_type from `tabAccount` where name = '%s' and docstatus != 2" % d.income_account)
+			item = frappe.db.sql("""select name,is_asset_item,is_sales_item from `tabItem` 
+				where name = %s and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' 
+					or end_of_life > now())""", d.item_code)
+			acc =	frappe.db.sql("""select account_type from `tabAccount` 
+				where name = %s and docstatus != 2""", d.income_account)
 			if not acc:
 				msgprint("Account: "+d.income_account+" does not exist in the system", raise_exception=True)
 			elif item and item[0][1] == 'Yes' and not acc[0][0] == 'Fixed Asset Account':
@@ -344,7 +347,9 @@
 	def validate_proj_cust(self):
 		"""check for does customer belong to same project as entered.."""
 		if self.doc.project_name and self.doc.customer:
-			res = frappe.db.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
+			res = frappe.db.sql("""select name from `tabProject` 
+				where name = %s and (customer = %s or 
+					ifnull(customer,'')='')""", (self.doc.project_name, self.doc.customer))
 			if not res:
 				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in that project."%(self.doc.customer,self.doc.project_name))
 				raise Exception
@@ -397,10 +402,13 @@
 	 
 	
 	def get_warehouse(self):
-		w = frappe.db.sql("select warehouse from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (frappe.session['user'], self.doc.company))
+		w = frappe.db.sql("""select warehouse from `tabPOS Setting` 
+			where ifnull(user,'') = %s and company = %s""", 
+			(frappe.session['user'], self.doc.company))
 		w = w and w[0][0] or ''
 		if not w:
-			ps = frappe.db.sql("select name, warehouse from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % self.doc.company)
+			ps = frappe.db.sql("""select name, warehouse from `tabPOS Setting` 
+				where ifnull(user,'') = '' and company = %s""", self.doc.company)
 			if not ps:
 				msgprint("To make POS entry, please create POS Setting from Accounts --> POS Setting page and refresh the system.", raise_exception=True)
 			elif not ps[0][1]:
@@ -439,13 +447,15 @@
 	def check_prev_docstatus(self):
 		for d in getlist(self.doclist,'entries'):
 			if d.sales_order:
-				submitted = frappe.db.sql("select name from `tabSales Order` where docstatus = 1 and name = '%s'" % d.sales_order)
+				submitted = frappe.db.sql("""select name from `tabSales Order` 
+					where docstatus = 1 and name = %s""", d.sales_order)
 				if not submitted:
 					msgprint("Sales Order : "+ cstr(d.sales_order) +" is not submitted")
 					raise Exception , "Validation Error."
 
 			if d.delivery_note:
-				submitted = frappe.db.sql("select name from `tabDelivery Note` where docstatus = 1 and name = '%s'" % d.delivery_note)
+				submitted = frappe.db.sql("""select name from `tabDelivery Note` 
+					where docstatus = 1 and name = %s""", d.delivery_note)
 				if not submitted:
 					msgprint("Delivery Note : "+ cstr(d.delivery_note) +" is not submitted")
 					raise Exception , "Validation Error."
diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.py b/erpnext/accounts/report/accounts_payable/accounts_payable.py
index fffc948..b65c1e8 100644
--- a/erpnext/accounts/report/accounts_payable/accounts_payable.py
+++ b/erpnext/accounts/report/accounts_payable/accounts_payable.py
@@ -93,7 +93,7 @@
 def get_conditions(filters, before_report_date=True):
 	conditions = ""
 	if filters.get("company"):
-		conditions += " and company='%s'" % filters["company"]
+		conditions += " and company='%s'" % filters["company"].replace("'", "\'")
 	
 	supplier_accounts = []
 	if filters.get("account"):
diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
index 36d02e0..33e0495 100644
--- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
+++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
@@ -51,7 +51,8 @@
 	if filters.get("account"):
 		party_accounts = [filters["account"]]
 	else:
-		cond = filters.get("company") and (" and company = '%s'" % filters["company"]) or ""
+		cond = filters.get("company") and (" and company = '%s'" % 
+			filters["company"].replace("'", "\'")) or ""
 		
 		if filters.get("payment_type") == "Incoming":
 			cond += " and master_type = 'Customer'"
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 4edf774..0964478 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -22,7 +22,7 @@
 	# if year start date is 2012-04-01, year end date should be 2013-03-31 (hence subdate)
 	cond = ""
 	if fiscal_year:
-		cond = "name = '%s'" % fiscal_year
+		cond = "name = '%s'" % fiscal_year.replace("'", "\'")
 	else:
 		cond = "'%s' >= year_start_date and '%s' <= year_end_date" % \
 			(date, date)
@@ -88,7 +88,7 @@
 			and ac.lft >= %s and ac.rgt <= %s
 		)""" % (acc.lft, acc.rgt))
 	else:
-		cond.append("""gle.account = "%s" """ % (account, ))
+		cond.append("""gle.account = "%s" """ % (account.replace('"', '\"'), ))
 	
 	bal = frappe.db.sql("""
 		SELECT sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 1210ee9..fca61e3 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -127,7 +127,8 @@
 				update_bin(args)
 				
 	def check_modified_date(self):
-		mod_db = frappe.db.sql("select modified from `tabPurchase Order` where name = '%s'" % self.doc.name)
+		mod_db = frappe.db.sql("select modified from `tabPurchase Order` where name = %s", 
+			self.doc.name)
 		date_diff = frappe.db.sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified)))
 		
 		if date_diff and date_diff[0][0]:
@@ -166,7 +167,10 @@
 		pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Receipt', docname = self.doc.name, detail_doctype = 'Purchase Receipt Item')
 
 		# Check if Purchase Invoice has been submitted against current Purchase Order
-		submitted = frappe.db.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_order = '%s' and t1.docstatus = 1" % self.doc.name)
+		submitted = frappe.db.sql("""select t1.name 
+			from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 
+			where t1.name = t2.parent and t2.purchase_order = %s and t1.docstatus = 1""",  
+			self.doc.name)
 		if submitted:
 			msgprint("Purchase Invoice : " + cstr(submitted[0][0]) + " has already been submitted !")
 			raise Exception
diff --git a/erpnext/buying/doctype/quality_inspection/quality_inspection.py b/erpnext/buying/doctype/quality_inspection/quality_inspection.py
index 972757f..4222d68 100644
--- a/erpnext/buying/doctype/quality_inspection/quality_inspection.py
+++ b/erpnext/buying/doctype/quality_inspection/quality_inspection.py
@@ -23,16 +23,19 @@
 
 	def on_submit(self):
 		if self.doc.purchase_receipt_no:
-			frappe.db.sql("update `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 set t1.qa_no = '%s', t2.modified = '%s' \
-				where t1.parent = '%s' and t1.item_code = '%s' and t1.parent = t2.name" \
-				% (self.doc.name, self.doc.modified, self.doc.purchase_receipt_no, self.doc.item_code))
+			frappe.db.sql("""update `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 
+				set t1.qa_no = %s, t2.modified = %s 
+				where t1.parent = %s and t1.item_code = %s and t1.parent = t2.name""",  
+				(self.doc.name, self.doc.modified, self.doc.purchase_receipt_no, 
+					self.doc.item_code))
 		
 
 	def on_cancel(self):
 		if self.doc.purchase_receipt_no:
-			frappe.db.sql("update `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 set t1.qa_no = '', t2.modified = '%s' \
-				where t1.parent = '%s' and t1.item_code = '%s' and t1.parent = t2.name" \
-				% (self.doc.modified, self.doc.purchase_receipt_no, self.doc.item_code))
+			frappe.db.sql("""update `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 
+				set t1.qa_no = '', t2.modified = %s
+				where t1.parent = %s and t1.item_code = %s and t1.parent = t2.name""", 
+				(self.doc.modified, self.doc.purchase_receipt_no, self.doc.item_code))
 
 
 def item_query(doctype, txt, searchfield, start, page_len, filters):
diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py
index 878dda5..f937958 100644
--- a/erpnext/buying/doctype/supplier/supplier.py
+++ b/erpnext/buying/doctype/supplier/supplier.py
@@ -63,7 +63,7 @@
 			
 	def get_contacts(self,nm):
 		if nm:
-			contact_details =frappe.db.convert_to_lists(frappe.db.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where supplier = '%s'"%nm))
+			contact_details =frappe.db.convert_to_lists(frappe.db.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where supplier = %s", nm))
 	 
 			return contact_details
 		else:
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index 40be699..f389b99 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -118,10 +118,11 @@
 					args['name'] = d.fields[args['join_field']]
 
 					# get all qty where qty > target_field
-					item = frappe.db.sql("""select item_code, `%(target_ref_field)s`, 
-						`%(target_field)s`, parenttype, parent from `tab%(target_dt)s` 
-						where `%(target_ref_field)s` < `%(target_field)s` 
-						and name="%(name)s" and docstatus=1""" % args, as_dict=1)
+					item = frappe.db.sql("""select item_code, `{target_ref_field}`, 
+						`{target_field}`, parenttype, parent from `{target_dt}` 
+						where `{target_ref_field}` < `{target_field}` 
+						and name=%s and docstatus=1""".format(**args), 
+						args['name'], as_dict=1)
 					if item:
 						item = item[0]
 						item['idx'] = d.idx
@@ -181,9 +182,9 @@
 		for args in self.status_updater:
 			# condition to include current record (if submit or no if cancel)
 			if self.doc.docstatus == 1:
-				args['cond'] = ' or parent="%s"' % self.doc.name
+				args['cond'] = ' or parent="%s"' % self.doc.name.replace('"', '\"')
 			else:
-				args['cond'] = ' and parent!="%s"' % self.doc.name
+				args['cond'] = ' and parent!="%s"' % self.doc.name.replace('"', '\"')
 			
 			args['modified_cond'] = ''
 			if change_modified:
diff --git a/erpnext/home/page/activity/activity.py b/erpnext/home/page/activity/activity.py
index 0d088bb..8fab54a 100644
--- a/erpnext/home/page/activity/activity.py
+++ b/erpnext/home/page/activity/activity.py
@@ -7,15 +7,16 @@
 @frappe.whitelist()
 def get_feed(arg=None):
 	"""get feed"""	
+	roles = frappe.get_roles()
 	return frappe.db.sql("""select
 		distinct t1.name, t1.feed_type, t1.doc_type, t1.doc_name, t1.subject, t1.owner,
 		t1.modified
 		from tabFeed t1, tabDocPerm t2
 		where t1.doc_type = t2.parent
-		and t2.role in ('%s')
+		and t2.role in (%s)
 		and t2.permlevel = 0
 		and ifnull(t2.`read`,0) = 1
 		order by t1.modified desc
-		limit %s, %s""" % ("','".join(frappe.get_roles()), 
-			frappe.form_dict['limit_start'], frappe.form_dict['limit_page_length']), 
-			as_dict=1)
\ No newline at end of file
+		limit %s, %s""" % (','.join(['%s']*len(roles)), '%s', '%s'), 
+		tuple(roles + [frappe.form_dict['limit_start'], frappe.form_dict['limit_page_length']]),
+		as_dict=1)
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index cdc5979..1630e14 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -141,11 +141,10 @@
 			msgprint("Employee : %s has already applied for %s between %s and %s on %s. Please refer Leave Application : <a href=\"#Form/Leave Application/%s\">%s</a>" % (self.doc.employee, cstr(d['leave_type']), formatdate(d['from_date']), formatdate(d['to_date']), formatdate(d['posting_date']), d['name'], d['name']), raise_exception = OverlapError)
 
 	def validate_max_days(self):
-		max_days = frappe.db.sql("select max_days_allowed from `tabLeave Type` where name = '%s'" %(self.doc.leave_type))
-		max_days = max_days and flt(max_days[0][0]) or 0
+		max_days = frappe.db.get_value("Leave Type", self.doc.leave_type, "max_days_allowed")
 		if max_days and self.doc.total_leave_days > max_days:
-			msgprint("Sorry ! You cannot apply for %s for more than %s days" % (self.doc.leave_type, max_days))
-			raise Exception
+			frappe.throw("Sorry ! You cannot apply for %s for more than %s days" % 
+				(self.doc.leave_type, max_days))
 			
 	def validate_leave_approver(self):
 		employee = frappe.bean("Employee", self.doc.employee)
@@ -328,11 +327,12 @@
 	txt = "%" + cstr(txt) + "%"
 	
 	if "Leave Approver" in frappe.user.get_roles():
+		user = frappe.session.user.replace('"', '\"')
 		condition = """and (exists(select ela.name from `tabEmployee Leave Approver` ela
 				where ela.parent=`tabEmployee`.name and ela.leave_approver= "%s") or 
 			not exists(select ela.name from `tabEmployee Leave Approver` ela 
 				where ela.parent=`tabEmployee`.name)
-			or user_id = "%s")""" % (frappe.session.user, frappe.session.user)
+			or user_id = "%s")""" % (user, user)
 	else:
 		from frappe.widgets.reportview import build_match_conditions
 		condition = build_match_conditions("Employee")
diff --git a/erpnext/hr/doctype/salary_manager/salary_manager.py b/erpnext/hr/doctype/salary_manager/salary_manager.py
index 622b89b..0420f77 100644
--- a/erpnext/hr/doctype/salary_manager/salary_manager.py
+++ b/erpnext/hr/doctype/salary_manager/salary_manager.py
@@ -37,7 +37,7 @@
 		cond = ''
 		for f in ['company', 'branch', 'department', 'designation', 'grade']:
 			if self.doc.fields.get(f):
-				cond += " and t1." + f + " = '" + self.doc.fields.get(f) + "'"		
+				cond += " and t1." + f + " = '" + self.doc.fields.get(f).replace("'", "\'") + "'"		
 		
 		return cond
 
@@ -58,7 +58,7 @@
 		
 	
 	def get_month_details(self, year, month):
-		ysd = frappe.db.sql("select year_start_date from `tabFiscal Year` where name ='%s'"%year)[0][0]
+		ysd = frappe.db.get_value("Fiscal Year", year, "year_start_date")
 		if ysd:
 			from dateutil.relativedelta import relativedelta
 			import calendar, datetime
@@ -117,8 +117,8 @@
 		cond = self.get_filter_condition()
 		ss_list = frappe.db.sql("""
 			select t1.name from `tabSalary Slip` t1 
-			where t1.docstatus = 0 and month = '%s' and fiscal_year = '%s' %s
-		""" % (self.doc.month, self.doc.fiscal_year, cond))
+			where t1.docstatus = 0 and month = %s and fiscal_year = %s %s
+		""" % ('%s', '%s', cond), (self.doc.month, self.doc.fiscal_year))
 		return ss_list
 			
 				
@@ -179,8 +179,8 @@
 		cond = self.get_filter_condition()
 		tot = frappe.db.sql("""
 			select sum(rounded_total) from `tabSalary Slip` t1 
-			where t1.docstatus = 1 and month = '%s' and fiscal_year = '%s' %s
-		""" % (self.doc.month, self.doc.fiscal_year, cond))
+			where t1.docstatus = 1 and month = %s and fiscal_year = %s %s
+		""" % ('%s', '%s', cond), (self.doc.month, self.doc.fiscal_year))
 		
 		return flt(tot[0][0])
 	
diff --git a/erpnext/hr/doctype/salary_manager/test_salary_manager.py b/erpnext/hr/doctype/salary_manager/test_salary_manager.py
deleted file mode 100644
index 071d9d4..0000000
--- a/erpnext/hr/doctype/salary_manager/test_salary_manager.py
+++ /dev/null
@@ -1,205 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import unittest
-import frappe
-
-test_records = []
-
-# from frappe.model.doc import Document
-# from frappe.model.code import get_obj
-# frappe.db.sql = frappe.db.sql
-# 
-# class TestSalaryManager(unittest.TestCase):
-# 	def setUp(self):
-# 		frappe.db.begin()
-# 		for rec in [des1, dep1, branch1, grade1, comp1, emp1, emp2]:
-# 			rec.save(1)
-# 					
-# 		ss1[0].employee = emp1.name
-# 		for s in ss1: s.save(1)
-# 		for s in ss1[1:]:
-# 			frappe.db.sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
-# 			frappe.db.sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss1[0].name, s.name))
-# 			
-# 		
-# 		ss2[0].employee = emp2.name
-# 		for s in ss2: s.save(1)		
-# 		for s in ss2[1:]:
-# 			frappe.db.sql("update `tabSalary Structure Earning` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
-# 			frappe.db.sql("update `tabSalary Structure Deduction` set parent = '%s' where name = '%s'" % (ss2[0].name, s.name))
-# 			
-# 		sman.save()
-# 		self.sm = get_obj('Salary Manager')	
-# 		leave.save(1)
-# 		self.sm.create_sal_slip()
-# 		
-# 	def test_creation(self):
-# 		ssid = frappe.db.sql("""
-# 			select name, department 
-# 			from `tabSalary Slip` 
-# 			where month = '08' and fiscal_year='2011-2012'""")
-# 
-# 		self.assertTrue(len(ssid)==1)
-# 		self.assertTrue(ssid[0][1] == 'dep1')
-# 		
-# 		
-# 	def test_lwp_calc(self):
-# 		ss = frappe.db.sql("""
-# 			select payment_days
-# 			from `tabSalary Slip` 
-# 			where month = '08' and fiscal_year='2011-2012' and employee = '%s'
-# 		""" % emp1.name)
-# 		
-# 		self.assertTrue(ss[0][0]==27)
-# 		
-# 	def test_net_pay(self):
-# 		ss = frappe.db.sql("""
-# 			select rounded_total 
-# 			from `tabSalary Slip` 
-# 			where month = '08'
-# 			and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name)
-# 		self.assertTrue(ss[0][0]==67)
-# 
-# 	def test_submit(self):
-# 		self.sm.submit_salary_slip()
-# 		ss = frappe.db.sql("""
-# 			select docstatus 
-# 			from `tabSalary Slip` 
-# 			where month = '08'
-# 			and fiscal_year='2011-2012' and employee = '%s'""" % emp1.name)
-# 		self.assertTrue(ss[0][0]==1)
-# 		
-# 	def tearDown(self):
-# 		frappe.db.rollback()
-# 		
-# #--------------------------------------------
-# # test data
-# #--------------------------------------------
-# des1 = Document(fielddata={
-# 	'name':'des1',
-# 	'doctype':'Designation',
-# 	'designation_name':'des1'
-# })
-# 
-# dep1 = Document(fielddata={
-# 	'name':'dep1',
-# 	'doctype':'Department',
-# 	'department_name' : 'dep1'
-# })
-# 
-# branch1 = Document(fielddata={
-# 	'name':'branch1',
-# 	'doctype':'Branch',
-# 	'branch' : 'branch1'
-# })
-# 
-# comp1 = Document(fielddata={
-# 	'name':'comp1',
-# 	'doctype':'Company',
-# 	'abbr':'c1',
-# 	'company_name' : 'comp1'
-# })
-# 
-# grade1 = Document(fielddata={
-# 	'name':'grade1',
-# 	'doctype':'Grade',
-# 	'grade_name' : 'grade1'	
-# })
-# 	
-# emp1 = Document(fielddata={
-# 	'doctype':'Employee',
-# 	'employee_number':'emp1',
-# 	'department':'dep1',
-# 	'designation':'des1',
-# 	'branch' : 'branch1',
-# 	'company':'comp1',
-# 	'grade':'grade1',
-# 	'naming_series':'EMP/',
-# 	'status':'Active',
-# 	'docstatus':0,
-# 	'employee_name':'emp1'
-# })
-# 
-# emp2 = Document(fielddata={
-# 	'doctype':'Employee',
-# 	'employee_number':'emp2',
-# 	'department':'dep1',
-# 	'designation':'des2',
-# 	'branch' : 'branch1',
-# 	'company':'comp1',
-# 	'naming_series':'EMP/',
-# 	'grade':'grade1',
-# 	'status':'Active',
-# 
-# })
-# 
-# ss1 = [
-# 	Document(fielddata={
-# 		'doctype':'Salary Structure',
-# 		'docstatus':0,
-# 		'employee':'emp1',
-# 		'is_active':'Yes',
-# 		'department': 'dep1',
-# 		'designation' : 'des1',
-# 		'employee_name': 'emp1'
-# 	}),
-# 	Document(fielddata={
-# 		'parenttype':'Salary Structure',
-# 		'parentfield':'earning_details',
-# 		'doctype':'Salary Structure Earning',
-# 		'e_type' : 'Basic',
-# 		'depend_on_lwp':1,
-# 		'modified_value':100
-# 	}),
-# 	Document(fielddata={
-# 		'parenttype':'Salary Structure',
-# 		'parentfield':'earning_details',
-# 		'doctype':'Salary Structure Deduction',
-# 		'd_type':'TDS',
-# 		'd_modified_amt':20
-# 	})
-# ]
-# 
-# ss2 = [
-# 	Document(fielddata={
-# 		'doctype':'Salary Structure',
-# 		'is_active':'Yes',
-# 		'docstatus':0,
-# 	}),
-# 	Document(fielddata={
-# 		'parenttype':'Salary Structure',
-# 		'parentfield':'deduction_details',
-# 		'doctype':'Salary Structure Earning',
-# 		'e_type' : 'Basic',
-# 		'modified_value':100
-# 	}),
-# 	Document(fielddata={
-# 		'parenttype':'Salary Structure',
-# 		'parentfield':'deduction_details',
-# 		'doctype':'Salary Structure Deduction',
-# 		'd_type':'TDS',
-# 		'd_modified_amt':20
-# 	})
-# ]
-# 
-# sman = Document(fielddata={
-# 		'name':'Salary Manager',
-# 		'doctype':'Salary Manager',
-# 		'company': 'comp1',
-# 		'department':'dep1',
-# 		'designation':'des1',
-# 		'month': '08',
-# 		'fiscal_year':'2011-2012'
-# 	})
-# 	
-# leave = Document(fielddata = {
-# 		'doctype':'Leave Application',
-# 		'employee':'emp1',
-# 		'from_date':'2011-08-12',
-# 		'to_date':'2011-08-15',
-# 		'total_leave_days':'4',
-# 		'leave_type':'Leave Without Pay',
-# 		'docstatus':1
-# 	})
diff --git a/erpnext/hr/report/employee_birthday/employee_birthday.py b/erpnext/hr/report/employee_birthday/employee_birthday.py
index f1f4be9..51a5051 100644
--- a/erpnext/hr/report/employee_birthday/employee_birthday.py
+++ b/erpnext/hr/report/employee_birthday/employee_birthday.py
@@ -32,6 +32,7 @@
 			"Dec"].index(filters["month"]) + 1
 		conditions += " and month(date_of_birth) = '%s'" % month
 	
-	if filters.get("company"): conditions += " and company = '%s'" % filters["company"]
+	if filters.get("company"): conditions += " and company = '%s'" % \
+		filters["company"].repalce("'", "\'")
 	
 	return conditions
\ No newline at end of file
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
index 24ab7e7..8098db4 100644
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
+++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
@@ -18,16 +18,18 @@
 		fiscal_years = [filters["fiscal_year"]]
 	else:
 		fiscal_years = frappe.db.sql_list("select name from `tabFiscal Year` order by name desc")
-		
-	employee_in = '", "'.join([e.name for e in employees])
-	
+			
 	allocations = frappe.db.sql("""select employee, fiscal_year, leave_type, total_leaves_allocated
 	 	from `tabLeave Allocation` 
-		where docstatus=1 and employee in ("%s")""" % employee_in, as_dict=True)
-	applications = frappe.db.sql("""select employee, fiscal_year, leave_type, SUM(total_leave_days) as leaves
-			from `tabLeave Application` 
-			where status="Approved" and docstatus = 1 and employee in ("%s")
-			group by employee, fiscal_year, leave_type""" % employee_in, as_dict=True)
+		where docstatus=1 and employee in (%s)""" % 
+		','.join(['%s']*len(employees)), employees, as_dict=True)
+		
+	applications = frappe.db.sql("""select employee, fiscal_year, leave_type, 
+			SUM(total_leave_days) as leaves
+		from `tabLeave Application` 
+		where status="Approved" and docstatus = 1 and employee in (%s)
+		group by employee, fiscal_year, leave_type""" % 
+			','.join(['%s']*len(employees)), employees, as_dict=True)
 	
 	columns = [
 		"Fiscal Year", "Employee:Link/Employee:150", "Employee Name::200", "Department::150"
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 5d1a5d8..2c6d642 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -271,8 +271,8 @@
 		for d in check_list:
 			bom_list, count = [self.doc.name], 0
 			while (len(bom_list) > count ):
-				boms = frappe.db.sql(" select %s from `tabBOM Item` where %s = '%s' " % 
-					(d[0], d[1], cstr(bom_list[count])))
+				boms = frappe.db.sql(" select %s from `tabBOM Item` where %s = %s " % 
+					(d[0], d[1], '%s'), cstr(bom_list[count]))
 				count = count + 1
 				for b in boms:
 					if b[0] == self.doc.name:
@@ -389,10 +389,6 @@
 			ch.docstatus = self.doc.docstatus
 			ch.save(1)
 
-	def get_parent_bom_list(self, bom_no):
-		p_bom = frappe.db.sql("select parent from `tabBOM Item` where bom_no = '%s'" % bom_no)
-		return p_bom and [i[0] for i in p_bom] or []
-
 	def validate_bom_links(self):
 		if not self.doc.is_active:
 			act_pbom = frappe.db.sql("""select distinct bom_item.parent from `tabBOM Item` bom_item
diff --git a/erpnext/manufacturing/doctype/workstation/workstation.py b/erpnext/manufacturing/doctype/workstation/workstation.py
index 3dd2fc9..2829f41 100644
--- a/erpnext/manufacturing/doctype/workstation/workstation.py
+++ b/erpnext/manufacturing/doctype/workstation/workstation.py
@@ -3,13 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
-
 from frappe.utils import flt
-from frappe.model import db_exists
-from frappe.model.bean import copy_doclist
-
-	
-
 
 class DocType:
   def __init__(self, doc, doclist=[]):
@@ -17,11 +11,15 @@
     self.doclist = doclist
 
   def update_bom_operation(self):
-      bom_list = frappe.db.sql(" select DISTINCT parent from `tabBOM Operation` where workstation = '%s'" % self.doc.name)
+      bom_list = frappe.db.sql("""select DISTINCT parent from `tabBOM Operation` 
+	  	where workstation = %s""", self.doc.name)
       for bom_no in bom_list:
-        frappe.db.sql("update `tabBOM Operation` set hour_rate = '%s' where parent = '%s' and workstation = '%s'"%( self.doc.hour_rate, bom_no[0], self.doc.name))
+        frappe.db.sql("""update `tabBOM Operation` set hour_rate = %s 
+			where parent = %s and workstation = %s""", 
+			(self.doc.hour_rate, bom_no[0], self.doc.name))
   
   def on_update(self):
-    frappe.db.set(self.doc, 'overhead', flt(self.doc.hour_rate_electricity) + flt(self.doc.hour_rate_consumable) + flt(self.doc.hour_rate_rent))
+    frappe.db.set(self.doc, 'overhead', flt(self.doc.hour_rate_electricity) + 
+		flt(self.doc.hour_rate_consumable) + flt(self.doc.hour_rate_rent))
     frappe.db.set(self.doc, 'hour_rate', flt(self.doc.hour_rate_labour) + flt(self.doc.overhead))
     self.update_bom_operation()
\ No newline at end of file
diff --git a/erpnext/selling/doctype/opportunity/opportunity.py b/erpnext/selling/doctype/opportunity/opportunity.py
index 9edc261..d2f7a2e 100644
--- a/erpnext/selling/doctype/opportunity/opportunity.py
+++ b/erpnext/selling/doctype/opportunity/opportunity.py
@@ -38,7 +38,8 @@
 		return ret
 
 	def get_cust_address(self,name):
-		details = frappe.db.sql("select customer_name, address, territory, customer_group from `tabCustomer` where name = '%s' and docstatus != 2" %(name), as_dict = 1)
+		details = frappe.db.sql("""select customer_name, address, territory, customer_group 
+			from `tabCustomer` where name = %s and docstatus != 2""", (name), as_dict = 1)
 		if details:
 			ret = {
 				'customer_name':	details and details[0]['customer_name'] or '',
@@ -48,7 +49,9 @@
 			}
 			# ********** get primary contact details (this is done separately coz. , in case there is no primary contact thn it would not be able to fetch customer details in case of join query)
 
-			contact_det = frappe.db.sql("select contact_name, contact_no, email_id from `tabContact` where customer = '%s' and is_customer = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(name), as_dict = 1)
+			contact_det = frappe.db.sql("""select contact_name, contact_no, email_id 
+				from `tabContact` where customer = %s and is_customer = 1 
+					and is_primary_contact = 'Yes' and docstatus != 2""", name, as_dict = 1)
 
 			ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or ''
 			ret['contact_no']		 = contact_det and contact_det[0]['contact_no'] or ''
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 165660d..fd915de 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -71,7 +71,7 @@
 			d.transaction_date = self.doc.transaction_date
 			
 			tot_avail_qty = frappe.db.sql("select projected_qty from `tabBin` \
-				where item_code = '%s' and warehouse = '%s'" % (d.item_code,d.warehouse))
+				where item_code = %s and warehouse = %s", (d.item_code,d.warehouse))
 			d.projected_qty = tot_avail_qty and flt(tot_avail_qty[0][0]) or 0
 
 	def validate_sales_mntc_quotation(self):
@@ -94,7 +94,9 @@
 
 	def validate_proj_cust(self):
 		if self.doc.project_name and self.doc.customer_name:
-			res = frappe.db.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
+			res = frappe.db.sql("""select name from `tabProject` where name = %s 
+				and (customer = %s or ifnull(customer,'')='')""", 
+					(self.doc.project_name, self.doc.customer))
 			if not res:
 				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
 				raise Exception
@@ -187,7 +189,10 @@
 			msgprint("Delivery Note : " + cstr(submit_dn[0][0]) + " has been submitted against " + cstr(self.doc.doctype) + ". Please cancel Delivery Note : " + cstr(submit_dn[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
 			
 		# Checks Sales Invoice
-		submit_rv = frappe.db.sql("select t1.name from `tabSales Invoice` t1,`tabSales Invoice Item` t2 where t1.name = t2.parent and t2.sales_order = '%s' and t1.docstatus = 1" % (self.doc.name))
+		submit_rv = frappe.db.sql("""select t1.name 
+			from `tabSales Invoice` t1,`tabSales Invoice Item` t2 
+			where t1.name = t2.parent and t2.sales_order = %s and t1.docstatus = 1""", 
+			self.doc.name)
 		if submit_rv:
 			msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Sales Invoice : "+ cstr(submit_rv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1)
 			
@@ -209,8 +214,9 @@
 				pro_order[0][0], raise_exception=1)
 
 	def check_modified_date(self):
-		mod_db = frappe.db.sql("select modified from `tabSales Order` where name = '%s'" % self.doc.name)
-		date_diff = frappe.db.sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified)))
+		mod_db = frappe.db.get_value("Sales Order", self.doc.name, "modified")
+		date_diff = frappe.db.sql("select TIMEDIFF('%s', '%s')" % 
+			( mod_db, cstr(self.doc.modified)))
 		if date_diff and date_diff[0][0]:
 			msgprint("%s: %s has been modified after you have opened. Please Refresh"
 				% (self.doc.doctype, self.doc.name), raise_exception=1)
diff --git a/erpnext/selling/doctype/sms_center/sms_center.py b/erpnext/selling/doctype/sms_center/sms_center.py
index e1284e2..7da6f32 100644
--- a/erpnext/selling/doctype/sms_center/sms_center.py
+++ b/erpnext/selling/doctype/sms_center/sms_center.py
@@ -5,8 +5,6 @@
 import frappe
 
 from frappe.utils import cstr
-from frappe.model import db_exists
-from frappe.model.bean import copy_doclist
 from frappe.model.code import get_obj
 from frappe import msgprint, _
 
@@ -18,11 +16,16 @@
 	def create_receiver_list(self):
 		rec, where_clause = '', ''
 		if self.doc.send_to == 'All Customer Contact':
-			where_clause = self.doc.customer and " and customer = '%s'" % self.doc.customer or " and ifnull(customer, '') != ''"
+			where_clause = self.doc.customer and " and customer = '%s'" % \
+				self.doc.customer.replace("'", "\'") or " and ifnull(customer, '') != ''"
 		if self.doc.send_to == 'All Supplier Contact':
-			where_clause = self.doc.supplier and " and ifnull(is_supplier, 0) = 1 and supplier = '%s'" % self.doc.supplier or " and ifnull(supplier, '') != ''"
+			where_clause = self.doc.supplier and \
+				" and ifnull(is_supplier, 0) = 1 and supplier = '%s'" % \
+				self.doc.supplier.replace("'", "\'") or " and ifnull(supplier, '') != ''"
 		if self.doc.send_to == 'All Sales Partner Contact':
-			where_clause = self.doc.sales_partner and " and ifnull(is_sales_partner, 0) = 1 and sales_partner = '%s'" % self.doc.sales_partner or " and ifnull(sales_partner, '') != ''"
+			where_clause = self.doc.sales_partner and \
+				" and ifnull(is_sales_partner, 0) = 1 and sales_partner = '%s'" % \
+				self.doc.sales_partner.replace("'", "\'") or " and ifnull(sales_partner, '') != ''"
 
 		if self.doc.send_to in ['All Contact', 'All Customer Contact', 'All Supplier Contact', 'All Sales Partner Contact']:
 			rec = frappe.db.sql("""select CONCAT(ifnull(first_name,''), '', ifnull(last_name,'')), 
@@ -34,8 +37,11 @@
 				ifnull(mobile_no,'')!='' and docstatus != 2 and status='Open'""")
 		
 		elif self.doc.send_to == 'All Employee (Active)':
-			where_clause = self.doc.department and " and department = '%s'" % self.doc.department or ""
-			where_clause += self.doc.branch and " and branch = '%s'" % self.doc.branch or ""
+			where_clause = self.doc.department and " and department = '%s'" % \
+				self.doc.department.replace("'", "\'") or ""
+			where_clause += self.doc.branch and " and branch = '%s'" % \
+				self.doc.branch.replace("'", "\'") or ""
+				
 			rec = frappe.db.sql("""select employee_name, cell_number from 
 				`tabEmployee` where status = 'Active' and docstatus < 2 and 
 				ifnull(cell_number,'')!='' %s""", where_clause)
diff --git a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py
index ad409f0..c7ee35f 100644
--- a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py
+++ b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py
@@ -30,25 +30,28 @@
 		dt_item.item_code, dt_item.qty, dt_item.base_amount, st.sales_person, 
 		st.allocated_percentage, dt_item.base_amount*st.allocated_percentage/100
 		from `tab%s` dt, `tab%s Item` dt_item, `tabSales Team` st 
-		where st.parent = dt.name and dt.name = dt_item.parent and st.parenttype = '%s' 
+		where st.parent = dt.name and dt.name = dt_item.parent and st.parenttype = %s 
 		and dt.docstatus = 1 %s order by st.sales_person, dt.name desc""" % 
-		(date_field, filters["doc_type"], filters["doc_type"], filters["doc_type"], conditions), 
-		tuple(items), as_list=1)
+		(date_field, filters["doc_type"], filters["doc_type"], '%s', conditions), 
+		tuple([filters["doc_type"]] + items), as_list=1)
 		
 	return entries
 
 def get_conditions(filters, date_field):
 	conditions = ""
-	if filters.get("company"): conditions += " and dt.company = '%s'" % filters["company"]
-	if filters.get("customer"): conditions += " and dt.customer = '%s'" % filters["customer"]
-	if filters.get("territory"): conditions += " and dt.territory = '%s'" % filters["territory"]
+	if filters.get("company"): conditions += " and dt.company = '%s'" % \
+		filters["company"].replace("'", "\'")
+	if filters.get("customer"): conditions += " and dt.customer = '%s'" % \
+		filters["customer"].replace("'", "\'")
+	if filters.get("territory"): conditions += " and dt.territory = '%s'" % \
+		filters["territory"].replace("'", "\'")
 	
 	if filters.get("from_date"): conditions += " and dt.%s >= '%s'" % \
 		(date_field, filters["from_date"])
 	if filters.get("to_date"): conditions += " and dt.%s <= '%s'" % (date_field, filters["to_date"])
 	
 	if filters.get("sales_person"): conditions += " and st.sales_person = '%s'" % \
-	 	filters["sales_person"]
+	 	filters["sales_person"].replace("'", "\'")
 	
 	items = get_items(filters)
 	if items:
diff --git a/erpnext/setup/doctype/authorization_rule/authorization_rule.py b/erpnext/setup/doctype/authorization_rule/authorization_rule.py
index d7c8cb2..71f5caf 100644
--- a/erpnext/setup/doctype/authorization_rule/authorization_rule.py
+++ b/erpnext/setup/doctype/authorization_rule/authorization_rule.py
@@ -5,13 +5,8 @@
 import frappe
 
 from frappe.utils import cint, cstr, flt, has_common
-from frappe.model import db_exists
-from frappe.model.bean import copy_doclist
 from frappe import msgprint
 
-	
-
-
 class DocType:
 	def __init__(self, d, dl):
 		self.doc, self.doclist = d, dl
@@ -38,12 +33,12 @@
 
 	def validate_master_name(self):
 		if self.doc.based_on == 'Customerwise Discount' and \
-				not frappe.db.sql("select name from tabCustomer where name = '%s' and docstatus != 2" % \
-				 	(self.doc.master_name)):
+				not frappe.db.sql("""select name from tabCustomer 
+					where name = %s and docstatus != 2""", (self.doc.master_name)):
 			msgprint("Please select valid Customer Name for Customerwise Discount", 
 			 	raise_exception=1)
 		elif self.doc.based_on == 'Itemwise Discount' and \
-				not frappe.db.sql("select name from tabItem where name = '%s' and docstatus != 2" % \
+				not frappe.db.sql("select name from tabItem where name = %s and docstatus != 2", 
 				 	(self.doc.master_name)):
 			msgprint("Please select valid Item Name for Itemwise Discount", raise_exception=1)
 		elif (self.doc.based_on == 'Grand Total' or \
@@ -64,7 +59,7 @@
 					Applicable To (Role).", raise_exception=1)
 			elif self.doc.system_user and self.doc.approving_role and \
 			 		has_common([self.doc.approving_role], [x[0] for x in \
-					frappe.db.sql("select role from `tabUserRole` where parent = '%s'" % \
+					frappe.db.sql("select role from `tabUserRole` where parent = %s", \
 					 	(self.doc.system_user))]):
 				msgprint("System User : %s is assigned role : %s. So rule does not make sense" % 
 				 	(self.doc.system_user,self.doc.approving_role), raise_exception=1)
diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py
index b4d5b7d..aeabf49 100644
--- a/erpnext/setup/doctype/email_digest/email_digest.py
+++ b/erpnext/setup/doctype/email_digest/email_digest.py
@@ -339,7 +339,7 @@
 	
 	def get_new_count(self, doctype, label, docstatus=0, filter_by_company=True):
 		if filter_by_company:
-			company = """and company="%s" """ % self.doc.company
+			company = """and company="%s" """ % self.doc.company.replace('"', '\"')
 		else:
 			company = ""
 		count = frappe.db.sql("""select count(*) from `tab%s`
diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.py b/erpnext/setup/doctype/sales_partner/sales_partner.py
index 288cadf..eefabf6 100644
--- a/erpnext/setup/doctype/sales_partner/sales_partner.py
+++ b/erpnext/setup/doctype/sales_partner/sales_partner.py
@@ -14,10 +14,12 @@
 		if self.doc.partner_website and not self.doc.partner_website.startswith("http"):
 			self.doc.partner_website = "http://" + self.doc.partner_website
 
-	def get_contacts(self,nm):
+	def get_contacts(self, nm):
 		if nm:
-			contact_details =frappe.db.convert_to_lists(frappe.db.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where sales_partner = '%s'"%nm))
-			return contact_details
+			return frappe.db.convert_to_lists(frappe.db.sql("""
+				select name, CONCAT(IFNULL(first_name,''), 
+					' ',IFNULL(last_name,'')),contact_no,email_id 
+				from `tabContact` where sales_partner = %s""", nm))
 		else:
 			return ''
 
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 42d1eec..a7c4923 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -46,7 +46,8 @@
 	def set_actual_qty(self):
 		for d in getlist(self.doclist, 'delivery_note_details'):
 			if d.item_code and d.warehouse:
-				actual_qty = frappe.db.sql("select actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code, d.warehouse))
+				actual_qty = frappe.db.sql("""select actual_qty from `tabBin` 
+					where item_code = %s and warehouse = %s""", (d.item_code, d.warehouse))
 				d.actual_qty = actual_qty and flt(actual_qty[0][0]) or 0
 
 	def so_required(self):
@@ -104,7 +105,9 @@
 	def validate_proj_cust(self):
 		"""check for does customer belong to same project as entered.."""
 		if self.doc.project_name and self.doc.customer:
-			res = frappe.db.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
+			res = frappe.db.sql("""select name from `tabProject` 
+				where name = %s and (customer = %s or 
+					ifnull(customer,'')='')""", (self.doc.project_name, self.doc.customer))
 			if not res:
 				msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name))
 				raise Exception
@@ -201,12 +204,18 @@
 			frappe.msgprint("Packing Error:\n" + err_msg, raise_exception=1)
 
 	def check_next_docstatus(self):
-		submit_rv = frappe.db.sql("select t1.name from `tabSales Invoice` t1,`tabSales Invoice Item` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name))
+		submit_rv = frappe.db.sql("""select t1.name 
+			from `tabSales Invoice` t1,`tabSales Invoice Item` t2 
+			where t1.name = t2.parent and t2.delivery_note = %s and t1.docstatus = 1""", 
+			(self.doc.name))
 		if submit_rv:
 			msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted !")
 			raise Exception , "Validation Error."
 
-		submit_in = frappe.db.sql("select t1.name from `tabInstallation Note` t1, `tabInstallation Note Item` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name))
+		submit_in = frappe.db.sql("""select t1.name 
+			from `tabInstallation Note` t1, `tabInstallation Note Item` t2 
+			where t1.name = t2.parent and t2.prevdoc_docname = %s and t1.docstatus = 1""", 
+			(self.doc.name))
 		if submit_in:
 			msgprint("Installation Note : "+cstr(submit_in[0][0]) +" has already been submitted !")
 			raise Exception , "Validation Error."
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index b797e43..d1e86a8 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -248,7 +248,10 @@
 		self.make_gl_entries()
 
 	def check_next_docstatus(self):
-		submit_rv = frappe.db.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % (self.doc.name))
+		submit_rv = frappe.db.sql("""select t1.name 
+			from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 
+			where t1.name = t2.parent and t2.purchase_receipt = %s and t1.docstatus = 1""", 
+			(self.doc.name))
 		if submit_rv:
 			msgprint("Purchase Invoice : " + cstr(self.submit_rv[0][0]) + " has already been submitted !")
 			raise Exception , "Validation Error."
@@ -259,13 +262,13 @@
 
 		self.check_for_stopped_status(pc_obj)
 		# Check if Purchase Invoice has been submitted against current Purchase Order
-		# pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Invoice', docname = self.doc.name, detail_doctype = 'Purchase Invoice Item')
-
-		submitted = frappe.db.sql("select t1.name from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 where t1.name = t2.parent and t2.purchase_receipt = '%s' and t1.docstatus = 1" % self.doc.name)
+		submitted = frappe.db.sql("""select t1.name 
+			from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2 
+			where t1.name = t2.parent and t2.purchase_receipt = %s and t1.docstatus = 1""", 
+			self.doc.name)
 		if submitted:
-			msgprint("Purchase Invoice : " + cstr(submitted[0][0]) + " has already been submitted !")
-			raise Exception
-
+			frappe.throw("Purchase Invoice : " + cstr(submitted[0][0]) + 
+				" has already been submitted !")
 		
 		frappe.db.set(self.doc,'status','Cancelled')
 
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index 276b369..9bb9911 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -60,8 +60,9 @@
 			if not self.doc.fields.get(k):
 				msgprint("Stock Ledger Entry: '%s' is mandatory" % k, raise_exception = 1)
 			elif k == 'warehouse':
-				if not frappe.db.sql("select name from tabWarehouse where name = '%s'" % self.doc.fields.get(k)):
-					msgprint("Warehouse: '%s' does not exist in the system. Please check." % self.doc.fields.get(k), raise_exception = 1)
+				if not frappe.db.exists("Warehouse", self.doc.fields.get(k)):
+					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 = frappe.db.sql("""select name, has_batch_no, docstatus,
@@ -78,9 +79,10 @@
 				frappe.throw("Batch number is mandatory for Item '%s'" % self.doc.item_code)
 
 			# check if batch belongs to item
-			if not frappe.db.sql("""select name from `tabBatch`
-				where item='%s' and name ='%s' and docstatus != 2""" % (self.doc.item_code, self.doc.batch_no)):
-				frappe.throw("'%s' is not a valid Batch Number for Item '%s'" % (self.doc.batch_no, self.doc.item_code))
+			if not frappe.db.get_value("Batch", 
+					{"item": self.doc.item_code, "name": self.doc.batch_no}):
+				frappe.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
diff --git a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
index 5160e83..8ff8938 100644
--- a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
+++ b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
@@ -3,11 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
-
-from frappe.utils import cstr, flt, now, cint
-from frappe.model import db_exists
-from frappe.model.bean import copy_doclist
-from frappe.model.code import get_obj
+from frappe.utils import cstr, flt, cint
 from frappe import msgprint, _
 
 
@@ -33,8 +29,7 @@
 			msgprint("Please Enter Conversion Factor.")
 			raise Exception
 		
-		stock_uom = frappe.db.sql("select stock_uom from `tabItem` where name = '%s'" % self.doc.item_code)
-		stock_uom = stock_uom and stock_uom[0][0]
+		stock_uom = frappe.db.get_value("Item", self.doc.item_code, "stock_uom")
 		if cstr(self.doc.new_stock_uom) == cstr(stock_uom):
 			msgprint("Item Master is already updated with New Stock UOM " + cstr(self.doc.new_stock_uom))
 			raise Exception
@@ -49,9 +44,20 @@
 	def update_bin(self):
 		# update bin
 		if flt(self.doc.conversion_factor) != flt(1):
-			frappe.db.sql("update `tabBin` set stock_uom = '%s' , indented_qty = ifnull(indented_qty,0) * %s, ordered_qty = ifnull(ordered_qty,0) * %s, reserved_qty = ifnull(reserved_qty,0) * %s, planned_qty = ifnull(planned_qty,0) * %s, projected_qty = actual_qty + ordered_qty + indented_qty + planned_qty - reserved_qty	where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.conversion_factor, self.doc.item_code) )
+			frappe.db.sql("""update `tabBin` 
+				set stock_uom = %s, 
+					indented_qty = ifnull(indented_qty,0) * %s, 
+					ordered_qty = ifnull(ordered_qty,0) * %s, 
+					reserved_qty = ifnull(reserved_qty,0) * %s, 
+					planned_qty = ifnull(planned_qty,0) * %s, 
+					projected_qty = actual_qty + ordered_qty + indented_qty + 
+						planned_qty - reserved_qty 
+				where item_code = %s""", (self.doc.new_stock_uom, self.doc.conversion_factor, 
+					self.doc.conversion_factor, self.doc.conversion_factor, 
+					self.doc.conversion_factor, self.doc.item_code))
 		else:
-			frappe.db.sql("update `tabBin` set stock_uom = '%s' where item_code = '%s'" % (self.doc.new_stock_uom, self.doc.item_code) )
+			frappe.db.sql("update `tabBin` set stock_uom = %s where item_code = %s", 
+				 (self.doc.new_stock_uom, self.doc.item_code) )
 
 		# acknowledge user
 		msgprint(" All Bins Updated Successfully.")
@@ -61,9 +67,13 @@
 		from erpnext.stock.stock_ledger import update_entries_after
 		
 		if flt(self.doc.conversion_factor) != flt(1):
-			frappe.db.sql("update `tabStock Ledger Entry` set stock_uom = '%s', actual_qty = ifnull(actual_qty,0) * '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.item_code))
+			frappe.db.sql("""update `tabStock Ledger Entry` 
+				set stock_uom = %s, actual_qty = ifnull(actual_qty,0) * %s 
+				where item_code = %s""", 
+				(self.doc.new_stock_uom, self.doc.conversion_factor, self.doc.item_code))
 		else:
-			frappe.db.sql("update `tabStock Ledger Entry` set stock_uom = '%s' where item_code = '%s' " % (self.doc.new_stock_uom, self.doc.item_code))
+			frappe.db.sql("""update `tabStock Ledger Entry` set stock_uom=%s 
+				where item_code=%s""", (self.doc.new_stock_uom, self.doc.item_code))
 		
 		# acknowledge user
 		msgprint("Stock Ledger Entries Updated Successfully.")
diff --git a/erpnext/support/doctype/customer_issue/customer_issue.py b/erpnext/support/doctype/customer_issue/customer_issue.py
index 9f4b3db..128accd 100644
--- a/erpnext/support/doctype/customer_issue/customer_issue.py
+++ b/erpnext/support/doctype/customer_issue/customer_issue.py
@@ -27,7 +27,10 @@
 			self.doc.resolved_by = frappe.session.user
 	
 	def on_cancel(self):
-		lst = frappe.db.sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent = t1.name and t2.prevdoc_docname = '%s' and	t1.docstatus!=2"%(self.doc.name))
+		lst = frappe.db.sql("""select t1.name 
+			from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 
+			where t2.parent = t1.name and t2.prevdoc_docname = %s and	t1.docstatus!=2""", 
+			(self.doc.name))
 		if lst:
 			lst1 = ','.join([x[0] for x in lst])
 			msgprint("Maintenance Visit No. "+lst1+" already created against this customer issue. So can not be Cancelled")
diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
index 78cd428..1ddf67b 100644
--- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
+++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
@@ -18,18 +18,12 @@
 		self.doclist = doclist
 	
 	def get_item_details(self, item_code):
-		item = frappe.db.sql("select item_name,description from `tabItem` where name = '%s'" %(item_code), as_dict=1)
-		ret = {
-			'item_name' : item and item[0]['item_name'] or '',
-			'description' : item and item[0]['description'] or ''
-		}
-		return ret
+		return frappe.db.get_value("Item", item_code, ["item_name", "description"], as_dict=1)
 			
 	def validate_serial_no(self):
 		for d in getlist(self.doclist, 'maintenance_visit_details'):
-			if d.serial_no and not frappe.db.sql("select name from `tabSerial No` where name = '%s' and docstatus != 2" % d.serial_no):
-				msgprint("Serial No: "+ d.serial_no + " not exists in the system")
-				raise Exception
+			if d.serial_no and not frappe.db.exists("Serial No", d.serial_no):
+				frappe.throw("Serial No: "+ d.serial_no + " not exists in the system")
 
 	
 	def validate(self):
diff --git a/erpnext/support/doctype/newsletter/newsletter.py b/erpnext/support/doctype/newsletter/newsletter.py
index ad5c0a7..72d05af 100644
--- a/erpnext/support/doctype/newsletter/newsletter.py
+++ b/erpnext/support/doctype/newsletter/newsletter.py
@@ -59,9 +59,9 @@
 			self.send_to_doctype = "Lead"
 			conditions = []
 			if self.doc.lead_source and self.doc.lead_source != "All":
-				conditions.append(" and source='%s'" % self.doc.lead_source)
+				conditions.append(" and source='%s'" % self.doc.lead_source.replace("'", "\'"))
 			if self.doc.lead_status and self.doc.lead_status != "All":
-				conditions.append(" and status='%s'" % self.doc.lead_status)
+				conditions.append(" and status='%s'" % self.doc.lead_status.replace("'", "\'"))
 
 			if conditions:
 				conditions = "".join(conditions)
diff --git a/erpnext/utilities/cleanup_data.py b/erpnext/utilities/cleanup_data.py
index d8c342d..c6a78c3 100644
--- a/erpnext/utilities/cleanup_data.py
+++ b/erpnext/utilities/cleanup_data.py
@@ -34,7 +34,8 @@
 		"Job Applicant", "Web Page", "Website Slideshow", "Blog Post", "Blog Category", "Blogger", 
 		"Time Log", "Time Log Batch", "Workflow"]
 	for d in trans:
-		for t in frappe.db.sql("select options from tabDocField where parent='%s' and fieldtype='Table'" % d):
+		for t in frappe.db.sql("select options from tabDocField \
+				where parent=%s and fieldtype='Table'", d):
 			frappe.db.sql("delete from `tab%s`" % (t))
 		frappe.db.sql("delete from `tab%s`" % (d))
 		print "Deleted " + d
@@ -95,11 +96,11 @@
 		'BOM': ''
 	}
 	for d in masters.keys():
-		for t in frappe.db.sql("select options from tabDocField where parent='%s' \
-			and fieldtype='Table'" % d):
-			frappe.db.sql("delete from `tab%s`" % (t))
-		lst = '"'+'","'.join(masters[d])+ '"'
-		frappe.db.sql("delete from `tab%s` where name not in (%s)" % (d, lst))
+		for t in frappe.db.sql("select options from tabDocField where parent=%s \
+			and fieldtype='Table'", d):
+				frappe.db.sql("delete from `tab%s`" % (t))
+		frappe.db.sql("delete from `tab%s` where name not in (%s)" % 
+			(d, ', '.join(['%s']*len(masters[d]), masters[d])))
 		print "Deleted " + d
 
 
@@ -125,7 +126,8 @@
 def delete_main_masters():
 	main_masters = ['Fiscal Year', 'Company', 'DefaultValue']
 	for d in main_masters:
-		for t in frappe.db.sql("select options from tabDocField where parent='%s' and fieldtype='Table'" % d):
+		for t in frappe.db.sql("select options from tabDocField \
+				where parent=%s and fieldtype='Table'", d):
 			frappe.db.sql("delete from `tab%s`" % (t))
 		frappe.db.sql("delete from `tab%s`" % (d))
 		print "Deleted " + d
diff --git a/erpnext/utilities/doctype/contact/contact.py b/erpnext/utilities/doctype/contact/contact.py
index cc7ffc0..948b753 100644
--- a/erpnext/utilities/doctype/contact/contact.py
+++ b/erpnext/utilities/doctype/contact/contact.py
@@ -30,20 +30,27 @@
 	def validate_primary_contact(self):
 		if self.doc.is_primary_contact == 1:
 			if self.doc.customer:
-				frappe.db.sql("update tabContact set is_primary_contact=0 where customer = '%s'" % (self.doc.customer))
+				frappe.db.sql("update tabContact set is_primary_contact=0 where customer = %s", 
+					(self.doc.customer))
 			elif self.doc.supplier:
-				frappe.db.sql("update tabContact set is_primary_contact=0 where supplier = '%s'" % (self.doc.supplier))	
+				frappe.db.sql("update tabContact set is_primary_contact=0 where supplier = %s", 
+					 (self.doc.supplier))	
 			elif self.doc.sales_partner:
-				frappe.db.sql("update tabContact set is_primary_contact=0 where sales_partner = '%s'" % (self.doc.sales_partner))
+				frappe.db.sql("""update tabContact set is_primary_contact=0 
+					where sales_partner = %s""", (self.doc.sales_partner))
 		else:
 			if self.doc.customer:
-				if not frappe.db.sql("select name from tabContact where is_primary_contact=1 and customer = '%s'" % (self.doc.customer)):
+				if not frappe.db.sql("select name from tabContact \
+						where is_primary_contact=1 and customer = %s", (self.doc.customer)):
 					self.doc.is_primary_contact = 1
 			elif self.doc.supplier:
-				if not frappe.db.sql("select name from tabContact where is_primary_contact=1 and supplier = '%s'" % (self.doc.supplier)):
+				if not frappe.db.sql("select name from tabContact \
+						where is_primary_contact=1 and supplier = %s", (self.doc.supplier)):
 					self.doc.is_primary_contact = 1
 			elif self.doc.sales_partner:
-				if not frappe.db.sql("select name from tabContact where is_primary_contact=1 and sales_partner = '%s'" % (self.doc.sales_partner)):
+				if not frappe.db.sql("select name from tabContact \
+						where is_primary_contact=1 and sales_partner = %s", 
+						self.doc.sales_partner):
 					self.doc.is_primary_contact = 1
 
 	def on_trash(self):