def make_repayment_schedule(self): self.repayment_schedule = [] payment_date = self.disbursement_date balance_amount = self.loan_amount while (balance_amount > 0): interest_amount = balance_amount * float( self.rate_of_interest) / (12 * 100) principal_amount = self.monthly_repayment_amount - interest_amount balance_amount = balance_amount + interest_amount - self.monthly_repayment_amount if balance_amount < 0: principal_amount += balance_amount balance_amount = 0.0 total_payment = principal_amount + interest_amount self.append( "repayment_schedule", { "payment_date": payment_date, "principal_amount": principal_amount, "interest_amount": round(interest_amount), "total_payment": total_payment, "balance_loan_amount": round(balance_amount) }) next_payment_date = add_months(payment_date, 1) payment_date = next_payment_date
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")
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")