1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -----------------------------------------------------------------------------*/
3 ini_set("memory_limit", "64M");
4 ini_set('max_execution_time', 0);
8 require_once 'Date.php';
10 require_once 'YATTA/Proceso.php';
13 require_once 'MECON/HTML/TablaDB.php';
14 require_once 'MECON/PDF/Marco.php';
15 require_once 'MECON/PDF/Tabla.php';
16 require_once 'MECON/PDF/Texto.php';
17 require_once 'MECON/PDF/Separador.php';
21 //{{{Funcion create_process
22 function create_process() {
23 return new Caso_03_Protocolizacion;
27 //Clase Caso_03_Protocolizacion
28 class Caso_03_Protocolizacion extends YATTA_Proceso {
31 * Conexion a la base de datos.
36 * Obtengo los firmantes que hay en la base.
38 function _obtenerFirmantes($param) {
40 SELECT DISTINCT id_firmante AS id_firmante
41 FROM ". $param['base'] .".firmante
44 $res = $this->_db->query($sql);
46 if (PEAR::isError($res)) {
47 $this->error = $res->getMessage();
48 print '<PRE>';var_dump($res);print '</PRE>';
52 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
53 $result[] = $re['id_firmante'];
60 * Obtengo el pdf del firmante pasado por parametro
62 function _obtenerPdfFirmante($param, $id_firmante) {
64 $base = $param['base'];
65 $anio = $param['anio'];
67 SELECT n.id_norma as id_norma, n.n_norma AS n_norma, n.bis AS bis,
68 n.fecha_norma AS fecha_norma, n.tema AS tema, n.proesgral AS proesgral,
69 n.expediente AS expediente, n.pasado_a_sge AS pasado_a_sge, n.reserva AS
70 reserva,n.id_firmante AS id_firmante, n.id_usuario_ult_modif AS
71 id_usuario_ult_modif, n.n_norma2 AS n_norma2, n.depende2 AS depende2,
72 n.n_norma3 AS n_norma3, n.depende3 AS depende3, n.id_destino as id_destino,
73 n.comentario AS comentario, n.interinato AS interinato, n.sale_por_exp AS
74 sale_por_exp, n.activo as activo, n.fecha_ult_modif AS fecha_ult_modif,
75 n.destino_nombre_breve AS destino_nombre_breve
76 FROM '. $base .'.norma AS n
77 WHERE n.activo = 1 AND n.id_firmante = '. $id_firmante .'
78 AND YEAR(n.fecha_norma) = '. $anio .'
79 ORDER BY YEAR(n.fecha_norma), n.n_norma, n.bis';
81 $sql_firmante_activo = '
82 SELECT DISTINCT f.id_firmante AS id_firmante, f.t_doc AS t_doc,
83 f.doc AS doc, f.cargo as cargo, IFNULL(w.nombre,ff.nombre) AS nombre,
84 f.decreto AS decreto, f.fecha AS fecha, IFNULL(w.codep, ff.id_dependencia)
85 as codep, f.fecha_alta AS fecha_alta, f.fecha_baja AS fecha_baja, f.activo
87 FROM '. $base .'.firmante AS f left join novedades.web003 AS w on
88 (f.doc = w.nrodoc) left join CODEP.Dependencias as d on ( w.codep =
89 d.codigo_actual), '. $base .'.firmante AS f2 left join '. $base .'.funcionario
90 AS ff on (f2.doc = ff.doc) left join CODEP.Dependencias as dd on (
91 ff.id_dependencia = dd.codigo_actual)
92 WHERE f.activo = 1 and f2.activo = 1 and f2.doc = f.doc
93 AND f.id_firmante = '.$id_firmante;
95 $sql_firmante_inactivo = '
96 SELECT DISTINCT f.id_firmante AS id_firmante, f.t_doc AS t_doc, f.doc AS
97 doc, f.cargo as cargo, IFNULL(w.nombre,ff.nombre) AS nombre, f.decreto AS
98 decreto, f.fecha AS fecha, IFNULL(w.codep, ff.id_dependencia) as codep,
99 f.fecha_alta AS fecha_alta, f.fecha_baja AS fecha_baja, f.activo AS activo
100 FROM '. $base .'.firmante AS f left join novedades.web003 AS w on (f.doc =
101 w.nrodoc) left join CODEP.Dependencias as d on ( w.codep = d.codigo_actual),
102 '. $base .'.firmante AS f2 left join '. $base .'.funcionario AS ff on (f2.doc =
103 ff.doc) left join CODEP.Dependencias as dd on ( ff.id_dependencia =
104 dd.codigo_actual) WHERE f.activo = 0 and f2.activo = 0 and f2.doc = f.doc
105 AND f.id_firmante = '. $id_firmante;
107 //Obtengo los datos del firmante
109 $dbh = $this->_db->prepare($sql_firmante_activo);
110 $res = $this->_db->execute($dbh);
112 if ($res->numRows()) {
113 $t_firmante =& new MECON_HTML_TablaDB ();
114 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
120 $dbh = $this->_db->prepare($sql_firmante_inactivo);
121 $res = $this->_db->execute($dbh);
122 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
128 //Obtengo las normas del firmante y las agrego a la tabla
129 $dbh = $this->_db->prepare($sql_normas);
130 $res = $this->_db->execute($dbh);
131 $t_normas =& new MECON_HTML_TablaDB ();
132 $t_normas->addRow(array('Res', 'Fecha', 'CNJ1', 'DEP1', 'CNJ2', 'DEP2',
133 'Proyecto', 'Expediente', 'Tema', 'Destino', 'Int.'), 'cabecera');
135 while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
136 $n_norma = ($re['bis']) ? $re['n_norma'].' Bis' : $re['n_norma'];
137 $fecha =& new Date ($re['fecha_norma']);
138 $expediente = ucwords(strtolower($re['expediente']));
139 $tema = ucwords(strtolower($re['tema']));
140 $destino = ucwords(strtolower($re['destino_nombre_breve']));
142 $t_normas->addRow(array (
144 $fecha->format("%d/%m/%Y"),
158 $t_normas->updateColAttributes(0, 'width=8% align="center"');
159 $t_normas->updateColAttributes(1, 'width=10% align="center"');
160 $t_normas->updateColAttributes(2, 'width=10% align="center"');
161 $t_normas->updateColAttributes(3, 'width=10% align="center"');
162 $t_normas->updateColAttributes(4, 'width=10% align="center"');
163 $t_normas->updateColAttributes(5, 'width=10% align="center"');
164 $t_normas->updateColAttributes(6, 'width=20% align="center"');
165 $t_normas->updateColAttributes(7, 'width=20% align="center"');
166 $t_normas->updateColAttributes(8, 'width=25% align="center"');
167 $t_normas->updateColAttributes(9,'width=25% align="center"');
168 $t_normas->updateColAttributes(10,'width=5% align="center"');
171 $PDF_MARCO =& new MECON_PDF_Marco ('legal', 'landscape');
172 $PDF_MARCO->seccion = 'Registro de Resoluciones / Disposiciones ME';
173 $PDF_MARCO->subseccion = 'Direccion General de Despacho y Mesa de Entradas';
174 $PDF_MARCO->titulo = $firmante['nombre'];
175 $PDF_MARCO->subtitulo = $firmante['cargo'];
176 $PDF_MARCO->fecha = 'Periodo: '.$param['anio'];
177 $PDF_MARCO->addContent(new MECON_PDF_Tabla ($t_normas, 'landscape'), false);
178 $PDF_TEXTO =& new MECON_PDF_Texto ('landscape');
179 $PDF_TEXTO->addContent('Director de Despacho');
180 $PDF_TEXTO->setEstilo(0, array ('font' => 'Helvetica-Bold', 'height' => 8,
181 'align' => 'right'));
182 $PDF_MARCO->addContent($PDF_TEXTO, true);
183 $PDF_MARCO->addContent(new MECON_PDF_Separador(9, true), false);
188 * Ejecución del script.
190 function run($param) {
191 $base = $param['base'] ;
192 //Creo la conexion a la base de datos.
193 $this->_db = DB::connect(
194 "mysql://intranet:intranet@intranet-db/". $base, "persistent=true");
195 if (PEAR::isError($this->_db)) {
196 $this->error = $this->_db->getMessage();
200 //Obtengo cada uno de los expedientes
201 foreach ($this->_obtenerFirmantes($param) as $firmante) {
202 $pdfs[] =& $this->_obtenerPdfFirmante($param, $firmante);
205 //Genero los archivos con los PDF's.
207 foreach ($pdfs as $pdf) {
208 //Aca deberia utilizar nombres aleatorios del sistema.
209 $fh = fopen ('/tmp/PROTOCOLIZACION_'.$i.'.pdf', 'w');
210 fwrite ($fh, $pdf->toPDF());
215 //Comprimo los archivos.
216 system ('find /tmp/. -name "PROTOCOLIZACION_*.pdf" -print | zip '.
217 '/tmp/PROTOCOLIZACION_'.$base.' -@');
218 system ('rm /tmp/PROTOCOLIZACION_*.pdf -f');
221 $this->archivo = '/tmp/PROTOCOLIZACION_'.$base.'.zip';
222 $this->notificar = 1;