'. 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(); $items['proyectosop/%proyectosop/seguimiento/ae'] = array( 'title' => 'AE', 'type' => MENU_LOCAL_TASK, 'access callback' => '_fasedeseguimiento_proyecto_y_ae_access', 'access arguments' => array(1), 'file' => 'includes/fase_de_seguimiento_proyecto_y_aes.pages.inc', 'page callback' => 'fase_de_seguimiento_proyecto_y_aes_page', 'page arguments' => array(1), 'weight' => 3, ); $items['proyectosop/%proyectosop/seguimiento/ae/view'] = array( 'title' => 'Seguimiento', 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10 ); //----------------------------------------------------------------------------Seguimiento de acciones especificas de proyectos operativos $items['proyectosop/%proyectosop/seguimiento/ae/%accion_especifical/view'] = array( 'title' => 'AE', 'type' => MENU_LOCAL_TASK, 'access callback' => '_proyectooperativo_esta_aprobado', '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, 4), 'weight' => 2, ); //'proyectosop/3076/seguimiento/ae/3213/view //'proyectosop/3076/seguimiento/ae/3213/partidas/1/view' $items['proyectosop/%proyectosop/seguimiento/ae/%accion_especifical/%messeg/view'] = array( 'title' => 'Seguimiento AE', 'type' => MENU_LOCAL_TASK, 'access callback' => '_accion_especifica_de_proyecto_seguimiento_consultar_mes_access', 'access arguments' => array(4, 5), 'file' => 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto_partidaspormes.pages.inc', 'page callback' => 'seguimiento_accion_especifica_deproyecto_partidaspormes_page', 'page arguments' => array(1, 4, 5), 'weight' => 2, ); /* $items['proyectosop/%proyectosop/seguimiento/ae/%accion_especifical/partidas/%messeg_load/view'] = array( 'title' => 'Seguimiento AE', 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10 ); */ $items['proyectosop/%proyectosop/seguimiento/ae/%accion_especifical/%messeg/edit'] = array( 'title' => 'Seguimiento AE editar', 'type' => MENU_LOCAL_TASK, 'access callback' => '_ae_seguimiento_modificar_mes_access', 'access arguments' => array(1, 4, 5), '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, 5), 'weight' => 2, ); //----------------------------------------------------------------------------Administracion Seguimiento de acciones especificas de proyectos operativos $items['admin/settings/ente_planificador/proyectos_operativos/seguimiento'] = array( 'title' => t('Seguimiento Proyectos'), '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['proyectosop/%proyectosop/seguimiento/ae/%accion_especifical/%messeg/workflow/%seg_proy_aes_wk'] = array( 'title' => 'Seguimiento AE cambiar flujo', 'type' => MENU_LOCAL_TASK, 'access callback' => '_accion_especifica_de_proyecto_seguimiento_mes_mover_estado_access', 'access arguments' => array(4, 5, 7), '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, 4, 5, 7), 'weight' => 2, ); $items['proyectosop/%proyectosop/seguimiento/ae/%accion_especifical/%messeg/workflow/historial'] = array( 'title' => 'Seguimiento AE Historial Seguimiento', 'type' => MENU_LOCAL_TASK, 'access callback' => '_accion_especifica_de_proyecto_seguimiento_access', 'access arguments' => array(4), 'file' => 'includes/ae_proyecto/historial_cambiodeestado_seg_aeproyecto.pages.inc', 'page callback' => 'historial_cambiodeestado_seg_aeproyecto_page', 'page arguments' => array(4, 5), '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 (_mes_dentro_de_duracion_ae_proyecto($node, $mes)); } // function _accion_especifica_de_proyecto_seguimiento_consultar_mes_access function _ae_seguimiento_modificar_mes_access($proyecto, $ae, $mes){ return _mes_dentro_de_duracion_ae_proyecto($ae, $mes) && _proyecto_operativo_seguimiento_modificar_mes_access($proyecto, $mes); } /** * Mes habilitado para su modificación o agregar el seguimiento. * function _accion_especifica_de_proyecto_seguimiento_modificar_ae_mes_access($proyecto, $accion, $mes=0) { if (_mes_dentro_de_duracion_ae_proyecto($accion, $mes) && _proyecto_operativo_seguimiento_modificar_mes_access($proyecto, $mes)) { return true; } return false; } */ /** * 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($node))&&(_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($node))&&(_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 messeg_load(). * Menu loader callback. Load a mes. */ function messeg_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) { if (!$mes) { $mes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0) ; } if (in_array($mes, variable_get('seguimiento_proyectos_cantidad_meses_seguimiento', 1))) { return TRUE; } return FALSE; } // 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) { $mesI = $mes+1;//colocando parametro entre 1 y 12 $resp = FALSE; $mes_seguimiento = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0); $mes_inical = $mes_seguimiento; $anno = variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0); $fecha = explode('-', $nodo_proyecto->field_proyecto_fecha_i[0]['value']); $mes_inicio = (int) $fecha[1]; $year_inicio = (int) $fecha[0]; //Accion Especifica de Proyecto if ($node->type == 'accion_especifica') { $fechayhora_inicio = $node->field_accion_esp_fechai[0]['value']; $fechaA = explode('-', $node->field_accion_esp_fechai[0]['value']); $year_inicio = (int) $fechaA[0]; 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 (($year_inicio <= $anno) && $anno_fin >= $anno) { return 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($proyecto) { global $user; $ente_planificador = ente_planificador_leer_ente_planificadores($proyecto->field_proyecto_ente[0]['nid']); if (!$ente_planificador || !$ente_planificador->nid) { return FALSE; } $ente = usuario_tiene_ente($user->uid); if ($ente_planificador->nid != $ente->nid && !user_access('admin planificador')) { return FALSE; } $current_time = time(); $tipo_plan = 'proyecto_y_accionesespecificas_seguimiento'; $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, $ente_planificador); $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'); /* * Implementation of seg_proy_aes_wk_load() */ function seg_proy_aes_wk_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'); /** * Implementation of hook_node_load */ function accion_especifica_de_proyecto_seguimiento_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) { switch ($op) { case 'load': if ($node->type == 'accion_especifica') { $additions = db_fetch_object(db_query('SELECT acumulativa FROM {seguimiento_aeproyecto} WHERE nid = %d', $node->nid)); $node->es_acumulativo = $additions->acumulativa; } break; } }