class Asociado(object):
@staticmethod
def factory(nro_socio=None):
tabla = abrir_tabla(Config.config.get("db_paths", "asociados"))
if nro_socio is not None:
registros = tabla.query("select * where nro_socio == " + str(nro_socio))
else:
registros = tabla
total_registros = len(registros)
for registro in registros:
yield Asociado(nro_socio=registro.nro_socio, apeynom=registro.apeynom, cuil=registro.cuil), total_registros
"""Este modo fue anulado porque el campo fecha de algunos registros tenia un caracter extraño que hacia
crashear la libreria al acceder al mismo e intentar transformarlo a datetime"""
#yield Asociado(**dict(zip(tabla.field_names, registro))), total_registros
def __init__(self, nro_socio, apeynom, cuil, **kwargs):
self.nro_socio = nro_socio
self.apeynom = apeynom
self.cuil = cuil
self.total_amt = None
self.total_cac = None
self.total_cae = None
def __calcular_total_amt(self):
self.total_amt = 0.00
tabla = abrir_tabla(Config.config.get("db_paths", "amt"))
for registro in tabla.query("select * where nrotit1 == " + str(self.nro_socio)):
cotiz = registro.cotiz if registro.cotiz else 1
self.total_amt += round(registro.capital * cotiz, 2)
def __calcular_total_cac(self):
self.total_cac = 0.00
tabla = abrir_tabla(Config.config.get("db_paths", "cac"))
for registro in tabla.query("select * where nrocta == " + str(self.nro_socio)):
self.total_cac += registro.importe
def __calcular_total_cae(self):
self.total_cae = 0.00
tabla = abrir_tabla(Config.config.get("db_paths", "cae"))
for registro in tabla.query("select * where nrocta == " + str(self.nro_socio)):
self.total_cae += registro.importe
def calcular_totales(self):
self.__calcular_total_amt()
self.__calcular_total_cac()
self.__calcular_total_cae()
def obtener_tope_uif(self):
tabla = abrir_tabla(Config.config.get("db_paths", "uif_asociados"))
query = tabla.query("select * where nro_socio == " + str(self.nro_socio))
# obtengo el registro con fecha mas actual
registro_mas_actual = None
for registro in query:
if not registro_mas_actual:
registro_mas_actual = registro
continue
if registro.fecha >= registro_mas_actual.fecha:
registro_mas_actual = registro
return registro_mas_actual if registro_mas_actual else None # devuelvo valor de tope personal
def guardar_tope(self, valor, fecha, motivo):
fecha_dbfdate = dbf.Date(fecha.year,fecha.month,fecha.day)
tabla = abrir_tabla(Config.config.get("db_paths", "uif_asociados"))
tabla.append((self.nro_socio, fecha_dbfdate, obtener_nombre_operador(), motivo, valor))
def informar_exceso(self, fecha_periodo, exceso, valor_tope, tipo_tope, generar_documento=False):
hoy = datetime.datetime.today()
hoy_dbfdate = dbf.Date(hoy.year,hoy.month,hoy.day)
periodo = fecha_periodo.strftime("%m%Y")
if self.total_cae is None and self.total_cac is None and self.total_amt is None:
self.calcular_totales()
tabla = abrir_tabla(Config.config.get("db_paths", "uif_registro"))
tabla.append((self.nro_socio, self.apeynom, hoy_dbfdate, periodo, obtener_nombre_operador(), self.total_cae, self.total_cac, self.total_amt, exceso))
if generar_documento:
filename = "%s_%s" % (re.sub("[^A-Za-z0-9]", "_", self.apeynom.strip()), self.nro_socio)
base_dir_path = Config.config.get("documentos", "dir_path").strip("/")
periodo_dir_path = base_dir_path + "/" + fecha_periodo.strftime("%Y-%m")
doc_filename = periodo_dir_path + "/" + filename + ".txt"
create_folder(periodo_dir_path)
total = self.total_amt + self.total_cac + self.total_cae
"Patterns"
lalign = "{:<15}" # alinea a la izquierda
ralign = "{:>15}" # alinea a la derecha con 15 lugares
pcurrency = "${:,.2f}" # 2 decimales; la "," separa millares (3,000,000.00)
if self.cuil:
cuil_text = "%s-%s-%s" % (str(self.cuil)[:2], str(self.cuil)[2:-1], str(self.cuil)[-1:])
else:
cuil_text = "Falta"
with open(doc_filename, "w+") as f:
doc_content = (u"ASOCIACIÓN DE PROTECCIÓN RECIPROCA ENTRE PRODUCTORES AGROPECUARIOS\n"
u"MODULO DE CONTROL UIF {fecha}\n\n"
u"{asociado}\n"
u"{t_nro_socio}{nro_socio}\n"
u"{t_cuil}{cuil}\n"
u"{t_periodo}{periodo}\n\n"
u"{t_amt}{total_amt}\n"
u"{t_cac}{total_cac}\n"
u"{t_cae}{total_cae}\n"
u"{t_total}{total}\n\n"
u"{t_tope}{valor_tope}\n"
u"{t_exceso}{exceso}\n\n"
u"Notas:\n\n\n\n"
u"Firma ____________________________________"
.format(t_cuil=lalign.format(u"CUIL:"), t_nro_socio=lalign.format(u"Nro. Socio:"),
t_periodo=lalign.format(u"Período"), t_amt=lalign.format(u"Total AMT:"), t_cac=lalign.format(u"Total CAC:"),
t_cae=lalign.format(u"Total CAE:"), t_total=lalign.format(u"Total:"), t_exceso=lalign.format(u"Exceso:"),
t_tope=lalign.format(u"Tope %s:" % tipo_tope), cuil=ralign.format(cuil_text),
fecha=hoy.strftime("%d/%m/%Y"), asociado=self.apeynom,
nro_socio=ralign.format("%s/%s" % (str(self.nro_socio)[:-1], str(self.nro_socio)[-1:])),
periodo=ralign.format(fecha_periodo.strftime("%m/%Y")),
total_amt=ralign.format(pcurrency.format(self.total_amt)),
total_cac=ralign.format(pcurrency.format(self.total_cac)),
total_cae=ralign.format(pcurrency.format(self.total_cae)),
total=ralign.format(pcurrency.format(total)), exceso=ralign.format(pcurrency.format(exceso)),
valor_tope=ralign.format(pcurrency.format(valor_tope))))
f.write(doc_content.upper())