Example #1
0
    def validate_amounts(self):
        if not flt(self.total_amount):
            frappe.throw(__("Missing amount!"))

        if flt(self.paid_amount) > flt(self.total_amount):
            frappe.throw(
                __("Paid Amount cannot be greater than Total amount!"))
Example #2
0
	def validate_required_fields_for_repayment_amount(self):
		if not self.approved_net_amount:
			frappe.throw(__("Missing Approved Net Amount"))

		if not self.interest_rate:
			frappe.throw(__("Missing Interest Rate"))

		if not self.repayment_periods:
			frappe.throw(__("Missing Repayment Periods"))
Example #3
0
    def validate_amounts(self):
        if not flt(self.total_amount):
            frappe.throw(__("Missing amount!"))

        if flt(self.paid_amount, 2) > flt(self.total_amount, 2):
            frappe.throw(
                __("Paid Amount cannot be greater than Total amount!"))

        if flt(self.outstanding_amount) < 0.000:
            frappe.throw(__("Outstanding Amount cannot be less than zero!"))
Example #4
0
	def validate_approved_amounts(self):
		loan_type_field = self.meta.get_field("loan_type")

		maximum_loan_amount = frappe.get_value(loan_type_field.options, 
			self.loan_type, "maximum_loan_amount")

		if self.requested_net_amount > flt(maximum_loan_amount):
			frappe.throw(__("Requested Net Amount can not be greater than the Maximum Loan Amount in this Loan Type"))

		if self.approved_gross_amount > self.requested_gross_amount:
			frappe.throw(__("Approved Amount can not be greater than Requested Amount"))
Example #5
0
    def update_outstanding_amount(self):
        if not self.docstatus == 1.000:
            frappe.throw(
                __("Please submit this Loan Charge before updating the outstanding amount!"
                   ))

        outstanding_amount = flt(self.total_amount) - flt(self.paid_amount)

        if outstanding_amount < 0.000:
            frappe.throw(__("Outstanding amount cannot be negative!"))

        self.outstanding_amount = flt(outstanding_amount, 2)
Example #6
0
	def evaluate_loan_application(self, loan_appl):
		if loan_appl.docstatus == 0:
			frappe.throw(__("Submit this Loan Application first!"))

		elif loan_appl.docstatus == 2:
			frappe.throw(__("The selected Loan Application is already cancelled!"))

		if frappe.db.exists("Loan", { 
			"loan_application": loan_appl.name ,
			"docstatus": ["!=", "2"]
		}):
			frappe.throw(__("The selected Loan Application already has a Loan document attached to it!"))
Example #7
0
	def validate_party_account(self):
		if not self.party_account:
			frappe.throw(__("Party Account for Loan is mandatory!"))
			
		company, account_type, currency = frappe.get_value("Account",
			self.party_account, ["company", "account_type", "account_currency"])

		if not company == self.company:
			frappe.throw(__("Selected party account does not belong to Loan's Company!"))

		if not account_type == "Receivable":
			frappe.throw(__("Selected party account is not Receivable!"))

		if not currency == self.currency:
			frappe.throw(__("Customer's currency and Loan's currency must be the same, you may want to create a new customer with the desired currency if necessary!"))
Example #8
0
    def get_base_amount_for(self, fieldname):
        if not self.meta.get_field(fieldname).fieldtype in ('Currency',
                                                            'Float'):
            frappe.throw(
                __("Field Type for {fieldname} is not aplicable to be returned\
				as Base Amount".format(fieldname=fieldname)))

        return self.get(fieldname) * self.exchange_rate
Example #9
0
    def validate_reference_name(self):
        if not self.loan:
            frappe.throw(__("Missing Loan!"))

        if not self.reference_type:
            frappe.throw(__("Missing Repayment Type!"))

        if not self.reference_name:
            frappe.throw(__("Missing Repayment Name!"))

        docstatus = frappe.db.get_value(self.reference_type,
                                        self.reference_name, "docstatus")

        if DocStatus(docstatus) is not DocStatus.SUBMITTED:
            frappe.throw(
                __("Selected {0} is not submitted!".format(
                    self.reference_type)))
