Manual Cod Quipux
Manual Cod Quipux
Manual Cod Quipux
QUIPUX-COMUNIDAD
Versión 4
SISTEMA QUIPUX
Secretaría de la Administración
Pública
2014-2015
1. INTRODUCCIÓN
Quipux está desarrollado con lenguaje de programación PHP, la mayoría de la parte funcional de
documentos está desarrollado con programación Orientada a Objetos la cual nos ha permitido
reutilizar el código en gran parte del sistema. Además utilizamos HTML, JAVASCRIPT, AJAX y
JSON.
El esquema de desarrollo está implementado de la siguiente manera:
CARPETAS DESCRIPCIÓN
├── Administracion Administración del Sistema
│ ├── archivos Código de archivos adjuntos al sistema
│ ├── catalogos --
│ ├── ciudadanos Creación, combinación de ciudadanos
│ ├── ciudadanos_solicitud
│ ├── corregir_datos_usuarios Solicitudes de firma electrónica
│ ├── dependencias --
│ ├── instituciones_adscritas Creación de áreas o dependencias de Institución
│ ├── listas Creción de listas
│ ├── mensajes_alerta --
│ ├── migrar_bodega --
│ ├── notificaciones --
│ ├── subrogacion Subrogación
│ ├── tbasicas serialización de numeración de documentos
│ ├── usuarios usuarios, activación, llamada a servicio web
│ ├── usuarios_dependencias asignación de usuarios y ciudadanos
├── adodb módulo de conexión de Base de datos
├── anexos vínculo de anexos a los documentos.
├── archivo administración de archivos
├── asociar_documentos asociar documentos a carpetas
├── backup --
├── BDD --
├── bodega Bodega temporal de documentos
├── busqueda Búsqueda con código like (desahabilitada actualmente)
├── busquedaN Búsqueda exacta (habilitada actualmente)
├── cron Cron que ejecuta Quipux
├── envios --
Css del Software
├── estilos íconos
├── iconos imágenes
├── imagenes img
├── img La carpeta include tenemos 1 carpeta principal:
├── include query: en donde encontramos
│ ├── barcode Administracion: encontramos los select de las
│ ├── class instituciones.
│ ├── db
│ ├── js
│ ├── local
│ ├── query
│ │ ├── administracion
│ │ ├── tx
│ │ └── uploadFile
│ ├── tx
│ └── upload
├── interconexion Encontramos los servicios web configurados para la
├── interconexion_sistema creación de documentos.
├── js
├── menu librerias javascript utilizadas en el sistema
menu, menús, bandejas
├── metadatos
código de metadatos hoy en día llamado etiquetas.
├── plantillas plantillas de documentos
├── radicacion una de las carpetas más importantes del sistema, donde
se maneja todas las transacionalidades de la
├── recursivas documentación.
├── reportes utilizada para dependendias manejando recursividad
├── reportes_new --
├── seguridad Reporte del sistema
├── tareas Nivel de seguridad para documentos
├── tipo_documental tareas relacionadas con documentos
├── tx Tx, funcionalidades principales de transacciones
├── updates
├── uploadFiles
Código Descripción
$version_light=false; Versión a desplegar
$config_numero_meses = 6; Configuración de fechas
$numeroCaracteresTexto = 0; Mínimo de número de caracteres para buscar
$config_bloquear_acceso_ciudadano = false; Bloqueo a ciudadanos al sistema
/var/www/html/quipux/session_orfeo.php
Permite el manejo de sesiones, expiración de la sesion y permisos, Si bien es cierto el manejo de las
sesiones tenemos configurado en apache en php.ini (15 minutos), también debemos controlar para
que el sistema caduque la sesion y se deslogue el usuario a continuación vemos el siguiente código
que permite ejecutar lo antes descrito.
Conexion a Postgres
include_once ("$ruta_raiz/include/db/ConnectionHandler.php");
include_once ("$ruta_raiz/config.php");
include_once ("$ruta_raiz/config_replicacion.php"); Replicación de la base de datos, configurado en el
error_reporting(7); config.php
Código Descripción
$query = "select p.nombre, count(pc.id_permiso) as permiso Consulta a la tabla permiso y permiso_usuario,
from permiso p left outer join permiso_usuario pc on obteniendo antes el codigo de usuario.
p.id_permiso=pc.id_permiso
and pc.usua_codi=$usua_codi group by p.nombre";
$rs = $db->query($query);
FRAME CABECERA
(Usuarios) f_top.php
FRAME MENU FRAME CUERPO
(Menu)correspondencia.ph (Contenido de Bandejas)
p cuerpo.php
El siguiente archivo nos permite administrar los menús a desplegar para los usuarios, dependiendo
del perfil, se desplegará cada item.
En esta carpeta se encuentra los menús de bandejas a desplegar:
quipux/menu/
La función crear_item_bandeja(posicion,leyenda, leyenda alterna,link) se encuentra en
quipux/menu/correspondencia.php
Por cada item generamos una fila y armamos el html, al final hacemos un return de la variable tr.
<?php
TIPO USUARIO =2 CIUDADANO TIENEN LOS PRIVILEGIOS
if ($_SESSION["tipo_usuario"]==2) {
if ($_SESSION["inst_codi"] == 1) {
include "$ruta_raiz/menu/nuevo_salida.php";
include "$ruta_raiz/menu/ciudadano_firma.php";
} else {
include "$ruta_raiz/menu/ciudadano.php";
}
} else {
if ($_SESSION["depe_codi"]!=0) { // Si no tiene un área no puede
realizar ninguna accion porque genera errores de secuencias. INCLUDES de los PHP que generan menús
include "$ruta_raiz/menu/nuevo_salida.php";
include "$ruta_raiz/menu/bandeja.php";
include "$ruta_raiz/menu/radicacion.php";
}
include "$ruta_raiz/menu/menuPrimero.php";
}
?>
</table>
<br>
<div id="div_estadisticas_menu" style="width: 160px;"></div>
$vector["usua_firma_path"] =$rs-
>fields["USUA_FIRMA_PATH"];
$vector["tipo_certificado"] =$rs-
>fields["USUA_TIPO_CERTIFICADO"];
$vector["cargo_tipo"] =$rs->fields["CARGO_TIPO"];
Código Descripción
function ObtenerDatosRadicado($radicado,$db) Obtener los datos de acuerdo al número de radicado
{//Obtiene datos del radicado en función del texto
if (trim($radicado)=="") return array();
$db->conn-
>SetFetchMode(ADODB_FETCH_ASSOC);
$isqlTEXT = "select r.*, e.esta_desc, tr.trad_descr,
radi_fech_asig::date - CURRENT_DATE as
num_dias
from radicado r left outer join estado e on
r.esta_codi=e.esta_codi
left outer join tiporad tr on r.radi_tipo =
tr.trad_codigo
where
r.RADI_NUME_RADI=".trim($radicado);
$rs=$db->query($isqlTEXT);
$vector["radi_nume_radi"] = $rs-
>fields["RADI_NUME_RADI"];
$vector["radi_nume_temp"] = $rs-
>fields["RADI_NUME_TEMP"];
....codigo de los campos de la tabla radicado
return $vector;
6. NUMERACIÓN DE DOCUMENTOS
2014000000000000001
2014 000000 000000001
año dígitos 0 9 dígitos secuenciales
Generación de Documentos
En la generación de documentos tenemos el archivo
quipux/radicacion/NEW.php en donde se grafica la interfaz de la página.
Código Descripción
<form action="funciones_NEW.php?<?=$var_envio?>" ENCTYPE="multipart/form-data" method="post" Acción que registra
name="formulario" id="formulario"> <!--onChange="document.formulario.fl_modificar1.value=1;"--> la metadata del
documento
Código Descripción
function validar_html($html) Función que permite eliminar html en el cuerpo
{
$html = preg_replace(':<input (.*?)type=["\']?(hidden|submit|button| del documento.
image|reset|file)["\']?.*?>:i', '', $html);
$html = preg_replace(':<style.*?>.*?</style>:is', '', $html);
$html = preg_replace(':<img.*?/>:is', '', $html);
$html = preg_replace(':<!--.*?-->:is', '', $html);
$html = preg_replace(':<p .*?>:is', '', $html); //aumentado por SC
para evitar que se dañen las viñetas al pegar desde OOo
$html = preg_replace(':<col .*?>:is', '', $html); //aumentado por SC
para evitar que se dañen las tablas al pegar desde OOo
$html = str_replace("</p>", "<br />", $html);
$origen = array("á","é","í","ó","ú","ñ","Á","É","Í","Ó","Ú","Ñ");
$destino =
array("á","é","í","ó","ú","ñ
;","Á","É","Í","Ó","Ú","Ñ
");
$html = str_replace($origen, $destino, $html);
return $html;
}
Código Descripción
newRadicado($tpRad, $Dependencia, &$noRadText) Función
$newRadicado = date("Y") . str_pad($Dependencia,6,"0", Cadena de texto para recuperar el número de
STR_PAD_LEFT) . str_pad($secNew,9,"0", STR_PAD_LEFT) .
$tpRad; documento correspondiente
describimos a continuación.
Para ejecutar una acción, es necesario seleccionar uno o varios documentos:
Código Descripción
<td valign="bottom" id="btn_noeliminar" style='display:none'> A parte del html que grafica el boton y la imagen que despliega,
<a href="javascript:void(0);" tenemos la función changedepesel(codigoEjecutar), esta permite
onMouseOut="MM_swapImgRestore()" ejecutar la acción enviada.
onClick="seleccionBarra = 6;changedepesel(6);"
onMouseOver="MM_swapImage('Image3','','<?
=$ruta_raiz?>/imagenes/internas/overNoEliminar.gif',1)"
title="Shift+Ctrl+R">
<img src="<?=$ruta_raiz?
>/imagenes/internas/noEliminar.gif" name="Image3" border="0"
alt="Restaurar"></a>
</td>
Código Descripción
$chk_firma = $_POST['chk_firma']; Recibimos por Post, de las cajas de texto
$codTx = $_POST['codTx']; hidden
$observa = $_POST['observa'];
$fechaAgenda= $_POST['fechaAgenda'];
$checkValue = $_POST['checkValue'];
$fecha_doc = $_POST['fecha_doc'];
Luego
Dependiendo del código enviado por la función changedepesel(codigoEjecutar), tenemos el siguiente script
switch ($codTx) Se compone por un switch
{
case 2: //Eliminar Documentos
$nombTx = "Eliminar Documentos ";
$usCodDestino = $tx->eliminarDocumento( $radicadosSel,
$_SESSION["usua_codi"], $observa);
if($usCodDestino!='')
$MensajeTx="El/Los documento(s) están en la
bandeja "Eliminados".";
else
echo "<br/><span><font color='Navy'>No se pudo realizar
esta acción. Solo los documentos en estado de
Elaboración pueden ser eliminados.</b></font></span><br/>";
break;
case 6: //Sacar de eliminados
....sigue código
quipux/cuerpo_paginador.php
Código Descripción
$txt_fecha_desde = trim(limpiar_sql($_GET['txt_fecha_desde'])); Recibimos lo que enviamos en la función
$txt_fecha_hasta = trim(limpiar_sql($_GET["txt_fecha_hasta"])); anterior
$estado = 0+$_GET["estado"];
$busqRadicados = trim(limpiar_sql($_GET["busqRadicados"]));
include "$ruta_raiz/include/query/queryCuerpo.php"; En este archivo está el query a ejecutar la
consulta.
echo "<br>";
$pager = new ADODB_Pager($db,$isql,'adodb', true,$orderNo, tenemos el componente
$orderTipo,true);
$pager->checkAll = false; algunas variables que dejamos por defecto
$pager->checkTitulo = true;
$pager->toRefLinks = $linkPagina;
$pager->toRefVars = $encabezado;
$pager->descCarpetasGen=$descCarpetasGen;
$pager->descCarpetasPer=$descCarpetasPer;
$pager->Render($rows_per_page=20,$linkPagina, Número de registros por página
$checkbox=chkAnulados);
Código Descripción
$record["indi_codi"] = $repos_codi;
$record["esta_codi"] = $repos_estado;
$record["tamanio"] =
"pg_table_size(nombre_tabla)::numeric"; sería para un UPDATE
$ok = $dba->conn->Replace("indice", $record, Replace("indice", $record, "indi_codi", false, false, true,
"indi_codi", false, false, true, false); false);
indice: es la tabla a insertar o modificar
$record: es el array que contiene los datos y campos a
insertar o modificar.
UPDATE
indi_codi es el campo where si es un update a ejecutar
INSERT
indi_codi no va
sería para un INSERT
Replace("indice", $record, "", false, false, true, false);
los demás valores dejarlos por defecto, si necesitamos ver
el query que se ejecuta, el último parámetro ponerlo en
true
Código Descripción
foreach($radicados as $radi_nume)
{
//aquí ejecutamos las acciones que vamos a
realizar por cada documento seleccionado, claro
los documentos seleccionados deben tener la
misma acción para ejecutar.
}
Este archivo es el más importante en todo el sistema, es recomendable si se va a cambiar una de las
funciones copiar y renombrarla con otro nombre para no afectar al sistema.
Código Descripción
function ws_generar_pdf_base64($html, $plantilla, $servidor,
$estado="", $numDocu="", $fechDocu = "", $numPag = "",
$orientPag="V")
{
try
{
$wsdl = "$servidor/html_a_pdf.php?wsdl"; //consumo de servicio web, hacemos referencia al servidor donde se
encuentra publicado el servicio
if(!@file_get_contents($wsdl)) {
throw new SoapFault('Server', 'No WSDL found at ' . $wsdl);
return "0";
}
if (strtoupper(substr(trim($envioDatos),0,4)) == "SOAP" or
strlen($envioDatos)<1000) {
throw new SoapFault('Server', 'Error SOAP: ' . $envioDatos);
return "0";
}
return $envioDatos; lo que recibimos es el pdf
} catch (SoapFault $e) { //Captura los errores
// var_dump($e);
printf("No se generó correctamente el archivo PDFs.");
return "0";
}
}
Tal como tenemos la configuración del oficio, tenemos para todos los documentos, así
reemplazamos en php los valores del campo trad_formato.
Código Descripción
$this->documento_html = str_replace("**QUIPUX_DATOS_DOC_DESTINATARIO**", $this- Los campos entre **,
>datos_doc_destinatario, $this->documento_html); serán reemplazados por