Hola Sebastián.
Volví a probar esta situación y finalmente encontré cuál es el problema. A continuación te detallo todas las pruebas realizadas con preinscripción Sin personalizaciones y con el archivo involucrado de Guaraní Gestión Sin personalizaciones.
Te comento que para resolverlo momentaneamente ya que tenemos que subir las preinscripciones con error tuve que modificar dos funciones de Guaraní Gestión las cuales detallo al final de la descripción
Muchas gracias!
Pasos realizados:
-
Nosotros tenemos configurados como no visibles en todos los tipos de propuestas los campos
columna in(
‘como_conocio_institucion’
‘insc_otra_inst’
‘insc_otra_inst_descr’
‘mot_inst_econom’
‘mot_inst_prestigio’
‘mot_inst_difusion’
‘mot_inst_rec_estud’
‘mot_inst_rec_amigos’
‘mot_inst_sist_ing’
‘mot_inst_ubicacion’
‘mot_inst_otros’
‘mot_prop_vocacion’
‘mot_prop_sug_fam’
‘mot_prop_rec_social’
‘mot_prop_ins_lab’
‘mot_prop_perf_prof’
‘mot_prop_mejora_ec’
‘mot_prop_util_soc’
‘mot_prop_otros’)
en la tabla sga_campos_conf
-
Desde la pantalla de propuestas se ejecuta la funciòn accion__guardar() de censo->controlador
-
Se llama a la función set_datos_preinscripcion con los datos como parámetro. Los datos que le pasa como parámetro son (impresos en el log):
– DATOS --------------------------------------------------------------------
Array
(
[turno_preferido] => T
[como_conocio_institucion] =>
[insc_otra_inst] =>
[insc_otra_inst_descr] =>
[mot_inst_econom] =>
[mot_inst_prestigio] =>
[mot_inst_difusion] =>
[mot_inst_rec_estud] =>
[mot_inst_rec_amigos] =>
[mot_inst_sist_ing] =>
[mot_inst_ubicacion] =>
[mot_inst_otros] =>
[mot_prop_vocacion] =>
[mot_prop_sug_fam] =>
[mot_prop_rec_social] =>
[mot_prop_ins_lab] =>
[mot_prop_perf_prof] =>
[mot_prop_mejora_ec] =>
[mot_prop_util_soc] =>
[mot_prop_otros] =>
)
3) Luego llama a la función filtrar_datos_preinscripcion pasándole los datos del punto anterior como parámetro
En dicha función busca los campos del formulario llamando a util::form()->get_campos_preinscripcion() y la salida del mismo trae los campos
– CAMPOS --------------------------------------------------------------------
Array
(
[0] => id_preinscripcion
[1] => usuario
[2] => clave
[3] => codigo_validacion
[4] => email_valido
[5] => facebook
[6] => google
[7] => fecha_registro
[8] => fecha_ult_modif
[9] => version_modificacion
[10] => version_impresa
[11] => persona
[12] => apellido
[13] => nombres
[14] => pais_documento
[15] => tipo_documento
[16] => nro_documento
[17] => numero_cuil
[18] => sexo
[19] => fecha_nacimiento
[20] => nacionalidad
[21] => loc_nacimiento
[22] => turno_preferido
[23] => colegio_secundario
[24] => titulo_secundario
[25] => anio_egreso_sec
[26] => ent_emisora_ci
[27] => nro_ci
[28] => pais_emisor_pasap
[29] => nro_pasap
[30] => apellido_padre
[31] => nombres_padre
[32] => apellido_madre
[33] => nombres_madre
[34] => alu_est_civil_uh
[35] => alu_trab_hace
[36] => alu_trab_desjub
[37] => alu_trab_fami
[38] => alu_trab_ocup
[39] => alu_trab_tarea
[40] => padre_trab_hace
[41] => padre_trab_ocup
[42] => padre_trab_otro
[43] => padre_trab_tarea
[44] => madre_trab_hace
[45] => madre_trab_ocup
[46] => madre_trab_otro
[47] => madre_trab_tarea
[48] => alu_cos_est_ap_fam
[49] => alu_cos_est_trab
[50] => alu_cos_est_beca
[51] => alu_cos_est_plsoc
[52] => alu_cos_est_otra
[53] => alu_cos_est_espec
[54] => alu_beca_muni
[55] => alu_beca_otra
[56] => alu_beca_prov
[57] => alu_beca_tipo_eco
[58] => alu_beca_tipo_ser
[59] => alu_beca_tipo_inv
[60] => alu_beca_eco_tran
[61] => alu_beca_eco_come
[62] => alu_beca_eco_foto
[63] => alu_beca_eco_efec
[64] => alu_beca_eco_habi
[65] => alu_otestsup_uni
[66] => alu_otestsup_tipo
[67] => alu_otestsup_area
[68] => alu_otestsup_carr
[69] => alu_otestsup_esta
[70] => alu_otestsup_razon_abandono
[71] => alu_otestsup_razon_abandono_otros
[72] => alu_otestsup_egre
[73] => alu_otestsup_niv
[74] => alu_tec_pc_casa
[75] => alu_tec_pc_trab
[76] => alu_tec_pc_univ
[77] => alu_tec_pc_otro
[78] => alu_tec_int_movil
[79] => alu_tec_int_casa
[80] => alu_tec_int_trab
[81] => alu_tec_int_univ
[82] => alu_tec_int_otro
[83] => alu_idioma_ingl
[84] => alu_idioma_fran
[85] => alu_idioma_port
[86] => alu_idioma_ital
[87] => alu_idioma_alem
[88] => alu_idioma_chino
[89] => alu_idioma_otro
[90] => alu_idioma_otro_nivel
[91] => sec_egreso
[92] => o_est_ter_estado
[93] => o_est_uni_estado
[94] => sit_actual_padre
[95] => sit_actual_madre
[96] => tit_obt_padre
[97] => tit_obt_madre
[98] => cant_fami_cargo
[99] => cant_empl_cargo
[100] => barrio_per_lec
[101] => barrio_proc
[102] => barrio_alleg
[103] => pais_nacionalidad
[104] => existe_trab_alum
[105] => cant_hijos_alum
[106] => vive_actual_con
[107] => obra_social_alu
[108] => obra_social_trab
[109] => obra_social_fami
[110] => obra_social_univ
[111] => costea_estudios
[112] => tiene_beca
[113] => tiene_beca_univ
[114] => tiene_beca_nacio
[115] => tiene_beca_inter
[116] => remuneracion
[117] => hora_sem_trab_alum
[118] => practica_deportes
[119] => hace_dep_univ
[120] => hace_dep_gim_priv
[121] => hace_dep_partic
[122] => hace_dep_otros
[123] => prac_dep_futbol
[124] => prac_dep_basquet
[125] => prac_dep_voley
[126] => prac_dep_gimnasia
[127] => prac_dep_tenis
[128] => prac_dep_natacion
[129] => prac_dep_handball
[130] => prac_dep_otros
[131] => padre_vive
[132] => madre_vive
[133] => vive_con_conyuge
[134] => vive_con_padre
[135] => vive_con_madre
[136] => vive_con_hijos
[137] => vive_con_hermanos
[138] => celular_numero
[139] => celular_compania
[140] => estado_civil
[141] => e_mail
[142] => tipo_visa
[143] => otorgamiento_visa
[144] => vencimiento_visa
[145] => tipo_residencia
[146] => tipo_res_per_lect
[147] => calle_per_lect
[148] => numero_per_lect
[149] => piso_per_lect
[150] => dpto_per_lect
[151] => unidad_per_lect
[152] => loc_per_lect
[153] => cp_per_lect
[154] => te_per_lect
[155] => calle_proc
[156] => numero_proc
[157] => piso_proc
[158] => dpto_proc
[159] => unidad_proc
[160] => loc_proc
[161] => cp_proc
[162] => te_proc
[163] => otros_estud_super
[164] => fliares_cargo_alum
[165] => sit_laboral_alu
[166] => categ_ocup_alum
[167] => act_econom_alum
[168] => det_rama_act_alum
[169] => rel_trab_propuesta
[170] => sit_laboral_padre
[171] => ult_est_cur_padre
[172] => act_econom_padre
[173] => det_rama_act_padre
[174] => categ_ocup_padre
[175] => sit_laboral_madre
[176] => ult_est_cur_madre
[177] => act_econom_madre
[178] => det_rama_act_madre
[179] => categ_ocup_madre
[180] => apellido_pers_alleg
[181] => nombre_pers_alleg
[182] => tipo_allegado
[183] => calle_pers_alleg
[184] => nro_pers_alleg
[185] => piso_pers_alleg
[186] => dpto_pers_alleg
[187] => unidad_pers_alleg
[188] => loc_pers_alleg
[189] => cp_pers_alleg
[190] => te_pers_alleg
[191] => residencia
[192] => fecha_respre_otorg
[193] => fecha_respre_venc
[194] => empresa
[195] => empresa_otra
[196] => sector
[197] => subsector
[198] => facilidad_est_emp
[199] => facilidad_est_inst
[200] => pertenece_pueblo_originario
[201] => pueblo_originario
[202] => pueblo_originario_otro
[203] => insc_otra_inst
[204] => insc_otra_inst_descr
[205] => como_conocio_institucion
[206] => orientacion_recibida
[207] => mot_inst_econom
[208] => mot_inst_prestigio
[209] => mot_inst_difusion
[210] => mot_inst_rec_estud
[211] => mot_inst_rec_amigos
[212] => mot_inst_sist_ing
[213] => mot_inst_ubicacion
[214] => mot_inst_otros
[215] => mot_prop_vocacion
[216] => mot_prop_sug_fam
[217] => mot_prop_rec_social
[218] => mot_prop_ins_lab
[219] => mot_prop_perf_prof
[220] => mot_prop_mejora_ec
[221] => mot_prop_util_soc
[222] => mot_prop_otros
[223] => es_celiaco
[224] => adeuda_materias
[225] => estado
)
Luego ejecuta el foreach
if (in_array($campo, $campos)) {
if (is_null($dato) || ($dato == opciones::NO_SELECCION)) {
$dato = null;
}
if (!in_array($campo, $no_formatear)) {
$dato = formatear($dato);
}
$salida[$campo] = $dato;
}
Aqui todos los campos de DATOS entran en $salida pues los encuentra en CAMPOS
4)Por último vuelve a la función set_datos_preinscripción y hace el insert con $salida que queda de la siguiente manera
– SALIDA --------------------------------------------------------------------
Array
(
[turno_preferido] => N
[como_conocio_institucion] =>
[insc_otra_inst] =>
[insc_otra_inst_descr] =>
[mot_inst_econom] =>
[mot_inst_prestigio] =>
[mot_inst_difusion] =>
[mot_inst_rec_estud] =>
[mot_inst_rec_amigos] =>
[mot_inst_sist_ing] =>
[mot_inst_ubicacion] =>
[mot_inst_otros] =>
[mot_prop_vocacion] =>
[mot_prop_sug_fam] =>
[mot_prop_rec_social] =>
[mot_prop_ins_lab] =>
[mot_prop_perf_prof] =>
[mot_prop_mejora_ec] =>
[mot_prop_util_soc] =>
[mot_prop_otros] =>
[fecha_ult_modif] => now()
)
-
Allí quedan en la BBDD todos los campos de SALIDA vacíos salvo turno_preferido (los mismos son default N en la BBDD)
-
En guarani Gestión, cuando se importa a la persona y la misma No existe, inserta los datos de elecciòn propuesta con la función insertar_eleccion_propuesta de act_personas_nucleo.
Como todos los campos vienen vacíos, pero gracias a esta condición
if (!is_null($parametro['valor'])) {
$insert .= ', '.$parametro['campo'];
$values .= ', '.toba::db()->quote($parametro['valor']);
}
no los inserta en la tabla, el insert solo queda como
INSERT INTO mdp_eleccion_propuesta ( dato_censal ) VALUES ( ‘30949’ );
como la tabla tiene todos sus campos como default N, esto no ocasiona problemas.
- Ahora, si la persona ya existe en Guarani, va a ir por la funciòn actualizar_eleccion_propuesta
y luego en el foreach
foreach ($parametros as $parametro) {
if (!empty($set)) {
$set .= ', ';
}
if (empty($parametro[‘valor’])) {
$valor = ‘null’;
} else {
$valor = toba::db()->quote($parametro[‘valor’]);
}
$set .= $parametro[‘campo’] . ’ = ’ . $valor;
}
si parametro[‘valor’] viene vacío, le pone null como valor,
lo que va en contra de la restricción not null de la tabla de dichos campos, ahí es cuando da el error. Lo mismo sucede con la tabla mdp_eleccion_institucion
MENSAJE: ERROR: el valor null para la columna «mot_vocacion» viola la restricción not null\nDETAIL: La fila que falla contiene (21012, null, null, null, null, null, null, null, null).
SQL: UPDATE mdp_eleccion_propuesta\n SET mot_vocacion = null, mot_sugerencia_familiar = null, mot_reconocimiento_social = null, mot_insercion_laboral = null, mot_perfil_profesional = null, mot_mejora_economica = null, mot_util_sociedad = null, mot_otros = null\n WHERE dato_censal = “21012”\n – toba_log: 531999297
FUNCIONES Modificadas para resolver el error
de la clase act_personas.php
//PERSONALIZADO. Se personaliza la funciòn para que no arroje error de campo, esperando soluciòn del SIU en el thread: http://foro.comunidad.siu.edu.ar/index.php?topic=16041.0
function actualizar_eleccion_propuesta($dato_censal, $parametros)
{
$dato_censal = toba::db()->quote($dato_censal);
$set = '';
foreach ($parametros as $parametro) {
//PERS. si el valor viene vacío no lo incluyo en el set.
if(!empty($parametro['valor'])){
if (!empty($set)) {
$set .= ', ';
}
if (empty($parametro['valor'])) {
$valor = 'null';
} else {
$valor = toba::db()->quote($parametro['valor']);
}
$set .= $parametro['campo'] . ' = ' . $valor;
}
}
if (!empty($set)) {
$sql = "UPDATE mdp_eleccion_propuesta
SET $set
WHERE dato_censal = $dato_censal
";
guarani_db::ejecutar($sql);
toba::logger()->info('************ Se actualizaron datos censales personales con éxito. ************');
}
}
//PERSONALIZADO. Se personaliza la funciòn para que no arroje error de campo, esperando soluciòn del SIU en el thread: http://foro.comunidad.siu.edu.ar/index.php?topic=16041.0
function actualizar_eleccion_institucion($dato_censal, $parametros)
{
$dato_censal = toba::db()->quote($dato_censal);
$set = '';
foreach ($parametros as $parametro) {
//PERS. si el valor viene vacío no lo incluyo en el set.
if(!empty($parametro['valor'])){
if (!empty($set)) {
$set .= ', ';
}
if (empty($parametro['valor'])) {
$valor = 'null';
} else {
$valor = toba::db()->quote($parametro['valor']);
}
$set .= $parametro['campo'] . ' = ' . $valor;
}
}
if (!empty($set)) {
$sql = "UPDATE mdp_eleccion_institucion
SET $set
WHERE dato_censal = $dato_censal
";
guarani_db::ejecutar($sql);
toba::logger()->info('************ Se actualizaron datos censales personales con éxito. ************');
}
}