fix(assessment_result): student must be in group (#15255)

* fix(assessment_result): student must be in group

* fix(test_student_group): raise correct exception

* fix(unused-import): assessment-plan.py

* fix(tests)

* fix(tests)

* fix(test)

* fix(tests)
This commit is contained in:
Rushabh Mehta 2018-08-31 16:12:49 +05:30 committed by Nabin Hait
parent 1b73505391
commit a2288ff8e7
16 changed files with 3531 additions and 3450 deletions

View File

@ -0,0 +1,10 @@
import frappe
from frappe import _
class StudentNotInGroupError(frappe.ValidationError): pass
def validate_student_belongs_to_group(student, student_group):
groups = frappe.db.get_all('Student Group Student', ['parent'], dict(student = student, active=1))
if not student_group in [d.parent for d in groups]:
frappe.throw(_('Student {0} does not belong to group {1}').format(frappe.bold(student), frappe.bold(student_group)),
StudentNotInGroupError)

View File

@ -3,16 +3,6 @@
frappe.ui.form.on("Assessment Plan", {
setup: function(frm) {
frm.add_fetch("student_group", "course", "course");
frm.add_fetch("student_group", "program", "program");
frm.add_fetch("student_group", "academic_year", "academic_year");
frm.add_fetch("student_group", "academic_term", "academic_term");
frm.add_fetch("examiner", "instructor_name", "examiner_name");
frm.add_fetch("supervisor", "instructor_name", "supervisor_name");
frm.add_fetch("course", "default_grading_scale", "grading_scale");
},
onload: function(frm) {
frm.set_query("assessment_group", function(doc, cdt, cdn) {
return{

View File

@ -118,6 +118,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "course.default_grading_scale",
"fieldname": "grading_scale",
"fieldtype": "Link",
"hidden": 0,
@ -182,6 +183,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "student_group.course",
"fieldname": "course",
"fieldtype": "Link",
"hidden": 0,
@ -215,6 +217,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "student_group.program",
"fieldname": "program",
"fieldtype": "Link",
"hidden": 0,
@ -248,6 +251,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "student_group.academic_year",
"fieldname": "academic_year",
"fieldtype": "Link",
"hidden": 0,
@ -281,6 +285,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "student_group.academic_term",
"fieldname": "academic_term",
"fieldtype": "Link",
"hidden": 0,
@ -447,6 +452,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "examiner.instructor_name",
"fieldname": "examiner_name",
"fieldtype": "Data",
"hidden": 0,
@ -607,6 +613,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "supervisor.instructor_name",
"fieldname": "supervisor_name",
"fieldtype": "Data",
"hidden": 0,
@ -773,7 +780,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2018-08-21 16:15:44.902395",
"modified": "2018-08-30 00:48:03.475522",
"modified_by": "Administrator",
"module": "Education",
"name": "Assessment Plan",

View File

@ -9,22 +9,10 @@ from frappe import _
class AssessmentPlan(Document):
def validate(self):
self.set_missing_field()
self.validate_overlap()
self.validate_max_score()
self.validate_assessment_criteria()
def set_missing_field(self):
if self.student_group:
academic_term, academic_year, program, course = frappe.get_value("Student Group", self.student_group,
["academic_term", "academic_year", "program", "course"])
self.academic_term = academic_term
self.academic_year = academic_year
if program:
self.program = program
if course and not self.course: #pylint: disable=E0203
self.course = course
def validate_overlap(self):
"""Validates overlap for Student Group, Instructor, Room"""

View File

@ -2,18 +2,6 @@
// For license information, please see license.txt
frappe.ui.form.on("Assessment Result", {
setup: function(frm) {
frm.add_fetch("student", "title", "student_name");
frm.add_fetch("assessment_plan", "course", "course");
frm.add_fetch("assessment_plan", "program", "program");
frm.add_fetch("assessment_plan", "academic_year", "academic_year");
frm.add_fetch("assessment_plan", "academic_term", "academic_term");
frm.add_fetch("assessment_plan", "grading_scale", "grading_scale");
frm.add_fetch("assessment_plan", "student_group", "student_group");
frm.add_fetch("assessment_plan", "assessment_group", "assessment_group");
frm.add_fetch("assessment_plan", "maximum_assessment_score", "maximum_score");
},
onload: function(frm) {
frm.set_query('assessment_plan', function(){
return {

View File

@ -53,6 +53,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "assessment_plan.program",
"fieldname": "program",
"fieldtype": "Link",
"hidden": 0,
@ -86,6 +87,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "assessment_plan.course",
"fieldname": "course",
"fieldtype": "Link",
"hidden": 0,
@ -119,6 +121,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "assessment_plan.academic_year",
"fieldname": "academic_year",
"fieldtype": "Link",
"hidden": 0,
@ -152,6 +155,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "assessment_plan.academic_term",
"fieldname": "academic_term",
"fieldtype": "Link",
"hidden": 0,
@ -249,6 +253,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "student.title",
"fieldname": "student_name",
"fieldtype": "Data",
"hidden": 0,
@ -281,6 +286,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "assessment_plan.student_group",
"fieldname": "student_group",
"fieldtype": "Link",
"hidden": 0,
@ -314,6 +320,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "assessment_plan.assessment_group",
"fieldname": "assessment_group",
"fieldtype": "Link",
"hidden": 0,
@ -347,6 +354,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "assessment_plan.grading_scale",
"fieldname": "grading_scale",
"fieldtype": "Link",
"hidden": 0,
@ -477,6 +485,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "assessment_plan.maximum_assessment_score",
"fieldname": "maximum_score",
"fieldtype": "Float",
"hidden": 0,
@ -509,6 +518,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "assessment_plan.maximum_assessment_score",
"fieldname": "column_break_11",
"fieldtype": "Column Break",
"hidden": 0,
@ -704,7 +714,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-21 17:15:55.372499",
"modified": "2018-08-30 02:10:36.813413",
"modified_by": "Administrator",
"module": "Education",
"name": "Assessment Result",

View File

@ -10,28 +10,15 @@ from frappe.model.document import Document
from erpnext.education.api import get_grade
from erpnext.education.api import get_assessment_details
from frappe.utils.csvutils import getlink
import erpnext.education
class AssessmentResult(Document):
def validate(self):
self.set_missing_values()
erpnext.education.validate_student_belongs_to_group(self.student, self.student_group)
self.validate_maximum_score()
self.validate_grade()
self.validate_duplicate()
def set_missing_values(self):
if self.student and not self.student_name:
self.student_name = frappe.db.get_value("Student", self.student, "title")
assessment_plan_details = frappe.get_value("Assessment Plan", self.assessment_plan, ["academic_term",
"academic_year", "program", "course", "grading_scale", "assessment_group", "student_group",
"maximum_assessment_score"], as_dict=1)
for field in assessment_plan_details:
if field != "maximum_assessment_score":
setattr(self, field, assessment_plan_details[field])
else:
self.maximum_score = assessment_plan_details[field]
def validate_maximum_score(self):
assessment_details = get_assessment_details(self.assessment_plan)
max_scores = {}

View File

@ -15,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -41,40 +42,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "description",
"fieldtype": "Small Text",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Description",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
"translatable": 0,
"unique": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -101,10 +74,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -132,10 +107,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -162,6 +139,39 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "description",
"fieldtype": "Small Text",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Description",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@ -175,7 +185,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2017-11-10 19:07:22.001040",
"modified": "2018-08-30 00:34:03.368432",
"modified_by": "Administrator",
"module": "Education",
"name": "Grading Scale",
@ -184,7 +194,6 @@
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 1,
"create": 1,
"delete": 1,
@ -212,5 +221,6 @@
"sort_order": "DESC",
"title_field": "",
"track_changes": 0,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@ -28,5 +28,25 @@
"gender": "Male",
"blood_group": "A+"
},
{
"first_name": "_Test",
"middle_name": "Student",
"last_name": "Name 3",
"program": "TC101",
"date_of_birth": "2000-01-01",
"gender": "Male",
"blood_group": "A+"
},
{
"first_name": "_Test",
"middle_name": "Student",
"last_name": "Name 4",
"program": "TC101",
"date_of_birth": "2000-01-01",
"gender": "Male",
"blood_group": "A+"
}
]

View File

@ -5,23 +5,38 @@ from __future__ import unicode_literals
import frappe
import unittest
from frappe.utils.make_random import get_random
import erpnext.education
class TestStudentGroup(unittest.TestCase):
def test_student_roll_no(self):
def get_random_group():
doc = frappe.get_doc({
"doctype": "Student Group",
"student_group_name": "_Test Student Group R",
"student_group_name": "_Test Student Group-" + frappe.generate_hash(length=5),
"group_based_on": "Activity"
}).insert()
student_list = []
while len(student_list) < 3:
s = get_random("Student")
if s not in student_list:
student_list.append(s)
student_list = frappe.get_all('Student', limit=5)
doc.extend("students", [{"student":d} for d in student_list])
doc.extend("students", [{"student":d.name, "active": 1} for d in student_list])
doc.save()
self.assertEqual(max([d.group_roll_number for d in doc.students]), 3)
return doc
class TestStudentGroup(unittest.TestCase):
def test_student_roll_no(self):
doc = get_random_group()
self.assertEqual(max([d.group_roll_number for d in doc.students]), len(doc.students))
def test_in_group(self):
doc = get_random_group()
last_student = doc.students[-1].student
# remove last student
doc.students = doc.students[:-1]
doc.save()
self.assertRaises(erpnext.education.StudentNotInGroupError,
erpnext.education.validate_student_belongs_to_group, last_student, doc.name)
# safe, don't throw validation
erpnext.education.validate_student_belongs_to_group(doc.students[0].student, doc.name)

View File

@ -31,17 +31,20 @@ class TestEmployeeOnboarding(unittest.TestCase):
onboarding.status = 'Pending'
onboarding.insert()
onboarding.submit()
self.assertEqual(onboarding.project, 'Employee Onboarding : Test Researcher - test@researcher.com')
self.assertRaises(IncompleteTaskError, make_employee, onboarding.name)
return onboarding
def test_employee_onboarding_completed_task(self):
doc = self.test_employee_onboarding_incomplete_task()
project = frappe.get_doc('Project', doc.project)
self.assertEqual(onboarding.project, 'Employee Onboarding : Test Researcher - test@researcher.com')
# don't allow making employee if onboarding is not complete
self.assertRaises(IncompleteTaskError, make_employee, onboarding.name)
# complete the task
project = frappe.get_doc('Project', onboarding.project)
project.tasks[0].status = 'Closed'
project.save()
doc.reload()
employee = make_employee(doc.name)
# make employee
onboarding.reload()
employee = make_employee(onboarding.name)
employee.first_name = employee.employee_name
employee.date_of_joining = nowdate()
employee.date_of_birth = '1990-05-08'

View File

@ -546,7 +546,7 @@
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"in_standard_filter": 1,
"label": "Leave Period",
"length": 0,
"no_copy": 0,
@ -676,7 +676,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-29 06:33:54.651196",
"modified": "2018-08-29 23:52:52.683844",
"modified_by": "Administrator",
"module": "HR",
"name": "Leave Allocation",

View File

@ -82,6 +82,7 @@ frappe.ui.form.on('Leave Period', {
callback: function(r) {
if(!r.exc) {
d.hide();
frm.reload_doc();
}
}
});

View File

@ -15,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -43,10 +44,11 @@
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
"unique": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -81,6 +83,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -92,7 +95,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Project Type",
"length": 0,
@ -114,6 +117,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -147,6 +151,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -180,6 +185,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 1,
"collapsible": 0,
@ -210,6 +216,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -240,6 +247,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -272,6 +280,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -305,6 +314,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -337,6 +347,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 1,
"collapsible": 0,
@ -369,6 +380,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@ -401,6 +413,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -434,6 +447,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -464,6 +478,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -496,6 +511,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@ -527,6 +543,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -560,6 +577,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -592,6 +610,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -624,6 +643,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -655,6 +675,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@ -687,6 +708,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -719,6 +741,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@ -750,6 +773,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -781,6 +805,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -812,6 +837,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -842,6 +868,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -874,6 +901,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@ -906,6 +934,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -939,6 +968,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -971,6 +1001,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1003,6 +1034,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1034,6 +1066,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1065,6 +1098,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1095,6 +1129,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1126,6 +1161,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1158,6 +1194,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1189,6 +1226,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1220,6 +1258,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1251,6 +1290,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@ -1283,6 +1323,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1316,6 +1357,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1346,6 +1388,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1379,6 +1422,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@ -1411,6 +1455,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1443,6 +1488,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1476,6 +1522,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1506,6 +1553,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1538,6 +1586,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1570,6 +1619,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1602,6 +1652,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1634,6 +1685,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1666,6 +1718,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1699,6 +1752,7 @@
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@ -1741,7 +1795,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 4,
"modified": "2018-05-10 04:21:25.764015",
"modified": "2018-08-30 00:12:09.649654",
"modified_by": "Administrator",
"module": "Projects",
"name": "Project",
@ -1813,5 +1867,6 @@
"sort_order": "DESC",
"timeline_field": "customer",
"track_changes": 0,
"track_seen": 1
"track_seen": 1,
"track_views": 0
}

View File

@ -53,24 +53,6 @@ def before_tests():
frappe.db.set_value("Stock Settings", None, "auto_insert_price_list_rate_if_missing", 0)
enable_all_roles_and_domains()
if not frappe.db.exists('Company', 'Woocommerce'):
company = frappe.new_doc("Company")
company.company_name = "Woocommerce"
company.abbr = "W"
company.default_currency = "INR"
company.save()
woo_settings = frappe.get_doc("Woocommerce Settings")
if not woo_settings.secret:
woo_settings.secret = "ec434676aa1de0e502389f515c38f89f653119ab35e9117c7a79e576"
woo_settings.woocommerce_server_url = "https://woocommerce.mntechnique.com/"
woo_settings.api_consumer_key = "ck_fd43ff5756a6abafd95fadb6677100ce95a758a1"
woo_settings.api_consumer_secret = "cs_94360a1ad7bef7fa420a40cf284f7b3e0788454e"
woo_settings.enable_sync = 1
woo_settings.tax_account = "Sales Expenses - W"
woo_settings.f_n_f_account = "Expenses - W"
woo_settings.save(ignore_permissions=True)
frappe.db.commit()
@frappe.whitelist()

View File

@ -2,9 +2,24 @@ import unittest, frappe, requests, os, time, erpnext
from erpnext.erpnext_integrations.connectors.woocommerce_connection import order
class TestWoocommerce(unittest.TestCase):
# def test_woocommerce_request(self):
# r = emulate_request()
# self.assertTrue(r.status_code == 200)
def setup(self):
if not frappe.db.exists('Company', 'Woocommerce'):
company = frappe.new_doc("Company")
company.company_name = "Woocommerce"
company.abbr = "W"
company.default_currency = "INR"
company.save()
woo_settings = frappe.get_doc("Woocommerce Settings")
if not woo_settings.secret:
woo_settings.secret = "ec434676aa1de0e502389f515c38f89f653119ab35e9117c7a79e576"
woo_settings.woocommerce_server_url = "https://woocommerce.mntechnique.com/"
woo_settings.api_consumer_key = "ck_fd43ff5756a6abafd95fadb6677100ce95a758a1"
woo_settings.api_consumer_secret = "cs_94360a1ad7bef7fa420a40cf284f7b3e0788454e"
woo_settings.enable_sync = 1
woo_settings.tax_account = "Sales Expenses - W"
woo_settings.f_n_f_account = "Expenses - W"
woo_settings.save(ignore_permissions=True)
def test_sales_order_for_woocommerece(self):
data = {"id":75,"parent_id":0,"number":"74","order_key":"wc_order_5aa1281c2dacb","created_via":"checkout","version":"3.3.3","status":"processing","currency":"INR","date_created":"2018-03-08T12:10:04","date_created_gmt":"2018-03-08T12:10:04","date_modified":"2018-03-08T12:10:04","date_modified_gmt":"2018-03-08T12:10:04","discount_total":"0.00","discount_tax":"0.00","shipping_total":"150.00","shipping_tax":"0.00","cart_tax":"0.00","total":"649.00","total_tax":"0.00","prices_include_tax":False,"customer_id":12,"customer_ip_address":"103.54.99.5","customer_user_agent":"mozilla\\/5.0 (x11; linux x86_64) applewebkit\\/537.36 (khtml, like gecko) chrome\\/64.0.3282.186 safari\\/537.36","customer_note":"","billing":{"first_name":"Tony","last_name":"Stark","company":"Woocommerce","address_1":"Mumbai","address_2":"","city":"Dadar","state":"MH","postcode":"123","country":"IN","email":"tony@gmail.com","phone":"123457890"},"shipping":{"first_name":"Tony","last_name":"Stark","company":"","address_1":"Mumbai","address_2":"","city":"Dadar","state":"MH","postcode":"123","country":"IN"},"payment_method":"cod","payment_method_title":"Cash on delivery","transaction_id":"","date_paid":"","date_paid_gmt":"","date_completed":"","date_completed_gmt":"","cart_hash":"8e76b020d5790066496f244860c4703f","meta_data":[],"line_items":[{"id":80,"name":"Marvel","product_id":56,"variation_id":0,"quantity":1,"tax_class":"","subtotal":"499.00","subtotal_tax":"0.00","total":"499.00","total_tax":"0.00","taxes":[],"meta_data":[],"sku":"","price":499}],"tax_lines":[],"shipping_lines":[{"id":81,"method_title":"Flat rate","method_id":"flat_rate:1","total":"150.00","total_tax":"0.00","taxes":[],"meta_data":[{"id":623,"key":"Items","value":"Marvel &times; 1"}]}],"fee_lines":[],"coupon_lines":[],"refunds":[]}