source: sipp/0.3-stable-modules/proyectos_operativos_seguimiento/accion_especifica_de_proyecto_seguimiento.module @ 6a22cd8

0.3-stable
Last change on this file since 6a22cd8 was a0b4327, checked in by José Gregorio Puentes <jpuentes@…>, 9 años ago

Se agregaron los nuevos cambios a los modulos

  • Propiedad mode establecida a 100755
File size: 16.5 KB
Línea 
1<?php
2  /**
3  * Sistema Automatizado para la Planificación Estratégico-Situacional en la Administración Pública Venezolana
4  * @file accion_especifica_de_proyecto_seguimiento.module
5  * Drupal part Module to code proyectos operativos module
6  * Copyright 2012 Sistema Automatizado para la Planificación Estratégico-Situacional en la Administración Pública Venezolana (CENDITEL)
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21  *
22  * @author CENDITEL Merida - Ing. Diego Uzcategui
23  * @date 2013-02-07 // (anno-mes-dia)
24  * @version 0.1
25  *
26  */
27
28/*
29 * Implementation of hook_help()
30 */
31function accion_especifica_de_proyecto_seguimiento_help($path, $arg) {
32    switch ($path) {
33        case "admin/help/aeproyectoseguimiento":
34        $output = '<p>'.  t("Este modulo se encarga de la gestión del seguimiento de las acciones específicas de un proyecto operativo") .'</p>';
35            break;
36    }
37    return $output;
38} // function accion_especifica_de_proyecto_seguimiento_help
39
40/*
41 * Implementation of hook_menu()
42 */
43function accion_especifica_de_proyecto_seguimiento_menu() {
44    $items = array();
45 
46  //----------------------------------------------------------------------------Seguimiento de acciones especificas de proyectos operativos
47  $items['node/%node/seguimiento_aeproyecto'] = array(
48    'title' => 'Seguimiento',
49    'type' => MENU_CALLBACK,
50    'access callback' => '_accion_especifica_de_proyecto_seguimiento_access',
51    'access arguments' => array(1),
52    'file' => 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto.pages.inc',
53    'page callback' => 'seguimiento_accion_especifica_deproyecto_page',
54    'page arguments' => array(1),
55    'weight' => 2,
56  );
57 
58  $items['node/%node/seguimiento_aeproyecto/partidas/%messegaepartida'] = array(
59    'title' => 'Seguimiento',
60    'type' => MENU_CALLBACK,
61    'access callback' => '_accion_especifica_de_proyecto_seguimiento_consultar_mes_access',
62    'access arguments' => array(1,4),
63    'file' => 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto_partidaspormes.pages.inc',
64    'page callback' => 'seguimiento_accion_especifica_deproyecto_partidaspormes_page',
65    'page arguments' => array(1,4),
66    'weight' => 2,
67  );
68  $items['node/%node/seguimiento_aeproyecto/partidas/%messegaepartida/view'] = array(
69    'title' => 'Seguimiento',
70    'type' => MENU_DEFAULT_LOCAL_TASK,
71    'weight' => -10
72  );
73 
74  $items['node/%node/seguimiento_aeproyecto/partidas/%messegaepartida/edit'] = array(
75    'title' => 'Seguimiento',
76    'type' => MENU_CALLBACK,
77    'access callback' => '_accion_especifica_de_proyecto_seguimiento_modificar_mes_access',
78    'access arguments' => array(1,4),
79    //'file' => 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto_partidaspormes_modificar.forms.inc',
80    'page callback' => 'drupal_get_form',
81    'page arguments' => array('seguimiento_accion_especifica_deproyecto_partidaspormes_modificar_form', 1, 4),
82    'weight' => 2,
83  );
84  //----------------------------------------------------------------------------Administracion Seguimiento de acciones especificas de proyectos operativos
85  $items['admin/settings/ente_planificador/seguimiento_proyecto_y_aes'] = array(
86    'title' => t('Seguimiento Proyecto y sus Acciones Especificas'),
87    'page callback' => 'drupal_get_form',
88    'page arguments' => array('accion_especifica_de_proyecto_seguimiento_admin_settings'),
89    'access arguments' => array('admin planificador'),
90    'weight' => -6,
91    'type' => MENU_LOCAL_TASK,
92    'file' => 'includes/accion_especifica_de_proyecto_seguimiento.admin.inc',
93  );
94  //----------------------------------------------------------------------------workflow
95  $items['node/%node/seguimiento_aeproyecto/%messegaepartida/workflow/%seg_proyecto_y_aes_wk_menu'] = array(
96    'title' => 'Seguimiento',
97    'type' => MENU_LOCAL_TASK,
98    'access callback' => '_accion_especifica_de_proyecto_seguimiento_mes_mover_estado_access',
99    'access arguments' => array(1,3,5),
100    'file' => 'includes/ae_proyecto/cambiodeestado_seg_ae_proyecto_paginaconfirmacion.forms.inc',
101    'page callback' => 'drupal_get_form',
102    'page arguments' => array('cambiodeestado_seg_ae_proyecto_paginaconfirmacion_form', 1, 3, 5),
103    'weight' => 2,
104  );
105 
106  $items['node/%node/seguimiento_aeproyecto/%messegaepartida/workflow/historial'] = array(
107    'title' => 'Historial Seguimiento',
108    'type' => MENU_CALLBACK,
109    'access callback' => '_accion_especifica_de_proyecto_seguimiento_access',
110    'access arguments' => array(1),
111    'file' => 'includes/ae_proyecto/historial_cambiodeestado_seg_aeproyecto.pages.inc',
112    'page callback' => 'historial_cambiodeestado_seg_aeproyecto_page',
113    'page arguments' => array(1,3),
114    'weight' => 2,
115  );
116 
117    return $items;
118}
119
120//**************************************************************************************************************************************************
121//permisos de acceso a las paginas
122
123/**
124 * verificar que el nodo que desea se evaluado sea de tipo 'accion_especifica'
125 */
126function _accion_especifica_de_proyecto_seguimiento_access($node) {
127  return (_es_tipo_accionespecifica($node));
128} // function _accion_especifica_de_proyecto_seguimiento_access
129
130/**
131 * 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
132 */
133function _accion_especifica_de_proyecto_seguimiento_consultar_mes_access($node, $mes=0) {
134  return ((_es_tipo_accionespecifica($node))&&(_mes_dentro_de_duracion_ae_proyecto($node, $mes)));
135} // function _accion_especifica_de_proyecto_seguimiento_consultar_mes_access
136
137/**
138 * 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
139 */
140function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access($node, $mes=0) {
141  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));
142} // function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access
143
144/**
145 * acceso a workflow
146 */
147function _accion_especifica_de_proyecto_seguimiento_mes_mover_estado_access($node, $mes=0, $estadonuevo=0) {
148  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));
149} // function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access
150
151//**************************************************************************************************************************************************
152/*
153 * Implementation of hook_ente_procesos_alter()
154 */
155function accion_especifica_de_proyecto_seguimiento_ente_procesos_alter(&$procesos, $type) {
156  if ($type != 'status') {
157    $procesos['proyecto_y_accionesespecificas_seguimiento'] = array(
158      'title' => t('Seguimiento Proyectos Operativos y sus Acciones Especificas'),
159      'description' => t('Permite el seguimiento de los Proyectos Operativos y de sus Acciones Especificas'),
160      'message' => 'Se podrá registrar y/o modificar el seguimiento del Proyecto Opeativo y de sus Acciones Especificas desde %fecha hasta la fecha %fecha1',
161      '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)',
162      'weight' => 3,
163      'proceso' => 'proyectos_operativos',
164    );
165  }
166}
167
168/**
169 * Implementation of messegaepartida_load().
170 * Menu loader callback. Load a mes.
171 */
172function messegaepartida_load($mes = 0) {
173  settype($mes, "integer");
174  if ($mes >= 0 && $mes < 12) {
175    return $mes;
176  }
177  return FALSE;
178}
179
180/**
181 * verificar que el nodo que desea se evaluado sea de tipo 'accion_especifica'
182 */
183function _es_tipo_accionespecifica($node) {
184  return ($node->type == 'accion_especifica');
185} // function _accion_especifica_de_proyecto_seguimiento_access
186
187/**
188 * verificar que el nodo que desea se evaluado sea de tipo 'accion_especifica'
189 */
190function _mes_habilitado_para_seguimiento($mes=0) {
191  $mes_seguimiento_proyecto_y_aes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0);
192  return ($mes_seguimiento_proyecto_y_aes-1 == $mes);
193} // function _accion_especifica_de_proyecto_seguimiento_access
194
195/**
196 * 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
197 */
198function _mes_dentro_de_duracion_ae_proyecto($node, $mes=0) {
199 
200  $mes = $mes+1;//colocando parametro entre 1 y 12
201  $resp = FALSE;
202 
203  //Accion Especifica de Proyecto
204  if ($node->type == 'accion_especifica'){
205    $fechayhora_inicio = $node->field_accion_esp_fechai[0]['value'];
206    list($fecha_inicio, $hora_inicio) = split('[ ]', $fechayhora_inicio);
207    list($anno_inicio, $mes_inicio, $dia_inicio) = split('[/.-]', $fecha_inicio);
208    $m_inicio = intval($mes_inicio);
209   
210    $fechayhora_fin = $node->field_accion_esp_fechaf[0]['value'];
211    list($fecha_fin, $hora_fin) = split('[ ]', $fechayhora_fin);
212    list($anno_fin, $mes_fin, $dia_fin) = split('[/.-]', $fecha_fin);
213    $m_fin = intval($mes_fin);
214   
215    if(($m_inicio<=$mes)&&($m_fin>=$mes)){
216      $resp = TRUE;
217    }else{
218      $resp = FALSE;
219    }
220  }
221 
222  return $resp;
223}
224
225/**
226 * verificar si por la fecha actual, esta activo el perio de ingreso de seguimiento
227 */
228function _periodo_de_seguimiento_proyecto_y_aes_esta_activo(){
229
230  $current_time = time();
231  $tipo_plan = 'proyecto_y_accionesespecificas_seguimiento';
232  $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, 2);
233  $fecha = FALSE;
234
235  if ($mi_fecha[1]  + 86399 > $current_time && $mi_fecha[0] < $current_time) {
236    $fecha = TRUE;
237  }
238  return $fecha;
239}
240
241function _es_usuario_autenticado(){
242  global $user;
243  if($user->uid > 0){
244    return TRUE;
245  }
246  return FALSE;
247}
248
249function _permiso_para_realizar_transicion_estado($node, $mes = 0, $estadonuevo=0){
250 
251  $consultaseguimientoactual = _seguimiento_mesactual_partida_ae_deproyecto_load($node, $mes);
252  $estado = (isset($consultaseguimientoactual['segmes']['estado'])) ? $consultaseguimientoactual['segmes']['estado'] : -1;
253 
254  if($estado == $estadonuevo){
255    return FALSE;
256  }
257 
258  $states = _obtener_estados_seguimiento_mes();
259 
260  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
261  $estado_naprobado = variable_get('acciones_centralizadas_state_naprobado', NULL);
262
263  global $user;
264  $ente = usuario_tiene_ente($user->uid);
265   
266  $roles = array_keys($user->roles);
267  if ($user->uid == 1) {
268    // Superuser is special.
269    $roles_transition = 'ALL';
270  }else {
271    $roles_transition = $roles;
272    if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento
273      $roles_transition += array('author' => 'author');
274    }
275  }
276 
277  $transitions = array();
278  if ($states['wid']) {
279    $transitions = workflow_allowable_transitions($estado, 'to', $roles_transition);
280  }
281
282  if (isset($transitions[$estadonuevo])) {
283    return TRUE;
284  }
285  return FALSE;
286}
287
288/*
289 * verificar nivel de usuario para modificar
290 */
291
292function _estado_seg_en_nivel_de_usuario($node, $mes=0){
293 
294  //calcular el estado
295  $transiciones_dispo = _obtener_transiciones_disponibles($node, $mes);
296  $nivel_usuario = _obtener_nivel_usuario_segun_estado($transiciones_dispo['nombre_estado_actual']);
297
298  $rol_ente_usuario = _obtener_rol_y_ente_de_usuario();
299 
300  if(($transiciones_dispo['estado_actual'] < 0)&&($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='administrador')){
301    return true; 
302  }
303  if(($nivel_usuario == $rol_ente_usuario['rol'])||$rol_ente_usuario['rol']=='administrador'){//nivel de usuario == rol actor
304    return TRUE;
305  }
306  return FALSE;
307}
308
309/*
310 * verificar que sea el mismo ente, tanto para el proyecto como para el usuario (si es enlace o supervisor)
311 */
312
313function _es_elmismo_ente_proyecto_y_usuario($node){
314 
315  $rol_ente_usuario = _obtener_rol_y_ente_de_usuario();
316
317  if($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='supervisor'){//enlace o supervisor
318    $nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']);
319    if($rol_ente_usuario['id_ente'] == $nodo_proyecto->field_proyecto_ente[0]['nid']){//deben ser del mismo ente que el proyecto
320      return TRUE;
321    }else{
322      return FALSE;
323    }
324  }
325  return TRUE;
326}
327
328/*
329 * verificar que sea el mismo ente, tanto para el proyecto como para el usuario (si es enlace o supervisor)
330 */
331
332function _seg_esta_aprobado($node, $mes=0){
333 
334  $transiciones_dispo = _obtener_transiciones_disponibles($node, $mes);
335  $estado = $transiciones_dispo['estado_actual'];
336 
337  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
338
339  if ($estado == $estado_aprobado) {
340    return TRUE;
341  }
342  return FALSE;
343}
344
345/*
346 * verificar anno habilitado
347 */
348function _anno_habilitado_para_seg($node){
349 
350  $anno = variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0);
351  $idnodo_proyecto = 0;
352 
353  if ($node->type == 'proyectos_operativos'){
354    $idnodo_proyecto = $node->nid;
355  }elseif($node->type == 'accion_especifica'){
356    $nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']);
357    $idnodo_proyecto = $nodo_proyecto->nid;
358  }
359 
360  if($idnodo_proyecto){
361    $query = "SELECT * from {proyectos_operativos} where nid=%d";
362    $queryResult =  db_query ( $query, $idnodo_proyecto);
363    $datosproyecto = db_fetch_object ( $queryResult ) ;
364   
365    if ($datosproyecto->year == $anno) {
366      return TRUE;
367    }
368  }
369   
370  return FALSE;
371}
372
373//**************************************************************************************************************************************************
374//pagina de formulario
375
376module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto_partidaspormes_modificar.forms');
377
378
379//**************************************************************************************************************************************************
380
381//funciones auxiliares
382
383module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/00_generales/funciones_auxiliares.pages');
384
385//**************************************************************************************************************************************************
386//funciones para consultas a base de datos
387//carga de datos comprometido, causado, pagado, asignado
388module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/ae_proyecto/funciones_consulta_bd.pages');
389
390//**************************************************************************************************************************************************
391//workflow
392// codificada lunes 18 03 13, por Diego Uzcátegui
393
394/*
395 * Implementation of seg_proyecto_y_aes_wk_menu_load()
396 */
397function seg_proyecto_y_aes_wk_menu_load($state = 0) {
398  $states = _obtener_estados_seguimiento_mes();
399  //echo print_r($states).'<br>';
400  if (isset($states['states'][$state])) {
401    return $state;
402  }
403  return FALSE;
404}
405
406//cargar funciones para flujo de trabajo
407module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/00_generales/funciones_flujo_trabajo.pages');
408
409//cargar funciones de consulta de valores de reformulaciones
410module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento' , 'includes/funciones_consulta_valores_reformulaciones.pages');
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.