'checkbox', '#title' => t('Recolectar la ubicación geografica de la Accion Específica.'), '#default_value' => variable_get('proyectos_operativos_muestra_proyecto_ubicacion_geografica', TRUE), '#weight' => 0, ); } if ($form_id == 'proyectos_operativos_accion_especifica_crear_form') { $node_type = content_types('accion_especifica'); $fields = $node_type['fields']; $proyecto = $form['#proyecto']; $ae_leido = $form['#node']; $ejecucion = 0; $montos = 0; $porcentajes = array(); foreach($proyecto->field_proyecto_accion_esp as $accion) { if ($accion['nid'] && $nid != $accion['nid']) { $accion_load = node_load($accion['nid']); if ($accion_load && $accion_load->type == 'accion_especifica') { if ($accion_load->field_accion_esp_programacion[0]['tid']) { foreach($accion_load->field_accion_esp_programacion as $programacion) { foreach($programacion as $id_value => $mesp){ if ($id_value != 'tid') { $montos +=$mesp; } } } } $acciones_especificas[$accion_load->nid] = $accion_load; $porcentajes[$accion_load->field_accion_esp_ponderacion[0]['value']] = 1; $ejecucion += $accion_load->field_accion_esp_ponderacion[0]['value']; } } elseif($nid == $accion['nid']) { $acciones_especificas[$ae->nid] = $ae; } } $et = 100 - $ejecucion; $form['#mensaje_mostrar'] = t('Quedan @asignar% de ponderación en las Acciones Específicas.', array('@asignar' => $et)); //agregando el campo geo if (variable_get('proyectos_operativos_muestra_proyecto_ubicacion_geografica', TRUE)) { $arreglo = array( 'field_accion_esp_geo' => 'field_accion_esp_geo', ); if (is_array($fields) && count($fields)) { foreach ($fields as $field_id => $field) { if (array_key_exists($field_id, $arreglo)) { $field_form[] = $field_id; $form['#proyectos_operativos_fields'][] = $field_id; } elseif (variable_get('proyectos_operativos_ac_muestra_geo_' . $field_id, FALSE)) { $field_form[] = $field_id; $form['#proyectos_operativos_fields'][] = $field_id; } } } if (is_array($field_form) && count($field_form)) { module_load_include('inc', 'content', 'includes/content.node_form'); foreach ($field_form as $field_id) { $field = content_fields($field_id, 'accion_especifica'); $form['#field_info'][$field_id] = $field; $form += (array) content_field_form($form, $form_state, $field); } } } foreach ($form['#validate'] as $id => $name) { if ($name == 'proyectos_operativos_accion_especifica_crear_form_validate') { $form['#validate'][$id] = 'proyectos_operativos_mcti_accion_especifica_crear_form_validate'; } } $nuevo_submit = array(); foreach ($form['#submit'] as $id => $name) { if ($name == 'proyectos_operativos_accion_especifica_crear_form_submit') { $nuevo_submit[] = 'proyectos_operativos_mcti_accion_especifica_crear_form_submit'; } $nuevo_submit[] = $name; } $form['#esplurianual'] = ($proyecto->field_proyecto_plurianual[0]['value'] == variable_get('proyectos_operativos_plurianual', 0)) ? 1 : 0; $form['#submit'] = $nuevo_submit; } } /* * Validar accion especifica */ function proyectos_operativos_mcti_accion_especifica_crear_form_validate($form, &$form_state) { $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; if ($op == t('Cancelar') || $op == t('Terminar')) { return; } $proyectos_operativos_path = drupal_get_path('module', 'proyectos_operativos'); drupal_add_js($proyectos_operativos_path . '/js/proyectos_operativos_extra.js'); drupal_add_js($proyectos_operativos_path . '/js/proyectos_operativos.js'); drupal_add_js($proyectos_operativos_path . '/js/accion_especifica.js'); drupal_add_js($form['#format_number'], 'setting'); drupal_add_js(array('accion_esp' => array('unidadmpers' => $form['#personas'])), 'setting'); //validamos que el porc sea mayor que cero if (!$form_state['values']['field_accion_esp_ponderacion'][0]['value'] && $form_state['values']['field_accion_esp_ponderacion'][0]['value'] >= 100) { form_set_error('field_accion_esp_ponderacion', t('La ponderaciones de la Acción especifica debe ser menor que 100')); } //validamos que el porc sea mayor que cero if (!$form_state['values']['field_accion_esp_ponderacion'][0]['value'] && $form_state['values']['field_accion_esp_ponderacion'][0]['value'] <= 0) { form_set_error('field_accion_esp_ponderacion', t('La ponderaciones de la Acción especifica debe ser mayor que cero')); } //validamos que la ponderacion no sea mayor a 100 $suma_porc = $form['#ejecucion'] + $form_state['values']['field_accion_esp_ponderacion'][0]['value']; if ($suma_porc > 100) { form_set_error('field_accion_esp_ponderacion', t('La suma de las ponderaciones de la Acción especifica debe ser menor o igual a 100%')); } // validamos que la cantidad de acciones permitidas cumpla con la minima permitida if (variable_get('accion_especifica_100_ponderation', 0) && $form_state['values']['field_accion_esp_ponderacion'][0]['value'] >= 100) { form_set_error('field_accion_esp_ponderacion', t('La ponderación de la Acción especifica debe ser menor o igual a 100%')); } //validamos que la ponderacion no se encuentre repetida if (!variable_get('accion_especifica_allow_ponderation', 0) && isset($form['#porcentajes'][$form_state['values']['field_accion_esp_ponderacion'][0]['value']])) { form_set_error('field_accion_esp_ponderacion', t('Ya existe una acción especifica con esta ponderación')); } //validamos que las fechas esten dentro de la del proyecto if ($form_state['values']['field_accion_esp_fechai'][0]['value'] > $form_state['values']['field_accion_esp_fechai'][0]['value']) { form_set_error('field_accion_esp_fechai', t('La fecha de inicio de la Acción especifica debe ser menor a la fecha de fin')); } if ($form['#proyecto']->field_proyecto_fecha_i[0]['value'] > $form_state['values']['field_accion_esp_fechai'][0]['value']) { form_set_error('field_accion_esp_fechai', t('La fecha de inicio de la Acción especifica debe ser mayor o igual a la fecha de inicio del proyecto @fecha', array('@fecha' => $form['#proyecto']->field_proyecto_fecha_i[0]['value']))); } if ($form['#proyecto']->field_proyecto_fecha_f[0]['value'] < $form_state['values']['field_accion_esp_fechai'][0]['value']) { form_set_error('field_accion_esp_fechai', t('La fecha de inicio de la Acción especifica debe ser mayor o igual a la fecha de fin del proyecto @fecha', array('@fecha' => $form['#proyecto']->field_proyecto_fecha_f[0]['value']))); } if ($form['#proyecto']->field_proyecto_fecha_i[0]['value'] > $form_state['values']['field_accion_esp_fechaf'][0]['value']) { form_set_error('field_accion_esp_fechaf', t('La fecha de fin de la Acción especifica debe ser menor o igual a la fecha de inicio del proyecto @fecha', array('@fecha' => $form['#proyecto']->field_proyecto_fecha_i[0]['value']))); } if ($form['#proyecto']->field_proyecto_fecha_f[0]['value'] < $form_state['values']['field_accion_esp_fechaf'][0]['value']) { form_set_error('field_accion_esp_fechaf', t('La fecha de fin de la Acción especifica debe ser menor o igual a la fecha de fin del proyecto @fecha', array('@fecha' => $form['#proyecto']->field_proyecto_fecha_f[0]['value']))); } //obtener la fecha de inicio y fin $mes = explode('-', $form_state['values']['field_accion_esp_fechai'][0]['value']); $mes_inicio = 0; $year_inicio = 0; if (count($mes)) { $mes_inicio = $mes[1] - 1; $year_inicio = $mes[0]; } //obtener la fecha de inicio y fin $mes = explode('-', $form_state['values']['field_accion_esp_fechaf'][0]['value']); $mes_final = 0; $year_final = 0; if (count($mes)) { $mes_final = $mes[1] - 1; $year_final = $mes[0]; } //validamos los proyectos plurianuales if ($form['#esplurianual']) { //se valida que el anho de inicio sea <= año del proyecto if ($form['#year_current']['year_current'] < $year_inicio) { form_set_error('field_accion_esp_fechai', t('El año de la fecha de inicio de la Acción especifica (@year_i) debe ser menor o igual a la fecha de ejecución del proyecto (@year_p)', array('@year_i' => $year_inicio, '@year_p' => $form['#year_current']['year_current']))); } elseif ($form['#year_current']['year_current'] > $year_inicio) { $mes_inicio = 0; } if ($form['#year_current']['year_current'] > $year_final) { form_set_error('field_accion_esp_fechai', t('El año de la fecha de finalización de la Acción especifica (@year_i) debe ser mayor o igual al año de ejecución del proyecto (@year_p)', array('@year_i' => $year_final, '@year_p' => $form['#year_current']['year_current']))); } elseif ($form['#year_current']['year_current'] < $year_final) { $mes_final = 12; } } else { if ($form['#year_current']['year_current'] != $year_inicio) { form_set_error('field_accion_esp_fechai', t('El año de la fecha de inicio de la Acción especifica (@year_i) debe ser igual a la fecha de ejecución del proyecto (@year_p)', array('@year_i' => $year_inicio, '@year_p' => $form['#year_current']['year_current']))); } if ($form['#year_current']['year_current'] > $year_final) { form_set_error('field_accion_esp_fechai', t('El año de la fecha de finalización de la Acción especifica (@year_i) debe ser igual al año de ejecución del proyecto (@year_p)', array('@year_i' => $year_final, '@year_p' => $form['#year_current']['year_current']))); } } if (isset($form_state['values']['field_accion_esp_metaf'])) { $suma = 0; for ($i = 0; $i < 12; $i++) { if ($mes_inicio <= $i && $mes_final >= $i) { $valor = $i ? 'value_' . $i : 'value'; $suma += $form_state['values']['field_accion_esp_metaf'][0][$valor]; } } if (!$suma && !($form['#esplurianual'])) { form_set_error('field_accion_esp_metaf', t('La Distribución de la Meta Fisíca de la Acción especifica debe tener al menos un resultado')); } /* $personas = $form['#personas']; if (count($personas) && isset($personas[$form_state['values']['field_accion_esp_unidadm'][0]['value']])) { $totalpersonas = $form_state['values']['field_accion_esp_meta_m'][0]['value'] + $form_state['values']['field_accion_esp_meta_f'][0]['value']; if ($totalpersonas != $suma) { form_set_error('field_accion_esp_meta_m', t('El total de Distribución de la Meta Fisíca de la Acción especifica debe ser igual a la cantidad de personas')); } } */ } //validamos la accion especifica if (isset($form_state['values']['field_accion_esp_programacion']) && count($form_state['values']['field_accion_esp_programacion'])) { $sumap = 0; foreach($form_state['values']['field_accion_esp_programacion'] as $id_programacion => $programacion) { if (is_numeric($id_programacion)) { for ($i = 0; $i < 12; $i++) { if ($mes_inicio <= $i && $mes_final >= $i) { $valor = $i ? 'value_' . $i : 'value'; $sumap += (float) $programacion[$valor]; } } } } if (!$sumap) { form_set_error('field_accion_esp_programacion', t('La Programación Financiera de la Acción especifica debe tener al menos un valor')); } } $sumaf = 0; //validamos el financiamiento $first_field = FALSE; if (count($form['#fields_financiamiento'])) { foreach($form['#fields_financiamiento'] as $field_id) { $start = (float) $form_state['values'][$field_id][0]['value']; $start = number_format($start, $form['#format_number']['format_number']['decimals'], '.', ''); $value = preg_replace('@[^-0-9]@', '', $start); if ($start && $start != $value) { form_set_error($field_id, t('Solo números enteros son permitidos en la fuente de financiamiento.')); } if ($value < 0) { form_set_error($field_id, t('Solo números positivos son permitidos en la fuente de financiamiento.')); } if (!$first_field) { $first_field = $field_id; } if (isset($form_state['values'][$field_id][0]['value'])) { $sumaf += $form_state['values'][$field_id][0]['value']; } } } if ($first_field && $sumaf > $sumap) { form_set_error($first_field, t('Las fuentes de financiamiento (@f_financiamiento) deben ser menor o igual a la programación presupuestaria (@fuente)', array('@fuente' => number_format($sumap, $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']), '@f_financiamiento' => number_format($sumaf, $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep'])))); } } /** * Implementation of hook_theme_registry_alter(). */ function accion_especifica_mcti_theme_registry_alter(&$theme_registry) { if ($theme_registry['proyectos_operativos_accion_especifica_crear_form']) { $theme_registry['proyectos_operativos_accion_especifica_crear_form']['function'] = 'theme_proyectos_operativos_accion_especifica_mcti_crear_form'; } } /** * tema a aplicar en el formulario proyectos_operativos_accion_especifica_crear_form */ function theme_proyectos_operativos_accion_especifica_mcti_crear_form($form) { $output = ''; if (!$form['#proyecto_completed']) { $output .= '