127 lines
4.3 KiB
Python
127 lines
4.3 KiB
Python
from flask import Flask, render_template, url_for, jsonify, send_file, send_from_directory, session
|
|
from flask_wtf import FlaskForm
|
|
from wtforms import StringField, PasswordField
|
|
from wtforms.validators import DataRequired, InputRequired
|
|
import platform
|
|
import json
|
|
import os
|
|
from help_files.db_cls import DBSQLite
|
|
|
|
|
|
if 'microsoft' in platform.uname().release.lower():
|
|
db_path = os.path.join(os.getcwd(), "help_files/sict_csic.db")
|
|
elif platform.system() == "Linux":
|
|
db_path = "/var/www/sict_csic/help_file/sict_csic.db"
|
|
|
|
DB = DBSQLite(db_path)
|
|
|
|
app = Flask(__name__)
|
|
app.config['SECRET_KEY'] = 'SiCt2021CsIcDIX'
|
|
|
|
class LoginForm(FlaskForm):
|
|
username = StringField('username', validators=[InputRequired('EL código GID es requerido'), DataRequired()])
|
|
password = PasswordField('password', validators=[InputRequired('La contraseña es requerida'), DataRequired('campo requerido')])
|
|
|
|
@app.route('/', methods=['GET', 'POST'])
|
|
def home():
|
|
form = LoginForm()
|
|
mensaje = ""
|
|
|
|
if form.validate_on_submit():
|
|
user = form.username.data
|
|
pswd = form.password.data
|
|
|
|
q_sitios = 'SELECT * FROM sitios;'
|
|
sitios = DB.get_data(q_sitios)[0][1]
|
|
sitios = json.loads(sitios)
|
|
|
|
q_dirSubdirsEdos = 'SELECT * FROM dir_csict;'
|
|
dirSubdirsEdos = DB.get_data(q_dirSubdirsEdos)[0][1]
|
|
dirSubdirsEdos = json.loads(dirSubdirsEdos)
|
|
|
|
for sitio in sitios:
|
|
|
|
gid = sitio['CodigoGid']
|
|
password = sitio['PasswordGid']
|
|
|
|
if pswd == password and user == gid:
|
|
centroSICT = next(
|
|
(x for x in dirSubdirsEdos if int(x['idEdo']) == int(sitio['idEdo'])), None)
|
|
|
|
if centroSICT is not None:
|
|
objeto = {
|
|
'codigoGid': gid,
|
|
'sitio': sitio['nombreTipologia'].title(),
|
|
'ai': sitio['NombreUnidad'].title(),
|
|
'edo': sitio['Estado'].title(),
|
|
'mun': sitio['Municipio'].title(),
|
|
'loc': sitio['Localidad'].title(),
|
|
'nIndicadores': len(sitio['indicadores']),
|
|
'responsableSitio': sitio['ResponsableSitio'].title(),
|
|
'PuestoResponsable': sitio['PuestoResponsable'].title(),
|
|
'indicadores': sitio['indicadores'],
|
|
'lat': sitio['ubicacion']['latitud'],
|
|
'lon': sitio['ubicacion']['longitud'],
|
|
'centroSICT': centroSICT
|
|
}
|
|
|
|
return render_template('layout_reportes.html', objeto=objeto, mensaje=mensaje)
|
|
|
|
# Si el bucle for se completa sin encontrar coincidencias, muestra el mensaje de error
|
|
mensaje = 'El código gid y/o contraseña son incorrectas, verifique sus credenciales.'
|
|
return render_template('index.html', form=form, mensaje=mensaje)
|
|
|
|
return render_template('index.html', form=form)
|
|
|
|
|
|
@app.route('/mapa')
|
|
def mapa():
|
|
return render_template('mapa.html')
|
|
|
|
|
|
@app.route("/mapa/sitios_info")
|
|
def sample():
|
|
q_dataRequest = 'SELECT * FROM sitios;'
|
|
dataRequest = DB.get_data(q_dataRequest)[0][1]
|
|
dataRequest = json.loads(dataRequest)
|
|
|
|
lstSitios = []
|
|
|
|
for s in dataRequest:
|
|
if 'ubicacion' in s.keys():
|
|
tempObj = {
|
|
'CodigoGid': s['CodigoGid'],
|
|
'NombreUnidad': s['NombreUnidad'].title(),
|
|
'Denominacion': s['Denominacion'].title(),
|
|
'Estado': s['Estado'].title(),
|
|
'Municipio': s['Municipio'].title(),
|
|
'Localidad': s['Localidad'].title(),
|
|
'ubicacion': s['ubicacion'],
|
|
'lenguasIndigenas': s['lenguasIndigenas'].title(),
|
|
'fechaInstalacion': s['fechaInstalacion'],
|
|
'infografiaSitio': s['infografiaSitio']
|
|
}
|
|
lstSitios.append(tempObj)
|
|
|
|
return jsonify(lstSitios)
|
|
|
|
|
|
@app.route('/mapa/coordenadas')
|
|
def coordenadas():
|
|
c = DB.get_coordenadas()[0][1]
|
|
c = json.loads(c)
|
|
return jsonify(c)
|
|
|
|
|
|
@app.route('/mapa/img_ai')
|
|
def img_ai():
|
|
return send_file('./static/imgs/icon_ai2.png')
|
|
|
|
|
|
@app.errorhandler(404)
|
|
def error_page(e):
|
|
return render_template('error_page.html')
|
|
|
|
if __name__ == '__main__':
|
|
app.run(port=8090, debug=True, host="0.0.0.0")
|