variable_get('proyectos_operativos_number_decimals', 0),
'dec_point' => variable_get('proyectos_operativos_number_dec_point', ','),
'thousands_sep' => variable_get('proyectos_operativos_number_thousands_sep', '.'),
);
$form['#format_number'] = array('format_number' => $format_number);
drupal_add_js($form['#format_number'], 'setting');
$meses = json_decode(MESES);
drupal_set_title(t('Seguimiento y Control de Proyecto Operativo'.' (mes de '.$meses[$mes -1].')'));
$form = array();
$campo = '';
$form['#node'] = $node;
$form['#mes'] = $mes -1;
$form['#ftypes'] = array(
'value' => t('January'),
'value_1' => t('February'),
'value_2' => t('March'),
'value_3' => t('April'),
'value_4' => t('May'),
'value_5' => t('June'),
'value_6' => t('July'),
'value_7' => t('August'),
'value_8' => t('September'),
'value_9' => t('Octuber'),
'value_10' => t('November'),
'value_11' => t('December'),
);
$output = '';
$consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes);
//estado
$estado = ((isset($consultaseguimientoactual['segmes']['estado'])) && ($consultaseguimientoactual['segmes']['estado'] > 0) )? $consultaseguimientoactual['segmes']['estado'] : -1;
$form['#state_creation'] = $estado;
//get first state
if ($estado == -1 && module_exists('workflow')) {
$wid = workflow_get_workflow_for_type('proyectos_operativos');
if ($wid) {
$form['#state_creation'] = _workflow_creation_state($wid);
}
}
$fecha = explode('-', $node->field_proyecto_fecha_i[0]['value']);
$mes_inicio = (int) $fecha[1];
$mes_final = variable_get('seguimiento_proyectos_cantidad_meses_seguimiento', 0);
if ($mes_inicio <= ($mes_final + 1)) {
$form['es_acumulativo'] = array(
'#type' => 'select',
'#options' => array('No', 'Si'),
'#default_value' => ($node->es_acumulativo) ? 1 : 0,
);
}
$header = array();
$header[] = array('data' => t('Partida'));
$header[] = array('data' => t('Asignado'));
$header[] = array('data' => t('Comprometido'));
$header[] = array('data' => t('Causado'));
$header[] = array('data' => t('Pagado'));
$header[] = array('data' => t('% de Inversión'));
$header[] = array('data' => t('Estatus de la Inversión'));
$header[] = array('data' => t('Información Complementaria'));
//calcular variacion por reformulacion
$variacion_planificado_mes = _seguimiento_mesactual_metafisica_proyecto_reformulaciones_load($node, $mes);
$valor_texto = $mes > 0 ? 'value_' . $mes : 'value';
$cant_metafisica_planif = $node->field_proyecto_meta_fisica[0][$valor_texto] + $variacion_planificado_mes;
$disabled = $cant_metafisica_planif == 0 ? TRUE : FALSE;
$form['#metafisica_con_planificado_cero'] = $cant_metafisica_planif == 0 ? 1 : 0;
$form['cantidad_metafisica_planificado'] = array(
//'#title' => t('Ejecutado Meta Fisica'),
'#type' => 'textfield',
'#size' => 15,
'#default_value' => $cant_metafisica_planif,
'#attributes' => array('class' => 'number campo-asignado'),
);
$seg_proyecto_path = drupal_get_path('module', 'accion_especifica_de_proyecto_seguimiento');
drupal_add_js($seg_proyecto_path . '/js/seguimiento_proyecto.js');
$cant_metafisica_ej = isset($consultaseguimientoactual['segmes']['ejecutadometafisica']) ? $consultaseguimientoactual['segmes']['ejecutadometafisica'] : 0;
//op field show
$form['#op_fields'] = $field;
if ($field == 'comentario_metafisica' || $field == 'full') {
$form['cantidad_metafisica_ejecutado'] = array(
//'#title' => t('Ejecutado Meta Fisica'),
'#type' => 'textfield',
'#size' => 15,
'#default_value' => $cant_metafisica_ej,
// '#disabled' => $disabled,
'#attributes' => array('class' => 'number', 'onchange' => "valpositivo('" . 'cantidad-metafisica-ejecutado' . "');calculaporc_metafisica('" . "');valenterometafisica('cantidad-metafisica-ejecutado')"),
);
$zonacritica1 = $cant_metafisica_planif ? $cant_metafisica_ej/$cant_metafisica_planif : -1;
// $porczonacritica1 = $zonacritica1 >= 0 ? ($zonacritica1 * 100) . '%' : 'N/A';
$porczonacritica1 = $zonacritica1 >= 0 ? ($zonacritica1 * 100) . '%' : $cant_metafisica_ej ? 'N/D' : 'N/A';
$form['cantidad_metafisica_porcen'] = array(
'#type' => 'textfield',
'#default_value' => $porczonacritica1,
'#size' => 15,
'#disabled' => TRUE,
'#attributes' => array('class' => 'number',),
);
$infocomplementaria_fisica = isset($consultaseguimientoactual['segmes']['infocomplementaria_metafisica']) ? $consultaseguimientoactual['segmes']['infocomplementaria_metafisica'] : '';
$form['comentario_metafisica'] = array(
'#title' => t('Información Complementaria (Meta Física)'),
'#type' => 'textarea',
'#default_value' => $infocomplementaria_fisica,
);
}
if ($field == 'comentario_informacionfinanciera' || $field == 'full') {
$infocomplementaria_financiera = isset($consultaseguimientoactual['segmes']['infocomplementaria_metafinanciera']) ? $consultaseguimientoactual['segmes']['infocomplementaria_metafinanciera'] : '';
$form['comentario_informacionfinanciera'] = array(
'#title' => t('Información Complementaria (Financiera)'),
'#type' => 'textarea',
'#default_value' => $infocomplementaria_financiera,
);
}
if (variable_get('proyectos_operativos_muestra_beneficiario', TRUE) && $field == 'comentario_metafisica' || $field == 'full') {
$header3 = array();
$header3[] = array('data' => t('Beneficiario'));
$header3[] = array('data' => t('Cantidad de Beneficiarios'));
$cantbeneficiario_mes = 0;
foreach($node->field_proyecto_beneficiario as $id => $beneficiarios) {
foreach($consultaseguimientoactual['seguimientos_beneficiarios'] as $seg_benef){
if($id == $seg_benef['posicion_beneficiario']){
$cantbeneficiario_mes = isset($seg_benef['cant_beneficiarios_mes'])? $seg_benef['cant_beneficiarios_mes']:0;
break;
}
}
$form['tipobeneficiario_'.$id] = array(
'#type' => 'textfield',
'#default_value' => $cantbeneficiario_mes,
'#size' => 15,
'#disabled' => FALSE,
'#attributes' => array('class' => 'number', 'onchange' => "valpositivo('tipobeneficiario-". $id . "');valenterometafisica('tipobeneficiario-". $id . "')"),
);
}
}
$form['buttons'] = array(
'#prefix' => '
',
'#suffix' => '
',
);
$form['buttons']['submit'] = array(
'#type' => 'submit',
'#value' => t('Guardar'),
);
$form['buttons']['cancel'] = array('#value' => l('Cancelar', 'node/' . $form['#node']->nid . '/seguimiento_proyecto'));
return $form;
}
/**
* Implementation of hook_theme().
*/
function proyecto_operativo_seguimiento_theme() {
return array(
'seguimiento_proyecto_datospormes_modificar_form' => array(
'arguments' => array('form' => NULL),
),
);
}
/**
* Formato para el formulario (campos en tablas y carga de algunos datos)
*/
function theme_seguimiento_proyecto_datospormes_modificar_form($form) {
$meses = json_decode(MESES);
$proyectos_operativos_path = drupal_get_path('module', 'proyectos_operativos');
drupal_add_js($proyectos_operativos_path . '/js/proyectos_operativos_extra.js');
$modulo_seguimiento_proyecto_y_aes_path = drupal_get_path('module', 'accion_especifica_de_proyecto_seguimiento');
drupal_add_js($modulo_seguimiento_proyecto_y_aes_path . '/js/seg_proyecto_validaciones_original.js');
drupal_add_js($form['#format_number'], 'setting');
$header = array();
$header[] = array('data' => t('AE'));
$header[] = array('data' => t('Asignado'));
$header[] = array('data' => t('Comprometido'));
$header[] = array('data' => t('Causado'));
$header[] = array('data' => t('Pagado'));
$header[] = array('data' => t('% de Inversión'));
$header[] = array('data' => t('Estatus de la Inversión'));
$rows = array();
$consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($form['#node'], $form['#mes']);
$transiciones_dispo = _obtener_transiciones_disponibles($form['#node'], $form['#mes']);
$status_actual = t('Por ingresar');
if (isset($transiciones_dispo['nombre_estado_actual'])) {
$status_actual = $transiciones_dispo['nombre_estado_actual'];
}
$seguimiento_financiero_proyecto = _cargar_totales_seguimiento_aes_delproyecto($form['#node'], $form['#mes']);
foreach ($seguimiento_financiero_proyecto['seg_financiero_aes'] as $acciones_especif) {
$asignadov = $acciones_especif['totalAsignadoAEs'];
$causadov = $acciones_especif['totalCausadoAEs'];
$estatus_ejecucion = _calcularzonacritica($asignadov, $causadov);
$porczonacritica = $estatus_ejecucion['porczonacritica'];
$textozona = $estatus_ejecucion['textozona'];
$colorzona = $estatus_ejecucion['colorzona'];
$colorfontzona = $estatus_ejecucion['colorfontzona'];
$nodo_ae = node_load($acciones_especif['idnodosAEs']);
$row = array();
$row[] = array('data' => $acciones_especif['nombreAEs'],);
if(_mes_dentro_de_duracion_ae_proyecto($nodo_ae, $form['#mes'])){
$row[] = array('data' => number_format($acciones_especif['totalAsignadoAEs'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),);
$row[] = array('data' => number_format($acciones_especif['totalComprometidoAEs'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),);
$row[] = array('data' => number_format($acciones_especif['totalCausadoAEs'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),);
$row[] = array('data' => number_format($acciones_especif['totalPagadoAEs'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),);
$row[] = array('data' => $porczonacritica,);
$row[] = array('data' => $textozona, 'style' => 'font-weight: bold;background:' . $colorzona . '; color:' . $colorfontzona, 'id' => $partida['tid'] . '-inversion-form',);
}else{
$row[] = array('data' => '-',);
$row[] = array('data' => '-',);
$row[] = array('data' => '-',);
$row[] = array('data' => '-',);
$row[] = array('data' => '-',);
$row[] = array('data' => '-',);
}
$rows[] = $row;
}
$row = array();
$row[] = array('data' => 'Acumulado',);
$row[] = array('data' => number_format($seguimiento_financiero_proyecto['seg_financiero_proyecto']['TotalAsignadoProyecto'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),);
$row[] = array('data' => number_format($seguimiento_financiero_proyecto['seg_financiero_proyecto']['TotalComprometidoProyecto'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),);
$row[] = array('data' => number_format($seguimiento_financiero_proyecto['seg_financiero_proyecto']['TotalCausadoProyecto'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),);
$row[] = array('data' => number_format($seguimiento_financiero_proyecto['seg_financiero_proyecto']['TotalPagadoProyecto'], $form['#format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),);
$row[] = array('data' => '', 'colspan' => 2);
$rows[] = $row;
$node= $form['#node'];
$header2 = array();
$header2[] = array('data' => t('Planificado'));
$header2[] = array('data' => t('Ejecutado'));
$header2[] = array('data' => t('% de Logro'));
$header2[] = array('data' => t('Estatus de la Inversión'));
$rows2 = array();
$planificadov = $form['cantidad_metafisica_planificado']['#value'];
$ejecutadov = $form['cantidad_metafisica_ejecutado']['#value'];
$estatus_ejecucion = _calcularzonacritica($planificadov, $ejecutadov);
$porczonacritica = $estatus_ejecucion['porczonacritica'];
$textozona = $estatus_ejecucion['textozona'];
$colorzona = $estatus_ejecucion['colorzona'];
$colorfontzona = $estatus_ejecucion['colorfontzona'];
$row2 = array();
$row2[] = array('data' => drupal_render($form['cantidad_metafisica_planificado']),);
$row2[] = array('data' => drupal_render($form['cantidad_metafisica_ejecutado']),);
$row2[] = array('data' => drupal_render($form['cantidad_metafisica_porcen']),);
$row2[] = array('data' => $textozona, 'style' => 'font-weight: bold;background:' . $colorzona . '; color:' . $colorfontzona, 'id' => 'metafisica-inversion-form',);
$rows2[] = $row2;
$output = '';
$output .= '
';
$seguimiento_proyecto = _seguimiento_mesactual_proyecto_load($node, $i);
$state_name = t("Por ingresar");
if (workflow_get_state_name($seguimiento_proyecto['segmes']['estado'])) {
$state_name = workflow_get_state_name($seguimiento_proyecto['segmes']['estado']);
}
$grupo = explode('-', $form['#grupo']['label']);
$output .= '';
$fecha = explode('-', $node->field_proyecto_fecha_i[0]['value']);
$mes_inicio = (int) $fecha[1];
$mes_final = variable_get('seguimiento_proyectos_cantidad_meses_seguimiento', 0);
if ($form['#op_fields'] == 'comentario_metafisica' || $form['#op_fields'] == 'full') {
$output .= '';
}
if ($form['#op_fields'] == 'comentario_informacionfinanciera') {
if ($mes_inicio <= ($mes_final + 1)) {
$title[] = '' . t('La unidad de medida se considera acumulativa:') . '';
$column[] = array('data' => drupal_render($form['es_acumulativo']));
$columns[] = $column;
$output .= theme('table', $title, $columns) . '
';
}
$output .= '';
}
//beneficiarios
$muestra_beneficiarios = variable_get('proyectos_operativos_muestra_beneficiario', TRUE);
$muestra = false;
if ($muestra_beneficiarios && isset($form['comentario_metafisica'])) {
$header3 = array();
$header3[] = array('data' => t('Beneficiario'));
$rows3 = array();
foreach($node->field_proyecto_beneficiario as $id => $beneficiarios) {
if (isset($form['tipobeneficiario_'.$id])) {
$row3 = array();
$row3[] = array('data' => $beneficiarios['value'],);
$row3[] = array('data' => drupal_render($form['tipobeneficiario_'.$id]),);
$rows3[] = $row3;
$muestra = true;
}
}
}
if ($muestra_beneficiarios && $muestra || $form['#op_fields'] == 'full') {
$header3[] = array('data' => t('Cantidad de Beneficiarios durante el mes de ') . $meses[$form['#mes']]);
$output .= '';
}
$output .= _mostrarleyendazonacritica();
$output .= '
';
$output .= drupal_render($form);
return $output;
}
/*
* validacion del formulario
* Implementation of seguimiento_proyecto_datospormes_modificar_form_validate()
*/
function seguimiento_proyecto_datospormes_modificar_form_validate($form, &$form_state) {
$proyectos_operativos_path = drupal_get_path('module', 'proyectos_operativos');
drupal_add_js($proyectos_operativos_path . '/js/proyectos_operativos_extra.js');
$modulo_seguimiento_proyecto_y_aes_path = drupal_get_path('module', 'accion_especifica_de_proyecto_seguimiento');
drupal_add_js($modulo_seguimiento_proyecto_y_aes_path . '/js/seg_proyecto_validaciones_original.js');
drupal_add_js($form['#format_number'], 'setting');
//valores positivos meta física
if (isset($form_state['values']['cantidad_metafisica_ejecutado'])) {
if ($form_state['values']['cantidad_metafisica_ejecutado'] < 0) {
form_set_error('cantidad_metafisica_ejecutado', t('El valor \'Ejecutado\' en la meta física debe ser mayor o igual a cero.'));
}
}
//valores positivos cantidad de beneficiarios durante el mes
if (variable_get('proyectos_operativos_muestra_beneficiario', TRUE) && isset($form['comentario_metafisica'])) {
if (isset($form['#node']->field_proyecto_beneficiario)) {
foreach($form['#node']->field_proyecto_beneficiario as $id => $beneficiarios) {
if ($form_state['values']['tipobeneficiario_'.$id] < 0) {
form_set_error('tipobeneficiario_'.$id, t('La cantidad de beneficiarios debe ser mayor o igual a cero.'));
}
}
}
}
}
/*
* procesamiento del formulario
* Implementation of seguimiento_proyecto_datospormes_modificar_form_submit()
*/
function seguimiento_proyecto_datospormes_modificar_form_submit($form, &$form_state) {
global $user;
$consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($form['#node'], $form['#mes']);
$es_acumulativo = isset($form_state['values']['es_acumulativo']) ? $form_state['values']['es_acumulativo'] : $form['#node']->es_acumulativo;
if (isset($consultaseguimientoactual['segmes']['id_seg'])) {
//actualizar
if ($form['#op_fields'] == 'comentario_metafisica' || $form['#op_fields'] == 'full' && isset($form_state['values']['cantidad_metafisica_ejecutado'])) {
$ss1=check_plain($form_state['values']['comentario_metafisica']);
$exe_query = db_query("UPDATE {seguimiento_proyecto} SET ejecutadometafisica = %d, infocomplementaria_metafisica = '%s' WHERE id_seg = %d", $form_state['values']['cantidad_metafisica_ejecutado'], $ss1, $consultaseguimientoactual['segmes']['id_seg']);
}
if($form['#op_fields'] == 'comentario_informacionfinanciera' || $form['#op_fields'] == 'full' && isset($form_state['values']['comentario_informacionfinanciera'])) {
$sss=check_plain($form_state['values']['comentario_informacionfinanciera']);
$exe_query = db_query("UPDATE {seguimiento_proyecto} SET infocomplementaria_metafinanciera = '%s' WHERE id_seg = %d", $sss, $consultaseguimientoactual['segmes']['id_seg']);
}
$id_seg = $consultaseguimientoactual['segmes']['id_seg'];
$exe_query = db_query("UPDATE {seguimiento_proyecto} SET acumulativo = %d WHERE nid = %d", $es_acumulativo, $form['#node']->nid);
}
else{
//insertar
if (isset($form_state['values']['cantidad_metafisica_ejecutado'])) {
$exe_query = db_query("INSERT INTO {seguimiento_proyecto} (nid, mes, ejecutadometafisica, infocomplementaria_metafisica, fecha, estado, uid, acumulativo) VALUES (%d, %d, %d, '%s', %d, %d, %d, %d)", $form['#node']->nid, $form['#mes'], $form_state['values']['cantidad_metafisica_ejecutado'], check_plain($form_state['values']['comentario_metafisica']), time(), $form['#state_creation'], $user->uid, $es_acumulativo);
}
else {
$exe_query = db_query("INSERT INTO {seguimiento_proyecto} (nid, mes, infocomplementaria_metafinanciera, fecha, estado, uid, acumulativo) VALUES (%d, %d, '%s', '%s', '%s', %d, %d)", $form['#node']->nid, $form['#mes'], check_plain($form_state['values']['comentario_informacionfinanciera']), time(), $form['#state_creation'], $user->uid, $es_acumulativo);
}
$id_seg = db_last_insert_id('seguimiento_proyecto', 'id_seg');
//construir transicion (creacion) -> ingresado
if (module_exists('workflow')) {
$wid = workflow_get_workflow_for_type('proyectos_operativos');
if ($wid) {
$estadoInicialFlujo = _workflow_creation_state($wid);
if($estadoInicialFlujo==$form['#state_creation']){
//Siguiente estado
$transitions = workflow_allowable_transitions($estadoInicialFlujo);
unset($transitions[$estadoInicialFlujo]);
db_query("INSERT INTO {seguimiento_proyecto_transiciones_estados} (estado, estado_ant, comentario, date, id_seg, uid) VALUES (%d, %d, '%s', %d, %d, %d)", key($transitions), $estadoInicialFlujo, 'Creación del Seguimiento', time(), $id_seg, $user->uid);
$ultima_id_transicion_seg = db_query("SELECT max(a.id_seg_transicion_estado) AS id FROM {seguimiento_proyecto_transiciones_estados} AS a WHERE a.id_seg = %d", $id_seg);
$seg_transicion_estado = db_fetch_object($ultima_id_transicion_seg);
db_query('UPDATE {seguimiento_proyecto} SET estado = %d, id_seg_transicion_estado = %d WHERE id_seg = %d', key($transitions), $seg_transicion_estado->id, $id_seg);
}
}
}
}
if (variable_get('proyectos_operativos_muestra_beneficiario', TRUE) && isset($form['comentario_metafisica'])) {
if (isset($form['#node']->field_proyecto_beneficiario)) {
foreach($form['#node']->field_proyecto_beneficiario as $id => $beneficiarios) {
$actualizada=0;
foreach($consultaseguimientoactual['seguimientos_beneficiarios'] as $seg_benef){
if($id == $seg_benef['posicion_beneficiario']){
//actualizar
$exe_query = db_query("UPDATE {seguimiento_proyecto_beneficiarios} SET cant_beneficiarios_mes = %d WHERE id_seg_beneficiario = %d", $form_state['values']['tipobeneficiario_'.$id], $seg_benef['id_seg_beneficiario']);
$actualizada=1;
}
}
if($actualizada==0){//revisar
//insertar
$exe_query = db_query("INSERT INTO {seguimiento_proyecto_beneficiarios} (id_seg, posicion_beneficiario, cant_beneficiarios_mes) VALUES (%d, %d, %d)", $id_seg, $id, $form_state['values']['tipobeneficiario_'.$id]);
}
}
}
}
if ($exe_query == true) {
$meses = json_decode(MESES);
$mes =$form['#mes'];
drupal_set_message(t('Se ha guardado el seguimiento del mes de ').strval($meses[$mes]).' para el proyecto operativo.');
}
if (!$_REQUEST['destination']) {
$form_state['redirect'] = 'proyectosop/' . $form['#node']->nid . '/seguimiento/proyecto';
}
}