예제 #1
0
	def test_loan_repayment_salary_slip(self):
		from erpnext.loan_management.doctype.loan.test_loan import create_loan_type, create_loan, make_loan_disbursement_entry, create_loan_accounts
		from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import process_loan_interest_accrual_for_term_loans

		applicant = make_employee("*****@*****.**", company="_Test Company")

		create_loan_accounts()

		create_loan_type("Car Loan", 500000, 8.4,
			is_term_loan=1,
			mode_of_payment='Cash',
			payment_account='Payment Account - _TC',
			loan_account='Loan Account - _TC',
			interest_income_account='Interest Income Account - _TC',
			penalty_income_account='Penalty Income Account - _TC')

		loan = create_loan(applicant, "Car Loan", 11000, "Repay Over Number of Periods", 20, posting_date=add_months(nowdate(), -1))
		loan.repay_from_salary = 1
		loan.submit()

		make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=add_months(nowdate(), -1))

		process_loan_interest_accrual_for_term_loans(posting_date=nowdate())

		ss = make_employee_salary_slip("*****@*****.**", "Monthly")
		ss.submit()

		self.assertEqual(ss.total_loan_repayment, 592)
		self.assertEqual(ss.net_pay, (flt(ss.gross_pay) - (flt(ss.total_deduction) + flt(ss.total_loan_repayment))))
	def setUp(self):
		create_loan_accounts()
		create_loan_type("Home Loan", 500000, 9.2, 0, 1, 0, 'Cash', 'Payment Account - _TC', 'Loan Account - _TC',
			'Interest Income Account - _TC', 'Penalty Income Account - _TC', 'Repay Over Number of Periods', 18)
		self.applicant = make_employee("*****@*****.**", "_Test Company")
		make_salary_structure("Test Salary Structure Loan", "Monthly", employee=self.applicant, currency='INR')
		self.create_loan_application()
예제 #3
0
    def setUp(self):
        create_loan_accounts()

        create_loan_type("Demand Loan", 2000000, 13.5, 25, 0, 5, 'Cash',
                         'Payment Account - _TC', 'Loan Account - _TC',
                         'Interest Income Account - _TC',
                         'Penalty Income Account - _TC')

        create_loan_security_type()
        create_loan_security()

        create_loan_security_price(
            "Test Security 1", 500, "Nos", get_datetime(),
            get_datetime(add_to_date(nowdate(), hours=24)))
        create_loan_security_price(
            "Test Security 2", 250, "Nos", get_datetime(),
            get_datetime(add_to_date(nowdate(), hours=24)))

        if not frappe.db.exists("Customer", "_Test Loan Customer"):
            frappe.get_doc(get_customer_dict('_Test Loan Customer')).insert(
                ignore_permissions=True)

        self.applicant = frappe.db.get_value("Customer",
                                             {'name': '_Test Loan Customer'},
                                             'name')
예제 #4
0
    def setUp(self):
        create_loan_accounts()

        create_loan_type(
            "Demand Loan",
            2000000,
            13.5,
            25,
            0,
            5,
            "Cash",
            "Disbursement Account - _TC",
            "Payment Account - _TC",
            "Loan Account - _TC",
            "Interest Income Account - _TC",
            "Penalty Income Account - _TC",
        )

        create_loan_security_type()
        create_loan_security()

        create_loan_security_price(
            "Test Security 1", 500, "Nos", get_datetime(),
            get_datetime(add_to_date(nowdate(), hours=24)))

        if not frappe.db.exists("Customer", "_Test Loan Customer"):
            frappe.get_doc(get_customer_dict("_Test Loan Customer")).insert(
                ignore_permissions=True)

        self.applicant = frappe.db.get_value("Customer",
                                             {"name": "_Test Loan Customer"},
                                             "name")
예제 #5
0
 def setUp(self):
     create_loan_accounts()
     create_loan_type("Home Loan", 500000, 9.2, 0, 1, 0, 'Cash',
                      'Payment Account - _TC', 'Loan Account - _TC',
                      'Interest Income Account - _TC',
                      'Penalty Income Account - _TC',
                      'Repay Over Number of Periods', 18)
     self.applicant = make_employee("*****@*****.**", "_Test Company")
     self.create_loan_application()
