예제 #1
0
def nuevoIngreso():

    form = MovementForm()
    
    if request.method == 'POST':

        if form.validate():
            if float(form.cantidad.data) > 0:
                form.tipo.data = "Ingreso"
                consulta('INSERT INTO movimientos (tipo, cantidad, concepto, fecha) VALUES (?, ?, ? ,? );', 
                        (   
                            form.tipo.data,
                            form.cantidad.data,
                            form.concepto.data,
                            form.fecha.data
                        )
                    )
                return redirect(url_for('listaIngresos'))
            elif float(form.cantidad.data) < 0:
                form.tipo.data = "Gasto"
                consulta('INSERT INTO movimientos (tipo, cantidad, concepto, fecha) VALUES (?, ?, ? ,? );', 
                        (   
                            form.tipo.data,
                            form.cantidad.data,
                            form.concepto.data,
                            form.fecha.data
                        )
                    )
                return redirect(url_for('listaIngresos'))
        else:
            return render_template("alta.html", form=form)
    return render_template("alta.html", form=form)
def modificaIngreso(id):
    
    if request.method == 'GET':

        registro = consulta('SELECT fecha, concepto, cantidad, id FROM movimientos where id = ?', (id,))[0] 
        registro['fecha'] = date.fromisoformat(registro['fecha'])
        form = MovementForm(data=registro)

        return render_template("modifica.html", form=form, id=id)


    else:
        form = MovementForm()
        if form.validate():
            consulta('UPDATE movimientos SET fecha = ?, concepto= ?, cantidad = ? WHERE id = ?',
                    (request.form.get('fecha'),
                    request.form.get('concepto'),
                    float(request.form.get('cantidad')),
                    id
                    )
            )

            return redirect(url_for("listaIngresos"))
        else:
            return render_template("modifica.html", form=form, id=id)
예제 #3
0
def nuevoIngreso():

    form = MovementForm(request.form)

    if request.method == 'POST':

        cantidad = request.form.get('cantidad')
        try:
            cantidad = float(cantidad)
        except ValueError:
            msgError = 'Cantidad debe ser numérica'
            return render_template('alta.html', errores=msgError)

        if form.validate():

            consulta(
                'INSERT INTO movements (cantidad, concepto, fecha) VALUES (?, ?, ?);',
                (form.cantidad.data, form.concepto.data, form.fecha.data))

            return redirect(url_for('lista_ingresos'))

        else:
            return render_template('alta.html', form=form)

    return render_template('alta.html', form=form)
예제 #4
0
def nuevaCompra():

    form = MovementForm() 
    mensajes = []
    try:
        moneda_saldo = monedas_activas()   
        form.from_currency.choices=moneda_saldo      
        saldo_total = moneda_saldo_total()
    
    except Exception as e:
        print("**ERROR**🔧: Acceso a base de datos:{} - {}".format(type(e).__name__, e))
        mensajes.append("Error en acceso a base de datos. Consulte con el administrador.")

        return render_template("purchase.html", form = form, vacio = True,mensajes=mensajes)

    if request.method == 'POST' and form.validate(): 
        if form.calculadora.data == True:
            try:
                amount = form.from_cantidad.data 
                symbol = form.from_currency.data
                convert = form.to_currency.data
                respuesta = peticion(url_coin.format(amount, symbol, convert, API_KEY))
                cantidad_coin = respuesta['data']['quote'][convert]['price']

                pu = float(amount) / float(cantidad_coin)

                api_coin = [amount, symbol, convert, cantidad_coin,pu]
                return render_template("purchase.html", form = form, api_coin = api_coin, vacio = False)
            except Exception as e:
                print("**ERROR**🔧: Acceso a API - insert: {} - {}". format(type(e).__name__, e))
                mensajes.append("Error en acceso a API. Consulte con el administrador.")
                return render_template("purchase.html", form = form, mensajes = mensajes, vacio = True)
        else:
            try:       
                consulta('INSERT INTO movimientos (date, time, from_currency, form_quantity,to_currency, to_quantity, precio) VALUES (?, ?, ? , ? , ? , ?, ?);',       
                                (
                                    today_2,
                                    time,
                                    form.from_currency.data,
                                    float(form.from_cantidad.data),
                                    form.to_currency.data,
                                    float(form.to_cantidad.data), 
                                    float(form.precio_unitario.data)
                                )) 
                return redirect(url_for('listaIngresos'))
            except Exception as e:
                print("**ERROR**🔧: Acceso a base de datos - insert: {} - {}". format(type(e).__name__, e))
                mensajes.append("Error en acceso a base de datos. Consulte con el administrador.")

    else:
        return render_template("purchase.html", form = form, vacio = True, mensajes = mensajes)
