código para llenar pagarés

 

 from num2words import num2words

from datetime import datetime
import tkinter as tk
from tkinter import messagebox, scrolledtext

def numero_a_letras(num):
"""
Convierte un número a letras, incluyendo decimales.
"""
if isinstance(num, int) or num.is_integer():
return num2words(int(num), lang='es')

parte_entera = int(num)
parte_decimal = int(round(num % 1, 2) * 100)

# Si la parte decimal es 0, no incluirla
if parte_decimal == 0:
return num2words(parte_entera, lang='es')

letras_entero = num2words(parte_entera, lang='es')
# Eliminar ceros finales innecesarios en la parte decimal
letras_decimal = "punto " + " ".join(num2words(int(d), lang='es') for d in str(parte_decimal).rstrip('0'))

return f"{letras_entero} {letras_decimal}"

def formato_miles(valor):
"""
Formatea un número separándolo por miles con puntos y eliminando decimales innecesarios.
"""
return "{:,}".format(int(valor)).replace(",", ".")

def fecha_a_letras(fecha_str):
"""
Convierte una fecha en formato dd/mm/yy a letras.
"""
fecha = datetime.strptime(fecha_str, "%d/%m/%y")
dia = num2words(fecha.day, lang='es').replace('-', ' ')
meses = {
1: "enero", 2: "febrero", 3: "marzo",
4: "abril", 5: "mayo", 6: "junio",
7: "julio", 8: "agosto", 9: "septiembre",
10: "octubre", 11: "noviembre", 12: "diciembre"
}
mes = meses[fecha.month]
anio = num2words(fecha.year, lang='es').replace('-', ' ')
return f"{dia} de {mes} de {anio}"

def generar_pagare(fecha, valor, interes, nombre, cedula, fecha_pago, dia_interes, inicio_pago_interes):

"""
Genera el texto del pagaré con los valores proporcionados.
"""
valor_letras = numero_a_letras(valor)
interes_letras = numero_a_letras(interes)
fecha_letra = fecha_a_letras(fecha)
inicio_pago_interes_letra = fecha_a_letras(inicio_pago_interes)
fecha_pago_letra = fecha_a_letras(fecha_pago)
dia_interes_letra = num2words(int(dia_interes), lang='es').replace('-', ' ')


valor_formato = formato_miles(valor)

if valor_letras.endswith("millon") or valor_letras.endswith("millones"):
D = "de "
else:
D = ""

texto_pagare = f"""
PAGARÉ No. 01

Lugar y Fecha de Firma: Toro (Valle del Cauca), {fecha_letra} ({fecha})
Valor: {valor_formato} ({valor_letras} {D}pesos M/C)

Los Intereses Corriente durante el plazo serán del {interes_letras} por ciento ({interes}%) mensual. Los Intereses de Mora después de vencido el plazo serán equivalentes a una y media (1.5) veces el interés bancario corriente efectivo anual que fije periódicamente la Superintendencia Financiera de Colombia.

Persona a quien debe hacerse el pago (acreedor): CRISTIAN DANILO OSORIO SALAZAR, identificado con C.C. No. 1.115.420.538

Lugar donde se efectuará el pago: K 1 #7-09, Casa del acreedor, corregimiento de San Francisco, de Toro (valle del cauca).

Deudor: {nombre}, identificado con la C.C. No. {cedula}

Declaro:
PRIMERO. Que por virtud del presente título valor pagaré incondicionalmente a la orden de CRISTIAN DANILO OSORIO SALAZAR, identificado con C.C. No. 1.115.420.538 o a quien represente sus derechos, en la ciudad y dirección indicados, y en las fechas señaladas en la cláusula tercera de este pagaré, la suma de {valor_formato} ({valor_letras} {D}pesos M/C), más los intereses señalados en la cláusula segunda de este documento.

SEGUNDA. Que sobre la suma debida se reconocerán intereses corrientes a una tasa mensual del {interes_letras} por ciento ({interes}%) mensual. En caso de mora en el cumplimiento de las cuotas señaladas en la cláusula tercera de este pagaré, cancelaré intereses de mora de 1.5 veces el interés bancario corriente efectivo anual, sobre el saldo de capital que llegue a estar en mora.

TERCERA. Que pagaré el capital indicado en la cláusula primera de este pagaré mediante una cuota, por un monto de {valor_formato} ({valor_letras} {D}pesos M/C) el día {fecha_pago_letra} ({fecha_pago}). Los intereses se cancelarán los días {dia_interes_letra} ({dia_interes}) de cada mes, iniciando el {inicio_pago_interes_letra} ({inicio_pago_interes}).

CUARTA. El tenedor del presente pagaré podrá declarar vencidos la totalidad de los plazos de esta obligación o de las cuotas que constituyan el saldo de lo debido y exigir su pago inmediato ya sea judicial o extrajudicialmente, cuando el deudor entre en mora o incumpla cualquiera de las obligaciones derivadas del presente documento.

En Constancia de lo anterior, se suscribe este documento en la ciudad de Toro (Valle del cauca) el día {fecha_letra} ({fecha}).


____________________________
{nombre}
C.C. {cedula}
DEUDOR
"""