예제 #6
0
    def test_loan_repayment_salary_slip(self):
        from erpnext.loan_management.doctype.loan.test_loan import create_loan_type, create_loan, make_loan_disbursement_entry, create_loan_accounts
        from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import process_loan_interest_accrual_for_term_loans
        from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure

        applicant = make_employee("*****@*****.**",
                                  company="_Test Company")

        create_loan_accounts()

        create_loan_type(
            "Car Loan",
            500000,
            8.4,
            is_term_loan=1,
            mode_of_payment='Cash',
            payment_account='Payment Account - _TC',
            loan_account='Loan Account - _TC',
            interest_income_account='Interest Income Account - _TC',
            penalty_income_account='Penalty Income Account - _TC')

        payroll_period = create_payroll_period(name="_Test Payroll Period 1",
                                               company="_Test Company")

        make_salary_structure("Test Loan Repayment Salary Structure",
                              "Monthly",
                              employee=applicant,
                              currency='INR',
                              payroll_period=payroll_period)

        frappe.db.sql("""delete from `tabLoan""")
        loan = create_loan(applicant,
                           "Car Loan",
                           11000,
                           "Repay Over Number of Periods",
                           20,
                           posting_date=add_months(nowdate(), -1))
        loan.repay_from_salary = 1
        loan.submit()

        make_loan_disbursement_entry(loan.name,
                                     loan.loan_amount,
                                     disbursement_date=add_months(
                                         nowdate(), -1))

        process_loan_interest_accrual_for_term_loans(posting_date=nowdate())

        ss = make_employee_salary_slip(
            "*****@*****.**", "Monthly",
            "Test Loan Repayment Salary Structure")
        ss.submit()

        self.assertEqual(ss.total_loan_repayment, 592)
        self.assertEqual(
            ss.net_pay,
            (flt(ss.gross_pay) -
             (flt(ss.total_deduction) + flt(ss.total_loan_repayment))))
예제 #7
0
 def setUp(self):
     create_loan_accounts()
     create_loan_type(
         "Home Loan",
         500000,
         9.2,
         0,
         1,
         0,
         "Cash",
         "Disbursement Account - _TC",
         "Payment Account - _TC",
         "Loan Account - _TC",
         "Interest Income Account - _TC",
         "Penalty Income Account - _TC",
         "Repay Over Number of Periods",
         18,
     )
     self.applicant = make_employee("*****@*****.**", "_Test Company")
     make_salary_structure("Test Salary Structure Loan",
                           "Monthly",
                           employee=self.applicant,
                           currency="INR")
     self.create_loan_application()
예제 #8
0
    def test_loan(self):
        branch = "Test Employee Branch"
        applicant = make_employee("*****@*****.**",
                                  company="_Test Company")
        company = "_Test Company"
        holiday_list = make_holiday("test holiday for loan")

        company_doc = frappe.get_doc("Company", company)
        if not company_doc.default_payroll_payable_account:
            company_doc.default_payroll_payable_account = frappe.db.get_value(
                "Account", {
                    "company": company,
                    "root_type": "Liability",
                    "account_type": ""
                }, "name")
            company_doc.save()

        if not frappe.db.exists("Branch", branch):
            frappe.get_doc({"doctype": "Branch", "branch": branch}).insert()

        employee_doc = frappe.get_doc("Employee", applicant)
        employee_doc.branch = branch
        employee_doc.holiday_list = holiday_list
        employee_doc.save()

        salary_structure = "Test Salary Structure for Loan"
        make_salary_structure(
            salary_structure,
            "Monthly",
            employee=employee_doc.name,
            company="_Test Company",
            currency=company_doc.default_currency,
        )

        if not frappe.db.exists("Loan Type", "Car Loan"):
            create_loan_accounts()
            create_loan_type(
                "Car Loan",
                500000,
                8.4,
                is_term_loan=1,
                mode_of_payment="Cash",
                disbursement_account="Disbursement Account - _TC",
                payment_account="Payment Account - _TC",
                loan_account="Loan Account - _TC",
                interest_income_account="Interest Income Account - _TC",
                penalty_income_account="Penalty Income Account - _TC",
            )

        loan = create_loan(
            applicant,
            "Car Loan",
            280000,
            "Repay Over Number of Periods",
            20,
            posting_date=add_months(nowdate(), -1),
        )
        loan.repay_from_salary = 1
        loan.submit()

        make_loan_disbursement_entry(loan.name,
                                     loan.loan_amount,
                                     disbursement_date=add_months(
                                         nowdate(), -1))
        process_loan_interest_accrual_for_term_loans(posting_date=nowdate())

        dates = get_start_end_dates("Monthly", nowdate())
        make_payroll_entry(
            company="_Test Company",
            start_date=dates.start_date,
            payable_account=company_doc.default_payroll_payable_account,
            currency=company_doc.default_currency,
            end_date=dates.end_date,
            branch=branch,
            cost_center="Main - _TC",
            payment_account="Cash - _TC",
        )

        name = frappe.db.get_value("Salary Slip", {
            "posting_date": nowdate(),
            "employee": applicant
        }, "name")

        salary_slip = frappe.get_doc("Salary Slip", name)
        for row in salary_slip.loans:
            if row.loan == loan.name:
                interest_amount = (280000 * 8.4) / (12 * 100)
                principal_amount = loan.monthly_repayment_amount - interest_amount
                self.assertEqual(row.interest_amount, interest_amount)
                self.assertEqual(row.principal_amount, principal_amount)
                self.assertEqual(row.total_payment,
                                 interest_amount + principal_amount)

        if salary_slip.docstatus == 0:
            frappe.delete_doc("Salary Slip", name)