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 opciones_actuales(): try: return Eleccion.opciones_actuales().count() except: return 0