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")
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)
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 })