',
);
$form['buttons']['siguiente'] = array(
'#type' => 'submit',
'#default_value' => t('Terminar'),
'#weight' => 100,
);
$form['buttons']['cancelar'] = array(
'#type' => 'submit',
'#default_value' => t('Cancelar'),
'#attributes' => array('onClick' => 'window.location="' . base_path() .$_GET['q'] . '"; return false;'),
'#weight' => 101,
);
$form['#proyecto_completed'] = TRUE;
}
$form['#submit'] = array('proyectos_operativos_accion_especifica_crear_form_submit');
return $form;
}
/*
* proyectos_operativos_accion_especifica_crear_form_after_build
* Funcion para agregar funciones javascript al formulario
*/
function proyectos_operativos_accion_especifica_crear_form_after_build($form, &$form_state) {
if (is_array($form['#arreglo_financiamiento']) && count($form['#arreglo_financiamiento'])) {
foreach ($form['#arreglo_financiamiento'] as $id => $macro) {
$nuid = str_replace('_', '-', $id);
if (is_array($form['#campo_' . $id]) && count($form['#campo_' . $id])) {
foreach ($form['#campo_' . $id] as $field_id) {
$form[$id][$field_id][0]['value']['#attributes']['class'] .= ' total-' . $nuid;
if (!isset($form[$id][$field_id]['value']['#attributes']['onchange'])) {
$form[$id][$field_id][0]['value']['#attributes']['onchange'] = "sumarff('" . $nuid . "');sumarff1('subtotales');";
}
else {
$form[$id][$field_id][0]['value']['#attributes']['onchange'] .= ";sumarff('" . $nuid . "');sumarff1('subtotales');";
}
}
}
}
}
return $form;
}
/*
* proyectos_operativos_accion_especifica_crear_form_validate
* Validar accion especifica
*/
function proyectos_operativos_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 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'));
}
}
//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 ($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 o igual al monto anual del proyecto (@fuente)', 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']))));
}
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']))));
}
}
/*
* proyectos_operativos_accion_especifica_crear_form_submit
* Guardar accion especifica
*/
function proyectos_operativos_accion_especifica_crear_form_submit($form, &$form_state) {
$op = isset($form_state['values']['op']) ? $form_state['values']['op'] : '';
if ($op == t('Cancelar')) {
drupal_set_message(t('Se cancelo el ingreso de la AE.'));
$form_state['redirect'] = 'proyectosopedit/' . $form['#proyecto']->nid;
return;
}
if ($op == t('Terminar')) {
$form_state['redirect'] = 'proyectosopedit/' . $form['#proyecto']->nid . '/finacieros';
return;
}
if (module_exists('hs_content_taxonomy')) {
foreach ($form['#field_info'] as $field_name => $field_info) {
if ($field_info['widget']['type'] == 'content_taxonomy_hs') {
// Change format of values to the one Content Taxonomy expects
if (is_array($form_state['values'][$field_name]['tids'])) {
$values = array();
foreach($form_state['values'][$field_name]['tids'] as $tid) {
$values[] = array('value' => $tid);
array_unshift($form_state['values'][$field_name], array('value' => $tid));
}
$form_state['values'][$field_name]['tids'] = $values;
}
else {
$values[] = array('value' => $form_state['values'][$field_name]['tids']);
array_unshift($form_state['values'][$field_name],array('value' => $form_state['values'][$field_name]['tids']));
$form_state['values'][$field_name]['tids'] = $values;
}
}
}
}
global $user;
$field_form = $form['#proyectos_operativos_fields'];
module_load_include('inc', 'node', 'node.pages');
$node_load = $form['#node'];
//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++) {
$valor = $i ? 'value_' . $i : 'value';
if ($mes_inicio <= $i && $mes_final >= $i) {
$suma += $form_state['values']['field_accion_esp_metaf'][0][$valor];
}
else {
$form_state['values']['field_accion_esp_metaf'][0][$valor] = 0;
}
}
}
if (isset($form_state['values']['field_accion_esp_programacion'])) {
$suma = 0;
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_metaf'][$id][$valor];
}
else {
$form_state['values']['field_accion_esp_programacion'][$id][$valor] = 0;
}
}
}
}
$form_values = $form_state['values'];
//cambiar
$node_load->title = t('Acción Específica del proyecto @nombreproyecto', array('@nombreproyecto' => $form['#proyecto']->title));
if (is_array($field_form) && count($field_form)) {
foreach ($field_form as $field_id) {
if (isset($form_values[$field_id]) && is_array($form_values[$field_id])) {
foreach($form_values[$field_id] as $id => $value) {
if (is_numeric($id) && isset($form_values[$field_id][$id]['_error_element'])) {
unset($form_values[$field_id][$id]['_error_element']);
}
}
$node_load->{$field_id} = $form_values[$field_id];
}
}
}
$nid = FALSE;
if ($node_load->nid) {
$nid = TRUE;
$texto = t('Modificada la Acción especifica del proyecto');
$node_load->log = $texto;
drupal_set_message($texto);
}
else {
//se agrega el enlace al proyecto
$node_load->uid = $user->uid;
$node_load->field_accion_esp_proyecto = array();
$node_load->field_accion_esp_proyecto[] = array('nid' => $form['#proyecto']->nid);
$node_load->field_accion_esp_ente = array();
$node_load->field_accion_esp_ente[] = array('nid' => $form['#proyecto']->field_proyecto_ente[0]['nid']);
$texto = t('Agregada la Acción especifica del proyecto');
$node_load->log = $texto;
drupal_set_message($texto);
}
$node_load->revision = 1;
node_save($node_load);
if (!$nid) {
$proyecto = $form['#proyecto'];
if (!$proyecto->field_proyecto_accion_esp[0]['nid']) {
$proyecto->field_proyecto_accion_esp = array();
}
$proyecto->field_proyecto_accion_esp[] = array('nid' => $node_load->nid);
$proyecto->revision = 1;
$proyecto->log = t('Agregada Acción especifica del proyecto');
node_save($proyecto);
}
if (!$_REQUEST['destination']) {
// add redirect
$form_state['redirect'] = 'proyectosopedit/' . $form['#proyecto']->nid . '/ae';
}
}
/**
* @ingroup themeable
* @see proyectos_operativos_accion_especifica_crear_form
*/
function theme_proyectos_operativos_accion_especifica_crear_form($form) {
$output = '';
if (!$form['#proyecto_completed']) {
$output .= '