Conjunto bcf369a en consulta_publica
- Fecha y hora:
- 18/07/2017 12:01:38 (hace 7 años)
- Branches:
- constituyente, estudiantes, general, plan_patria, sala
- Children:
- 59f3e60
- Parents:
- 38855e2
- Ficheros:
-
- 1 añadido
- 5 editados
Leyenda
- No modificado
- Añadido
- Eliminado
-
participacion/models.py
r2645b43 rbcf369a 33 33 ## Respuesta 34 34 respuesta = models.BooleanField() 35 36 ## Id del objetivo37 objetivo = models.IntegerField()38 35 39 36 ## Relación con el user … … 51 48 ## Relación con la opción de la respuesta 52 49 opcion = models.ForeignKey(Opcion) 53 54 ## Id del objetivo55 objetivo = models.IntegerField()56 50 57 51 ## Relación con el user -
participacion/templates/participacion.search.html
r250830e rbcf369a 10 10 <div class="row text-center"> 11 11 <h1>Seleccione</h1><hr> 12 <p>A continuación seleccione un objetivo y realice aportes o propuestas que Ud. considere pertinentes para la discusión de la 13 Asamblea Nacional Constituyente.</p> 14 <p>Puede participar una vez en cada objetivo programático.</p><br> 12 15 <div class="row"> 13 16 <div class="form-group {% if form.objetivo.errors %}has-error{% endif %}"> -
participacion/urls.py
r5a86f8c rbcf369a 20 20 url(r'^participacion-busqueda/(?P<pk>\d+)$', ParticipacionSearch.as_view(), name = "participacion_busqueda"), 21 21 url(r'^participacion/(?P<pk>\d+)/(?P<id_objetivo>\d+)$', ParticipacionCreate.as_view(), name = "participacion_consulta"), 22 url(r'^participacion_simple/(?P<pk>\d+)$', ParticipacionSimpleCreate.as_view(), name = "participacion_simple"), 22 23 ] 23 24 -
participacion/views.py
r8edb1df rbcf369a 51 51 """ 52 52 consulta = self.request.POST['consultas'] 53 return reverse_lazy('participacion_busqueda', 53 if(consulta!="3"): 54 return reverse_lazy('participacion_busqueda', 54 55 kwargs={'pk': consulta}) 56 else: 57 return reverse_lazy('participacion_simple', kwargs={'pk': consulta}) 55 58 56 59 … … 127 130 campo += '</textarea></div>' 128 131 else: 129 campo = '<textarea class="form-control" name="consulta_respuesta_abierta_'+str(pregunta.id)+'"></textarea>' 132 campo += '<label class="text-center text-danger">La propuesta debe tener entre 700 y 5000 caracteres</label><br>' 133 campo += '<label class="pull-right" id="longitud"><span>0</span> caracteres escritos</label>' 134 campo += '<textarea class="form-control" name="consulta_respuesta_abierta_'+str(pregunta.id)+'" oninput="medir_caracters(this);"></textarea>' 130 135 valores[pregunta.id] = {'label':label,'field':campo} 131 136 kwargs['preguntas'] = valores … … 185 190 respuesta = RespuestaSino() 186 191 respuesta.pregunta = parent 187 respuesta.objetivo = id_objetivo188 192 respuesta.respuesta = value 189 193 respuesta.user = user … … 207 211 respuesta = RespuestaOpciones() 208 212 respuesta.opcion = parent 209 respuesta.objetivo = id_objetivo210 213 respuesta.user = user 211 214 respuesta.save() … … 252 255 consulta = request.GET.get('consulta', None) 253 256 if(objetivo and consulta): 254 respuesta_sino = RespuestaSino.objects.filter(pregunta__consulta=consulta ,objetivo=objetivo)257 respuesta_sino = RespuestaSino.objects.filter(pregunta__consulta=consulta) 255 258 respuesta_abierta = RespuestaAbierta.objects.filter(pregunta__consulta=consulta,objetivo=objetivo) 256 respuesta_opciones = RespuestaOpciones.objects.filter(opcion__pregunta__consulta=consulta ,objetivo=objetivo)259 respuesta_opciones = RespuestaOpciones.objects.filter(opcion__pregunta__consulta=consulta) 257 260 if(respuesta_sino or respuesta_abierta or respuesta_opciones): 258 261 return JsonResponse({'mensaje': True,'participacion':True}) … … 260 263 else: 261 264 return JsonResponse({'mensaje': False, 'error': str('No envÃo el ente y/o el id de la consulta')}) 265 266 267 268 class ParticipacionSimpleCreate(GroupRequiredMixin,LoginRequiredMixin,TemplateView): 269 """! 270 Clase que gestiona la vista principal de la participación simple 271 272 @author Rodrigo Boet (rboet at cenditel.gob.ve) 273 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 274 @date 18-07-2017 275 @version 1.0.0 276 """ 277 template_name = "participacion.create.simple.html" 278 group_required = u"Participante" 279 280 def get_context_data(self, **kwargs): 281 """! 282 Metodo que permite cargar de nuevo valores en los datos de contexto de la vista 283 284 @author Rodrigo Boet (rboet at cenditel.gob.ve) 285 @copyright GNU/GPLv2 286 @date 23-02-2017 287 @param self <b>{object}</b> Objeto que instancia la clase 288 @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto 289 @return Retorna los datos de contexto 290 """ 291 valores = {} 292 for pregunta in Pregunta.objects.filter(consulta_id=kwargs['pk']).all(): 293 label = '<label class="text-center">'+pregunta.texto_pregunta+'</label>' 294 campo = '' 295 if pregunta.tipo_pregunta.id == 1: 296 campo = '' 297 for opcion in Opcion.objects.filter(pregunta_id=pregunta.id).all(): 298 campo += '<label for="'+kwargs['pk']+'">'+opcion.texto_opcion+'</label><input type="radio" name="consulta_respuesta_radio_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="'+str(opcion.id)+'" class="icheck">' 299 elif pregunta.tipo_pregunta.id == 2: 300 campo = '' 301 for opcion in Opcion.objects.filter(pregunta_id=pregunta.id).all(): 302 campo += '<label for="'+kwargs['pk']+'">'+opcion.texto_opcion+'</label><input type="checkbox" name="consulta_respuesta_check_'+kwargs['pk']+'" id="'+kwargs['pk']+'"value="'+str(opcion.id)+'" class="icheck">' 303 elif pregunta.tipo_pregunta.id > 2 and pregunta.tipo_pregunta.id < 5: 304 if(pregunta.tipo_pregunta.id == 3): 305 campo += '<label for="'+kwargs['pk']+'">Si</label><input type="radio" name="consulta_respuesta_sino_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="Si" class="icheck">' 306 campo += '<label for="'+kwargs['pk']+'">No</label><input type="radio" name="consulta_respuesta_sino_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="No" class="icheck">' 307 else: 308 campo += '<label for="'+kwargs['pk']+'">Si</label><input type="radio" name="consulta_respuesta_sino_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="Si" class="icheck need_justification">' 309 campo += '<label for="'+kwargs['pk']+'">No</label><input type="radio" name="consulta_respuesta_sino_'+str(pregunta.id)+'" id="'+kwargs['pk']+'"value="No" class="icheck">' 310 campo += '<div id="div_justificar_'+kwargs['pk']+'" style="display:none;"><label>Indique con que instrumento legal en vigencia se relaciona su aporte</label>' 311 campo += '<textarea class="form-control" id="respuesta_justificar_'+kwargs['pk']+'" name="consulta_respuesta_justificar_'+str(pregunta.id)+'">' 312 campo += '</textarea></div>' 313 valores[pregunta.id] = {'label':label,'field':campo} 314 kwargs['preguntas'] = valores 315 return super(ParticipacionSimpleCreate, self).get_context_data(**kwargs) 316 317 def post(self,request,pk,id_objetivo): 318 """! 319 Metodo que sobreescribe el post del formulario 320 321 @author Rodrigo Boet (rboet at cenditel.gob.ve) 322 @copyright GNU/GPLv2 323 @date 20-03-2017 324 @param self <b>{object}</b> Objeto que instancia la clase 325 @param request <b>{object}</b> Objeto que instancia la petición 326 @param pk <b>{int}</b> Recibe el id de la consulta 327 @param id_ente <b>{int}</b> Recibe el id del ente 328 @return Retorna los datos de contexto 329 """ 330 data = dict(request.POST) 331 del data['csrfmiddlewaretoken'] 332 if self.request.is_ajax(): 333 for key in data.keys(): 334 parent_id = key.split("_")[-1] 335 if 'sino' in key: 336 value = True if data[key][0] == 'Si' else False 337 justify_id = 'consulta_respuesta_justificar_'+str(parent_id) 338 self.crear_respuesta_sino(parent_id,value,id_objetivo,self.request.user.id) 339 if(not value and justify_id in data.keys()): 340 respuesta = data[justify_id][0] 341 self.crear_respuesta_abierta(parent_id,respuesta,id_objetivo,self.request.user.id,True) 342 elif 'radio' in key or 'check' in key: 343 for value in data[key]: 344 self.crear_respuesta_opciones(value,id_objetivo,self.request.user.id) 345 return JsonResponse({"code":True}) 346 return redirect(reverse_lazy('participacion_busqueda',kwargs={'pk':pk})) 347 348 def crear_respuesta_sino(self,parent_id,value,id_objetivo,user_id): 349 """! 350 Metodo para crear una respuesta de si/no 351 352 @author Rodrigo Boet (rboet at cenditel.gob.ve) 353 @copyright GNU/GPLv2 354 @date 27-03-2017 355 @param self <b>{object}</b> Objeto que instancia la clase 356 @param parent_id <b>{int}</b> Recibe el número del id del padre 357 @param value <b>{bool}</b> Recibe el valor de la respuesta 358 @param id_objetivo <b>{int}</b> Recibe el id del objetivo 359 @param user_id <b>{int}</b> Recibe el id del user 360 @return Retorna los datos de contexto 361 """ 362 user = User.objects.get(id=user_id) 363 parent = Pregunta.objects.get(pk=parent_id) 364 respuesta = RespuestaSino() 365 respuesta.pregunta = parent 366 respuesta.respuesta = value 367 respuesta.user = user 368 respuesta.save() 369 370 def crear_respuesta_opciones(self,parent_id,id_objetivo,user_id): 371 """! 372 Metodo para crear una respuesta de selección simple y múltiple 373 374 @author Rodrigo Boet (rboet at cenditel.gob.ve) 375 @copyright GNU/GPLv2 376 @date 28-03-2017 377 @param self <b>{object}</b> Objeto que instancia la clase 378 @param parent_id <b>{int}</b> Recibe el número del id del padre 379 @param id_objetivo <b>{int}</b> Recibe el id del objetivo 380 @param user_id <b>{int}</b> Recibe el id del user 381 @return Retorna los datos de contexto 382 """ 383 user = User.objects.get(id=user_id) 384 parent = Opcion.objects.get(pk=parent_id) 385 respuesta = RespuestaOpciones() 386 respuesta.opcion = parent 387 respuesta.user = user 388 respuesta.save() -
static/js/funciones.js
r38855e2 rbcf369a 497 497 $('.btn-primary').attr('disabled',true); 498 498 var form = $("#encuesta_form"); 499 var routes = $(location).attr('pathname').split('/') 500 var pk = routes[routes.length-2] 501 var obj = routes[routes.length-1] 499 var routes = $(location).attr('pathname').split('/'); 500 if (routes.length==4) { 501 var pk = routes[routes.length-2]; 502 var obj = routes[routes.length-1]; 503 } 504 else{ 505 var pk = routes[routes.length-1]; 506 var obj = pk; 507 } 502 508 var participacion; 503 509 $.get('/participacion/ajax/validar-participacion?consulta='+pk+'&objetivo='+obj) … … 506 512 participacion = response.participacion 507 513 if (participacion) { 508 bootbox.alert("Ya participó p or este objetivo para esta consulta <br>Será direccionado en 4 segundos");514 bootbox.alert("Ya participó para esta consulta <br>Será direccionado en 4 segundos"); 509 515 setTimeout(function(){ 510 $(location).attr('href', $(location).attr('origin')+'/participacion -busqueda/'+pk)516 $(location).attr('href', $(location).attr('origin')+'/participacion') 511 517 },4000); 512 518 } … … 521 527 bootbox.alert("Se registró su participación con éxito <br>Será direccionado en 4 segundos"); 522 528 setTimeout(function(){ 523 $(location).attr('href', $(location).attr('origin')+'/participacion -busqueda/'+pk)529 $(location).attr('href', $(location).attr('origin')+'/participacion') 524 530 },4000); 525 531 } … … 868 874 habilitar(valor,'CO','id_colectivo','readonly'); 869 875 } 876 877 function medir_caracters(obj) { 878 var span = $(obj).parent().find('#longitud span'); 879 span.text($(obj).val().length); 880 }
Nota: Vea TracChangeset
para ayuda en el uso del visor de conjuntos de cambios.