'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']; foreach ($form['#parameters'] as $id => $proyecto) { if ($proyecto->type == 'accion_especifica') { $ae = $proyecto; } } if (!$ae) { $ae_leido = new stdClass(); $ae_leido->type = 'accion_especifica'; $nid = 0; } else { $ae_leido = $ae; $ae_leido->field_accion_titulo[0]['value'] = trim($ae_leido->field_accion_titulo[0]['value']) == '' ? $ae_leido->title : $ae_leido->field_accion_titulo[0]['value']; $nid = $ae->nid; } //nid node foreach ($form['#parameters'] as $id => $proyectos) { if ($proyectos->type == 'proyectos_operativos') { $proyecto = $proyectos; } } if (!$proyecto) { $proyecto = new stdClass(); $proyecto->type = 'proyectos_operativos'; } else { $proyecto = $proyecto; } $geo = variable_get('proyectos_operativos_muestra_proyecto_ubicacion_geografica', TRUE); if ($geo) { //agregando el campo geo $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; $fields_form[] = $field_id; } elseif (variable_get('proyectos_operativos_ac_muestra_geo_' . $field_id, FALSE)) { $field_form[] = $field_id; $fields_form[] = $field_id; } } } $ejecucion = 0; $acciones_especificas = array(); $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; } } $monto_restante = $form['#proyecto']->field_proyecto_monto_anual[0]['value'] - $montos; $et = 100 - $ejecucion; if ($et != 100) { $form['#mensaje_mostrar'] = t('Se tiene @asignar % de ponderación sin asignar, con un monto de @montos BS asignados en las Acciones Específicas.', array('@asignar' => $et, '@montos' => number_format($monto_restante, $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']))); } else { $form['#mensaje_mostrar'] = t('Se tiene @asignar % de ponderación Asignada, con un monto total de @montos BS asignados en las Acciones Específicas.', array('@asignar' => $et, '@montos' => number_format($monto_restante, $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']))); } $form['#proyectos_operativos_fields'] = array_merge($form['#proyectos_operativos_fields'] , $fields_form); 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'; } } $form['#submit'][] = 'proyectos_operativos_mcti_accion_especifica_crear_form_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'); //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 1oo%')); } //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; if (count($mes)) { $mes_inicio = $mes[1] - 1; } //obtener la fecha de inicio y fin $mes = explode('-', $form_state['values']['field_accion_esp_fechaf'][0]['value']); $mes_final = 0; if (count($mes)) { $mes_final = $mes[1] - 1; } 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_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')); } } //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 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'])))); } //validamos que la suma de la programacion financiera sea + las otras acciones sean inferiores o iguales a la suma total del proyecto $sumaT = $form['#montos'] +$sumap; if ($suma_porc == 100 && $sumaT < $form['#proyecto']->field_proyecto_monto_anual[0]['value']) { form_set_error('field_accion_esp_programacion', t('La suma de los montos de las acciones especificas (@monto) debe ser menor igual al monto anual del proyecto (@fuente) cuando las ponderaciones de las Acciones Específicas sume 100%', array('@fuente' => number_format($form['#proyecto']->field_proyecto_monto_anual[0]['value'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']), '@monto' => number_format($sumaT, $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep'])))); } elseif ($suma_porc < 100 && $sumaT == $form['#proyecto']->field_proyecto_monto_anual[0]['value']) { 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% (@suma_porc % alcanzado) y el monto por asignar no es suficiente para nuevas Acciones (Monto Asignado: @monto_asignado Bs, Monto del proyecto: @monto_proyecto Bs)', array('@suma_porc' => number_format($suma_porc, $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']), '@monto_asignado' => number_format($sumaT, $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']), '@monto_proyecto' => number_format($form['#proyecto']->field_proyecto_monto_anual[0]['value'], $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 .= '