├── .git-blame-ignore-revs
├── .github
├── edu-logo.svg
├── helper
│ ├── flake8.conf
│ ├── install.sh
│ └── site_config.json
└── workflows
│ ├── builds.yml
│ └── ci.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .prettierrc.json
├── MANIFEST.in
├── README.md
├── education
├── __init__.py
├── api
│ └── session.py
├── config
│ ├── __init__.py
│ ├── desktop.py
│ └── docs.py
├── education
│ ├── __init__.py
│ ├── api.py
│ ├── billing.py
│ ├── doctype
│ │ ├── __init__.py
│ │ ├── academic_term
│ │ │ ├── __init__.py
│ │ │ ├── academic_term.js
│ │ │ ├── academic_term.json
│ │ │ ├── academic_term.py
│ │ │ └── test_academic_term.py
│ │ ├── academic_year
│ │ │ ├── __init__.py
│ │ │ ├── academic_year.js
│ │ │ ├── academic_year.json
│ │ │ ├── academic_year.py
│ │ │ └── test_academic_year.py
│ │ ├── article
│ │ │ ├── __init__.py
│ │ │ ├── article.js
│ │ │ ├── article.json
│ │ │ ├── article.py
│ │ │ └── test_article.py
│ │ ├── assessment_criteria
│ │ │ ├── __init__.py
│ │ │ ├── assessment_criteria.js
│ │ │ ├── assessment_criteria.json
│ │ │ ├── assessment_criteria.py
│ │ │ ├── test_assessment_criteria.py
│ │ │ └── test_records.json
│ │ ├── assessment_criteria_group
│ │ │ ├── __init__.py
│ │ │ ├── assessment_criteria_group.js
│ │ │ ├── assessment_criteria_group.json
│ │ │ ├── assessment_criteria_group.py
│ │ │ └── test_assessment_criteria_group.py
│ │ ├── assessment_group
│ │ │ ├── __init__.py
│ │ │ ├── assessment_group.js
│ │ │ ├── assessment_group.json
│ │ │ ├── assessment_group.py
│ │ │ ├── assessment_group_dashboard.py
│ │ │ ├── assessment_group_tree.js
│ │ │ └── test_assessment_group.py
│ │ ├── assessment_plan
│ │ │ ├── __init__.py
│ │ │ ├── assessment_plan.js
│ │ │ ├── assessment_plan.json
│ │ │ ├── assessment_plan.py
│ │ │ ├── assessment_plan_dashboard.py
│ │ │ └── test_assessment_plan.py
│ │ ├── assessment_plan_criteria
│ │ │ ├── __init__.py
│ │ │ ├── assessment_plan_criteria.json
│ │ │ └── assessment_plan_criteria.py
│ │ ├── assessment_result
│ │ │ ├── __init__.py
│ │ │ ├── assessment_result.js
│ │ │ ├── assessment_result.json
│ │ │ ├── assessment_result.py
│ │ │ ├── assessment_result_dashboard.py
│ │ │ └── test_assessment_result.py
│ │ ├── assessment_result_detail
│ │ │ ├── __init__.py
│ │ │ ├── assessment_result_detail.json
│ │ │ └── assessment_result_detail.py
│ │ ├── assessment_result_tool
│ │ │ ├── __init__.py
│ │ │ ├── assessment_result_tool.js
│ │ │ ├── assessment_result_tool.json
│ │ │ ├── assessment_result_tool.py
│ │ │ └── test_assessment_result_tool.py
│ │ ├── course
│ │ │ ├── __init__.py
│ │ │ ├── course.js
│ │ │ ├── course.json
│ │ │ ├── course.py
│ │ │ ├── course_dashboard.py
│ │ │ ├── test_course.py
│ │ │ └── test_records.json
│ │ ├── course_activity
│ │ │ ├── __init__.py
│ │ │ ├── course_activity.js
│ │ │ ├── course_activity.json
│ │ │ ├── course_activity.py
│ │ │ └── test_course_activity.py
│ │ ├── course_assessment_criteria
│ │ │ ├── __init__.py
│ │ │ ├── course_assessment_criteria.json
│ │ │ └── course_assessment_criteria.py
│ │ ├── course_enrollment
│ │ │ ├── __init__.py
│ │ │ ├── course_enrollment.js
│ │ │ ├── course_enrollment.json
│ │ │ ├── course_enrollment.py
│ │ │ └── test_course_enrollment.py
│ │ ├── course_schedule
│ │ │ ├── __init__.py
│ │ │ ├── course_schedule.js
│ │ │ ├── course_schedule.json
│ │ │ ├── course_schedule.py
│ │ │ ├── course_schedule_calendar.js
│ │ │ ├── course_schedule_dashboard.py
│ │ │ └── test_course_schedule.py
│ │ ├── course_scheduling_tool
│ │ │ ├── __init__.py
│ │ │ ├── course_scheduling_tool.js
│ │ │ ├── course_scheduling_tool.json
│ │ │ ├── course_scheduling_tool.py
│ │ │ └── test_course_scheduling_tool.py
│ │ ├── course_topic
│ │ │ ├── __init__.py
│ │ │ ├── course_topic.js
│ │ │ ├── course_topic.json
│ │ │ ├── course_topic.py
│ │ │ └── test_course_topic.py
│ │ ├── education_settings
│ │ │ ├── __init__.py
│ │ │ ├── education_settings.js
│ │ │ ├── education_settings.json
│ │ │ ├── education_settings.py
│ │ │ └── test_education_settings.py
│ │ ├── fee_category
│ │ │ ├── __init__.py
│ │ │ ├── fee_category.js
│ │ │ ├── fee_category.json
│ │ │ ├── fee_category.py
│ │ │ ├── test_fee_category.py
│ │ │ └── test_records.json
│ │ ├── fee_category_default
│ │ │ ├── __init__.py
│ │ │ ├── fee_category_default.json
│ │ │ └── fee_category_default.py
│ │ ├── fee_component
│ │ │ ├── __init__.py
│ │ │ ├── fee_component.json
│ │ │ └── fee_component.py
│ │ ├── fee_schedule
│ │ │ ├── __init__.py
│ │ │ ├── fee_schedule.js
│ │ │ ├── fee_schedule.json
│ │ │ ├── fee_schedule.py
│ │ │ ├── fee_schedule_list.js
│ │ │ └── test_fee_schedule.py
│ │ ├── fee_schedule_details
│ │ │ ├── __init__.py
│ │ │ ├── fee_schedule_details.json
│ │ │ └── fee_schedule_details.py
│ │ ├── fee_schedule_program
│ │ │ ├── __init__.py
│ │ │ ├── fee_schedule_program.json
│ │ │ └── fee_schedule_program.py
│ │ ├── fee_schedule_student_group
│ │ │ ├── __init__.py
│ │ │ ├── fee_schedule_student_group.json
│ │ │ └── fee_schedule_student_group.py
│ │ ├── fee_structure
│ │ │ ├── __init__.py
│ │ │ ├── fee_structure.js
│ │ │ ├── fee_structure.json
│ │ │ ├── fee_structure.py
│ │ │ └── test_fee_structure.py
│ │ ├── fees
│ │ │ ├── __init__.py
│ │ │ ├── fees.js
│ │ │ ├── fees.json
│ │ │ ├── fees.py
│ │ │ ├── fees_list.js
│ │ │ └── test_fees.py
│ │ ├── grading_scale
│ │ │ ├── __init__.py
│ │ │ ├── grading_scale.js
│ │ │ ├── grading_scale.json
│ │ │ ├── grading_scale.py
│ │ │ ├── grading_scale_dashboard.py
│ │ │ ├── test_grading_scale.py
│ │ │ └── test_records.json
│ │ ├── grading_scale_interval
│ │ │ ├── __init__.py
│ │ │ ├── grading_scale_interval.json
│ │ │ └── grading_scale_interval.py
│ │ ├── guardian
│ │ │ ├── __init__.py
│ │ │ ├── guardian.js
│ │ │ ├── guardian.json
│ │ │ ├── guardian.py
│ │ │ └── test_guardian.py
│ │ ├── guardian_interest
│ │ │ ├── __init__.py
│ │ │ ├── guardian_interest.json
│ │ │ └── guardian_interest.py
│ │ ├── guardian_student
│ │ │ ├── __init__.py
│ │ │ ├── guardian_student.json
│ │ │ └── guardian_student.py
│ │ ├── instructor
│ │ │ ├── __init__.py
│ │ │ ├── instructor.js
│ │ │ ├── instructor.json
│ │ │ ├── instructor.py
│ │ │ ├── instructor_dashboard.py
│ │ │ ├── test_instructor.py
│ │ │ └── test_records.json
│ │ ├── instructor_log
│ │ │ ├── __init__.py
│ │ │ ├── instructor_log.json
│ │ │ └── instructor_log.py
│ │ ├── options
│ │ │ ├── __init__.py
│ │ │ ├── options.json
│ │ │ └── options.py
│ │ ├── payment_record
│ │ │ ├── __init__.py
│ │ │ ├── payment_record.js
│ │ │ ├── payment_record.json
│ │ │ ├── payment_record.py
│ │ │ └── test_payment_record.py
│ │ ├── program
│ │ │ ├── __init__.py
│ │ │ ├── program.js
│ │ │ ├── program.json
│ │ │ ├── program.py
│ │ │ └── test_program.py
│ │ ├── program_course
│ │ │ ├── __init__.py
│ │ │ ├── program_course.json
│ │ │ └── program_course.py
│ │ ├── program_enrollment
│ │ │ ├── __init__.py
│ │ │ ├── program_enrollment.js
│ │ │ ├── program_enrollment.json
│ │ │ ├── program_enrollment.py
│ │ │ ├── program_enrollment_dashboard.py
│ │ │ └── test_program_enrollment.py
│ │ ├── program_enrollment_course
│ │ │ ├── __init__.py
│ │ │ ├── program_enrollment_course.json
│ │ │ └── program_enrollment_course.py
│ │ ├── program_enrollment_fee
│ │ │ ├── __init__.py
│ │ │ ├── program_enrollment_fee.json
│ │ │ └── program_enrollment_fee.py
│ │ ├── program_enrollment_tool
│ │ │ ├── __init__.py
│ │ │ ├── program_enrollment_tool.js
│ │ │ ├── program_enrollment_tool.json
│ │ │ ├── program_enrollment_tool.py
│ │ │ └── test_program_enrollment_tool.py
│ │ ├── program_enrollment_tool_student
│ │ │ ├── __init__.py
│ │ │ ├── program_enrollment_tool_student.json
│ │ │ └── program_enrollment_tool_student.py
│ │ ├── program_fee
│ │ │ ├── __init__.py
│ │ │ ├── program_fee.json
│ │ │ └── program_fee.py
│ │ ├── question
│ │ │ ├── __init__.py
│ │ │ ├── question.js
│ │ │ ├── question.json
│ │ │ ├── question.py
│ │ │ └── test_question.py
│ │ ├── quiz
│ │ │ ├── __init__.py
│ │ │ ├── quiz.js
│ │ │ ├── quiz.json
│ │ │ ├── quiz.py
│ │ │ └── test_quiz.py
│ │ ├── quiz_activity
│ │ │ ├── __init__.py
│ │ │ ├── quiz_activity.js
│ │ │ ├── quiz_activity.json
│ │ │ ├── quiz_activity.py
│ │ │ └── test_quiz_activity.py
│ │ ├── quiz_question
│ │ │ ├── __init__.py
│ │ │ ├── quiz_question.json
│ │ │ └── quiz_question.py
│ │ ├── quiz_result
│ │ │ ├── __init__.py
│ │ │ ├── quiz_result.js
│ │ │ ├── quiz_result.json
│ │ │ ├── quiz_result.py
│ │ │ └── test_quiz_result.py
│ │ ├── room
│ │ │ ├── __init__.py
│ │ │ ├── room.js
│ │ │ ├── room.json
│ │ │ ├── room.py
│ │ │ ├── room_dashboard.py
│ │ │ ├── test_records.json
│ │ │ └── test_room.py
│ │ ├── school_house
│ │ │ ├── __init__.py
│ │ │ ├── school_house.js
│ │ │ ├── school_house.json
│ │ │ ├── school_house.py
│ │ │ └── test_school_house.py
│ │ ├── student
│ │ │ ├── __init__.py
│ │ │ ├── student.js
│ │ │ ├── student.json
│ │ │ ├── student.py
│ │ │ ├── student_dashboard.py
│ │ │ ├── student_list.js
│ │ │ └── test_student.py
│ │ ├── student_admission
│ │ │ ├── __init__.py
│ │ │ ├── student_admission.js
│ │ │ ├── student_admission.json
│ │ │ ├── student_admission.py
│ │ │ ├── templates
│ │ │ │ ├── student_admission.html
│ │ │ │ └── student_admission_row.html
│ │ │ └── test_student_admission.py
│ │ ├── student_admission_program
│ │ │ ├── __init__.py
│ │ │ ├── student_admission_program.json
│ │ │ └── student_admission_program.py
│ │ ├── student_applicant
│ │ │ ├── __init__.py
│ │ │ ├── student_applicant.js
│ │ │ ├── student_applicant.json
│ │ │ ├── student_applicant.py
│ │ │ ├── student_applicant_list.js
│ │ │ └── test_student_applicant.py
│ │ ├── student_attendance
│ │ │ ├── __init__.py
│ │ │ ├── student_attendance.js
│ │ │ ├── student_attendance.json
│ │ │ ├── student_attendance.py
│ │ │ ├── student_attendance_dashboard.py
│ │ │ └── test_student_attendance.py
│ │ ├── student_attendance_tool
│ │ │ ├── __init__.py
│ │ │ ├── student_attendance_tool.js
│ │ │ ├── student_attendance_tool.json
│ │ │ ├── student_attendance_tool.py
│ │ │ └── test_student_attendance_tool.py
│ │ ├── student_batch_name
│ │ │ ├── __init__.py
│ │ │ ├── student_batch_name.js
│ │ │ ├── student_batch_name.json
│ │ │ ├── student_batch_name.py
│ │ │ ├── test_records.json
│ │ │ └── test_student_batch_name.py
│ │ ├── student_category
│ │ │ ├── __init__.py
│ │ │ ├── student_category.js
│ │ │ ├── student_category.json
│ │ │ ├── student_category.py
│ │ │ └── test_student_category.py
│ │ ├── student_group
│ │ │ ├── __init__.py
│ │ │ ├── student_group.js
│ │ │ ├── student_group.json
│ │ │ ├── student_group.py
│ │ │ ├── student_group_dashboard.py
│ │ │ └── test_student_group.py
│ │ ├── student_group_creation_tool
│ │ │ ├── __init__.py
│ │ │ ├── student_group_creation_tool.js
│ │ │ ├── student_group_creation_tool.json
│ │ │ ├── student_group_creation_tool.py
│ │ │ └── test_student_group_creation_tool.py
│ │ ├── student_group_creation_tool_course
│ │ │ ├── __init__.py
│ │ │ ├── student_group_creation_tool_course.json
│ │ │ └── student_group_creation_tool_course.py
│ │ ├── student_group_instructor
│ │ │ ├── __init__.py
│ │ │ ├── student_group_instructor.json
│ │ │ └── student_group_instructor.py
│ │ ├── student_group_student
│ │ │ ├── __init__.py
│ │ │ ├── student_group_student.json
│ │ │ └── student_group_student.py
│ │ ├── student_guardian
│ │ │ ├── __init__.py
│ │ │ ├── student_guardian.json
│ │ │ └── student_guardian.py
│ │ ├── student_language
│ │ │ ├── __init__.py
│ │ │ ├── student_language.js
│ │ │ ├── student_language.json
│ │ │ ├── student_language.py
│ │ │ └── test_student_language.py
│ │ ├── student_leave_application
│ │ │ ├── __init__.py
│ │ │ ├── student_leave_application.js
│ │ │ ├── student_leave_application.json
│ │ │ ├── student_leave_application.py
│ │ │ ├── student_leave_application_dashboard.py
│ │ │ └── test_student_leave_application.py
│ │ ├── student_log
│ │ │ ├── __init__.py
│ │ │ ├── student_log.js
│ │ │ ├── student_log.json
│ │ │ ├── student_log.py
│ │ │ └── test_student_log.py
│ │ ├── student_report_generation_tool
│ │ │ ├── __init__.py
│ │ │ ├── student_report_generation_tool.html
│ │ │ ├── student_report_generation_tool.js
│ │ │ ├── student_report_generation_tool.json
│ │ │ ├── student_report_generation_tool.py
│ │ │ └── test_student_report_generation_tool.py
│ │ ├── student_sibling
│ │ │ ├── __init__.py
│ │ │ ├── student_sibling.json
│ │ │ └── student_sibling.py
│ │ ├── student_siblings
│ │ │ ├── __init__.py
│ │ │ ├── student_siblings.json
│ │ │ └── student_siblings.py
│ │ ├── topic
│ │ │ ├── __init__.py
│ │ │ ├── test_topic.py
│ │ │ ├── topic.js
│ │ │ ├── topic.json
│ │ │ └── topic.py
│ │ └── topic_content
│ │ │ ├── __init__.py
│ │ │ ├── test_topic_content.py
│ │ │ ├── topic_content.js
│ │ │ ├── topic_content.json
│ │ │ └── topic_content.py
│ ├── report
│ │ ├── __init__.py
│ │ ├── absent_student_report
│ │ │ ├── __init__.py
│ │ │ ├── absent_student_report.js
│ │ │ ├── absent_student_report.json
│ │ │ └── absent_student_report.py
│ │ ├── assessment_plan_status
│ │ │ ├── __init__.py
│ │ │ ├── assessment_plan_status.js
│ │ │ ├── assessment_plan_status.json
│ │ │ └── assessment_plan_status.py
│ │ ├── course_wise_assessment_report
│ │ │ ├── __init__.py
│ │ │ ├── course_wise_assessment_report.html
│ │ │ ├── course_wise_assessment_report.js
│ │ │ ├── course_wise_assessment_report.json
│ │ │ └── course_wise_assessment_report.py
│ │ ├── final_assessment_grades
│ │ │ ├── __init__.py
│ │ │ ├── final_assessment_grades.js
│ │ │ ├── final_assessment_grades.json
│ │ │ └── final_assessment_grades.py
│ │ ├── program_wise_fee_collection
│ │ │ ├── __init__.py
│ │ │ ├── program_wise_fee_collection.js
│ │ │ ├── program_wise_fee_collection.json
│ │ │ └── program_wise_fee_collection.py
│ │ ├── student_and_guardian_contact_details
│ │ │ ├── __init__.py
│ │ │ ├── student_and_guardian_contact_details.js
│ │ │ ├── student_and_guardian_contact_details.json
│ │ │ └── student_and_guardian_contact_details.py
│ │ ├── student_batch_wise_attendance
│ │ │ ├── __init__.py
│ │ │ ├── student_batch_wise_attendance.js
│ │ │ ├── student_batch_wise_attendance.json
│ │ │ └── student_batch_wise_attendance.py
│ │ ├── student_fee_collection
│ │ │ ├── __init__.py
│ │ │ └── student_fee_collection.json
│ │ └── student_monthly_attendance_sheet
│ │ │ ├── __init__.py
│ │ │ ├── student_monthly_attendance_sheet.js
│ │ │ ├── student_monthly_attendance_sheet.json
│ │ │ └── student_monthly_attendance_sheet.py
│ ├── test_utils.py
│ ├── utils.py
│ ├── web_form
│ │ ├── __init__.py
│ │ └── student_applicant
│ │ │ ├── __init__.py
│ │ │ ├── student_applicant.js
│ │ │ ├── student_applicant.json
│ │ │ └── student_applicant.py
│ └── workspace
│ │ └── education
│ │ └── education.json
├── hooks.py
├── install.py
├── modules.txt
├── patches.txt
├── patches
│ ├── v14_0
│ │ ├── create_parent_assessment_group.py
│ │ ├── create_student_party_type.py
│ │ ├── delete_lms_user_role.py
│ │ ├── lms_deprecation_message.py
│ │ └── student_name.py
│ └── v15_0
│ │ ├── create_custom_permissions.py
│ │ ├── create_fee_component_item_group.py
│ │ ├── create_parent_assessment_group.py
│ │ ├── create_student_customer_group.py
│ │ ├── fee_schedule_status_update.py
│ │ ├── fees_student_email.py
│ │ ├── sales_invoice_student_field.py
│ │ ├── sales_order_student_field.py
│ │ ├── student_role_desk_access.py
│ │ └── student_role_permission_sales_invoice.py
├── public
│ ├── .gitkeep
│ ├── frontend
│ │ ├── assets
│ │ │ ├── Inter-Black.05e55dd7.woff2
│ │ │ ├── Inter-Black.9c79713b.woff
│ │ │ ├── Inter-Black.bc2198e0.woff2
│ │ │ ├── Inter-BlackItalic.1cb529a7.woff2
│ │ │ ├── Inter-BlackItalic.4ff7db4a.woff2
│ │ │ ├── Inter-BlackItalic.7ecbf9fa.woff
│ │ │ ├── Inter-Bold.1dc41a58.woff2
│ │ │ ├── Inter-Bold.2b828bef.woff
│ │ │ ├── Inter-Bold.2efd8e3c.woff2
│ │ │ ├── Inter-BoldItalic.8bc8e0ff.woff
│ │ │ ├── Inter-BoldItalic.dc0d4194.woff2
│ │ │ ├── Inter-BoldItalic.f528d863.woff2
│ │ │ ├── Inter-DisplayBlack.b1d4e33d.woff2
│ │ │ ├── Inter-DisplayBlackItalic.d561e8dd.woff2
│ │ │ ├── Inter-DisplayBold.d9bf35ac.woff2
│ │ │ ├── Inter-DisplayBoldItalic.fef00c57.woff2
│ │ │ ├── Inter-DisplayExtraBold.b7cc680a.woff2
│ │ │ ├── Inter-DisplayExtraBoldItalic.e5a5984a.woff2
│ │ │ ├── Inter-DisplayExtraLight.32095132.woff2
│ │ │ ├── Inter-DisplayExtraLightItalic.8eeb78f4.woff2
│ │ │ ├── Inter-DisplayItalic.938db435.woff2
│ │ │ ├── Inter-DisplayLight.e40a858d.woff2
│ │ │ ├── Inter-DisplayLightItalic.151e9a11.woff2
│ │ │ ├── Inter-DisplayMedium.12a4a358.woff2
│ │ │ ├── Inter-DisplayMediumItalic.8968b5ab.woff2
│ │ │ ├── Inter-DisplaySemiBold.856fcb49.woff2
│ │ │ ├── Inter-DisplaySemiBoldItalic.5e57e1d2.woff2
│ │ │ ├── Inter-DisplayThin.b64c173b.woff2
│ │ │ ├── Inter-DisplayThinItalic.b70f1c61.woff2
│ │ │ ├── Inter-ExtraBold.585b4ce1.woff
│ │ │ ├── Inter-ExtraBold.74e72c6b.woff2
│ │ │ ├── Inter-ExtraBold.8a72efb6.woff2
│ │ │ ├── Inter-ExtraBoldItalic.2abc7ab1.woff2
│ │ │ ├── Inter-ExtraBoldItalic.38e71f7c.woff2
│ │ │ ├── Inter-ExtraBoldItalic.b87f7d97.woff
│ │ │ ├── Inter-ExtraLight.1c06ef44.woff
│ │ │ ├── Inter-ExtraLight.25a4db7c.woff2
│ │ │ ├── Inter-ExtraLight.4c337585.woff2
│ │ │ ├── Inter-ExtraLightItalic.0e5667b1.woff
│ │ │ ├── Inter-ExtraLightItalic.7b39e865.woff2
│ │ │ ├── Inter-ExtraLightItalic.f0df46d0.woff2
│ │ │ ├── Inter-Italic.950174d1.woff2
│ │ │ ├── Inter-Italic.b0b21adf.woff
│ │ │ ├── Inter-Italic.dd31ea31.woff2
│ │ │ ├── Inter-Italic.var.d9f448e3.woff2
│ │ │ ├── Inter-Light.211445a8.woff2
│ │ │ ├── Inter-Light.319f53ba.woff
│ │ │ ├── Inter-Light.87ed65f8.woff2
│ │ │ ├── Inter-LightItalic.289a60bc.woff
│ │ │ ├── Inter-LightItalic.5b94e337.woff2
│ │ │ ├── Inter-LightItalic.9ea2db78.woff2
│ │ │ ├── Inter-Medium.24fb6e39.woff2
│ │ │ ├── Inter-Medium.a4e1e7e6.woff2
│ │ │ ├── Inter-Medium.f500bbb9.woff
│ │ │ ├── Inter-MediumItalic.a2db9bea.woff2
│ │ │ ├── Inter-MediumItalic.d06751dd.woff
│ │ │ ├── Inter-MediumItalic.d4a7f5d9.woff2
│ │ │ ├── Inter-Regular.b825f1bc.woff
│ │ │ ├── Inter-Regular.c342b1b7.woff2
│ │ │ ├── Inter-Regular.edd1deaf.woff2
│ │ │ ├── Inter-SemiBold.3041a990.woff
│ │ │ ├── Inter-SemiBold.51419407.woff2
│ │ │ ├── Inter-SemiBold.af44b8a2.woff2
│ │ │ ├── Inter-SemiBoldItalic.5ce565c8.woff
│ │ │ ├── Inter-SemiBoldItalic.a4f92da5.woff2
│ │ │ ├── Inter-SemiBoldItalic.daa7095c.woff2
│ │ │ ├── Inter-Thin.2198e9fb.woff
│ │ │ ├── Inter-Thin.914c3fab.woff2
│ │ │ ├── Inter-Thin.918c5cbe.woff2
│ │ │ ├── Inter-ThinItalic.382fab25.woff2
│ │ │ ├── Inter-ThinItalic.a3279f0a.woff2
│ │ │ ├── Inter-ThinItalic.f53f21de.woff
│ │ │ ├── Inter.var.d30c3bd0.woff2
│ │ │ └── frappe-ui.005832b0.css
│ │ ├── favicon.png
│ │ └── index.html
│ ├── js
│ │ ├── assessment_result_tool.html
│ │ └── education.bundle.js
│ └── node_modules
├── templates
│ ├── __init__.py
│ ├── generators
│ │ └── student_admission.html
│ ├── includes
│ │ ├── assessment
│ │ │ └── assessment_row.html
│ │ └── course
│ │ │ ├── course_row.html
│ │ │ └── macros.html
│ └── pages
│ │ └── __init__.py
├── translations
│ └── ar.csv
└── www
│ ├── __init__.py
│ ├── __pycache__
│ └── __init__.py
│ └── student_portal.py
├── frontend
├── .gitignore
├── .prettierrc.json
├── README.md
├── index.html
├── package.json
├── polyfills.js
├── postcss.config.js
├── public
│ └── favicon.png
├── src
│ ├── App.vue
│ ├── assets
│ │ └── Inter
│ │ │ ├── Inter-Black.woff
│ │ │ ├── Inter-Black.woff2
│ │ │ ├── Inter-BlackItalic.woff
│ │ │ ├── Inter-BlackItalic.woff2
│ │ │ ├── Inter-Bold.woff
│ │ │ ├── Inter-Bold.woff2
│ │ │ ├── Inter-BoldItalic.woff
│ │ │ ├── Inter-BoldItalic.woff2
│ │ │ ├── Inter-ExtraBold.woff
│ │ │ ├── Inter-ExtraBold.woff2
│ │ │ ├── Inter-ExtraBoldItalic.woff
│ │ │ ├── Inter-ExtraBoldItalic.woff2
│ │ │ ├── Inter-ExtraLight.woff
│ │ │ ├── Inter-ExtraLight.woff2
│ │ │ ├── Inter-ExtraLightItalic.woff
│ │ │ ├── Inter-ExtraLightItalic.woff2
│ │ │ ├── Inter-Italic.woff
│ │ │ ├── Inter-Italic.woff2
│ │ │ ├── Inter-Light.woff
│ │ │ ├── Inter-Light.woff2
│ │ │ ├── Inter-LightItalic.woff
│ │ │ ├── Inter-LightItalic.woff2
│ │ │ ├── Inter-Medium.woff
│ │ │ ├── Inter-Medium.woff2
│ │ │ ├── Inter-MediumItalic.woff
│ │ │ ├── Inter-MediumItalic.woff2
│ │ │ ├── Inter-Regular.woff
│ │ │ ├── Inter-Regular.woff2
│ │ │ ├── Inter-SemiBold.woff
│ │ │ ├── Inter-SemiBold.woff2
│ │ │ ├── Inter-SemiBoldItalic.woff
│ │ │ ├── Inter-SemiBoldItalic.woff2
│ │ │ ├── Inter-Thin.woff
│ │ │ ├── Inter-Thin.woff2
│ │ │ ├── Inter-ThinItalic.woff
│ │ │ ├── Inter-ThinItalic.woff2
│ │ │ ├── Inter-italic.var.woff2
│ │ │ ├── Inter-roman.var.woff2
│ │ │ ├── Inter.var.woff2
│ │ │ └── inter.css
│ ├── components
│ │ ├── AttendanceDetail.vue
│ │ ├── Calendar.vue
│ │ ├── CalendarEvent.vue
│ │ ├── CalendarView.vue
│ │ ├── CollapseSidebar.vue
│ │ ├── FeesPaymentDialog.vue
│ │ ├── Home.vue
│ │ ├── MissingData.vue
│ │ ├── Navbar.vue
│ │ ├── NewLeave.vue
│ │ ├── ProfileModal.vue
│ │ ├── Sidebar.vue
│ │ ├── SidebarLink.vue
│ │ ├── UpdateStudentInfo.vue
│ │ └── UserDropdown.vue
│ ├── index.css
│ ├── main.js
│ ├── pages
│ │ ├── Attendance.vue
│ │ ├── Fees.vue
│ │ ├── Grades.vue
│ │ ├── Home.vue
│ │ ├── Leaves.vue
│ │ ├── Login.vue
│ │ ├── Schedule.vue
│ │ └── SchoolDiary.vue
│ ├── router.js
│ ├── stores
│ │ ├── leave.js
│ │ ├── session.js
│ │ ├── student.js
│ │ └── user.js
│ └── utils
│ │ └── index.js
├── tailwind.config.js
├── vite.config.js
├── yarn-error.log
└── yarn.lock
├── license.txt
├── node_modules
└── .yarn-integrity
├── package.json
├── requirements.txt
├── setup.py
└── yarn.lock
/.git-blame-ignore-revs:
--------------------------------------------------------------------------------
1 | # Since version 2.23 (released in August 2019), git-blame has a feature
2 | # to ignore or bypass certain commits.
3 | #
4 | # This file contains a list of commits that are not likely what you
5 | # are looking for in a blame, such as mass reformatting or renaming.
6 | # You can set this file as a default ignore file for blame by running
7 | # the following command.
8 | #
9 | # $ git config blame.ignoreRevsFile .git-blame-ignore-revs
10 |
11 | # bulk formatting
12 | 4318bb260bc46797ddb101ae45fa563d40d55b0d
13 |
--------------------------------------------------------------------------------
/.github/edu-logo.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/.github/helper/flake8.conf:
--------------------------------------------------------------------------------
1 | [flake8]
2 | ignore =
3 | B001,
4 | B007,
5 | B009,
6 | B010,
7 | B950,
8 | E101,
9 | E111,
10 | E114,
11 | E116,
12 | E117,
13 | E121,
14 | E122,
15 | E123,
16 | E124,
17 | E125,
18 | E126,
19 | E127,
20 | E128,
21 | E131,
22 | E201,
23 | E202,
24 | E203,
25 | E211,
26 | E221,
27 | E222,
28 | E223,
29 | E224,
30 | E225,
31 | E226,
32 | E228,
33 | E231,
34 | E241,
35 | E242,
36 | E251,
37 | E261,
38 | E262,
39 | E265,
40 | E266,
41 | E271,
42 | E272,
43 | E273,
44 | E274,
45 | E301,
46 | E302,
47 | E303,
48 | E305,
49 | E306,
50 | E402,
51 | E501,
52 | E502,
53 | E701,
54 | E702,
55 | E703,
56 | E741,
57 | F401,
58 | F403,
59 | F405,
60 | W191,
61 | W291,
62 | W292,
63 | W293,
64 | W391,
65 | W503,
66 | W504,
67 | E711,
68 | E129,
69 | F841,
70 | E713,
71 | E712,
72 |
73 |
74 | max-line-length = 200
75 |
--------------------------------------------------------------------------------
/.github/helper/site_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "db_host": "127.0.0.1",
3 | "db_port": 3306,
4 | "db_name": "test_frappe",
5 | "db_password": "test_frappe",
6 | "auto_email_id": "test@example.com",
7 | "mail_server": "smtp.example.com",
8 | "mail_login": "test@example.com",
9 | "mail_password": "test",
10 | "admin_password": "admin",
11 | "root_login": "root",
12 | "root_password": "root",
13 | "host_name": "http://test_site:8000",
14 | "install_apps": ["erpnext"],
15 | "throttle_user_limit": 100
16 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | *.pyc
3 | *.egg-info
4 | *.swp
5 | tags
6 | education/docs/current
7 | dist/
8 | __pycache__/
9 | node_modules
10 | education/public/frontend
11 | education/www/education.html
12 | education/www/student-portal.html
--------------------------------------------------------------------------------
/.pre-commit-config.yaml:
--------------------------------------------------------------------------------
1 | exclude: 'node_modules|.git'
2 | default_stages: [commit]
3 | fail_fast: false
4 |
5 |
6 | repos:
7 | - repo: https://github.com/pre-commit/pre-commit-hooks
8 | rev: v4.0.1
9 | hooks:
10 | - id: trailing-whitespace
11 | files: "education.*"
12 | exclude: ".*json$|.*txt$|.*csv|.*md|.*svg"
13 | - id: check-yaml
14 | - id: no-commit-to-branch
15 | args: ['--branch', 'develop']
16 | - id: check-merge-conflict
17 | - id: check-ast
18 |
19 | - repo: https://github.com/adityahase/black
20 | rev: 9cb0a69f4d0030cdf687eddf314468b39ed54119
21 | hooks:
22 | - id: black
23 | additional_dependencies: ['click==8.0.4']
24 |
25 | - repo: https://github.com/PyCQA/flake8
26 | rev: 5.0.4
27 | hooks:
28 | - id: flake8
29 | additional_dependencies: ["flake8-bugbear"]
30 | args: ["--config", ".github/helper/flake8.conf"]
31 |
32 | - repo: https://github.com/pre-commit/mirrors-prettier
33 | rev: v2.7.1
34 | hooks:
35 | - id: prettier
36 | types_or: [javascript, vue, scss]
37 |
38 | ci:
39 | autoupdate_schedule: weekly
40 | skip: []
41 | submodules: false
42 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true,
4 | "tabWidth": 2,
5 | "proseWrap": "always"
6 | }
--------------------------------------------------------------------------------
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include MANIFEST.in
2 | include requirements.txt
3 | include *.json
4 | include *.md
5 | include *.py
6 | include *.txt
7 | recursive-include education *.css
8 | recursive-include education *.csv
9 | recursive-include education *.html
10 | recursive-include education *.ico
11 | recursive-include education *.js
12 | recursive-include education *.json
13 | recursive-include education *.md
14 | recursive-include education *.png
15 | recursive-include education *.py
16 | recursive-include education *.svg
17 | recursive-include education *.txt
18 | recursive-exclude education *.pyc
--------------------------------------------------------------------------------
/education/__init__.py:
--------------------------------------------------------------------------------
1 | __version__ = "15.5.0"
2 |
--------------------------------------------------------------------------------
/education/api/session.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
--------------------------------------------------------------------------------
/education/config/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/config/__init__.py
--------------------------------------------------------------------------------
/education/config/desktop.py:
--------------------------------------------------------------------------------
1 | from frappe import _
2 |
3 |
4 | def get_data():
5 | return [
6 | {
7 | "module_name": "Education",
8 | "color": "grey",
9 | "icon": "octicon octicon-file-directory",
10 | "type": "module",
11 | "label": _("Education"),
12 | }
13 | ]
14 |
--------------------------------------------------------------------------------
/education/config/docs.py:
--------------------------------------------------------------------------------
1 | """
2 | Configuration for docs
3 | """
4 |
5 | # source_link = "https://github.com/[org_name]/education"
6 | # headline = "App that does everything"
7 | # sub_heading = "Yes, you got that right the first time, everything"
8 |
9 |
10 | def get_context(context):
11 | context.brand_html = "Education"
12 |
--------------------------------------------------------------------------------
/education/education/__init__.py:
--------------------------------------------------------------------------------
1 | import frappe
2 | from frappe import _
3 |
4 |
5 | class StudentNotInGroupError(frappe.ValidationError):
6 | pass
7 |
8 |
9 | def validate_student_belongs_to_group(student, student_group):
10 | groups = frappe.db.get_all(
11 | "Student Group Student", ["parent"], dict(student=student, active=1)
12 | )
13 | if not student_group in [d.parent for d in groups]:
14 | frappe.throw(
15 | _("Student {0} does not belong to group {1}").format(
16 | frappe.bold(student), frappe.bold(student_group)
17 | ),
18 | StudentNotInGroupError,
19 | )
20 |
--------------------------------------------------------------------------------
/education/education/doctype/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/academic_term/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/academic_term/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/academic_term/academic_term.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Academic Term', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/academic_term/test_academic_term.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and Contributors
2 | # See license.txt
3 |
4 | from frappe.tests.utils import FrappeTestCase
5 |
6 | # test_records = frappe.get_test_records('Academic Term')
7 |
8 |
9 | class TestAcademicTerm(FrappeTestCase):
10 | pass
11 |
--------------------------------------------------------------------------------
/education/education/doctype/academic_year/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/academic_year/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/academic_year/academic_year.js:
--------------------------------------------------------------------------------
1 | frappe.ui.form.on('Academic Year', {})
2 |
--------------------------------------------------------------------------------
/education/education/doctype/academic_year/academic_year.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | import frappe
6 | from frappe import _
7 | from frappe.model.document import Document
8 |
9 |
10 | class AcademicYear(Document):
11 | def validate(self):
12 | # Check that start of academic year is earlier than end of academic year
13 | if (
14 | self.year_start_date
15 | and self.year_end_date
16 | and self.year_start_date > self.year_end_date
17 | ):
18 | frappe.throw(
19 | _(
20 | "The Year End Date cannot be earlier than the Year Start Date. Please correct the dates and try again."
21 | )
22 | )
23 |
--------------------------------------------------------------------------------
/education/education/doctype/academic_year/test_academic_year.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and Contributors
2 | # See license.txt
3 |
4 |
5 | import frappe
6 | from frappe.tests.utils import FrappeTestCase
7 |
8 |
9 | class TestAcademicYear(FrappeTestCase):
10 | def test_date_validation(self):
11 | year = frappe.get_doc(
12 | {
13 | "doctype": "Academic Year",
14 | "year_start_date": "13-02-2023",
15 | "year_end_date": "27-01-2023",
16 | }
17 | )
18 | self.assertRaises(frappe.ValidationError, year.insert)
19 |
--------------------------------------------------------------------------------
/education/education/doctype/article/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/article/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/article/article.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions": [],
3 | "allow_import": 1,
4 | "allow_rename": 1,
5 | "autoname": "field:title",
6 | "creation": "2018-10-17 05:45:38.471670",
7 | "doctype": "DocType",
8 | "editable_grid": 1,
9 | "engine": "InnoDB",
10 | "field_order": [
11 | "title",
12 | "author",
13 | "content",
14 | "publish_date"
15 | ],
16 | "fields": [
17 | {
18 | "fieldname": "title",
19 | "fieldtype": "Data",
20 | "label": "Title",
21 | "unique": 1
22 | },
23 | {
24 | "fieldname": "author",
25 | "fieldtype": "Data",
26 | "label": "Author"
27 | },
28 | {
29 | "fieldname": "content",
30 | "fieldtype": "Text Editor",
31 | "label": "Content"
32 | },
33 | {
34 | "fieldname": "publish_date",
35 | "fieldtype": "Date",
36 | "label": "Publish Date"
37 | }
38 | ],
39 | "links": [],
40 | "modified": "2023-02-06 12:23:28.330556",
41 | "modified_by": "Administrator",
42 | "module": "Education",
43 | "name": "Article",
44 | "naming_rule": "By fieldname",
45 | "owner": "Administrator",
46 | "permissions": [
47 | {
48 | "create": 1,
49 | "delete": 1,
50 | "email": 1,
51 | "export": 1,
52 | "print": 1,
53 | "read": 1,
54 | "report": 1,
55 | "role": "Academics User",
56 | "share": 1,
57 | "write": 1
58 | },
59 | {
60 | "create": 1,
61 | "delete": 1,
62 | "email": 1,
63 | "export": 1,
64 | "print": 1,
65 | "read": 1,
66 | "report": 1,
67 | "role": "Instructor",
68 | "share": 1,
69 | "write": 1
70 | }
71 | ],
72 | "sort_field": "modified",
73 | "sort_order": "DESC",
74 | "states": [],
75 | "track_changes": 1
76 | }
--------------------------------------------------------------------------------
/education/education/doctype/article/article.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | import frappe
6 | from frappe.model.document import Document
7 |
8 |
9 | class Article(Document):
10 | def get_article(self):
11 | pass
12 |
13 |
14 | @frappe.whitelist()
15 | def get_topics_without_article(article):
16 | data = []
17 | for entry in frappe.db.get_all("Topic"):
18 | topic = frappe.get_doc("Topic", entry.name)
19 | topic_contents = [tc.content for tc in topic.topic_content]
20 | if not topic_contents or article not in topic_contents:
21 | data.append(topic.name)
22 | return data
23 |
--------------------------------------------------------------------------------
/education/education/doctype/article/test_article.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestArticle(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_criteria/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/assessment_criteria/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/assessment_criteria/assessment_criteria.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Assessment Criteria', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_criteria/assessment_criteria.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | import frappe
6 | from frappe import _
7 | from frappe.model.document import Document
8 |
9 | STD_CRITERIA = [
10 | "total",
11 | "total score",
12 | "total grade",
13 | "maximum score",
14 | "score",
15 | "grade",
16 | ]
17 |
18 |
19 | class AssessmentCriteria(Document):
20 | def validate(self):
21 | if self.assessment_criteria.lower() in STD_CRITERIA:
22 | frappe.throw(_("Can't create standard criteria. Please rename the criteria"))
23 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_criteria/test_assessment_criteria.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Assessment Criteria')
8 |
9 |
10 | class TestAssessmentCriteria(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_criteria/test_records.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "assessment_criteria": "_Test Assessment Criteria"
4 | },
5 | {
6 | "assessment_criteria": "_Test Assessment Criteria 1"
7 | }
8 | ]
9 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_criteria_group/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/assessment_criteria_group/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/assessment_criteria_group/assessment_criteria_group.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Assessment Criteria Group', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_criteria_group/assessment_criteria_group.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class AssessmentCriteriaGroup(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_criteria_group/test_assessment_criteria_group.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Assessment Criteria Group')
8 |
9 |
10 | class TestAssessmentCriteriaGroup(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_group/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/assessment_group/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/assessment_group/assessment_group.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Assessment Group', {
5 | onload: function (frm) {
6 | frm.list_route = 'Tree/Assessment Group'
7 | },
8 | })
9 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_group/assessment_group.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class AssessmentGroup(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_group/assessment_group_dashboard.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
2 | # License: GNU General Public License v3. See license.txt
3 |
4 | from frappe import _
5 |
6 |
7 | def get_data():
8 | return {
9 | "fieldname": "assessment_group",
10 | "transactions": [
11 | {"label": _("Assessment"), "items": ["Assessment Plan", "Assessment Result"]}
12 | ],
13 | }
14 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_group/assessment_group_tree.js:
--------------------------------------------------------------------------------
1 | frappe.treeview_settings['Assessment Group'] = {}
2 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_group/test_assessment_group.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Assessment Group')
8 |
9 |
10 | class TestAssessmentGroup(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_plan/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/assessment_plan/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/assessment_plan/assessment_plan_dashboard.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
2 | # License: GNU General Public License v3. See license.txt
3 |
4 | from frappe import _
5 |
6 |
7 | def get_data():
8 | return {
9 | "fieldname": "assessment_plan",
10 | "transactions": [{"label": _("Assessment"), "items": ["Assessment Result"]}],
11 | "reports": [{"label": _("Report"), "items": ["Assessment Plan Status"]}],
12 | }
13 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_plan/test_assessment_plan.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Assessment Plan')
8 |
9 |
10 | class TestAssessmentPlan(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_plan_criteria/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/assessment_plan_criteria/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/assessment_plan_criteria/assessment_plan_criteria.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class AssessmentPlanCriteria(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_result/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/assessment_result/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/assessment_result/assessment_result_dashboard.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
2 | # License: GNU General Public License v3. See license.txt
3 |
4 | from frappe import _
5 |
6 |
7 | def get_data():
8 | return {
9 | "reports": [
10 | {
11 | "label": _("Reports"),
12 | "items": ["Final Assessment Grades", "Course wise Assessment Report"],
13 | }
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_result/test_assessment_result.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 | import frappe
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | from education.education.api import get_grade
8 | from education.education.test_utils import create_grading_scale
9 |
10 | # test_records = frappe.get_test_records('Assessment Result')
11 |
12 |
13 | class TestAssessmentResult(FrappeTestCase):
14 | def setUp(self):
15 | create_grading_scale()
16 |
17 | def tearDown(self):
18 | frappe.db.rollback()
19 |
20 | def test_grade(self):
21 | grade = get_grade("_Test Grading Scale", 80)
22 | self.assertEqual("A", grade)
23 |
24 | grade = get_grade("_Test Grading Scale", 70)
25 | self.assertEqual("B", grade)
26 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_result_detail/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/assessment_result_detail/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/assessment_result_detail/assessment_result_detail.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions": [],
3 | "creation": "2016-12-14 17:44:35.583123",
4 | "doctype": "DocType",
5 | "editable_grid": 1,
6 | "engine": "InnoDB",
7 | "field_order": [
8 | "assessment_criteria",
9 | "maximum_score",
10 | "column_break_2",
11 | "score",
12 | "grade"
13 | ],
14 | "fields": [
15 | {
16 | "columns": 4,
17 | "fieldname": "assessment_criteria",
18 | "fieldtype": "Link",
19 | "in_list_view": 1,
20 | "label": "Assessment Criteria",
21 | "options": "Assessment Criteria",
22 | "read_only": 1,
23 | "reqd": 1
24 | },
25 | {
26 | "columns": 2,
27 | "fieldname": "maximum_score",
28 | "fieldtype": "Float",
29 | "in_list_view": 1,
30 | "label": "Maximum Score",
31 | "read_only": 1
32 | },
33 | {
34 | "fieldname": "column_break_2",
35 | "fieldtype": "Column Break"
36 | },
37 | {
38 | "columns": 2,
39 | "fieldname": "score",
40 | "fieldtype": "Float",
41 | "in_list_view": 1,
42 | "label": "Score",
43 | "reqd": 1
44 | },
45 | {
46 | "columns": 2,
47 | "fieldname": "grade",
48 | "fieldtype": "Data",
49 | "in_list_view": 1,
50 | "label": "Grade",
51 | "read_only": 1
52 | }
53 | ],
54 | "istable": 1,
55 | "links": [],
56 | "modified": "2020-07-31 13:27:17.699022",
57 | "modified_by": "Administrator",
58 | "module": "Education",
59 | "name": "Assessment Result Detail",
60 | "owner": "Administrator",
61 | "permissions": [],
62 | "quick_entry": 1,
63 | "restrict_to_domain": "",
64 | "sort_field": "modified",
65 | "sort_order": "DESC"
66 | }
--------------------------------------------------------------------------------
/education/education/doctype/assessment_result_detail/assessment_result_detail.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class AssessmentResultDetail(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_result_tool/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/assessment_result_tool/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/assessment_result_tool/assessment_result_tool.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class AssessmentResultTool(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/assessment_result_tool/test_assessment_result_tool.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestAssessmentResultTool(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/course/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/course/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/course/course_dashboard.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
2 | # License: GNU General Public License v3. See license.txt
3 |
4 | from frappe import _
5 |
6 |
7 | def get_data():
8 | return {
9 | "fieldname": "course",
10 | "transactions": [
11 | {
12 | "label": _("Program and Course"),
13 | "items": ["Program", "Course Enrollment", "Course Schedule"],
14 | },
15 | {"label": _("Student"), "items": ["Student Group"]},
16 | {"label": _("Assessment"), "items": ["Assessment Plan", "Assessment Result"]},
17 | ],
18 | }
19 |
--------------------------------------------------------------------------------
/education/education/doctype/course/test_records.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "course_name": "TC100",
4 | "course_abbreviation": "TC"
5 | },
6 | {
7 | "course_name": "TC101",
8 | "course_abbreviation": "TC1"
9 | },
10 | {
11 | "course_name": "TC102",
12 | "course_abbreviation": "TC2"
13 | }
14 | ]
--------------------------------------------------------------------------------
/education/education/doctype/course_activity/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/course_activity/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/course_activity/course_activity.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Course Activity', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/course_activity/course_activity.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | import frappe
6 | from frappe import _
7 | from frappe.model.document import Document
8 |
9 |
10 | class CourseActivity(Document):
11 | def validate(self):
12 | self.check_if_enrolled()
13 |
14 | def check_if_enrolled(self):
15 | if frappe.db.exists("Course Enrollment", self.enrollment):
16 | return True
17 | else:
18 | frappe.throw(_("Course Enrollment {0} does not exists").format(self.enrollment))
19 |
--------------------------------------------------------------------------------
/education/education/doctype/course_activity/test_course_activity.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | import frappe
8 |
9 |
10 | class TestCourseActivity(FrappeTestCase):
11 | pass
12 |
13 |
14 | def make_course_activity(enrollment, content_type, content):
15 | activity = frappe.get_all(
16 | "Course Activity",
17 | filters={"enrollment": enrollment, "content_type": content_type, "content": content},
18 | )
19 | try:
20 | activity = frappe.get_doc("Course Activity", activity[0]["name"])
21 | except (IndexError, frappe.DoesNotExistError):
22 | activity = frappe.get_doc(
23 | {
24 | "doctype": "Course Activity",
25 | "enrollment": enrollment,
26 | "content_type": content_type,
27 | "content": content,
28 | "activity_date": frappe.utils.datetime.datetime.now(),
29 | }
30 | ).insert()
31 | return activity
32 |
--------------------------------------------------------------------------------
/education/education/doctype/course_assessment_criteria/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/course_assessment_criteria/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/course_assessment_criteria/course_assessment_criteria.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class CourseAssessmentCriteria(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/course_enrollment/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/course_enrollment/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/course_enrollment/course_enrollment.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Course Enrollment', {
5 | onload: function (frm) {
6 | frm.set_query('course', function () {
7 | return {
8 | query:
9 | 'education.education.doctype.program_enrollment.program_enrollment.get_program_courses',
10 | filters: {
11 | program: frm.doc.program,
12 | },
13 | }
14 | })
15 | },
16 | })
17 |
--------------------------------------------------------------------------------
/education/education/doctype/course_enrollment/test_course_enrollment.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | import frappe
6 |
7 | from frappe.tests.utils import FrappeTestCase
8 |
9 |
10 | class TestCourseEnrollment(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/course_schedule/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/course_schedule/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/course_schedule/course_schedule.js:
--------------------------------------------------------------------------------
1 | frappe.ui.form.on('Course Schedule', {
2 | refresh: function (frm) {
3 | if (!frm.doc.__islocal) {
4 | frm.add_custom_button(__('Mark Attendance'), function () {
5 | frappe.route_options = {
6 | based_on: 'Course Schedule',
7 | course_schedule: frm.doc.name,
8 | }
9 | frappe.set_route('Form', 'Student Attendance Tool')
10 | })
11 | }
12 | if (frm.doc.student_group) {
13 | frm.events.get_instructors(frm)
14 | }
15 | },
16 |
17 | onload: (frm) => {
18 | frm.set_query('instructor', () => {
19 | if (frm.instructors.length) {
20 | return {
21 | filters: {
22 | instructor_name: ['in', frm.instructors],
23 | },
24 | }
25 | } else return
26 | })
27 |
28 | frm.set_query('course', function () {
29 | return {
30 | query:
31 | 'education.education.doctype.program_enrollment.program_enrollment.get_program_courses',
32 | filters: {
33 | program: frm.doc.program,
34 | },
35 | }
36 | })
37 | },
38 |
39 | student_group: (frm) => {
40 | frm.events.get_instructors(frm)
41 | },
42 |
43 | get_instructors: (frm) => {
44 | frm.instructors = []
45 | frappe.call({
46 | method: 'education.education.api.get_instructors',
47 | args: {
48 | student_group: frm.doc.student_group,
49 | },
50 | callback: function (data) {
51 | frm.instructors = data.message
52 | },
53 | })
54 | },
55 | })
56 |
--------------------------------------------------------------------------------
/education/education/doctype/course_schedule/course_schedule_calendar.js:
--------------------------------------------------------------------------------
1 | frappe.views.calendar['Course Schedule'] = {
2 | field_map: {
3 | start: 'from_time',
4 | end: 'to_time',
5 | id: 'name',
6 | title: 'course',
7 | allDay: 'allDay',
8 | },
9 | gantt: false,
10 | order_by: 'schedule_date',
11 | filters: [
12 | {
13 | fieldtype: 'Link',
14 | fieldname: 'student_group',
15 | options: 'Student Group',
16 | label: __('Student Group'),
17 | },
18 | {
19 | fieldtype: 'Link',
20 | fieldname: 'course',
21 | options: 'Course',
22 | label: __('Course'),
23 | },
24 | {
25 | fieldtype: 'Link',
26 | fieldname: 'instructor',
27 | options: 'Instructor',
28 | label: __('Instructor'),
29 | },
30 | {
31 | fieldtype: 'Link',
32 | fieldname: 'room',
33 | options: 'Room',
34 | label: __('Room'),
35 | },
36 | ],
37 | get_events_method: 'education.education.api.get_course_schedule_events',
38 | }
39 |
--------------------------------------------------------------------------------
/education/education/doctype/course_schedule/course_schedule_dashboard.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
2 | # License: GNU General Public License v3. See license.txt
3 |
4 | from frappe import _
5 |
6 |
7 | def get_data():
8 | return {
9 | "fieldname": "course_schedule",
10 | "transactions": [{"label": _("Attendance"), "items": ["Student Attendance"]}],
11 | }
12 |
--------------------------------------------------------------------------------
/education/education/doctype/course_scheduling_tool/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/course_scheduling_tool/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/course_scheduling_tool/test_course_scheduling_tool.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestCourseSchedulingTool(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/course_topic/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/course_topic/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/course_topic/course_topic.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Course Topic', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/course_topic/course_topic.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class CourseTopic(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/course_topic/test_course_topic.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestCourseTopic(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/education_settings/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/education_settings/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/education_settings/education_settings.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Education Settings', {
5 | onload: function (frm) {
6 | frm.set_query('current_academic_term', (doc) => {
7 | return {
8 | filters: {
9 | academic_year: doc.current_academic_year,
10 | },
11 | }
12 | })
13 | },
14 | })
15 |
--------------------------------------------------------------------------------
/education/education/doctype/education_settings/education_settings.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | import frappe
6 | import frappe.defaults
7 | from frappe.model.document import Document
8 |
9 | education_keydict = {
10 | # "key in defaults": "key in Global Defaults"
11 | "academic_year": "current_academic_year",
12 | "academic_term": "current_academic_term",
13 | "validate_batch": "validate_batch",
14 | "validate_course": "validate_course",
15 | }
16 |
17 |
18 | class EducationSettings(Document):
19 | def on_update(self):
20 | """update defaults"""
21 | for key in education_keydict:
22 | frappe.db.set_default(key, self.get(education_keydict[key], ""))
23 |
24 | # clear cache
25 | frappe.clear_cache()
26 |
27 | def get_defaults(self):
28 | return frappe.defaults.get_defaults()
29 |
30 | def validate(self):
31 | from frappe.custom.doctype.property_setter.property_setter import make_property_setter
32 |
33 | if self.get("instructor_created_by") == "Naming Series":
34 | make_property_setter(
35 | "Instructor",
36 | "naming_series",
37 | "hidden",
38 | 0,
39 | "Check",
40 | validate_fields_for_doctype=False,
41 | )
42 | else:
43 | make_property_setter(
44 | "Instructor",
45 | "naming_series",
46 | "hidden",
47 | 1,
48 | "Check",
49 | validate_fields_for_doctype=False,
50 | )
51 |
--------------------------------------------------------------------------------
/education/education/doctype/education_settings/test_education_settings.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestEducationSettings(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/fee_category/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/fee_category/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/fee_category/fee_category.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Fee Category', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/fee_category/test_records.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "category_name": "Admission Fee"
4 | },
5 | {
6 | "category_name": "Tuition Fee"
7 | },
8 | {
9 | "category_name": "Transportation Fee"
10 | }
11 | ]
--------------------------------------------------------------------------------
/education/education/doctype/fee_category_default/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/fee_category_default/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/fee_category_default/fee_category_default.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions": [],
3 | "allow_rename": 1,
4 | "creation": "2024-05-28 11:36:10.928607",
5 | "doctype": "DocType",
6 | "editable_grid": 1,
7 | "engine": "InnoDB",
8 | "field_order": [
9 | "company",
10 | "income_account",
11 | "selling_cost_center"
12 | ],
13 | "fields": [
14 | {
15 | "fieldname": "company",
16 | "fieldtype": "Link",
17 | "ignore_user_permissions": 1,
18 | "in_list_view": 1,
19 | "label": "Company",
20 | "options": "Company",
21 | "reqd": 1
22 | },
23 | {
24 | "fieldname": "selling_cost_center",
25 | "fieldtype": "Link",
26 | "in_list_view": 1,
27 | "label": "Default Cost Center",
28 | "link_filters": "[[\"Cost Center\",\"is_group\",\"=\",0],[\"Cost Center\",\"company\",\"=\",\"eval: doc.company\"]]",
29 | "options": "Cost Center"
30 | },
31 | {
32 | "fieldname": "income_account",
33 | "fieldtype": "Link",
34 | "in_list_view": 1,
35 | "label": "Default Income Account",
36 | "link_filters": "[[\"Account\",\"company\",\"=\",\"eval: doc.company\"],[\"Account\",\"is_group\",\"=\",0],[\"Account\",\"root_type\",\"=\",\"Income\"]]",
37 | "options": "Account"
38 | }
39 | ],
40 | "index_web_pages_for_search": 1,
41 | "istable": 1,
42 | "links": [],
43 | "modified": "2024-06-28 13:05:14.403852",
44 | "modified_by": "Administrator",
45 | "module": "Education",
46 | "name": "Fee Category Default",
47 | "owner": "Administrator",
48 | "permissions": [],
49 | "sort_field": "creation",
50 | "sort_order": "DESC",
51 | "states": []
52 | }
--------------------------------------------------------------------------------
/education/education/doctype/fee_category_default/fee_category_default.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 | # import frappe
5 | from frappe.model.document import Document
6 |
7 |
8 | class FeeCategoryDefault(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/fee_component/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/fee_component/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/fee_component/fee_component.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class FeeComponent(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/fee_schedule/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/fee_schedule/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/fee_schedule/fee_schedule_list.js:
--------------------------------------------------------------------------------
1 | frappe.listview_settings['Fee Schedule'] = {
2 | add_fields: ['status', 'due_date', 'grand_total'],
3 | }
4 |
--------------------------------------------------------------------------------
/education/education/doctype/fee_schedule_details/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/fee_schedule_details/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/fee_schedule_details/fee_schedule_details.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions": [],
3 | "allow_rename": 1,
4 | "creation": "2024-01-10 13:14:22.550624",
5 | "doctype": "DocType",
6 | "editable_grid": 1,
7 | "engine": "InnoDB",
8 | "field_order": [
9 | "month",
10 | "due_date",
11 | "amount"
12 | ],
13 | "fields": [
14 | {
15 | "fieldname": "month",
16 | "fieldtype": "Data",
17 | "in_list_view": 1,
18 | "label": "Month"
19 | },
20 | {
21 | "fieldname": "due_date",
22 | "fieldtype": "Date",
23 | "in_list_view": 1,
24 | "label": "Due Date"
25 | },
26 | {
27 | "fieldname": "amount",
28 | "fieldtype": "Float",
29 | "in_list_view": 1,
30 | "label": "Amount"
31 | }
32 | ],
33 | "index_web_pages_for_search": 1,
34 | "istable": 1,
35 | "links": [],
36 | "modified": "2024-01-10 13:24:12.914268",
37 | "modified_by": "Administrator",
38 | "module": "Education",
39 | "name": "Fee Schedule Details",
40 | "owner": "Administrator",
41 | "permissions": [],
42 | "sort_field": "modified",
43 | "sort_order": "DESC",
44 | "states": []
45 | }
--------------------------------------------------------------------------------
/education/education/doctype/fee_schedule_details/fee_schedule_details.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 | # import frappe
5 | from frappe.model.document import Document
6 |
7 |
8 | class FeeScheduleDetails(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/fee_schedule_program/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/fee_schedule_program/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/fee_schedule_program/fee_schedule_program.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class FeeScheduleProgram(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/fee_schedule_student_group/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/fee_schedule_student_group/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/fee_schedule_student_group/fee_schedule_student_group.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class FeeScheduleStudentGroup(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/fee_structure/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/fee_structure/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/fees/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/fees/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/fees/fees_list.js:
--------------------------------------------------------------------------------
1 | frappe.listview_settings['Fees'] = {
2 | add_fields: ['grand_total', 'outstanding_amount', 'due_date'],
3 | get_indicator: function (doc) {
4 | if (flt(doc.outstanding_amount) == 0) {
5 | return [__('Paid'), 'green', 'outstanding_amount,=,0']
6 | } else if (
7 | flt(doc.outstanding_amount) > 0 &&
8 | doc.due_date >= frappe.datetime.get_today()
9 | ) {
10 | return [__('Unpaid'), 'orange', 'outstanding_amount,>,0|due_date,>,Today']
11 | } else if (
12 | flt(doc.outstanding_amount) > 0 &&
13 | doc.due_date < frappe.datetime.get_today()
14 | ) {
15 | return [__('Overdue'), 'red', 'outstanding_amount,>,0|due_date,<=,Today']
16 | }
17 | },
18 | }
19 |
--------------------------------------------------------------------------------
/education/education/doctype/fees/test_fees.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and Contributors
2 | # See license.txt
3 |
4 |
5 | import frappe
6 | from frappe.utils import nowdate
7 | from frappe.utils.make_random import get_random
8 | from frappe.tests.utils import FrappeTestCase
9 |
10 | from education.education.doctype.program.test_program import (
11 | make_program_and_linked_courses,
12 | )
13 |
14 |
15 | class TestFees(FrappeTestCase):
16 | # deprecated
17 | pass
18 |
--------------------------------------------------------------------------------
/education/education/doctype/grading_scale/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/grading_scale/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/grading_scale/grading_scale.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Grading Scale', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/grading_scale/grading_scale.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | import frappe
6 | from frappe import _
7 | from frappe.model.document import Document
8 | from frappe.utils import cint
9 |
10 |
11 | class GradingScale(Document):
12 | def validate(self):
13 | thresholds = []
14 | for d in self.intervals:
15 | if d.threshold in thresholds:
16 | frappe.throw(_("Treshold {0}% appears more than once").format(d.threshold))
17 | else:
18 | thresholds.append(cint(d.threshold))
19 | if 0 not in thresholds:
20 | frappe.throw(_("Please define grade for Threshold 0%"))
21 |
--------------------------------------------------------------------------------
/education/education/doctype/grading_scale/grading_scale_dashboard.py:
--------------------------------------------------------------------------------
1 | from frappe import _
2 |
3 |
4 | def get_data():
5 | return {
6 | "fieldname": "grading_scale",
7 | "non_standard_fieldnames": {"Course": "default_grading_scale"},
8 | "transactions": [
9 | {"label": _("Course"), "items": ["Course"]},
10 | {"label": _("Assessment"), "items": ["Assessment Plan", "Assessment Result"]},
11 | ],
12 | }
13 |
--------------------------------------------------------------------------------
/education/education/doctype/grading_scale/test_grading_scale.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Grading Scale')
8 |
9 |
10 | class TestGradingScale(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/grading_scale/test_records.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "grading_scale_name": "_Test Grading Scale",
4 | "intervals": [
5 | {
6 | "grade_code": "A",
7 | "threshold": 75
8 | },
9 | {
10 | "grade_code": "B",
11 | "threshold": 50
12 | },
13 | {
14 | "grade_code": "C",
15 | "threshold": 0
16 | }
17 | ]
18 | }
19 | ]
--------------------------------------------------------------------------------
/education/education/doctype/grading_scale_interval/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/grading_scale_interval/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/grading_scale_interval/grading_scale_interval.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class GradingScaleInterval(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/guardian/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/guardian/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/guardian/guardian.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Guardian', {
5 | refresh: function (frm) {
6 | if (!frm.doc.user && !frm.is_new()) {
7 | frm.add_custom_button(__('Invite as User'), function () {
8 | return frappe.call({
9 | method:
10 | 'education.education.doctype.guardian.guardian.invite_guardian',
11 | args: {
12 | guardian: frm.doc.name,
13 | },
14 | callback: function (r) {
15 | frm.set_value('user', r.message)
16 | },
17 | })
18 | })
19 | }
20 | },
21 | })
22 |
--------------------------------------------------------------------------------
/education/education/doctype/guardian/test_guardian.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Guardian')
8 |
9 |
10 | class TestGuardian(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/guardian_interest/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/guardian_interest/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/guardian_interest/guardian_interest.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class GuardianInterest(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/guardian_student/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/guardian_student/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/guardian_student/guardian_student.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class GuardianStudent(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/instructor/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/instructor/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/instructor/instructor_dashboard.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
2 | # License: GNU General Public License v3. See license.txt
3 |
4 | from frappe import _
5 |
6 |
7 | def get_data():
8 | return {
9 | "heatmap": True,
10 | "heatmap_message": _("This is based on the course schedules of this Instructor"),
11 | "fieldname": "instructor",
12 | "non_standard_fieldnames": {"Assessment Plan": "supervisor"},
13 | "transactions": [
14 | {
15 | "label": _("Course and Assessment"),
16 | "items": ["Course Schedule", "Assessment Plan"],
17 | },
18 | {"label": _("Students"), "items": ["Student Group"]},
19 | ],
20 | }
21 |
--------------------------------------------------------------------------------
/education/education/doctype/instructor/test_instructor.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Instructor')
8 |
9 |
10 | class TestInstructor(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/instructor/test_records.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "naming_series": "_T-Instructor-",
4 | "employee": "_T-Employee-00001",
5 | "instructor_name": "_Test Instructor"
6 | },
7 | {
8 | "naming_series": "_T-Instructor-",
9 | "employee": "_T-Employee-00002",
10 | "instructor_name": "_Test Instructor 2"
11 | }
12 | ]
13 |
--------------------------------------------------------------------------------
/education/education/doctype/instructor_log/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/instructor_log/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/instructor_log/instructor_log.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class InstructorLog(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/options/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/options/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/options/options.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class Options(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/payment_record/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/payment_record/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/payment_record/payment_record.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | // frappe.ui.form.on("Payment Record", {
5 | // refresh(frm) {
6 |
7 | // },
8 | // });
9 |
--------------------------------------------------------------------------------
/education/education/doctype/payment_record/payment_record.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 | # import frappe
5 | from frappe.model.document import Document
6 |
7 |
8 | class PaymentRecord(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/payment_record/test_payment_record.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 | # import frappe
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestPaymentRecord(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/program/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/program/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/program/program.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2015, Frappe Technologies and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Program Course', {
5 | courses_add: function (frm) {
6 | frm.fields_dict['courses'].grid.get_field('course').get_query = function (
7 | doc
8 | ) {
9 | var courses_list = []
10 | $.each(doc.courses, function (idx, val) {
11 | if (val.course) courses_list.push(val.course)
12 | })
13 | return { filters: [['Course', 'name', 'not in', courses_list]] }
14 | }
15 | },
16 | })
17 |
--------------------------------------------------------------------------------
/education/education/doctype/program/program.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | import frappe
6 | from frappe.model.document import Document
7 |
8 |
9 | class Program(Document):
10 | def get_course_list(self):
11 | program_course_list = self.courses
12 | course_list = [
13 | frappe.get_doc("Course", program_course.course)
14 | for program_course in program_course_list
15 | ]
16 | return course_list
17 |
--------------------------------------------------------------------------------
/education/education/doctype/program_course/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/program_course/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/program_course/program_course.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions": [],
3 | "creation": "2015-09-07 14:37:01.886859",
4 | "doctype": "DocType",
5 | "editable_grid": 1,
6 | "engine": "InnoDB",
7 | "field_order": [
8 | "course",
9 | "course_name",
10 | "required"
11 | ],
12 | "fields": [
13 | {
14 | "fieldname": "course",
15 | "fieldtype": "Link",
16 | "in_global_search": 1,
17 | "in_list_view": 1,
18 | "label": "Course",
19 | "options": "Course",
20 | "reqd": 1
21 | },
22 | {
23 | "fetch_from": "course.course_name",
24 | "fieldname": "course_name",
25 | "fieldtype": "Data",
26 | "in_list_view": 1,
27 | "label": "Course Name",
28 | "read_only": 1
29 | },
30 | {
31 | "default": "1",
32 | "fieldname": "required",
33 | "fieldtype": "Check",
34 | "in_list_view": 1,
35 | "label": "Mandatory"
36 | }
37 | ],
38 | "istable": 1,
39 | "links": [],
40 | "modified": "2020-09-15 18:14:22.816795",
41 | "modified_by": "Administrator",
42 | "module": "Education",
43 | "name": "Program Course",
44 | "owner": "Administrator",
45 | "permissions": [],
46 | "restrict_to_domain": "",
47 | "sort_field": "modified",
48 | "sort_order": "DESC",
49 | "track_changes": 1
50 | }
--------------------------------------------------------------------------------
/education/education/doctype/program_course/program_course.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class ProgramCourse(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/program_enrollment/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment/program_enrollment_dashboard.py:
--------------------------------------------------------------------------------
1 | from frappe import _
2 |
3 |
4 | def get_data():
5 | return {
6 | "fieldname": "program_enrollment",
7 | "reports": [
8 | {"label": _("Report"), "items": ["Student and Guardian Contact Details"]}
9 | ],
10 | }
11 |
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment/test_program_enrollment.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe and Contributors
2 | # See license.txt
3 |
4 |
5 | import frappe
6 | from frappe.tests.utils import FrappeTestCase
7 |
8 | from education.education.test_utils import (
9 | create_academic_year,
10 | create_academic_term,
11 | create_program,
12 | create_student,
13 | create_program_enrollment,
14 | create_student_group,
15 | )
16 |
17 |
18 | class TestProgramEnrollment(FrappeTestCase):
19 | def setUp(self):
20 | create_academic_year()
21 | create_academic_term(
22 | term_name="Term 1", term_start_date="2023-04-01", term_end_date="2023-09-30"
23 | )
24 | create_program("Class 1")
25 |
26 | def test_create_course_enrollments(self):
27 | student = create_student()
28 | create_program_enrollment(student_name=student.name, submit=1)
29 |
30 | def tearDown(self):
31 | frappe.db.rollback()
32 |
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment_course/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/program_enrollment_course/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment_course/program_enrollment_course.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class ProgramEnrollmentCourse(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment_fee/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/program_enrollment_fee/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment_fee/program_enrollment_fee.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class ProgramEnrollmentFee(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment_tool/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/program_enrollment_tool/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment_tool/test_program_enrollment_tool.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestProgramEnrollmentTool(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment_tool_student/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/program_enrollment_tool_student/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/program_enrollment_tool_student/program_enrollment_tool_student.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class ProgramEnrollmentToolStudent(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/program_fee/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/program_fee/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/program_fee/program_fee.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class ProgramFee(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/question/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/question/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/question/question.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Question', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/question/question.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | import frappe
6 | from frappe import _
7 | from frappe.model.document import Document
8 |
9 |
10 | class Question(Document):
11 | def validate(self):
12 | self.check_at_least_one_option()
13 | self.check_minimum_one_correct_answer()
14 | self.set_question_type()
15 |
16 | def check_at_least_one_option(self):
17 | if len(self.options) <= 1:
18 | frappe.throw(_("A question must have more than one options"))
19 | else:
20 | pass
21 |
22 | def check_minimum_one_correct_answer(self):
23 | correct_options = [option.is_correct for option in self.options]
24 | if bool(sum(correct_options)):
25 | pass
26 | else:
27 | frappe.throw(_("A qustion must have at least one correct options"))
28 |
29 | def set_question_type(self):
30 | correct_options = [option for option in self.options if option.is_correct]
31 | if len(correct_options) > 1:
32 | self.question_type = "Multiple Correct Answer"
33 | else:
34 | self.question_type = "Single Correct Answer"
35 |
36 | def get_answer(self):
37 | options = self.options
38 | answers = [item.name for item in options if item.is_correct == True]
39 | if len(answers) == 0:
40 | frappe.throw(_("No correct answer is set for {0}").format(self.name))
41 | return None
42 | elif len(answers) == 1:
43 | return answers[0]
44 | else:
45 | return answers
46 |
--------------------------------------------------------------------------------
/education/education/doctype/question/test_question.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestQuestion(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/quiz/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/quiz/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/quiz/test_quiz.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestQuiz(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/quiz_activity/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/quiz_activity/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/quiz_activity/quiz_activity.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Quiz Activity', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/quiz_activity/quiz_activity.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class QuizActivity(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/quiz_activity/test_quiz_activity.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestQuizActivity(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/quiz_question/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/quiz_question/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/quiz_question/quiz_question.json:
--------------------------------------------------------------------------------
1 | {
2 | "allow_rename": 1,
3 | "creation": "2018-10-17 06:13:00.098883",
4 | "doctype": "DocType",
5 | "editable_grid": 1,
6 | "engine": "InnoDB",
7 | "field_order": [
8 | "question_link",
9 | "question"
10 | ],
11 | "fields": [
12 | {
13 | "fieldname": "question_link",
14 | "fieldtype": "Link",
15 | "in_list_view": 1,
16 | "label": "Question Link",
17 | "options": "Question",
18 | "reqd": 1
19 | },
20 | {
21 | "fetch_from": "question_link.question",
22 | "fieldname": "question",
23 | "fieldtype": "Text Editor",
24 | "in_list_view": 1,
25 | "label": "Question",
26 | "read_only": 1
27 | }
28 | ],
29 | "istable": 1,
30 | "modified": "2020-09-24 12:24:02.312577",
31 | "modified_by": "Administrator",
32 | "module": "Education",
33 | "name": "Quiz Question",
34 | "owner": "Administrator",
35 | "permissions": [],
36 | "quick_entry": 1,
37 | "sort_field": "modified",
38 | "sort_order": "DESC",
39 | "track_changes": 1
40 | }
41 |
--------------------------------------------------------------------------------
/education/education/doctype/quiz_question/quiz_question.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class QuizQuestion(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/quiz_result/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/quiz_result/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/quiz_result/quiz_result.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Quiz Result', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/quiz_result/quiz_result.json:
--------------------------------------------------------------------------------
1 | {
2 | "creation": "2018-10-15 15:52:25.766374",
3 | "doctype": "DocType",
4 | "editable_grid": 1,
5 | "engine": "InnoDB",
6 | "field_order": [
7 | "question",
8 | "selected_option",
9 | "quiz_result"
10 | ],
11 | "fields": [
12 | {
13 | "fieldname": "question",
14 | "fieldtype": "Link",
15 | "in_list_view": 1,
16 | "label": "Question",
17 | "options": "Question",
18 | "read_only": 1,
19 | "reqd": 1,
20 | "set_only_once": 1
21 | },
22 | {
23 | "fieldname": "selected_option",
24 | "fieldtype": "Data",
25 | "in_list_view": 1,
26 | "label": "Selected Option",
27 | "read_only": 1,
28 | "set_only_once": 1
29 | },
30 | {
31 | "fieldname": "quiz_result",
32 | "fieldtype": "Select",
33 | "in_list_view": 1,
34 | "label": "Result",
35 | "options": "\nCorrect\nWrong",
36 | "read_only": 1,
37 | "reqd": 1,
38 | "set_only_once": 1
39 | }
40 | ],
41 | "istable": 1,
42 | "modified": "2019-06-03 12:52:32.267392",
43 | "modified_by": "Administrator",
44 | "module": "Education",
45 | "name": "Quiz Result",
46 | "owner": "Administrator",
47 | "permissions": [],
48 | "quick_entry": 1,
49 | "sort_field": "modified",
50 | "sort_order": "DESC",
51 | "track_changes": 1
52 | }
--------------------------------------------------------------------------------
/education/education/doctype/quiz_result/quiz_result.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class QuizResult(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/quiz_result/test_quiz_result.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestQuizResult(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/room/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/room/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/room/room.js:
--------------------------------------------------------------------------------
1 | frappe.ui.form.on('Room', {})
2 |
--------------------------------------------------------------------------------
/education/education/doctype/room/room.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class Room(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/room/room_dashboard.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
2 | # License: GNU General Public License v3. See license.txt
3 |
4 | from frappe import _
5 |
6 |
7 | def get_data():
8 | return {
9 | "fieldname": "room",
10 | "transactions": [
11 | {"label": _("Course"), "items": ["Course Schedule"]},
12 | {"label": _("Assessment"), "items": ["Assessment Plan"]},
13 | ],
14 | }
15 |
--------------------------------------------------------------------------------
/education/education/doctype/room/test_records.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "room_name": "_Test Room",
4 | "room_number": "1001",
5 | "seating_capacity": 100
6 | },
7 | {
8 | "room_name": "_Test Room 1",
9 | "room_number": "1002",
10 | "seating_capacity": 100
11 | },
12 | {
13 | "room_name": "_Test Room 2",
14 | "room_number": "1003",
15 | "seating_capacity": 100
16 | }
17 | ]
--------------------------------------------------------------------------------
/education/education/doctype/room/test_room.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Room')
8 |
9 |
10 | class TestRoom(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/school_house/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/school_house/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/school_house/school_house.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('School House', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/school_house/school_house.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class SchoolHouse(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/school_house/test_school_house.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestSchoolHouse(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student/student.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Student', {
5 | refresh: function (frm) {
6 | frm.set_query('user', function (doc) {
7 | return {
8 | filters: {
9 | ignore_user_type: 1,
10 | },
11 | }
12 | })
13 |
14 | if (!frm.is_new()) {
15 | frm.add_custom_button(__('Accounting Ledger'), function () {
16 | frappe.set_route('query-report', 'General Ledger', {
17 | party_type: 'Customer',
18 | party: frm.doc.customer,
19 | })
20 | })
21 | }
22 |
23 | frappe.db
24 | .get_single_value('Education Settings', 'user_creation_skip')
25 | .then((r) => {
26 | if (cint(r) !== 1) {
27 | frm.set_df_property('student_email_id', 'reqd', 1)
28 | }
29 | })
30 | },
31 | })
32 |
33 | frappe.ui.form.on('Student Guardian', {
34 | guardians_add: function (frm) {
35 | frm.fields_dict['guardians'].grid.get_field('guardian').get_query =
36 | function (doc) {
37 | let guardian_list = []
38 | if (!doc.__islocal) guardian_list.push(doc.guardian)
39 | $.each(doc.guardians, function (idx, val) {
40 | if (val.guardian) guardian_list.push(val.guardian)
41 | })
42 | return { filters: [['Guardian', 'name', 'not in', guardian_list]] }
43 | }
44 | },
45 | })
46 |
--------------------------------------------------------------------------------
/education/education/doctype/student/student_dashboard.py:
--------------------------------------------------------------------------------
1 | from frappe import _
2 |
3 |
4 | def get_data():
5 | return {
6 | "heatmap": True,
7 | "heatmap_message": _("This is based on the attendance of this Student"),
8 | "fieldname": "student",
9 | "non_standard_fieldnames": {"Bank Account": "party"},
10 | "transactions": [
11 | {"label": _("Fee"), "items": ["Sales Invoice", "Bank Account"]},
12 | ],
13 | }
14 |
--------------------------------------------------------------------------------
/education/education/doctype/student/student_list.js:
--------------------------------------------------------------------------------
1 | frappe.listview_settings['Student'] = {
2 | add_fields: ['image'],
3 | }
4 |
--------------------------------------------------------------------------------
/education/education/doctype/student/test_student.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and Contributors
2 | # See license.txt
3 |
4 |
5 | import frappe
6 |
7 | from education.education.doctype.program.test_program import (
8 | make_program_and_linked_courses,
9 | )
10 |
11 | test_records = frappe.get_test_records("Student")
12 | from frappe.tests.utils import FrappeTestCase
13 | from education.education.test_utils import create_student
14 |
15 |
16 | class TestStudent(FrappeTestCase):
17 | def setUp(self):
18 | student = create_student()
19 |
20 | def test_create_student_user(self):
21 | self.assertTrue(bool(frappe.db.exists("User", "test@example.com")))
22 |
23 | def test_create_customer_against_student(self):
24 | student = frappe.get_doc("Student", {"student_email_id": "test@example.com"})
25 | self.assertTrue(bool(student.customer))
26 | self.assertEqual(student.customer_group, "Student")
27 |
28 | def tearDown(self):
29 | frappe.db.rollback()
30 |
--------------------------------------------------------------------------------
/education/education/doctype/student_admission/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_admission/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_admission/student_admission.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Student Admission', {
5 | program: function (frm) {
6 | if (frm.doc.academic_year && frm.doc.program) {
7 | frm.doc.route =
8 | frappe.model.scrub(frm.doc.program) +
9 | '-' +
10 | frappe.model.scrub(frm.doc.academic_year)
11 | frm.refresh_field('route')
12 | }
13 | },
14 |
15 | academic_year: function (frm) {
16 | frm.trigger('program')
17 | },
18 |
19 | admission_end_date: function (frm) {
20 | if (
21 | frm.doc.admission_end_date &&
22 | frm.doc.admission_end_date <= frm.doc.admission_start_date
23 | ) {
24 | frm.set_value('admission_end_date', '')
25 | frappe.throw(
26 | __('Admission End Date should be greater than Admission Start Date.')
27 | )
28 | }
29 | },
30 | })
31 |
--------------------------------------------------------------------------------
/education/education/doctype/student_admission/templates/student_admission_row.html:
--------------------------------------------------------------------------------
1 |
45 |
--------------------------------------------------------------------------------
/education/education/doctype/student_admission/test_student_admission.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Student Admission')
8 |
9 |
10 | class TestStudentAdmission(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/student_admission_program/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_admission_program/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_admission_program/student_admission_program.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentAdmissionProgram(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_applicant/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_applicant/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_applicant/student_applicant_list.js:
--------------------------------------------------------------------------------
1 | frappe.listview_settings['Student Applicant'] = {
2 | add_fields: ['application_status', 'paid'],
3 | has_indicator_for_draft: 1,
4 | get_indicator: function (doc) {
5 | if (doc.paid) {
6 | return [__('Paid'), 'green', 'paid,=,Yes']
7 | } else if (doc.application_status == 'Applied') {
8 | return [__('Applied'), 'orange', 'application_status,=,Applied']
9 | } else if (doc.application_status == 'Approved') {
10 | return [__('Approved'), 'green', 'application_status,=,Approved']
11 | } else if (doc.application_status == 'Rejected') {
12 | return [__('Rejected'), 'red', 'application_status,=,Rejected']
13 | } else if (doc.application_status == 'Admitted') {
14 | return [__('Admitted'), 'blue', 'application_status,=,Admitted']
15 | }
16 | },
17 | }
18 |
--------------------------------------------------------------------------------
/education/education/doctype/student_applicant/test_student_applicant.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Student Applicant')
8 |
9 |
10 | class TestStudentApplicant(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/student_attendance/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_attendance/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_attendance/student_attendance.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | cur_frm.add_fetch('course_schedule', 'schedule_date', 'date')
5 | cur_frm.add_fetch('course_schedule', 'student_group', 'student_group')
6 |
--------------------------------------------------------------------------------
/education/education/doctype/student_attendance/student_attendance_dashboard.py:
--------------------------------------------------------------------------------
1 | from frappe import _
2 |
3 |
4 | def get_data():
5 | return {
6 | "reports": [
7 | {
8 | "label": _("Reports"),
9 | "items": ["Student Monthly Attendance Sheet", "Student Batch-Wise Attendance"],
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/education/education/doctype/student_attendance/test_student_attendance.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Student Attendance')
8 |
9 |
10 | class TestStudentAttendance(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/student_attendance_tool/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_attendance_tool/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_attendance_tool/test_student_attendance_tool.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestStudentAttendanceTool(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_batch_name/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_batch_name/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_batch_name/student_batch_name.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Student Batch Name', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/student_batch_name/student_batch_name.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentBatchName(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_batch_name/test_records.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "batch_name": "_Batch 1"
4 | },
5 | {
6 | "batch_name": "_Batch 2"
7 | }
8 | ]
--------------------------------------------------------------------------------
/education/education/doctype/student_batch_name/test_student_batch_name.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Student Batch Name')
8 |
9 |
10 | class TestStudentBatchName(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/student_category/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_category/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_category/student_category.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Student Category', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/student_category/student_category.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions": [],
3 | "allow_rename": 1,
4 | "autoname": "field:category",
5 | "creation": "2016-09-05 06:28:33.679415",
6 | "doctype": "DocType",
7 | "editable_grid": 1,
8 | "engine": "InnoDB",
9 | "field_order": [
10 | "category"
11 | ],
12 | "fields": [
13 | {
14 | "fieldname": "category",
15 | "fieldtype": "Data",
16 | "in_list_view": 1,
17 | "label": "Category",
18 | "reqd": 1,
19 | "unique": 1
20 | }
21 | ],
22 | "links": [
23 | {
24 | "group": "Fee",
25 | "link_doctype": "Fee Structure",
26 | "link_fieldname": "student_category"
27 | },
28 | {
29 | "group": "Fee",
30 | "link_doctype": "Fee Schedule",
31 | "link_fieldname": "student_category"
32 | }
33 | ],
34 | "modified": "2024-01-23 14:53:20.521116",
35 | "modified_by": "Administrator",
36 | "module": "Education",
37 | "name": "Student Category",
38 | "naming_rule": "By fieldname",
39 | "owner": "Administrator",
40 | "permissions": [
41 | {
42 | "create": 1,
43 | "delete": 1,
44 | "email": 1,
45 | "export": 1,
46 | "print": 1,
47 | "read": 1,
48 | "report": 1,
49 | "role": "Academics User",
50 | "share": 1,
51 | "write": 1
52 | }
53 | ],
54 | "quick_entry": 1,
55 | "sort_field": "modified",
56 | "sort_order": "DESC",
57 | "states": []
58 | }
--------------------------------------------------------------------------------
/education/education/doctype/student_category/student_category.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentCategory(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_category/test_student_category.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Student Category')
8 |
9 |
10 | class TestStudentCategory(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/student_group/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_group/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_group/student_group_dashboard.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
2 | # License: GNU General Public License v3. See license.txt
3 |
4 | from frappe import _
5 |
6 |
7 | def get_data():
8 | return {
9 | "fieldname": "student_group",
10 | "transactions": [
11 | {"label": _("Assessment"), "items": ["Assessment Plan", "Assessment Result"]},
12 | {"label": _("Course"), "items": ["Course Schedule"]},
13 | ],
14 | }
15 |
--------------------------------------------------------------------------------
/education/education/doctype/student_group/test_student_group.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and Contributors
2 | # See license.txt
3 |
4 |
5 | import frappe
6 |
7 | import education.education
8 | from frappe.tests.utils import FrappeTestCase
9 | from education.education.test_utils import (
10 | create_academic_year,
11 | create_academic_term,
12 | create_program,
13 | create_student,
14 | create_program_enrollment,
15 | create_student_group,
16 | )
17 |
18 |
19 | class TestStudentGroup(FrappeTestCase):
20 | def setUp(self):
21 | create_academic_year()
22 | create_academic_term(
23 | term_name="Term 1", term_start_date="2023-04-01", term_end_date="2023-09-30"
24 | )
25 | create_program("Class 1")
26 | student = create_student()
27 | create_program_enrollment(student_name=student.name, submit=1)
28 | create_student_group()
29 |
30 | def tearDown(self):
31 | frappe.db.rollback()
32 |
33 | def test_student_roll_no(self):
34 | student_group = frappe.get_doc("Student Group", "Test Student Group")
35 | self.assertEqual(
36 | max([d.group_roll_number for d in student_group.students]),
37 | len(student_group.students),
38 | )
39 |
--------------------------------------------------------------------------------
/education/education/doctype/student_group_creation_tool/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_group_creation_tool/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_group_creation_tool/student_group_creation_tool.js:
--------------------------------------------------------------------------------
1 | frappe.ui.form.on('Student Group Creation Tool', 'refresh', function (frm) {
2 | frm.disable_save()
3 | frm.page.set_primary_action(__('Create Student Groups'), function () {
4 | frappe.call({
5 | method: 'create_student_groups',
6 | doc: frm.doc,
7 | })
8 | })
9 | frappe.realtime.on('student_group_creation_progress', function (data) {
10 | if (data.progress) {
11 | frappe.hide_msgprint(true)
12 | frappe.show_progress(
13 | __('Creating student groups'),
14 | data.progress[0],
15 | data.progress[1]
16 | )
17 | }
18 | })
19 | })
20 |
21 | frappe.ui.form.on('Student Group Creation Tool', 'get_courses', function (frm) {
22 | frm.set_value('courses', [])
23 | if (frm.doc.academic_year && frm.doc.program) {
24 | frappe.call({
25 | method: 'get_courses',
26 | doc: frm.doc,
27 | callback: function (r) {
28 | if (r.message) {
29 | frm.set_value('courses', r.message)
30 | }
31 | },
32 | })
33 | }
34 | })
35 |
36 | frappe.ui.form.on('Student Group Creation Tool', 'onload', function (frm) {
37 | cur_frm.set_query('academic_term', function () {
38 | return {
39 | filters: {
40 | academic_year: frm.doc.academic_year,
41 | },
42 | }
43 | })
44 | })
45 |
--------------------------------------------------------------------------------
/education/education/doctype/student_group_creation_tool/test_student_group_creation_tool.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestStudentGroupCreationTool(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_group_creation_tool_course/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_group_creation_tool_course/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_group_creation_tool_course/student_group_creation_tool_course.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentGroupCreationToolCourse(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_group_instructor/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_group_instructor/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_group_instructor/student_group_instructor.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentGroupInstructor(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_group_student/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_group_student/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_group_student/student_group_student.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions": [],
3 | "creation": "2015-09-11 15:14:58.501830",
4 | "doctype": "DocType",
5 | "editable_grid": 1,
6 | "engine": "InnoDB",
7 | "field_order": [
8 | "student",
9 | "student_name",
10 | "column_break_2",
11 | "group_roll_number",
12 | "active"
13 | ],
14 | "fields": [
15 | {
16 | "fieldname": "student",
17 | "fieldtype": "Link",
18 | "in_list_view": 1,
19 | "label": "Student",
20 | "options": "Student",
21 | "reqd": 1
22 | },
23 | {
24 | "fetch_from": "student.student_name",
25 | "fieldname": "student_name",
26 | "fieldtype": "Data",
27 | "in_list_view": 1,
28 | "label": "Student Name",
29 | "read_only": 1
30 | },
31 | {
32 | "fieldname": "column_break_2",
33 | "fieldtype": "Column Break"
34 | },
35 | {
36 | "fieldname": "group_roll_number",
37 | "fieldtype": "Int",
38 | "in_list_view": 1,
39 | "label": "Group Roll Number"
40 | },
41 | {
42 | "default": "1",
43 | "fieldname": "active",
44 | "fieldtype": "Check",
45 | "in_list_view": 1,
46 | "label": "Active"
47 | }
48 | ],
49 | "istable": 1,
50 | "links": [],
51 | "modified": "2023-02-07 16:22:46.912057",
52 | "modified_by": "Administrator",
53 | "module": "Education",
54 | "name": "Student Group Student",
55 | "owner": "Administrator",
56 | "permissions": [],
57 | "sort_field": "modified",
58 | "sort_order": "DESC",
59 | "states": []
60 | }
--------------------------------------------------------------------------------
/education/education/doctype/student_group_student/student_group_student.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentGroupStudent(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_guardian/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_guardian/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_guardian/student_guardian.json:
--------------------------------------------------------------------------------
1 | {
2 | "actions": [],
3 | "creation": "2016-09-01 14:28:39.174471",
4 | "doctype": "DocType",
5 | "editable_grid": 1,
6 | "engine": "InnoDB",
7 | "field_order": [
8 | "guardian",
9 | "guardian_name",
10 | "relation"
11 | ],
12 | "fields": [
13 | {
14 | "fieldname": "guardian",
15 | "fieldtype": "Link",
16 | "in_list_view": 1,
17 | "label": "Guardian",
18 | "options": "Guardian",
19 | "reqd": 1
20 | },
21 | {
22 | "fetch_from": "guardian.guardian_name",
23 | "fieldname": "guardian_name",
24 | "fieldtype": "Data",
25 | "in_global_search": 1,
26 | "in_list_view": 1,
27 | "label": "Guardian Name",
28 | "read_only": 1,
29 | "reqd": 1
30 | },
31 | {
32 | "fieldname": "relation",
33 | "fieldtype": "Select",
34 | "in_list_view": 1,
35 | "label": "Relation",
36 | "options": "\nMother\nFather\nOthers"
37 | }
38 | ],
39 | "istable": 1,
40 | "links": [],
41 | "modified": "2023-02-14 17:05:21.300964",
42 | "modified_by": "Administrator",
43 | "module": "Education",
44 | "name": "Student Guardian",
45 | "owner": "Administrator",
46 | "permissions": [],
47 | "quick_entry": 1,
48 | "sort_field": "modified",
49 | "sort_order": "DESC",
50 | "states": []
51 | }
--------------------------------------------------------------------------------
/education/education/doctype/student_guardian/student_guardian.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentGuardian(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_language/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_language/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_language/student_language.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Student Language', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/student_language/student_language.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentLanguage(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_language/test_student_language.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Student Language')
8 |
9 |
10 | class TestStudentLanguage(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/student_leave_application/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_leave_application/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_leave_application/student_leave_application.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Student Leave Application', {
5 | student: function (frm) {
6 | frappe.call({
7 | method:
8 | 'education.education.doctype.student_leave_application.student_leave_application.get_student_groups',
9 | args: {
10 | student: frm.doc.student,
11 | },
12 | callback: function (r) {
13 | if (r.message) {
14 | frm.set_query('student_group', () => {
15 | return {
16 | filters: {
17 | name: ['in', r.message],
18 | },
19 | }
20 | })
21 | frm.set_query('course_schedule', () => {
22 | return {
23 | filters: {
24 | student_group: ['in', r.message],
25 | },
26 | }
27 | })
28 | }
29 | },
30 | })
31 | },
32 | })
33 |
--------------------------------------------------------------------------------
/education/education/doctype/student_leave_application/student_leave_application_dashboard.py:
--------------------------------------------------------------------------------
1 | def get_data():
2 | return {
3 | "fieldname": "leave_application",
4 | "transactions": [{"items": ["Student Attendance"]}],
5 | }
6 |
--------------------------------------------------------------------------------
/education/education/doctype/student_log/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_log/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_log/student_log.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Student Log', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/student_log/student_log.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentLog(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_log/test_student_log.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 | # test_records = frappe.get_test_records('Student Log')
8 |
9 |
10 | class TestStudentLog(FrappeTestCase):
11 | pass
12 |
--------------------------------------------------------------------------------
/education/education/doctype/student_report_generation_tool/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_report_generation_tool/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_report_generation_tool/test_student_report_generation_tool.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestStudentReportGenerationTool(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_sibling/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_sibling/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_sibling/student_sibling.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentSibling(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/student_siblings/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/student_siblings/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/student_siblings/student_siblings.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class StudentSiblings(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/topic/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/topic/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/topic_content/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/doctype/topic_content/__init__.py
--------------------------------------------------------------------------------
/education/education/doctype/topic_content/test_topic_content.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
2 | # See license.txt
3 |
4 |
5 | from frappe.tests.utils import FrappeTestCase
6 |
7 |
8 | class TestTopicContent(FrappeTestCase):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/doctype/topic_content/topic_content.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.ui.form.on('Topic Content', {
5 | refresh: function (frm) {},
6 | })
7 |
--------------------------------------------------------------------------------
/education/education/doctype/topic_content/topic_content.json:
--------------------------------------------------------------------------------
1 | {
2 | "creation": "2018-12-12 11:42:57.987434",
3 | "doctype": "DocType",
4 | "editable_grid": 1,
5 | "engine": "InnoDB",
6 | "field_order": [
7 | "content_type",
8 | "column_break_2",
9 | "content"
10 | ],
11 | "fields": [
12 | {
13 | "fieldname": "content_type",
14 | "fieldtype": "Select",
15 | "in_list_view": 1,
16 | "label": "Content Type",
17 | "options": "\nArticle\nVideo\nQuiz",
18 | "reqd": 1
19 | },
20 | {
21 | "fieldname": "column_break_2",
22 | "fieldtype": "Column Break"
23 | },
24 | {
25 | "fieldname": "content",
26 | "fieldtype": "Dynamic Link",
27 | "in_list_view": 1,
28 | "label": "Content",
29 | "options": "content_type",
30 | "reqd": 1
31 | }
32 | ],
33 | "istable": 1,
34 | "modified": "2019-05-14 11:12:49.153771",
35 | "modified_by": "Administrator",
36 | "module": "Education",
37 | "name": "Topic Content",
38 | "owner": "Administrator",
39 | "permissions": [],
40 | "quick_entry": 1,
41 | "sort_field": "modified",
42 | "sort_order": "DESC",
43 | "track_changes": 1
44 | }
--------------------------------------------------------------------------------
/education/education/doctype/topic_content/topic_content.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
2 | # For license information, please see license.txt
3 |
4 |
5 | from frappe.model.document import Document
6 |
7 |
8 | class TopicContent(Document):
9 | pass
10 |
--------------------------------------------------------------------------------
/education/education/report/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/__init__.py
--------------------------------------------------------------------------------
/education/education/report/absent_student_report/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/absent_student_report/__init__.py
--------------------------------------------------------------------------------
/education/education/report/absent_student_report/absent_student_report.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2 | // License: GNU General Public License v3. See license.txt
3 |
4 | frappe.query_reports['Absent Student Report'] = {
5 | filters: [
6 | {
7 | fieldname: 'date',
8 | label: __('Date'),
9 | fieldtype: 'Date',
10 | default: frappe.datetime.get_today(),
11 | reqd: 1,
12 | },
13 | ],
14 | }
15 |
--------------------------------------------------------------------------------
/education/education/report/absent_student_report/absent_student_report.json:
--------------------------------------------------------------------------------
1 | {
2 | "add_total_row": 0,
3 | "creation": "2013-05-13 14:04:03",
4 | "disable_prepared_report": 0,
5 | "disabled": 0,
6 | "docstatus": 0,
7 | "doctype": "Report",
8 | "idx": 3,
9 | "is_standard": "Yes",
10 | "modified": "2020-06-24 17:16:40.251116",
11 | "modified_by": "Administrator",
12 | "module": "Education",
13 | "name": "Absent Student Report",
14 | "owner": "Administrator",
15 | "prepared_report": 0,
16 | "ref_doctype": "Student Attendance",
17 | "report_name": "Absent Student Report",
18 | "report_type": "Script Report",
19 | "roles": [
20 | {
21 | "role": "Academics User"
22 | }
23 | ]
24 | }
--------------------------------------------------------------------------------
/education/education/report/assessment_plan_status/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/assessment_plan_status/__init__.py
--------------------------------------------------------------------------------
/education/education/report/assessment_plan_status/assessment_plan_status.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 | /* eslint-disable */
4 |
5 | frappe.query_reports['Assessment Plan Status'] = {
6 | filters: [
7 | {
8 | fieldname: 'assessment_group',
9 | label: __('Assessment Group'),
10 | fieldtype: 'Link',
11 | options: 'Assessment Group',
12 | get_query: function () {
13 | return {
14 | filters: {
15 | is_group: 0,
16 | },
17 | }
18 | },
19 | },
20 | {
21 | fieldname: 'schedule_date',
22 | label: __('Scheduled Upto'),
23 | fieldtype: 'Date',
24 | options: '',
25 | },
26 | ],
27 | }
28 |
--------------------------------------------------------------------------------
/education/education/report/assessment_plan_status/assessment_plan_status.json:
--------------------------------------------------------------------------------
1 | {
2 | "add_total_row": 0,
3 | "creation": "2017-11-09 15:07:30.404428",
4 | "disable_prepared_report": 0,
5 | "disabled": 0,
6 | "docstatus": 0,
7 | "doctype": "Report",
8 | "idx": 0,
9 | "is_standard": "Yes",
10 | "modified": "2020-06-24 17:16:02.027410",
11 | "modified_by": "Administrator",
12 | "module": "Education",
13 | "name": "Assessment Plan Status",
14 | "owner": "Administrator",
15 | "prepared_report": 0,
16 | "ref_doctype": "Assessment Plan",
17 | "report_name": "Assessment Plan Status",
18 | "report_type": "Script Report",
19 | "roles": [
20 | {
21 | "role": "Academics User"
22 | }
23 | ]
24 | }
--------------------------------------------------------------------------------
/education/education/report/course_wise_assessment_report/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/course_wise_assessment_report/__init__.py
--------------------------------------------------------------------------------
/education/education/report/course_wise_assessment_report/course_wise_assessment_report.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.query_reports['Course wise Assessment Report'] = {
5 | filters: [
6 | {
7 | fieldname: 'academic_year',
8 | label: __('Academic Year'),
9 | fieldtype: 'Link',
10 | options: 'Academic Year',
11 | reqd: 1,
12 | },
13 | {
14 | fieldname: 'academic_term',
15 | label: __('Academic Term'),
16 | fieldtype: 'Link',
17 | options: 'Academic Term',
18 | },
19 | {
20 | fieldname: 'course',
21 | label: __('Course'),
22 | fieldtype: 'Link',
23 | options: 'Course',
24 | reqd: 1,
25 | },
26 | {
27 | fieldname: 'student_group',
28 | label: __('Student Group'),
29 | fieldtype: 'Link',
30 | options: 'Student Group',
31 | },
32 | {
33 | fieldname: 'assessment_group',
34 | label: __('Assessment Group'),
35 | fieldtype: 'Link',
36 | options: 'Assessment Group',
37 | reqd: 1,
38 | },
39 | ],
40 | }
41 |
--------------------------------------------------------------------------------
/education/education/report/course_wise_assessment_report/course_wise_assessment_report.json:
--------------------------------------------------------------------------------
1 | {
2 | "add_total_row": 0,
3 | "creation": "2017-05-05 14:46:13.776133",
4 | "disable_prepared_report": 0,
5 | "disabled": 0,
6 | "docstatus": 0,
7 | "doctype": "Report",
8 | "idx": 0,
9 | "is_standard": "Yes",
10 | "modified": "2020-06-24 17:15:15.477530",
11 | "modified_by": "Administrator",
12 | "module": "Education",
13 | "name": "Course wise Assessment Report",
14 | "owner": "Administrator",
15 | "prepared_report": 0,
16 | "query": "",
17 | "ref_doctype": "Assessment Result",
18 | "report_name": "Course Wise Assessment Report",
19 | "report_type": "Script Report",
20 | "roles": [
21 | {
22 | "role": "Instructor"
23 | },
24 | {
25 | "role": "Education Manager"
26 | }
27 | ]
28 | }
--------------------------------------------------------------------------------
/education/education/report/final_assessment_grades/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/final_assessment_grades/__init__.py
--------------------------------------------------------------------------------
/education/education/report/final_assessment_grades/final_assessment_grades.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 | /* eslint-disable */
4 |
5 | frappe.query_reports['Final Assessment Grades'] = {
6 | filters: [
7 | {
8 | fieldname: 'academic_year',
9 | label: __('Academic Year'),
10 | fieldtype: 'Link',
11 | options: 'Academic Year',
12 | reqd: 1,
13 | },
14 | {
15 | fieldname: 'student_group',
16 | label: __('Student Group'),
17 | fieldtype: 'Link',
18 | options: 'Student Group',
19 | reqd: 1,
20 | get_query: function () {
21 | return {
22 | filters: {
23 | group_based_on: 'Batch',
24 | academic_year:
25 | frappe.query_report.get_filter_value('academic_year'),
26 | },
27 | }
28 | },
29 | },
30 | {
31 | fieldname: 'assessment_group',
32 | label: __('Assessment Group'),
33 | fieldtype: 'Link',
34 | options: 'Assessment Group',
35 | reqd: 1,
36 | },
37 | ],
38 | }
39 |
--------------------------------------------------------------------------------
/education/education/report/final_assessment_grades/final_assessment_grades.json:
--------------------------------------------------------------------------------
1 | {
2 | "add_total_row": 0,
3 | "creation": "2018-01-22 17:04:43.412054",
4 | "disable_prepared_report": 0,
5 | "disabled": 0,
6 | "docstatus": 0,
7 | "doctype": "Report",
8 | "idx": 0,
9 | "is_standard": "Yes",
10 | "modified": "2020-06-24 17:13:35.373756",
11 | "modified_by": "Administrator",
12 | "module": "Education",
13 | "name": "Final Assessment Grades",
14 | "owner": "Administrator",
15 | "prepared_report": 0,
16 | "ref_doctype": "Assessment Result",
17 | "report_name": "Final Assessment Grades",
18 | "report_type": "Script Report",
19 | "roles": [
20 | {
21 | "role": "Instructor"
22 | },
23 | {
24 | "role": "Education Manager"
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/education/education/report/program_wise_fee_collection/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/program_wise_fee_collection/__init__.py
--------------------------------------------------------------------------------
/education/education/report/program_wise_fee_collection/program_wise_fee_collection.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 | /* eslint-disable */
4 |
5 | frappe.query_reports['Program wise Fee Collection'] = {
6 | filters: [
7 | {
8 | fieldname: 'from_date',
9 | label: __('From Date'),
10 | fieldtype: 'Date',
11 | default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
12 | reqd: 1,
13 | },
14 | {
15 | fieldname: 'to_date',
16 | label: __('To Date'),
17 | fieldtype: 'Date',
18 | default: frappe.datetime.get_today(),
19 | reqd: 1,
20 | },
21 | ],
22 | }
23 |
--------------------------------------------------------------------------------
/education/education/report/program_wise_fee_collection/program_wise_fee_collection.json:
--------------------------------------------------------------------------------
1 | {
2 | "add_total_row": 1,
3 | "creation": "2020-07-27 16:05:33.263539",
4 | "disable_prepared_report": 0,
5 | "disabled": 0,
6 | "docstatus": 0,
7 | "doctype": "Report",
8 | "idx": 0,
9 | "is_standard": "Yes",
10 | "json": "{}",
11 | "modified": "2020-08-05 14:14:12.410515",
12 | "modified_by": "Administrator",
13 | "module": "Education",
14 | "name": "Program wise Fee Collection",
15 | "owner": "Administrator",
16 | "prepared_report": 0,
17 | "query": "SELECT \n FeesCollected.program AS \"Program:Link/Program:200\",\n FeesCollected.paid_amount AS \"Fees Collected:Currency:150\",\n FeesCollected.outstanding_amount AS \"Outstanding Amount:Currency:150\",\n FeesCollected.grand_total \"Grand Total:Currency:150\"\nFROM (\n SELECT \n sum(grand_total) - sum(outstanding_amount) AS paid_amount, program,\n sum(outstanding_amount) AS outstanding_amount,\n sum(grand_total) AS grand_total\n FROM `tabFees`\n WHERE docstatus = 1\n GROUP BY program\n) AS FeesCollected\nORDER BY FeesCollected.paid_amount DESC",
18 | "ref_doctype": "Fees",
19 | "report_name": "Program wise Fee Collection",
20 | "report_type": "Script Report",
21 | "roles": [
22 | {
23 | "role": "Academics User"
24 | },
25 | {
26 | "role": "Accounts User"
27 | },
28 | {
29 | "role": "Accounts Manager"
30 | }
31 | ]
32 | }
--------------------------------------------------------------------------------
/education/education/report/student_and_guardian_contact_details/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/student_and_guardian_contact_details/__init__.py
--------------------------------------------------------------------------------
/education/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.query_reports['Student and Guardian Contact Details'] = {
5 | filters: [
6 | {
7 | fieldname: 'academic_year',
8 | label: __('Academic Year'),
9 | fieldtype: 'Link',
10 | options: 'Academic Year',
11 | reqd: 1,
12 | },
13 | {
14 | fieldname: 'program',
15 | label: __('Program'),
16 | fieldtype: 'Link',
17 | options: 'Program',
18 | reqd: 1,
19 | },
20 | {
21 | fieldname: 'student_batch_name',
22 | label: __('Batch Name'),
23 | fieldtype: 'Link',
24 | options: 'Student Batch Name',
25 | reqd: 1,
26 | },
27 | ],
28 | }
29 |
--------------------------------------------------------------------------------
/education/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.json:
--------------------------------------------------------------------------------
1 | {
2 | "add_total_row": 0,
3 | "creation": "2017-03-27 17:47:16.831433",
4 | "disable_prepared_report": 0,
5 | "disabled": 0,
6 | "docstatus": 0,
7 | "doctype": "Report",
8 | "idx": 0,
9 | "is_standard": "Yes",
10 | "modified": "2020-06-24 17:16:50.639488",
11 | "modified_by": "Administrator",
12 | "module": "Education",
13 | "name": "Student and Guardian Contact Details",
14 | "owner": "Administrator",
15 | "prepared_report": 0,
16 | "ref_doctype": "Program Enrollment",
17 | "report_name": "Student and Guardian Contact Details",
18 | "report_type": "Script Report",
19 | "roles": [
20 | {
21 | "role": "Instructor"
22 | },
23 | {
24 | "role": "Academics User"
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/education/education/report/student_batch_wise_attendance/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/student_batch_wise_attendance/__init__.py
--------------------------------------------------------------------------------
/education/education/report/student_batch_wise_attendance/student_batch_wise_attendance.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
2 | // For license information, please see license.txt
3 |
4 | frappe.query_reports['Student Batch-Wise Attendance'] = {
5 | filters: [
6 | {
7 | fieldname: 'date',
8 | label: __('Date'),
9 | fieldtype: 'Date',
10 | default: frappe.datetime.get_today(),
11 | reqd: 1,
12 | },
13 | ],
14 | }
15 |
--------------------------------------------------------------------------------
/education/education/report/student_batch_wise_attendance/student_batch_wise_attendance.json:
--------------------------------------------------------------------------------
1 | {
2 | "add_total_row": 0,
3 | "creation": "2016-11-28 22:07:03.859124",
4 | "disable_prepared_report": 0,
5 | "disabled": 0,
6 | "docstatus": 0,
7 | "doctype": "Report",
8 | "idx": 2,
9 | "is_standard": "Yes",
10 | "modified": "2020-06-24 17:16:59.823709",
11 | "modified_by": "Administrator",
12 | "module": "Education",
13 | "name": "Student Batch-Wise Attendance",
14 | "owner": "Administrator",
15 | "prepared_report": 0,
16 | "ref_doctype": "Student Attendance",
17 | "report_name": "Student Batch-Wise Attendance",
18 | "report_type": "Script Report",
19 | "roles": [
20 | {
21 | "role": "Academics User"
22 | }
23 | ]
24 | }
--------------------------------------------------------------------------------
/education/education/report/student_fee_collection/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/student_fee_collection/__init__.py
--------------------------------------------------------------------------------
/education/education/report/student_fee_collection/student_fee_collection.json:
--------------------------------------------------------------------------------
1 | {
2 | "add_total_row": 1,
3 | "columns": [],
4 | "creation": "2016-06-22 02:58:41.024538",
5 | "disabled": 0,
6 | "docstatus": 0,
7 | "doctype": "Report",
8 | "filters": [],
9 | "idx": 4,
10 | "is_standard": "Yes",
11 | "letterhead": null,
12 | "modified": "2024-05-27 10:14:40.352247",
13 | "modified_by": "Administrator",
14 | "module": "Education",
15 | "name": "Student Fee Collection",
16 | "owner": "Administrator",
17 | "prepared_report": 0,
18 | "query": "SELECT\n student as \"Student:Link/Student:200\",\n student.student_name as \"Student Name:Data:150\",\n sum(grand_total) - sum(outstanding_amount) as \"Paid Amount:Currency:150\",\n sum(outstanding_amount) as \"Outstanding Amount:Currency:150\",\n sum(grand_total) as \"Grand Total:Currency:150\"\nFROM\n `tabSales Invoice`\nJOIN\n `tabStudent` as student\nON\n student.name = `tabSales Invoice`.student\nWHERE\n `tabSales Invoice`.docstatus=1\nAND\n `tabSales Invoice`.student IS NOT NULL\nGROUP BY\n `tabSales Invoice`.student",
19 | "ref_doctype": "Fees",
20 | "report_name": "Student Fee Collection",
21 | "report_type": "Query Report",
22 | "roles": [
23 | {
24 | "role": "Academics User"
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/education/education/report/student_monthly_attendance_sheet/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/report/student_monthly_attendance_sheet/__init__.py
--------------------------------------------------------------------------------
/education/education/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.json:
--------------------------------------------------------------------------------
1 | {
2 | "add_total_row": 0,
3 | "creation": "2013-05-13 14:04:03",
4 | "disable_prepared_report": 0,
5 | "disabled": 0,
6 | "docstatus": 0,
7 | "doctype": "Report",
8 | "idx": 3,
9 | "is_standard": "Yes",
10 | "modified": "2020-06-24 17:16:13.307053",
11 | "modified_by": "Administrator",
12 | "module": "Education",
13 | "name": "Student Monthly Attendance Sheet",
14 | "owner": "Administrator",
15 | "prepared_report": 0,
16 | "ref_doctype": "Student Attendance",
17 | "report_name": "Student Monthly Attendance Sheet",
18 | "report_type": "Script Report",
19 | "roles": [
20 | {
21 | "role": "Academics User"
22 | }
23 | ]
24 | }
--------------------------------------------------------------------------------
/education/education/web_form/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/web_form/__init__.py
--------------------------------------------------------------------------------
/education/education/web_form/student_applicant/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/education/web_form/student_applicant/__init__.py
--------------------------------------------------------------------------------
/education/education/web_form/student_applicant/student_applicant.js:
--------------------------------------------------------------------------------
1 | frappe.ready(function () {
2 | // bind events here
3 | })
4 |
--------------------------------------------------------------------------------
/education/education/web_form/student_applicant/student_applicant.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def get_context(context):
5 | # do your magic here
6 | pass
7 |
--------------------------------------------------------------------------------
/education/modules.txt:
--------------------------------------------------------------------------------
1 | Education
--------------------------------------------------------------------------------
/education/patches.txt:
--------------------------------------------------------------------------------
1 | [pre_model_sync]
2 | education.patches.v14_0.create_student_party_type
3 |
4 | [post_model_sync]
5 | education.patches.v14_0.create_parent_assessment_group #01-01-2022
6 | education.patches.v14_0.lms_deprecation_message #22-12-2022
7 | education.patches.v14_0.student_name
8 | education.patches.v14_0.delete_lms_user_role
9 | education.patches.v15_0.fees_student_email
10 | education.patches.v15_0.student_role_desk_access
11 | education.patches.v15_0.sales_invoice_student_field
12 | education.patches.v15_0.create_parent_assessment_group
13 | education.patches.v15_0.student_role_permission_sales_invoice
14 | education.patches.v15_0.sales_order_student_field
15 | education.patches.v15_0.fee_schedule_status_update #28-03-2024
16 | education.patches.v15_0.create_fee_component_item_group
17 | education.patches.v15_0.create_student_customer_group
18 | education.patches.v15_0.create_custom_permissions
--------------------------------------------------------------------------------
/education/patches/v14_0/create_parent_assessment_group.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 | from education.install import create_parent_assessment_group
4 |
5 |
6 | def execute():
7 | create_parent_assessment_group()
8 |
9 | if frappe.db.exists("Assessment Group", "undefined"):
10 | frappe.delete_doc("Assessment Group", "undefined")
11 |
--------------------------------------------------------------------------------
/education/patches/v14_0/create_student_party_type.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def execute():
5 | if not frappe.db.exists("Party Type", "Student"):
6 | doc = frappe.get_doc(
7 | {"doctype": "Party Type", "party_type": "Student", "account_type": "Receivable"}
8 | )
9 | doc.insert()
10 |
--------------------------------------------------------------------------------
/education/patches/v14_0/delete_lms_user_role.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def execute():
5 | if frappe.db.exists("Role", "LMS User"):
6 | frappe.db.delete("Role", "LMS User")
7 |
--------------------------------------------------------------------------------
/education/patches/v14_0/lms_deprecation_message.py:
--------------------------------------------------------------------------------
1 | import click
2 | import frappe
3 |
4 |
5 | def execute():
6 |
7 | click.secho(
8 | "LMS Module has been removed from the Education App. "
9 | "There is a new app for it called the Frappe LMS App. "
10 | "You can install the app from GitHub or Frappe Cloud Marketplace.\n"
11 | "https://github.com/frappe/lms\n"
12 | "https://frappecloud.com/marketplace/apps/lms",
13 | fg="yellow",
14 | )
15 |
--------------------------------------------------------------------------------
/education/patches/v14_0/student_name.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def execute():
5 | students = frappe.get_all(
6 | "Student", fields=["name", "first_name", "middle_name", "last_name"]
7 | )
8 | for student in students:
9 | student_name = " ".join(
10 | filter(None, [student.first_name, student.middle_name, student.last_name])
11 | )
12 | frappe.db.set_value("Student", student.name, "student_name", student_name)
13 |
--------------------------------------------------------------------------------
/education/patches/v15_0/create_custom_permissions.py:
--------------------------------------------------------------------------------
1 | from education.install import create_permissions, get_permissions
2 |
3 |
4 | def execute():
5 | create_permissions(get_permissions())
6 |
--------------------------------------------------------------------------------
/education/patches/v15_0/create_fee_component_item_group.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def execute():
5 | if not frappe.db.exists("Item Group", "Fee Component"):
6 | frappe.get_doc(
7 | {
8 | "doctype": "Item Group",
9 | "item_group_name": "Fee Component",
10 | "parent_item_group": "All Item Groups",
11 | "is_group": 0,
12 | }
13 | ).insert()
14 |
--------------------------------------------------------------------------------
/education/patches/v15_0/create_parent_assessment_group.py:
--------------------------------------------------------------------------------
1 | import frappe
2 | from education.install import create_parent_assessment_group
3 |
4 |
5 | def execute():
6 | create_parent_assessment_group()
7 |
--------------------------------------------------------------------------------
/education/patches/v15_0/create_student_customer_group.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def execute():
5 | if not frappe.db.exists("Customer Group", "Student"):
6 | customer_group = frappe.get_doc(
7 | {
8 | "doctype": "Customer Group",
9 | "customer_group_name": "Student",
10 | "parent_customer_group": "All Customer Groups",
11 | }
12 | ).insert()
13 |
--------------------------------------------------------------------------------
/education/patches/v15_0/fee_schedule_status_update.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def execute():
5 | status_map = {
6 | "Successful": "Invoice Created",
7 | "In Process": "In Process",
8 | "Failed": "Fee Creation Failed",
9 | }
10 | fee_schedules = frappe.get_all(
11 | "Fee Schedule", filters={"docstatus": 1}, fields=["name", "fee_creation_status"]
12 | )
13 | for fee_schedule in fee_schedules:
14 | frappe.db.set_value(
15 | "Fee Schedule",
16 | fee_schedule.name,
17 | "status",
18 | status_map.get(fee_schedule.fee_creation_status, "Invoice Pending"),
19 | update_modified=False,
20 | )
21 |
--------------------------------------------------------------------------------
/education/patches/v15_0/fees_student_email.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def execute():
5 | student_emails = frappe.db.get_all("Fees", fields=["name", "student_email"])
6 | for email in student_emails:
7 | frappe.db.set_value("Fees", email.name, "contact_email", email.student_email)
8 |
--------------------------------------------------------------------------------
/education/patches/v15_0/sales_invoice_student_field.py:
--------------------------------------------------------------------------------
1 | import frappe
2 | from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
3 | from education.install import get_custom_fields
4 |
5 |
6 | def execute():
7 | create_custom_fields(get_custom_fields())
8 |
--------------------------------------------------------------------------------
/education/patches/v15_0/sales_order_student_field.py:
--------------------------------------------------------------------------------
1 | import frappe
2 | from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
3 | from education.install import get_custom_fields
4 |
5 |
6 | def execute():
7 | sales_order_fields = get_custom_fields()["Sales Order"]
8 | sales_order_custom_fields = {"Sales Order": sales_order_fields}
9 | create_custom_fields(sales_order_custom_fields)
10 |
--------------------------------------------------------------------------------
/education/patches/v15_0/student_role_desk_access.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def execute():
5 | if frappe.db.exists("Role", "Student"):
6 | frappe.db.set_value("Role", "Student", "desk_access", 0)
7 | frappe.db.commit()
8 |
--------------------------------------------------------------------------------
/education/patches/v15_0/student_role_permission_sales_invoice.py:
--------------------------------------------------------------------------------
1 | import frappe
2 | from frappe.permissions import add_permission, update_permission_property
3 |
4 |
5 | def execute():
6 |
7 | add_permission("Sales Invoice", "Student", 0)
8 |
9 | doctype = "Sales Invoice"
10 | role = "Student"
11 | permlevel = 0
12 | ptype = ["read", "write", "print"]
13 |
14 | for p in ptype:
15 | # update permissions
16 | update_permission_property(doctype, role, permlevel, p, 1)
17 |
18 | frappe.db.commit()
19 |
--------------------------------------------------------------------------------
/education/public/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/.gitkeep
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Black.05e55dd7.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Black.05e55dd7.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Black.9c79713b.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Black.9c79713b.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Black.bc2198e0.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Black.bc2198e0.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-BlackItalic.1cb529a7.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-BlackItalic.1cb529a7.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-BlackItalic.4ff7db4a.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-BlackItalic.4ff7db4a.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-BlackItalic.7ecbf9fa.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-BlackItalic.7ecbf9fa.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Bold.1dc41a58.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Bold.1dc41a58.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Bold.2b828bef.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Bold.2b828bef.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Bold.2efd8e3c.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Bold.2efd8e3c.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-BoldItalic.8bc8e0ff.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-BoldItalic.8bc8e0ff.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-BoldItalic.dc0d4194.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-BoldItalic.dc0d4194.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-BoldItalic.f528d863.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-BoldItalic.f528d863.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayBlack.b1d4e33d.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayBlack.b1d4e33d.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayBlackItalic.d561e8dd.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayBlackItalic.d561e8dd.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayBold.d9bf35ac.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayBold.d9bf35ac.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayBoldItalic.fef00c57.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayBoldItalic.fef00c57.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayExtraBold.b7cc680a.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayExtraBold.b7cc680a.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayExtraBoldItalic.e5a5984a.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayExtraBoldItalic.e5a5984a.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayExtraLight.32095132.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayExtraLight.32095132.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayExtraLightItalic.8eeb78f4.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayExtraLightItalic.8eeb78f4.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayItalic.938db435.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayItalic.938db435.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayLight.e40a858d.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayLight.e40a858d.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayLightItalic.151e9a11.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayLightItalic.151e9a11.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayMedium.12a4a358.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayMedium.12a4a358.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayMediumItalic.8968b5ab.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayMediumItalic.8968b5ab.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplaySemiBold.856fcb49.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplaySemiBold.856fcb49.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplaySemiBoldItalic.5e57e1d2.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplaySemiBoldItalic.5e57e1d2.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayThin.b64c173b.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayThin.b64c173b.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-DisplayThinItalic.b70f1c61.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-DisplayThinItalic.b70f1c61.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraBold.585b4ce1.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraBold.585b4ce1.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraBold.74e72c6b.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraBold.74e72c6b.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraBold.8a72efb6.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraBold.8a72efb6.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraBoldItalic.2abc7ab1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraBoldItalic.2abc7ab1.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraBoldItalic.38e71f7c.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraBoldItalic.38e71f7c.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraBoldItalic.b87f7d97.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraBoldItalic.b87f7d97.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraLight.1c06ef44.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraLight.1c06ef44.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraLight.25a4db7c.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraLight.25a4db7c.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraLight.4c337585.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraLight.4c337585.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraLightItalic.0e5667b1.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraLightItalic.0e5667b1.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraLightItalic.7b39e865.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraLightItalic.7b39e865.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ExtraLightItalic.f0df46d0.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ExtraLightItalic.f0df46d0.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Italic.950174d1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Italic.950174d1.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Italic.b0b21adf.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Italic.b0b21adf.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Italic.dd31ea31.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Italic.dd31ea31.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Italic.var.d9f448e3.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Italic.var.d9f448e3.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Light.211445a8.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Light.211445a8.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Light.319f53ba.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Light.319f53ba.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Light.87ed65f8.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Light.87ed65f8.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-LightItalic.289a60bc.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-LightItalic.289a60bc.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-LightItalic.5b94e337.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-LightItalic.5b94e337.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-LightItalic.9ea2db78.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-LightItalic.9ea2db78.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Medium.24fb6e39.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Medium.24fb6e39.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Medium.a4e1e7e6.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Medium.a4e1e7e6.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Medium.f500bbb9.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Medium.f500bbb9.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-MediumItalic.a2db9bea.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-MediumItalic.a2db9bea.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-MediumItalic.d06751dd.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-MediumItalic.d06751dd.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-MediumItalic.d4a7f5d9.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-MediumItalic.d4a7f5d9.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Regular.b825f1bc.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Regular.b825f1bc.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Regular.c342b1b7.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Regular.c342b1b7.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Regular.edd1deaf.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Regular.edd1deaf.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-SemiBold.3041a990.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-SemiBold.3041a990.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-SemiBold.51419407.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-SemiBold.51419407.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-SemiBold.af44b8a2.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-SemiBold.af44b8a2.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-SemiBoldItalic.5ce565c8.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-SemiBoldItalic.5ce565c8.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-SemiBoldItalic.a4f92da5.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-SemiBoldItalic.a4f92da5.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-SemiBoldItalic.daa7095c.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-SemiBoldItalic.daa7095c.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Thin.2198e9fb.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Thin.2198e9fb.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Thin.914c3fab.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Thin.914c3fab.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-Thin.918c5cbe.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-Thin.918c5cbe.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ThinItalic.382fab25.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ThinItalic.382fab25.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ThinItalic.a3279f0a.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ThinItalic.a3279f0a.woff2
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter-ThinItalic.f53f21de.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter-ThinItalic.f53f21de.woff
--------------------------------------------------------------------------------
/education/public/frontend/assets/Inter.var.d30c3bd0.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/assets/Inter.var.d30c3bd0.woff2
--------------------------------------------------------------------------------
/education/public/frontend/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/public/frontend/favicon.png
--------------------------------------------------------------------------------
/education/public/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Frappe Education
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/education/public/js/education.bundle.js:
--------------------------------------------------------------------------------
1 | import './assessment_result_tool.html'
2 |
--------------------------------------------------------------------------------
/education/public/node_modules:
--------------------------------------------------------------------------------
1 | /Users/ritviksardana/version-15/apps/education/node_modules
--------------------------------------------------------------------------------
/education/templates/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/templates/__init__.py
--------------------------------------------------------------------------------
/education/templates/generators/student_admission.html:
--------------------------------------------------------------------------------
1 |
2 | {% extends "templates/web.html" %}
3 |
4 | {% block breadcrumbs %}
5 | {% include "templates/includes/breadcrumbs.html" %}
6 | {% endblock %}
7 |
8 | {% block header %}
9 |
10 | {{ title }}
11 | {% endblock %}
12 |
13 | {% block page_content %}
14 |
15 | {%- if introduction -%}
16 | {{ introduction }}
17 | {% endif %}
18 |
19 | {%- if doc.enable_admission_application -%}
20 |
21 |
23 | {{ _("Apply Now") }}
24 |
25 | {% endif %}
26 |
27 | {% endblock %}
28 |
--------------------------------------------------------------------------------
/education/templates/includes/assessment/assessment_row.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ doc.course }}
5 |
6 |
7 | {{ doc.room }}
8 |
9 |
10 | {{doc.schedule_date }}
11 |
12 |
13 | {{ doc.from_time }}
14 |
15 |
16 | {{ doc.to_time }}
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/education/templates/includes/course/course_row.html:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/education/templates/includes/course/macros.html:
--------------------------------------------------------------------------------
1 | {% macro back_link(doc) %}&back-to=/courses?course={{ doc.name }}&back-to-title={{ doc.course_name }}{% endmacro %}
2 |
--------------------------------------------------------------------------------
/education/templates/pages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/templates/pages/__init__.py
--------------------------------------------------------------------------------
/education/www/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/www/__init__.py
--------------------------------------------------------------------------------
/education/www/__pycache__/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/education/www/__pycache__/__init__.py
--------------------------------------------------------------------------------
/education/www/student_portal.py:
--------------------------------------------------------------------------------
1 | import frappe
2 |
3 |
4 | def get_context(context):
5 | abbr = frappe.db.get_single_value(
6 | "Education Settings", "school_college_name_abbreviation"
7 | )
8 | logo = frappe.db.get_single_value("Education Settings", "school_college_logo")
9 | context.abbr = abbr or "Frappe Education"
10 | context.logo = logo or "/favicon.png"
11 |
--------------------------------------------------------------------------------
/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | dist
4 | dist-ssr
5 | *.local
6 | node_modules
--------------------------------------------------------------------------------
/frontend/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true
4 | }
5 |
--------------------------------------------------------------------------------
/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Frappe Education
8 |
9 |
10 |
11 |
12 |
13 |
14 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frappe-ui-frontend",
3 | "private": true,
4 | "version": "0.0.0",
5 | "scripts": {
6 | "dev": "vite",
7 | "build": "vite build --base=/assets/education/frontend/ && yarn copy-html-entry",
8 | "preview": "vite preview",
9 | "copy-html-entry": "cp ../education/public/frontend/index.html ../education/www/student-portal.html"
10 | },
11 | "dependencies": {
12 | "dayjs": "^1.11.10",
13 | "feather-icons": "^4.28.0",
14 | "frappe-ui": "^0.1.17",
15 | "lucide-vue-next": "^0.259.0",
16 | "pinia": "^2.1.7",
17 | "qalendar": "^3.6.1",
18 | "vue": "^3.2.25",
19 | "tailwindcss": "^3.3.3",
20 | "vue-router": "^4.0.12",
21 | "vite": "^2.7.2",
22 | "@vitejs/plugin-vue": "^2.0.0",
23 | "autoprefixer": "^10.4.2",
24 | "postcss": "^8.4.5"
25 | },
26 | "devDependencies": {
27 | "@vitejs/plugin-vue": "^2.0.0",
28 | "autoprefixer": "^10.4.2",
29 | "postcss": "^8.4.5",
30 | "vite": "^2.7.2"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/frontend/polyfills.js:
--------------------------------------------------------------------------------
1 | // polyfill of groupBy method
2 | if (!('groupBy' in Object)) {
3 | Object.prototype.groupBy = function (obj, fn) {
4 | if (typeof fn !== 'function') throw new Error(`${fn} should be a function`)
5 | Object.keys(obj).reduce((acc, key) => {
6 | const group = fn(obj[key])
7 | if (!acc[group]) {
8 | acc[group] = []
9 | }
10 | acc[group].push(obj[key])
11 | return acc
12 | }, {})
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/frontend/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/public/favicon.png
--------------------------------------------------------------------------------
/frontend/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
22 |
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Black.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Black.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Black.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Black.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-BlackItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-BlackItalic.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-BlackItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-BlackItalic.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Bold.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Bold.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-BoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-BoldItalic.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-BoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-BoldItalic.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ExtraBold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ExtraBold.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ExtraBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ExtraBold.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ExtraBoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ExtraBoldItalic.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ExtraBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ExtraBoldItalic.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ExtraLight.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ExtraLight.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ExtraLight.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ExtraLight.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ExtraLightItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ExtraLightItalic.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ExtraLightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ExtraLightItalic.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Italic.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Italic.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Light.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Light.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-LightItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-LightItalic.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-LightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-LightItalic.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Medium.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Medium.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-MediumItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-MediumItalic.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-MediumItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-MediumItalic.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Regular.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Regular.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-SemiBold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-SemiBold.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-SemiBold.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-SemiBoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-SemiBoldItalic.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-SemiBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-SemiBoldItalic.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Thin.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Thin.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-Thin.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ThinItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ThinItalic.woff
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-ThinItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-ThinItalic.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-italic.var.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-italic.var.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter-roman.var.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter-roman.var.woff2
--------------------------------------------------------------------------------
/frontend/src/assets/Inter/Inter.var.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/frappe/education/64f03fd8b3f659640db2ce1cf353bd6a66d1df2f/frontend/src/assets/Inter/Inter.var.woff2
--------------------------------------------------------------------------------
/frontend/src/components/CalendarView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
38 |
39 |
48 |
--------------------------------------------------------------------------------
/frontend/src/components/CollapseSidebar.vue:
--------------------------------------------------------------------------------
1 |
2 |
27 |
28 |
--------------------------------------------------------------------------------
/frontend/src/components/Home.vue:
--------------------------------------------------------------------------------
1 |
2 | Home
3 |
4 |
5 |
--------------------------------------------------------------------------------
/frontend/src/components/MissingData.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
14 |
--------------------------------------------------------------------------------
/frontend/src/components/Navbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
20 |
21 |
31 |
--------------------------------------------------------------------------------
/frontend/src/index.css:
--------------------------------------------------------------------------------
1 | @import './assets/Inter/inter.css';
2 | @import 'frappe-ui/src/style.css';
3 |
--------------------------------------------------------------------------------
/frontend/src/main.js:
--------------------------------------------------------------------------------
1 | import './index.css'
2 |
3 | import { createApp } from 'vue'
4 | import router from './router'
5 | import App from './App.vue'
6 | import { createPinia } from 'pinia'
7 | // import '../polyfills'
8 |
9 | import {
10 | Button,
11 | Card,
12 | Input,
13 | setConfig,
14 | frappeRequest,
15 | resourcesPlugin,
16 | } from 'frappe-ui'
17 |
18 | // create a pinia instance
19 | let pinia = createPinia()
20 |
21 | let app = createApp(App)
22 |
23 | setConfig('resourceFetcher', frappeRequest)
24 |
25 | app.use(pinia)
26 | app.use(router)
27 | app.use(resourcesPlugin)
28 |
29 | app.component('Button', Button)
30 | app.component('Card', Card)
31 | app.component('Input', Input)
32 |
33 | router.isReady().then(() => {
34 | app.mount('#app')
35 | })
36 |
--------------------------------------------------------------------------------
/frontend/src/pages/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/frontend/src/pages/Leaves.vue:
--------------------------------------------------------------------------------
1 |
2 | Leaves
3 |
4 |
5 |
8 |
--------------------------------------------------------------------------------
/frontend/src/pages/Login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 |
22 |
23 |
24 |
25 |
36 |
--------------------------------------------------------------------------------
/frontend/src/pages/Schedule.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/frontend/src/pages/SchoolDiary.vue:
--------------------------------------------------------------------------------
1 |
2 | Diary
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/frontend/src/router.js:
--------------------------------------------------------------------------------
1 | import { createRouter, createWebHistory } from 'vue-router'
2 | import { usersStore } from '@/stores/user'
3 | import { sessionStore } from '@/stores/session'
4 | import { studentStore } from '@/stores/student'
5 |
6 | const routes = [
7 | { path: '/', redirect: '/schedule' },
8 | {
9 | path: '/schedule',
10 | name: 'Schedule',
11 | component: () => import('@/pages/Schedule.vue'),
12 | },
13 | {
14 | path: '/grades',
15 | name: 'Grades',
16 | component: () => import('@/pages/Grades.vue'),
17 | },
18 | {
19 | path: '/fees',
20 | name: 'Fees',
21 | component: () => import('@/pages/Fees.vue'),
22 | },
23 | {
24 | path: '/attendance',
25 | name: 'Attendance',
26 | component: () => import('@/pages/Attendance.vue'),
27 | },
28 | {
29 | path: '/:catchAll(.*)',
30 | redirect: '/schedule',
31 | },
32 | ]
33 |
34 | let router = createRouter({
35 | history: createWebHistory('/student-portal'),
36 | routes,
37 | })
38 |
39 | router.beforeEach(async (to, from) => {
40 | const { isLoggedIn, user: sessionUser } = sessionStore()
41 | const { user } = usersStore()
42 | const { student } = studentStore()
43 |
44 | if (!isLoggedIn) {
45 | window.location.href = '/login'
46 | return await next(false)
47 | }
48 |
49 | if (user.data.length === 0) {
50 | await user.reload()
51 | }
52 | await student.reload()
53 | })
54 |
55 | export default router
56 |
--------------------------------------------------------------------------------
/frontend/src/stores/leave.js:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 | import { ref, computed } from 'vue'
3 |
4 | export const leaveStore = defineStore('education-leave', () => {
5 | const isAttendancePage = ref(false)
6 |
7 | const setIsAttendancePage = (value) => {
8 | isAttendancePage.value = value
9 | }
10 |
11 | return {
12 | isAttendancePage,
13 | setIsAttendancePage,
14 | }
15 | })
16 |
--------------------------------------------------------------------------------
/frontend/src/stores/session.js:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 | import { createResource } from 'frappe-ui'
3 | import { usersStore } from '@/stores/user'
4 | import router from '@/router'
5 | import { ref, computed } from 'vue'
6 | import { studentStore } from '@/stores/student'
7 |
8 | export const sessionStore = defineStore('education-session', () => {
9 | const { user: currentUser } = usersStore()
10 | const { student } = studentStore()
11 |
12 | function sessionUser() {
13 | let cookies = new URLSearchParams(document.cookie.split('; ').join('&'))
14 | let _sessionUser = cookies.get('user_id')
15 | if (_sessionUser === 'Guest') {
16 | _sessionUser = null
17 | }
18 | return _sessionUser
19 | }
20 |
21 | let user = ref(sessionUser())
22 | const isLoggedIn = computed(() => !!user.value)
23 | const login = createResource({
24 | url: 'login',
25 | onError() {
26 | throw new Error('Invalid email or password')
27 | },
28 | onSuccess() {
29 | currentUser.reload()
30 | sessionUser.reload()
31 | student.reload()
32 | user.value = sessionUser()
33 | login.reset()
34 | router.replace({ path: '/' })
35 | },
36 | })
37 |
38 | const logout = createResource({
39 | url: 'logout',
40 | onSuccess() {
41 | user.value = null
42 | window.location.href = '/login'
43 | },
44 | })
45 |
46 | return {
47 | user,
48 | isLoggedIn,
49 | login,
50 | logout,
51 | }
52 | })
53 |
--------------------------------------------------------------------------------
/frontend/src/stores/student.js:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 | import { ref } from 'vue'
3 | import { createResource } from 'frappe-ui'
4 |
5 | export const studentStore = defineStore('education-student', () => {
6 | const studentInfo = ref({})
7 | const currentProgram = ref({})
8 | const studentGroups = ref([])
9 |
10 | const student = createResource({
11 | url: 'education.education.api.get_student_info',
12 | onSuccess(info) {
13 | if (!info) {
14 | window.location.href = '/app'
15 | }
16 | currentProgram.value = info.current_program
17 | // remove current_program from info
18 | delete info.current_program
19 | studentGroups.value = info.student_groups
20 | delete info.student_groups
21 | studentInfo.value = info
22 | },
23 | onError(err) {
24 | console.error(err)
25 | },
26 | })
27 |
28 | // const s = createDocumentResource({
29 | // doctype:"Student",
30 | // whitelist: {
31 | // 'get_student_info': get_student_info
32 | // }
33 | // })
34 |
35 | function getStudentInfo() {
36 | return studentInfo
37 | }
38 | function getCurrentProgram() {
39 | return currentProgram
40 | }
41 |
42 | function getStudentGroups() {
43 | return studentGroups
44 | }
45 |
46 | return {
47 | student,
48 | studentInfo,
49 | currentProgram,
50 | studentGroups,
51 | getStudentInfo,
52 | getCurrentProgram,
53 | getStudentGroups,
54 | }
55 | })
56 |
--------------------------------------------------------------------------------
/frontend/src/stores/user.js:
--------------------------------------------------------------------------------
1 | import { defineStore } from 'pinia'
2 | import { createResource } from 'frappe-ui'
3 | import router from '@/router'
4 |
5 | export const usersStore = defineStore('education-users', () => {
6 | const user = createResource({
7 | url: 'education.education.api.get_user_info',
8 | cache: 'User',
9 | initialData: [],
10 | onError(error) {
11 | console.log(error)
12 | console.log(error.exc_type)
13 | if (error && error.exc_type === 'AuthenticationError') {
14 | router.push('/login')
15 | }
16 | },
17 | })
18 |
19 | return {
20 | user,
21 | }
22 | })
23 |
--------------------------------------------------------------------------------
/frontend/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [require('frappe-ui/src/utils/tailwind.config')],
3 | content: [
4 | './index.html',
5 | './src/**/*.{vue,js,ts,jsx,tsx}',
6 | './node_modules/frappe-ui/src/components/**/*.{vue,js,ts,jsx,tsx}',
7 | ],
8 | theme: {
9 | extend: {},
10 | },
11 | plugins: [],
12 | }
13 |
--------------------------------------------------------------------------------
/frontend/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import vue from '@vitejs/plugin-vue'
3 | import path from 'path'
4 | import frappeui from 'frappe-ui/vite'
5 |
6 | // https://vitejs.dev/config/
7 | export default defineConfig({
8 | plugins: [frappeui(), vue()],
9 | resolve: {
10 | alias: {
11 | '@': path.resolve(__dirname, 'src'),
12 | },
13 | },
14 | build: {
15 | outDir: `../${path.basename(path.resolve('..'))}/public/frontend`,
16 | emptyOutDir: true,
17 | target: 'es2015',
18 | rollupOptions: {
19 | output: {
20 | manualChunks: {
21 | 'frappe-ui': ['frappe-ui'],
22 | },
23 | },
24 | },
25 | },
26 | optimizeDeps: {
27 | include: ['feather-icons', 'showdown', 'engine.io-client'],
28 | },
29 | })
30 |
--------------------------------------------------------------------------------
/license.txt:
--------------------------------------------------------------------------------
1 | License: GNU GPL V3
--------------------------------------------------------------------------------
/node_modules/.yarn-integrity:
--------------------------------------------------------------------------------
1 | {
2 | "systemParams": "darwin-arm64-108",
3 | "modulesFolders": [
4 | "node_modules"
5 | ],
6 | "flags": [],
7 | "linkedModules": [],
8 | "topLevelPatterns": [],
9 | "lockfileEntries": {},
10 | "files": [],
11 | "artifacts": {}
12 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "postinstall": "cd frontend && yarn install --check-files",
5 | "dev": "cd frontend && yarn dev",
6 | "build": "cd frontend && yarn build"
7 | }
8 | }
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | # frappe -- https://github.com/frappe/frappe is installed via 'bench init'
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup, find_packages
2 |
3 | with open("requirements.txt") as f:
4 | install_requires = f.read().strip().split("\n")
5 |
6 | # get version from __version__ variable in education/__init__.py
7 | from education import __version__ as version
8 |
9 | setup(
10 | name="education",
11 | version=version,
12 | description="Education",
13 | author="Frappe Technologies Pvt. Ltd.",
14 | author_email="hello@frappe.io",
15 | packages=find_packages(),
16 | zip_safe=False,
17 | include_package_data=True,
18 | install_requires=install_requires,
19 | )
20 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 |
--------------------------------------------------------------------------------