Merge pull request #9669 from rohitwaghchaure/sales_invoice_serial_no_revert
Revert sales invoice serial no issues
diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py
index 4f205c5..2e8b946 100644
--- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py
+++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py
@@ -3,8 +3,10 @@
# See license.txt
from __future__ import unicode_literals
-import frappe
import unittest
+
+import frappe
+from erpnext.templates.pages.rfq import check_supplier_has_docname_access
from frappe.utils import nowdate
class TestRequestforQuotation(unittest.TestCase):
@@ -28,6 +30,31 @@
self.assertEquals(sq1.get('items')[0].item_code, "_Test Item")
self.assertEquals(sq1.get('items')[0].qty, 5)
+ def test_make_supplier_quotation_with_special_characters(self):
+ from erpnext.buying.doctype.request_for_quotation.request_for_quotation import make_supplier_quotation
+
+ frappe.delete_doc_if_exists("Supplier", "_Test Supplier '1", force=1)
+ supplier = frappe.new_doc("Supplier")
+ supplier.supplier_name = "_Test Supplier '1"
+ supplier.supplier_type = "_Test Supplier Type"
+ supplier.insert()
+
+ rfq = make_request_for_quotation(supplier_wt_appos)
+
+ sq = make_supplier_quotation(rfq.name, supplier_wt_appos[0].get("supplier"))
+ sq.submit()
+
+ frappe.form_dict = frappe.local("form_dict")
+ frappe.form_dict.name = rfq.name
+
+ self.assertEqual(
+ check_supplier_has_docname_access(supplier_wt_appos[0].get('supplier')),
+ True
+ )
+
+ # reset form_dict
+ frappe.form_dict.name = None
+
def test_make_supplier_quotation_from_portal(self):
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import create_supplier_quotation
rfq = make_request_for_quotation()
@@ -44,8 +71,11 @@
self.assertEquals(supplier_quotation_doc.get('items')[0].amount, 500)
-def make_request_for_quotation():
- supplier_data = get_supplier_data()
+def make_request_for_quotation(supplier_data=None):
+ """
+ :param supplier_data: List containing supplier data
+ """
+ supplier_data = supplier_data if supplier_data else get_supplier_data()
rfq = frappe.new_doc('Request for Quotation')
rfq.transaction_date = nowdate()
rfq.status = 'Draft'
@@ -77,3 +107,8 @@
"supplier": "_Test Supplier 1",
"supplier_name": "_Test Supplier 1"
}]
+
+supplier_wt_appos = [{
+ "supplier": "_Test Supplier '1",
+ "supplier_name": "_Test Supplier '1",
+}]
diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py
index db65a69..c613c8c 100644
--- a/erpnext/schools/api.py
+++ b/erpnext/schools/api.py
@@ -114,13 +114,17 @@
return guardians
@frappe.whitelist()
-def get_student_group_students(student_group):
+def get_student_group_students(student_group, include_inactive=0):
"""Returns List of student, student_name in Student Group.
:param student_group: Student Group.
"""
- students = frappe.get_list("Student Group Student", fields=["student", "student_name"] ,
- filters={"parent": student_group, "active": 1}, order_by= "group_roll_number")
+ if include_inactive:
+ students = frappe.get_list("Student Group Student", fields=["student", "student_name"] ,
+ filters={"parent": student_group}, order_by= "group_roll_number")
+ else:
+ students = frappe.get_list("Student Group Student", fields=["student", "student_name"] ,
+ filters={"parent": student_group, "active": 1}, order_by= "group_roll_number")
return students
@frappe.whitelist()
diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.py b/erpnext/schools/doctype/assessment_plan/assessment_plan.py
index f988886..a09f3ee 100644
--- a/erpnext/schools/doctype/assessment_plan/assessment_plan.py
+++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.py
@@ -11,6 +11,7 @@
def validate(self):
self.validate_overlap()
self.validate_max_score()
+ self.validate_assessment_criteria()
def validate_overlap(self):
"""Validates overlap for Student Group, Instructor, Room"""
@@ -37,3 +38,13 @@
max_score += d.maximum_score
if self.maximum_assessment_score != max_score:
frappe.throw(_("Sum of Scores of Assessment Criteria needs to be {0}.".format(self.maximum_assessment_score)))
+
+ def validate_assessment_criteria(self):
+ assessment_criteria_list = frappe.db.sql_list(''' select apc.assessment_criteria
+ from `tabAssessment Plan` ap , `tabAssessment Plan Criteria` apc
+ where ap.name = apc.parent and ap.course=%s and ap.student_group=%s and ap.assessment_group=%s
+ and ap.name != %s''', (self.course, self.student_group, self.assessment_group, self.name))
+ for d in self.assessment_criteria:
+ if d.assessment_criteria in assessment_criteria_list:
+ frappe.throw(_("You have already assessed for the assessment criteria {}.")
+ .format(frappe.bold(d.assessment_criteria)))
diff --git a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py
index 1e79a93..d869cec 100644
--- a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py
+++ b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py
@@ -15,19 +15,24 @@
to_date = get_last_day(filters["month"] + '-' + filters["year"])
total_days_in_month = date_diff(to_date, from_date) +1
columns = get_columns(total_days_in_month)
- students = get_student_group_students(filters.get("student_group"))
+ students = get_student_group_students(filters.get("student_group"),1)
students_list = get_students_list(students)
att_map = get_attendance_list(from_date, to_date, filters.get("student_group"), students_list)
data = []
for stud in students:
row = [stud.student, stud.student_name]
+ student_status = frappe.db.get_value("Student", stud.student, "enabled")
date = from_date
total_p = total_a = 0.0
for day in range(total_days_in_month):
status="None"
if att_map.get(stud.student):
status = att_map.get(stud.student).get(date, "None")
- status_map = {"Present": "P", "Absent": "A", "None": ""}
+ elif not student_status:
+ status = "Inactive"
+ else:
+ status = "None"
+ status_map = {"Present": "P", "Absent": "A", "None": "", "Inactive":"-"}
row.append(status_map[status])
if status == "Present":
total_p += 1
diff --git a/erpnext/templates/pages/rfq.py b/erpnext/templates/pages/rfq.py
index abc2890..aaf4110 100644
--- a/erpnext/templates/pages/rfq.py
+++ b/erpnext/templates/pages/rfq.py
@@ -29,7 +29,7 @@
def check_supplier_has_docname_access(supplier):
status = True
if frappe.form_dict.name not in frappe.db.sql_list("""select parent from `tabRequest for Quotation Supplier`
- where supplier = '{supplier}'""".format(supplier=supplier)):
+ where supplier = %s""", (supplier,)):
status = False
return status