diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 2218006..eb69d19 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -2,7 +2,7 @@
 from __future__ import unicode_literals
 import frappe
 
-__version__ = '8.0.33'
+__version__ = '8.0.34'
 
 
 def get_default_company(user=None):
diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py
index 8c695ed..eebf464 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.py
+++ b/erpnext/crm/doctype/opportunity/opportunity.py
@@ -75,7 +75,7 @@
 			self.lead = lead_name
 
 	def declare_enquiry_lost(self,arg):
-		if not self.has_lost_quotation():
+		if not self.has_active_quotation():
 			frappe.db.set(self, 'status', 'Lost')
 			frappe.db.set(self, 'order_lost_reason', arg)
 		else:
diff --git a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
index 742457f..3eb8e80 100644
--- a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
+++ b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
@@ -11,43 +11,55 @@
 
 	# for converting student batch into student group
 	frappe.reload_doctype("Student Group")
-	student_batches = frappe.db.sql('''select name as student_group_name, student_batch_name as batch,
-		program, academic_year, academic_term from `tabStudent Batch`''', as_dict=1)
 
-	for student_batch in student_batches:
-		# create student batch name if does not exists !!
-		if student_batch.get("batch") and not frappe.db.exists("Student Batch Name", student_batch.get("batch")):
-			frappe.get_doc({
-				"doctype": "Student Batch Name",
-				"batch_name": student_batch.get("batch")
-			}).insert(ignore_permissions=True)
+	if frappe.db.table_exists("Student Batch"):
+		student_batches = frappe.db.sql('''select name as student_group_name, student_batch_name as batch,
+			program, academic_year, academic_term from `tabStudent Batch`''', as_dict=1)
 
-		student_batch.update({"doctype":"Student Group", "group_based_on": "Batch"})
-		doc = frappe.get_doc(student_batch)
-		student_list = frappe.db.sql('''select student, student_name, active from `tabStudent Batch Student`
-			where parent=%s''', (doc.name), as_dict=1)
-		for i, student in enumerate(student_list):
-			student.update({"group_roll_number": i+1})
+		for student_batch in student_batches:
+			# create student batch name if does not exists !!
+			if student_batch.get("batch") and not frappe.db.exists("Student Batch Name", student_batch.get("batch")):
+				frappe.get_doc({
+					"doctype": "Student Batch Name",
+					"batch_name": student_batch.get("batch")
+				}).insert(ignore_permissions=True)
 
-		if student_list:
-			doc.extend("students", student_list)
+			student_batch.update({"doctype":"Student Group", "group_based_on": "Batch"})
+			doc = frappe.get_doc(student_batch)
 
-		instructor_list = frappe.db.sql('''select instructor, instructor_name from `tabStudent Batch Instructor`
-			where parent=%s''', (doc.name), as_dict=1)
-		if instructor_list:
-			doc.extend("instructors", instructor_list)
-		doc.save()
+			if frappe.db.sql("SHOW COLUMNS FROM `tabStudent Batch Student` LIKE 'active'"):
+				cond = ", active"
+			else:
+				cond = " "
+			student_list = frappe.db.sql('''select student, student_name {cond} from `tabStudent Batch Student`
+				where parent=%s'''.format(cond=cond), (doc.name), as_dict=1)
+
+			if student_list:
+				for i, student in enumerate(student_list):
+					student.update({"group_roll_number": i+1})
+				doc.extend("students", student_list)
+
+			instructor_list = frappe.db.sql('''select instructor, instructor_name from `tabStudent Batch Instructor`
+				where parent=%s''', (doc.name), as_dict=1)
+			if instructor_list:
+				doc.extend("instructors", instructor_list)
+			doc.save()
 
 	# delete the student batch and child-table
-	frappe.delete_doc("DocType", "Student Batch", force=1)
-	frappe.delete_doc("DocType", "Student Batch Student", force=1)
-	frappe.delete_doc("DocType", "Student Batch Instructor", force=1)
+	if frappe.db.table_exists("Student Batch"):
+		frappe.delete_doc("DocType", "Student Batch", force=1)
+	if frappe.db.table_exists("Student Batch Student"):
+		frappe.delete_doc("DocType", "Student Batch Student", force=1)
+	if frappe.db.table_exists("Student Batch Instructor"):
+		frappe.delete_doc("DocType", "Student Batch Instructor", force=1)
 
 	# delete the student batch creation tool
-	frappe.delete_doc("DocType", "Student Batch Creation Tool", force=1)
+	if frappe.db.table_exists("Student Batch Creation Tool"):
+		frappe.delete_doc("DocType", "Student Batch Creation Tool", force=1)
 
 	# delete the student batch creation tool
-	frappe.delete_doc("DocType", "Attendance Tool Student", force=1)
+	if frappe.db.table_exists("Attendance Tool Student"):
+		frappe.delete_doc("DocType", "Attendance Tool Student", force=1)
 
 	# change the student batch to student group in the student attendance
 	frappe.reload_doctype("Student Attendance")
diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py
index 81e0ed9..e861421 100644
--- a/erpnext/schools/doctype/student_group/student_group.py
+++ b/erpnext/schools/doctype/student_group/student_group.py
@@ -33,7 +33,7 @@
 		program_enrollment = get_program_enrollment(self.academic_year, self.academic_term, self.program, self.batch, self.course)
 		students = [d.student for d in program_enrollment] if program_enrollment else None
 		for d in self.students:
-			if self.group_based_on != "Activity" and d.student not in students and d.active == 1:
+			if self.group_based_on != "Activity" and students and d.student not in students and d.active == 1:
 				frappe.throw(_("{0} - {1} is not enrolled in the given {2}".format(d.group_roll_number, d.student_name, self.group_based_on)))
 			if not frappe.db.get_value("Student", d.student, "enabled") and d.active:
 				frappe.throw(_("{0} - {1} is inactive student".format(d.group_roll_number, d.student_name)))
diff --git a/erpnext/templates/generators/item_group.html b/erpnext/templates/generators/item_group.html
index d710cb0..a2368a4 100644
--- a/erpnext/templates/generators/item_group.html
+++ b/erpnext/templates/generators/item_group.html
@@ -33,14 +33,14 @@
 		</div>
 		<div class="text-center item-group-nav-buttons">
 			{% if frappe.form_dict.start|int > 0 %}
-			<a class="btn btn-default" href="/{{ pathname }}?start={{ frappe.form_dict.start|int - page_length }}">{{ __("Prev") }}</a>
+			<a class="btn btn-default" href="/{{ pathname }}?start={{ frappe.form_dict.start|int - page_length }}">{{ _("Prev") }}</a>
 			{% endif %}
 			{% if items|length > page_length %}
-			<a class="btn btn-default" href="/{{ pathname }}?start={{ frappe.form_dict.start|int + page_length }}">{{ __("Next") }}</a>
+			<a class="btn btn-default" href="/{{ pathname }}?start={{ frappe.form_dict.start|int + page_length }}">{{ _("Next") }}</a>
 			{% endif %}
 		</div>
 		{% else %}
-			<div class="text-muted">{{ __("No items listed") }}.</div>
+			<div class="text-muted">{{ _("No items listed") }}.</div>
 		{% endif %}
 	</div>
 </div>
