From 1299d56e855ecaf1ecbd2cb1340175935b875b84 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 23 Aug 2017 10:53:24 +0530 Subject: [PATCH] cleanup of the fee module --- .../doctype/payment_entry/payment_entry.py | 2 +- erpnext/schools/api.py | 5 - .../schools/doctype/fee_schedule/__init__.py | 0 .../doctype/fee_schedule/fee_schedule.js | 66 ++ .../doctype/fee_schedule/fee_schedule.json | 977 ++++++++++++++++++ .../doctype/fee_schedule/fee_schedule.py | 104 ++ .../doctype/fee_schedule/fee_schedule_list.js | 14 + .../doctype/fee_schedule/test_fee_schedule.js | 23 + .../doctype/fee_schedule/test_fee_schedule.py | 9 + .../doctype/fee_schedule_program/__init__.py | 0 .../fee_schedule_program.json | 133 +++ .../fee_schedule_program.py | 9 + .../fee_schedule_student_group/__init__.py | 0 .../fee_schedule_student_group.json | 102 ++ .../fee_schedule_student_group.py | 9 + erpnext/schools/doctype/fees/fees.js | 13 +- erpnext/schools/doctype/fees/fees.json | 35 +- erpnext/schools/doctype/fees/fees.py | 20 +- .../student_applicant/student_applicant.js | 9 +- 19 files changed, 1510 insertions(+), 20 deletions(-) create mode 100644 erpnext/schools/doctype/fee_schedule/__init__.py create mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule.js create mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule.json create mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule.py create mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule_list.js create mode 100644 erpnext/schools/doctype/fee_schedule/test_fee_schedule.js create mode 100644 erpnext/schools/doctype/fee_schedule/test_fee_schedule.py create mode 100644 erpnext/schools/doctype/fee_schedule_program/__init__.py create mode 100644 erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json create mode 100644 erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py create mode 100644 erpnext/schools/doctype/fee_schedule_student_group/__init__.py create mode 100644 erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json create mode 100644 erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 6eab2c49e59..d39fd208c7d 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -218,7 +218,7 @@ class PaymentEntry(AccountsController): ref_party_account = ref_doc.credit_to elif self.party_type=="Employee": ref_party_account = ref_doc.payable_account - + if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Fees"): ref_party_account = ref_doc.debit_to \ if self.party_type in ("Customer", "Student") else ref_doc.credit_to diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py index e387512c1e0..ea4da69504b 100644 --- a/erpnext/schools/api.py +++ b/erpnext/schools/api.py @@ -368,11 +368,6 @@ def get_current_enrollment(student, academic_year=None): student = %s and academic_year = %s order by creation''', (student, current_academic_year), as_dict=1) - ''' - program_enrollment_list = frappe.get_all("Program Enrollment", fields=["name", "student", "student_name", "student_category", - "program", "student_batch_name", "academic_year", "academic_term"], filters={"student":student, - "academic_year": current_academic_year}) - ''' if program_enrollment_list: return program_enrollment_list[0] else: diff --git a/erpnext/schools/doctype/fee_schedule/__init__.py b/erpnext/schools/doctype/fee_schedule/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.js b/erpnext/schools/doctype/fee_schedule/fee_schedule.js new file mode 100644 index 00000000000..9e5a156284a --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.js @@ -0,0 +1,66 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Fee Schedule', { + setup: function(frm) { + frm.add_fetch("company", "default_receivable_account", "debit_to"); + frm.add_fetch("company", "default_income_account", "against_income_account"); + frm.add_fetch("company", "cost_center", "cost_center"); + }, + + refresh: function(frm) { + if(!frm.doc.__islocal && frm.doc.__onload && frm.doc.__onload.dashboard_info && + frm.doc.fee_creation_status=="Successful") { + var info = frm.doc.__onload.dashboard_info; + frm.dashboard.add_indicator(__('Total Collected: {0}', [format_currency(info.total_paid, + info.currency)]), 'blue'); + frm.dashboard.add_indicator(__('Total Outstanding: {0}', [format_currency(info.total_unpaid, + info.currency)]), info.total_unpaid ? 'orange' : 'green'); + } + if (!frm.doc.fee_creation_status || frm.doc.fee_creation_status == "Failed") { + frm.add_custom_button(__('Create Fees'), function() { + frappe.call({ + method: "create_fees", + doc: frm.doc, + callback: function() { + frm.refresh(); + } + }); + }, "fa fa-play", "btn-success"); + } + }, + + fee_structure: function(frm) { + if (frm.doc.fee_structure) { + frappe.call({ + method: "erpnext.schools.doctype.fee_schedule.fee_schedule.get_fee_structure", + args: { + "target_doc": frm.doc.name, + "source_name": frm.doc.fee_structure + }, + callback: function(r) { + var doc = frappe.model.sync(r.message); + frappe.set_route("Form", doc[0].doctype, doc[0].name); + } + }); + } + } +}); + +frappe.ui.form.on("Fee Component", { + refresh: function(frm) { + frm.set_read_only(); + } +}); + +frappe.ui.form.on("Fee Schedule Student Group", { + onload: function(frm) { + frm.set_query("student_group",function(){ + return{ + "filters":{ + "group_based_on": "Batch" + } + }; + }); + } +}); diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json new file mode 100644 index 00000000000..c1fb2ec158f --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.json @@ -0,0 +1,977 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 1, + "creation": "2017-07-18 15:21:21.527136", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fee_structure", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Fee Structure", + "length": 0, + "no_copy": 0, + "options": "Fee Structure", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "due_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Due Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Naming Series", + "length": 0, + "no_copy": 1, + "options": "FRQ.", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fee_creation_status", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Fee Creation Status", + "length": 0, + "no_copy": 1, + "options": "\nIn Process\nFailed\nSuccessful", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_year", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Year", + "length": 0, + "no_copy": 0, + "options": "Academic Year", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_term", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Term", + "length": 0, + "no_copy": 0, + "options": "Academic Term", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_10", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "currency", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Currency", + "length": 0, + "no_copy": 0, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "student_groups", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "Fee Schedule Student Group", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_14", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Fee Breakup for each student", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "components", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "Fee Component", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_16", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_18", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "total_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Total Amount per Student", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "grand_total", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Grand Total", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "grand_total_in_words", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "In Words", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "edit_printing_settings", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Printing Settings", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "letter_head", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Letter Head", + "length": 0, + "no_copy": 0, + "options": "Letter Head", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_32", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "select_print_heading", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Print Heading", + "length": 0, + "no_copy": 1, + "options": "Print Heading", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "account", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Accounting", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "debit_to", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Receivable Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "against_income_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Income Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_39", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Institution", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Fee Schedule", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "collapsible_depends_on": "", + "columns": 0, + "depends_on": "error_log", + "fieldname": "section_break_31", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Error Log", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "error_log", + "fieldtype": "Read Only", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Error Log", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-23 15:58:34.051237", + "modified_by": "Administrator", + "module": "Schools", + "name": "Fee Schedule", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Academics User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.py b/erpnext/schools/doctype/fee_schedule/fee_schedule.py new file mode 100644 index 00000000000..80165f4d05c --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ +from frappe.model.document import Document +from frappe.model.mapper import get_mapped_doc +from frappe.utils import money_in_words +from frappe.utils import cint, flt, cstr +from frappe.utils.background_jobs import enqueue + + +class FeeSchedule(Document): + def onload(self): + info = self.get_dashboard_info() + self.set_onload('dashboard_info', info) + + def get_dashboard_info(self): + total_unpaid = frappe.db.sql("""select sum(outstanding_amount) from tabFees + where fee_schedule=%s""", (self.name)) + total_unpaid_amount = flt(total_unpaid[0][0]) if total_unpaid else 0 + info = {} + info["total_paid"] = self.grand_total - total_unpaid_amount + info["total_unpaid"] = total_unpaid_amount + info["currency"] = frappe.defaults.get_defaults().currency + return info + + def validate(self): + self.calculate_total() + + def calculate_total(self): + no_of_students = 0 + for d in self.student_groups: + # if not d.total_students: + d.total_students = get_total_students(d.student_group) + no_of_students += cint(d.total_students) + self.grand_total = no_of_students*self.total_amount + self.grand_total_in_words = money_in_words(self.grand_total) + + def create_fees(self): + if not self.fee_creation_status or self.fee_creation_status == "Failed": + self.fee_creation_status = "In Process" + enqueue(generate_fee, queue='default', timeout=6000, event='generate_fee', + fee_schedule=self.name) + frappe.msgprint(_("Fee generation started")) + + +def generate_fee(fee_schedule): + doc = frappe.get_doc("Fee Schedule", fee_schedule) + error = False + for d in doc.student_groups: + try: + students = frappe.db.sql(""" select sg.program, sg.batch, sgs.student, sgs.student_name + from `tabStudent Group` sg, `tabStudent Group Student` sgs + where sg.name=%s and sg.name=sgs.parent and sgs.active=1""", d.student_group, as_dict=1) + + # students = frappe.get_all("Student Group Student", fields=["student", "student_name"], + # filters={"parent": d.student_group, "parenttype": "Student Group", "active": 1}) + for student in students: + doc = get_mapped_doc("Fee Schedule", fee_schedule, { + "Fee Schedule": { + "doctype": "Fees", + "field_map": { + "name": "Fee Schedule" + } + } + }) + doc.student = student.student + doc.student_name = student.student_name + doc.program = student.program + doc.student_batch = student.batch + doc.send_payment_request = 1 + doc.save() + doc.submit() + except Exception as e: + error = True + err_msg = frappe.local.message_log and "\n\n".join(frappe.local.message_log) or cstr(e) + + if error: + frappe.db.rollback() + frappe.db.set_value("Fee Schedule", fee_schedule, "fee_creation_status", "Failed") + frappe.db.set_value("Fee Schedule", fee_schedule, "error_log", err_msg) + + else: + frappe.db.commit() + frappe.db.set_value("Fee Schedule", fee_schedule, "fee_creation_status", "Successful") + frappe.db.set_value("Fee Schedule", fee_schedule, "error_log", None) + + +@frappe.whitelist() +def get_fee_structure(source_name,target_doc=None): + fee_request = get_mapped_doc("Fee Structure", source_name, + {"Fee Structure": { + "doctype": "Fee Schedule" + }}, ignore_permissions=True) + return fee_request + +@frappe.whitelist() +def get_total_students(student_group): + students = frappe.get_all("Student Group Student", + filters={"parent": student_group, "parenttype": "Student Group", "active": 1}) or [] + return len(students) \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule_list.js b/erpnext/schools/doctype/fee_schedule/fee_schedule_list.js new file mode 100644 index 00000000000..3039c51d780 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule_list.js @@ -0,0 +1,14 @@ +frappe.listview_settings['Fee Schedule'] = { + add_fields: ["fee_creation_status", "due_date", "grand_total"], + get_indicator: function(doc) { + if (doc.fee_creation_status=="Successful") { + return [__("Fee Created"), "blue", "fee_creation_status,=,Successful"]; + } else if(doc.fee_creation_status == "In Process") { + return [__("Creating Fees"), "orange", "fee_creation_status,=,In Process"]; + } else if(doc.fee_creation_status == "Failed") { + return [__("Fee Creation Failed"), "red", "fee_creation_status,=,Failed"]; + } else { + return [__("Fee Creation Pending"), "green", "fee_creation_status,=,"]; + } + } +}; diff --git a/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js new file mode 100644 index 00000000000..d495b4ce7b1 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Fee Schedule", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially('Fee Schedule', [ + // insert a new Fee Schedule + () => frappe.tests.make([ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/schools/doctype/fee_schedule/test_fee_schedule.py b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.py new file mode 100644 index 00000000000..44e0756d64d --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +class TestFeeSchedule(unittest.TestCase): + pass diff --git a/erpnext/schools/doctype/fee_schedule_program/__init__.py b/erpnext/schools/doctype/fee_schedule_program/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json new file mode 100644 index 00000000000..42cc7bfcd89 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json @@ -0,0 +1,133 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-03-23 17:46:55.712169", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "program", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Program", + "length": 0, + "no_copy": 0, + "options": "Program", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_batch", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Student Batch", + "length": 0, + "no_copy": 0, + "options": "Student Batch Name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_students", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Total Students", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-22 16:24:40.547517", + "modified_by": "Administrator", + "module": "Schools", + "name": "Fee Schedule Program", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py new file mode 100644 index 00000000000..11d56973808 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class FeeScheduleProgram(Document): + pass diff --git a/erpnext/schools/doctype/fee_schedule_student_group/__init__.py b/erpnext/schools/doctype/fee_schedule_student_group/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json new file mode 100644 index 00000000000..c80e32087c9 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json @@ -0,0 +1,102 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-03-23 17:55:52.476822", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_group", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Student Group", + "length": 0, + "no_copy": 0, + "options": "Student Group", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_students", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Total Students", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-22 16:23:12.337294", + "modified_by": "Administrator", + "module": "Schools", + "name": "Fee Schedule Student Group", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py new file mode 100644 index 00000000000..776534d6faf --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class FeeScheduleStudentGroup(Document): + pass diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js index b254d720ffa..5bb130bf71a 100644 --- a/erpnext/schools/doctype/fees/fees.js +++ b/erpnext/schools/doctype/fees/fees.js @@ -6,10 +6,9 @@ frappe.ui.form.on("Fees", { setup: function(frm) { frm.add_fetch("student", "title", "student_name"); frm.add_fetch("student", "student_email_id", "student_email"); - frm.add_fetch("company", "default_receivable_account", "debit_to"); - frm.add_fetch("company", "default_income_account", "against_income_account"); - frm.add_fetch("company", "cost_center", "cost_center"); - + frm.add_fetch("fee_structure", "debit_to", "debit_to"); + frm.add_fetch("fee_structure", "against_income_account", "against_income_account"); + frm.add_fetch("fee_structure", "cost_center", "cost_center"); }, onload: function(frm){ @@ -90,7 +89,7 @@ frappe.ui.form.on("Fees", { callback: function(r) { if(r){ $.each(r.message, function(i, d) { - frm.set_value(i,d) + frm.set_value(i,d); }); } } @@ -100,8 +99,8 @@ frappe.ui.form.on("Fees", { make_payment_request: function(frm) { if (!frm.doc.contact_email) { - frappe.msgprint(__("Please set the Email ID for the Student to send the Payment Request")) - } else { + frappe.msgprint(__("Please set the Email ID for the Student to send the Payment Request")); + } else { frappe.call({ method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request", args: { diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index 435697a5b7b..b01b5d0637b 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -105,6 +105,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fee_schedule", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Fee Schedule", + "length": 0, + "no_copy": 0, + "options": "Fee Schedule", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -677,7 +708,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -1243,7 +1274,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-08-03 16:02:06.001422", + "modified": "2017-08-23 14:12:58.772381", "modified_by": "Administrator", "module": "Schools", "name": "Fees", diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index 78154e0da06..2e1a49bf611 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -6,10 +6,9 @@ from __future__ import unicode_literals from frappe.model.document import Document import frappe from frappe import _ -from frappe.utils import money_in_words, nowdate +from frappe.utils import money_in_words from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request from frappe.utils.csvutils import getlink -from erpnext.accounts.utils import get_account_currency from erpnext.controllers.accounts_controller import AccountsController from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account from erpnext.accounts.general_ledger import delete_gl_entries @@ -27,7 +26,22 @@ class Fees(AccountsController): def validate(self): self.calculate_total() - # set missing field here and validate the accounts + self.set_missing_accounts_and_fields() + + def set_missing_accounts_and_fields(self): + if not self.company: + self.company = frappe.defaults.get_defaults().company + if not self.currency: + self.currency = frappe.defaults.get_defaults().currency + if not (self.debit_to and self.against_income_account and self.cost_center): + accounts_details = frappe.get_all("Company", fields=["default_receivable_account", + "default_income_account", "cost_center"], filters={"name": self.company})[0] + if not self.debit_to: + self.debit_to = accounts_details.default_receivable_account + if not self.against_income_account: + self.against_income_account = accounts_details.default_income_account + if not self.cost_center: + self.cost_center = accounts_details.cost_center def calculate_total(self): """Calculates total amount.""" diff --git a/erpnext/schools/doctype/student_applicant/student_applicant.js b/erpnext/schools/doctype/student_applicant/student_applicant.js index 40a6ac3a3de..fdf16bae0ac 100644 --- a/erpnext/schools/doctype/student_applicant/student_applicant.js +++ b/erpnext/schools/doctype/student_applicant/student_applicant.js @@ -2,6 +2,10 @@ // For license information, please see license.txt frappe.ui.form.on("Student Applicant", { + setup: function(frm) { + frm.add_fetch("guardian", "guardian_name", "guardian_name"); + }, + refresh: function(frm) { if(frm.doc.application_status== "Applied" && frm.doc.docstatus== 1 ) { frm.add_custom_button(__("Approve"), function() { @@ -39,10 +43,11 @@ frappe.ui.form.on("Student Applicant", { method: "erpnext.schools.api.enroll_student", frm: frm }) - }, + } +}); +frappe.ui.form.on('Student Sibling', { setup: function(frm) { - frm.add_fetch("guardian", "guardian_name", "guardian_name"); frm.add_fetch("student", "title", "full_name"); frm.add_fetch("student", "gender", "gender"); frm.add_fetch("student", "date_of_birth", "date_of_birth");