'. t("Este modulo se encarga de la gestión del seguimiento de las acciones específicas de un proyecto operativo") .'

'; break; } return $output; } // function accion_especifica_de_proyecto_seguimiento_help /* * Implementation of hook_menu() */ function accion_especifica_de_proyecto_seguimiento_menu() { $items = array(); //----------------------------------------------------------------------------Seguimiento de acciones especificas de proyectos operativos $items['node/%node/seguimiento_aeproyecto'] = array( 'title' => 'Seguimiento', 'type' => MENU_CALLBACK, 'access callback' => '_accion_especifica_de_proyecto_seguimiento_access', 'access arguments' => array(1), 'file' => 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto.pages.inc', 'page callback' => 'seguimiento_accion_especifica_deproyecto_page', 'page arguments' => array(1), 'weight' => 2, ); $items['node/%node/seguimiento_aeproyecto/partidas/%messegaepartida'] = array( 'title' => 'Seguimiento', 'type' => MENU_CALLBACK, 'access callback' => '_accion_especifica_de_proyecto_seguimiento_consultar_mes_access', 'access arguments' => array(1,4), 'file' => 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto_partidaspormes.pages.inc', 'page callback' => 'seguimiento_accion_especifica_deproyecto_partidaspormes_page', 'page arguments' => array(1,4), 'weight' => 2, ); $items['node/%node/seguimiento_aeproyecto/partidas/%messegaepartida/view'] = array( 'title' => 'Seguimiento', 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10 ); $items['node/%node/seguimiento_aeproyecto/partidas/%messegaepartida/edit'] = array( 'title' => 'Seguimiento', 'type' => MENU_CALLBACK, 'access callback' => '_accion_especifica_de_proyecto_seguimiento_modificar_mes_access', 'access arguments' => array(1,4), //'file' => 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto_partidaspormes_modificar.forms.inc', 'page callback' => 'drupal_get_form', 'page arguments' => array('seguimiento_accion_especifica_deproyecto_partidaspormes_modificar_form', 1, 4), 'weight' => 2, ); //----------------------------------------------------------------------------Administracion Seguimiento de acciones especificas de proyectos operativos $items['admin/settings/ente_planificador/seguimiento_proyecto_y_aes'] = array( 'title' => t('Seguimiento Proyecto y sus Acciones Especificas'), 'page callback' => 'drupal_get_form', 'page arguments' => array('accion_especifica_de_proyecto_seguimiento_admin_settings'), 'access arguments' => array('admin planificador'), 'weight' => -6, 'type' => MENU_LOCAL_TASK, 'file' => 'includes/accion_especifica_de_proyecto_seguimiento.admin.inc', ); //----------------------------------------------------------------------------workflow $items['node/%node/seguimiento_aeproyecto/%messegaepartida/workflow/%seg_proyecto_y_aes_wk_menu'] = array( 'title' => 'Seguimiento', 'type' => MENU_LOCAL_TASK, 'access callback' => '_accion_especifica_de_proyecto_seguimiento_mes_mover_estado_access', 'access arguments' => array(1,3,5), 'file' => 'includes/ae_proyecto/cambiodeestado_seg_ae_proyecto_paginaconfirmacion.forms.inc', 'page callback' => 'drupal_get_form', 'page arguments' => array('cambiodeestado_seg_ae_proyecto_paginaconfirmacion_form', 1, 3, 5), 'weight' => 2, ); $items['node/%node/seguimiento_aeproyecto/%messegaepartida/workflow/historial'] = array( 'title' => 'Historial Seguimiento', 'type' => MENU_CALLBACK, 'access callback' => '_accion_especifica_de_proyecto_seguimiento_access', 'access arguments' => array(1), 'file' => 'includes/ae_proyecto/historial_cambiodeestado_seg_aeproyecto.pages.inc', 'page callback' => 'historial_cambiodeestado_seg_aeproyecto_page', 'page arguments' => array(1,3), 'weight' => 2, ); return $items; } //************************************************************************************************************************************************** //permisos de acceso a las paginas /** * verificar que el nodo que desea se evaluado sea de tipo 'accion_especifica' */ function _accion_especifica_de_proyecto_seguimiento_access($node) { return (_es_tipo_accionespecifica($node)); } // function _accion_especifica_de_proyecto_seguimiento_access /** * verificar que el nodo que desea se evaluado sea de tipo 'accion_especifica', y que el mes ingresado este dentro del periodo de duracion de la ae */ function _accion_especifica_de_proyecto_seguimiento_consultar_mes_access($node, $mes=0) { return ((_es_tipo_accionespecifica($node))&&(_mes_dentro_de_duracion_ae_proyecto($node, $mes))); } // function _accion_especifica_de_proyecto_seguimiento_consultar_mes_access /** * verificar que el nodo que desea se evaluado sea de tipo 'accion_especifica', que el mes este dentro dentro del periodo de duracion, mes habilitado para seg, y periodo de seguimiento activo */ function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access($node, $mes=0) { return ((_es_tipo_accionespecifica($node))&&(_mes_dentro_de_duracion_ae_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($node, $mes))&&(_estado_seg_en_nivel_de_usuario($node, $mes))&&(_es_elmismo_ente_proyecto_y_usuario($node)) &&_proyectooperativo_esta_aprobado($node)); } // function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access /** * acceso a workflow */ function _accion_especifica_de_proyecto_seguimiento_mes_mover_estado_access($node, $mes=0, $estadonuevo=0) { return ((_es_tipo_accionespecifica($node))&&(_mes_dentro_de_duracion_ae_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($node, $mes, $estadonuevo) &&(_es_elmismo_ente_proyecto_y_usuario($node)) &&_proyectooperativo_esta_aprobado($node)); } // function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access //************************************************************************************************************************************************** /* * Implementation of hook_ente_procesos_alter() */ function accion_especifica_de_proyecto_seguimiento_ente_procesos_alter(&$procesos, $type) { if ($type != 'status') { $procesos['proyecto_y_accionesespecificas_seguimiento'] = array( 'title' => t('Seguimiento Proyectos Operativos y sus Acciones Especificas'), 'description' => t('Permite el seguimiento de los Proyectos Operativos y de sus Acciones Especificas'), 'message' => 'Se podrá registrar y/o modificar el seguimiento del Proyecto Opeativo y de sus Acciones Especificas desde %fecha hasta la fecha %fecha1', 'message_expire' => 'Registrar y/o modificar el seguimiento del Proyecto Operativo y sus Acciones Especificas no se encuentra disponible, se podra realizar desde %fecha hasta la fecha %fecha1)', 'weight' => 3, 'proceso' => 'proyectos_operativos', ); } } /** * Implementation of messegaepartida_load(). * Menu loader callback. Load a mes. */ function messegaepartida_load($mes = 0) { settype($mes, "integer"); if ($mes >= 0 && $mes < 12) { return $mes; } return FALSE; } /** * verificar que el nodo que desea se evaluado sea de tipo 'accion_especifica' */ function _es_tipo_accionespecifica($node) { return ($node->type == 'accion_especifica'); } // function _accion_especifica_de_proyecto_seguimiento_access /** * verificar que el nodo que desea se evaluado sea de tipo 'accion_especifica' */ function _mes_habilitado_para_seguimiento($mes=0) { $mes_seguimiento_proyecto_y_aes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0); return ($mes_seguimiento_proyecto_y_aes-1 == $mes); } // function _accion_especifica_de_proyecto_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_ae_proyecto($node, $mes=0) { $mes = $mes+1;//colocando parametro entre 1 y 12 $resp = FALSE; //Accion Especifica de Proyecto if ($node->type == 'accion_especifica'){ $fechayhora_inicio = $node->field_accion_esp_fechai[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_accion_esp_fechaf[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; } /** * verificar si por la fecha actual, esta activo el perio de ingreso de seguimiento */ function _periodo_de_seguimiento_proyecto_y_aes_esta_activo(){ $current_time = time(); $tipo_plan = 'proyecto_y_accionesespecificas_seguimiento'; $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, 2); $fecha = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } return $fecha; } function _es_usuario_autenticado(){ global $user; if($user->uid > 0){ return TRUE; } return FALSE; } function _permiso_para_realizar_transicion_estado($node, $mes = 0, $estadonuevo=0){ $consultaseguimientoactual = _seguimiento_mesactual_partida_ae_deproyecto_load($node, $mes); $estado = (isset($consultaseguimientoactual['segmes']['estado'])) ? $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; } /* * verificar nivel de usuario para modificar */ function _estado_seg_en_nivel_de_usuario($node, $mes=0){ //calcular el estado $transiciones_dispo = _obtener_transiciones_disponibles($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($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'] == $nodo_proyecto->field_proyecto_ente[0]['nid']){//deben ser del mismo ente que el proyecto return TRUE; }else{ return FALSE; } } return TRUE; } /* * verificar que sea el mismo ente, tanto para el proyecto como para el usuario (si es enlace o supervisor) */ function _seg_esta_aprobado($node, $mes=0){ $transiciones_dispo = _obtener_transiciones_disponibles($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 anno habilitado */ function _anno_habilitado_para_seg($node){ $anno = variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0); $idnodo_proyecto = 0; if ($node->type == 'proyectos_operativos'){ $idnodo_proyecto = $node->nid; }elseif($node->type == 'accion_especifica'){ $nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']); $idnodo_proyecto = $nodo_proyecto->nid; } if($idnodo_proyecto){ $query = "SELECT * from {proyectos_operativos} where nid=%d"; $queryResult = db_query ( $query, $idnodo_proyecto); $datosproyecto = db_fetch_object ( $queryResult ) ; if ($datosproyecto->year == $anno) { return TRUE; } } return FALSE; } //************************************************************************************************************************************************** //pagina de formulario module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto_partidaspormes_modificar.forms'); //************************************************************************************************************************************************** //funciones auxiliares module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/00_generales/funciones_auxiliares.pages'); //************************************************************************************************************************************************** //funciones para consultas a base de datos //carga de datos comprometido, causado, pagado, asignado module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/ae_proyecto/funciones_consulta_bd.pages'); //************************************************************************************************************************************************** //workflow // codificada lunes 18 03 13, por Diego Uzcátegui /* * Implementation of seg_proyecto_y_aes_wk_menu_load() */ function seg_proyecto_y_aes_wk_menu_load($state = 0) { $states = _obtener_estados_seguimiento_mes(); //echo print_r($states).'
'; if (isset($states['states'][$state])) { return $state; } return FALSE; } //cargar funciones para flujo de trabajo module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/00_generales/funciones_flujo_trabajo.pages'); //cargar funciones de consulta de valores de reformulaciones module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/funciones_consulta_valores_reformulaciones.pages');