コード例 #1
0
def create_test_interest(**kwargs):
    args = frappe._dict(kwargs)
    if not args.skip_dependencies:
        create_test_loan(
            loan_no=args.loan or "_Test Loan 1",
            loan_principal=args.loan_principal or 100000.0,
            loan_plan=args.loan_plan or "_Test Loan Plan Eco",
        )
        create_test_disbursement(
            loan=args.loan or "_Test Loan 1",
            amount=args.loan_principal or 100000.0,
            skip_dependencies=True,
        )
    doc = frappe.new_doc("Microfinance Loan Interest")
    doc.update({
        "loan": args.loan or "_Test Loan 1",
        "posting_date": args.posting_date or "2017-09-17",
        "start_date": args.start_date or "2017-08-19",
        "end_date": args.start_date or "2017-08-31",
        "billed_amount": args.billed_amount,
    })
    if not args.do_not_insert:
        doc.insert(ignore_if_duplicate=True)
        if not args.do_not_submit:
            doc.submit()
    return doc
コード例 #2
0
def create_test_disbursement(**kwargs):
    args = frappe._dict(kwargs)
    if not args.skip_dependencies:
        create_test_loan(
            loan_no=args.loan or '_Test Loan 1',
            loan_principal=args.loan_principal or 100000.0,
        )
    doc = frappe.new_doc('Microfinance Disbursement')
    doc.update({
        'loan': args.loan or '_Test Loan 1',
        'posting_date': args.posting_date or '2017-08-20',
        'amount': args.amount or 100000.0,
        'mode_of_payment': args.mode_of_payment or 'Cash',
    })
    if args.is_opening:
        doc.update({
            'is_opening': 'Yes',
            'recovered_amount': args.recovered_amount or 20000.0,
        })
    if args.charges:
        for item in args.charges:
            doc.append('charges', item)
    if args.mode_of_payment == 'Cheque':
        doc.update({
            'cheque_no': args.cheque_no or 'ABCABC',
            'cheque_date': args.cheque_date or '2017-08-20',
        })
    if not args.do_not_insert:
        doc.insert(ignore_if_duplicate=True)
        if not args.do_not_submit:
            doc.submit()
    return doc
コード例 #3
0
def create_test_recovery(**kwargs):
    args = frappe._dict(kwargs)
    if not args.skip_dependencies:
        create_test_loan(
            loan_no=args.loan or '_Test Loan 1',
            loan_plan=args.loan_plan or '_Test Loan Plan Basic',
            loan_principal=args.loan_principal or 100000.0,
        )
        create_test_disbursement(
            loan=args.loan or '_Test Loan 1',
            amount=args.amount or args.loan_principal or 100000.0,
            skip_dependencies=True,
        )
    doc = frappe.new_doc('Microfinance Recovery')
    doc.update({
        'loan': args.loan or '_Test Loan 1',
        'posting_date': args.posting_date or '2017-09-17',
        'total_interests': args.total_interests or 0.0,
        'principal_amount': args.principal_amount or 0.0,
        'mode_of_payment': args.mode_of_payment or 'Cash',
    })
    if args.charges:
        for item in args.charges:
            doc.append('charges', item)
    if args.mode_of_payment == 'Cheque':
        doc.update({
            'cheque_no': args.cheque_no or 'ABCABC',
            'cheque_date': args.cheque_date or '2017-08-20',
        })
    if not args.do_not_insert:
        doc.insert(ignore_if_duplicate=True)
        if not args.do_not_submit:
            doc.submit()
    return doc
コード例 #4
0
def create_test_write_off(**kwargs):
    args = frappe._dict(kwargs)
    if not args.skip_dependencies:
        create_test_loan(
            loan_no=args.loan or "_Test Loan 1",
            loan_principal=args.loan_principal or 100000.0,
            loan_plan=args.loan_plan or "_Test Loan Plan Eco",
        )
        create_test_disbursement(
            loan=args.loan or "_Test Loan 1",
            amount=args.loan_principal or 100000.0,
            skip_dependencies=True,
        )
    doc = frappe.new_doc("Microfinance Write Off")
    doc.update({
        "loan": args.loan or "_Test Loan 1",
        "posting_date": args.posting_date or "2017-09-17",
        "amount": args.amount or 25000.0,
        "reason": args.reason or "_Test Write Off Reason",
    })
    if not args.do_not_insert:
        doc.insert(ignore_if_duplicate=True)
        if not args.do_not_submit:
            doc.submit()
    return doc