return texto_pagare

def mostrar_interfaz():
def generar_y_mostrar():
fecha = entry_fecha.get()
valor = float(entry_valor.get())
interes = float(entry_interes.get())
nombre = entry_nombre.get()
cedula = entry_cedula.get()
fecha_pago = entry_fecha_pago.get()
dia_interes = entry_dia_interes.get()
inicio_pago_interes = entry_inicio_pago_interes.get()

try:
pagaré = generar_pagare(fecha, valor, interes, nombre, cedula, fecha_pago, dia_interes, inicio_pago_interes)
resultado.delete(1.0, tk.END)
resultado.insert(tk.END, pagaré)
except Exception as e:
messagebox.showerror("Error", str(e))

def focus_next_widget(event):
event.widget.tk_focusNext().focus()
return "break"

ventana = tk.Tk()
ventana.title("Generador de Pagaré")

# Entradas
tk.Label(ventana, text="Fecha (dd/mm/yy):").grid(row=0, column=0)
entry_fecha = tk.Entry(ventana)
entry_fecha.grid(row=0, column=1)

tk.Label(ventana, text="Valor:").grid(row=1, column=0)
entry_valor = tk.Entry(ventana)
entry_valor.grid(row=1, column=1)

tk.Label(ventana, text="Interés (%):").grid(row=2, column=0)
entry_interes = tk.Entry(ventana)
entry_interes.grid(row=2, column=1)

tk.Label(ventana, text="Nombre del deudor:").grid(row=3, column=0)
entry_nombre = tk.Entry(ventana)
entry_nombre.grid(row=3, column=1)

tk.Label(ventana, text="Cédula del deudor:").grid(row=4, column=0)
entry_cedula = tk.Entry(ventana)
entry_cedula.grid(row=4, column=1)

tk.Label(ventana, text="Fecha de pago (dd/mm/yy):").grid(row=5, column=0)
entry_fecha_pago = tk.Entry(ventana)
entry_fecha_pago.grid(row=5, column=1)

tk.Label(ventana, text="Día de interés:").grid(row=6, column=0)
entry_dia_interes = tk.Entry(ventana)
entry_dia_interes.grid(row=6, column=1)

tk.Label(ventana, text="Inicio pago interés (dd/mm/yy):").grid(row=7, column=0)
entry_inicio_pago_interes = tk.Entry(ventana)
entry_inicio_pago_interes.grid(row=7, column=1)

# Vincular la tecla Enter a cada entrada
for widget in [entry_fecha, entry_valor, entry_interes, entry_nombre, entry_cedula, entry_fecha_pago, entry_dia_interes, entry_inicio_pago_interes]:
widget.bind("<Return>", focus_next_widget)

# Botón generar
tk.Button(ventana, text="Generar Pagaré", command=generar_y_mostrar).grid(row=8, column=0, columnspan=2)

# Resultado
resultado = scrolledtext.ScrolledText(ventana, width=80, height=20)
resultado.grid(row=9, column=0, columnspan=2)

ventana.mainloop()

# Ejecutar la interfaz gráfica
if __name__ == "__main__":
mostrar_interfaz()
Generador de Pagaré

Generador de Pagaré

Comentarios

Entradas populares de este blog

EXTRAER NOMBRES

15 RANCHERAS JORGE

Bálsamo