1 | <?php |
---|
2 | /** |
---|
3 | * Modulo que mejora la visualizacion del seguimiento de las acciones especificas y los proyectos |
---|
4 | * Sistema Automatizado para la Planificación Estratégico-Situacional en la Administración Pública Venezolana |
---|
5 | * @file seguimiento_proyectos_operativos.module |
---|
6 | * Drupal part Module to code ente planificador module |
---|
7 | * Copyright 2011 Sistema Automatizado para la Planificación Estratégico-Situacional en la Administración Pública Venezolana (CENDITEL) |
---|
8 | * |
---|
9 | * This program is free software; you can redistribute it and/or modify |
---|
10 | * it under the terms of the GNU General Public License as published by |
---|
11 | * the Free Software Foundation; either version 2 of the License, or |
---|
12 | * (at your option) any later version. |
---|
13 | * |
---|
14 | * This program is distributed in the hope that it will be useful, |
---|
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
17 | * GNU General Public License for more details. |
---|
18 | * |
---|
19 | * You should have received a copy of the GNU General Public License |
---|
20 | * along with this program; if not, write to the Free Software |
---|
21 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
---|
22 | * |
---|
23 | * @author Cenditel Merida - Ing. Jose Puentes |
---|
24 | * @date 2015-11-18 // (año-mes-dia) |
---|
25 | * @version 0.2 // (0.1) |
---|
26 | * |
---|
27 | */ |
---|
28 | |
---|
29 | /** |
---|
30 | * Meses del anho |
---|
31 | */ |
---|
32 | $meses = array( |
---|
33 | 0 => t('January'), |
---|
34 | 1 => t('February'), |
---|
35 | 2 => t('March'), |
---|
36 | 3 => t('April'), |
---|
37 | 4 => t('May'), |
---|
38 | 5 => t('June'), |
---|
39 | 6 => t('July'), |
---|
40 | 7 => t('August'), |
---|
41 | 8 => t('September'), |
---|
42 | 9 => t('Octuber'), |
---|
43 | 10 => t('November'), |
---|
44 | 11 => t('December'), |
---|
45 | ); |
---|
46 | define('MESES', json_encode($meses)); //constante para la manupulacion de los meses del anho |
---|
47 | |
---|
48 | /** |
---|
49 | * Implementation of hook_menu_alter() |
---|
50 | */ |
---|
51 | function seguimiento_proyectos_operativos_menu_alter(&$items) { |
---|
52 | //incluyendo las funciones del modulo de seguimiento |
---|
53 | module_load_include('module', 'proyectos_operativos_seguimiento', 'proyectos_operativos_seguimiento'); |
---|
54 | |
---|
55 | $items['proyectosop/%node/seguimiento_proyecto']['page callback'] = 'seguimiento_proyectos_operativos_acciones_views_page'; |
---|
56 | $items['proyectosop/%node/seguimiento_proyecto']['file'] = ''; |
---|
57 | $items['node/%node/seguimiento_proyecto']['page callback'] = 'seguimiento_proyectos_operativos_acciones_views_page'; |
---|
58 | $items['node/%node/seguimiento_proyecto']['file'] = ''; |
---|
59 | $items['node/%node/fase_de_seguimiento_proyecto_y_aes/mes/%messegaepartida']['page callback'] = 'seguimiento_proyectos_operativos_acciones_views_page'; |
---|
60 | $items['node/%node/fase_de_seguimiento_proyecto_y_aes/mes/%messegaepartida']['file'] = ''; |
---|
61 | } |
---|
62 | |
---|
63 | /** |
---|
64 | * Vista del seguimiento de proyectos de forma general |
---|
65 | */ |
---|
66 | function seguimiento_proyectos_operativos_acciones_views_page($node) { |
---|
67 | module_load_include('inc', 'accion_especifica_de_proyecto_seguimiento', 'includes/ae_proyecto/seguimiento_accion_especifica_deproyecto.pages'); |
---|
68 | global $user; |
---|
69 | $rows = array(); |
---|
70 | $row2 = array(); |
---|
71 | $header = array(); |
---|
72 | $header2 = array(); |
---|
73 | //roles de los usuarios |
---|
74 | $rol_control = variable_get('ActorPlanificadorMacro', 2); |
---|
75 | $rol_supervisor = variable_get('ActorPlanificadorMicro', 2); |
---|
76 | $rol_enlace = variable_get('ActorPlanificadorEnlace', 2); |
---|
77 | $roles = array_keys($user->roles); |
---|
78 | |
---|
79 | $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($node); |
---|
80 | $format_decimal = variable_get('proyectos_operativos_number_dec_point', ','); |
---|
81 | $format_cnt = variable_get('proyectos_operativos_number_decimals', ','); |
---|
82 | $format_miles = variable_get('proyectos_operativos_number_thousands_sep', '.'); |
---|
83 | $meses = json_decode(MESES); |
---|
84 | |
---|
85 | drupal_set_title(t('Seguimiento y Control de Proyecto Operativo'.' (mes de '. $meses[$mes_fase_seg] . ')')); |
---|
86 | //calcular variacion por reformulacion |
---|
87 | $variacion_planificado_mes = _seguimiento_mesactual_metafisica_proyecto_reformulaciones_load($node, $mes_fase_seg); |
---|
88 | $valor_texto = $mes > 0 ? 'value_' . $mes : 'value'; |
---|
89 | $cant_metafisica_planif = $node->field_proyecto_meta_fisica[0][$valor_texto] + $variacion_planificado_mes; |
---|
90 | $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes_fase_seg); |
---|
91 | $estado = ((isset($consultaseguimientoactual['segmes']['estado'])) && ($consultaseguimientoactual['segmes']['estado'] > 0) )? $consultaseguimientoactual['segmes']['estado'] : -1; |
---|
92 | $transiciones_dispo = _obtener_transiciones_disponibles_proyecto($node, $mes_fase_seg); |
---|
93 | |
---|
94 | if ($user->uid == 1) { |
---|
95 | // Superuser is special. |
---|
96 | $roles_transition = 'ALL'; |
---|
97 | } |
---|
98 | else { |
---|
99 | $roles_transition = $roles; |
---|
100 | if ($user->uid == $consultaseguimientoactual['segmes']['uid']&& $consultaseguimientoactual['segmes']['uid'] > 0) {//verificar si es el autor del seguimiento |
---|
101 | $roles_transition += array('author' => 'author'); |
---|
102 | } |
---|
103 | } |
---|
104 | $transitions = workflow_allowable_transitions($estado, 'to', $roles_transition); |
---|
105 | |
---|
106 | $cant_metafisica_ej = isset($consultaseguimientoactual['segmes']['ejecutadometafisica']) ? $consultaseguimientoactual['segmes']['ejecutadometafisica'] : 0; |
---|
107 | $zonacritica1 = $cant_metafisica_planif ? $cant_metafisica_ej/$cant_metafisica_planif : -1; |
---|
108 | $porczonacritica1 = $zonacritica1 >= 0 ? ($zonacritica1 * 100) . '%' : $cant_metafisica_ej ? 'N/D' : 'N/A'; |
---|
109 | |
---|
110 | $header[] = array('data' => t('Partida')); |
---|
111 | $header[] = array('data' => t('Asignado')); |
---|
112 | $header[] = array('data' => t('Comprometido')); |
---|
113 | $header[] = array('data' => t('Causado')); |
---|
114 | $header[] = array('data' => t('Pagado')); |
---|
115 | $header[] = array('data' => t('% de Inversión')); |
---|
116 | $header[] = array('data' => t('Estatus de la Inversión')); |
---|
117 | $header[] = array('data' => t('Operación')); |
---|
118 | |
---|
119 | $seguimiento_financiero_proyecto = _cargar_totales_seguimiento_aes_delproyecto($node, $mes_fase_seg); |
---|
120 | foreach ($seguimiento_financiero_proyecto['seg_financiero_aes'] as $acciones_especif) { |
---|
121 | $content = ''; |
---|
122 | $row = array(); |
---|
123 | $causadov = $acciones_especif['totalCausadoAEs']; |
---|
124 | $asignadov = $acciones_especif['totalAsignadoAEs']; |
---|
125 | $estatus_ejecucion = _calcularzonacritica($asignadov, $causadov); |
---|
126 | $porczonacritica = $estatus_ejecucion['porczonacritica']; |
---|
127 | $textozona = $estatus_ejecucion['textozona']; |
---|
128 | $colorzona = $estatus_ejecucion['colorzona']; |
---|
129 | $colorfontzona = $estatus_ejecucion['colorfontzona']; |
---|
130 | $nodo_ae = node_load($acciones_especif['idnodosAEs']); |
---|
131 | $transiciones_dispo_ac = _obtener_transiciones_disponibles($nodo_ae, $mes_fase_seg); |
---|
132 | $row[] = array('data' => $acciones_especif['nombreAEs'],); |
---|
133 | if (_mes_dentro_de_duracion_ae_proyecto($nodo_ae, $mes_fase_seg)) { |
---|
134 | $row[] = array('data' => number_format($asignadov, $format_cnt, $format_decimal, $format_miles)); |
---|
135 | $row[] = array('data' => number_format($causadov, $format_cnt, $format_decimal, $format_miles)); |
---|
136 | $row[] = array('data' => number_format($acciones_especif['totalCausadoAEs'], $format_cnt, $format_decimal, $format_miles)); |
---|
137 | $row[] = array('data' => number_format($acciones_especif['totalPagadoAEs'], $format_cnt, $format_decimal, $format_miles)); |
---|
138 | $row[] = array('data' => $porczonacritica,); |
---|
139 | $row[] = array('data' => $textozona, 'style' => 'font-weight: bold;background:' . $colorzona . '; color:' . $colorfontzona); |
---|
140 | //operaciones de la accion especifica |
---|
141 | if (_accion_especifica_de_proyecto_seguimiento_modificar_mes_access($nodo_ae, $mes_fase_seg)) { |
---|
142 | if (isset($transiciones_dispo_ac['nombre_estado_actual'])) { |
---|
143 | $content .= '<br><b>' . l(t('Modificar'), 'node/' . $nodo_ae->nid . '/seguimiento_aeproyecto/partidas/' . $mes_fase_seg . '/edit') . '</b>'; |
---|
144 | } |
---|
145 | else { |
---|
146 | $content .= '<br><b>'.l(t('Ingresar'), 'node/' . $nodo_ae->nid . '/seguimiento_aeproyecto/partidas/' . $mes_fase_seg . '/edit') . '</b>'; |
---|
147 | } |
---|
148 | } |
---|
149 | $row[] = $content; |
---|
150 | } |
---|
151 | else { |
---|
152 | $row[] = array('data' => '-',); |
---|
153 | $row[] = array('data' => '-',); |
---|
154 | $row[] = array('data' => '-',); |
---|
155 | $row[] = array('data' => '-',); |
---|
156 | $row[] = array('data' => '-',); |
---|
157 | $row[] = array('data' => '-',); |
---|
158 | } |
---|
159 | $rows[] = $row; |
---|
160 | } |
---|
161 | $header2[] = array('data' => t('Planificado')); |
---|
162 | $header2[] = array('data' => t('Ejecutado')); |
---|
163 | $header2[] = array('data' => t('% de Logro')); |
---|
164 | $header2[] = array('data' => t('Estatus de la Inversión')); |
---|
165 | $rows2 = array(); |
---|
166 | |
---|
167 | $planificadov = $cant_metafisica_planif; |
---|
168 | $ejecutadov = $cant_metafisica_ej; |
---|
169 | $estatus_ejecucion = _calcularzonacritica($planificadov, $ejecutadov); |
---|
170 | $porczonacritica = $estatus_ejecucion['porczonacritica']; |
---|
171 | $textozona = $estatus_ejecucion['textozona']; |
---|
172 | $colorzona = $estatus_ejecucion['colorzona']; |
---|
173 | $colorfontzona = $estatus_ejecucion['colorfontzona']; |
---|
174 | |
---|
175 | $row2[] = array('data' => $cant_metafisica_planif); |
---|
176 | $row2[] = array('data' => $cant_metafisica_ej); |
---|
177 | $row2[] = array('data' => $porczonacritica1,); |
---|
178 | $row2[] = array('data' => $textozona, 'style' => 'font-weight: bold;background:' . $colorzona . '; color:' . $colorfontzona, 'id' => 'metafisica-inversion-form',); |
---|
179 | $rows2[] = $row2; |
---|
180 | |
---|
181 | //beneficiarios |
---|
182 | $muestra_beneficiarios = variable_get('proyectos_operativos_muestra_beneficiario', TRUE); |
---|
183 | if ($muestra_beneficiarios) { |
---|
184 | $header3 = array(); |
---|
185 | $header3[] = array('data' => t('Beneficiario')); |
---|
186 | $rows3 = array(); |
---|
187 | foreach ($node->field_proyecto_beneficiario as $id => $beneficiarios) { |
---|
188 | foreach ($consultaseguimientoactual['seguimientos_beneficiarios'] as $seg_benef) { |
---|
189 | if ($id == $seg_benef['posicion_beneficiario']) { |
---|
190 | $cantbeneficiario_mes = isset($seg_benef['cant_beneficiarios_mes'])? $seg_benef['cant_beneficiarios_mes']:0; |
---|
191 | break; |
---|
192 | } |
---|
193 | } |
---|
194 | $row3 = array(); |
---|
195 | $row3[] = array('data' => $beneficiarios['value']); |
---|
196 | $row3[] = array('data' => $cantbeneficiario_mes); |
---|
197 | $rows3[] = $row3; |
---|
198 | } |
---|
199 | } |
---|
200 | |
---|
201 | $output .= '<fieldset><legend>Datos del Proyecto Operativo</legend>'; |
---|
202 | $output .= '<b>Código del Proyecto:</b> ' . $node->field_proyecto_codigo[0]['value'] . '<br>'; |
---|
203 | $output .= '<b>Nombre del Proyecto:</b> ' . $node->titulo_asignado . '<br>'; |
---|
204 | $output .= '</fieldset>'; |
---|
205 | |
---|
206 | $output .= '<fieldset><legend>' . t('Indicadores de Meta FÃsica del Proyecto') . '</legend>' . '<div class="field-label"><b>' . t('Mes de Seguimiento Actual:') . '</b> ' . $meses[$mes_fase_seg] . '</div>' . theme('table', $header2, $rows2) ; |
---|
207 | $metafisica_con_planificado_cero = $cant_metafisica_planif == 0 ? 1 : 0; |
---|
208 | if ($metafisica_con_planificado_cero == 1) { |
---|
209 | $output .= '<br><b>Nota</b>: Si desea ingresar una cantidad de ejecutado de meta fÃsica mayor que cero, <i>primero</i> debe realizar una reformulación a la meta fÃsica de este mes.<br>'; |
---|
210 | } |
---|
211 | |
---|
212 | $output .= '<fieldset><legend>' . t('Indicadores Financieros (por Acciones EspecÃficas) del Proyecto') . '</legend>' . '<div class="field-label"><b>' . t('Mes de Seguimiento Actual:') . '</b> ' . $meses[$mes_fase_seg] . '</div>' . theme('table', $header, $rows) ; |
---|
213 | |
---|
214 | $output .= '</fieldset>'; |
---|
215 | if ($muestra_beneficiarios) { |
---|
216 | $header3[] = array('data' => t('Cantidad de Beneficiarios durante el mes de ') . $meses[$mes_fase_seg]); |
---|
217 | $output .= '<fieldset><legend>' . t('Beneficiarios del Proyecto (Durante la Ejecución)') . '</legend>' . '<div class="field-label"></div>' . theme('table', $header3, $rows3) ; |
---|
218 | $output .= '</fieldset>'; |
---|
219 | } |
---|
220 | $output .= '</fieldset>'; |
---|
221 | $output .= _mostrarleyendazonacritica(); |
---|
222 | $output .= '<br>'; |
---|
223 | $ac = 0; |
---|
224 | if (_periodo_de_seguimiento_proyecto_y_aes_esta_activo()) { |
---|
225 | if (_mes_habilitado_para_seguimiento($mes_fase_seg)) { |
---|
226 | if (isset($transiciones_dispo['nombre_estado_actual'])) { |
---|
227 | foreach ($transiciones_dispo['transic'] as $id => $transition) { |
---|
228 | if (_proyecto_seguimiento_mes_mover_estado_access($node, $mes_fase_seg, $id)) { |
---|
229 | $output .= '<br><b>' . l(t('Enviar Proyecto a @state', array('@state' => $transition)), 'node/' . $node->nid . '/seguimiento_proyecto/' . $mes_fase_seg . '/workflow/' . $id) . '</b>'; |
---|
230 | } |
---|
231 | } |
---|
232 | if (_proyecto_operativo_seguimiento_modificar_mes_access($node, $mes_fase_seg)) { |
---|
233 | $output .= '<br><b>' . l(t('Modificar Seguimiento de Proyectos'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit') . '</b>'; |
---|
234 | } |
---|
235 | $output .= '<br><b>'.l(t('Consultar Historial de Estados del seguimiento del Proyecto'), 'node/' . $node->nid.'/seguimiento_proyecto/' . $mes_fase_seg . '/workflow/historial') . '</b>'; |
---|
236 | } |
---|
237 | else { |
---|
238 | $output .= '<b>'.l(t('Ingresar Seguimiento de Proyectos'), 'node/' . $node->nid . '/seguimiento_proyecto/mes/' . $mes_fase_seg . '/edit') . '</b>'; |
---|
239 | $output .= '<br>'; |
---|
240 | } |
---|
241 | } |
---|
242 | } |
---|
243 | return $output; |
---|
244 | } |
---|
245 | |
---|
246 | /** |
---|
247 | * Implementation of hook_form_alter() |
---|
248 | */ |
---|
249 | function seguimiento_proyectos_operativos_form_alter(&$form, $form_state, $form_id) { |
---|
250 | if ($form_id == 'cambiodeestado_seg_proyecto_paginaconfirmacion_form') { |
---|
251 | $form['actions']['cancel']['#value'] = l('Cancelar', 'proyectosop/' . $form['#node']->nid . '/seguimiento_proyecto'); |
---|
252 | $form['#redirect'][] = 'proyectosop/' . $form['#node']->nid . '/seguimiento_proyecto'; |
---|
253 | } |
---|
254 | if ($form_id == 'seguimiento_accion_especifica_deproyecto_partidaspormes_modificar_form') { |
---|
255 | $form['buttons']['cancel']['#value'] = l('Cancelar', 'proyectosop/' . $form['#node']->field_accion_esp_proyecto[0]['nid'] . '/seguimiento_proyecto'); |
---|
256 | $form['#redirect'][] = 'proyectosop/' . $form['#node']->field_accion_esp_proyecto[0]['nid'] . '/seguimiento_proyecto'; |
---|
257 | } |
---|
258 | if ($form_id == 'seguimiento_proyecto_datospormes_modificar_form') { |
---|
259 | $form['buttons']['cancel']['#value'] = l('Cancelar', 'proyectosop/' . $form['#node']->nid . '/seguimiento_proyecto'); |
---|
260 | $form['#redirect'][] = 'proyectosop/' . $form['#node']->nid . '/seguimiento_proyecto'; |
---|
261 | } |
---|
262 | } |
---|
263 | |
---|
264 | /* |
---|
265 | * Implementation of hook_acciones_obtiene_links_alter() |
---|
266 | */ |
---|
267 | function seguimiento_proyectos_operativos_proyecto_obtiene_links_alter(&$links, $proyecto, $acceso = FALSE) { |
---|
268 | $meses = json_decode(MESES); |
---|
269 | foreach ($links as $key => $link) { |
---|
270 | if ($link['class'] == 'proyectos-operativos-faseseguimiento') { |
---|
271 | $node = node_load($proyecto->nid); |
---|
272 | if ($node->anhoproyectos_operativos == variable_get('accion_especifica_de_proyecto_seguimiento_anho_seguimiento', 0) && _proyectooperativo_esta_aprobado($node)) { |
---|
273 | $mes_seguimiento_proyecto_y_aes = variable_get('accion_especifica_de_proyecto_seguimiento_mes_seguimiento', 0); |
---|
274 | $mes_fase_seg = _obtener_mes_fase_seguimiento_proyecto($node); |
---|
275 | if ($mes_seguimiento_proyecto_y_aes == ($mes_fase_seg + 1)) { |
---|
276 | $links[$key]['data'] = l(t('Fase de Seguimiento ') . '(' . $meses[$mes_fase_seg].')', 'node/' . $node->nid . '/fase_de_seguimiento_proyecto_y_aes/mes/' . $mes_fase_seg); |
---|
277 | } |
---|
278 | } |
---|
279 | } |
---|
280 | } |
---|
281 | } |
---|