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
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
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))
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')