'. t("Este modulo se encarga de la gestión del seguimiento de proyectos operativos") .'

'; break; } return $output; } // function proyecto_operativo_seguimiento_help /* * Implementation of hook_menu() */ function proyecto_operativo_seguimiento_menu() { $items = array(); $items['proyectos_operativos/seguimiento_proyecto'] = array( 'title' => t('Seguimiento de Proyectos'), 'page callback' => 'proyecto_operativo_seguimiento_search_seguimiento_display', 'access arguments' => array('ver planificador'), 'type' => MENU_LOCAL_TASK, ); $items['proyectos_operativos/seguimiento_proyecto/proyectos'] = array( 'title' => t('Lista de proyectos'), 'page callback' => 'proyecto_operativo_seguimiento_search_seguimiento_display', 'access arguments' => array('ver planificador'), 'type' => MENU_DEFAULT_LOCAL_TASK, ); $items['proyectos_operativos/seguimiento_proyecto/entramite'] = array( 'title' => t('Lista de proyectos sin Aprobar'), 'page callback' => 'proyecto_operativo_seguimiento_search_seguimiento_display_not_approved', 'access arguments' => array('ver planificador'), 'type' => MENU_LOCAL_TASK, ); $items['proyectosop/%node/seguimiento_proyecto'] = array( 'title' => 'Seguimiento', 'type' => MENU_LOCAL_TASK, 'access callback' => '_proyecto_operativo_seguimiento_access', 'access arguments' => array(1), 'file' => 'includes/proyecto/seguimiento_proyecto.pages.inc', 'page callback' => 'seguimiento_proyecto_y_aes_lista_page', 'page arguments' => array(1), 'weight' => 2, ); $items['node/%node/seguimiento_proyecto'] = array( 'title' => 'Seguimiento', 'type' => MENU_CALLBACK, 'access callback' => '_proyecto_operativo_seguimiento_access', 'access arguments' => array(1), 'file' => 'includes/proyecto/seguimiento_proyecto.pages.inc', 'page callback' => 'seguimiento_proyecto_page', 'page arguments' => array(1), 'weight' => 2, ); $items['node/%node/seguimiento_proyecto/mes/%messegaepartida/edit'] = array( 'title' => 'Seguimiento', 'type' => MENU_CALLBACK, 'access callback' => '_proyecto_operativo_seguimiento_modificar_mes_access', 'access arguments' => array(1,4), //'file' => 'includes/proyecto/seguimiento_proyecto_datospormes_modificar.forms.inc', 'page callback' => 'drupal_get_form', 'page arguments' => array('seguimiento_proyecto_datospormes_modificar_form', 1, 4), 'weight' => 2, ); //------------------workflow $items['node/%node/seguimiento_proyecto/%messegaepartida/workflow/%seg_proyecto_y_aes_wk_menu'] = array( 'title' => 'Seguimiento', 'type' => MENU_LOCAL_TASK, 'access callback' => '_proyecto_seguimiento_mes_mover_estado_access', 'access arguments' => array(1,3,5), 'file' => 'includes/proyecto/cambiodeestado_seg_proyecto_paginaconfirmacion.forms.inc', 'page callback' => 'drupal_get_form', 'page arguments' => array('cambiodeestado_seg_proyecto_paginaconfirmacion_form', 1, 3, 5), 'weight' => 2, ); $items['node/%node/seguimiento_proyecto/%messegaepartida/workflow/historial'] = array( 'title' => 'Historial Seguimiento', 'type' => MENU_CALLBACK, 'access callback' => '_proyecto_operativo_seguimiento_access', 'access arguments' => array(1), 'file' => 'includes/proyecto/historial_cambiodeestado_seg_proyecto.pages.inc', 'page callback' => 'historial_cambiodeestado_seg_proyecto_page', 'page arguments' => array(1,3), 'weight' => 2, ); //-------------------Fase de Seguimiento de proyectos operativos y sus acciones especificas $items['node/%node/fase_de_seguimiento_proyecto_y_aes/mes/%messegaepartida'] = array( 'title' => 'Seguimiento', 'type' => MENU_CALLBACK, 'access callback' => '_fasedeseguimiento_proyecto_y_ae_access', 'access arguments' => array(1,4), //'file' => 'includes/fase_de_seguimiento_proyecto_y_aes.pages.inc', 'page callback' => 'fase_de_seguimiento_proyecto_y_aes_page', 'page arguments' => array(1,4), 'weight' => 2, ); return $items; } //************************************************************************************************************************************************** //permisos de acceso a las paginas /** * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos' */ function _proyecto_operativo_seguimiento_access($node) { return (_es_tipo_proyectooperativo($node)); } // function _proyecto_operativo_seguimiento_access /** * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos', que el mes este dentro dentro del periodo de duracion, mes habilitado para seg, y periodo de seguimiento activo */ function _proyecto_operativo_seguimiento_modificar_mes_access($node, $mes=0) { return ((_es_tipo_proyectooperativo($node))&&(_mes_dentro_de_duracion_proyecto($node, $mes))&&(_mes_habilitado_para_seguimiento($mes))&&(_anno_habilitado_para_seg($node))&&(_periodo_de_seguimiento_proyecto_y_aes_esta_activo())&&_es_usuario_autenticado() &&(!_seg_esta_aprobado_proyecto($node, $mes)) &&(_estado_seg_en_nivel_de_usuario_proyecto($node, $mes)) &&(_es_elmismo_ente_proyecto_y_usuario_proyecto($node)) &&_proyectooperativo_esta_aprobado($node)); } // function _proyecto_operativo_seguimiento_modificar_mes_access /** * acceso a workflow */ function _proyecto_seguimiento_mes_mover_estado_access($node, $mes=0, $estadonuevo=0) { return ((_es_tipo_proyectooperativo($node))&&(_mes_dentro_de_duracion_proyecto($node, $mes))&&(_mes_habilitado_para_seguimiento($mes))&&(_anno_habilitado_para_seg($node))&&(_periodo_de_seguimiento_proyecto_y_aes_esta_activo())&&(_es_usuario_autenticado())&&_permiso_para_realizar_transicion_estado_proyecto($node, $mes, $estadonuevo) &&(_es_elmismo_ente_proyecto_y_usuario_proyecto($node)) &&_proyectooperativo_esta_aprobado($node)); } // function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access /** * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos' */ function _fasedeseguimiento_proyecto_y_ae_access($node, $mes=0) { return (_es_tipo_proyectooperativo($node)&&(_mes_dentro_de_duracion_proyecto($node, $mes)) &&_proyectooperativo_esta_aprobado($node)); } // function _fasedeseguimiento_proyecto_y_ae_access /** * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos' */ function _es_tipo_proyectooperativo($node) { return ($node->type == 'proyectos_operativos'); } // function _proyecto_operativo_seguimiento_access /** * verificar proyecto operativo este aprobado */ function _proyectooperativo_esta_aprobado($node) { $estado_aprobado = variable_get('proyectos_operativos_state_aprobado', NULL); if ($node->type =='proyectos_operativos') { return ($node->_workflow == $estado_aprobado); } elseif($node->type =='accion_especifica'){ $nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']); return ($nodo_proyecto->_workflow == $estado_aprobado); } return FALSE; } // function _proyecto_operativo_seguimiento_access /** * verificar si un mes dado esta dentro del periodo de duracion de una accion especifica o de un proyecto operativo, dependiendo del tipo de nodo */ function _mes_dentro_de_duracion_proyecto($node, $mes=0) { $mes = $mes+1;//colocando parametro entre 1 y 12 $resp = FALSE; //Proyecto if ($node->type == 'proyectos_operativos') { $fechayhora_inicio = $node->field_proyecto_fecha_i[0]['value']; list($fecha_inicio, $hora_inicio) = split('[ ]', $fechayhora_inicio); list($anno_inicio, $mes_inicio, $dia_inicio) = split('[/.-]', $fecha_inicio); $m_inicio = intval($mes_inicio); $fechayhora_fin = $node->field_proyecto_fecha_f[0]['value']; list($fecha_fin, $hora_fin) = split('[ ]', $fechayhora_fin); list($anno_fin, $mes_fin, $dia_fin) = split('[/.-]', $fecha_fin); $m_fin = intval($mes_fin); if (($m_inicio<=$mes) && ($m_fin>=$mes)) { $resp = TRUE; } else{ $resp = FALSE; } } return $resp; } function _permiso_para_realizar_transicion_estado_proyecto($node, $mes = 0, $estadonuevo=0){ $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes); //estado $estado = ((isset($consultaseguimientoactual['segmes']['estado'])) && ($consultaseguimientoactual['segmes']['estado'] > 0) )? $consultaseguimientoactual['segmes']['estado'] : -1; if ($estado == $estadonuevo) { return FALSE; } $states = _obtener_estados_seguimiento_mes(); $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL); $estado_naprobado = variable_get('acciones_centralizadas_state_naprobado', NULL); global $user; $ente = usuario_tiene_ente($user->uid); $roles = array_keys($user->roles); if ($user->uid == 1) { // Superuser is special. $roles_transition = 'ALL'; } else { $roles_transition = $roles; if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento $roles_transition += array('author' => 'author'); } } $transitions = array(); if ($states['wid']) { $transitions = workflow_allowable_transitions($estado, 'to', $roles_transition); } if (isset($transitions[$estadonuevo])) { return TRUE; } return FALSE; } function _seg_esta_aprobado_proyecto($node, $mes=0){ $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes); $estado = $transiciones_dispo['estado_actual']; $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL); if ($estado == $estado_aprobado) { return TRUE; } return FALSE; } /* * verificar nivel de usuario para modificar */ function _estado_seg_en_nivel_de_usuario_proyecto($node, $mes=0){ //calcular el estado $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes); $nivel_usuario = _obtener_nivel_usuario_segun_estado($transiciones_dispo['nombre_estado_actual']); $rol_ente_usuario = _obtener_rol_y_ente_de_usuario(); if (($transiciones_dispo['estado_actual'] < 0)&&($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='administrador')){ return true; } if (($nivel_usuario == $rol_ente_usuario['rol'])||$rol_ente_usuario['rol']=='administrador'){//nivel de usuario == rol actor return TRUE; } return FALSE; } /* * verificar que sea el mismo ente, tanto para el proyecto como para el usuario (si es enlace o supervisor) */ function _es_elmismo_ente_proyecto_y_usuario_proyecto($node) { $rol_ente_usuario = _obtener_rol_y_ente_de_usuario(); if ($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='supervisor') {//enlace o supervisor //$nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']); if ($rol_ente_usuario['id_ente'] == $node->field_proyecto_ente[0]['nid']) {//deben ser del mismo ente que el proyecto return TRUE; }else{ return FALSE; } } return TRUE; } //************************************************************************************************************************************************** //pagina de formulario module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/proyecto/seguimiento_proyecto_datospormes_modificar.forms'); //************************************************************************************************************************************************** //funciones para consultas a base de datos module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/proyecto/funciones_consulta_bd_proyecto.pages'); //************************************************************************************************************************************************** //fase de seguimiento module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/fase_de_seguimiento_proyecto_y_aes.pages'); //colcar el enlace haci la fase de seguimiento del proyecto y sus acciones /* * Implementation of hook_acciones_obtiene_links_alter() */ function proyecto_operativo_seguimiento_proyecto_obtiene_links_alter(&$links, $proyecto, $acceso = FALSE) { $meses = array( 0 => t('January'), 1 => t('February'), 2 => t('March'), 3 => t('April'), 4 => t('May'), 5 => t('June'), 6 => t('July'), 7 => t('August'), 8 => t('September'), 9 => t('Octuber'), 10 => t('November'), 11 => t('December'), ); $nodo_proyecto = node_load($proyecto->nid); if ($nodo_proyecto->anhoproyectos_operativos == variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0) && _proyectooperativo_esta_aprobado($nodo_proyecto)) { $mes_seguimiento_proyecto_y_aes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0); $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($nodo_proyecto); if ($mes_seguimiento_proyecto_y_aes == ($mes_fase_seg + 1)) { $links[] = array( 'data' => l(t('Fase de Seguimiento ').'('.$meses[$mes_fase_seg].')', 'node/' . $nodo_proyecto->nid."/fase_de_seguimiento_proyecto_y_aes/mes/".$mes_fase_seg), 'class' => 'proyectos-operativos-faseseguimiento', ); } } } /** * Muestra la lista de los Proyectos que se encuentran en fase de seguimiento */ function proyecto_operativo_seguimiento_search_seguimiento_display() { drupal_set_title(t("Lista de los proyectos en fase de Seguimiento")); $ouput = ''; $sql = ''; $sql_count = ''; global $user; $format_number = array( 'decimals' => 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', '.'), ); $roles = array_keys($user->roles); //roles de los usuarios $rol_control = variable_get('ActorPlanificadorMacro', 2); $rol_supervisor = variable_get('ActorPlanificadorMicro', 2); $rol_enlace = variable_get('ActorPlanificadorEnlace', 2); $rows = array(); $i = 1; $meses = array( 0 => t('January'), 1 => t('February'), 2 => t('March'), 3 => t('April'), 4 => t('May'), 5 => t('June'), 6 => t('July'), 7 => t('August'), 8 => t('September'), 9 => t('Octuber'), 10 => t('November'), 11 => t('December'), ); $header = array(); $cab = 6; $step = 10; $states = array(); $first_state = 0; $ente = usuario_tiene_ente($user->uid); //ahno y mes valido para el seguimiento $anho = variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0); $mes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0); $estado_naprobado = variable_get('acciones_centralizadas_state_naprobado', NULL); $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL); if (!user_access('admin planificador') && $user->entes) { $inputs[] = $estado_naprobado; $inputs[] = $mes - 1; //se resta uno ya que el array de los meses empiesa en cero $inputs[] = $anho; $sql .= 'SELECT se.*, u.name, u.uid FROM {seguimiento_proyecto} AS se INNER JOIN {users} u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND po.ente = %d AND se.mes = %d AND po.year = %d ORDER BY se.id_seg DESC'; $sql_count .= 'SELECT COUNT(se.nid) FROM {seguimiento_proyecto} se INNER JOIN {users} u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND po.ente = %d AND se.mes = %d AND po.year = %d'; } elseif (user_access('admin planificador')) { $inputs[] = $estado_naprobado; $inputs[] = $mes - 1; //se resta uno ya que el array de los meses empiesa en cero $inputs[] = $anho; $sql .= 'SELECT se.*, u.name, u.uid FROM {seguimiento_proyecto} AS se INNER JOIN {users} AS u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.mes = %d AND po.year = %d ORDER BY se.id_seg DESC'; // $sql_count = "SELECT COUNT(se.nid) FROM {seguimiento_proyecto} se INNER JOIN {users} u ON u.uid = se.uid WHERE se.estado <> 17 AND se.estado <> 15 AND se.mes = 0"; $sql_count .= 'SELECT COUNT(se.nid) FROM {seguimiento_proyecto} AS se INNER JOIN {users} AS u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.mes = %d AND po.year = %d'; } $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, $ente_planificador->tipo); $tipo_plan = 'proyecto_y_accionesespecificas_seguimiento'; $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, 2); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if ($fecha) { if ($ente->nid) { $fecha = TRUE; if (user_access('admin planificador')) { $fecha = FALSE; } } } $wid = workflow_get_workflow_for_type('accion_centralizada'); if ($wid){ $states = workflow_get_states($wid); } $first_state = 0; if ($wid) { $first_state = _workflow_creation_state($wid); } $enlaces_estados = TRUE; if ($ente->nid && !user_access('admin planificador')) { $enlaces_estados = FALSE; } $header[] = array('data' => t('Ente')); $header[] = array('data' => t('Proyecto')); $header[] = array('data' => t('Estado')); $header[] = array('data' => t('Usuario')); $header[] = array('data' => t('Meta Fisica Ejecutada')); $header[] = array('data' => t('Acción')); $header[] = array('data' => t('')); $result = pager_query($sql, $step, 0, $sql_count, $inputs); while ($proyecto = db_fetch_object($result)) { $node = node_load($proyecto->nid); $editar = ($proyecto->estado == $estado_aprobado); $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($node); $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes); $transiciones_dispo = array(); $row = array(); $links = array(); if ($user->uid == 1) { // Superuser is special. $roles_transition = 'ALL'; } else { $roles_transition = $roles; if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento $roles_transition += array('author' => 'author'); } } $transitions = array(); if ($wid) { $transitions = workflow_allowable_transitions($proyecto->estado, 'to', $roles_transition); } unset($transitions[$proyecto->estado]); $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes); $nivel_usuario = _obtener_nivel_usuario_segun_estado($transiciones_dispo['nombre_estado_actual']); if (_periodo_de_seguimiento_proyecto_y_aes_esta_activo()) { if (($node->anhoproyectos_operativos == $anho) && ($proyecto->mes == $mes_fase_seg)) { $name_w = workflow_get_state_name($proyecto->estado); $transiciones_dispo[$proyecto->estado] = $name_w; $color = variable_get('acciones_centralizadas_state_color_' . $proyecto->estado, array()); $estado = isset($states[$proyecto->estado]) ? $states[$proyecto->estado] : 'N/A'; $ente = node_load($node->field_proyecto_ente[0]); //columnas de la tabla $row[] = array('data' => $ente->title, 'style' => 'background:' . $color, ); $row[] = array('data' => l($node->title, 'node/' . $node->nid), 'style' => 'background:' . $color, ); $row[] = array('data' => $estado, 'style' => 'background:' . $color, ); $row[] = array('data' => l($proyecto->name, 'user/' . $proyecto->uid), 'style' => 'background:' . $color,); $row[] = array('data' => $proyecto->ejecutadometafisica, 'style' => 'background:' . $color, ); if ($mes == ($mes_fase_seg + 1)) { $links[] = array( 'data' => '' . l(t('Consultar'), 'node/' . $node->nid . "/fase_de_seguimiento_proyecto_y_aes/mes/" . $mes_fase_seg, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '', 'class' => 'proyectos-operativos-faseseguimiento', ); } if (user_access('admin planificador')) { if (count($transitions) && $fecha && $proyecto->estado != $estado_naprobado && $proyecto->estado != $estado_aprobado && $proyecto->id_seg) { $links[] = '' . l(t('Modificar'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } if ($enlaces_estados && count($transitions) && $proyecto->estado != $estado_aprobado) { foreach ($transitions as $id => $transition) { $links[] = '' . l(t('Enviar a @state', array('@state' => $transition)), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg. '/workflow/' . $id, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } } } if ((in_array($rol_enlace, array_keys($user->roles))) || (in_array($rol_supervisor, array_keys($user->roles)))) { if (count($transitions) && $proyecto->estado != $estado_aprobado) { foreach ($transitions as $id => $transition) { $links[] = '' . l(t('Enviar a @state', array('@state' => $transition)), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg. '/workflow/' . $id, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } } if (count($transitions) && $fecha && $proyecto->estado != $estado_naprobado && $proyecto->estado != $estado_aprobado && $proyecto->id_seg) { $links[] = '' . l(t('Modificar'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } } if (isset($transiciones_dispo[$proyecto->estado])) { $links[] = '' . l(t('Consultar Historial de Estados'), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg . '/workflow/historial', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } $row[] = array('data' => theme('item_list', $links), 'style' => 'background:' . $color,); if (isset($transiciones_dispo[$proyecto->estado])) { $colorSemaforo = _calcular_color_semaforo_estado_actual($transiciones_dispo[$proyecto->estado]); $row[] = array('data' => '•', 'style' => 'font-weight: bold;font-size: 35px;text-align:center; color:' . $colorSemaforo); } } } $rows[] = $row; } if (!count($rows)) { $row[] = array('data' => 'No existen proyectos en fase de seguimiento sin aprobar', 'colspan' => 9); $rows[] = $row; } $output = ''; $output .= theme('table', $header, $rows); $output .= theme('pager', NULL); return $output; } /** * Muestra la lista de los Proyectos que se encuentran en fase de seguimiento */ function proyecto_operativo_seguimiento_search_seguimiento_display_not_approved() { drupal_set_title(t("Lista de proyectos en fase de Seguimiento sin Aprobar")); $ouput = ''; $sql = ''; $sql_count = ''; global $user; $format_number = array( 'decimals' => 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', '.'), ); $roles = array_keys($user->roles); //roles de los usuarios $rol_control = variable_get('ActorPlanificadorMacro', 2); $rol_supervisor = variable_get('ActorPlanificadorMicro', 2); $rol_enlace = variable_get('ActorPlanificadorEnlace', 2); $rows = array(); $i = 1; $meses = array( 0 => t('January'), 1 => t('February'), 2 => t('March'), 3 => t('April'), 4 => t('May'), 5 => t('June'), 6 => t('July'), 7 => t('August'), 8 => t('September'), 9 => t('Octuber'), 10 => t('November'), 11 => t('December'), ); $header = array(); $cab = 6; $step = 10; $states = array(); $first_state = 0; $ente = usuario_tiene_ente($user->uid); //ahno y mes valido para el seguimiento $anho = variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0); $mes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0); $estado_naprobado = variable_get('acciones_centralizadas_state_naprobado', NULL); $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL); if (!user_access('admin planificador') && $user->entes) { $inputs[] = $estado_naprobado; $inputs[] = $estado_aprobado; $inputs[] = $mes - 1; //se resta uno ya que el array de los meses empiesa en cero $inputs[] = $anho; $sql .= 'SELECT se.*, u.name, u.uid FROM {seguimiento_proyecto} AS se INNER JOIN {users} u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.estado <> %d AND po.ente = %d AND se.mes = %d AND po.year = %d ORDER BY se.id_seg DESC'; $sql_count .= 'SELECT COUNT(se.nid) FROM {seguimiento_proyecto} se INNER JOIN {users} u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.estado <> %d AND po.ente = %d AND se.mes = %d AND po.year = %d'; } elseif (user_access('admin planificador')) { $inputs[] = $estado_naprobado; $inputs[] = $estado_aprobado; $inputs[] = $mes - 1; //se resta uno ya que el array de los meses empiesa en cero $inputs[] = $anho; $sql .= 'SELECT se.*, u.name, u.uid FROM {seguimiento_proyecto} AS se INNER JOIN {users} AS u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.estado <> %d AND se.mes = %d AND po.year = %d ORDER BY se.id_seg DESC'; // $sql_count = "SELECT COUNT(se.nid) FROM {seguimiento_proyecto} se INNER JOIN {users} u ON u.uid = se.uid WHERE se.estado <> 17 AND se.estado <> 15 AND se.mes = 0"; $sql_count .= 'SELECT COUNT(se.nid) FROM {seguimiento_proyecto} AS se INNER JOIN {users} AS u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.estado <> %d AND se.mes = %d AND po.year = %d'; } $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, $ente_planificador->tipo); $tipo_plan = 'proyecto_y_accionesespecificas_seguimiento'; $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, 2); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if ($fecha) { if ($ente->nid) { $fecha = TRUE; if (user_access('admin planificador')) { $fecha = FALSE; } } } $wid = workflow_get_workflow_for_type('accion_centralizada'); if ($wid){ $states = workflow_get_states($wid); } $first_state = 0; if ($wid) { $first_state = _workflow_creation_state($wid); } $enlaces_estados = TRUE; if ($ente->nid && !user_access('admin planificador')) { $enlaces_estados = FALSE; } $header[] = array('data' => t('Ente')); $header[] = array('data' => t('Proyecto')); $header[] = array('data' => t('Estado')); $header[] = array('data' => t('Usuario')); $header[] = array('data' => t('Meta Fisica Ejecutada')); $header[] = array('data' => t('Acción')); $header[] = array('data' => t('')); $result = pager_query($sql, $step, 0, $sql_count, $inputs); while ($proyecto = db_fetch_object($result)) { $node = node_load($proyecto->nid); $editar = ($proyecto->estado == $estado_aprobado); $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($node); $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes); $transiciones_dispo = array(); $row = array(); $links = array(); if ($user->uid == 1) { // Superuser is special. $roles_transition = 'ALL'; } else { $roles_transition = $roles; if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento $roles_transition += array('author' => 'author'); } } $transitions = array(); if ($wid) { $transitions = workflow_allowable_transitions($proyecto->estado, 'to', $roles_transition); } unset($transitions[$proyecto->estado]); $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes); $nivel_usuario = _obtener_nivel_usuario_segun_estado($transiciones_dispo['nombre_estado_actual']); if (_periodo_de_seguimiento_proyecto_y_aes_esta_activo()) { if (($node->anhoproyectos_operativos == $anho) && ($proyecto->mes == $mes_fase_seg)) { $name_w = workflow_get_state_name($proyecto->estado); $transiciones_dispo[$proyecto->estado] = $name_w; $color = variable_get('acciones_centralizadas_state_color_' . $proyecto->estado, array()); $estado = isset($states[$proyecto->estado]) ? $states[$proyecto->estado] : 'N/A'; //columnas de la tabla $ente = node_load($node->field_proyecto_ente[0]); //columnas de la tabla $row[] = array('data' => $ente->title, 'style' => 'background:' . $color, ); $row[] = array('data' => l($node->title, 'node/' . $node->nid), 'style' => 'background:' . $color, ); $row[] = array('data' => $estado, 'style' => 'background:' . $color, ); $row[] = array('data' => l($proyecto->name, 'user/' . $proyecto->uid), 'style' => 'background:' . $color,); $row[] = array('data' => $proyecto->ejecutadometafisica, 'style' => 'background:' . $color, ); if ($mes == ($mes_fase_seg + 1)) { $links[] = array( 'data' => '' . l(t('Consultar'), 'node/' . $node->nid . "/fase_de_seguimiento_proyecto_y_aes/mes/" . $mes_fase_seg, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '', 'class' => 'proyectos-operativos-faseseguimiento', ); } if (user_access('admin planificador')) { if (count($transitions) && $fecha && $proyecto->estado != $estado_naprobado && $proyecto->estado != $estado_aprobado && $proyecto->id_seg) { $links[] = '' . l(t('Modificar'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } if ($enlaces_estados && count($transitions) && $proyecto->estado != $estado_aprobado) { foreach ($transitions as $id => $transition) { $links[] = '' . l(t('Enviar a @state', array('@state' => $transition)), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg. '/workflow/' . $id, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } } } if ((in_array($rol_enlace, array_keys($user->roles))) || (in_array($rol_supervisor, array_keys($user->roles)))) { if (count($transitions) && $proyecto->estado != $estado_aprobado) { foreach ($transitions as $id => $transition) { $links[] = '' . l(t('Enviar a @state', array('@state' => $transition)), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg. '/workflow/' . $id, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } } if (count($transitions) && $fecha && $proyecto->estado != $estado_naprobado && $proyecto->estado != $estado_aprobado && $proyecto->id_seg) { $links[] = '' . l(t('Modificar'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } } if (isset($transiciones_dispo[$proyecto->estado])) { $links[] = '' . l(t('Consultar Historial de Estados'), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg . '/workflow/historial', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . ''; } $row[] = array('data' => theme('item_list', $links), 'style' => 'background:' . $color,); if (isset($transiciones_dispo[$proyecto->estado])) { $colorSemaforo = _calcular_color_semaforo_estado_actual($transiciones_dispo[$proyecto->estado]); $row[] = array('data' => '•', 'style' => 'font-weight: bold;font-size: 35px;text-align:center; color:' . $colorSemaforo); } } } $rows[] = $row; } if (!count($rows)) { $row[] = array('data' => 'No existen proyectos en fase de seguimiento sin aprobar', 'colspan' => 9); $rows[] = $row; } $output = ''; $output .= theme('table', $header, $rows); $output .= theme('pager', NULL); return $output; }