Example #1
0
    def set_missing_values(self):
        from fm.api import from_en_to_es

        if not self.customer_cedula:
            self.customer_cedula = frappe.db.get_value("Customer",
                                                       self.customer, "cedula")

        if not self.posting_date_str:
            # ok, let's validate if the posting date is a string
            if isinstance(self.posting_date, unicode):
                # it is a string, so let's convert to a datetime object
                self.posting_date = datetime.strptime(self.posting_date,
                                                      "%Y-%m-%d")

            frappe.errprint(type(self.posting_date))
            self.posting_date_str = '{0}, {4} ({1:%d}) del mes de {2} del año {3} ({1:%Y})'.format(
                from_en_to_es("{0:%A}".format(self.posting_date)),
                self.posting_date,
                from_en_to_es("{0:%B}".format(self.posting_date)),
                frappe.utils.num2words(self.posting_date.year,
                                       lang='es').upper(),
                frappe.utils.num2words(self.posting_date.day,
                                       lang='es').upper())

            # print "{}".format(self.posting_date_str)
            self.end_date = add_months(self.posting_date,
                                       self.repayment_periods)

            self.end_date_str = '{0}, {4} ({1:%d}) del mes de {2} del año {3} ({1:%Y})'.format(
                from_en_to_es("{0:%A}".format(self.end_date)), self.end_date,
                from_en_to_es("{0:%B}".format(self.end_date)),
                frappe.utils.num2words(self.end_date.year, lang='es').upper(),
                frappe.utils.num2words(self.end_date.day, lang='es').upper())

            self.posting_date = self.posting_date.strftime("%Y-%m-%d")
Example #2
0
File: loan.py Project: Lewinta/SWAT
    def set_missing_values(self):
        from fm.api import from_en_to_es

        if not self.customer_cedula:
            self.customer_cedula = frappe.db.get_value("Customer",
                                                       self.customer, "cedula")

        for row in self.repayment_schedule:
            if isinstance(row.fecha, basestring):
                row.fecha_day = row.fecha.split("-")[2]
                row.fecha_year = row.fecha.split("-")[0]
            else:
                row.fecha_day = row.fecha.day
                row.fecha_year = row.fecha.year

        if not self.posting_date_str:
            # ok, let's validate if the posting date is a string
            if isinstance(self.posting_date, basestring):
                # it is a string, so let's convert to a datetime object
                self.posting_date = datetime.strptime(self.posting_date,
                                                      "%Y-%m-%d")

            self.posting_date_str = '{0}, {4} ({1:%d}) del mes de {2} del año {3} ({1:%Y})'.format(
                from_en_to_es("{0:%A}".format(self.posting_date)),
                self.posting_date,
                from_en_to_es("{0:%B}".format(self.posting_date)),
                frappe.utils.num2words(self.posting_date.year,
                                       lang='es').upper(),
                frappe.utils.num2words(self.posting_date.day,
                                       lang='es').upper())

            self.end_date = add_months(self.posting_date,
                                       self.repayment_periods)

            self.end_date_str = '{0}, {4} ({1:%d}) del mes de {2} del año {3} ({1:%Y})'.format(
                from_en_to_es("{0:%A}".format(self.end_date)), self.end_date,
                from_en_to_es("{0:%B}".format(self.end_date)),
                frappe.utils.num2words(self.end_date.year, lang='es').upper(),
                frappe.utils.num2words(self.end_date.day, lang='es').upper())

            self.posting_date = self.posting_date.strftime("%Y-%m-%d")
