'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['value'] == 'SI') ? 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; 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')); } /* $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 .= '
' . $form['#mensaje_mostrar'] . '
'; $output .= '
' . t('Definición de la Acción Especifica') . '' . drupal_render($form['field_accion_titulo']) . drupal_render($form['field_accion_esp_fechai']) . drupal_render($form['field_accion_esp_fechaf']);$output .= drupal_render($form['field_accion_esp_ejecutor']) . drupal_render($form['field_accion_esp_bien']) . '
'; $output .= '
' . t('Distribución de la Meta Fisica de la acción Especifica') . ''; $output .= drupal_render($form['field_accion_esp_unidadm']); if (isset($form['field_accion_esp_meta_m']) && $form['field_accion_esp_meta_f']) { $output .= '
'; $form['field_accion_esp_meta_m'][0]['value']['#title'] = ''; $form['field_accion_esp_meta_f'][0]['value']['#title'] = ''; $total = $form['field_accion_esp_meta_m'][0]['#value']['value'] + $form['field_accion_esp_meta_f'][0]['#value']['value']; $output .= ''; $output .= ''; $output .= '
' . $form['field_accion_esp_meta_m']['#title'] . '' . $form['field_accion_esp_meta_f']['#title'] . '' . t('Total') . '
' . drupal_render($form['field_accion_esp_meta_m']) . '' . drupal_render($form['field_accion_esp_meta_f']) . '
' . number_format($total, $format_number['decimals'], $format_number['dec_point'], $format_number['thousands_sep']) . '
'; } $output .= drupal_render($form['field_accion_esp_ponderacion']); $output .= '*' . drupal_render($form['field_accion_esp_metaf']); $output .= '
'; $output .= drupal_render($form['distribucion']); $output .= '
' . t('Programación Financiera de la Acción') . '' . drupal_render($form['field_accion_esp_programacion']); $ftypes = array( 'tid' => t('Account'), 'value' => t('Ene'), 'value_1' => t('Feb'), 'value_2' => t('Mar'), 'value_3' => t('Abr'), 'value_4' => t('May'), 'value_5' => t('Jun'), 'value_6' => t('Jul'), 'value_7' => t('Aug'), 'value_8' => t('Sep'), 'value_9' => t('Oct'), 'value_10' => t('Nov'), 'value_11' => t('Dic'), ); $output .= '
'; $i = -1; foreach ($ftypes as $ftype => $label) { if($ftype != 'tid') { $output .= '
0
'; } else { $output .= '
' . t('TOTAL') . '
'; } $i++; } $output .= '
0
'; $output .= '
'; $rows = array(); $row = array(); $row1 = array(); $cantidad_campos = count($form['#arreglo_financiamiento']); if (is_array($form['#arreglo_financiamiento']) && count($form['#arreglo_financiamiento'])) { foreach ($form['#arreglo_financiamiento'] as $id => $macro) { $row[] = array('data' => drupal_render($form[$id]), ); $row1[] = array('data' => drupal_render($form['total_' . $id]), ); } $rows[] = $row; $rows[] = $row1; $row = array(); $row[] = array('data' => '' . t('TOTAL') . ':', 'colspan' => $cantidad_campos - 1, 'align' => 'right'); $row[] = array('data' => drupal_render($form['total_financiamiento']), ); $rows[] = $row; $output .= '
' . t('Fuentes de Financiamiento (BS)') . '*' . theme('table', array(), $rows) . '
'; } $localizacion = variable_get('proyectos_operativos_muestra_accion_esp', TRUE); if ($localizacion) { $output .= '
' . t('Localización Geográfica') . ''; $output .= drupal_render($form['field_accion_esp_localizacion']) . drupal_render($form['field_accion_esp_latitud']) . drupal_render($form['field_accion_esp_longitud']); $output .= '
'; $output .= drupal_render($form); } $geo = variable_get('proyectos_operativos_muestra_proyecto_ubicacion_geografica', TRUE); if ($geo) { $output .= '
' . t('Localización Geográfica de Ejecución') . ''; $output .= drupal_render($form['field_accion_esp_geo']); $output .= '
'; } $output .= drupal_render($form); } $header = array(); $cab = 6; $header[] = array('data' => t('Nro')); $header[] = array('data' => t('Nombre')); $header[] = array('data' => t('Fecha de inicio')); $header[] = array('data' => t('Fecha de Fin')); $header[] = array('data' => t('%')); $header[] = array('data' => t('Acción')); $rows = array(); $i = 1; if (count($form['#acciones_especificas'])) { $suma = 0; foreach ($form['#acciones_especificas'] as $accion) { if (isset($accion->nid)) { $row = array(); $row[] = array('data' => $i,); $row[] = array('data' => $accion->titulo_asignado,); //Se cambia el formato de la fecha $fecha = explode(' ', $accion->field_accion_esp_fechai[0]['value']); $formato = explode('-', $fecha[0]); $row[] = array('data' => $formato[2] . '/' . $formato[1] . '/' . $formato[0],); //Se cambia el formato de la fecha $fecha = explode(' ', $accion->field_accion_esp_fechaf[0]['value']); $formato = explode('-', $fecha[0]); $row[] = array('data' => $formato[2] . '/' . $formato[1] . '/' . $formato[0],); $suma += $accion->field_accion_esp_ponderacion[0]['value']; $row[] = array('data' => $accion->field_accion_esp_ponderacion[0]['value'],); $links = array(); $links[] = l(t('Modificar'), 'proyectosopedit/' . $form['#proyecto']->nid . '/ae/' . $accion->nid . '/edit'); $links[] = l(t('Eliminar'), 'proyectosopedit/' . $form['#proyecto']->nid . '/ae/' . $accion->nid . '/remove'); $row[] = array('data' => theme('item_list', $links),); $rows[] = $row; $i++; } } } if (count($rows)) { $output .= theme('table', $header, $rows); } //no mostrar el formulario si ya se alcanzo lo asignado if ($form['#proyecto_completed']) { $output .= drupal_render($form); } return $output; } /** * Agrega el valor total de la accion especifica al campo field_accion_total_financia */ function proyectos_operativos_mcti_accion_especifica_crear_form_submit($form, &$form_state) { $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; $node_type = content_types('accion_especifica'); if ($op != t('Cancelar')) { /* //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 (!$first_field) { $first_field = $field_id; } if (isset($form_state['values'][$field_id][0]['value'])) { $sumaf += $form_state['values'][$field_id][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; } $suma = 0; if (isset($form_state['values']['field_accion_esp_programacion'])) { foreach($form_state['values']['field_accion_esp_programacion'] as $id => $programacion) { for ($i = 0; $i < 12; $i++) { $valor = $i ? 'value_' . $i : 'value'; if ($mes_inicio <= $i && $mes_final >= $i) { $suma += $form_state['values']['field_accion_esp_programacion'][$id][$valor]; } else { $form_state['values']['field_accion_esp_programacion'][$id][$valor] = 0; } } } } $sumaT = $form['#montos'] + $suma; $form['#proyecto']->field_proyecto_monto_anual[0]['value'] = $sumaT; if (!$form['#esplurianual']) { $form['#proyecto']->field_proyecto_total[0]['value'] = $sumaT; } } }