source: consulta_publica/base/functions.py

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

Modificado para que muestre sólo las consultas activas

  • Propiedad mode establecida a 100644
File size: 12.9 KB
Línea 
1# -*- coding: utf-8 -*-
2"""
3Sistema de Consulta Pública
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='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
14# @version 1.0
15from __future__ import unicode_literals
16from django.http import HttpResponseServerError
17from django.contrib.auth.models import User
18from consulta.models import Consulta,TipoPregunta, Pregunta
19from participacion.models import RespuestaAbierta
20from procesamiento.models import Procesamiento
21from consulta_publica.settings import PROCESAMIENTO_PATH
22from .models import Entidad, Municipio, Parroquia
23from users.models import Perfil
24import requests
25import copy
26import os
27import shutil
28
29def cargar_tipo_pregunta():
30    """!
31    Función que permite cargar los tipos de preguntas que existen
32
33    @author Rodrigo Boet (rboet at cenditel.gob.ve)
34    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
35    @date 15-02-2017
36    @return Devuelve una tupla con los tipos de pregunta
37    """
38
39    lista = ('', 'Seleccione...'),
40
41    try:
42        for tipo_pregunta in TipoPregunta.objects.all():
43            lista += (tipo_pregunta.id, tipo_pregunta.tipo),
44    except Exception as e:
45        pass
46
47    return lista
48
49def cargar_consulta():
50    """!
51    Función que permite cargar las consultas
52
53    @author Rodrigo Boet (rboet at cenditel.gob.ve)
54    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
55    @date 22-02-2017
56    @return Devuelve una tupla con las consultas
57    """
58
59    lista = ('', 'Seleccione...'),
60
61    try:
62        for consulta in Consulta.objects.filter(activa=True).all():
63            lista += (consulta.id, consulta.nombre_consulta),
64    except Exception as e:
65        pass
66
67    return lista
68
69
70def cargar_ministerios():
71    """!
72    Función que permite cargar los ministerios
73
74    @author Antonio Araujo (aaraujo at cenditel.gob.ve)
75    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
76    @date 15-03-2017
77    @return Devuelve una tupla con los ministerios
78    """
79
80    # TODO: especificar la URL del servicio a traves de una configuracion y gestion
81    # de error en solicitud http
82    url =  'http://192.168.12.152:8080/services_sipes/entes_planificadores/views/servicios_webs?display_id=page_1'
83    r = requests.get(url)
84
85    if not r.status_code == 200:
86        print "ERROR:"
87        return ('', 'ocurrio error...'),
88
89    data = r.json()
90    # tupla de entes
91    tuplaNameEntity = ('', 'Ministerios '),
92    uniqueEntities = []
93    nidEntities = []
94
95    for dicc in data:
96        tmpEntity = dicc['name_ente']
97        tmpNidEntity = dicc['nid']
98        if  tmpEntity.startswith('Ministerio') and  tmpEntity not in uniqueEntities:
99            uniqueEntities.append(tmpEntity)
100            nidEntities.append(tmpNidEntity)
101        else:
102            continue
103
104    for i in range(0, len(uniqueEntities)) :
105        tuplaNameEntity += (nidEntities[i], uniqueEntities[i]),
106
107    return tuplaNameEntity
108
109
110def cargar_vicepresidencias():
111    """!
112    Función que permite cargar las vicepresidencias
113
114    @author Antonio Araujo (aaraujo at cenditel.gob.ve)
115    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
116    @date 15-03-2017
117    @return Devuelve una tupla con las vicepresidencias
118    """
119
120    # TODO: especificar la URL del servicio a traves de una configuracion y gestion
121    # de error en solicitud http
122    url =  'http://192.168.12.152:8080/services_sipes/entes_planificadores/views/servicios_webs?display_id=page_1'
123    r = requests.get(url)
124    if not r.status_code == 200:
125        print "ERROR:"
126        return ('', 'ocurrio error...'),
127
128    data = r.json()
129
130    # tupla de sectores
131    tuplaSector = ('', 'Vicepresidencias'),
132    uniqueSectors = []
133    nidEntities = []
134
135    for dicc in data:
136        tmpSector = dicc['sector']
137        tmpNidEntity = dicc['nid']
138        if tmpSector.startswith('Vicepresidencia') and tmpSector not in uniqueSectors:
139            uniqueSectors.append(tmpSector)
140            nidEntities.append(tmpNidEntity)
141        else:
142            continue
143
144    for i in range(0, len(uniqueSectors)) :
145        tuplaSector += (nidEntities[i], uniqueSectors[i]),
146
147    return tuplaSector
148
149
150def cargar_ambitos():
151    """!
152    Función que permite cargar los ambitos
153
154    @author Antonio Araujo (aaraujo at cenditel.gob.ve)
155    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
156    @date 22-03-2017
157    @return Devuelve una tupla con los ambitos
158    """
159
160    # TODO: especificar la URL del servicio a traves de una configuracion y gestion
161    # de error en solicitud http
162    url = 'http://192.168.12.152:8080/services_sipes/entes_planificadores/views/lista_ambitos_y_sectores?display_id=ambitos'
163    r = requests.get(url)
164    if not r.status_code == 200:
165        print "ERROR:"
166        return ('', 'ocurrio error...'),
167
168    data = r.json()
169
170    tuplaScope = ('', 'Seleccione...'),
171
172    for dicc in data:
173        if dicc['parent_id'] == '0' :
174            tuplaScope += (dicc['id'], dicc['nombre']),
175
176    return tuplaScope
177
178def cargar_sectores():
179    """!
180    Función que permite cargar los sectores
181
182    @author Antonio Araujo (aaraujo at cenditel.gob.ve)
183    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
184    @date 22-03-2017
185    @return Devuelve una tupla con los ambitos
186    """
187
188    # TODO: especificar la URL del servicio a traves de una configuracion y gestion
189    # de error en solicitud http
190    url = 'http://192.168.12.152:8080/services_sipes/entes_planificadores/views/lista_ambitos_y_sectores?display_id=ambitos'
191    r = requests.get(url)
192    if not r.status_code == 200:
193        print "ERROR:"
194        return ('', 'ocurrio error...'),
195
196    data = r.json()
197    tuplaSector = ('', 'Seleccione...'),
198
199    for dicc in data:
200        if dicc['parent_id'] != '0' :
201            tuplaSector += (dicc['parent_id'], dicc['nombre']),
202    return tuplaSector
203
204def cargar_procesamiento(pk=None):
205    """!
206    Función que permite cargar los procesamientos
207
208    @author Rodrigo Boet (rboet at cenditel.gob.ve)
209    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
210    @date 28-03-2017
211    @return Devuelve una tupla con los perfiles de procesamiento
212    """
213
214    lista = ('', 'Seleccione...'),
215
216    Pro = Procesamiento.objects.filter(consulta_id=pk) if pk else Procesamiento.objects
217    try:
218        for procesamiento in Pro.all():
219            lista += (procesamiento.id, procesamiento.procesamiento_dir),
220    except Exception as e:
221        pass
222
223    return lista
224
225
226def dump_exception():
227    """!
228    Función para captar los errores e imprimirlos
229
230    @author Jorge Redondo (jredondo at cenditel.gob.ve)
231    @copyright GNU/GPLv2
232    @param request <b>{object}</b> Objeto que mantiene la peticion
233    @return Retorna una respuesta http con el error
234    """
235    import sys,traceback
236    exc_type, exc_value, exc_traceback = sys.exc_info()
237    print "*** print_tb:"
238    traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
239    print "*** print_exception:"
240    traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout)
241    return HttpResponseServerError(str(exc_value))
242
243
244
245def createPreprocessingFiles(id):
246    """!
247    Crea los archivos necesarios del preprocesamiento a partir de las respuestas
248    abiertas de una consulta.
249
250    La función creará el directorio consulta_publica/static/procesamiento_files/nombre_consulta/orig
251    con un conjunto de archivos de texto que representan cada una de las repuestas
252    abiertas de la consulta. Por ejemplo:
253    .
254    miconsulta
255    |---orig
256        |--- respuesta_5.txt
257        |--- respuesta_6.txt
258
259    En caso de existir el directorio al momento de ejecutarse esta función será
260    borrado.
261
262    @author Antonio Araujo  (aaraujo at cenditel.gob.ve)
263    @copyright GNU/GPLv2
264    @param id Identificador de la consulta para obtener respuestas abiertas
265    """
266
267    try:
268        # obtener la consulta con id pasado como argumento
269        consulta = Consulta.objects.get(id=id)
270       
271        ## Se crea un nombre sin espacios en blanco
272        nombre = "_".join(consulta.nombre_consulta.split(" "))
273
274        # crear un directorio con el nombre de la consulta en consulta_publica/static/procesamiento_files/
275        processingDirectory = PROCESAMIENTO_PATH + '/' + nombre + '/orig'
276
277        # borrar directorio en el caso de existir
278        if os.path.isdir(processingDirectory) :
279            shutil.rmtree(processingDirectory)
280        os.makedirs(processingDirectory)
281
282        # obtener las preguntas
283        for pregunta in Pregunta.objects.filter(consulta_id=consulta.id).all() :
284            if pregunta.tipo_pregunta_id==5 :
285                # ubicar la respuesta
286                for respuesta in RespuestaAbierta.objects.filter(pregunta_id=pregunta.id).all():
287                    # escribir archivo a disco
288                    filePath = processingDirectory + '/' + 'respuesta_' + str(respuesta.id)+".txt"
289                    fo = open(filePath, "w")
290                    fo.write(respuesta.texto_respuesta.encode('utf8'));
291                    fo.close()
292       
293        return True
294
295    except Exception as e:
296        print "La consulta con identificado "+ str(id) + " no existe"
297        print e
298        return False
299        pass
300   
301def validate_dir(pk):
302    """!
303    Función que permite cargar las consultas con directorios creados
304
305    @author Rodrigo Boet (rboet at cenditel.gob.ve)
306    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
307    @date 17-04-2017
308    @param pk {int} Recibe id de la consulta
309    @return Devuelve una tupla con las consultas que tienen directorios
310    """
311   
312    consulta = Consulta.objects.filter(pk=pk)
313    if consulta:
314        consulta = consulta.get()
315        nombre = "_".join(consulta.nombre_consulta.split(" "))
316        consulta_dir = PROCESAMIENTO_PATH+"/"+nombre
317        if os.path.exists(consulta_dir):
318            return True
319        return False
320    else:
321        return False
322
323def cargar_entidad():
324    """!
325    Función que permite cargar todas las entidades
326
327    @author Rodrigo Boet (rboet at cenditel.gob.ve)
328    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
329    @date 20-04-2017
330    @return Devuelve una tupla con las entidades
331    """
332
333    lista = ('', 'Seleccione...'),
334
335    try:
336        for entidad in Entidad.objects.all():
337            lista += (entidad.codigo, entidad.nombre),
338    except Exception as e:
339        pass
340
341    return lista
342
343
344def cargar_municipios():
345    """!
346    Función que permite cargar todas los municipios
347
348    @author Rodrigo Boet (rboet at cenditel.gob.ve)
349    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
350    @date 20-04-2017
351    @return Devuelve una tupla con los municipios
352    """
353
354    lista = ('', 'Seleccione...'),
355
356    try:
357        for municipio in Municipio.objects.all():
358            lista += (municipio.codigo, municipio.nombre),
359    except Exception as e:
360        pass
361
362    return lista
363
364
365def cargar_parroquias():
366    """!
367    Función que permite cargar todas las parroquias
368
369    @author Rodrigo Boet (rboet at cenditel.gob.ve)
370    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
371    @date 20-04-2017
372    @return Devuelve una tupla con las parroquias
373    """
374
375    lista = ('', 'Seleccione...'),
376
377    try:
378        for parroquia in Parroquia.objects.all():
379            lista += (parroquia.codigo, parroquia.nombre),
380    except Exception as e:
381        pass
382
383    return lista
384
385
386def validate_cedula(cedula):
387    """!
388    Función que permite validar la cedula
389
390    @author Rodrigo Boet (rboet at cenditel.gob.ve)
391    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
392    @date 20-04-2017
393    @param cedula {str} Recibe el número de cédula
394    @return Devuelve verdadero o falso
395    """
396   
397    cedula = Perfil.objects.filter(cedula=cedula)
398    if cedula:
399        return True
400    else:
401        return False
402   
403def validate_email(email):
404    """!
405    Función que permite validar la cedula
406
407    @author Rodrigo Boet (rboet at cenditel.gob.ve)
408    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
409    @date 20-04-2017
410    @param cedula {str} Recibe el número de cédula
411    @return Devuelve verdadero o falso
412    """
413   
414    email = User.objects.filter(email=email)
415    if email:
416        return True
417    else:
418        return False
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.