Example #3
0
def make_simple_repayment_schedule(self):
	from fm.api import from_en_to_es
	
	# let's get the loan details
	get_repayment_details(self)
	
	# let's clear the table
	self.repayment_schedule = []

	# set defaults for this variables
	capital_balance = self.loan_amount
	interest_balance = self.total_payable_interest

	pagos_acumulados = interes_acumulado = 0.000
	capital_acumulado = 0.000

	
	payment_date = self.get("disbursement_date") or self.get("posting_date")

	# map the values from the old variables
	self.total_payment = self.total_payable_amount
	self.total_interest_payable = self.total_payable_interest

	# fetch from the db the maximun pending amount for a loan
	maximum_pending_amount = frappe.db.get_single_value("FM Configuration", "maximum_pending_amount")

	# ok, now let's add the records to the table
	while(capital_balance > flt(maximum_pending_amount)):

		monthly_repayment_amount = self.monthly_repayment_amount

		cuota =  round(self.monthly_capital + self.monthly_interest)
			
		capital_balance -= round(self.monthly_capital)
		interest_balance -= cuota - round(self.monthly_capital)
		pagos_acumulados += round(monthly_repayment_amount)
		interes_acumulado += cuota - round(self.monthly_capital)
		capital_acumulado += round(self.monthly_capital)

		# start running the dates
		payment_date = frappe.utils.add_months(payment_date, 1)
		payment_date_obj = payment_date

		if isinstance(payment_date, basestring):
			payment_date_obj = datetime.strptime(payment_date, frappe.utils.DATE_FORMAT)

		payment_date_str = payment_date_obj.strftime(frappe.utils.DATE_FORMAT)

		if capital_balance < 0.000 or interest_balance < 0.000:
		 	capital_balance = interest_balance = 0.000

		 	if len(self.repayment_schedule) >= int(self.repayment_periods):
		 		self.repayment_periods += 1
		
		self.append("repayment_schedule", {
			"fecha": payment_date_str,
			"cuota": cuota,
			"monto_pendiente": cuota,
			"show_capital": round(self.monthly_capital),
			"capital": round(self.monthly_capital),
			"interes": cuota - round(self.monthly_capital),
			"show_interes": cuota - round(self.monthly_capital),
			"balance_capital": round(capital_balance),
			"balance_interes": round(interest_balance),
			"capital_acumulado": round(capital_acumulado),
			"interes_acumulado": round(interes_acumulado),
			"pagos_acumulados": pagos_acumulados,
			"fecha_mes": from_en_to_es("{0:%B}".format(payment_date_obj)),
			"estado": PENDING
		})

	# round the amounts
	self.monthly_repayment_amount = round(self.monthly_repayment_amount)
	self.total_payment = round(self.total_payable_amount)
	self.total_payable_amount = round(self.total_payable_amount)
	self.total_interest_payable = round(self.total_payable_interest)
	self.total_payable_interest = round(self.total_payable_interest)
Example #4
0
def make_simple_repayment_schedule(loantype):
    from fm.api import from_en_to_es

    # let's get the loan details
    get_repayment_details(loantype)

    # let's clear the table
    loantype.repayment_schedule = []

    # set defaults for this variables
    capital_balance = loantype.loan_amount
    interest_balance = loantype.total_payable_interest
    ## loantype.repayment_periods = ceil(loantype.repayment_periods)
    pagos_acumulados = interes_acumulado = 0
    capital_acumulado = 0

    payment_date = loantype.get("disbursement_date") if loantype.get(
        "disbursement_date") else loantype.get("posting_date")

    # map the values from the old variables
    loantype.total_payment = loantype.total_payable_amount
    loantype.total_interest_payable = loantype.total_payable_interest

    # fetch from the db the maximun pending amount for a loan
    maximum_pending_amount = frappe.db.get_single_value(
        "FM Configuration", "maximum_pending_amount")

    # ok, now let's add the records to the table
    while (capital_balance > float(maximum_pending_amount)):

        monthly_repayment_amount = loantype.monthly_repayment_amount

        # if(capital_balance + interest_balance < monthly_repayment_amount ):
        cuota = loantype.monthly_capital + loantype.monthly_interest

        capital_balance -= loantype.monthly_capital
        interest_balance -= loantype.monthly_interest
        pagos_acumulados += monthly_repayment_amount
        interes_acumulado += loantype.monthly_interest
        capital_acumulado += loantype.monthly_capital

        # start running the dates
        payment_date = frappe.utils.add_months(payment_date, 1)
        payment_date_obj = payment_date

        if isinstance(payment_date, basestring):
            payment_date_obj = datetime.strptime(payment_date,
                                                 frappe.utils.DATE_FORMAT)

        payment_date_str = payment_date_obj.strftime(frappe.utils.DATE_FORMAT)

        if capital_balance < 0 or interest_balance < 0:
            capital_balance = interest_balance = 0

            if len(loantype.repayment_schedule) >= int(
                    loantype.repayment_periods):
                loantype.repayment_periods += 1

        loantype.append(
            "repayment_schedule", {
                "fecha": payment_date_str,
                "cuota": cuota,
                "capital": loantype.monthly_capital,
                "interes": loantype.monthly_interest,
                "balance_capital": capital_balance,
                "balance_interes": round(interest_balance),
                "capital_acumulado": round(capital_acumulado),
                "interes_acumulado": round(interes_acumulado),
                "pagos_acumulados": pagos_acumulados,
                "fecha_mes": from_en_to_es("{0:%B}".format(payment_date_obj)),
                "estado": PENDING
            })