예제 #5
0
def eliminaIngreso(id):
    
    if request.method == 'GET':

        registro = consulta('SELECT fecha, concepto, cantidad, id FROM movimientos where id = ?', (id,))[0] 
        registro['fecha'] = date.fromisoformat(registro['fecha'])
        form = MovementForm(data=registro)

        return render_template("elimina.html", form=form, id=id)

    else:
        form = MovementForm()
        if form.validate():
            consulta('DELETE FROM movimientos WHERE id = ?', (id,))
            return redirect(url_for("listaIngresos"))
        else:
            return render_template("elimina.html", form=form, id=id)
예제 #6
0
def nuevoIngreso():

    form = MovementForm()

    if request.method == 'POST':
        # iNSERT INTO movimientos (cantidad, concepto, fecha) VALUES (1500, "Paga extra", "2020-12-16" )

        if form.validate():
            consulta(
                'INSERT INTO movimientos (cantidad, concepto, fecha) VALUES (?, ? ,? );',
                (form.cantidad.data, form.concepto.data, form.fecha.data))

            return redirect(url_for('listaIngresos'))
        else:
            return render_template("alta.html", form=form)

    return render_template("alta.html", form=form)
예제 #7
0
def compraCrypto():
    listaCrypto = ()
    mensajes.clear()

    try:
        form = MovementForm()
        listaCrypto = cargaMonedasDisponibles(form.from_currency)

        if request.method == "POST":

            #Si se pulsa Aceptar se esta confirmando la compra, por lo que no hace falta pasar la validaci贸n del formulario
            if form.submit.data:
                now = datetime.now()
                fecha = now.strftime('%Y-%m-%d')
                hora = now.strftime("%H:%M:%S")
                #Recuperamos los valores de pantalla de confirmacion
                monedaOrigen = form.monedaOrigen.data
                monedaDestino = form.monedaDestino.data
                importeOrigen = form.importeOrigen.data
                importeDestino = form.importeDestino.data
                queries.insertaCompra(
                    (fecha, hora, monedaOrigen, importeOrigen, monedaDestino,
                     importeDestino))
                return redirect(url_for("movimientosCrypto"))

            elif form.validate():

                if form.calc.data:
                    monedaActual = "EUR"
                    #Reseteamos los campos de la ventana de confirmacion
                    form.monedaOrigen.data = form.monedaDestino.data = form.importeOrigen.data = form.importeDestino.data = form.precio_unitario.data = ""
                    #validamos que tenemos importe suficiente para convertir en la moneda seleccionada (EUR ilimitados)
                    monedaActual = form.from_currency.data
                    if (monedaActual != 'EUR'):
                        saldoMonedaActual = float(request.form[monedaActual])
                        if form.from_quantity.data > saldoMonedaActual:
                            form.from_quantity.errors.append(
                                "no hay saldo suficiente de la moneda seleccionada: %d%s"
                                % (saldoMonedaActual, monedaActual))
                            raise Exception("Error por saldo insuficiente")

                    #Consultamos el precio unitario de la crypto llamando a la API
                    precioUnitario = getPrecioUnitarioCrypto(
                        (1, monedaActual, form.to_currency.data))
                    form.precio_unitario.data = precioUnitario
                    if precioUnitario > 0:
                        #Calculamos el importe en la nueva moneda
                        form.to_quantity.data = form.from_quantity.data * precioUnitario
                        #Asignamos los valores a los hidden
                        form.monedaOrigen.data = form.from_currency.data
                        form.monedaDestino.data = form.to_currency.data
                        form.importeOrigen.data = form.from_quantity.data
                        form.importeDestino.data = form.to_quantity.data
                        form.precioUnitario.data = form.precio_unitario.data

            return render_template("compra.html",
                                   form=form,
                                   cryptosDisponibles=listaCrypto)

        else:
            return render_template("compra.html",
                                   form=form,
                                   cryptosDisponibles=listaCrypto)

    except sqlite3.Error as e:
        print("**ERROR**馃敡: Acceso a base de datos: {} - {}".format(
            type(e).__name__, e))
        mensajes.append(
            "Error en acceso a base de datos. Consulte con el administrador.")
        return render_template("compra.html",
                               form=form,
                               cryptosDisponibles=listaCrypto,
                               mensajes=mensajes)
    except PeticionError as e:
        print("**ERROR**馃敡: Acceso a la APi de conexi贸n: {} - {}".format(
            type(e).__name__, e))
        mensajes.append(
            "Error en acceso a la API de conexi贸n. Consulte con el administrador."
        )
        return render_template("compra.html",
                               form=form,
                               cryptosDisponibles=listaCrypto,
                               mensajes=mensajes)
    except Exception as e:
        print(
            "Error en la conexion al ejecutar la operaci贸n :  {} - {}".format(
                type(e).__name__, e))
        mensajes.append("Ha habido un error. Consulte con el administrador.")
        return render_template("compra.html",
                               form=form,
                               cryptosDisponibles=listaCrypto,
                               mensajes=mensajes)
