source: sipes/0.3-modules/proyectos_operativos_seguimiento/proyecto_operativo_seguimiento.module @ beba07f

stable
Last change on this file since beba07f was 3c7b6ac, checked in by Sipes Apn <root@…>, 7 años ago

se agrego el hook_views_api

  • Propiedad mode establecida a 100755
File size: 27.0 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$meses = array(
28  0 => t('January'),
29  1 => t('February'),
30  2 => t('March'),
31  3 => t('April'),
32  4 => t('May'),
33  5 => t('June'),
34  6 => t('July'),
35  7 => t('August'),
36  8 => t('September'),
37  9 => t('Octuber'),
38  10 => t('November'),
39  11 => t('December'),
40);
41define('MESES', json_encode($meses));
42
43/*
44 * Implementation of hook_help()
45 */
46function proyecto_operativo_seguimiento_help($path, $arg) {
47    switch ($path) {
48        case "admin/help/aeproyectoseguimiento":
49        $output = '<p>'.  t("Este modulo se encarga de la gestión del seguimiento de proyectos operativos") .'</p>';
50            break;
51    }
52    return $output;
53} // function proyecto_operativo_seguimiento_help
54
55/*
56 * Implementation of hook_menu()
57 */
58function proyecto_operativo_seguimiento_menu() {
59  $items = array();
60  $items['proyectosop/seguimiento/workflow_ahah/callback'] = array(
61    'page callback' => 'ahah_proyectosop_seguimiento_workflow_callback',
62    'access callback' => TRUE,
63    'type' => MENU_CALLBACK,
64    'file' => 'includes/proyecto/cambiodeestado_seg_proyecto_paginaconfirmacion.forms.inc',
65  );
66  //----------------------------------------------------------------------------Seguimiento de acciones específicas de proyectos operativos
67  $items['proyectosop/%proyectosop/seguimiento'] = array(
68    'title' => 'Seguimiento',
69    'type' => MENU_LOCAL_TASK,
70    'access callback' => '_proyectooperativo_esta_aprobado',
71    'access arguments' => array(1),
72    'file' => 'includes/proyecto/seguimiento_proyecto.pages.inc',
73    'page callback' => 'seguimiento_proyecto_y_aes_lista_page',
74    'page arguments' => array(1),
75    'weight' => 2,
76  );
77  $items['proyectosop/%proyectosop/seguimiento/view'] = array(
78    'title' => 'Seguimiento',
79    'type' => MENU_DEFAULT_LOCAL_TASK,
80    'weight' => -10
81  );
82  $items['proyectosop/%proyectosop/seguimiento/workflow/send'] = array(
83    'title' => 'Enviar Seguimiento',
84    'type' => MENU_LOCAL_TASK,
85    'access callback' => '_proyecto_seguimiento_mes_mover_estado_access',
86    'access arguments' => array(1),
87    'page callback' => 'drupal_get_form',
88    'page arguments' => array('cambiodeestado_seg_proyecto_paginaconfirmacion_form', 1),
89    'file' => 'includes/proyecto/cambiodeestado_seg_proyecto_paginaconfirmacion.forms.inc',
90    'weight' => 2,
91  );
92/*
93  $items['proyectosop/%proyectosop/seguimiento/proyecto_aes/%'] = array(
94    'title' => 'Proyecto y AE',
95    'type' => MENU_LOCAL_TASK,
96    'access callback' => '_fasedeseguimiento_proyecto_y_ae_access',
97    'access arguments' => array(1),
98    'file' => 'includes/fase_de_seguimiento_proyecto_y_aes.pages.inc',
99    'page callback' => 'fase_de_seguimiento_proyecto_y_aes_page',
100    'page arguments' => array(1),
101    'weight' => 3,
102  );
103*/
104  $items['proyectosop/%proyectosop/seguimiento/proyecto'] = array(
105    'title' => 'Proyecto',
106    'type' => MENU_LOCAL_TASK,
107    'access callback' => '_proyectooperativo_esta_aprobado',
108    'access arguments' => array(1),
109    'file' => 'includes/proyecto/seguimiento_proyecto.pages.inc',
110    'page callback' => 'seguimiento_proyecto_page',
111    'page arguments' => array(1),
112    'weight' => 2,
113  );
114
115  $items['proyectosop/%proyectosop/seguimiento/proyecto/%messeg/edit/%'] = array(
116    'title' => 'Seguimiento',
117    'type' => MENU_LOCAL_TASK,
118    'access callback' => '_proyecto_operativo_seguimiento_modificar_mes_access',
119    'access arguments' => array(1, 4),
120    'file' => 'includes/proyecto/seguimiento_proyecto_datospormes_modificar.forms.inc',
121    'page callback' => 'drupal_get_form',
122    'page arguments' => array('seguimiento_proyecto_datospormes_modificar_form', 1, 4,6),
123    'weight' => 2,
124  );
125
126  //----------------------------------------------------------------------------workflow
127  $items['proyectosop/%proyectosop/seguimiento/proyecto/%messeg/workflow'] = array(
128    'title' => 'Seguimiento',
129    'type' => MENU_LOCAL_TASK,
130    'access callback' => '_proyecto_seguimiento_mes_mover_estado_access',
131    'access arguments' => array(1, 4),
132    'file' => 'includes/proyecto/cambiodeestado_seg_proyecto_paginaconfirmacion.forms.inc',
133    'page callback' => 'drupal_get_form',
134    'page arguments' => array('cambiodeestado_seg_proyecto_paginaconfirmacion_form', 1, 4),
135    'weight' => 2,
136  );
137 
138  $items['proyectosop/%proyectosop/seguimiento/%messeg/history'] = array(
139    'title' => 'Historial Seguimiento',
140    'type' => MENU_LOCAL_TASK,
141    'access callback' => '_proyectooperativo_esta_aprobado',
142    'access arguments' => array(1),
143    'file' => 'includes/proyecto/historial_cambiodeestado_seg_proyecto.pages.inc',
144    'page callback' => 'historial_cambiodeestado_seg_proyecto_page',
145    'page arguments' => array(1, 4),
146    'weight' => 2,
147  );
148//  'proyectosop/%proyectosop/seguimiento/proyecto/%year/%messegaepartida/workflow/historial'
149  //----------------------------------------------------------------------------Fase de Seguimiento de proyectos operativos y sus acciones especificas
150/*
151  $items['proyectosop/%proyectosop/fase_de_seguimiento_proyecto_y_aes'] = array(
152    'title' => 'Proyecto y AE',
153    'type' =>  MENU_LOCAL_TASK,
154    'access callback' => '_fasedeseguimiento_proyecto_y_ae_access',
155    'access arguments' => array(1),
156    'file' => 'includes/fase_de_seguimiento_proyecto_y_aes.pages.inc',
157    'page callback' => 'fase_de_seguimiento_proyecto_y_aes_page',
158    'page arguments' => array(1),
159    'weight' => 2,
160  );
161*/
162    return $items;
163}
164
165//**************************************************************************************************************************************************
166//permisos de acceso a las paginas
167
168/**
169 * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos'
170 */
171
172function _proyecto_operativo_seguimiento_access($proyecto = 0) {
173  return _proyectooperativo_esta_aprobado($node);
174} // function _proyecto_operativo_seguimiento_access
175
176/**
177 * 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
178 */
179function _proyecto_operativo_seguimiento_modificar_mes_access($proyecto = 0, $mes = 0) {
180  global $user;
181  $mes_o = $mes;
182  //esta fuera del mes de seguimiento actual
183  if (!_mes_habilitado_para_seguimiento($mes +1)) {
184    return FALSE;
185  }
186
187  $mes++;//colocando parametro entre 1 y 12
188  $mes_final = variable_get('seguimiento_proyectos_cantidad_meses_seguimiento', 0);
189  //esta fuera del anho de seguimiento actual
190  if ($proyecto->anhoproyectos_operativos != variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0)) {
191    return FALSE;
192  }
193  $anno = variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0);
194  $fecha = explode('-', $proyecto->field_proyecto_fecha_i[0]['value']);
195  $mes_inicio = (int) $fecha[1];
196  $year_inicio = (int) $fecha[0];
197  $fecha = explode('-', $proyecto->field_proyecto_fecha_f[0]['value']);
198  $mes_fin = (int) $fecha[1];
199  $year_fin = (int) $fecha[0];
200
201  if (($anno == $year_inicio && $mes_inicio > $mes) || ($anno == $year_fin && $mes_fin < $mes) && $mes_final<=$m_fin) { //se establecio la condicion de años como falsa
202    return FALSE;
203  }
204  //se valida el acceso al plan
205  $current_time = time();
206  $tipo_plan = 'proyecto_y_accionesespecificas_seguimiento';
207  $fecha = FALSE;
208  $ente = usuario_tiene_ente($user->uid);
209  $ente_planificador = ente_planificador_leer_ente_planificadores($proyecto->field_proyecto_ente[0]['nid']);
210  if ($ente_planificador->nid != $ente->nid && !user_access('admin planificador')) {
211    return FALSE;
212  }
213  $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, $ente_planificador);
214  if ($mi_fecha[1]  + 86399 > $current_time && $mi_fecha[0] < $current_time) {
215    $fecha = TRUE;
216  }
217  if ($fecha) {
218    if ($ente->nid == $ente_planificador->nid ) {
219      $fecha = TRUE;
220    }
221    elseif (!user_access('admin planificador')) {
222      $fecha = FALSE;
223    }
224  }
225  //si no posee la transición del seguimiento no puede editar
226  $transiciones = _obtener_transiciones_disponibles_proyecto($proyecto, $mes_o);
227  if (!count($transiciones['transic'])  && $transiciones['estado_actual']>0) {
228   return FALSE;
229  }
230
231  $roles_perm = TRUE;
232  if (module_exists('workflow') && $fecha && !user_access('admin planificador')) {
233    $estado = 0;
234    $wid = workflow_get_workflow_for_type('proyectos_operativos');
235    $states = workflow_get_states($wid);
236    $roles_perm = FALSE;
237    foreach ($states as $sid => $state) {
238      $roles_allow = variable_get('proyectos_operativos_state_s_' . $sid, array());
239      $roles = array_keys($user->roles);
240      if (count($roles)) {
241        foreach ($roles as $rol) {
242          if ($roles_allow[$rol]) {
243            $roles_perm = TRUE;
244          }
245          elseif ($rol == -1 && $node->uid == $user->uid) {
246            $roles_perm = TRUE;
247          }
248        }
249      }
250    }
251  }
252/*
253  $move = FALSE;
254  $transition = _proyecto_seguimiento_mes_mover_estado_access($proyecto, $mes);
255  if ($transition) {
256    $move = TRUE;
257  }
258*/
259
260  return $fecha && $roles_perm;
261
262/*$transiciones_dispo = _obtener_transiciones_disponibles($proyecto, $mes);
263  $seguimiento = _seguimiento_mesactual_proyecto_load($proyecto, $mes);
264
265
266    $roles_perm = FALSE;
267    $roles_allow = variable_get('proyectos_operativos_state_s_' . $estado, array());
268    $roles = array_keys($user->roles);
269    if (count($roles)) {
270      foreach($roles as $rol) {
271        if($roles_allow[$rol]) {
272          $roles_perm = TRUE;
273        }
274        elseif ($rol == -1 && $seguimiento['uid'] == $user->uid) {
275          $roles_perm = TRUE;
276        }
277      }
278    }
279    if (!$roles_perm) {
280      return FALSE;
281    }
282*/
283
284/*
285VERIFICAR si es aca donde se debe establecer el permiso para que solo los autores puedan modifciar
286  $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($proyecto, $mes);
287  if (!count($transiciones_dispo['transic'])) {
288    return false;
289  }
290*/
291  return _proyectooperativo_esta_aprobado($proyecto);
292/*
293  return (
294(_mes_dentro_de_duracion_proyecto($proyecto, $mes))&&
295(_mes_habilitado_para_seguimiento($mes))&&
296(_anno_habilitado_para_seg($proyecto))&&
297(_periodo_de_seguimiento_proyecto_y_aes_esta_activo())&&
298_es_usuario_autenticado()&&
299(!_seg_esta_aprobado_proyecto($proyecto, $mes))&&
300(_estado_seg_en_nivel_de_usuario_proyecto($proyecto, $mes))&&
301(_es_elmismo_ente_proyecto_y_usuario_proyecto($proyecto))&&
302_proyectooperativo_esta_aprobado($proyecto));
303*/
304} // function _proyecto_operativo_seguimiento_modificar_mes_access
305
306/**
307 * acceso a workflow accion_especifica_de_proyecto_seguimiento.module
308 */
309function _proyecto_seguimiento_mes_mover_estado_access($node, $mes = 0, $message = false) {
310/*
311  if ($mes == 0) {
312    $mes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0);
313  }
314*/
315  global $user;
316  $seguimiento = _seguimiento_mesactual_proyecto_load($node, $mes);
317  // si no estan separadas el seguimiento de las AE con los proyectos
318  if (!variable_get('accion_especifica_de_proyecto_seguimiento_aesep', 0)) {
319    //se verifica que se haya ingresado todo el seguimiento de las acciones especificas
320    $cuenta = 0;
321    $count = 0;
322    $acciones_estado = array();
323    $cnt = variable_get('seguimiento_proyectos_cantidad_meses_seguimiento', 0) + ($mes);
324    $count_proyect = 0;
325
326    foreach($node->field_proyecto_accion_esp as $accion) {
327      $accion_load = (object) $accion;
328      $acciones_estado[$accion['nid']] = _seguimiento_mesactual_partida_ae_deproyecto_load($accion_load, $mes);
329      //se busca manejar la cantidad total de acciones disponibles por mes, exluir las restantes
330      $accion_load = node_load($accion['nid']);
331      //obtener la cantidad total de las transiciones disponibles de todas las acciones para todos los meses
332     // $transiciones = array();
333      for ($i=$mes; $i<$cnt; $i++) {
334      //  $transiciones[] = _seguimiento_mesactual_partida_ae_deproyecto_load($accion_load, $i);
335
336        $mes_restante = $i;
337        if (_accion_especifica_de_proyecto_seguimiento_consultar_mes_access($accion_load, $i)) {
338          if ($transiciones_dispo = _obtener_transiciones_disponibles($accion_load, $i)) {
339
340/*
341print '<pre>';
342print_r($transiciones_dispo);
343print '</pre>';
344*/
345
346            $count++;
347          }
348          else {
349            $mes_restante = $i;
350          }
351          if (count($transiciones_dispo['transic'])) {
352            $cuenta++;
353          }
354        }
355      }
356
357      /*if ($seguimiento_proyecto = _seguimiento_mesactual_proyecto_load($node, $i)) {
358        if ($seguimiento_proyecto['segmes']['estado']) {
359          $count_proyecto++;
360        }
361      }*/
362
363/*
364print '<pre>';
365print_r($transiciones_dispo);
366print '</pre>';
367*/
368
369  /*    if ($acciones_estado[$accion['nid']]['segmes']) {
370        $cuenta++;
371      }
372*/
373
374    }
375    $countP = 0;
376    $cuentaP = 0;
377    for ($i=$mes; $i<$cnt; $i++) {
378      if ($transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $i)) {
379        if (count($transiciones_dispo['transic'])  && $transiciones_dispo['estado_actual']>0) {
380           $cuentaP++;
381         }
382         $countP++;
383       }
384    }
385    if ($countP != $cuentaP || $cuentaP == 0) {
386      return FALSE;
387    }
388    if (($count != $cuenta || $count == 0) && !user_access('admin planificador')) {
389      return FALSE;
390    }
391    elseif ($message) {
392      $text = t("El envio del seguimiento del proyecto ya se encuentra disponible");
393      $text .= ' <b>'.l(t('Enviar el Seguimiento'), 'proyectosop/' . $node->nid. "/seguimiento/workflow/send") . '</b>';
394      drupal_set_message($text, "warning");
395    }
396    /*if ($count_proyecto != $cnt) {
397      drupal_set_message(t("Para poder realizar el envio del reporte es necesario completar el seguimiento del proyecto en los meses faltantes"), "warning");
398      return FALSE;
399    }*/
400  }
401
402  //esta fuera del mes de seguimiento actual
403  if (!_mes_habilitado_para_seguimiento($mes +1)) {
404    return FALSE;
405  }
406  $mes++;//colocando parametro entre 1 y 12
407  //esta fuera del anho de seguimiento actual
408  $anno = variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0);
409  if ($node->anhoproyectos_operativos != $anno) {
410    return FALSE;
411  }
412  $fecha = explode('-', $node->field_proyecto_fecha_i[0]['value']);
413  $mes_inicio = (int) $fecha[1];
414  $anno_inicio = (int) $fecha[0];
415  $fecha = explode('-', $node->field_proyecto_fecha_f[0]['value']);
416  $mes_fin = (int) $fecha[1];
417  $anno_fin = (int) $fecha[0];
418  //el mes esta fuera del rango del proyecto
419  if (($anno == $anno_inicio && $mes_inicio > $mes) || ($anno == $anno_fin && $mes_fin < $mes)) {
420    return FALSE;
421  }
422  $ente = usuario_tiene_ente($user->uid);
423  $ente_planificador = ente_planificador_leer_ente_planificadores($node->field_proyecto_ente[0]['nid']);
424/*
425  if (($ente_planificador->nid != $ente->nid)&& !user_access('admin planificador')) {
426    return FALSE;
427  }
428*/
429
430  $current_time = time();
431  $tipo_plan = 'proyecto_y_accionesespecificas_seguimiento';
432  $fecha = FALSE;
433  $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, $ente_planificador);
434  if ($mi_fecha[1]  + 86399 > $current_time && $mi_fecha[0] < $current_time) {
435    $fecha = TRUE;
436  }
437  if ($fecha) {
438    if (user_access('admin planificador')) {
439      $fecha = TRUE;
440    }
441    elseif ($ente->nid == $ente_planificador->nid && !user_access('admin planificador')) {
442      $fecha = TRUE;
443    }
444    elseif (module_exists('ente_planificador_hierarchical')) {
445      $fathers = _ente_planificador_hierarchical_get_descbyid($ente_planificador->nid, 1);
446      $fecha = isset($fathers[$ente->nid]) ? TRUE : FALSE;
447    }
448  }
449  return $fecha;
450/*
451  if (module_exists('workflow') && !user_access('admin planificador')) {
452    $estado = 0;
453    if (!$seguimiento) {
454      $states = _proyectos_operativos_reformula_obtiene_estados();
455      if ($states['wid']) {
456        $estado = _workflow_creation_state($states['wid']);
457      }
458    }
459    else {
460      $estado = $seguimiento['estado'];
461    }
462
463  $roles_perm = TRUE;
464  if (module_exists('workflow') && $fecha && !user_access('admin planificador')) {
465    $estado = 0;
466    $wid = workflow_get_workflow_for_type('proyectos_operativos');
467    $states = workflow_get_states($wid);
468    $roles_perm = FALSE;
469    foreach ($states as $sid => $state) {
470      $roles_allow = variable_get('proyectos_operativos_state_s_' . $sid, array());
471      $roles = array_keys($user->roles);
472      if (count($roles)) {
473        foreach ($roles as $rol) {
474          if ($roles_allow[$rol]) {
475            $roles_perm = TRUE;
476          }
477          elseif ($rol == -1 && $node->uid == $user->uid) {
478            $roles_perm = TRUE;
479          }
480        }
481      }
482    }
483  }
484
485  return $fecha && $roles_perm;
486*/
487/*
488    $roles_perm = FALSE;
489    $roles_allow = variable_get('proyectos_operativos_state_s_' . $estado, array());
490    $roles = array_keys($user->roles);
491    if (count($roles)) {
492      foreach($roles as $rol) {
493        if($roles_allow[$rol]) {
494          $roles_perm = TRUE;
495        }
496        elseif ($rol == -1 && $seguimiento['uid'] == $user->uid) {
497          $roles_perm = TRUE;
498        }
499      }
500    }
501    if (!$roles_perm) {
502      return FALSE;
503    }
504*/
505
506/*
507  return ((_es_tipo_proyectooperativo($node))&&
508(_mes_dentro_de_duracion_proyecto($node, $mes))&&
509(_mes_habilitado_para_seguimiento($mes))&&
510(_anno_habilitado_para_seg($node))&&
511(_periodo_de_seguimiento_proyecto_y_aes_esta_activo())&&
512(_es_usuario_autenticado())&&
513_permiso_para_realizar_transicion_estado_proyecto($node, $mes, $estadonuevo)&&
514(_es_elmismo_ente_proyecto_y_usuario_proyecto($node)) &&
515_proyectooperativo_esta_aprobado($node));
516*/
517} // function _accion_especifica_de_proyecto_seguimiento_modificar_mes_access
518
519/**
520 * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos'
521 */
522function _fasedeseguimiento_proyecto_y_ae_access($proyecto) {
523  $mes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0);
524  $fecha = explode('-', $proyecto->field_proyecto_fecha_i[0]['value']);
525  $mes_inicio = (int) $fecha[1];
526  $fecha = explode('-', $proyecto->field_proyecto_fecha_f[0]['value']);
527  $mes_fin = (int) $fecha[1];
528  return ((($mes_inicio <= $mes)||($mes_fin >= $mes)) && _proyectooperativo_esta_aprobado($proyecto)) && $proyecto->anhoproyectos_operativos == variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0);
529} // function _fasedeseguimiento_proyecto_y_ae_access
530
531//**************************************************************************************************************************************************
532
533/**
534 * verificar que el nodo que desea se evaluado sea de tipo 'proyectos_operativos'
535 */
536function _es_tipo_proyectooperativo($node) {
537  return ($node->type == 'proyectos_operativos');
538} // function _proyecto_operativo_seguimiento_access
539
540/**
541 * verificar proyecto operativo este aprobado
542 */
543function _proyectooperativo_esta_aprobado($node) {
544 
545  $estado_aprobado = variable_get('proyectos_operativos_state_aprobado', NULL);
546 
547  if($node->type =='proyectos_operativos'){
548    return ($node->_workflow == $estado_aprobado); 
549  }elseif($node->type =='accion_especifica'){
550    $nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']);
551    return ($nodo_proyecto->_workflow == $estado_aprobado);
552  }
553  return FALSE;
554} // function _proyecto_operativo_seguimiento_access
555
556/**
557 * 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
558 */
559function _mes_dentro_de_duracion_proyecto($node, $mes=0) {
560 
561  $mes = $mes+1;//colocando parametro entre 1 y 12
562  $resp = FALSE;
563 
564  //Proyecto
565  if ($node->type == 'proyectos_operativos'){
566    $fechayhora_inicio = $node->field_proyecto_fecha_i[0]['value'];
567    list($fecha_inicio, $hora_inicio) = split('[ ]', $fechayhora_inicio);
568    list($anno_inicio, $mes_inicio, $dia_inicio) = split('[/.-]', $fecha_inicio);
569    $m_inicio = intval($mes_inicio);
570   
571    $fechayhora_fin = $node->field_proyecto_fecha_f[0]['value'];
572    list($fecha_fin, $hora_fin) = split('[ ]', $fechayhora_fin);
573    list($anno_fin, $mes_fin, $dia_fin) = split('[/.-]', $fecha_fin);
574    $m_fin = intval($mes_fin);
575   
576    if(($m_inicio<=$mes)&&($m_fin>=$mes)){
577      $resp = TRUE;
578    }else{
579      $resp = FALSE;
580    }
581   
582  }
583     
584  return $resp;
585}
586
587function _permiso_para_realizar_transicion_estado_proyecto($node, $mes = 0, $estadonuevo = 0){
588 
589  $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes);
590 
591  //estado
592  $estado = ((isset($consultaseguimientoactual['segmes']['estado'])) && ($consultaseguimientoactual['segmes']['estado'] > 0) )? $consultaseguimientoactual['segmes']['estado'] : -1;
593 
594  if($estado == $estadonuevo){
595    return FALSE;
596  }
597 
598  $states = _obtener_estados_seguimiento_mes();
599 
600  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
601  $estado_naprobado = variable_get('acciones_centralizadas_state_naprobado', NULL);
602
603  global $user;
604  $ente = usuario_tiene_ente($user->uid);
605   
606  $roles = array_keys($user->roles);
607  if ($user->uid == 1) {
608    // Superuser is special.
609    $roles_transition = 'ALL';
610  }else {
611    $roles_transition = $roles;
612    if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento
613      $roles_transition += array('author' => 'author');
614    }
615  }
616 
617  $transitions = array();
618  if ($states['wid']) {
619    $transitions = workflow_allowable_transitions($estado, 'to', $roles_transition);
620  }
621
622  if (isset($transitions[$estadonuevo])) {
623    return TRUE;
624  }
625  return FALSE;
626}
627
628
629function _seg_esta_aprobado_proyecto($node, $mes=0){
630 
631  $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes);
632  $estado = $transiciones_dispo['estado_actual'];
633 
634  $estado_aprobado = variable_get('acciones_centralizadas_state_aprobado', NULL);
635
636  if ($estado == $estado_aprobado) {
637    return TRUE;
638  }
639  return FALSE;
640}
641
642/*
643 * verificar nivel de usuario para modificar
644 */
645
646function _estado_seg_en_nivel_de_usuario_proyecto($node, $mes=0) {
647 
648  //calcular el estado
649  $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes);
650
651/*global $user;
652
653    $roles_perm = FALSE;
654    $roles_allow = variable_get('proyectos_operativos_state_s_' . $estado, array());
655    $roles = array_keys($user->roles);
656    if (count($roles)) {
657      foreach($roles as $rol) {
658        if($roles_allow[$rol]) {
659          $roles_perm = TRUE;
660        }
661        elseif ($rol == -1 && $seguimiento['uid'] == $user->uid) {
662          $roles_perm = TRUE;
663        }
664      }
665    }
666  echo $roles_perm;
667
668print_r($transiciones_dispo);
669*/
670  $nivel_usuario = _obtener_nivel_usuario_segun_estado($transiciones_dispo['nombre_estado_actual']);
671 
672  $rol_ente_usuario = _obtener_rol_y_ente_de_usuario();
673 
674  if(($transiciones_dispo['estado_actual'] < 0)&&($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='administrador')){
675    return true; 
676  }
677
678  if(($nivel_usuario == $rol_ente_usuario['rol'])||$rol_ente_usuario['rol']=='administrador'){//nivel de usuario == rol actor
679    return TRUE;
680  }
681  return FALSE;
682}
683
684/*
685 * verificar que sea el mismo ente, tanto para el proyecto como para el usuario (si es enlace o supervisor)
686 */
687
688function _es_elmismo_ente_proyecto_y_usuario_proyecto($node){
689 
690  $rol_ente_usuario = _obtener_rol_y_ente_de_usuario();
691
692  if($rol_ente_usuario['rol']=='enlace'||$rol_ente_usuario['rol']=='supervisor'){//enlace o supervisor
693    //$nodo_proyecto = node_load($node->field_accion_esp_proyecto[0]['nid']);
694    if($rol_ente_usuario['id_ente'] == $node->field_proyecto_ente[0]['nid']){//deben ser del mismo ente que el proyecto
695      return TRUE;
696    }else{
697      return FALSE;
698    }
699  }
700  return TRUE;
701}
702
703//**************************************************************************************************************************************************
704//pagina de formulario
705
706module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/proyecto/seguimiento_proyecto_datospormes_modificar.forms');
707
708//**************************************************************************************************************************************************
709//funciones para consultas a base de datos
710
711module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/proyecto/funciones_consulta_bd_proyecto.pages');
712
713//**************************************************************************************************************************************************
714//fase de seguimiento
715module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/fase_de_seguimiento_proyecto_y_aes.pages');
716
717//colcar el enlace haci la fase de seguimiento del proyecto y sus acciones
718
719/*
720 * Implementation of hook_acciones_obtiene_links_alter()
721 */
722function proyecto_operativo_seguimiento_proyecto_obtiene_links_alter(&$links, $proyecto, $acceso = FALSE) {
723  $meses = json_decode(MESES);
724  $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($proyecto);
725  $mes_seguimiento_proyecto_y_aes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0);
726  $nodo_proyecto = node_load($proyecto->nid);
727
728//proyectosop/%proyectosop/seguimiento
729  if ($mes_seguimiento_proyecto_y_aes >= ($mes_fase_seg+1)) {
730    if($nodo_proyecto->anhoproyectos_operativos == variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0) && _proyectooperativo_esta_aprobado($nodo_proyecto)){
731      $links[] = array(
732        'data' => l(t('Fase de Seguimiento'), 'proyectosop/' . $nodo_proyecto->nid . '/seguimiento'),
733        'class' => 'proyectos-operativos-faseseguimiento',
734      );
735    }
736  }
737}
738
739/**
740 * Implementation of hook_node_load
741 */
742function proyecto_operativo_seguimiento_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
743  switch ($op) {
744    case 'load':
745      if ($node->type == 'proyectos_operativos') {
746        $additions = db_fetch_object(db_query('SELECT acumulativo FROM {seguimiento_proyecto} WHERE nid = %d', $node->nid));
747        $node->es_acumulativo = $additions->acumulativo;
748      }
749    break;
750  }
751}
752
753/**
754 * Implementation of hook_views_api().
755 */
756function proyecto_operativo_seguimiento_views_api() {
757  return array(
758    'api' => '2.0',
759    'path' => drupal_get_path('module', 'proyecto_operativo_seguimiento') . '/views',
760  );
761}
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.