'. 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(); //----------------------------------------------------------------------------Seguimiento de acciones específicas de proyectos operativos $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) && _proyectooperativo_esta_aprobado($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); //echo $mes_seguimiento_proyecto_y_aes . '-' . $mes_fase_seg . '
'; 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', ); } } }