def test_elecciones_para_mesa(db): e1, e2, e3 = EleccionFactory.create_batch(3) e4 = EleccionFactory(activa=False) m1 = MesaFactory(eleccion=[e1, e2]) m2 = MesaFactory(eleccion=[e1, e2, e4]) m3 = MesaFactory(eleccion=[e1]) m4 = MesaFactory(eleccion=[e4]) m5 = MesaFactory(eleccion=[e1, e2]) # no hay elecciones comunes a todas las mesas assert list( Eleccion.para_mesas([m1, m2, m3, m4, m5]).order_by('id') ) == [] # no hay elecciones comunes a todas las mesas assert list( Eleccion.para_mesas([m1, m2, m3, m5]).order_by('id') ) == [e1] assert list( Eleccion.para_mesas([m1, m2, m5]).order_by('id') ) == [e1, e2] assert list( Eleccion.para_mesas([m1, m3]).order_by('id') ) == [e1] assert list( Eleccion.para_mesas([m2, m4]).order_by('id') ) == []
def mesas_asignadas(self): eleccion = Eleccion.actual() if self.es_general: return Mesa.objects.filter( eleccion=eleccion, lugar_votacion__asignacion__fiscal=self ).order_by('numero') return Mesa.objects.filter(eleccion=eleccion, asignacion__fiscal=self).order_by('numero')
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['eleccion'] = Eleccion.actual() if self.kwargs.get('tipo') == 'de_mesa': context['mesa'] = self.get_asignable() else: context['escuela'] = self.get_asignable() return context
def cargar_resultados(request, eleccion_id, mesa_numero): fiscal = get_object_or_404(Fiscal, user=request.user) def fix_opciones(formset): # hack para dejar sólo la opcion correspondiente a cada fila # se podria hacer "disabled" pero ese caso quita el valor del # cleaned_data y luego lo exige por ser requerido. for i, (opcion, form) in enumerate(zip(Eleccion.opciones_actuales(), formset), 1): form.fields['opcion'].choices = [(opcion.id, str(opcion))] form.fields['opcion'].widget.attrs['tabindex'] = 99 + i form.fields['votos'].widget.attrs['tabindex'] = i # si la opcion es obligatoria, se llenan estos campos if opcion.obligatorio: form.fields['votos'].required = True if i == 1: form.fields['votos'].widget.attrs['autofocus'] = True mesa = get_object_or_404(Mesa, eleccion__id=eleccion_id, numero=mesa_numero) data = request.POST if request.method == 'POST' else None qs = VotoMesaReportado.objects.filter(mesa=mesa, fiscal=fiscal) initial = [{'opcion': o} for o in Eleccion.opciones_actuales()] formset = VotoMesaReportadoFormset(data, queryset=qs, initial=initial) fix_opciones(formset) is_valid = False if qs: formset.convert_warnings = True # monkepatch if request.method == 'POST' or qs: is_valid = formset.is_valid() # eleccion = Eleccion.objects.last() if is_valid: for form in formset: vmr = form.save(commit=False) vmr.mesa = mesa vmr.fiscal = fiscal # vmr.eleccion = eleccion vmr.save() if formset.warnings: messages.warning(request, 'Guardado con inconsistencias') else: messages.success(request, 'Guardado correctamente') return redirect('elegir-acta-a-cargar') return render(request, "fiscales/carga.html", { 'formset': formset, 'object': mesa })
def fix_opciones(formset): # hack para dejar sólo la opcion correspondiente a cada fila # se podria hacer "disabled" pero ese caso quita el valor del # cleaned_data y luego lo exige por ser requerido. for i, (opcion, form) in enumerate(zip(Eleccion.opciones_actuales(), formset), 1): form.fields['opcion'].choices = [(opcion.id, str(opcion))] form.fields['opcion'].widget.attrs['tabindex'] = 99 + i form.fields['votos'].required = True form.fields['votos'].widget.attrs['tabindex'] = i if i == 1: form.fields['votos'].widget.attrs['autofocus'] = True
def cargar_resultados(request, asignacion_id): def fix_opciones(formset): # hack para dejar sólo la opcion correspondiente a cada fila # se podria hacer "disabled" pero ese caso quita el valor del # cleaned_data y luego lo exige por ser requerido. for i, (opcion, form) in enumerate(zip(Eleccion.opciones_actuales(), formset), 1): form.fields['opcion'].choices = [(opcion.id, str(opcion))] form.fields['opcion'].widget.attrs['tabindex'] = 99 + i form.fields['votos'].required = True form.fields['votos'].widget.attrs['tabindex'] = i if i == 1: form.fields['votos'].widget.attrs['autofocus'] = True asignacion = get_object_or_404(AsignacionVoluntario, id=asignacion_id, voluntario=request.user.voluntario ) mesa, voluntario = asignacion.mesa, asignacion.voluntario data = request.POST if request.method == 'POST' else None qs = VotoMesaReportado.objects.filter(mesa=mesa, voluntario=voluntario) initial = [{'opcion': o} for o in Eleccion.opciones_actuales()] formset = VotoMesaReportadoFormset(data, queryset=qs, initial=initial) fix_opciones(formset) is_valid = False if qs: formset.convert_warnings = True # monkepatch if request.method == 'POST' or qs: is_valid = formset.is_valid() # = Eleccion.objects.last() if is_valid: for form in formset: vmr = form.save(commit=False) vmr.mesa = mesa vmr.voluntario = voluntario vmr.save() if formset.warnings: messages.warning(request, 'Guardado con inconsistencias') else: messages.success(request, 'Guardado correctamente') return redirect('inicio') return render(request, "fiscales/carga.html", {'formset': formset, 'object': mesa})
def form_valid(self, form): fiscal = form.save(commit=False) fiscal.tipo = self.kwargs.get('tipo') fiscal = self.verificar_fiscal_existente(fiscal) fiscal.save() asignable = self.get_asignable() eleccion = Eleccion.actual() if asignable.asignacion_actual: asignacion = asignable.asignacion_actual asignacion.fiscal = fiscal asignacion.save() elif isinstance(asignable, LugarVotacion): asignacion = AsignacionFiscalGeneral.objects.create( fiscal=fiscal, lugar_votacion=asignable, eleccion=eleccion) messages.success(self.request, 'Fiscal cargado correctamente') return redirect(asignable.get_absolute_url())
def opciones_actuales(): try: return Eleccion.opciones_actuales().count() except: return 0
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['eleccion'] = Eleccion.actual() return context