Exemple #1
0
    def set_pledge_amount(self):
        total_security_value = 0
        maximum_loan_value = 0

        for pledge in self.securities:

            if not pledge.qty and not pledge.amount:
                frappe.throw(
                    _("Qty or Amount is mandatory for loan security!"))

            if not (self.loan_application and pledge.loan_security_price):
                pledge.loan_security_price = get_loan_security_price(
                    pledge.loan_security)

            if not pledge.qty:
                pledge.qty = cint(pledge.amount / pledge.loan_security_price)

            pledge.amount = pledge.qty * pledge.loan_security_price
            pledge.post_haircut_amount = cint(pledge.amount -
                                              (pledge.amount * pledge.haircut /
                                               100))

            total_security_value += pledge.amount
            maximum_loan_value += pledge.post_haircut_amount

        self.total_security_value = total_security_value
        self.maximum_loan_value = maximum_loan_value
Exemple #2
0
def get_proposed_pledge(securities):
	if isinstance(securities, string_types):
		securities = json.loads(securities)

	proposed_pledges = {
		'securities': []
	}
	maximum_loan_amount = 0

	for security in securities:
		security = frappe._dict(security)
		if not security.qty and not security.amount:
			frappe.throw(_("Qty or Amount is mandatroy for loan security"))

		security.loan_security_price = get_loan_security_price(security.loan_security)

		if not security.qty:
			security.qty = cint(security.amount/security.loan_security_price)

		security.amount = security.qty * security.loan_security_price
		security.post_haircut_amount = security.amount - (security.amount * security.haircut/100)

		maximum_loan_amount += security.post_haircut_amount

		proposed_pledges['securities'].append(security)

	proposed_pledges['maximum_loan_amount'] = maximum_loan_amount

	return proposed_pledges
Exemple #3
0
	def set_pledge_amount(self):
		for proposed_pledge in self.proposed_pledges:

			if not proposed_pledge.qty and not proposed_pledge.amount:
				frappe.throw(_("Qty or Amount is mandatroy for loan security"))

			proposed_pledge.loan_security_price = get_loan_security_price(proposed_pledge.loan_security)

			if not proposed_pledge.qty:
				proposed_pledge.qty = cint(proposed_pledge.amount/proposed_pledge.loan_security_price)

			proposed_pledge.amount = proposed_pledge.qty * proposed_pledge.loan_security_price
			proposed_pledge.post_haircut_amount = cint(proposed_pledge.amount - (proposed_pledge.amount * proposed_pledge.haircut/100))
Exemple #4
0
    def validate_pledges(self):
        pledge_details = self.get_pledge_details()

        loan = frappe.get_doc("Loan", self.loan)

        pledge_qty_map = {}
        remaining_qty = 0
        unpledge_value = 0

        for pledge in pledge_details:
            pledge_qty_map.setdefault((pledge.parent, pledge.loan_security),
                                      pledge.qty)

        for security in self.securities:
            pledged_qty = pledge_qty_map.get(
                (security.against_pledge, security.loan_security), 0)
            if not pledged_qty:
                frappe.throw(
                    _("Zero qty of {0} pledged against loan {0}").format(
                        frappe.bold(security.loan_security),
                        frappe.bold(self.loan)))

            unpledge_qty = pledged_qty - security.qty
            security_price = security.qty * get_loan_security_price(
                security.loan_security)

            if unpledge_qty < 0:
                frappe.throw(
                    _("Cannot unpledge more than {0} qty of {0}").format(
                        frappe.bold(pledged_qty),
                        frappe.bold(security.loan_security)))

            remaining_qty += unpledge_qty
            unpledge_value += security_price - flt(
                security_price * security.haircut / 100)

        if unpledge_value > loan.total_principal_paid:
            frappe.throw(
                _("Cannot Unpledge, loan security value is greater than the repaid amount"
                  ))

        if not remaining_qty:
            self.db_set('unpledge_type', 'Unpledged')
        else:
            self.db_set('unpledge_type', 'Partially Pledged')