Example #10
0
	def create_event(self):
		event = frappe.new_doc("Event")
		event.subject = __("The insurance card {} is due on {}".format(self.name, formatdate(self.end_date)))
		event.starts_on = self.end_date
		event.ends_on = "{} 23:59:59".format(cstr(self.end_date)) 
		event.event_type = "Public"
		event.all_day = True
		event.insert(ignore_permissions=True)
Example #11
0
    def validate_customer_references(self):
        req_references = frappe.get_value("Custom Loan", self.loan_type,
                                          "customer_references")

        if self.party_type == "Customer" and \
         len(frappe.get_list("Customer Reference", {"parent": self.party})) < req_references:
            frappe.throw(
                __("This loan type requires at least %d customer references") %
                req_references)
Example #12
0
	def validate_and_delete_loan_charge(self, doc):
		import fimax.utils

		if not doc.status in ("Overdue", "Pending"):
			frappe.throw(__("Could not cancel Insurance because Loan Charge {}:{} is not Pending anymore!"
				.format(doc.name, doc.loan_charge_type)))

		fimax.utils.delete_doc(doc)

		frappe.db.commit()
Example #13
0
    def validate(self):
        loan_schedule_ids = [row.name.split()[0] for row in self.loan_schedule]

        if __("New") in loan_schedule_ids:
            self.set_missing_values()

        self.update_repayment_schedule_dates()
        self.validate_company()
        self.validate_currency()
        self.validate_party_account()
        self.validate_exchange_rate()
Example #14
0
    def validate_party_account(self):
        if not self.party_account:
            frappe.throw(__("Party Account for Loan is mandatory!"))

        company, account_type, currency = frappe.get_value(
            "Account", self.party_account,
            ["company", "account_type", "account_currency"])

        if not company == self.company:
            frappe.throw(
                __("Selected party account does not belong to Loan's Company!")
            )

        if not account_type == "Receivable":
            frappe.throw(__("Selected party account is not Receivable!"))

        if not currency == self.currency:
            frappe.throw(
                __("Selected party account currency does not match with the Loan's Currency!"
                   ))
Example #15
0
	def cancel_and_delete_loan_charge(self, child, loan_charges_type):
		
		loan_charge = child.get_loan_charge(loan_charges_type)

		if not loan_charge or not loan_charge.name: return
		
		doc = frappe.get_doc("Loan Charges", loan_charge.name)

		if not doc.is_elegible_for_deletion():
			frappe.throw(__("Could not cancel this Loan because the loan charge <i>{1}</i>:<b>{0}</b> is not pending anymore!"
				.format(doc.name, doc.loan_charges_type)))

		delete_doc(doc)

		frappe.db.commit()
Example #16
0
    def cancel_and_delete_loan_charge(self, child, loan_charge_type):
        import fimax.utils

        loan_charge = child.get_loan_charge(loan_charge_type)

        if not loan_charge: return

        if not loan_charge.status in ("Overdue", "Pending"):
            frappe.throw(
                __("Could not cancel Loan because Loan Charge {}:{} is not Pending anymore!"
                   .format(loan_charge.name, loan_charge.loan_charge_type)))

        fimax.utils.delete_doc(loan_charge)

        frappe.db.commit()
Example #17
0
	def set_approved_amounts(self):
		if frappe.session.user == self.owner:
			if self.docstatus == 1 and not self.approved_gross_amount == self.requested_gross_amount:
				frappe.msgprint(__("You won't be able to change the approved amount as you are the one requesting!"))

			self.approved_gross_amount = self.requested_gross_amount
Example #18
0
	def before_insert(self):
		if not self.loan_application:
			frappe.throw(__("Missing Loan Application!"))

		self.validate_loan_application()
Example #19
0
	def validate_exchange_rate(self):
		if not self.exchange_rate:
			frappe.throw(__("Unexpected exchange rate"))
Example #20
0
	def validate_currency(self):
		if not self.currency:
			frappe.throw(__("Currency for Loan is mandatory!"))
Example #21
0
 def validate_approved_amounts(self):
     if self.approved_gross_amount > self.requested_gross_amount:
         frappe.throw(
             __("Approved Amount can not be greater than Requested Amount"))
Example #22
0
	def validate_company(self):
		if not self.company:
			frappe.throw(__("Company for Loan is mandatory!"))