コード例 #5
0
def create_test_recovery(**kwargs):
    args = frappe._dict(kwargs)
    if not args.skip_dependencies:
        create_test_loan(
            loan_no=args.loan or "_Test Loan 1",
            loan_plan=args.loan_plan or "_Test Loan Plan Basic",
            loan_principal=args.loan_principal or 100000.0,
        )
        create_test_disbursement(
            loan=args.loan or "_Test Loan 1",
            amount=args.amount or args.loan_principal or 100000.0,
            skip_dependencies=True,
        )
    doc = frappe.new_doc("Microfinance Recovery")
    doc.update({
        "loan": args.loan or "_Test Loan 1",
        "posting_date": args.posting_date or "2017-09-17",
        "total_interests": args.total_interests or 0.0,
        "principal_amount": args.principal_amount or 0.0,
        "mode_of_payment": args.mode_of_payment or "Cash",
    })
    if args.charges:
        for item in args.charges:
            doc.append("charges", item)
    if args.mode_of_payment == "Cheque":
        doc.update({
            "cheque_no": args.cheque_no or "ABCABC",
            "cheque_date": args.cheque_date or "2017-08-20",
        })
    if not args.do_not_insert:
        doc.insert(ignore_if_duplicate=True)
        if not args.do_not_submit:
            doc.submit()
    return doc
コード例 #6
0
 def test_update_amounts_raises_when_less_than_disbursed(self):
     create_test_loan(loan_no="_Test Loan 1",
                      loan_principal=50000.0,
                      recovery_amount=5000.0)
     create_test_disbursement(skip_dependencies=True,
                              loan="_Test Loan 1",
                              amount=40000.0)
     with self.assertRaises(frappe.exceptions.ValidationError):
         update_amounts(name="_Test Loan 1", principal_amount=39000.0)
     remove_test_disbursement("_Test Loan 1", keep_dependencies=True)
コード例 #7
0
 def test_raises_when_posting_date_is_before_loan_posting_date(self):
     create_test_loan(
         loan_no='_Test Loan 1',
         posting_date='2017-12-12',
     )
     with self.assertRaises(frappe.exceptions.ValidationError):
         create_test_disbursement(
             skip_dependencies=True,
             posting_date='2017-11-11',
             do_not_submit=True,
         )
コード例 #8
0
 def test_raises_when_total_disbursed_exceeds_outstanding(self):
     create_test_loan(
         loan_no='_Test Loan 1',
         loan_principal=50000.0,
     )
     with self.assertRaises(frappe.exceptions.ValidationError):
         create_test_disbursement(
             skip_dependencies=True,
             amount=60000.0,
             do_not_submit=True,
         )
コード例 #9
0
 def test_update_amounts(self):
     create_test_loan(loan_no="_Test Loan 1",
                      loan_principal=50000.0,
                      recovery_amount=5000.0)
     update_amounts(name="_Test Loan 1",
                    principal_amount=60000.0,
                    recovery_amount=6000.0)
     principal, recovery = frappe.get_value(
         "Microfinance Loan", "_Test Loan 1",
         ["loan_principal", "recovery_amount"])
     self.assertEqual(principal, 60000)
     self.assertEqual(recovery, 6000)
コード例 #10
0
 def test_updates_loan_status_for_partial(self):
     create_test_loan(
         loan_no='_Test Loan 1',
         loan_principal=100000.0,
     )
     disbursement = create_test_disbursement(
         skip_dependencies=True,
         amount=50000.0,
     )
     disbursement_status = frappe.get_value(
         'Microfinance Loan', disbursement.loan, 'disbursement_status'
     )
     self.assertEqual(disbursement_status, 'Partially Disbursed')
