source: participacion_consulta/base/functions.py @ 3625c13

Last change on this file since 3625c13 was 3625c13, checked in by rudmanmrrod <rudman22@…>, 7 años ago

Añadidas funciones para cargar los municipios y parroquias de acuerdo al seleccionado, todo por REST

  • Propiedad mode establecida a 100644
File size: 9.8 KB
Línea 
1# -*- coding: utf-8 -*-
2"""
3Sistema de Participación en Consultas
4
5Copyleft (@) 2017 CENDITEL nodo Mérida - https://planificacion.cenditel.gob.ve/trac/wiki/ModeladoTopicos_2017
6"""
7## @package base.functions
8#
9# Clases genéricas de la consulta
10# @author Rodrigo Boet (rboet at cenditel.gob.ve)
11# @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres
12# (CENDITEL) nodo Mérida - Venezuela</a>
13# @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
14# @version 1.0
15from __future__ import unicode_literals
16from django.contrib.auth.models import User
17from django.contrib.auth import authenticate
18from participacion.models import RespuestaAbierta,RespuestaOpciones, RespuestaSino
19from participacion_consulta.settings import API_BASE_URL,API_URL, CONSULTA_SECRET_TOKEN
20import requests
21
22
23def cargar_entidad():
24    """!
25    Función que permite cargar todas las entidades
26
27    @author Rodrigo Boet (rboet at cenditel.gob.ve)
28    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
29    @date 20-04-2017
30    @return Devuelve una tupla con las entidades
31    """
32
33    lista = ('', 'Seleccione...'),
34
35    try:
36        entidades = requests.get(API_URL+'entidad/')
37        for entidad in entidades.json():
38            lista += (entidad['codigo'], entidad['nombre']),
39    except Exception as e:
40        pass
41
42    return lista
43
44
45def cargar_municipios(entidad = 0):
46    """!
47    Función que permite cargar todas los municipios
48
49    @author Rodrigo Boet (rboet at cenditel.gob.ve)
50    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
51    @date 20-04-2017
52    @param entidad <b>{int}</b> Recibe el id del padre
53    @return Devuelve una tupla con los municipios
54    """
55
56    lista = ('', 'Seleccione...'),
57
58    try:
59        url = API_URL+'municipio/' if entidad ==0 else API_URL+'municipio/?estado='+str(entidad)
60        municipios = requests.get(url)
61        for municipio in municipios.json():
62            lista += (municipio['codigo'], municipio['nombre']),
63    except Exception as e:
64        pass
65
66    return lista
67
68
69def cargar_parroquias(municipio = 0):
70    """!
71    Función que permite cargar todas las parroquias
72
73    @author Rodrigo Boet (rboet at cenditel.gob.ve)
74    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
75    @date 20-04-2017
76    @param municipio <b>{int}</b> Recibe el id del padre
77    @return Devuelve una tupla con las parroquias
78    """
79
80    lista = ('', 'Seleccione...'),
81
82    try:
83        url = API_URL+'parroquia/' if municipio ==0 else API_URL+'parroquia/?municipio='+str(municipio)
84        parroquias = requests.get(url)
85        for parroquia in parroquias.json():
86            lista += (parroquia['codigo'], parroquia['nombre']),
87    except Exception as e:
88        pass
89
90    return lista
91
92
93def validate_cedula(cedula):
94    """!
95    Función que permite validar la cedula
96
97    @author Rodrigo Boet (rboet at cenditel.gob.ve)
98    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
99    @date 20-04-2017
100    @param cedula {str} Recibe el número de cédula
101    @return Devuelve verdadero o falso
102    """
103   
104    cedula = Perfil.objects.filter(cedula=cedula)
105    if cedula:
106        return True
107    else:
108        return False
109   
110def validate_email(email):
111    """!
112    Función que permite validar la cedula
113
114    @author Rodrigo Boet (rboet at cenditel.gob.ve)
115    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
116    @date 20-04-2017
117    @param cedula {str} Recibe el número de cédula
118    @return Devuelve verdadero o falso
119    """
120   
121    email = User.objects.filter(email=email)
122    if email:
123        return True
124    else:
125        return False
126
127def cargar_preguntas(id):
128    """!
129    Función que permite cargar preguntas asignadas a una consulta
130
131    @author Rodrigo Boet (rboet at cenditel.gob.ve)
132    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
133    @date 31-05-2017
134    @return Devuelve una tupla con las consultas
135    """
136
137    lista = ('', 'Seleccione...'),
138
139    try:
140        for pregunta in Pregunta.objects.filter(consulta_id=id).all():
141            lista += (pregunta.id, pregunta.texto_pregunta),
142    except Exception as e:
143        pass
144
145    return lista
146
147def load_consult(token):
148    """!
149    Función que permite cargar las consultas configuradas en el settings
150
151    @author Rodrigo Boet (rboet at cenditel.gob.ve)
152    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
153    @param token <b>str</b> Recibe el token de la consulta
154    @date 22-09-2017
155    @return Devuelve una tupla con las consultas
156    """
157    r = requests.get(API_URL+'consulta/'+token)
158    if not r.status_code == 200:
159        return False
160    data = r.json()[0]
161    return data
162
163def cargar_consultas():
164    """!
165    Función que permite cargar las consultas configuradas en el settings
166
167    @author Rodrigo Boet (rboet at cenditel.gob.ve)
168    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
169    @date 22-09-2017
170    @return Devuelve una tupla con las consultas
171    """
172    if type(CONSULTA_SECRET_TOKEN) == str:
173        return load_consult(item)
174    elif type(CONSULTA_SECRET_TOKEN) == list:
175        data = []
176        for item in CONSULTA_SECRET_TOKEN:
177            data.append(load_consult(item))
178        return data
179    else:
180        return False
181   
182def cargar_consulta_id(id):
183    """!
184    Función que permite cargar las consultas por id
185
186    @author Rodrigo Boet (rboet at cenditel.gob.ve)
187    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
188    @param id <b>int</b> Recibe el id de la consulta
189    @date 22-09-2017
190    @return Devuelve una tupla con las consultas
191    """
192    if type(CONSULTA_SECRET_TOKEN) == str:
193        consulta = load_consult(item)
194        if (consulta['id']==int(id)):
195            return consulta
196        else:
197            return False
198    elif type(CONSULTA_SECRET_TOKEN) == list:
199        consulta = False
200        for item in CONSULTA_SECRET_TOKEN:
201            item = load_consult(item)
202            if (item['id']==int(id)):
203                consulta = item
204        return consulta
205    return False
206
207def autenticar_rest(username,password):
208    """!
209    Función que permite autenticarse por rest
210
211    @author Rodrigo Boet (rboet at cenditel.gob.ve)
212    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
213    @param username <b>str</b> Recibe el nombre de usuario
214    @param password <b>str</b> Recibe la contraseña
215    @date 28-09-2017
216    @return Devuelve los datos del usuario
217    """
218    r = requests.post(API_BASE_URL+'api-token-auth/',data={"username":username,"password":password})
219    if not r.status_code == 200:
220        return False
221    data = r.json()
222    return data
223
224def get_user_data(username,password,token):
225    """!
226    Función que permite cargar las consultas por id
227
228    @author Rodrigo Boet (rboet at cenditel.gob.ve)
229    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
230    @param username <b>str</b> Recibe el nombre de usuario
231    @param password <b>str</b> Recibe la contraseña
232    @param token <b>str</b> Recibe el token de JWT
233    @date 28-09-2017
234    @return Devuelve los datos del usuario
235    """
236    header = {'Authorization':'JWT '+token}
237    r = requests.get(API_URL+'user/',headers=header)
238    if not r.status_code == 200:
239        return False
240    data = r.json()[0]
241    return data
242
243def check_or_create(user_data,password):
244    """!
245    Función que permite comprobar si el usuario existe de este lado de la aplicación
246
247    @author Rodrigo Boet (rboet at cenditel.gob.ve)
248    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
249    @param user_data <b>dict</b> Recibe el diccionario con los datos del usuario
250    @param password <b>str</b> Recibe la contraseña
251    @date 28-09-2017
252    @return Devuelve el usuario autenticado
253    """
254    user =  User.objects.filter(username=user_data["user"]["username"])
255    if(user):
256        user = user.get()
257        user.first_name = user_data['user']['first_name']
258        user.last_name = user_data['user']['last_name']
259        user.email = user_data['user']['email']
260        user.set_password(password)
261        user.save()
262    else:
263        user = User()
264        user.username = user_data['user']['username']
265        user.first_name = user_data['user']['first_name']
266        user.last_name = user_data['user']['last_name']
267        user.email = user_data['user']['email']
268        user.set_password(password)
269        user.save()
270    return authenticate(username=user.username, password=password)
271
272
273def validar_participacion_general(request,consulta_id):
274    """!
275    Función que permite comprobar si el usuario participó en la consulta
276
277    @author Rodrigo Boet (rboet at cenditel.gob.ve)
278    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
279    @param request <b>obj</b> Recibe el objeto de la petición
280    @param consulta_id <b>int</b> Recibe el id de la consulta
281    @date 28-09-2017
282    @return Devuelve si el usuario participó o no
283    """
284    respuesta_sino = RespuestaSino.objects.filter(user_id=request.user.id,consulta=consulta_id)
285    respuesta_abierta = RespuestaAbierta.objects.filter(user_id=request.user.id,consulta=consulta_id)
286    respuesta_opciones = RespuestaOpciones.objects.filter(user_id=request.user.id,consulta=consulta_id)
287    if(respuesta_sino or respuesta_abierta or respuesta_opciones):
288        return True
289    return False
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.