'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 .= '
' . $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') . '' . theme('table', array(), $rows) . '
'; } $localizacion = variable_get('proyectos_operativos_muestra_localizacion_accion', 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_localizacion']) . drupal_render($form['field_accion_esp_latitud']) . drupal_render($form['field_accion_esp_longitud']); $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')) { 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) { //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 (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]; } } } } } $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 (!$first_field) { $first_field = $field_id; } if (isset($form_state['values'][$field_id][0]['value'])) { $sumaf += $form_state['values'][$field_id][0]['value']; } } } $sumaT = $form['#montos'] + $sumap; db_query("UPDATE {content_type_proyectos_operativos} SET field_proyecto_monto_anual_value = %d WHERE nid = %d", $sumaT, $form['#proyecto']->nid); db_query("UPDATE {content_type_accion_especifica} SET field_accion_total_financia_value = %d WHERE field_accion_esp_proyecto_nid = %d", $sumaT, $form['#proyecto']->nid); } }