コード例 #11
0
 def test_update_amounts(self):
     create_test_loan(
         loan_no='_Test Loan 1',
         loan_principal=50000.0,
         recovery_amount=5000.0,
     )
     update_amounts(name='_Test Loan 1',
                    principal_amount=60000.0,
                    recovery_amount=6000.0)
     principal, recovery = frappe.get_value(
         'Microfinance Loan',
         '_Test Loan 1',
         ['loan_principal', 'recovery_amount'],
     )
     self.assertEqual(principal, 60000)
     self.assertEqual(recovery, 6000)
コード例 #12
0
def create_test_write_off(**kwargs):
    args = frappe._dict(kwargs)
    if not args.skip_dependencies:
        create_test_loan(loan_no=args.loan or '_Test Loan 1',
                         loan_principal=args.loan_principal or 100000.0,
                         loan_plan=args.loan_plan or '_Test Loan Plan Eco')
        create_test_disbursement(
            loan=args.loan or '_Test Loan 1',
            amount=args.loan_principal or 100000.0,
            skip_dependencies=True,
        )
    doc = frappe.new_doc('Microfinance Write Off')
    doc.update({
        'loan': args.loan or '_Test Loan 1',
        'posting_date': args.posting_date or '2017-09-17',
        'amount': args.amount or 25000.0,
        'reason': args.reason or '_Test Write Off Reason',
    })
    if not args.do_not_insert:
        doc.insert(ignore_if_duplicate=True)
        if not args.do_not_submit:
            doc.submit()
    return doc
コード例 #13
0
def create_test_interest(**kwargs):
    args = frappe._dict(kwargs)
    if not args.skip_dependencies:
        create_test_loan(loan_no=args.loan or '_Test Loan 1',
                         loan_principal=args.loan_principal or 100000.0,
                         loan_plan=args.loan_plan or '_Test Loan Plan Eco')
        create_test_disbursement(
            loan=args.loan or '_Test Loan 1',
            amount=args.loan_principal or 100000.0,
            skip_dependencies=True,
        )
    doc = frappe.new_doc('Microfinance Loan Interest')
    doc.update({
        'loan': args.loan or '_Test Loan 1',
        'posting_date': args.posting_date or '2017-09-17',
        'start_date': args.start_date or '2017-08-19',
        'end_date': args.start_date or '2017-08-31',
        'billed_amount': args.billed_amount,
    })
    if not args.do_not_insert:
        doc.insert(ignore_if_duplicate=True)
        if not args.do_not_submit:
            doc.submit()
    return doc
コード例 #14
0
    def test_on_existing_interest(self):
        loan = create_test_loan(
            loan_no='_Test Loan 1', posting_date='2017-08-19'
        )
        create_test_disbursement(
            skip_dependencies=True,
            loan=loan.loan_no,
            amount=50000.0,
            posting_date='2017-08-20',
        )
        interests = [
            {
                'posting_date': '2017-09-01',
                'start_date': '2017-08-19',
                'end_date': '2017-08-31',
                'period': 'Aug 2017',
            },
            {
                'posting_date': '2017-10-01',
                'start_date': '2017-09-01',
                'end_date': '2017-09-30',
                'period': 'Sep 2017',
            }
        ]
        interest_docs = []
        for interest in interests:
            interest.update({
                'doctype': 'Microfinance Loan Interest',
                'loan': loan.loan_no,
            })
            doc = frappe.get_doc(interest)
            doc.save()
            doc.submit()
            interest_docs.append(doc.name)

        self.assertEqual(
            frappe.get_value(
                'Microfinance Loan Interest',
                '_Test Loan 1/2017-09',
                'billed_amount',
            ),
            6000,
        )
        create_test_disbursement(
            skip_dependencies=True,
            loan=loan.loan_no,
            amount=50000.0,
            posting_date='2017-09-20',
        )
        billed_amount = frappe.get_value(
            'Microfinance Loan Interest',
            '_Test Loan 1/2017-09',
            'billed_amount',
        )
        self.assertEqual(billed_amount, 11000)

        for docname in interest_docs:
            doc = frappe.get_doc('Microfinance Loan Interest', docname)
            doc.cancel()
            frappe.delete_doc(
                doctype='Microfinance Loan Interest', name=docname, force=True
            )