from otree.api import *
import simplejson
from otree.api import Bot, SubmissionMustFail
doc = """
Your app description
"""
class Constants(BaseConstants):
name_in_url = 'sedapal_surv'
players_per_group = None
num_rounds = 1
premio = 200
instructions_template= 'sedapal_survey/instructions.html'
minutos= 10
class Subsession(BaseSubsession):
pass
class Group(BaseGroup):
pass
class Player(BasePlayer):
consentimiento=models.BooleanField(label="Si desea participar, responda sí para continuar.")
"""
Preguntas sobre el encuestado
"""
edad=models.IntegerField(
label="¿Cuál es su edad en años?",
)
informado=models.BooleanField(
label="¿Usted está informado(a) sobre las decisiones de gasto del hogar?"
)
menor_de_edad=models.BooleanField(
initial=False
)
### vinculo con el jefe del hogar:
vinculo1=models.BooleanField(
blank=True,
initial=False
)
vinculo2=models.BooleanField(
blank=True,
initial=False
)
vinculo3=models.BooleanField(
blank=True,
initial=False
)
vinculo4=models.BooleanField(
blank=True,
initial=False
)
vinculo5=models.BooleanField(
blank=True,
initial=False
)
vinculo6=models.BooleanField(
blank=True,
initial=False
)
vinculo7=models.BooleanField(
blank=True,
initial=False
)
vinculo8=models.BooleanField(
blank=True,
initial=False
)
vinculo9=models.BooleanField(
blank=True,
initial=False
)
otro_vinculo=models.CharField(
blank=True
)
#### género del encuestado:
genero1=models.BooleanField(
blank=True,
initial=False
)
genero2=models.BooleanField(
blank=True,
initial=False
)
genero3=models.BooleanField(
blank=True,
initial=False
)
genero4=models.BooleanField(
blank=True,
initial=False
)
otro_genero=models.CharField(
blank=True,
)
provincia=models.StringField()
distrito=models.StringField()
celular=models.IntegerField(
label="Indique su número de célular (debe contener 9 dígitos)"
)#No debería incluir espacios.
correo=models.StringField(
label="Indique su correo electrónico (@gmail.com, @hotmail.com, @outlook.com, etc.) (opcional)",
blank=True
)
"""
Jefe(a) de hogar
"""
edad_jefe_hogar=models.IntegerField()
### género del jefe del hogar:
genero_jefe1=models.BooleanField(
blank=True,
initial=False
)
genero_jefe2=models.BooleanField(
blank=True,
initial=False
)
genero_jefe3=models.BooleanField(
blank=True,
initial=False
)
genero_jefe4=models.BooleanField(
blank=True,
initial=False
)
otro_genero_jefe=models.CharField(
blank=True
)
grado_estudios_jefe_hogar=models.StringField(
label="¿Cuál es el último grado de estudio completado por el(la) jefe(a) de hogar?",
choices=[
"Primaria",
"Secundaria",
"Superior no universitaria",
"Superior universitaria",
"Post-grado universitario",
"Ninguno"],
widget=widgets.RadioSelect
)
"""
Demografía
"""
miembros_hogar=models.IntegerField(
label="¿Cuántas personas conforman su hogar?", #tooltip:(Si vive usted solo/a, la respuesta sería '1')
choices=[
[1,"1"],
[2,"2"],
[3,"3"],
[4,"4"],
[5,"5"],
[6,"6"],
[7,"7"],
[8,"8"],
[9,"9"],
[10,"10"],
[11,"Más de 10 personas"]
]
)
cuantos_miembros_5=models.BooleanField(
blank=True,
initial=0
)
cuantos_miembros_6_17=models.BooleanField(
label="De 6 a 17 años",
blank=True,
initial=0
)
cuantos_miembros_18_35=models.BooleanField(
label="De 18 a 35 años",
blank=True,
initial=0
)
cuantos_miembros_36_64=models.BooleanField(
label="De 36 a 64 años",
blank=True,
initial=0
)
cuantos_miembros_65=models.BooleanField(
label="De 65 años a más",
blank=True,
initial=0
)
"""
Dependencia y NSE
"""
cuantos_trabajaron=models.IntegerField(
choices=[
[1,"1"],
[2,"2"],
[3,"3"],
[4,"4"],
[5,"5"],
[6,"6"],
[7,"7"],
[8,"8"],
[9,"9"],
[10,"10"],
[11,"Más de 10 personas"]
]
)
""""
Vivienda
"""
numero_suministro=models.IntegerField()
numero_suministro_2=models.IntegerField()
numero_sector=models.StringField()
### Tipo de vivienda:
vivienda1=models.BooleanField(
blank=True,
initial=False
)
vivienda2=models.BooleanField(
blank=True,
initial=False
)
vivienda3=models.BooleanField(
blank=True,
initial=False
)
vivienda4=models.BooleanField(
blank=True,
initial=False
)
vivienda5=models.BooleanField(
blank=True,
initial=False
)
vivienda6=models.BooleanField(
blank=True,
initial=False
)
otro_vivienda=models.CharField(
blank=True
)
hogares=models.IntegerField(
label="¿Cuántos hogares ocupan esta vivienda?",
choices=[
[1,"1"],
[2,"2"],
[3,"3"],
[4,"4"],
[5,"Más de 4"]
]
)
habitaciones=models.IntegerField(
label="¿Cuántas habitaciones tiene la vivienda? No considere baño, cocina, pasadizos, garaje ni habitaciones utilizadas por otros hogares.",
choices=[
[1,"1"],
[2,"2"],
[3,"3"],
[4,"4"],
[5,"5"],
[6,"6"],
[7,"7"],
[8,"8"],
[9,"9"],
[10,"10"],
[11,"Más de 10"]
]
)
baños=models.IntegerField(
label="¿Cuántos baños tiene su vivienda?",
choices=[
[1,"1"],
[2,"2"],
[3,"3"],
[4,"4"],
[5,"5"],
[6,"Más de 5"]
]
)
#adiciones de la vivienda: Puede seleccionar múltiples opciones o la opción "ninguna"
adiciones_1=models.BooleanField(
label="Terma o calentador eléctrico",
blank=True,
initial=0
)
adiciones_2=models.BooleanField(
label="Terma o calentador a gas",
blank=True,
initial=0
)
adiciones_3=models.BooleanField(
label="Lavadora eléctrica de ropa",
blank=True,
initial=0
)
adiciones_4=models.BooleanField(
label="Lavadora eléctrica de platos",
blank=True,
initial=0
)
adiciones_5=models.BooleanField(
label="Jardín",
blank=True,
initial=0
)
adiciones_6=models.BooleanField(
label="Ninguna",
blank=True,
initial=0
)
# Consumo y hábitos: Hábitos de ahorro de agua
consumo_afirmacion = models.StringField(
label = "¿Está de acuerdo con la siguiente afirmación?: “Es importante que los hogares ahorren agua.”",
widget = widgets.RadioSelect,
choices = [
'Sí',
'No',
'No sé'
]
)
consumo_afirmacion2 = models.IntegerField(
label ="2. De 100 vecinos en su distrito, ¿cuántos cree que estarían de acuerdo con la siguiente afirmación?:“Es importante que los hogares ahorren agua.”",
min=0,
max=100
)
ahorro_agua1 = models.StringField(
label = "Actualmente, ¿los miembros de su hogar ahorran agua?",
widget = widgets.RadioSelect,
choices = [
'Sí',
'No'
]
)
ahorro_agua2 = models.StringField(
label = "Hace 3 años, ¿los miembros de su hogar ahorraban agua?",
widget = widgets.RadioSelect,
choices = [
'Sí',
'No'
]
)
ahorro_agua3 = models.IntegerField(
label = "Actualmente, de cada 100 hogares de su distrito, ¿cuántos cree que ahorran agua?",
min=0,
max=100
)
ahorro_agua4 = models.IntegerField(
label = "En su opinión, de cada 100 hogares de su distrito, cuántos ahorraban agua hace 3 años?",
min=0,
max=100
)
consumo_agua = models.IntegerField(
label = "1. Suponga que ordenamos a los hogares de su distrito según su consumo de agua por persona y les ponemos un número, siendo 1 para los hogares que menos consumen y 100 para los que más consumen. ¿Qué número le pondría a su hogar?",
min=1,
max=100
)
consumo_habitos1 = models.BooleanField(
label = "Tomo duchas de máximo 5 minutos",
blank = True,
default = 0
)
consumo_habitos2 = models.BooleanField(
label = "Reutilizo el agua que uso al cocinar",
blank = True,
default = 0
)
consumo_habitos3 = models.BooleanField(
label = "Cierro el caño al lavarme los dientes",
blank = True,
default = 0
)
consumo_habitos4 = models.BooleanField(
label = "Cierro el caño mientras me enjabono en la ducha.",
blank = True,
default = 0
)
consumo_habitos5 = models.BooleanField(
label = "Cierro el caño mientras lavo utensilios y ollas.",
blank = True,
default = 0
)
consumo_habitos6 = models.BooleanField(
label = "Reúso el agua del lavado de la ropa.",
blank = True,
default = 0
)
consumo_habitos7 = models.BooleanField(
label = "Cierro la llave general cuando me ausento de casa varios días.",
blank = True,
default = 0
)
consumo_habitos8 = models.BooleanField(
label = "Otro",
blank = True,
default = 0
)
consumo_habitos9 = models.BooleanField(
label = "Ninguno",
blank = True,
default = 0
)
consumo_habitos8_otro = models.CharField(
label = "Otro: (especifique)",
blank = True
)
consumo_inversion_ahorrar = models.StringField(
label = "En los últimos 6 meses, ¿ha comprado o instalado algún dispositivo con el objetivo de ahorrar agua en su hogar?",
widget = widgets.RadioSelect,
choices = [
'Sí',
'No',
]
)
motivacion1 = models.BooleanField(
label = "Reducir el monto que paga por el servicio y ahorrar dinero.",
blank = True,
default = 0
)
motivacion2 = models.BooleanField(
label = "Proteger el ambiente y los ecosistemas.",
blank = True,
default = 0
)
motivacion3 = models.BooleanField(
label = "Permitir que otras personas tengan agua ahora o en el futuro.",
blank = True,
default = 0
)
motivacion4 = models.BooleanField(
label = "Para que mi hogar pueda tener agua en el futuro.",
blank = True,
default = 0
)
motivacion5 = models.BooleanField(
label = "Proteger el ambiente del planeta.",
blank = True,
default = 0
)
motivacion6 = models.BooleanField(
label = "Proteger el ambiente del país.",
blank = True,
default = 0
)
motivacion7 = models.BooleanField(
label = "No me interesa ahorrar agua.",
blank = True,
default = 0
)
motivacion8 = models.BooleanField(
label = "Otra motivación (especificar).",
blank = True,
default = 0
)
motivacion8_otro = models.CharField(
label = "Si marcó Otro especifíquelo:",
blank = True,
)
soles_ahorrados = models.StringField(
label = "¿Cuántos soles al mes cree que ahorraría al reducir su tiempo de ducha en 5 minutos?",
choices = [str(i)+" soles" for i in range(16)]+["Más de 15 soles"]
)
reminder = models.StringField(
label = "¿Qué tanto le interesaría recibir recordatorios sobre el ahorro de agua? (1=no estoy nada interesado; 5=estoy extremadamente interesado)",
choices = ["1 (no estoy nada interesado)","2","3","4","5 (estoy extremadamente interesado)"]
)
####### Pago del servicio de agua #########
#checkbox
agua_pago_servicio1= models.BooleanField(
label = "No tenemos el dinero suficiente para pagar",
blank = True,
default = 0
)
agua_pago_servicio2= models.BooleanField(
label = "Necesitan el dinero para otras cosas más urgentes",
blank = True,
default = 0
)
agua_pago_servicio3= models.BooleanField(
label = "Nos olvidamos de la fecha de vencimiento",
blank = True,
default = 0
)
agua_pago_servicio4= models.BooleanField(
label = "Es muy difícil acercarse al lugar de pago",
blank = True,
default = 0
)
agua_pago_servicio5= models.BooleanField(
label = "Otro",
blank = True,
default = 0
)
agua_pago_servicio6= models.BooleanField(
label = "Mi hogar no se atrasa en el pago del recibo",
blank = True,
default = 0
)
agua_pago_servicio5_otro= models.CharField(
label = "Si marcó Otro especifíquelo:",
blank = True,
)
####### FIN Pago del servicio de agua #########
abastecimiento1 = models.BooleanField(
label = "Agua por tubería dentro de la vivienda",
blank = True,
default =0
)
abastecimiento2 = models.BooleanField(
label = "Agua por tubería fuera de la vivienda pero dentro del edificio o quinta",
blank = True,
default =0
)
abastecimiento3 = models.BooleanField(
label = "Pilón o pileta de uso público",
blank = True,
default =0
)
abastecimiento4 = models.BooleanField(
label = "Camión o cisterna",
blank = True,
default =0
)
abastecimiento5 = models.BooleanField(
label = "Pozo",
blank = True,
default =0
)
abastecimiento6 = models.BooleanField(
label = "Agua potable del vecino",
blank = True,
default =0
)
abastecimiento7 = models.BooleanField(
label = "Otro",
blank = True,
default =0
)
abastecimiento7_otro = models.CharField(
label = 'Si seleccionó Otro escríbalo aquí:',
blank =True
)
recibo_otroshogares = models.StringField(
label = "¿El recibo de agua que ha ingresado considera el consumo de otros hogares?",
widget = widgets.RadioSelect,
choices = [
'Sí',
'No',
'No sé'
]
)
pago_mes = models.IntegerField(
label = "¿Cuánto paga su hogar en promedio por agua al mes (soles)? Solo ingrese números. Redondee a soles.",
min=0,
max=10000
)
instalaciones1 = models.BooleanField(
label = "Tanque bajo o reservorio",
blank=True,
default =0
)
instalaciones2 = models.BooleanField(
label = "Tanque alto o elevado",
blank=True,
default =0
)
instalaciones3 = models.BooleanField(
label = "Cisterna",
blank=True,
default =0
)
instalaciones4 = models.BooleanField(
label = "Bomba de agua",
blank=True,
default =0
)
instalaciones5 = models.BooleanField(
label = "Ninguna",
blank=True,
default =0
)
dispone_agua = models.IntegerField(
label = "En general, ¿cuántos días a la semana dispone de agua en los caños de su casa?",
choices = [1,2,3,4,5,6,7]
)
dispone_agua2 = models.IntegerField(
label = "Considerando los días en los que dispone de agua en los caños de su casa, ¿cuántas horas tiene agua?",
choices = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
)
cortes_servicio = models.StringField(
label = "En los últimos 6 meses ¿usted ha sufrido de cortes del servicio de agua en su horario de abastecimiento? No considere cortes por demora en el pago.",
widget=widgets.RadioSelect,
choices = [
'Sí',
'No',
'No recuerdo',
]
)
### FIN de SERVICIO DE AGUA #####
##### Cualidades del servicio #####
atributo1 = models.IntegerField(
label = "La calidad del servicio",
widget=widgets.RadioSelect,
choices = [1,2,3,4,5]
)
atributo2 = models.IntegerField(
label = "El número de días y horas que dispone de agua",
widget=widgets.RadioSelect,
choices = [1,2,3,4,5]
)
atributo3 = models.IntegerField(
label = "La atención al cliente ",
widget=widgets.RadioSelect,
choices = [1,2,3,4,5]
)
pago_consumo = models.StringField(
label = "¿Qué tan justo considera que es el pago asociado a su consumo?",
widget=widgets.RadioSelect,
choices = [
'Muy Injusto',
'Injusto',
'Justo',
'Muy justo',
'Prefiero no indicar'
]
)
pago_consumo2 = models.StringField(
label = "¿Qué tan justo considera que es el cargo por demora en pago?",
widget=widgets.RadioSelect,
choices = [
'Muy Injusto',
'Injusto',
'Justo',
'Muy justo',
'Prefiero no indicar'
]
)
servicio_mejor_dos = models.StringField(
label = "¿Está de acuerdo con la siguiente afirmación: “El servicio de agua potable en mi hogar ha mejorado en los últimos dos años”?",
widget=widgets.RadioSelect,
choices = [
'No, la calidad del servicio ha empeorado mucho',
'No, la calidad del servicio ha empeorado un poco',
'Se ha mantenido',
'Sí, la calidad del servicio ha mejorado un poco',
'Sí, la calidad del servicio ha mejorado mucho ',
'No sé'
]
)
dispuesto_riesgos = models.IntegerField(
label = "Indique qué tan dispuesto(a) está o no está a tomar riesgos.",
min=0,
max=10
)
disposicion1 = models.IntegerField(
label = "Renunciar a algo que es beneficioso para usted actualmente a fin de obtener mayores beneficios en el futuro.",
min=0,
max=10
)
disposicion2 = models.IntegerField(
label = "Castigar a alguien que lo(a) trata a usted injustamente, incluso cuando existan riesgos para usted de sufrir consecuencias personales.",
min=0,
max=10
)
disposicion3 = models.IntegerField(
label = "Castigar a alguien que trata a los demás injustamente, incluso cuando existan riesgos para usted de sufrir consecuencias personales.",
min=0,
max=10
)
disposicion4 = models.IntegerField(
label = "Hacer donaciones a causas benéficas sin esperar nada a cambio.",
min=0,
max=10
)
describe1 = models.IntegerField(
label = "Cuando alguien me hace un favor, estoy dispuesto a devolverlo.",
min=0,
max=10
)
describe2 = models.IntegerField(
label = "Si me tratan muy injustamente, tomaré revancha en la primera ocasión, incluso aunque deba pagar un costo por ello.",
min=0,
max=10
)
describe3 = models.IntegerField(
label = "Supongo que la gente tiene sólo las mejores intenciones.",
min=0,
max=10
)
describe4 = models.IntegerField(
label = "Soy bueno(a) en matemáticas.",
min=0,
max=10
)
describe5 = models.IntegerField(
label = "Tiendo a posponer las tareas, incluso cuando sé que sería mejor hacerlas de inmediato.",
min=0,
max=10
)
##### FIN Cualidades del servicio #####
def provincia_choices(Player):
with open('sedapal_survey/choices_survey.json','r',encoding='utf-8') as json_file:
data=simplejson.load(json_file)
choices=[]
for x in data['distritos']:
choices.append(x)
dicts=[]
for ele in choices:
for key, value in ele.items():
dicts.append(key)
return dicts
def distrito_choices(Player):
with open('sedapal_survey/choices_survey.json','r',encoding='utf-8') as json_file:
data=simplejson.load(json_file)
choices=[]
for x in data['distritos']:
choices.append(x)
dicts=[]
for ele in choices:
for key, value in ele.items():
dicts.append(value)
dicts2=dicts[0]+dicts[1]+dicts[2]
return dicts2
def edad_choices(Player):
with open('sedapal_survey/choices_survey.json','r',encoding='utf-8') as json_file:
data=simplejson.load(json_file)
data1=data['edad']
for ele in data1:
for key, value in ele.items():
dicts=value
dictlist=[]
x=1
for values in dicts.keys():
temp = [x,values]
x=x+1
dictlist.append(temp)
return dictlist
def edad_jefe_hogar_choices(Player):
with open('sedapal_survey/choices_survey.json','r',encoding='utf-8') as json_file:
data=simplejson.load(json_file)
data1=data['edad']
for ele in data1:
for key, value in ele.items():
dicts=value
dictlist=[]
x=1
for values in dicts.keys():
temp = [x,values]
x=x+1
dictlist.append(temp)
return dictlist
#PAGES:
class Introduccion(Page):
form_model='player'
form_fields=['consentimiento']
class dropout(Page):
def is_displayed(player):
return not(player.consentimiento)
class Hogar_y_Vivienda_drop_edad(Page):
form_model='player'
form_fields=['edad','informado']
class dropout_edad_informado(Page):
def is_displayed(player):
if player.edad<18:
player.menor_de_edad=True
return player.menor_de_edad or not(player.informado)
class Hogar_y_Vivienda_encuestado(Page):
form_model='player'
form_fields=[
'vinculo1',
'vinculo2',
'vinculo3',
'vinculo4',
'vinculo5',
'vinculo6',
'vinculo7',
'vinculo8',
'vinculo9',
'otro_vinculo',
'genero1',
'genero2',
'genero3',
'genero4',
'otro_genero',
'provincia',
'distrito'
]
def error_message(player,values):
vinculo = ['vinculo1','vinculo2','vinculo3','vinculo4','vinculo5','vinculo6','vinculo7','vinculo8','vinculo9']
genero = ['genero1','genero2','genero3','genero4']
counter1 = 0
counter2 = 0
for x in vinculo:
if values[x] != 0:
counter1+=1
for x in genero:
if values[x] != 0:
counter2+=1
if counter1>1:
return 'Debe marcar solo una opción en la primera pregunta. Verifique, por favor.'
elif counter2>1:
return 'Debe marcar solo una opción en la segunda pregunta. Verifique, por favor.'
elif values['vinculo9']==1 and values['otro_vinculo'] == "":
return 'Tiene que llenar el espacio en blanco donde especifica su vínculo con el(la) jefe(a) del hogar, ya que marcó "Otro". Verifique, por favor.'
elif values['genero4']==1 and values['otro_genero'] == "":
return 'Tiene que llenar el espacio en blanco donde especifica su género, ya que marcó "Otro". Verifique, por favor.'
elif counter1 == 0:
return 'Debe marcar al menos una opción en la primera pregunta. Verifique, por favor.'
elif counter2 == 0:
return 'Debe marcar al menos una opción en la segunda pregunta. Verifique, por favor.'
elif (values['vinculo9'] == 0) and (values['otro_vinculo'] != ''):
return 'Si escribes en el espacio en blanco debes marcar la opcion de "Otro"'
elif (values['genero4'] == 0) and (values['otro_genero'] != ''):
return 'Si escribes en el espacio en blanco debes marcar la opcion de "Otro"'
elif values['distrito'].startswith('-'):
return 'En la opción de "distrito", seleccione una opción válida, por favor.'
elif values['provincia'] == "Lima" and (values['distrito'] == "Bellavista" or values['distrito'] == "Carmen de la Legua Reynoso" or values['distrito'] == "La Perla" or values['distrito'] == "La Punta" or values['distrito'] == "Ventanilla" or values['distrito'] == "Mi Perú") :
return 'Si ha marcado en la opción de "provincia": "Lima", marque un distrito que sea parte de Lima, por favor.'
elif values['provincia'] == "Callao" and values['distrito'] != "Bellavista" and values['distrito'] != "Carmen de la Legua Reynoso" and values['distrito'] != "La Perla" and values['distrito'] != "La Punta" and values['distrito'] != "Ventanilla" and values['distrito'] != "Mi Perú" :
return 'Si ha marcado en la opción de "provincia": "Callao", marque un distrito que sea parte de Callao, por favor.'
elif values['provincia'] == "No vivo en Lima Metropolitana ni Callao" and values['distrito'] != "No vivo en Lima Metropolitana ni Callao":
return 'Si ha marcado en la opción de "provincia": "No vivo en Lima Metropolitana ni Callao", marque en la opción de "distrito": "No vivo en Lima Metropolitana ni Callao", por favor.'
elif values['provincia'] != "No vivo en Lima Metropolitana ni Callao" and values['distrito'] == "No vivo en Lima Metropolitana ni Callao":
return 'Si ha marcado en la opción de "distrito": "No vivo en Lima Metropolitana ni Callao", marque en la opción de "provincia": "No vivo en Lima Metropolitana ni Callao", por favor.'
class dropout_distrito(Page):
def is_displayed(player):
return player.distrito=="No vivo en Lima Metropolitana ni Callao"
class Hogar_y_Vivienda_celular(Page):
form_model='player'
form_fields=[
'celular',
'correo']
def error_message(player,values):
if values['celular'] < 900000000 or values['celular'] > 999999999:
return 'Un número de celular de Perú tiene 9 dígitos y empieza con "9". Verifique, por favor.'
elif "@" not in values['correo'] and values['correo']!="":
return 'Un correo electrónico debe seguir el patrón "@abc.com". Verifique, por favor'
class Hogar_y_Vivienda_jefehogar(Page):
form_model='player'
def get_form_fields(player):
if player.vinculo1 == True:
return ['grado_estudios_jefe_hogar']
else:
return [
'edad_jefe_hogar',
'genero_jefe1',
'genero_jefe2',
'genero_jefe3',
'genero_jefe4',
'otro_genero_jefe',
'grado_estudios_jefe_hogar']
def vars_for_template(player):
number=0
if player.vinculo1 == True:
number=1
return dict(number=number)
def error_message(player,values):
try:
genero = ['genero_jefe1','genero_jefe2','genero_jefe3','genero_jefe4']
counter = 0
for x in genero:
if values[x] != 0:
counter+=1
if counter>1:
return 'Debe marcar solo una opción en la segunda pregunta. Verifique, por favor.'
elif values['genero_jefe4']==1 and values['otro_genero_jefe'] == "":
return 'Tiene que llenar el espacio en blanco donde especifica el género de el(la) jefe(a) del hogar, ya que marcó "Otro". Verifique, por favor.'
elif counter==0:
return 'Debe marcar al menos una opción en la segunda pregunta. Verifique, por favor.'
elif (values['genero_jefe4'] == 0) and (values['otro_genero_jefe'] != ''):
return 'Si escribes en el espacio en blanco debes marcar la opcion de "Otro"'
except KeyError:
pass
class Hogar_y_Vivienda_demografia(Page):
form_model='player'
form_fields=[
'miembros_hogar',
'cuantos_miembros_5',
'cuantos_miembros_6_17',
'cuantos_miembros_18_35',
'cuantos_miembros_36_64',
'cuantos_miembros_65']
def error_message(player,values):
miembros_hogar = ['cuantos_miembros_5','cuantos_miembros_6_17','cuantos_miembros_18_35','cuantos_miembros_36_64','cuantos_miembros_65']
counter = 0
for miembros in miembros_hogar:
if values[miembros] != 0:
counter+=1
if counter == 0:
return 'Debe marcar al menos una opción en la segunda pregunta. Verifique, por favor.'
class Hogar_y_Vivienda_suministro_sector(Page):
form_model='player'
form_fields=[
'numero_suministro',
'numero_suministro_2',
'numero_sector',
]
def error_message(player,values):
if len(str(values['numero_suministro'])) != 7:
return 'El número de suministro debe contener 7 dígitos previos al guión. Verifique, por favor.'
elif len(str(values['numero_suministro_2'])) != 1:
return 'El número de suministro debe contener 1 dígito posterior al guión. Verifique, por favor.'
elif values['numero_sector'].isnumeric() == False :
return 'El número de sector debe contener números. Verifique, por favor.'
elif len(values['numero_sector']) != 3 or values['numero_sector'].isnumeric() == False:
return 'El número de sector debe contener 3 dígitos. Verifique, por favor.'
class Hogar_y_Vivienda_NSE(Page):
form_model='player'
form_fields=['cuantos_trabajaron']
class Hogar_y_Vivienda_vivienda(Page):
form_model='player'
form_fields=[
'vivienda1',
'vivienda2',
'vivienda3',
'vivienda4',
'vivienda5',
'vivienda6',
'otro_vivienda',
'hogares',
'habitaciones',
'baños',
'adiciones_1',
'adiciones_2',
'adiciones_3',
'adiciones_4',
'adiciones_5',
'adiciones_6']
def error_message(player,values):
vivienda=['vivienda1','vivienda2','vivienda3','vivienda4','vivienda5','vivienda6']
adiciones = ['adiciones_1','adiciones_2','adiciones_3','adiciones_4','adiciones_5','adiciones_6']
counter1 = 0
for x in vivienda:
if values[x] != False:
counter1+=1
counter2 = 0
for x in adiciones:
if values[x] != 0:
counter2+=1
if counter1 > 1:
return 'Debe marcar solo una opción en la primera pregunta. Verifique, por favor.'
elif values['vivienda6']==True and values['otro_vivienda'] == "":
return 'Tiene que llenar el espacio en blanco donde especifica su tipo de vivienda, ya que marcó "Otro". Verifique, por favor.'
elif (values['adiciones_6'] == 1) and (counter2 != 1):
return 'En la última pregunta si selecciona "Ninguna", no puede seleccionar otra opción al mismo tiempo. Verifique, por favor.'
elif (values['vivienda6'] == 0) and (values['otro_vivienda'] != ''):
return 'Si escribes en el espacio en blanco debes marcar la opcion de "Otro"'
elif counter1 == 0:
return 'Debe marcar al menos una opción en la primera pregunta. Verifique, por favor.'
elif counter2 == 0:
return 'Debe marcar al menos una opción en la última pregunta. Verifique, por favor.'
class Servicio_agua1(Page):
form_model = 'player'
form_fields = [
'abastecimiento1',
'abastecimiento2',
'abastecimiento3',
'abastecimiento4',
'abastecimiento5',
'abastecimiento6',
'abastecimiento7',
'abastecimiento7_otro',
'recibo_otroshogares',
'pago_mes',
]
def error_message(player,values):
abastecimientos = [values['abastecimiento'+str(i)] for i in range(1,8)]
if sum(abastecimientos) == 0 :
return 'La primera pregunta es obligatoria, porfavor responderla'
if (values['abastecimiento7'] == 1) and (values['abastecimiento7_otro'] == ''):
return 'Si selecciona "Otro", debe especificarlo en el espacio en blanco'
if (values['abastecimiento7'] == 0) and (values['abastecimiento7_otro'] != ''):
return 'Si escribes en el espacio en blanco debes marcar la opcion de "Otro"'
class Servicio_agua2(Page):
form_model = 'player'
form_fields = [
'instalaciones1',
'instalaciones2',
'instalaciones3',
'instalaciones4',
'instalaciones5',
'dispone_agua',
'dispone_agua2',
'cortes_servicio',
]
def error_message(player,values):
instalaciones = [values['instalaciones'+str(i)] for i in range(1,5)]
if (sum(instalaciones) == 0) and (values['instalaciones5'] == 0):
return 'La primera pregunta es obligatoria, porfavor responderla'
if (values['instalaciones5'] == 1) and (sum(instalaciones) != 0):
return 'Si selecciona "Ninguna", no puede seleccionar otra opción al mismo tiempo'
class Cualidades_Servicio(Page):
form_model = 'player'
form_fields = [
'atributo1',
'atributo2',
'atributo3',
'pago_consumo',
'pago_consumo2',
'servicio_mejor_dos',
]
class Consumo_habitos1(Page):
form_model = 'player'
form_fields = [
'consumo_afirmacion',
'consumo_afirmacion2',
]
class Consumo_habitos2(Page):
form_model = 'player'
form_fields = [
'ahorro_agua1',
'ahorro_agua2',
'ahorro_agua3',
'ahorro_agua4',
]
class Consumo_habitos3(Page):
form_model = 'player'
form_fields = [
'consumo_agua',
'consumo_habitos1',
'consumo_habitos2',
'consumo_habitos3',
'consumo_habitos4',
'consumo_habitos5',
'consumo_habitos6',
'consumo_habitos7',
'consumo_habitos8',
'consumo_habitos9',
'consumo_habitos8_otro',
]
def error_message(player,values):
habitos = [values['consumo_habitos'+str(i)] for i in range(1,9)]
if (sum(habitos) == 0) and (values['consumo_habitos9'] == 0):
return 'La segunda pregunta es obligatoria, porfavor responderla'
if (values['consumo_habitos9'] == 1) and (sum(habitos) != 0):
return 'Si selecciona "Ninguna", no puede seleccionar otra opción al mismo tiempo'
if (values['consumo_habitos8'] == 1) and (values['consumo_habitos8_otro'] == ''):
return 'Si selecciona "Otro", debe especificarlo en el espacio en blanco'
if (values['consumo_habitos8'] == 0) and (values['consumo_habitos8_otro'] != ''):
return 'Si escribes en el espacio en blanco debes marcar la opcion de "Otro"'
class Consumo_habitos4(Page):
form_model = 'player'
form_fields = [
'consumo_inversion_ahorrar',
'motivacion1',
'motivacion2',
'motivacion3',
'motivacion4',
'motivacion5',
'motivacion6',
'motivacion7',
'motivacion8',
'motivacion8_otro',
'soles_ahorrados',
'reminder'
]
def error_message(player,values):
motivaciones = [values['motivacion'+str(i)] for i in range(1,9)]
if (sum(motivaciones) == 0):
return 'La segunda pregunta es obligatoria, porfavor responderla'
if sum(motivaciones) > 2:
return 'En la segunda pregunta solo puedes marcar hasta 2 opciones'
if (values['motivacion8'] == 1) and (values['motivacion8_otro'] == ''):
return 'Si selecciona "Otra motivación", debe especificarlo en el espacio en blanco'
if (values['motivacion8'] == 0) and (values['motivacion8_otro'] != ''):
return 'Si escribes en el espacio en blanco debes marcar la opcion de "Otra motivación"'
class Pago_servicio(Page):
form_model = 'player'
form_fields = [
'agua_pago_servicio1',
'agua_pago_servicio2',
'agua_pago_servicio3',
'agua_pago_servicio4',
'agua_pago_servicio5',
'agua_pago_servicio5_otro',
'agua_pago_servicio6'
]
def error_message(player,values):
pago_servicio = [values['agua_pago_servicio'+str(i)] for i in range(1,6)]
if (sum(pago_servicio) == 0) and (values['agua_pago_servicio6'] == 0):
return 'La pregunta es obligatoria, porfavor responderla'
if (sum(pago_servicio)+values['agua_pago_servicio6']) > 2:
return 'Solo puedes marcar hasta 2 opciones'
if (values['agua_pago_servicio6'] == 1) and (sum(pago_servicio) != 0):
return 'Si selecciona "Mi hogar no se atrasa en el pago del recibo", no puede seleccionar otra opción al mismo tiempo'
if (values['agua_pago_servicio5'] == 1) and (values['agua_pago_servicio5_otro'] == ''):
return 'Si marcas "Otro" entonces debes especificarlo en el espacio en blanco'
if (values['agua_pago_servicio5'] == 0) and (values['agua_pago_servicio5_otro'] != ''):
return 'Si escribes en el espacio en blanco debes marcar la opcion de "Otro"'
class Final_encuesta(Page):
pass
class Global_preferences(Page):
form_model = 'player'
form_fields = [
'dispuesto_riesgos',
'disposicion1',
'disposicion2',
'disposicion3',
'disposicion4',
'describe1',
'describe2',
'describe3',
'describe4',
'describe5',
]
page_sequence = [
Introduccion,
dropout,
Hogar_y_Vivienda_drop_edad,
dropout_edad_informado,
Hogar_y_Vivienda_encuestado,
dropout_distrito,
Hogar_y_Vivienda_celular,
Hogar_y_Vivienda_jefehogar,
Hogar_y_Vivienda_demografia,
Hogar_y_Vivienda_NSE,
Hogar_y_Vivienda_suministro_sector,
Hogar_y_Vivienda_vivienda,
Servicio_agua1,Servicio_agua2,
Consumo_habitos1,Consumo_habitos2,Consumo_habitos3,
Consumo_habitos4,Pago_servicio,Cualidades_Servicio,Global_preferences,
Final_encuesta
]