source: sipes/0.3-modules/proyectos_operativos_seguimiento/proyecto_operativo_seguimiento.moduleviejo @ 438bcea

stable
Last change on this file since 438bcea was 669d26e, checked in by Sipes Apn <root@…>, 7 años ago

se realizaron las correciones relacionadas al contador de fechas

  • Propiedad mode establecida a 100755
File size: 14.1 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 proyecto_operativo_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 proyecto_operativo_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 proyectos operativos") .'</p>';
35            break;
36    }
37    return $output;
38} // function proyecto_operativo_seguimiento_help
39
40/*
41 * Implementation of hook_menu()
42 */
43function proyecto_operativo_seguimiento_menu() {
44    $items = array();
45 
46  //----------------------------------------------------------------------------Seguimiento de acciones específicas de proyectos operativos
47  $items['proyectosop/%node/seguimiento_proyecto'] = array(
48    'title' => 'Seguimiento',
49    'type' => MENU_LOCAL_TASK,
50    'access callback' => '_proyecto_operativo_seguimiento_access',
51    'access arguments' => array(1),
52    'file' => 'includes/proyecto/seguimiento_proyecto.pages.inc',
53    'page callback' => 'seguimiento_proyecto_y_aes_lista_page',
54    'page arguments' => array(1),
55    'weight' => 2,
56  );
57 
58 
59  $items['node/%node/seguimiento_proyecto'] = array(
60    'title' => 'Seguimiento',
61    'type' => MENU_CALLBACK,
62    'access callback' => '_proyecto_operativo_seguimiento_access',
63    'access arguments' => array(1),
64    'file' => 'includes/proyecto/seguimiento_proyecto.pages.inc',
65    'page callback' => 'seguimiento_proyecto_page',
66    'page arguments' => array(1),
67    'weight' => 2,
68  );
69 
70  $items['node/%node/seguimiento_proyecto/mes/%messegaepartida/edit'] = array(
71    'title' => 'Seguimiento',
72    'type' => MENU_CALLBACK,
73    'access callback' => '_proyecto_operativo_seguimiento_modificar_mes_access',
74    'access arguments' => array(1,4),
75    //'file' => 'includes/proyecto/seguimiento_proyecto_datospormes_modificar.forms.inc',
76    'page callback' => 'drupal_get_form',
77    'page arguments' => array('seguimiento_proyecto_datospormes_modificar_form', 1, 4),
78    'weight' => 2,
79  );
80 
81  //----------------------------------------------------------------------------workflow
82  $items['node/%node/seguimiento_proyecto/%messegaepartida/workflow/%seg_proyecto_y_aes_wk_menu'] = array(
83    'title' => 'Seguimiento',
84    'type' => MENU_LOCAL_TASK,
85    'access callback' => '_proyecto_seguimiento_mes_mover_estado_access',
86    'access arguments' => array(1,3,5),
87    'file' => 'includes/proyecto/cambiodeestado_seg_proyecto_paginaconfirmacion.forms.inc',
88    'page callback' => 'drupal_get_form',
89    'page arguments' => array('cambiodeestado_seg_proyecto_paginaconfirmacion_form', 1, 3, 5),
90    'weight' => 2,
91  );
92 
93  $items['node/%node/seguimiento_proyecto/%messegaepartida/workflow/historial'] = array(
94    'title' => 'Historial Seguimiento',
95    'type' => MENU_CALLBACK,
96    'access callback' => '_proyecto_operativo_seguimiento_access',
97    'access arguments' => array(1),
98    'file' => 'includes/proyecto/historial_cambiodeestado_seg_proyecto.pages.inc',
99    'page callback' => 'historial_cambiodeestado_seg_proyecto_page',
100    'page arguments' => array(1,3),
101    'weight' => 2,
102  );
103 
104  //----------------------------------------------------------------------------Fase de Seguimiento de proyectos operativos y sus acciones especificas
105  $items['node/%node/fase_de_seguimiento_proyecto_y_aes/mes/%messegaepartida'] = array(
106    'title' => 'Seguimiento',
107    'type' => MENU_CALLBACK,
108    'access callback' => '_fasedeseguimiento_proyecto_y_ae_access',
109    'access arguments' => array(1,4),
110    //'file' => 'includes/fase_de_seguimiento_proyecto_y_aes.pages.inc',
111    'page callback' => 'fase_de_seguimiento_proyecto_y_aes_page',
112    'page arguments' => array(1,4),
113    'weight' => 2,
114  );
115
116    return $items;
117}
118
119//**************************************************************************************************************************************************
120//permisos de acceso a las paginas
121
122/**
123 * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos'
124 */
125function _proyecto_operativo_seguimiento_access($node) {
126  return (_es_tipo_proyectooperativo($node) && _proyectooperativo_esta_aprobado($node));
127} // function _proyecto_operativo_seguimiento_access
128
129/**
130 * 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
131 */
132function _proyecto_operativo_seguimiento_modificar_mes_access($node, $mes=0) {
133
134  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));
135} // function _proyecto_operativo_seguimiento_modificar_mes_access
136
137/**
138 * acceso a workflow
139 */
140function _proyecto_seguimiento_mes_mover_estado_access($node, $mes=0, $estadonuevo=0) {
141  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));
142} // function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access
143
144/**
145 * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos'
146 */
147function _fasedeseguimiento_proyecto_y_ae_access($node, $mes=0) {
148  return (_es_tipo_proyectooperativo($node)&&(_mes_dentro_de_duracion_proyecto($node, $mes)) &&_proyectooperativo_esta_aprobado($node));
149} // function _fasedeseguimiento_proyecto_y_ae_access
150
151//**************************************************************************************************************************************************
152
153/**
154 * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos'
155 */
156function _es_tipo_proyectooperativo($node) {
157  return ($node->type == 'proyectos_operativos');
158} // function _proyecto_operativo_seguimiento_access
159
160/**
161 * verificar proyecto operativo este aprobado
162 */
163function _proyectooperativo_esta_aprobado($node) {
164 
165  $estado_aprobado = variable_get('proyectos_operativos_state_aprobado', NULL);
166 
167  if($node->type =='proyectos_operativos'){
168    return ($node->_workflow == $estado_aprobado); 
169  }elseif($node->type =='accion_especifica'){
170    $nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']);
171    return ($nodo_proyecto->_workflow == $estado_aprobado);
172  }
173  return FALSE;
174} // function _proyecto_operativo_seguimiento_access
175
176/**
177 * 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
178 */
179function _mes_dentro_de_duracion_proyecto($node, $mes=0) {
180 
181  $mes = $mes+1;//colocando parametro entre 1 y 12
182  $resp = FALSE;
183 
184  //Proyecto
185  if ($node->type == 'proyectos_operativos'){
186    $fechayhora_inicio = $node->field_proyecto_fecha_i[0]['value'];
187    list($fecha_inicio, $hora_inicio) = split('[ ]', $fechayhora_inicio);
188    list($anno_inicio, $mes_inicio, $dia_inicio) = split('[/.-]', $fecha_inicio);
189    $m_inicio = intval($mes_inicio);
190   
191    $fechayhora_fin = $node->field_proyecto_fecha_f[0]['value'];
192    list($fecha_fin, $hora_fin) = split('[ ]', $fechayhora_fin);
193    list($anno_fin, $mes_fin, $dia_fin) = split('[/.-]', $fecha_fin);
194    $m_fin = intval($mes_fin);
195   
196    if(($m_inicio<=$mes)&&($m_fin>=$mes)){
197      $resp = TRUE;
198    }else{
199      $resp = FALSE;
200    }
201   
202  }
203     
204  return $resp;
205}
206
207function _permiso_para_realizar_transicion_estado_proyecto($node, $mes = 0, $estadonuevo=0){
208 
209  $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes);
210 
211  //estado
212  $estado = ((isset($consultaseguimientoactual['segmes']['estado'])) && ($consultaseguimientoactual['segmes']['estado'] > 0) )? $consultaseguimientoactual['segmes']['estado'] : -1;
213 
214  if($estado == $estadonuevo){
215    return FALSE;
216  }
217 
218  $states = _obtener_estados_seguimiento_mes();
219 
220  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
221  $estado_naprobado = variable_get('acciones_centralizadas_state_naprobado', NULL);
222
223  global $user;
224  $ente = usuario_tiene_ente($user->uid);
225   
226  $roles = array_keys($user->roles);
227  if ($user->uid == 1) {
228    // Superuser is special.
229    $roles_transition = 'ALL';
230  }else {
231    $roles_transition = $roles;
232    if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento
233      $roles_transition += array('author' => 'author');
234    }
235  }
236 
237  $transitions = array();
238  if ($states['wid']) {
239    $transitions = workflow_allowable_transitions($estado, 'to', $roles_transition);
240  }
241
242  if (isset($transitions[$estadonuevo])) {
243    return TRUE;
244  }
245  return FALSE;
246}
247
248
249function _seg_esta_aprobado_proyecto($node, $mes=0){
250 
251  $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes);
252  $estado = $transiciones_dispo['estado_actual'];
253 
254  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
255
256  if ($estado == $estado_aprobado) {
257    return TRUE;
258  }
259  return FALSE;
260}
261
262/*
263 * verificar nivel de usuario para modificar
264 */
265
266function _estado_seg_en_nivel_de_usuario_proyecto($node, $mes=0){
267 
268  //calcular el estado
269  $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes);
270  $nivel_usuario = _obtener_nivel_usuario_segun_estado($transiciones_dispo['nombre_estado_actual']);
271 
272  $rol_ente_usuario = _obtener_rol_y_ente_de_usuario();
273 
274  if(($transiciones_dispo['estado_actual'] < 0)&&($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='administrador')){
275    return true; 
276  }
277
278  if(($nivel_usuario == $rol_ente_usuario['rol'])||$rol_ente_usuario['rol']=='administrador'){//nivel de usuario == rol actor
279    return TRUE;
280  }
281  return FALSE;
282}
283
284/*
285 * verificar que sea el mismo ente, tanto para el proyecto como para el usuario (si es enlace o supervisor)
286 */
287
288function _es_elmismo_ente_proyecto_y_usuario_proyecto($node){
289 
290  $rol_ente_usuario = _obtener_rol_y_ente_de_usuario();
291
292  if($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='supervisor'){//enlace o supervisor
293    //$nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']);
294    if($rol_ente_usuario['id_ente'] == $node->field_proyecto_ente[0]['nid']){//deben ser del mismo ente que el proyecto
295      return TRUE;
296    }else{
297      return FALSE;
298    }
299  }
300  return TRUE;
301}
302
303//**************************************************************************************************************************************************
304//pagina de formulario
305
306module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/proyecto/seguimiento_proyecto_datospormes_modificar.forms');
307
308//**************************************************************************************************************************************************
309//funciones para consultas a base de datos
310
311module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/proyecto/funciones_consulta_bd_proyecto.pages');
312
313//**************************************************************************************************************************************************
314//fase de seguimiento
315module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/fase_de_seguimiento_proyecto_y_aes.pages');
316
317//colcar el enlace haci la fase de seguimiento del proyecto y sus acciones
318
319/*
320 * Implementation of hook_acciones_obtiene_links_alter()
321 */
322function proyecto_operativo_seguimiento_proyecto_obtiene_links_alter(&$links, $proyecto, $acceso = FALSE) {
323 
324    $meses = array(
325      0 => t('January'),
326      1 => t('February'),
327      2 => t('March'),
328      3 => t('April'),
329      4 => t('May'),
330      5 => t('June'),
331      6 => t('July'),
332      7 => t('August'),
333      8 => t('September'),
334      9 => t('Octuber'),
335      10 => t('November'),
336      11 => t('December'),
337    );
338 
339  $nodo_proyecto = node_load($proyecto->nid);
340
341  if($nodo_proyecto->anhoproyectos_operativos == variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0) && _proyectooperativo_esta_aprobado($nodo_proyecto)){
342    $mes_seguimiento_proyecto_y_aes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0);
343    $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($nodo_proyecto);
344//echo $mes_seguimiento_proyecto_y_aes . '-' . $mes_fase_seg . '<br>';
345    if ($mes_seguimiento_proyecto_y_aes == ($mes_fase_seg + 1)) {
346      $links[] = array(
347        'data' => l(t('Fase de Seguimiento ').'('.$meses[$mes_fase_seg].')', 'node/' . $nodo_proyecto->nid."/fase_de_seguimiento_proyecto_y_aes/mes/".$mes_fase_seg),
348        'class' => 'proyectos-operativos-faseseguimiento',
349      );
350    }
351
352  }
353}
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.