variable_get('proyectos_operativos_number_decimals', 0), 'dec_point' => variable_get('proyectos_operativos_number_dec_point', ','), 'thousands_sep' => variable_get('proyectos_operativos_number_thousands_sep', '.'), ); $form['#format_number'] = array('format_number' => $format_number); drupal_add_js($form['#format_number'], 'setting'); $meses = json_decode(MESES); drupal_set_title(t('Seguimiento y Control de Proyecto Operativo'.' (mes de '.$meses[$mes -1].')')); $form = array(); $campo = ''; $form['#node'] = $node; $form['#mes'] = $mes -1; $form['#ftypes'] = array( 'value' => t('January'), 'value_1' => t('February'), 'value_2' => t('March'), 'value_3' => t('April'), 'value_4' => t('May'), 'value_5' => t('June'), 'value_6' => t('July'), 'value_7' => t('August'), 'value_8' => t('September'), 'value_9' => t('Octuber'), 'value_10' => t('November'), 'value_11' => t('December'), ); $output = ''; $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($node, $mes); //estado $estado = ((isset($consultaseguimientoactual['segmes']['estado'])) && ($consultaseguimientoactual['segmes']['estado'] > 0) )? $consultaseguimientoactual['segmes']['estado'] : -1; $form['#state_creation'] = $estado; //get first state if ($estado == -1 && module_exists('workflow')) { $wid = workflow_get_workflow_for_type('proyectos_operativos'); if ($wid) { $form['#state_creation'] = _workflow_creation_state($wid); } } $fecha = explode('-', $node->field_proyecto_fecha_i[0]['value']); $mes_inicio = (int) $fecha[1]; $mes_final = variable_get('seguimiento_proyectos_cantidad_meses_seguimiento', 0); if ($mes_inicio <= ($mes_final + 1)) { $form['es_acumulativo'] = array( '#type' => 'select', '#options' => array('No', 'Si'), '#default_value' => ($node->es_acumulativo) ? 1 : 0, ); } $header = array(); $header[] = array('data' => t('Partida')); $header[] = array('data' => t('Asignado')); $header[] = array('data' => t('Comprometido')); $header[] = array('data' => t('Causado')); $header[] = array('data' => t('Pagado')); $header[] = array('data' => t('% de Inversión')); $header[] = array('data' => t('Estatus de la Inversión')); $header[] = array('data' => t('Información Complementaria')); //calcular variacion por reformulacion $variacion_planificado_mes = _seguimiento_mesactual_metafisica_proyecto_reformulaciones_load($node, $mes); $valor_texto = $mes > 0 ? 'value_' . $mes : 'value'; $cant_metafisica_planif = $node->field_proyecto_meta_fisica[0][$valor_texto] + $variacion_planificado_mes; $disabled = $cant_metafisica_planif == 0 ? TRUE : FALSE; $form['#metafisica_con_planificado_cero'] = $cant_metafisica_planif == 0 ? 1 : 0; $form['cantidad_metafisica_planificado'] = array( //'#title' => t('Ejecutado Meta Fisica'), '#type' => 'textfield', '#size' => 15, '#default_value' => $cant_metafisica_planif, '#attributes' => array('class' => 'number campo-asignado'), ); $seg_proyecto_path = drupal_get_path('module', 'accion_especifica_de_proyecto_seguimiento'); drupal_add_js($seg_proyecto_path . '/js/seguimiento_proyecto.js'); $cant_metafisica_ej = isset($consultaseguimientoactual['segmes']['ejecutadometafisica']) ? $consultaseguimientoactual['segmes']['ejecutadometafisica'] : 0; //op field show $form['#op_fields'] = $field; if ($field == 'comentario_metafisica' || $field == 'full') { $form['cantidad_metafisica_ejecutado'] = array( //'#title' => t('Ejecutado Meta Fisica'), '#type' => 'textfield', '#size' => 15, '#default_value' => $cant_metafisica_ej, // '#disabled' => $disabled, '#attributes' => array('class' => 'number', 'onchange' => "valpositivo('" . 'cantidad-metafisica-ejecutado' . "');calculaporc_metafisica('" . "');valenterometafisica('cantidad-metafisica-ejecutado')"), ); $zonacritica1 = $cant_metafisica_planif ? $cant_metafisica_ej/$cant_metafisica_planif : -1; // $porczonacritica1 = $zonacritica1 >= 0 ? ($zonacritica1 * 100) . '%' : 'N/A'; $porczonacritica1 = $zonacritica1 >= 0 ? ($zonacritica1 * 100) . '%' : $cant_metafisica_ej ? 'N/D' : 'N/A'; $form['cantidad_metafisica_porcen'] = array( '#type' => 'textfield', '#default_value' => $porczonacritica1, '#size' => 15, '#disabled' => TRUE, '#attributes' => array('class' => 'number',), ); $infocomplementaria_fisica = isset($consultaseguimientoactual['segmes']['infocomplementaria_metafisica']) ? $consultaseguimientoactual['segmes']['infocomplementaria_metafisica'] : ''; $form['comentario_metafisica'] = array( '#title' => t('Información Complementaria (Meta Física)'), '#type' => 'textarea', '#default_value' => $infocomplementaria_fisica, ); } if ($field == 'comentario_informacionfinanciera' || $field == 'full') { $infocomplementaria_financiera = isset($consultaseguimientoactual['segmes']['infocomplementaria_metafinanciera']) ? $consultaseguimientoactual['segmes']['infocomplementaria_metafinanciera'] : ''; $form['comentario_informacionfinanciera'] = array( '#title' => t('Información Complementaria (Financiera)'), '#type' => 'textarea', '#default_value' => $infocomplementaria_financiera, ); } if (variable_get('proyectos_operativos_muestra_beneficiario', TRUE) && $field == 'comentario_metafisica' || $field == 'full') { $header3 = array(); $header3[] = array('data' => t('Beneficiario')); $header3[] = array('data' => t('Cantidad de Beneficiarios')); $cantbeneficiario_mes = 0; foreach($node->field_proyecto_beneficiario as $id => $beneficiarios) { foreach($consultaseguimientoactual['seguimientos_beneficiarios'] as $seg_benef){ if($id == $seg_benef['posicion_beneficiario']){ $cantbeneficiario_mes = isset($seg_benef['cant_beneficiarios_mes'])? $seg_benef['cant_beneficiarios_mes']:0; break; } } $form['tipobeneficiario_'.$id] = array( '#type' => 'textfield', '#default_value' => $cantbeneficiario_mes, '#size' => 15, '#disabled' => FALSE, '#attributes' => array('class' => 'number', 'onchange' => "valpositivo('tipobeneficiario-". $id . "');valenterometafisica('tipobeneficiario-". $id . "')"), ); } } $form['buttons'] = array( '#prefix' => '
', '#suffix' => '
', ); $form['buttons']['submit'] = array( '#type' => 'submit', '#value' => t('Guardar'), ); $form['buttons']['cancel'] = array('#value' => l('Cancelar', 'node/' . $form['#node']->nid . '/seguimiento_proyecto')); return $form; } /** * Implementation of hook_theme(). */ function proyecto_operativo_seguimiento_theme() { return array( 'seguimiento_proyecto_datospormes_modificar_form' => array( 'arguments' => array('form' => NULL), ), ); } /** * Formato para el formulario (campos en tablas y carga de algunos datos) */ function theme_seguimiento_proyecto_datospormes_modificar_form($form) { $meses = json_decode(MESES); $proyectos_operativos_path = drupal_get_path('module', 'proyectos_operativos'); drupal_add_js($proyectos_operativos_path . '/js/proyectos_operativos_extra.js'); $modulo_seguimiento_proyecto_y_aes_path = drupal_get_path('module', 'accion_especifica_de_proyecto_seguimiento'); drupal_add_js($modulo_seguimiento_proyecto_y_aes_path . '/js/seg_proyecto_validaciones_original.js'); drupal_add_js($form['#format_number'], 'setting'); $header = array(); $header[] = array('data' => t('AE')); $header[] = array('data' => t('Asignado')); $header[] = array('data' => t('Comprometido')); $header[] = array('data' => t('Causado')); $header[] = array('data' => t('Pagado')); $header[] = array('data' => t('% de Inversión')); $header[] = array('data' => t('Estatus de la Inversión')); $rows = array(); $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($form['#node'], $form['#mes']); $transiciones_dispo = _obtener_transiciones_disponibles($form['#node'], $form['#mes']); $status_actual = t('Por ingresar'); if (isset($transiciones_dispo['nombre_estado_actual'])) { $status_actual = $transiciones_dispo['nombre_estado_actual']; } $seguimiento_financiero_proyecto = _cargar_totales_seguimiento_aes_delproyecto($form['#node'], $form['#mes']); foreach ($seguimiento_financiero_proyecto['seg_financiero_aes'] as $acciones_especif) { $asignadov = $acciones_especif['totalAsignadoAEs']; $causadov = $acciones_especif['totalCausadoAEs']; $estatus_ejecucion = _calcularzonacritica($asignadov, $causadov); $porczonacritica = $estatus_ejecucion['porczonacritica']; $textozona = $estatus_ejecucion['textozona']; $colorzona = $estatus_ejecucion['colorzona']; $colorfontzona = $estatus_ejecucion['colorfontzona']; $nodo_ae = node_load($acciones_especif['idnodosAEs']); $row = array(); $row[] = array('data' => $acciones_especif['nombreAEs'],); if(_mes_dentro_de_duracion_ae_proyecto($nodo_ae, $form['#mes'])){ $row[] = array('data' => number_format($acciones_especif['totalAsignadoAEs'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),); $row[] = array('data' => number_format($acciones_especif['totalComprometidoAEs'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),); $row[] = array('data' => number_format($acciones_especif['totalCausadoAEs'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),); $row[] = array('data' => number_format($acciones_especif['totalPagadoAEs'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),); $row[] = array('data' => $porczonacritica,); $row[] = array('data' => $textozona, 'style' => 'font-weight: bold;background:' . $colorzona . '; color:' . $colorfontzona, 'id' => $partida['tid'] . '-inversion-form',); }else{ $row[] = array('data' => '-',); $row[] = array('data' => '-',); $row[] = array('data' => '-',); $row[] = array('data' => '-',); $row[] = array('data' => '-',); $row[] = array('data' => '-',); } $rows[] = $row; } $row = array(); $row[] = array('data' => 'Acumulado',); $row[] = array('data' => number_format($seguimiento_financiero_proyecto['seg_financiero_proyecto']['TotalAsignadoProyecto'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),); $row[] = array('data' => number_format($seguimiento_financiero_proyecto['seg_financiero_proyecto']['TotalComprometidoProyecto'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),); $row[] = array('data' => number_format($seguimiento_financiero_proyecto['seg_financiero_proyecto']['TotalCausadoProyecto'], $form['#format_number']['format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),); $row[] = array('data' => number_format($seguimiento_financiero_proyecto['seg_financiero_proyecto']['TotalPagadoProyecto'], $form['#format_number']['decimals'], $form['#format_number']['format_number']['dec_point'], $form['#format_number']['format_number']['thousands_sep']),); $row[] = array('data' => '', 'colspan' => 2); $rows[] = $row; $node= $form['#node']; $header2 = array(); $header2[] = array('data' => t('Planificado')); $header2[] = array('data' => t('Ejecutado')); $header2[] = array('data' => t('% de Logro')); $header2[] = array('data' => t('Estatus de la Inversión')); $rows2 = array(); $planificadov = $form['cantidad_metafisica_planificado']['#value']; $ejecutadov = $form['cantidad_metafisica_ejecutado']['#value']; $estatus_ejecucion = _calcularzonacritica($planificadov, $ejecutadov); $porczonacritica = $estatus_ejecucion['porczonacritica']; $textozona = $estatus_ejecucion['textozona']; $colorzona = $estatus_ejecucion['colorzona']; $colorfontzona = $estatus_ejecucion['colorfontzona']; $row2 = array(); $row2[] = array('data' => drupal_render($form['cantidad_metafisica_planificado']),); $row2[] = array('data' => drupal_render($form['cantidad_metafisica_ejecutado']),); $row2[] = array('data' => drupal_render($form['cantidad_metafisica_porcen']),); $row2[] = array('data' => $textozona, 'style' => 'font-weight: bold;background:' . $colorzona . '; color:' . $colorfontzona, 'id' => 'metafisica-inversion-form',); $rows2[] = $row2; $output = ''; $output .= '
'; $seguimiento_proyecto = _seguimiento_mesactual_proyecto_load($node, $i); $state_name = t("Por ingresar"); if (workflow_get_state_name($seguimiento_proyecto['segmes']['estado'])) { $state_name = workflow_get_state_name($seguimiento_proyecto['segmes']['estado']); } $grupo = explode('-', $form['#grupo']['label']); $output .= '
Datos del Proyecto Operativo'; $output .= 'Código del Proyecto: '. $node->field_proyecto_codigo[0]['value'].'
'; $output .= 'Nombre del Proyecto: '. $node->titulo_asignado.'
'; $output .= '' . t('Estado del Seguimiento: ') . '' . $state_name . '
'; $output .= '
'; $fecha = explode('-', $node->field_proyecto_fecha_i[0]['value']); $mes_inicio = (int) $fecha[1]; $mes_final = variable_get('seguimiento_proyectos_cantidad_meses_seguimiento', 0); if ($form['#op_fields'] == 'comentario_metafisica' || $form['#op_fields'] == 'full') { $output .= '
' . t('Indicadores de Meta Física del Proyecto') . ''; if ($node->field_proyecto_unidadm) { $output .= '' . t("Unidad de Medida del Proyecto: ") . ''; $count = 0; $output .= ''; } if ($mes_inicio <= ($mes_final + 1)) { $title[] = '' . t('La unidad de medida se considera acumulativa:') . ''; $column[] = array('data' => drupal_render($form['es_acumulativo'])); $columns[] = $column; $output .= theme('table', $title, $columns) . '
'; } $output .= '
' . t('Mes de Seguimiento Actual:') . ' ' . $meses[$form['#mes']] . '
' . theme('table', $header2, $rows2) ; if($form['#metafisica_con_planificado_cero'] == 1){ $output .= '
Nota: Si desea ingresar una cantidad de ejecutado de meta física mayor que cero, primero debe realizar una reformulación a la meta física de este mes.
'; } $output .= drupal_render($form['comentario_metafisica']); $output .= '
'; } if ($form['#op_fields'] == 'comentario_informacionfinanciera') { if ($mes_inicio <= ($mes_final + 1)) { $title[] = '' . t('La unidad de medida se considera acumulativa:') . ''; $column[] = array('data' => drupal_render($form['es_acumulativo'])); $columns[] = $column; $output .= theme('table', $title, $columns) . '
'; } $output .= '
' . t('Indicadores Financieros (por Acciones Específicas) del Proyecto') . '' . '
' . t('Mes de Seguimiento Actual:') . ' ' . $meses[$form['#mes']] . '
' . theme('table', $header, $rows) ; $output .= '
Nota: Para modificar los valores de \'Comprometido\', \'Causado\' y \'Pagado\' debe ingresar por el Seguimiento de cada Acción Específica.
'; $output .= drupal_render($form['comentario_informacionfinanciera']); $output .= '
'; } //beneficiarios $muestra_beneficiarios = variable_get('proyectos_operativos_muestra_beneficiario', TRUE); $muestra = false; if ($muestra_beneficiarios && isset($form['comentario_metafisica'])) { $header3 = array(); $header3[] = array('data' => t('Beneficiario')); $rows3 = array(); foreach($node->field_proyecto_beneficiario as $id => $beneficiarios) { if (isset($form['tipobeneficiario_'.$id])) { $row3 = array(); $row3[] = array('data' => $beneficiarios['value'],); $row3[] = array('data' => drupal_render($form['tipobeneficiario_'.$id]),); $rows3[] = $row3; $muestra = true; } } } if ($muestra_beneficiarios && $muestra || $form['#op_fields'] == 'full') { $header3[] = array('data' => t('Cantidad de Beneficiarios durante el mes de ') . $meses[$form['#mes']]); $output .= '
' . t('Beneficiarios del Proyecto (Durante la Ejecución)') . '' . '
' . theme('table', $header3, $rows3) ; $output .= '
'; } $output .= _mostrarleyendazonacritica(); $output .= '
'; $output .= drupal_render($form); return $output; } /* * validacion del formulario * Implementation of seguimiento_proyecto_datospormes_modificar_form_validate() */ function seguimiento_proyecto_datospormes_modificar_form_validate($form, &$form_state) { $proyectos_operativos_path = drupal_get_path('module', 'proyectos_operativos'); drupal_add_js($proyectos_operativos_path . '/js/proyectos_operativos_extra.js'); $modulo_seguimiento_proyecto_y_aes_path = drupal_get_path('module', 'accion_especifica_de_proyecto_seguimiento'); drupal_add_js($modulo_seguimiento_proyecto_y_aes_path . '/js/seg_proyecto_validaciones_original.js'); drupal_add_js($form['#format_number'], 'setting'); //valores positivos meta física if (isset($form_state['values']['cantidad_metafisica_ejecutado'])) { if ($form_state['values']['cantidad_metafisica_ejecutado'] < 0) { form_set_error('cantidad_metafisica_ejecutado', t('El valor \'Ejecutado\' en la meta física debe ser mayor o igual a cero.')); } } //valores positivos cantidad de beneficiarios durante el mes if (variable_get('proyectos_operativos_muestra_beneficiario', TRUE) && isset($form['comentario_metafisica'])) { if (isset($form['#node']->field_proyecto_beneficiario)) { foreach($form['#node']->field_proyecto_beneficiario as $id => $beneficiarios) { if ($form_state['values']['tipobeneficiario_'.$id] < 0) { form_set_error('tipobeneficiario_'.$id, t('La cantidad de beneficiarios debe ser mayor o igual a cero.')); } } } } } /* * procesamiento del formulario * Implementation of seguimiento_proyecto_datospormes_modificar_form_submit() */ function seguimiento_proyecto_datospormes_modificar_form_submit($form, &$form_state) { global $user; $consultaseguimientoactual = _seguimiento_mesactual_proyecto_load($form['#node'], $form['#mes']); $es_acumulativo = isset($form_state['values']['es_acumulativo']) ? $form_state['values']['es_acumulativo'] : $form['#node']->es_acumulativo; if (isset($consultaseguimientoactual['segmes']['id_seg'])) { //actualizar if ($form['#op_fields'] == 'comentario_metafisica' || $form['#op_fields'] == 'full' && isset($form_state['values']['cantidad_metafisica_ejecutado'])) { $ss1=check_plain($form_state['values']['comentario_metafisica']); $exe_query = db_query("UPDATE {seguimiento_proyecto} SET ejecutadometafisica = %d, infocomplementaria_metafisica = '%s' WHERE id_seg = %d", $form_state['values']['cantidad_metafisica_ejecutado'], $ss1, $consultaseguimientoactual['segmes']['id_seg']); } if($form['#op_fields'] == 'comentario_informacionfinanciera' || $form['#op_fields'] == 'full' && isset($form_state['values']['comentario_informacionfinanciera'])) { $sss=check_plain($form_state['values']['comentario_informacionfinanciera']); $exe_query = db_query("UPDATE {seguimiento_proyecto} SET infocomplementaria_metafinanciera = '%s' WHERE id_seg = %d", $sss, $consultaseguimientoactual['segmes']['id_seg']); } $id_seg = $consultaseguimientoactual['segmes']['id_seg']; $exe_query = db_query("UPDATE {seguimiento_proyecto} SET acumulativo = %d WHERE nid = %d", $es_acumulativo, $form['#node']->nid); } else{ //insertar if (isset($form_state['values']['cantidad_metafisica_ejecutado'])) { $exe_query = db_query("INSERT INTO {seguimiento_proyecto} (nid, mes, ejecutadometafisica, infocomplementaria_metafisica, fecha, estado, uid, acumulativo) VALUES (%d, %d, %d, '%s', %d, %d, %d, %d)", $form['#node']->nid, $form['#mes'], $form_state['values']['cantidad_metafisica_ejecutado'], check_plain($form_state['values']['comentario_metafisica']), time(), $form['#state_creation'], $user->uid, $es_acumulativo); } else { $exe_query = db_query("INSERT INTO {seguimiento_proyecto} (nid, mes, infocomplementaria_metafinanciera, fecha, estado, uid, acumulativo) VALUES (%d, %d, '%s', '%s', '%s', %d, %d)", $form['#node']->nid, $form['#mes'], check_plain($form_state['values']['comentario_informacionfinanciera']), time(), $form['#state_creation'], $user->uid, $es_acumulativo); } $id_seg = db_last_insert_id('seguimiento_proyecto', 'id_seg'); //construir transicion (creacion) -> ingresado if (module_exists('workflow')) { $wid = workflow_get_workflow_for_type('proyectos_operativos'); if ($wid) { $estadoInicialFlujo = _workflow_creation_state($wid); if($estadoInicialFlujo==$form['#state_creation']){ //Siguiente estado $transitions = workflow_allowable_transitions($estadoInicialFlujo); unset($transitions[$estadoInicialFlujo]); db_query("INSERT INTO {seguimiento_proyecto_transiciones_estados} (estado, estado_ant, comentario, date, id_seg, uid) VALUES (%d, %d, '%s', %d, %d, %d)", key($transitions), $estadoInicialFlujo, 'Creación del Seguimiento', time(), $id_seg, $user->uid); $ultima_id_transicion_seg = db_query("SELECT max(a.id_seg_transicion_estado) AS id FROM {seguimiento_proyecto_transiciones_estados} AS a WHERE a.id_seg = %d", $id_seg); $seg_transicion_estado = db_fetch_object($ultima_id_transicion_seg); db_query('UPDATE {seguimiento_proyecto} SET estado = %d, id_seg_transicion_estado = %d WHERE id_seg = %d', key($transitions), $seg_transicion_estado->id, $id_seg); } } } } if (variable_get('proyectos_operativos_muestra_beneficiario', TRUE) && isset($form['comentario_metafisica'])) { if (isset($form['#node']->field_proyecto_beneficiario)) { foreach($form['#node']->field_proyecto_beneficiario as $id => $beneficiarios) { $actualizada=0; foreach($consultaseguimientoactual['seguimientos_beneficiarios'] as $seg_benef){ if($id == $seg_benef['posicion_beneficiario']){ //actualizar $exe_query = db_query("UPDATE {seguimiento_proyecto_beneficiarios} SET cant_beneficiarios_mes = %d WHERE id_seg_beneficiario = %d", $form_state['values']['tipobeneficiario_'.$id], $seg_benef['id_seg_beneficiario']); $actualizada=1; } } if($actualizada==0){//revisar //insertar $exe_query = db_query("INSERT INTO {seguimiento_proyecto_beneficiarios} (id_seg, posicion_beneficiario, cant_beneficiarios_mes) VALUES (%d, %d, %d)", $id_seg, $id, $form_state['values']['tipobeneficiario_'.$id]); } } } } if ($exe_query == true) { $meses = json_decode(MESES); $mes =$form['#mes']; drupal_set_message(t('Se ha guardado el seguimiento del mes de ').strval($meses[$mes]).' para el proyecto operativo.'); } if (!$_REQUEST['destination']) { $form_state['redirect'] = 'proyectosop/' . $form['#node']->nid . '/seguimiento/proyecto'; } }