]> git.llucax.com Git - mecon/yatta.git/blob - test/casos/caso_3_protocolizacion/clase.php
Preparo todo para armar la rama estable.
[mecon/yatta.git] / test / casos / caso_3_protocolizacion / clase.php
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);
5
6 //{{{Require Once
7 require_once 'DB.php';
8 require_once 'Date.php';
9 //{{{YATTA
10 require_once 'YATTA/Proceso.php';
11 //}}}
12 //{{{MECON
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';
18 //}}}
19 //}}}
20
21 //{{{Funcion create_process
22 function create_process() {
23     return new Caso_03_Protocolizacion;
24 }
25 //}}}
26
27 //Clase Caso_03_Protocolizacion
28 class Caso_03_Protocolizacion extends YATTA_Proceso {
29
30     /**
31      * Conexion a la base de datos.
32      */
33     var $_db = null;
34     
35     /**
36      * Obtengo los firmantes que hay en la base.
37      */
38     function _obtenerFirmantes($param) {
39         $sql =  "
40             SELECT DISTINCT id_firmante AS id_firmante
41             FROM ". $param['base'] .".firmante
42             ORDER BY id_firmante
43             ";
44         $res = $this->_db->query($sql);    
45         
46         if (PEAR::isError($res)) {
47             $this->error = $res->getMessage();
48             print '<PRE>';var_dump($res);print '</PRE>';
49             return;
50         }
51         
52         while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
53             $result[] = $re['id_firmante'];
54         }
55
56         return $result;
57     }
58    
59     /**
60      * Obtengo el pdf del firmante pasado por parametro
61      */
62     function _obtenerPdfFirmante($param, $id_firmante) {
63         //CONSULTAS
64         $base = $param['base'];
65         $anio = $param['anio'];
66         $sql_normas = '
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';
80
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
86             AS 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; 
94
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;
106
107         //Obtengo los datos del firmante
108
109         $dbh = $this->_db->prepare($sql_firmante_activo);
110         $res = $this->_db->execute($dbh);
111
112         if ($res->numRows()) {
113             $t_firmante =& new MECON_HTML_TablaDB ();
114             while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
115                 $firmante = $re;
116             }    
117             $res->free();
118         }
119         else {
120             $dbh = $this->_db->prepare($sql_firmante_inactivo);
121             $res = $this->_db->execute($dbh);    
122             while ($re = $res->fetchrow(DB_FETCHMODE_ASSOC)) {
123                 $firmante = $re;
124             }    
125             $res->free();
126         }
127
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');
134
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']));
141
142             $t_normas->addRow(array (
143                         $n_norma,
144                         $fecha->format("%d/%m/%Y"),
145                         $re['n_norma2'],
146                         $re['depende2'],
147                         $re['n_norma3'],
148                         $re['depende3'],
149                         $re['proesgral'],
150                         $expediente,
151                         $tema,
152                         $destino,
153                         $re['interinato']
154                         ));
155         }
156         $res->free();
157
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"');
169
170         //Genero el PDF
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);
184         return $PDF_MARCO;
185     }
186     
187     /**
188      * Ejecución del script.
189      */
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();
197             return;
198         }
199         
200         //Obtengo cada uno de los expedientes
201         foreach ($this->_obtenerFirmantes($param) as $firmante) {
202             $pdfs[] =& $this->_obtenerPdfFirmante($param, $firmante);
203         }
204
205         //Genero los archivos con los PDF's.
206         $i = 0;
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());
211             $i++;
212             break;
213         }
214
215         //Comprimo los archivos.
216         system ('find /tmp/. -name "PROTOCOLIZACION_*.pdf" -print | zip '.
217                 '/tmp/PROTOCOLIZACION_'.$base.' -@');
218         system ('rm /tmp/PROTOCOLIZACION_*.pdf -f');
219
220         $this->error = null;
221         $this->archivo = '/tmp/PROTOCOLIZACION_'.$base.'.zip';
222         $this->notificar = 1;
223     }
224 }
225
226 ?>