예제 #8
0
def purchase():
    # 1) Formulario vacío:
    if request.method == 'GET':
        form_vacio = MovementForm()
        try:
            monedero = calc_monedero()
        except Exception as e:
            print("**ERROR**: Acceso base de datos - {}".format(type(e).__name__))
            mensaje = "Error en acceso a la base de datos. Consulte con el administrador."
            return render_template('movementsList.html', error=mensaje)
        
        lista_from = ['EUR'] # crear una lista de monedas disponibles para FROM: EUR + las que tengan cantidad > 0 en mi monedero
        
        try:
            for moneda, q in monedero.items():
                if q>0:
                    lista_from.append(moneda)
            form_vacio.from_currency.choices = lista_from # choices necesita una lista
        except:
            monedero = 'vacio'
            form_vacio.from_currency.choices = lista_from
        
        return render_template('purchase.html', form=form_vacio, vacio='yes', monedero=monedero)
    
    else: #2) request.method == 'POST': Grabar o Calcular
        form = MovementForm()
        form.from_currency.choices = [request.form.get('from_currency')] # bloqueamos la lista FROM con  la moneda elegida
        form.to_currency.choices = [request.form.get('to_currency')] # bloqueamos la lista TO con  la moneda elegida
        monedero = calc_monedero()
        
        if  request.form.get('submit') == 'Grabar' and form.validate():
            try: 
                query = "INSERT INTO movements (date, time, from_currency, from_quantity, to_currency, to_quantity) VALUES (?,?,?,?,?,?);"
                consulta(query, (request.form.get("date"), request.form.get("time"), request.form.get("from_currency"),
                                request.form.get("from_quantity"), request.form.get("to_currency"), request.form.get("to_quantity")))
                
                return redirect(url_for('listaMovimientos'))
            except:
                error = "Error: Debe efectuar el cálculo (botón calculadora) antes de validar la compra."
                return render_template('purchase.html', form=form, vacio='yes', error=error, monedero=monedero)
        else:
            amount = request.form.get('from_quantity') # x "simbolo" convierte a "convert"
            simbolo = request.form.get('from_currency') 
            convert = request.form.get('to_currency')
            
            #3) Errores en la conversión de monedas:
            error = validarConversion(amount, simbolo, convert)
            if error != None:
                return render_template('purchase.html', form=form, vacio='yes', error=error, monedero=monedero)
            
            # 4) Finalmente: consulta a la API
            try:
                url = 'https://pro-api.coinmarketcap.com/v1/tools/price-conversion?amount={}&symbol={}&convert={}&CMC_PRO_API_KEY={}'.format(amount, simbolo, convert, API_KEY)
                dicc = peticionAPI(url)
                
                q_to = dicc['data']['quote'][convert]['price'] # cantidad de monedas que podemos comprar (viene del API)
                precioUnitario = float(amount)/q_to
                fecha_compra = time.strftime("%d/%m/%Y") # fecha y hora del momento de la consulta API
                hora_compra = time.strftime("%X")
                
                return render_template('purchase.html', vacio='no', form=form, q_to=q_to, precioUnitario=precioUnitario, hora_compra=hora_compra, fecha_compra=fecha_compra, monedero=monedero, amount=amount)
            except Exception as error:
                print("**ERROR**: Conexion url en PURCHASE - {}".format(type(error).__name__), error) # Failed to establish a new connection
                error = "Problema de conexión. Contacte con el administrador."
                return render_template('purchase.html', vacio='yes', form=form, error=error, monedero=monedero)