source: sipp/0.3-stable-modules/proyectos_operativos_seguimiento/proyecto_operativo_seguimiento.module @ 0214679

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

se modifico las opciones disponibles en la vista de consulta de seguimientos

  • Propiedad mode establecida a 100755
File size: 34.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 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  * Modificado por: Ing. Jose Puentes @date 2015-05-19.
24  * @date 2013-02-07 // (anno-mes-dia)
25  * @version 0.1
26  *
27  */
28
29/*
30 * Implementation of hook_help()
31 */
32function proyecto_operativo_seguimiento_help($path, $arg) {
33  switch ($path) {
34    case "admin/help/aeproyectoseguimiento":
35      $output = '<p>'.  t("Este modulo se encarga de la gestión del seguimiento de proyectos operativos") .'</p>';
36    break;
37  }
38  return $output;
39} // function proyecto_operativo_seguimiento_help
40
41/*
42 * Implementation of hook_menu()
43 */
44function proyecto_operativo_seguimiento_menu() {
45  $items = array();
46  $items['proyectos_operativos/seguimiento_proyecto'] = array(
47    'title' => t('Seguimiento de Proyectos'),
48    'page callback' => 'proyecto_operativo_seguimiento_search_seguimiento_display',
49    'access arguments' => array('ver planificador'),
50    'type' => MENU_LOCAL_TASK,
51  );
52  $items['proyectos_operativos/seguimiento_proyecto/proyectos'] = array(
53    'title' => t('Lista de proyectos'),
54    'page callback' => 'proyecto_operativo_seguimiento_search_seguimiento_display',
55    'access arguments' => array('ver planificador'),
56    'type' => MENU_DEFAULT_LOCAL_TASK,
57  );
58  $items['proyectos_operativos/seguimiento_proyecto/entramite'] = array(
59    'title' => t('Lista de proyectos sin Aprobar'),
60    'page callback' => 'proyecto_operativo_seguimiento_search_seguimiento_display_not_approved',
61    'access arguments' => array('ver planificador'),
62    'type' => MENU_LOCAL_TASK,
63  );
64  $items['proyectosop/%node/seguimiento_proyecto'] = array(
65    'title' => 'Seguimiento',
66    'type' => MENU_LOCAL_TASK,
67    'access callback' => '_proyecto_operativo_seguimiento_access',
68    'access arguments' => array(1),
69    'file' => 'includes/proyecto/seguimiento_proyecto.pages.inc',
70    'page callback' => 'seguimiento_proyecto_y_aes_lista_page',
71    'page arguments' => array(1),
72    'weight' => 2,
73  );
74  $items['node/%node/seguimiento_proyecto'] = array(
75    'title' => 'Seguimiento',
76    'type' => MENU_CALLBACK,
77    'access callback' => '_proyecto_operativo_seguimiento_access',
78    'access arguments' => array(1),
79    'file' => 'includes/proyecto/seguimiento_proyecto.pages.inc',
80    'page callback' => 'seguimiento_proyecto_page',
81    'page arguments' => array(1),
82    'weight' => 2,
83  );
84  $items['node/%node/seguimiento_proyecto/mes/%messegaepartida/edit'] = array(
85    'title' => 'Seguimiento',
86    'type' => MENU_CALLBACK,
87    'access callback' => '_proyecto_operativo_seguimiento_modificar_mes_access',
88    'access arguments' => array(1,4),
89    //'file' => 'includes/proyecto/seguimiento_proyecto_datospormes_modificar.forms.inc',
90    'page callback' => 'drupal_get_form',
91    'page arguments' => array('seguimiento_proyecto_datospormes_modificar_form', 1, 4),
92    'weight' => 2,
93  );
94  //------------------workflow
95  $items['node/%node/seguimiento_proyecto/%messegaepartida/workflow/%seg_proyecto_y_aes_wk_menu'] = array(
96    'title' => 'Seguimiento',
97    'type' => MENU_LOCAL_TASK,
98    'access callback' => '_proyecto_seguimiento_mes_mover_estado_access',
99    'access arguments' => array(1,3,5),
100    'file' => 'includes/proyecto/cambiodeestado_seg_proyecto_paginaconfirmacion.forms.inc',
101    'page callback' => 'drupal_get_form',
102    'page arguments' => array('cambiodeestado_seg_proyecto_paginaconfirmacion_form', 1, 3, 5),
103    'weight' => 2,
104  );
105  $items['node/%node/seguimiento_proyecto/%messegaepartida/workflow/historial'] = array(
106    'title' => 'Historial Seguimiento',
107    'type' => MENU_CALLBACK,
108    'access callback' => '_proyecto_operativo_seguimiento_access',
109    'access arguments' => array(1),
110    'file' => 'includes/proyecto/historial_cambiodeestado_seg_proyecto.pages.inc',
111    'page callback' => 'historial_cambiodeestado_seg_proyecto_page',
112    'page arguments' => array(1,3),
113    'weight' => 2,
114  );
115  //-------------------Fase de Seguimiento de proyectos operativos y sus acciones especificas
116  $items['node/%node/fase_de_seguimiento_proyecto_y_aes/mes/%messegaepartida'] = array(
117    'title' => 'Seguimiento',
118    'type' => MENU_CALLBACK,
119    'access callback' => '_fasedeseguimiento_proyecto_y_ae_access',
120    'access arguments' => array(1,4),
121    //'file' => 'includes/fase_de_seguimiento_proyecto_y_aes.pages.inc',
122    'page callback' => 'fase_de_seguimiento_proyecto_y_aes_page',
123    'page arguments' => array(1,4),
124    'weight' => 2,
125  );
126  return $items;
127}
128
129//**************************************************************************************************************************************************
130//permisos de acceso a las paginas
131
132/**
133 * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos'
134 */
135function _proyecto_operativo_seguimiento_access($node) {
136  return (_es_tipo_proyectooperativo($node));
137} // function _proyecto_operativo_seguimiento_access
138
139/**
140 * 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
141 */
142function _proyecto_operativo_seguimiento_modificar_mes_access($node, $mes=0) {
143  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));
144} // function _proyecto_operativo_seguimiento_modificar_mes_access
145
146/**
147 * acceso a workflow
148 */
149function _proyecto_seguimiento_mes_mover_estado_access($node, $mes=0, $estadonuevo=0) {
150  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));
151} // function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access
152
153/**
154 * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos'
155 */
156function _fasedeseguimiento_proyecto_y_ae_access($node, $mes=0) {
157  return (_es_tipo_proyectooperativo($node)&&(_mes_dentro_de_duracion_proyecto($node, $mes)) &&_proyectooperativo_esta_aprobado($node));
158} // function _fasedeseguimiento_proyecto_y_ae_access
159
160/**
161 * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos'
162 */
163function _es_tipo_proyectooperativo($node) {
164  return ($node->type == 'proyectos_operativos');
165} // function _proyecto_operativo_seguimiento_access
166
167/**
168 * verificar proyecto operativo este aprobado
169 */
170function _proyectooperativo_esta_aprobado($node) {
171  $estado_aprobado = variable_get('proyectos_operativos_state_aprobado', NULL);
172  if ($node->type =='proyectos_operativos') {
173    return ($node->_workflow == $estado_aprobado); 
174  }
175  elseif($node->type =='accion_especifica'){
176    $nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']);
177    return ($nodo_proyecto->_workflow == $estado_aprobado);
178  }
179  return FALSE;
180} // function _proyecto_operativo_seguimiento_access
181
182/**
183 * 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
184 */
185function _mes_dentro_de_duracion_proyecto($node, $mes=0) {
186  $mes = $mes+1;//colocando parametro entre 1 y 12
187  $resp = FALSE;
188  //Proyecto
189  if ($node->type == 'proyectos_operativos') {
190    $fechayhora_inicio = $node->field_proyecto_fecha_i[0]['value'];
191    list($fecha_inicio, $hora_inicio) = split('[ ]', $fechayhora_inicio);
192    list($anno_inicio, $mes_inicio, $dia_inicio) = split('[/.-]', $fecha_inicio);
193    $m_inicio = intval($mes_inicio);
194   
195    $fechayhora_fin = $node->field_proyecto_fecha_f[0]['value'];
196    list($fecha_fin, $hora_fin) = split('[ ]', $fechayhora_fin);
197    list($anno_fin, $mes_fin, $dia_fin) = split('[/.-]', $fecha_fin);
198    $m_fin = intval($mes_fin);
199   
200    if (($m_inicio<=$mes) && ($m_fin>=$mes)) {
201      $resp = TRUE;
202    }
203    else{
204      $resp = FALSE;
205    }
206  }
207  return $resp;
208}
209
210function _permiso_para_realizar_transicion_estado_proyecto($node, $mes = 0, $estadonuevo=0){
211  $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes);
212  //estado
213  $estado = ((isset($consultaseguimientoactual['segmes']['estado'])) && ($consultaseguimientoactual['segmes']['estado'] > 0) )? $consultaseguimientoactual['segmes']['estado'] : -1;
214  if ($estado == $estadonuevo) {
215    return FALSE;
216  }
217  $states = _obtener_estados_seguimiento_mes();
218  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
219  $estado_naprobado = variable_get('acciones_centralizadas_state_naprobado', NULL);
220
221  global $user;
222  $ente = usuario_tiene_ente($user->uid);
223   
224  $roles = array_keys($user->roles);
225  if ($user->uid == 1) {
226    // Superuser is special.
227    $roles_transition = 'ALL';
228  }
229  else {
230    $roles_transition = $roles;
231    if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento
232      $roles_transition += array('author' => 'author');
233    }
234  }
235  $transitions = array();
236  if ($states['wid']) {
237    $transitions = workflow_allowable_transitions($estado, 'to', $roles_transition);
238  }
239  if (isset($transitions[$estadonuevo])) {
240    return TRUE;
241  }
242  return FALSE;
243}
244
245
246function _seg_esta_aprobado_proyecto($node, $mes=0){
247  $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes);
248  $estado = $transiciones_dispo['estado_actual'];
249  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
250  if ($estado == $estado_aprobado) {
251    return TRUE;
252  }
253  return FALSE;
254}
255
256/*
257 * verificar nivel de usuario para modificar
258 */
259function _estado_seg_en_nivel_de_usuario_proyecto($node, $mes=0){
260  //calcular el estado
261  $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes);
262  $nivel_usuario = _obtener_nivel_usuario_segun_estado($transiciones_dispo['nombre_estado_actual']);
263  $rol_ente_usuario = _obtener_rol_y_ente_de_usuario();
264  if (($transiciones_dispo['estado_actual'] < 0)&&($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='administrador')){
265    return true; 
266  }
267  if (($nivel_usuario == $rol_ente_usuario['rol'])||$rol_ente_usuario['rol']=='administrador'){//nivel de usuario == rol actor
268    return TRUE;
269  }
270  return FALSE;
271}
272
273/*
274 * verificar que sea el mismo ente, tanto para el proyecto como para el usuario (si es enlace o supervisor)
275 */
276function _es_elmismo_ente_proyecto_y_usuario_proyecto($node) {
277  $rol_ente_usuario = _obtener_rol_y_ente_de_usuario();
278  if ($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='supervisor') {//enlace o supervisor
279    //$nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']);
280    if ($rol_ente_usuario['id_ente'] == $node->field_proyecto_ente[0]['nid']) {//deben ser del mismo ente que el proyecto
281      return TRUE;
282    }else{
283      return FALSE;
284    }
285  }
286  return TRUE;
287}
288
289//**************************************************************************************************************************************************
290//pagina de formulario
291
292module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/proyecto/seguimiento_proyecto_datospormes_modificar.forms');
293
294//**************************************************************************************************************************************************
295//funciones para consultas a base de datos
296
297module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/proyecto/funciones_consulta_bd_proyecto.pages');
298
299//**************************************************************************************************************************************************
300//fase de seguimiento
301module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/fase_de_seguimiento_proyecto_y_aes.pages');
302
303//colcar el enlace haci la fase de seguimiento del proyecto y sus acciones
304
305/*
306 * Implementation of hook_acciones_obtiene_links_alter()
307 */
308function proyecto_operativo_seguimiento_proyecto_obtiene_links_alter(&$links, $proyecto, $acceso = FALSE) {
309  $meses = array(
310    0 => t('January'),
311    1 => t('February'),
312    2 => t('March'),
313    3 => t('April'),
314    4 => t('May'),
315    5 => t('June'),
316    6 => t('July'),
317    7 => t('August'),
318    8 => t('September'),
319    9 => t('Octuber'),
320    10 => t('November'),
321    11 => t('December'),
322  );
323  $nodo_proyecto = node_load($proyecto->nid);
324
325  if ($nodo_proyecto->anhoproyectos_operativos == variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0) && _proyectooperativo_esta_aprobado($nodo_proyecto)) {
326    $mes_seguimiento_proyecto_y_aes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0);
327    $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($nodo_proyecto);
328    if ($mes_seguimiento_proyecto_y_aes == ($mes_fase_seg + 1)) {
329      $links[] = array(
330        'data' => l(t('Fase de Seguimiento ').'('.$meses[$mes_fase_seg].')', 'node/' . $nodo_proyecto->nid."/fase_de_seguimiento_proyecto_y_aes/mes/".$mes_fase_seg),
331        'class' => 'proyectos-operativos-faseseguimiento',
332      );
333    }
334  }
335}
336
337/**
338 * Muestra la lista de los Proyectos que se encuentran en fase de seguimiento
339 */
340function proyecto_operativo_seguimiento_search_seguimiento_display() {
341  drupal_set_title(t("Lista de los proyectos en fase de Seguimiento"));
342  $ouput = '';
343  $sql = '';
344  $sql_count = '';
345  global $user;
346  $format_number = array(
347    'decimals' => variable_get('proyectos_operativos_number_decimals', 0),
348    'dec_point' => variable_get('proyectos_operativos_number_dec_point', ','),
349    'thousands_sep' => variable_get('proyectos_operativos_number_thousands_sep', '.'),
350  );
351  $roles = array_keys($user->roles);
352  //roles de los usuarios
353  $rol_control = variable_get('ActorPlanificadorMacro', 2);
354  $rol_supervisor = variable_get('ActorPlanificadorMicro', 2);
355  $rol_enlace = variable_get('ActorPlanificadorEnlace', 2);
356  $rows = array();
357  $i = 1;
358  $meses = array(
359    0 => t('January'),
360    1 => t('February'),
361    2 => t('March'),
362    3 => t('April'),
363    4 => t('May'),
364    5 => t('June'),
365    6 => t('July'),
366    7 => t('August'),
367    8 => t('September'),
368    9 => t('Octuber'),
369    10 => t('November'),
370    11 => t('December'),
371  );
372  $header = array();
373  $cab = 6;
374  $step = 10;
375  $states = array();
376  $first_state = 0;
377  $ente = usuario_tiene_ente($user->uid);
378  //ahno y mes valido para el seguimiento
379  $anho = variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0);
380  $mes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0);
381  $estado_naprobado = variable_get('acciones_centralizadas_state_naprobado', NULL);
382  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
383  if (!user_access('admin planificador') && $user->entes) {
384    $inputs[] = $estado_naprobado;
385    $inputs[] = $user->entes;
386    $inputs[] = $mes - 1; //se resta uno ya que el array de los meses empiesa en cero
387    $inputs[] = $anho;
388    $sql .= 'SELECT se.*, u.name, u.uid FROM {seguimiento_proyecto} AS se INNER JOIN {users} u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND po.ente = %d AND se.mes = %d AND po.year = %d ORDER BY se.id_seg DESC';
389    $sql_count .= 'SELECT COUNT(se.nid) FROM {seguimiento_proyecto} se INNER JOIN {users} u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND po.ente = %d AND se.mes = %d AND po.year = %d';
390  }
391  elseif (user_access('admin planificador')) {
392    $inputs[] = $estado_naprobado;
393    $inputs[] = $mes - 1; //se resta uno ya que el array de los meses empiesa en cero
394    $inputs[] = $anho;
395    $sql .= 'SELECT se.*, u.name, u.uid FROM {seguimiento_proyecto} AS se INNER JOIN {users} AS u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.mes = %d AND po.year = %d ORDER BY se.id_seg DESC';
396
397   // $sql_count = "SELECT COUNT(se.nid) FROM {seguimiento_proyecto} se INNER JOIN {users} u ON u.uid = se.uid WHERE se.estado <> 17 AND se.estado <> 15 AND se.mes = 0";
398
399    $sql_count .= 'SELECT COUNT(se.nid) FROM {seguimiento_proyecto} AS se INNER JOIN {users} AS u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.mes = %d AND po.year = %d';
400  }
401  $current_time = time();
402  $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, $ente_planificador->tipo);
403  $tipo_plan = 'proyecto_y_accionesespecificas_seguimiento';
404  $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, 2);
405  if ($mi_fecha[1]  + 86399 > $current_time && $mi_fecha[0] < $current_time) {
406    $fecha = TRUE;
407  }
408  if ($fecha) {
409    if ($ente->nid) {
410      $fecha = TRUE;
411      if (user_access('admin planificador')) {
412        $fecha = FALSE;
413      }
414    }
415  }
416  $wid = workflow_get_workflow_for_type('accion_centralizada');
417  if ($wid){
418    $states = workflow_get_states($wid);
419  }
420  $first_state = 0;
421  if ($wid) {
422    $first_state = _workflow_creation_state($wid);
423  }
424  $enlaces_estados = TRUE;
425  if ($ente->nid && !user_access('admin planificador')) {
426    $enlaces_estados = FALSE;
427  }
428  $header[] = array('data' => t('Ente'));
429  $header[] = array('data' => t('Proyecto'));
430  $header[] = array('data' => t('Estado'));
431  $header[] = array('data' => t('Usuario'));
432  $header[] = array('data' => t('Meta Fisica Ejecutada'));
433  $header[] = array('data' => t('Acción'));
434  $header[] = array('data' => t(''));
435  $result = pager_query($sql, $step, 0, $sql_count, $inputs);
436  while ($proyecto = db_fetch_object($result)) {
437    $node = node_load($proyecto->nid);
438    $editar = ($proyecto->estado == $estado_aprobado);
439    $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($node);
440    $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes);
441    $transiciones_dispo = array();
442    $row = array();
443    $links = array();
444    if ($user->uid == 1) {
445      // Superuser is special.
446      $roles_transition = 'ALL';
447    }
448    else {
449      $roles_transition = $roles;
450      if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento
451        $roles_transition += array('author' => 'author');
452      }
453    }
454    $transitions = array();
455    if ($wid) {
456      $transitions = workflow_allowable_transitions($proyecto->estado, 'to', $roles_transition);
457    }
458    unset($transitions[$proyecto->estado]);
459    $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes);
460    $nivel_usuario = _obtener_nivel_usuario_segun_estado($transiciones_dispo['nombre_estado_actual']);
461    if (_periodo_de_seguimiento_proyecto_y_aes_esta_activo()) {
462      if (($node->anhoproyectos_operativos == $anho) && ($proyecto->mes == $mes_fase_seg)) {
463        $name_w = workflow_get_state_name($proyecto->estado);
464        $transiciones_dispo[$proyecto->estado] = $name_w;
465        $color = variable_get('acciones_centralizadas_state_color_' . $proyecto->estado, array());
466        $estado = isset($states[$proyecto->estado]) ? $states[$proyecto->estado] : 'N/A';
467        $ente = node_load($node->field_proyecto_ente[0]);
468        //columnas de la tabla
469        $row[] = array('data' => $ente->title, 'style' => 'background:' . $color, );
470        $row[] = array('data' => l($node->title, 'node/' . $node->nid), 'style' => 'background:' . $color, );
471        $row[] = array('data' => $estado, 'style' => 'background:' . $color, );
472        $row[] = array('data' => l($proyecto->name, 'user/' . $proyecto->uid), 'style' => 'background:' . $color,);
473        $row[] = array('data' => $proyecto->ejecutadometafisica, 'style' => 'background:' . $color, );
474
475        if ($mes == $mes_fase_seg) {
476          $links[] = array(
477            'data' => '<b>' . l(t('Consultar'), 'node/' . $node->nid . "/fase_de_seguimiento_proyecto_y_aes/mes/" . $mes_fase_seg, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>',
478            'class' => 'proyectos-operativos-faseseguimiento',
479          );
480        }
481        if (user_access('admin planificador')) {
482          if (count($transitions) && $fecha && $proyecto->estado != $estado_naprobado &&  $proyecto->estado != $estado_aprobado && $proyecto->id_seg) {
483            $links[] = '<b>' . l(t('Modificar'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
484          }
485          if ($enlaces_estados && count($transitions) && $proyecto->estado != $estado_aprobado) {
486            foreach ($transitions as $id => $transition) {
487              $links[] = '<b>' . l(t('Enviar a @state', array('@state' => $transition)), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg. '/workflow/' . $id, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
488           }
489         }
490       }
491       if ((in_array($rol_enlace, array_keys($user->roles))) || (in_array($rol_supervisor, array_keys($user->roles)))) {
492         if (count($transitions) && $proyecto->estado != $estado_aprobado) {
493           foreach ($transitions as $id => $transition) {
494             $links[] = '<b>' . l(t('Enviar a @state', array('@state' => $transition)), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg. '/workflow/' . $id, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
495           }
496         }
497         if (count($transitions) && $fecha && $proyecto->estado != $estado_naprobado &&  $proyecto->estado != $estado_aprobado && $proyecto->id_seg) {
498           $links[] = '<b>' . l(t('Modificar'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
499         }
500       }
501       if (isset($transiciones_dispo[$proyecto->estado])) {
502         $links[] = '<b>' . l(t('Consultar Historial de Estados'), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg . '/workflow/historial', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
503       }
504       $row[] = array('data' => theme('item_list', $links),  'style' => 'background:' . $color,);
505       if (isset($transiciones_dispo[$proyecto->estado])) {
506         $colorSemaforo =  _calcular_color_semaforo_estado_actual($transiciones_dispo[$proyecto->estado]);
507         $row[] = array('data' => '•', 'style' => 'font-weight: bold;font-size: 35px;text-align:center; color:' . $colorSemaforo);
508       }
509     }
510    }
511    $rows[] = $row;
512  }
513  if (!count($rows)) {
514    $row[] = array('data' => 'No existen proyectos en fase de seguimiento sin aprobar', 'colspan' => 9);
515    $rows[] = $row;
516  }
517  $output = '';
518  $output .= theme('table', $header, $rows);
519  $output .= theme('pager', NULL);
520  return $output;
521}
522
523
524/**
525 * Muestra la lista de los Proyectos que se encuentran en fase de seguimiento
526 */
527function proyecto_operativo_seguimiento_search_seguimiento_display_not_approved() {
528  drupal_set_title(t("Lista de proyectos en fase de Seguimiento sin Aprobar"));
529  $ouput = '';
530  $sql = '';
531  $sql_count = '';
532  global $user;
533  $format_number = array(
534    'decimals' => variable_get('proyectos_operativos_number_decimals', 0),
535    'dec_point' => variable_get('proyectos_operativos_number_dec_point', ','),
536    'thousands_sep' => variable_get('proyectos_operativos_number_thousands_sep', '.'),
537  );
538  $roles = array_keys($user->roles);
539  //roles de los usuarios
540  $rol_control = variable_get('ActorPlanificadorMacro', 2);
541  $rol_supervisor = variable_get('ActorPlanificadorMicro', 2);
542  $rol_enlace = variable_get('ActorPlanificadorEnlace', 2);
543  $rows = array();
544  $i = 1;
545  $meses = array(
546    0 => t('January'),
547    1 => t('February'),
548    2 => t('March'),
549    3 => t('April'),
550    4 => t('May'),
551    5 => t('June'),
552    6 => t('July'),
553    7 => t('August'),
554    8 => t('September'),
555    9 => t('Octuber'),
556    10 => t('November'),
557    11 => t('December'),
558  );
559  $header = array();
560  $cab = 6;
561  $step = 10;
562  $states = array();
563  $first_state = 0;
564  $ente = usuario_tiene_ente($user->uid);
565  //ahno y mes valido para el seguimiento
566  $anho = variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0);
567  $mes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0);
568  $estado_naprobado = variable_get('acciones_centralizadas_state_naprobado', NULL);
569  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
570  if (!user_access('admin planificador') && $user->entes) {
571    $inputs[] = $estado_naprobado;
572    $inputs[] = $estado_aprobado;
573    $inputs[] = $user->entes;
574    $inputs[] = $mes - 1; //se resta uno ya que el array de los meses empiesa en cero
575    $inputs[] = $anho;
576    $sql .= 'SELECT se.*, u.name, u.uid FROM {seguimiento_proyecto} AS se INNER JOIN {users} u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.estado <> %d AND po.ente = %d AND se.mes = %d AND po.year = %d ORDER BY se.id_seg DESC';
577    $sql_count .= 'SELECT COUNT(se.nid) FROM {seguimiento_proyecto} se INNER JOIN {users} u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.estado <> %d AND po.ente = %d AND se.mes = %d AND po.year = %d';
578  }
579  elseif (user_access('admin planificador')) {
580    $inputs[] = $estado_naprobado;
581    $inputs[] = $estado_aprobado;
582    $inputs[] = $mes - 1; //se resta uno ya que el array de los meses empiesa en cero
583    $inputs[] = $anho;
584    $sql .= 'SELECT se.*, u.name, u.uid FROM {seguimiento_proyecto} AS se INNER JOIN {users} AS u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.estado <> %d AND se.mes = %d AND po.year = %d ORDER BY se.id_seg DESC';
585
586   // $sql_count = "SELECT COUNT(se.nid) FROM {seguimiento_proyecto} se INNER JOIN {users} u ON u.uid = se.uid WHERE se.estado <> 17 AND se.estado <> 15 AND se.mes = 0";
587
588    $sql_count .= 'SELECT COUNT(se.nid) FROM {seguimiento_proyecto} AS se INNER JOIN {users} AS u ON u.uid = se.uid INNER JOIN {proyectos_operativos} AS po ON se.nid = po.nid LEFT JOIN {seguimiento_aeproyecto} AS ac ON se.id_seg = ac.id_seg WHERE se.estado <> %d AND se.estado <> %d AND se.mes = %d AND po.year = %d';
589  }
590  $current_time = time();
591  $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, $ente_planificador->tipo);
592  $tipo_plan = 'proyecto_y_accionesespecificas_seguimiento';
593  $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, 2);
594  if ($mi_fecha[1]  + 86399 > $current_time && $mi_fecha[0] < $current_time) {
595    $fecha = TRUE;
596  }
597  if ($fecha) {
598    if ($ente->nid) {
599      $fecha = TRUE;
600      if (user_access('admin planificador')) {
601        $fecha = FALSE;
602      }
603    }
604  }
605  $wid = workflow_get_workflow_for_type('accion_centralizada');
606  if ($wid){
607    $states = workflow_get_states($wid);
608  }
609  $first_state = 0;
610  if ($wid) {
611    $first_state = _workflow_creation_state($wid);
612  }
613  $enlaces_estados = TRUE;
614  if ($ente->nid && !user_access('admin planificador')) {
615    $enlaces_estados = FALSE;
616  }
617  $header[] = array('data' => t('Ente'));
618  $header[] = array('data' => t('Proyecto'));
619  $header[] = array('data' => t('Estado'));
620  $header[] = array('data' => t('Usuario'));
621  $header[] = array('data' => t('Meta Fisica Ejecutada'));
622  $header[] = array('data' => t('Acción'));
623  $header[] = array('data' => t(''));
624  $result = pager_query($sql, $step, 0, $sql_count, $inputs);
625  while ($proyecto = db_fetch_object($result)) {
626    $node = node_load($proyecto->nid);
627    $editar = ($proyecto->estado == $estado_aprobado);
628    $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($node);
629    $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes);
630    $transiciones_dispo = array();
631    $row = array();
632    $links = array();
633    if ($user->uid == 1) {
634      // Superuser is special.
635      $roles_transition = 'ALL';
636    }
637    else {
638      $roles_transition = $roles;
639      if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento
640        $roles_transition += array('author' => 'author');
641      }
642    }
643    $transitions = array();
644    if ($wid) {
645      $transitions = workflow_allowable_transitions($proyecto->estado, 'to', $roles_transition);
646    }
647    unset($transitions[$proyecto->estado]);
648    $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes);
649    $nivel_usuario = _obtener_nivel_usuario_segun_estado($transiciones_dispo['nombre_estado_actual']);
650    if (_periodo_de_seguimiento_proyecto_y_aes_esta_activo()) {
651      if (($node->anhoproyectos_operativos == $anho) && ($proyecto->mes == $mes_fase_seg)) {
652        $name_w = workflow_get_state_name($proyecto->estado);
653        $transiciones_dispo[$proyecto->estado] = $name_w;
654        $color = variable_get('acciones_centralizadas_state_color_' . $proyecto->estado, array());
655        $estado = isset($states[$proyecto->estado]) ? $states[$proyecto->estado] : 'N/A';
656        //columnas de la tabla
657        $ente = node_load($node->field_proyecto_ente[0]);
658        //columnas de la tabla
659        $row[] = array('data' => $ente->title, 'style' => 'background:' . $color, );
660        $row[] = array('data' => l($node->title, 'node/' . $node->nid), 'style' => 'background:' . $color, );
661        $row[] = array('data' => $estado, 'style' => 'background:' . $color, );
662        $row[] = array('data' => l($proyecto->name, 'user/' . $proyecto->uid), 'style' => 'background:' . $color,);
663        $row[] = array('data' => $proyecto->ejecutadometafisica, 'style' => 'background:' . $color, );
664        if ($mes == $mes_fase_seg) {
665          $links[] = array(
666            'data' => '<b>' . l(t('Consultar'), 'node/' . $node->nid . "/fase_de_seguimiento_proyecto_y_aes/mes/" . $mes_fase_seg, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>',
667            'class' => 'proyectos-operativos-faseseguimiento',
668          );
669        }
670        if (user_access('admin planificador')) {
671          if (count($transitions) && $fecha && $proyecto->estado != $estado_naprobado &&  $proyecto->estado != $estado_aprobado && $proyecto->id_seg) {
672            $links[] = '<b>' . l(t('Modificar'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
673          }
674          if ($enlaces_estados && count($transitions) && $proyecto->estado != $estado_aprobado) {
675            foreach ($transitions as $id => $transition) {
676              $links[] = '<b>' . l(t('Enviar a @state', array('@state' => $transition)), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg. '/workflow/' . $id, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
677           }
678         }
679       }
680       if ((in_array($rol_enlace, array_keys($user->roles))) || (in_array($rol_supervisor, array_keys($user->roles)))) {
681         if (count($transitions) && $proyecto->estado != $estado_aprobado) {
682           foreach ($transitions as $id => $transition) {
683             $links[] = '<b>' . l(t('Enviar a @state', array('@state' => $transition)), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg. '/workflow/' . $id, array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
684           }
685         }
686         if (count($transitions) && $fecha && $proyecto->estado != $estado_naprobado &&  $proyecto->estado != $estado_aprobado && $proyecto->id_seg) {
687           $links[] = '<b>' . l(t('Modificar'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
688         }
689       }
690       if (isset($transiciones_dispo[$proyecto->estado])) {
691         $links[] = '<b>' . l(t('Consultar Historial de Estados'), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg . '/workflow/historial', array('html' => true, 'query' => 'destination=proyectos_operativos/seguimiento_proyecto')) . '</b>';
692       }
693       $row[] = array('data' => theme('item_list', $links),  'style' => 'background:' . $color,);
694       if (isset($transiciones_dispo[$proyecto->estado])) {
695         $colorSemaforo =  _calcular_color_semaforo_estado_actual($transiciones_dispo[$proyecto->estado]);
696         $row[] = array('data' => '•', 'style' => 'font-weight: bold;font-size: 35px;text-align:center; color:' . $colorSemaforo);
697       }
698     }
699    }
700    $rows[] = $row;
701  }
702  if (!count($rows)) {
703    $row[] = array('data' => 'No existen proyectos en fase de seguimiento sin aprobar', 'colspan' => 9);
704    $rows[] = $row;
705  }
706  $output = '';
707  $output .= theme('table', $header, $rows);
708  $output .= theme('pager', NULL);
709  return $output;
710}
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.