Conjunto c7b7e3b en sapic
- Fecha y hora:
- 07/09/2018 12:30:00 (hace 6 años)
- Branches:
- master
- Children:
- 1901d86
- Parents:
- cd20b73
- Ubicación:
- explicacion_situacional
- Ficheros:
-
- 1 añadido
- 4 editados
Leyenda
- No modificado
- Añadido
- Eliminado
-
explicacion_situacional/forms.py
r72e62e0 rc7b7e3b 14 14 # @version 1.0 15 15 16 from django.core.exceptions import ValidationError 16 17 from django.contrib.gis import forms 17 18 from django.forms.fields import ( 18 CharField 19 CharField, 20 BooleanField, 19 21 ) 20 22 23 21 24 from explicacion_situacional.modelsExplicacion.modelsExplicacionesSituacional import * 25 26 from explicacion_situacional.modelsEncuestas.modelsParticipacion import * 22 27 23 28 … … 113 118 'default_lon': -66}) 114 119 self.fields['ubicacion'].required = True 120 121 class RespuestaSinoForm(forms.Form): 122 """! 123 Clase que permite crear el formulario para las respuestas de tipo SiNo 124 125 @author Manuel Zambrano 126 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 127 @date 29-08-2018 128 @version 1.0.0 129 """ 130 131 respuesta = forms.BooleanField(label='Respuesta', 132 widget=forms.Select(choices=((True,'Si'), 133 (False,'No') 134 ) 135 ), 136 required=False 137 ) 138 justificacion = forms.CharField(label='Respuesta', 139 widget=forms.Textarea(), 140 required=False, 141 min_length = 128, 142 ) 143 144 def __init__(self,*arg,**kwargs): 145 """! 146 Funcion que muestra el init del formulario 147 148 @author Manuel Zambrano 149 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 150 @date 29-08-2018 151 @version 1.0.0 152 """ 153 super(RespuestaSinoForm, self).__init__(*arg,**kwargs) 154 self.fields['justificacion'].widget.attrs.update({'placeholder': 'Justificacion','style':'width:370px;height:191px;'}) 155 156 def clean(self): 157 """! 158 Funcion que sobreescribe el metodo clean() de la clase, validación para el campo de justificacion 159 160 @author Manuel Zambrano 161 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 162 @date 29-08-2018 163 @version 1.0.0 164 """ 165 cleaned_data = super(RespuestaSinoForm,self).clean() 166 clean_respuesta = cleaned_data.get('respuesta') 167 clean_justificacion = cleaned_data.get('justificacion') 168 if not clean_respuesta: 169 if not clean_justificacion: 170 raise forms.ValidationError( 171 "Verifique el campo de justificacion", 172 code = "justificacion_error" 173 ) 174 175 class RespuestaAbiertaForm(forms.Form): 176 """! 177 Clase que permite crear el formulario para las respuestas de tipo Abierta 178 179 @author Manuel Zambrano 180 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 181 @date 29-08-2018 182 @version 1.0.0 183 """ 184 185 respuesta = forms.CharField(label='Respuesta', 186 widget=forms.Textarea(), 187 min_length=128 188 ) 189 190 def __init__(self,*arg,**kwargs): 191 """! 192 Funcion que muestra el init del formulario 193 194 @author Manuel Zambrano 195 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 196 @date 29-08-2018 197 @version 1.0.0 198 """ 199 200 super(RespuestaAbiertaForm, self).__init__(*arg,**kwargs) 201 202 203 class RespuestaOpcionesForm(forms.Form): 204 """! 205 Clase que permite crear el formulario para las respuestas de tipo Opciones 206 207 @author Manuel Zambrano 208 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 209 @date 29-08-2018 210 @version 1.0.0 211 """ 212 213 respuesta = forms.ModelChoiceField(label = 'Opcion', 214 queryset = Opcion.objects.all(), 215 required=True, 216 empty_label=None 217 ) 218 219 def __init__(self,*arg,**kwargs): 220 """! 221 Funcion que muestra el init del formulario 222 223 @author Manuel Zambrano 224 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 225 @date 29-08-2018 226 @version 1.0.0 227 """ 228 229 super(RespuestaOpcionesForm, self).__init__(*arg,**kwargs) 230 231 232 233 234 235 236 237 -
explicacion_situacional/templates/caracterizacion.social.html
rcd20b73 rc7b7e3b 3 3 {% block titulo %}_-=SAPIC-Caracterización Social=-_{% endblock titulo %} 4 4 {% block extracss %} 5 <link rel="stylesheet" type="text/css" href="{% static 'DataTables/media/css/jquery.dataTables.min.css' %}"> 5 <link rel="stylesheet" type="text/css" href="{% static "DataTables/media/css/jquery.dataTables.min.css" %}"> 6 <link rel="stylesheet" type="text/css" href="{% static "DataTables/media/css/jquery.dataTables.min.css" %}"> 7 <link rel="stylesheet" type="text/css" href="{% static "DataTables/extensions/Buttons/css/buttons.dataTables.min.css" %}"> 8 <link rel="stylesheet" type="text/css" href="{% static "DataTables/extensions/Select/css/select.dataTables.min.css" %}"> 9 <link rel="stylesheet" type="text/css" href="{% static "DataTables/extensions/Responsive/css/responsive.dataTables.min.css" %}"> 10 <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css"> 6 11 {% endblock extracss %} 7 12 {% block extrajs %} 8 <script type="text/javascript" language="javascript" src="{% static 'DataTables/media/js/jquery.dataTables.min.js' %}"></script> 9 <script type="text/javascript"> 10 $(document).ready(function(){ 11 var table = $('#tabla-participacion').DataTable(); 13 <script type="text/javascript" language="javascript" src="{% static "DataTables/media/js/jquery.dataTables.min.js" %}"></script> 14 <script type="text/javascript" language="javascript" src="{% static "DataTables/extensions/Buttons/js/dataTables.buttons.min.js" %}"></script> 15 <script type="text/javascript" language="javascript" src="{% static "DataTables/extensions/Buttons/js/buttons.print.min.js" %}"></script> 16 <script type="text/javascript" language="javascript" src="{% static "DataTables/extensions/Buttons/js/buttons.jqueryui.js" %}"></script> 17 <script type="text/javascript" language="javascript" src="{% static "DataTables/extensions/Buttons/js/buttons.html5.min.js" %}"></script> 18 19 20 21 <script type="text/javascript"> 22 function abrir_modal(url) 23 { 24 $('#popup').load(url, function() 25 { 26 $(this).modal('show'); 12 27 }); 13 </script> 28 return false; 29 } 30 31 function cerrar_modal() 32 { 33 $('#popup').modal('hide'); 34 return false; 35 } 36 37 38 $(function() { 39 var table = $('#tabla-participacion').DataTable({ 40 "columnDefs": [ 41 { width: '50%', targets: 0 }, 42 { width: '35%', targets: 1 }, 43 ], 44 initComplete: function () { 45 this.api().columns([2]).every( function () { 46 var column = this; 47 var select = $('#select_filter') 48 .on( 'change', function () { 49 var val = $.fn.dataTable.util.escapeRegex( 50 $(this).val() 51 ); 52 53 column 54 .search( val ? '^'+val+'$' : '', true, false ) 55 .draw(); 56 } ); 57 58 column.data().unique().sort().each( function ( d, j ) { 59 select.append( '<option value="'+d+'">'+d+'</option>' ) 60 } ); 61 } ); 62 }, 63 "language": { 64 url: "//cdn.datatables.net/plug-ins/1.10.16/i18n/Spanish.json" 65 }, 66 "lengthMenu": [ [10, 50, 100, -1], [10, 50, 100, "Todo"] ], 67 68 69 "scrollX": true, 70 "fixedColumns": true , 71 "dom": 'lfrtBSip', 72 "buttons": ['copy', 'csv', 'print'] 73 }); 74 }); 75 76 </script> 14 77 {% endblock extrajs %} 15 78 {% block contenido_principal %} … … 22 85 </h2> 23 86 </section> 24 25 87 {% if consultas %} 26 <table id="tabla-participacion"> 88 <select id="select_filter" style="color:#000"><option value="">Consulta</option></select> 89 <table id="tabla-participacion" class="display "> 27 90 <thead> 28 91 <tr> 29 92 <th>Pregunta</th> 30 93 <th>Respuesta</th> 94 <th>Consulta</th> 95 <th>Accion</th> 31 96 </tr> 32 97 </thead> 33 98 <tbody> 34 99 {% for respuesta in si_no %} 35 <tr> 36 <td>{{ respuesta.pregunta }}</td> 37 {% if respuesta.respuesta %} 38 <td>Si</td> 39 {% else %} 40 <td>No</td> 41 {% endif %} 42 </tr> 100 {% if respuesta.respuesta %} 101 <tr> 102 <td>{{ respuesta.pregunta }}</td> 103 <td>Si</td> 104 <td>{{ respuesta.pregunta.consulta.nombre_consulta | cut:" de mi comunidad" | cut:"Calidad del servicio de " | cut:"Calidad de servicios de " | cut:"Calidad de servicios " | cut:"Calidad de los servicios asociados a " | cut:"en " | cut:"relacionados a " | title}}</td> 105 <td><a class="btn" onclick="return abrir_modal('{% url 'explicacion:modificar_respuesta_' respuesta.pregunta.tipo_pregunta.pk respuesta.pk %}')"><i class="glyphicon glyphicon-edit"></i></a></td> 106 </tr> 107 {% else %} 108 <tr> 109 <td> {{respuesta.pregunta}} </td> 110 {% for justificacion in abierta %} 111 {% if justificacion.es_justificacion and justificacion.pregunta.pk == respuesta.pregunta.pk %} 112 <td>No,{{justificacion.texto_respuesta}} </td> 113 {% endif %} 114 {% endfor %} 115 <td>{{ respuesta.pregunta.consulta.nombre_consulta | cut:" de mi comunidad" | cut:"Calidad del servicio de " | cut:"Calidad de servicios de " | cut:"Calidad de servicios " | cut:"Calidad de los servicios asociados a " | cut:"en " | cut:"relacionados a " | title}}</td> 116 <td><a class="btn" onclick="return abrir_modal('{% url 'explicacion:modificar_respuesta_' respuesta.pregunta.tipo_pregunta.pk respuesta.pk %}')" ><i class="glyphicon glyphicon-edit"></i></a></td> 117 </tr> 118 {% endif %} 119 43 120 {% endfor %} 121 44 122 {% for respuesta in opciones %} 45 123 <tr> 46 <td>{{ respuesta. pregunta }}</td>124 <td>{{ respuesta.opcion.pregunta }}</td> 47 125 <td>{{ respuesta.opcion }}</td> 126 <td>{{ respuesta.opcion.pregunta.consulta.nombre_consulta | cut:" de mi comunidad" | cut:"Calidad del servicio de " | cut:"Calidad de servicios de " | cut:"Calidad de servicios " | cut:"Calidad de los servicios asociados a " | cut:"en " | cut:"relacionados a " | title}}</td> 127 <td><a class="btn" onclick="return abrir_modal('{% url 'explicacion:modificar_respuesta_' respuesta.opcion.pregunta.tipo_pregunta.pk respuesta.pk %}')"><i class="glyphicon glyphicon-edit"></i></a></td> 48 128 </tr> 49 129 {% endfor %} 50 130 {% for respuesta in abierta %} 51 <tr> 52 <td>{{ respuesta.pregunta }}</td> 53 <td>{{ respuesta.texto_respuesta }}</td> 54 </tr> 131 132 {% if not respuesta.es_justificacion %} 133 <tr> 134 <td>{{ respuesta.pregunta }}</td> 135 <td>{{ respuesta.texto_respuesta }}</td> 136 <td>{{ respuesta.pregunta.consulta.nombre_consulta | cut:" de mi comunidad" | cut:"Calidad del servicio de " | cut:"Calidad de servicios de " | cut:"Calidad de servicios " | cut:"Calidad de los servicios asociados a " | cut:"en " | cut:"relacionados a " | title}}</td> 137 <td><a class="btn" onclick="return abrir_modal('{% url 'explicacion:modificar_respuesta_' respuesta.pregunta.tipo_pregunta.pk respuesta.pk %}')"><i class="glyphicon glyphicon-edit"></i></a></td> 138 </tr> 139 {% endif %} 140 55 141 {% endfor %} 56 142 {% for respuesta in ubicacion %} … … 58 144 <td>{{ respuesta.pregunta }}</td> 59 145 <td>{{ respuesta.coordenadas }}</td> 146 <td>{{ respuesta.pregunta.consulta.nombre_consulta }}</td> 147 <td><a class="btn" href="#"><i class="icon"></i></a></td> 60 148 </tr> 61 149 {% endfor %} 62 150 </tbody> 151 63 152 </table> 64 153 {% endif %} 154 <div id="popup" class="modal fade" role="dialog"></div> 65 155 {% if not 3 in consultas %} 66 156 <section class="content"> -
explicacion_situacional/urls.py
rcd20b73 rc7b7e3b 39 39 name="modificar_respuesta"), 40 40 41 # Caracterización social 41 42 url(r'^modificar-respuesta/(?P<tipo>.+)/(?P<pk>.+)$', 43 ModificarRespuestaView.as_view(), 44 name="modificar_respuesta_"), 45 46 #Caracterización social 42 47 url(r'^caracterizacion-social/$', 43 48 CaracterizacionSocialView.as_view(), … … 91 96 EncuestasParticiparView.as_view(), 92 97 name="servicio_incidente"), 93 94 98 99 # Caracterización polÃtica 95 100 url(r'^caracterizacion-politica/$', 96 101 CaracterizacionPoliticaView.as_view(), … … 115 120 name="comunicacion_politica"), 116 121 117 url(r'^modificar-respuesta/$',118 ModificarRespuesta,119 name="modificar_respuesta"),120 121 122 # Ajax 122 123 url(r'^validar-participacion-ajax', -
explicacion_situacional/views/caracterizacionSocialView.py
r61114b7 rc7b7e3b 15 15 16 16 from django.views.generic import ( 17 TemplateView 17 TemplateView, 18 UpdateView 18 19 ) 19 20 from django.contrib import messages 20 21 from utils.views import LoginRequeridoPerAuth 21 22 23 from django.contrib.gis import forms 24 22 25 from explicacion_situacional.modelsEncuestas.modelsConsultas import ( 23 Consulta 26 Consulta, 27 Opcion, 24 28 ) 25 29 … … 28 32 RespuestaAbierta, RespuestaUbicacion 29 33 ) 34 35 from django.urls import reverse_lazy 36 from ..forms import RespuestaSinoForm, RespuestaAbiertaForm ,RespuestaOpcionesForm 37 from django.shortcuts import redirect 38 39 30 40 31 41 class CaracterizacionSocialView(LoginRequeridoPerAuth, TemplateView): … … 46 56 47 57 @author Lully Troconis (ltroconis at cenditel.gob.ve) 48 @copyright GNU/GPLv2 58 @author Manuel Zambrano 59 @copyright <a href='âhttp://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 49 60 @date 03-07-2018 61 @date 27-08-2018 50 62 @param self <b>{object}</b> Objeto que instancia la clase 51 63 @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto … … 60 72 respuesta_si_no = list(RespuestaSino.objects.filter(user=self.request.user, pregunta__consulta=consulta)) 61 73 si_no = si_no + respuesta_si_no 62 respuesta_abierta = list(RespuestaAbierta.objects.filter(user=self.request.user, pregunta__consulta=consulta)) 74 respuesta_opciones = list(RespuestaOpciones.objects.filter(user = self.request.user,opcion__pregunta__consulta = consulta)) 75 opciones = opciones + respuesta_opciones 76 respuesta_abierta = list(RespuestaAbierta.objects.filter(user = self.request.user, pregunta__consulta = consulta)) 63 77 abierta = abierta + respuesta_abierta 64 respuesta_ubicacion = list(RespuestaUbicacion.objects.filter(user =self.request.user, pregunta__consulta=consulta))78 respuesta_ubicacion = list(RespuestaUbicacion.objects.filter(user = self.request.user, pregunta__consulta = consulta)) 65 79 ubicacion = ubicacion + respuesta_ubicacion 66 if respuesta_si_no or respuesta_abierta or respuesta_ubicacion :80 if respuesta_si_no or respuesta_abierta or respuesta_ubicacion or respuesta_opciones: 67 81 consultas.append(pk) 68 82 kwargs['si_no'] = si_no 83 kwargs['opciones'] = opciones 69 84 kwargs['abierta'] = abierta 70 85 kwargs['ubicacion'] = ubicacion … … 74 89 75 90 return super(CaracterizacionSocialView, self).get_context_data(**kwargs) 91 92 93 class ModificarRespuestaView(LoginRequeridoPerAuth, TemplateView): 94 """! 95 Clase que mustra el template y gestiona la vista para modificar una respuesta en una encuesta 96 97 @author Manuel Zambrano 98 @copyright <a href='âhttp://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 99 @date 30-08-2018 100 @version 1.0.0 101 """ 102 103 template_name = 'modificar.respuesta.html' 104 group_required = [u"Administradores", u"Voceros", u"Integrantes"] 105 106 107 def get(self,*arg,**kwargs): 108 """! 109 Metodo que maneja las peticiones HTTP GET de la vista, Carga los valores iniciales al formulario 110 111 @author Manuel Zambrano 112 @copyright <a href='âhttp://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 113 @date 30-08-2018 114 @param self <b>{object}</b> Objeto que instancia la clase 115 @param kwargs <b>{object}</b> Objeto que contiene las variables de la url 116 @param arg <b>{object}</b> 117 @return retorna los datos de contexto 118 """ 119 120 if kwargs['tipo'] == '1' : 121 respuesta = RespuestaOpciones.objects.select_related().get( 122 pk = kwargs['pk'], 123 user=self.request.user 124 ) 125 formulario = RespuestaOpcionesForm() 126 formulario.fields['respuesta']._set_queryset(Opcion.objects.filter( 127 pregunta=respuesta.opcion.pregunta 128 )) 129 formulario.fields['respuesta'].initial= respuesta.opcion 130 131 132 if kwargs['tipo'] == '4' : #Hacer para cada tipo de respuesta8 133 respuesta = RespuestaSino.objects.select_related().get( 134 pk = kwargs['pk'], 135 user=self.request.user 136 ) 137 if respuesta.respuesta == True: 138 formulario = RespuestaSinoForm(initial={ 139 'respuesta':respuesta.respuesta, 140 }) 141 else: 142 justificacion = RespuestaAbierta.objects.select_related().get( 143 user = self.request.user, 144 pregunta = respuesta.pregunta 145 ) 146 formulario = RespuestaSinoForm(initial={ 147 'respuesta':respuesta.respuesta, 148 'justificacion':justificacion.texto_respuesta, 149 }) 150 151 if kwargs['tipo'] == '5' : 152 respuesta = RespuestaAbierta.objects.select_related().get( 153 pk = kwargs['pk'], 154 user=self.request.user 155 ) 156 formulario = RespuestaAbiertaForm(initial={ 157 'respuesta':respuesta.texto_respuesta, 158 }) 159 160 kwargs['formulario'] = formulario 161 kwargs['o'] = respuesta 162 163 164 return super(ModificarRespuestaView,self).get(self,**kwargs) 165 166 def post(self,*arg,**kwargs): 167 """! 168 Metodo que maneja las peticiones HTTP POST de la vista, Guarda la modificacion de la pregunta 169 170 @author Manuel Zambrano 171 @copyright <a href='âhttp://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 172 @date 03-09-2018 173 @param self <b>{object}</b> Objeto que instancia la clase 174 @param kwargs <b>{object}</b> Objeto que contiene las variables de la url 175 @param arg <b>{object}</b> 176 @return Redirecciona a la tabla de ecuestas 177 """ 178 179 if kwargs['tipo'] == '1' : 180 respuesta = RespuestaOpciones.objects.select_related().get( 181 pk = kwargs['pk'], 182 user=self.request.user 183 ) 184 formulario = RespuestaOpcionesForm(self.request.POST,initial={ 185 'respuesta':respuesta.opcion, 186 }) 187 if formulario.is_valid() and formulario.has_changed(): 188 opcion = formulario.cleaned_data['respuesta'] 189 respuesta.opcion = opcion 190 respuesta.save() 191 192 if kwargs['tipo'] == '5': 193 respuesta = RespuestaAbierta.objects.select_related().get( 194 pk = kwargs['pk'], 195 user=self.request.user 196 ) 197 formulario = RespuestaAbiertaForm(self.request.POST, initial={ 198 'respuesta':respuesta.texto_respuesta, 199 }) 200 if formulario.is_valid() and formulario.has_changed(): 201 texto_respuesta = formulario.cleaned_data['respuesta'] 202 respuesta.texto_respuesta = texto_respuesta 203 respuesta.save() 204 205 if kwargs['tipo'] == '4': 206 respuesta = RespuestaSino.objects.select_related().get( 207 pk = kwargs['pk'], 208 user = self.request.user 209 ) 210 formulario = RespuestaSinoForm(self.request.POST) 211 if formulario.is_valid(): 212 if formulario.cleaned_data['respuesta'] : 213 respuesta.respuesta = formulario.cleaned_data['respuesta'] 214 respuesta.save() 215 else: 216 try: 217 justificacion = RespuestaAbierta.objects.select_related().get( 218 user = self.request.user, 219 pregunta = respuesta.pregunta 220 ) 221 texto_respuesta = formulario.cleaned_data['justificacion'] 222 justificacion.texto_respuesta = texto_respuesta 223 justificacion.es_justificacion = True 224 respuesta.respuesta = formulario.cleaned_data['respuesta'] 225 respuesta.save() 226 justificacion.save() 227 except: 228 justificacion = RespuestaAbierta() 229 justificacion.pregunta = respuesta.pregunta 230 justificacion.texto_respuesta = formulario.cleaned_data['justificacion'] 231 justificacion.user = self.request.user 232 justificacion.es_justificacion = True 233 justificacion.save() 234 respuesta.respuesta = formulario.cleaned_data['respuesta'] 235 respuesta.save() 236 else : 237 messages.error(self.request, 'Error el formulario \ 238 No es Valido') #provicional, mientras se valida el formulario con js 239 return redirect('explicacion:caracterizacion_social') 240 241 242 243 244 245 246
Nota: Vea TracChangeset
para ayuda en el uso del visor de conjuntos de cambios.