def EnviaCorreo(self, *args, **kwargs): self.ExportaExcel(mostrar=False) if not self.cArchivoGenerado: return email_contador = LeerIni('email_contador') text, ok = QInputDialog.getText( self.view, 'Sistema', 'Ingrese el mail destinatario:', text=email_contador if email_contador else '') if ok: GrabarIni(clave='email_contador', key='param', valor=str(text)) pyemail = PyEmail() remitente = '*****@*****.**' destinatario = str(text).strip() mensaje = "Enviado desde mi Software de Gestion desarrollado por http://www.servinlgsm.com.ar" archivo = self.cArchivoGenerado motivo = "Se envia informe de ventas de {}".format( LeerIni(clave='empresa', key='FACTURA')) servidor = ParamSist.ObtenerParametro("SERVER_SMTP") clave = ParamSist.ObtenerParametro("CLAVE_SMTP") usuario = ParamSist.ObtenerParametro("USUARIO_SMTP") puerto = ParamSist.ObtenerParametro("PUERTO_SMTP") or 587 pyemail.Conectar(servidor=servidor, usuario=usuario, clave=clave, puerto=puerto) ok = pyemail.Enviar(remitente, motivo, destinatario, mensaje, archivo) if not ok: Ventanas.showAlert("Sistema", pyemail.Excepcion)
def exec_(self): self.view.cboCategoriaMono.setText( ParamSist.ObtenerParametro("CATEGORIA_MONOTRIBUTO")) self.view.spnCantAdhOS.setText( ParamSist.ObtenerParametro("CANTIDAD_ADH_OS")) self.view.cboActividad.setIndex( ParamSist.ObtenerParametro("ACTIVIDAD_MONOTRIBUTO")) super().exec_()
def cargaParametros(self): self.servidor = ParamSist.ObtenerParametro( "SERVER_SMTP") #servidor email self.clave = ParamSist.ObtenerParametro("CLAVE_SMTP") #clave email self.usuario = ParamSist.ObtenerParametro( "USUARIO_SMTP") #usuario email self.puerto = ParamSist.ObtenerParametro("PUERTO_SMTP") or 587 #puerto self.responder = ParamSist.ObtenerParametro( "RESPONDER") #correo al cual responder
def __init__(self): super().__init__() self.__adjuntos = [] # lista con los archivos adjuntos a enviar self.view = EnvioEmailView() self.archivo_firma = ParamSist.ObtenerParametro("ARCHIVO_FIRMA_EMAIL") self.conectarWidgets() self.cargaParametros()
def CargaDatosCliente(self, *args, **kwargs): if not self.view.validaCliente.text(): return try: self.cliente = Cliente.select().where(Cliente.idcliente == self.view.validaCliente.text()).get() cliente = self.cliente self.view.lineEditDomicilio.setText(cliente.domicilio) if cliente.tiporesp.idtiporesp in [1, 2, 4]: #monotributo o resp inscripto self.view.lineEditDocumento.setText(cliente.cuit.replace('-','')) self.view.lineEditDocumento.setInputMask("99-99999999-9") if ParamSist.ObtenerParametro("EMITE_FCE") == "S": wsfecred = WsFECred() obligado, minimo = wsfecred.ConsultarMontoObligado(cliente.cuit.replace('-',''), LeerIni('cuit', key='WSFEv1')) if obligado and not self.informo: Ventanas.showAlert("Sistema", "Se debe emitir FCE al cliente desde un monto de {}".format(minimo)) self.informo = True else: self.view.lineEditDocumento.setText(str(cliente.dni)) self.view.lineEditDocumento.setInputMask("99999999") if int(LeerIni(clave='cat_iva', key='WSFEv1')) == 1: #si es Resp insc el contribuyente veo si teiene que emitira A o B if cliente.tiporesp.idtiporesp == 2: #resp inscripto self.view.cboComprobante.setText('Factura A') else: self.view.cboComprobante.setText('Factura B') else: self.view.cboComprobante.setText('Factura C') self.view.cboTipoIVA.setText(cliente.tiporesp.nombre) self.ObtieneNumeroFactura() except Cliente.DoesNotExist: Ventanas.showAlert("Sistema", "Cliente no encontrado en el sistema")
def EnviarPorCorreo(self, *args, **kwargs): if self.view.gridDatos.currentRow() != -1: factura = FacturaController() factura.ImprimeFactura(self.view.gridDatos.ObtenerItem( fila=self.view.gridDatos.currentRow(), col='idcabecera'), mostrar=False) emaicliente = EmailCliente.select().where( EmailCliente.idcliente == self.view.controles['cliente'].text()) items = [] for e in emaicliente: items.append(e.email) if items: text, ok = QInputDialog.getItem( self.view, 'Sistema', 'Ingrese el mail destinatario:', items) else: text, ok = QInputDialog.getText( self.view, 'Sistema', 'Ingrese el mail destinatario:') if ok: destinatario = str(text).strip() # destinatario = '*****@*****.**' mensaje = "Enviado desde mi Software de Gestion desarrollado por http://www.servinlgsm.com.ar \n" \ "No responder este email" archivo = factura.facturaGenerada motivo = "Se envia comprobante electronico de {}".format( LeerIni(clave='empresa', key='FACTURA')) servidor = ParamSist.ObtenerParametro("SERVER_SMTP") clave = ParamSist.ObtenerParametro("CLAVE_SMTP") usuario = ParamSist.ObtenerParametro("USUARIO_SMTP") puerto = ParamSist.ObtenerParametro("PUERTO_SMTP") or 587 responder = ParamSist.ObtenerParametro("RESPONDER") # envia_correo(from_address='', to_address='', message='', subject='', password_email='', to_cc='', # smtp='', smtp_port=587, files=''): ok = envia_correo(from_address=responder, to_address=destinatario, message=mensaje, subject=motivo, password_email=clave, smtp_port=puerto, smtp_server=servidor, files=archivo) if not ok: Ventanas.showAlert( "Sistema", "Ha ocurrido un error al enviar el correo")
def EstablecerTema(self): try: tema = ParamSist.ObtenerParametro("TEMA") if os.path.isfile(tema): style = open(tema) style = style.read() self.setStyleSheet(style) except: pass
def EnviaCorreo(self, *args, **kwargs): self.ExportaExcel(mostrar=False) if not self.cArchivoGenerado: return email_contador = LeerIni('email_contador') text, ok = QInputDialog.getText( self.view, 'Sistema', 'Ingrese el mail destinatario:', text=email_contador if email_contador else '') if ok: GrabarIni(clave='email_contador', key='param', valor=str(text)) destinatario = str(text).strip() archivo = self.cArchivoGenerado mensaje = "Enviado desde mi Software de Gestion desarrollado por http://www.servinlgsm.com.ar \n\n" \ "No responder este email" motivo = "Se envia informe de ventas de {}".format( LeerIni(clave='empresa', key='FACTURA')) servidor = ParamSist.ObtenerParametro("SERVER_SMTP") clave = ParamSist.ObtenerParametro("CLAVE_SMTP") usuario = ParamSist.ObtenerParametro("USUARIO_SMTP") puerto = ParamSist.ObtenerParametro("PUERTO_SMTP") or 587 responder = ParamSist.ObtenerParametro("RESPONDER") # envia_correo(from_address='', to_address='', message='', subject='', password_email='', to_cc='', # smtp='', smtp_port=587, files=''): ok = envia_correo(from_address=responder, to_address=destinatario, message=mensaje, subject=motivo, password_email=clave, smtp_port=puerto, smtp_server=servidor, files=archivo) if not ok: Ventanas.showAlert("Sistema", "Ha ocurrido un error al enviar el correo") else: Ventanas.showAlert("Sistema", "Archivo de ventas enviado correctamente")
def Migrar(self, *args, **kwargs): database = db self.migraciones = [] self.migrator = MySQLMigrator(database) if int(ParamSist.ObtenerParametro("VERSION_DB") or 0) < 1: self.MigrarVersion1() self.RealizaMigraciones() ParamSist.GuardarParametro("VERSION_DB", "1")
def Migrar(self, *args, **kwargs): database = db self.migraciones = [] self.migrator = MySQLMigrator(database) if int(ParamSist.ObtenerParametro("VERSION_DB") or 0) <= 0: self.MigrarVersion0() self.InsertaDatosBasicos() if int(ParamSist.ObtenerParametro("VERSION_DB") or 0) < 1: self.MigrarVersion1() if int(ParamSist.ObtenerParametro("VERSION_DB") or 0) < 2: self.MigrarVersion2() if int(ParamSist.ObtenerParametro("VERSION_DB") or 0) < 3: self.MigrarVersion3() if int(ParamSist.ObtenerParametro("VERSION_DB") or 0) < 4: self.MigrarVersion4() if int(ParamSist.ObtenerParametro("VERSION_DB") or 0) < 5: self.MigrarVersion5() self.RealizaMigraciones() ParamSist.GuardarParametro("VERSION_DB", "5")
def CargaDatos(self, *args, **kwargs): self.view.controles['empresa'].setText( LeerIni(clave='empresa', key='FACTURA')) self.view.controles['membrete1'].setText( LeerIni(clave='membrete1', key='FACTURA')) self.view.controles['membrete2'].setText( LeerIni(clave='membrete2', key='FACTURA')) self.view.controles['cuit'].setText( LeerIni(clave='cuit', key='FACTURA')) self.view.controles['iibb'].setText( LeerIni(clave='iibb', key='FACTURA')) self.view.controles['nombre_sistema'].setText( LeerIni(clave='nombre_sistema', key='param')) self.view.controles['BaseDatos'].setText( LeerIni(clave='basedatos', key='param')) self.view.controles['Usuario'].setText( LeerIni(clave='usuario', key='param')) self.view.controles['Host'].setText(LeerIni(clave='host', key='param')) self.view.controles['H**O'].setIndex(LeerIni(clave='h**o', key='param')) self.view.controles['Base'].setText(LeerIni(clave='base', key='param')) #unicamente levanto la contraseña cuando tiene algo if LeerIni(clave='password', key='param'): self.view.controles['password'].setText( desencriptar(LeerIni(clave='password', key='param'), LeerIni(clave='key', key='param'))) self.view.controles['num_copias'].setText( LeerIni(clave='num_copias', key='FACTURA')) self.view.controles['cat_iva'].setIndex( LeerIni(clave='cat_iva', key='WSFEv1')) self.view.controles['cbufce'].setText( LeerIni(clave='cbufce', key='FACTURA')) self.view.controles['aliasfce'].setText( LeerIni(clave='aliasfce', key='FACTURA')) if LeerIni('h**o') == 'N': self.view.controles['crt'].setText( LeerIni(clave='cert_prod', key='WSAA')) self.view.controles['key'].setText( LeerIni(clave='privatekey_prod', key='WSAA')) else: self.view.controles['crt'].setText( LeerIni(clave='cert_homo', key='WSAA')) self.view.controles['key'].setText( LeerIni(clave='privatekey_homo', key='WSAA')) self.view.controles['tema'].setIndex( ParamSist.ObtenerParametro("TEMA"))
def ImprimeFactura(self, idcabecera=None, mostrar=True, *args, **kwargs): if not idcabecera: return cabfact = Cabfact().get_by_id(idcabecera) print("imprimir factura {}".format(cabfact.numero)) pyfpdf = FEPDF() #cuit del emisor pyfpdf.CUIT = LeerIni(clave='cuit', key='WSFEv1') #establezco formatos (cantidad de decimales): pyfpdf.FmtCantidad = "0.4" pyfpdf.FmtPrecio = "0.2" #Datos del encabezado de la factura: tipo_cbte = cabfact.tipocomp.codigo punto_vta = cabfact.numero[:4] cbte_nro = cabfact.numero[-8:] fecha = FechaMysql(cabfact.fecha) concepto = cabfact.concepto #datos del cliente: tipo_doc = "80" if cabfact.cliente.tiporesp_id != 3 else "96" nro_doc = cabfact.cliente.cuit if cabfact.cliente.tiporesp_id != 3 else str( cabfact.cliente.dni) nombre_cliente = cabfact.nombre if cabfact.nombre != '' else cabfact.cliente.nombre domicilio_cliente = cabfact.domicilio #totales del comprobante: imp_total = cabfact.total imp_tot_conc = "0.00" imp_neto = cabfact.neto imp_iva = cabfact.iva imp_trib = cabfact.percepciondgr imp_op_ex = "0.00" imp_subtotal = cabfact.neto fecha_cbte = fecha fecha_venc_pago = fecha #Fechas del período del servicio facturado if int(cabfact.concepto) in [ FEv1().SERVICIOS, FEv1().PRODUCTOYSERVICIOS ]: fecha_serv_desde = FechaMysql(cabfact.desde) fecha_serv_hasta = FechaMysql(cabfact.hasta) else: fecha_serv_hasta = None fecha_serv_desde = None moneda_id = "PES" moneda_ctz = "1.000" obs_generales = "" obs_comerciales = "" moneda_id = "" moneda_ctz = 1 cae = cabfact.cae fecha_vto_cae = FechaMysql(cabfact.venccae) #Creo la factura(internamente en la interfaz) ok = pyfpdf.CrearFactura(concepto, tipo_doc, nro_doc, tipo_cbte, punto_vta, cbte_nro, imp_total, imp_tot_conc, imp_neto, imp_iva, imp_trib, imp_op_ex, fecha_cbte, fecha_venc_pago, fecha_serv_desde, fecha_serv_hasta, moneda_id, moneda_ctz, cae, fecha_vto_cae, "", nombre_cliente, domicilio_cliente, 0) pyfpdf.EstablecerParametro("forma_pago", cabfact.formapago.detalle) pyfpdf.EstablecerParametro( "custom-nro-cli", "[{}]".format(str(cabfact.cliente.idcliente).zfill(5))) pyfpdf.EstablecerParametro("localidad_cli", cabfact.cliente.localidad.nombre) pyfpdf.EstablecerParametro("provincia_cli", cabfact.cliente.localidad.provincia) pyfpdf.EstablecerParametro("iva_cli", cabfact.cliente.tiporesp.nombre) #Agregar comprobantes asociados(si es una NC / ND): if cabfact.tipocomp.codigo in [3, 8, 13]: cpbterel = CpbteRel().select().where( CpbteRel.idcabfact == cabfact.idcabfact) for cp in cpbterel: tipo = cp.idtipocpbte.codigo pto_vta = cp.numero[:4] nro = cp.numero[-8:] pyfpdf.AgregarCmpAsoc(tipo, pto_vta, nro) # if str(self.view.cboComprobante.text()).find('credito'): # tipo = 19 # pto_vta = 2 # nro = 1234 # pyfepdf.AgregarCmpAsoc(tipo, pto_vta, nro) #Agrego subtotales de IVA(uno por alicuota) if cabfact.netoa != 0: iva_id = 5 #c�digo para al�cuota del 21 % base_imp = cabfact.netoa #importe neto sujeto a esta al�cuota importe = cabfact.netoa * 21 / 100 #importe liquidado de iva ok = pyfpdf.AgregarIva(iva_id, base_imp, importe) if cabfact.netob != 0: iva_id = 4 # c�digo para al�cuota del 10.5 % base_imp = cabfact.netob # importe neto sujeto a esta al�cuota importe = cabfact.netob * 10.5 / 100 # importe liquidado de iva ok = pyfpdf.AgregarIva(iva_id, base_imp, importe) if cabfact.netoa == 0 and cabfact.netob == 0: iva_id = 3 # c�digo para al�cuota del 21 % base_imp = cabfact.netob # importe neto sujeto a esta al�cuota importe = 0 # importe liquidado de iva ok = pyfpdf.AgregarIva(iva_id, base_imp, importe) if cabfact.percepciondgr != 0: #Agregar cada impuesto(por ej.IIBB, retenciones, percepciones, etc.): tributo_id = 99 #codigo para 99 - otros tributos Desc = cabfact.cliente.percepcion.detalle base_imp = cabfact.neto #importe sujeto a estetributo alic = cabfact.cliente.percepcion.porcentaje #alicuota(porcentaje) de estetributo importe = cabfact.percepciondgr #importe liquidado de este tributo ok = pyfpdf.AgregarTributo(tributo_id, Desc, base_imp, alic, importe) det = Detfact().select().where(Detfact.idcabfact == cabfact.idcabfact) for d in det: #Agrego detalles de cada item de la factura: u_mtx = 0 #unidades cod_mtx = "" #c�digo de barras codigo = d.idarticulo.idarticulo #codigo interno a imprimir(ej. "articulo") ds = d.descad.strip() qty = d.cantidad #cantidad umed = 7 #c�digo de unidad de medida(ej. 7 para"unidades") precio = d.precio #precio neto(A) o iva incluido(B) bonif = 0 #importe de descuentos iva_id = FEv1().TASA_IVA[str(float( d.tipoiva.iva))] #c�digopara al�cuota del 21 % imp_iva = d.montoiva #importe liquidado deiva importe = d.precio * d.cantidad #importe total del item despacho = "" #numero de despacho de importaci�n dato_a = "" #primer dato adicional del item dato_b = "" dato_c = "" dato_d = "" dato_e = "" #ultimo dato adicionaldel item ok = pyfpdf.AgregarDetalleItem(u_mtx, cod_mtx, codigo, ds, qty, umed, precio, bonif, iva_id, imp_iva, importe, despacho, dato_a, dato_b, dato_c, dato_d, dato_e) #Agrego datos adicionales fijos: ok = pyfpdf.AgregarDato("logo", ubicacion_sistema() + "plantillas/logo.png") fondo = ParamSist.ObtenerParametro("FONDO_FACTURA") if fondo: x1 = ParamSist.ObtenerParametro("FONDO_FACTURA_X1") or 50 y1 = ParamSist.ObtenerParametro("FONDO_FACTURA_Y1") or 117.1 x2 = ParamSist.ObtenerParametro("FONDO_FACTURA_X2") or 150 y2 = ParamSist.ObtenerParametro("FONDO_FACTURA_Y2") or 232.9 pyfpdf.AgregarCampo("fondo_factura", 'I', x1, y1, x2, y2, foreground=0x808080, priority=-1, text=imagen(fondo)) ok = pyfpdf.AgregarDato( "EMPRESA", "Razon social: {}".format( DeCodifica(LeerIni(clave='empresa', key='FACTURA')))) ok = pyfpdf.AgregarDato( "MEMBRETE1", "Domicilio Comercial: {}".format( DeCodifica(LeerIni(clave='membrete1', key='FACTURA')))) ok = pyfpdf.AgregarDato( "MEMBRETE2", DeCodifica(LeerIni(clave='membrete2', key='FACTURA'))) ok = pyfpdf.AgregarDato( "CUIT", 'CUIT: {}'.format(LeerIni(clave='cuit', key='WSFEv1'))) ok = pyfpdf.AgregarDato("IIBB", LeerIni(clave='iibb', key='FACTURA')) ok = pyfpdf.AgregarDato( "IVA", "Condicion frente al IVA: {}".format( LeerIni(clave='iva', key='FACTURA'))) ok = pyfpdf.AgregarDato( "INICIO", "Fecha inicio actividades: {}".format( LeerIni(clave='inicio', key='FACTURA'))) if int(cabfact.tipocomp.codigo ) in Constantes.COMPROBANTES_FCE: #si es una FCE pyfpdf.AgregarDato('CBUFCE', LeerIni('CBUFCE', key='FACTURA')) pyfpdf.AgregarDato('ALIASFCE', LeerIni('ALIASFCE', key='FACTURA')) pyfpdf.AgregarDato('nombre_condvta', Constantes.COND_VTA['T']) ok = pyfpdf.CargarFormato(ubicacion_sistema() + "/plantillas/factura-fce.csv") else: #Cargo el formato desde el archivo CSV(opcional) #(carga todos los campos a utilizar desde la planilla) ok = pyfpdf.CargarFormato(ubicacion_sistema() + "/plantillas/factura.csv") #Creo plantilla para esta factura(papel A4vertical): if LeerIni(clave='h**o') == 'S': pyfpdf.AgregarCampo("h**o", 'T', 150, 350, 0, 0, size=70, rotate=45, foreground=0x808080, priority=-1, text="HOMOLOGACION") papel = "A4" #o "letter" para carta, "legal" para oficio orientacion = "portrait" #o landscape(apaisado) ok = pyfpdf.CrearPlantilla(papel, orientacion) num_copias = int( LeerIni(clave='num_copias', key='FACTURA')) #original, duplicado y triplicado lineas_max = 24 #cantidad de linas de items porp�gina qty_pos = "izq" #(cantidad a la izquierda de la descripci�n del art�culo) #Proceso la plantilla ok = pyfpdf.ProcesarPlantilla(num_copias, lineas_max, qty_pos) if not os.path.isdir('facturas'): os.mkdir('facturas') #Genero el PDF de salida seg�n la plantilla procesada salida = join( 'facturas', "{}-{}.pdf".format(cabfact.tipocomp.nombre, cabfact.numero)) ok = pyfpdf.GenerarPDF(salida) #Abro el visor de PDF y muestro lo generado #(es necesario tener instalado Acrobat Reader o similar) imprimir = False #cambiar a True para que lo envie directo a laimpresora if mostrar: pyfpdf.MostrarPDF(salida, imprimir) self.facturaGenerada = salida
def onClickBtnCargar(self): archivo = openFileNameDialog( filename=ParamSist.ObtenerParametro("ARCHIVO_FIRMA_EMAIL"), files="HTML documents (*.html)") if archivo: self.view.editorFirma.file_open(archivo)
def CargaDatos(self): archivo_firma = ParamSist.ObtenerParametro("ARCHIVO_FIRMA_EMAIL") if archivo_firma: self.view.editorFirma.file_open(archivo_firma)
def onClickBtnExcel(self): excel = Excel() if not excel.ObtieneArchivo( archivo="informe recategorizacion de {} a {}".format( self.view.spnAnio.value(), self.view.cboPeriodo.GetDato().replace("/", ""))): return #ajuste por Gonzalo if (self.view.cboPeriodo.GetDato() == "Julio/Diciembre"): desde, hasta = self.view.cboPeriodo.RangoFecha( self.view.spnAnio.value() + 1) else: desde, hasta = self.view.cboPeriodo.RangoFecha( self.view.spnAnio.value()) datos = Cabfact.DatosAgrupadosPeriodo(desde=desde, hasta=hasta) fila = 0 excel.Titulo('Informe para recategorizacion', desdecol='A', hastacol='B', fila=fila) fila += 1 avance = 1 total = len(datos) total_facturacion = 0 for d in datos: QApplication.processEvents() self.view.avance.actualizar(avance / total * 100) avance += 1 total_facturacion += float(d.total) fila += 2 datos = ['Detalle', 'Montos'] excel.EscribeFila(datos=datos, fila=fila) fila += 1 datos = [ 'Ingresos Brutos Devengados entre {} y {}'.format( FormatoFecha(desde, formato="dma"), FormatoFecha(hasta, formato="dma")), total_facturacion ] excel.EscribeFila(datos=datos, fila=fila) fila += 1 categoria_monotributo = ParamSist.ObtenerParametro( "CATEGORIA_MONOTRIBUTO") datos = ['Categoria Actual', categoria_monotributo] excel.EscribeFila(datos=datos, fila=fila) try: datos_categoria = CategoriaMono.get_by_id(categoria_monotributo) datos = [ f'Categoria actual {datos_categoria.categoria}', datos_categoria.ing_brutos ] except: datos = ['Datos de categoria no encontrado', 0] excel.EscribeFila(datos=datos, fila=fila) fila += 1 categoria_monto = CategoriaMono.CategoriaMonto(total_facturacion) if categoria_monto: datos = [ f'Recategorizacion {categoria_monto.categoria}', categoria_monto.ing_brutos ] ingresos = categoria_monto.ing_brutos if ParamSist.ObtenerParametro("ACTIVIDAD_MONOTRIBUTO") == "S": cuota = float(categoria_monto.imp_servicio) else: cuota = float(categoria_monto.imp_cosas_muebles) aporte_os = float(categoria_monto.obra_social) * ( float(ParamSist.ObtenerParametro("CANTIDAD_ADH_OS") or 0) + 1) + float(categoria_monto.sipa) else: datos = ['Datos para recategorizacion no encontrado'] ingresos = 0 cuota = 0 aporte_os = 0 excel.EscribeFila(datos=datos, fila=fila) fila += 1 datos = [ 'Hasta el {} todavia podes facturar'.format(FormatoFecha(hasta)), round(float(ingresos) - total_facturacion, 2) ] excel.EscribeFila(datos=datos, fila=fila) fila += 1 meses = diferencia_meses(hasta, datetime.now().date()) + 1 datos = [ f"Faltan {meses} meses para la proxima recategorizacion", meses ] excel.EscribeFila(datos=datos, fila=fila) fila += 1 datos = ["Por mes podes facturar", f"=+B{fila-1}/B{fila}"] excel.EscribeFila(datos=datos, fila=fila) fila += 2 datos = ["Montos para la nueva categoria", ""] excel.EscribeFila(datos=datos, fila=fila) fila += 1 datos = ['Cuota Mensual', cuota] excel.EscribeFila(datos=datos, fila=fila) fila += 1 datos = ['Aporte autonomo / Obra social', aporte_os] excel.EscribeFila(datos=datos, fila=fila) fila += 1 datos = ['Total', aporte_os + cuota] excel.EscribeFila(datos=datos, fila=fila) excel.Cerrar()