Ejemplo n.º 1
0
 public function ejecutar(Etapa $etapa)
 {
     $regla = new Regla($this->extra->para);
     $to = $regla->getExpresionParaOutput($etapa->id);
     if (isset($this->extra->cc)) {
         $regla = new Regla($this->extra->cc);
         $cc = $regla->getExpresionParaOutput($etapa->id);
     }
     if (isset($this->extra->cco)) {
         $regla = new Regla($this->extra->cco);
         $bcc = $regla->getExpresionParaOutput($etapa->id);
     }
     $regla = new Regla($this->extra->tema);
     $subject = $regla->getExpresionParaOutput($etapa->id);
     $regla = new Regla($this->extra->contenido);
     $message = $regla->getExpresionParaOutput($etapa->id);
     $CI =& get_instance();
     $cuenta = $etapa->Tramite->Proceso->Cuenta;
     $CI->email->from($cuenta->nombre . '@' . $CI->config->item('main_domain'), $cuenta->nombre_largo);
     $CI->email->to($to);
     if (isset($cc)) {
         $CI->email->cc($cc);
     }
     if (isset($bcc)) {
         $CI->email->bcc($bcc);
     }
     $CI->email->subject($subject);
     $CI->email->message($message);
     $CI->email->send();
 }
Ejemplo n.º 2
0
 public function ejecutar(Etapa $etapa)
 {
     $r = new Regla($this->extra->url);
     $url = $r->getExpresionParaOutput($etapa->id);
     //Hacemos encoding a la url
     $url = preg_replace_callback('/([\\?&][^=]+=)([^&]+)/', function ($matches) {
         $key = $matches[1];
         $value = $matches[2];
         return $key . urlencode($value);
     }, $url);
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_TIMEOUT, 30);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     $result = curl_exec($ch);
     $json = json_decode($result);
     foreach ($json as $key => $value) {
         $dato = Doctrine::getTable('DatoSeguimiento')->findOneByNombreAndEtapaId($key, $etapa->id);
         if (!$dato) {
             $dato = new DatoSeguimiento();
         }
         $dato->nombre = $key;
         $dato->valor = $value;
         $dato->etapa_id = $etapa->id;
         $dato->save();
     }
 }
Ejemplo n.º 3
0
 protected function display($modo, $dato, $etapa_id)
 {
     if ($etapa_id) {
         $etapa = Doctrine::getTable('Etapa')->find($etapa_id);
         $regla = new Regla($this->etiqueta);
         $etiqueta = $regla->getExpresionParaOutput($etapa->id);
     } else {
         $etiqueta = $this->etiqueta;
     }
     $display = '<p>' . $etiqueta . '</p>';
     return $display;
 }
Ejemplo n.º 4
0
 protected function display($modo, $dato, $etapa_id)
 {
     if ($etapa_id) {
         $etapa = Doctrine::getTable('Etapa')->find($etapa_id);
         $regla = new Regla($this->etiqueta);
         $etiqueta = $regla->getExpresionParaOutput($etapa->id);
     } else {
         $etiqueta = $this->etiqueta;
     }
     $display = '<script type="text/javascript">try{' . $etiqueta . '}catch(err){alert(err)}</script>';
     return $display;
 }
Ejemplo n.º 5
0
 public function daily()
 {
     //Buscamos las etapas que estan por vencer, pendientes y que requieren ser notificadas
     $etapas = Doctrine_Query::create()->from('Etapa e, e.Tarea t')->where('e.pendiente = 1 AND t.vencimiento_notificar = 1')->execute();
     foreach ($etapas as $e) {
         $vencimiento = $e->vencimiento_at;
         if ($vencimiento != '') {
             $dias_por_vencer = ceil((strtotime($e->vencimiento_at) - time()) / 60 / 60 / 24);
             $dias_no_habiles = 0;
             if ($e->Tarea->vencimiento_habiles == 1) {
                 $dias_no_habiles = get_working_days_count(date('Y-m-d'), $e->vencimiento_at);
             }
             $regla = new Regla($e->Tarea->vencimiento_notificar_email);
             $email = $regla->getExpresionParaOutput($e->id);
             if ($dias_por_vencer > 0) {
                 $dias_por_vencer -= $dias_no_habiles;
             }
             if ($dias_por_vencer <= $e->Tarea->vencimiento_notificar_dias) {
                 echo 'Enviando correo de notificacion para etapa ' . $e->id . "\n";
                 $varurl = site_url('etapas/ejecutar/' . $e->id);
                 $varurl = str_replace("..", ".", $varurl);
                 $cuenta = $e->Tramite->Proceso->Cuenta;
                 $this->email->from($cuenta->nombre . '@' . $this->config->item('main_domain'), $cuenta->nombre_largo);
                 $this->email->to($email);
                 $this->email->subject('Etapa se encuentra ' . ($dias_por_vencer > 0 ? 'por vencer' : 'vencida'));
                 $this->email->message('<p>La etapa "' . $e->Tarea->nombre . '" del proceso "' . $e->Tramite->Proceso->nombre . '" se encuentra ' . ($dias_por_vencer > 0 ? 'a ' . $dias_por_vencer . (abs($dias_por_vencer) == 1 ? ' día ' : ' días ') . ($e->Tarea->vencimiento_habiles == 1 ? 'habiles ' : '') . 'por vencer' : 'vencida ' . ($dias_por_vencer < 0 ? 'hace ' . abs($dias_por_vencer) . (abs($dias_por_vencer) == 1 ? ' día ' : ' días ') : 'hoy')) . ' (' . date('d/m/Y', strtotime($e->vencimiento_at)) . ').' . "</p><br>" . '<p>Usuario asignado: ' . $e->Usuario->usuario . '</p>' . ($dias_por_vencer > 0 ? '<p>Para realizar la etapa, hacer click en el siguiente link: ' . $varurl . '</p>' : ''));
                 $this->email->send();
             }
         }
     }
     //Hacemos un respaldo de la base de datos
     //$this->load->database();
     //$backupName = $this->db->database . '_' . date("Ymd-His") . '.gz';
     //$command = 'mysqldump -h '.$this->db->hostname.' -u '.$this->db->username.' -p'.$this->db->password.' '.$this->db->database.' | gzip > '.$backupName;
     //system($command);
     //$this->load->library('s3wrapper');
     //$this->s3wrapper->putObject($this->s3wrapper->inputFile($backupName, false), 'senatics.gov.py', $backupName);
     //system('rm ' . $backupName);
     //Limpia los tramites que que llevan mas de 1 dia sin modificarse, sin avanzar de etapa y sin datos ingresados (En blanco).
     $tramites_en_blanco = Doctrine_Query::create()->from('Tramite t, t.Etapas e, e.Usuario u, e.DatosSeguimiento d')->where('t.updated_at < DATE_SUB(NOW(),INTERVAL 1 DAY) AND t.pendiente = 1')->groupBy('t.id')->having('COUNT(e.id) = 1 AND COUNT(d.id) = 0')->execute();
     $tramites_en_blanco->delete();
     //Limpia los tramites que han sido iniciados por usuarios no registrados, y que llevan mas de 1 dia sin modificarse, y sin avanzar de etapa.
     $tramites_en_primera_etapa = Doctrine_Query::create()->from('Tramite t, t.Etapas e, e.Usuario u')->where('t.updated_at < DATE_SUB(NOW(),INTERVAL 1 DAY) AND t.pendiente = 1')->groupBy('t.id')->having('COUNT(e.id) = 1')->execute();
     foreach ($tramites_en_primera_etapa as $t) {
         if ($t->Etapas[0]->Usuario->registrado == 0) {
             $t->delete();
         }
     }
     //Elimino los registros no registrados con mas de 1 dia de antiguedad y que no hayan iniciado etapas
     $noregistrados = Doctrine_Query::create()->from('Usuario u, u.Etapas e')->where('u.registrado = 0 AND DATEDIFF(NOW(),u.updated_at) >= 1')->groupBy('u.id')->having('COUNT(e.id) = 0')->execute();
     $noregistrados->delete();
 }
Ejemplo n.º 6
0
    protected function display($modo, $dato, $etapa_id) {
        if($etapa_id){
            $etapa=Doctrine::getTable('Etapa')->find($etapa_id);
            $regla=new Regla($this->valor_default);
            $valor_default=$regla->getExpresionParaOutput($etapa->id);
        }else{
            $valor_default=json_decode($this->valor_default);
        }

        $display = '<label class="control-label" for="'.$this->id.'">' . $this->etiqueta . (in_array('required', $this->validacion) ? '' : ' (Opcional)') . '</label>';
        $display.= '<div class="controls">';
        $display.='<select id="'.$this->id.'" class="select-semi-large" name="' . $this->nombre . '" ' . ($modo == 'visualizacion' ? 'readonly' : '') . ' data-modo="'.$modo.'">';
        $display.='<option value="">Seleccionar</option>';
        if($this->datos) foreach ($this->datos as $d) {
            if($dato){
                $display.='<option value="' . $d->valor . '" ' . ($dato && $d->valor == $dato->valor ? 'selected' : '') . '>' . $d->etiqueta . '</option>';
            }else{
                $display.='<option value="' . $d->valor . '" ' . ($d->valor == $valor_default ? 'selected' : '') . '>' . $d->etiqueta . '</option>';
            }
        }
        $display.='</select>';
        if($this->ayuda)
            $display.='<span class="help-block">'.$this->ayuda.'</span>';
        $display.='</div>';


        if($this->extra && $this->extra->ws){
            $display.='
            <script>
                $(document).ready(function(){
                    var defaultValue = "'.($dato && $dato->valor?$dato->valor:$this->valor_default).'";
                    console.log(defaultValue);
                    $.ajax({
                        url: "'.$this->extra->ws.'",
                        dataType: "jsonp",
                        jsonpCallback: "callback",
                        success: function(data){
                            var html="";
                            $(data).each(function(i,el){
                                html+="<option value=\""+el.valor+"\">"+el.etiqueta+"</option>";
                            });

                            $("#'.$this->id.'").append(html).val(defaultValue).change();
                        }
                    });
                });

            </script>';
        }

        return $display;
    }
Ejemplo n.º 7
0
    public function ejecutar(Etapa $etapa) {
        $regla=new Regla($this->extra->para);
        $to=$regla->getExpresionParaOutput($etapa->id);
        if(isset($this->extra->cc)){
            $regla=new Regla($this->extra->cc);
            $cc=$regla->getExpresionParaOutput($etapa->id);
        }
        if(isset($this->extra->cco)){
            $regla=new Regla($this->extra->cco);
            $bcc=$regla->getExpresionParaOutput($etapa->id);
        }
        $regla=new Regla($this->extra->tema);
        $subject=$regla->getExpresionParaOutput($etapa->id);
        $regla=new Regla($this->extra->contenido);
        $message=$regla->getExpresionParaOutput($etapa->id);
        
        $CI = & get_instance();
        $cuenta=$etapa->Tramite->Proceso->Cuenta;
        $CI->email->from($cuenta->nombre.'@'.$CI->config->item('main_domain'), $cuenta->nombre_largo);
        $CI->email->to($to);
        if(isset($cc))$CI->email->cc($cc);
        if(isset($bcc))$CI->email->bcc($bcc);

        if(isset($this->extra->adjunto)){
            $attachments = explode(",",trim($this->extra->adjunto));
            foreach ($attachments as $a) {
                $regla=new Regla($a);
                $filename=$regla->getExpresionParaOutput($etapa->id);
                $file=Doctrine_Query::create()
                    ->from('File f, f.Tramite t')
                    ->where('f.filename = ? AND t.id = ?',array($filename,$etapa->Tramite->id))
                    ->fetchOne();
                if($file){
                    $folder = $file->tipo=='dato' ? 'datos' : 'documentos';
                    if(file_exists('uploads/'.$folder.'/'.$filename)){
                        $CI->email->attach('uploads/'.$folder.'/'.$filename);
                    }
                }
            }
        }

        $CI->email->subject($subject);
        $CI->email->message($message);
        $CI->email->send();
    }
Ejemplo n.º 8
0
 protected function display($modo, $dato, $etapa_id)
 {
     if ($etapa_id) {
         $etapa = Doctrine::getTable('Etapa')->find($etapa_id);
         $regla = new Regla($this->valor_default);
         $valor_default = $regla->getExpresionParaOutput($etapa->id);
     } else {
         $valor_default = $this->valor_default;
     }
     $display = '<label class="control-label" for="' . $this->id . '">' . $this->etiqueta . (!in_array('required', $this->validacion) ? ' (Opcional)' : '') . '</label>';
     $display .= '<div class="controls">';
     $display .= '<textarea id="' . $this->id . '" rows="5" class="input-xxlarge" ' . ($modo == 'visualizacion' ? 'readonly' : '') . ' name="' . $this->nombre . '">' . ($dato ? htmlspecialchars($dato->valor) : htmlspecialchars($valor_default)) . '</textarea>';
     if ($this->ayuda) {
         $display .= '<span class="help-block">' . $this->ayuda . '</span>';
     }
     $display .= '</div>';
     return $display;
 }
Ejemplo n.º 9
0
 protected function display($modo, $dato, $etapa_id)
 {
     if ($etapa_id) {
         $etapa = Doctrine::getTable('Etapa')->find($etapa_id);
         $regla = new Regla($this->valor_default);
         $valor_default = $regla->getExpresionParaOutput($etapa->id);
     } else {
         $valor_default = $this->valor_default;
     }
     $display = '<label class="control-label" for="' . $this->id . '">' . $this->etiqueta . (!in_array('required', $this->validacion) ? ' (Opcional)' : '') . '</label>';
     $display .= '<div class="controls">';
     $display .= '<input id="' . $this->id . '" class="datepicker" ' . ($modo == 'visualizacion' ? 'readonly' : '') . ' type="text" name="' . $this->nombre . '" value="' . ($dato && $dato->valor ? date('d-m-Y', strtotime($dato->valor)) : ($valor_default ? date('d-m-Y', strtotime($valor_default)) : $valor_default)) . '" placeholder="dd-mm-aaaa" />';
     if ($this->ayuda) {
         $display .= '<span class="help-block">' . $this->ayuda . '</span>';
     }
     $display .= '</div>';
     return $display;
 }
Ejemplo n.º 10
0
 public function daily()
 {
     //Buscamos las etapas que estan por vencer, pendientes y que requieren ser notificadas
     $etapas = Doctrine_Query::create()->from('Etapa e, e.Tarea t')->where('e.pendiente = 1 AND t.vencimiento_notificar = 1')->andWhere('DATEDIFF(e.vencimiento_at,NOW()) <= t.vencimiento_notificar_dias')->execute();
     foreach ($etapas as $e) {
         $dias_por_vencer = ceil((strtotime($e->vencimiento_at) - time()) / 60 / 60 / 24);
         $regla = new Regla($e->Tarea->vencimiento_notificar_email);
         $email = $regla->getExpresionParaOutput($e->id);
         echo 'Enviando correo de notificacion para etapa ' . $e->id . "\n";
         $this->email->from('*****@*****.**', 'Simple');
         $this->email->to($email);
         $this->email->subject('Simple - Etapa se encuentra por vencer');
         $this->email->message('La etapa "' . $e->Tarea->nombre . '" se encuentra ' . ($dias_por_vencer > 0 ? 'a ' . $dias_por_vencer . ' días por vencer' : 'vencida') . '.' . "\n\n" . 'Usuario asignado: ' . $e->Usuario->usuario);
         $this->email->send();
     }
     //Limpia los tramites que que llevan mas de 1 dia sin modificarse, sin avanzar de etapa y sin datos ingresados (En blanco).
     $tramites_en_blanco = Doctrine_Query::create()->from('Tramite t, t.Etapas e, e.Usuario u, e.DatosSeguimiento d')->where('t.updated_at < DATE_SUB(NOW(),INTERVAL 1 DAY) AND t.pendiente = 1')->groupBy('t.id')->having('COUNT(e.id) = 1 AND COUNT(d.id) = 0')->execute();
     $tramites_en_blanco->delete();
     //Elimino los registros no registrados con mas de 1 dia de antiguedad y que no hayan iniciado etapas
     $noregistrados = Doctrine_Query::create()->from('Usuario u, u.Etapas e')->where('u.registrado = 0 AND DATEDIFF(NOW(),u.updated_at) >= 1')->groupBy('u.id')->having('COUNT(e.id) = 0')->execute();
     $noregistrados->delete();
 }
Ejemplo n.º 11
0
 public function getPrevisualizacion()
 {
     if (!$this->Tarea->previsualizacion) {
         return '';
     }
     $r = new Regla($this->Tarea->previsualizacion);
     return $r->getExpresionParaOutput($this->id);
 }
Ejemplo n.º 12
0
    private function render($identifier, $key, $etapa_id=null ,$filename = false, $copia = false) {


        $uploadDirectory = 'uploads/documentos/';

        $CI = &get_instance();

        if ($this->tipo == 'certificado') {
            $CI->load->library('certificadopdf');
            $obj = new $CI->certificadopdf($this->tamano);
            
            $contenido=$this->contenido;
            $titulo=$this->titulo;
            $subtitulo=$this->subtitulo;
            $firmador_nombre = $this->firmador_nombre;
            $firmador_cargo = $this->firmador_cargo;
            $firmador_servicio = $this->firmador_servicio;
            if($etapa_id){
                $regla = new Regla($contenido);
                $contenido = $regla->getExpresionParaOutput($etapa_id,true);  
                $regla = new Regla($titulo);
                $titulo = $regla->getExpresionParaOutput($etapa_id);
                $regla = new Regla($subtitulo);
                $subtitulo = $regla->getExpresionParaOutput($etapa_id);
                $regla = new Regla($firmador_nombre);
                $firmador_nombre = $regla->getExpresionParaOutput($etapa_id); 
                $regla = new Regla($firmador_cargo);
                $firmador_cargo = $regla->getExpresionParaOutput($etapa_id); 
                $regla = new Regla($firmador_servicio);
                $firmador_servicio = $regla->getExpresionParaOutput($etapa_id); 
            }

            $obj->content = $contenido;
            $obj->id = $identifier;
            $obj->key = $key;
            $obj->servicio = $this->servicio;
            $obj->servicio_url = $this->servicio_url;
            if ($this->logo)
                $obj->logo = 'uploads/logos_certificados/' . $this->logo;
            $obj->titulo = $titulo;
            $obj->subtitulo = $subtitulo;
            $obj->validez = $this->validez;
            $obj->validez_habiles = $this->validez_habiles;
            if ($this->timbre)
                $obj->timbre = 'uploads/timbres/' . $this->timbre;
            $obj->firmador_nombre = $firmador_nombre;
            $obj->firmado_cargo = $firmador_cargo;
            $obj->firmador_servicio = $firmador_servicio;
            if ($this->firmador_imagen)
                $obj->firmador_imagen = 'uploads/firmas/' . $this->firmador_imagen;
            $obj->firma_electronica = $this->hsm_configuracion_id ? true : false;
            $obj->copia = $copia;
        }else {
            $CI->load->library('blancopdf');
            $obj = new $CI->blancopdf($this->tamano);
            
            $contenido=$this->contenido;
            if($etapa_id){
                $regla = new Regla($contenido);
                $contenido = $regla->getExpresionParaOutput($etapa_id,true);  
            }
            
            $obj->content = $contenido;
        }

        if ($filename) {
            $obj->Output($uploadDirectory . $filename, 'F');
            if (!$copia && $this->hsm_configuracion_id) {
                $client = new SoapClient($CI->config->item('hsm_url'));

                $result = $client->IntercambiaDoc(array(
                    'Encabezado' => array(
                        'User' => $CI->config->item('hsm_user'),
                        'Password' => $CI->config->item('hsm_password'),
                        'TipoIntercambio' => 'pdf',
                        'NombreConfiguracion' => $this->HsmConfiguracion->nombre,
                        'FormatoDocumento' => 'b64'
                    ),
                    'Parametro' => array(
                        'Documento' => base64_encode(file_get_contents($uploadDirectory . $filename)),
                        'NombreDocumento' => $filename
                    )
                ));

                file_put_contents($uploadDirectory . $filename, base64_decode($result->IntercambiaDocResult->Documento));
            }
        } else {
            $obj->Output($filename);
        }



        return;
    }
Ejemplo n.º 13
0
 public function formValidate($etapa_id = null)
 {
     $CI =& get_instance();
     $validacion = $this->validacion;
     if ($etapa_id) {
         $regla = new Regla($this->validacion);
         $validacion = $regla->getExpresionParaOutput($etapa_id);
     }
     $CI->form_validation->set_rules($this->nombre, $this->etiqueta, implode('|', $validacion));
 }
Ejemplo n.º 14
0
    protected function display($modo, $dato, $etapa_id)
    {
        if ($etapa_id) {
            $etapa = Doctrine::getTable('Etapa')->find($etapa_id);
            $regla = new Regla($this->valor_default);
            $valor_default = $regla->getExpresionParaOutput($etapa->id);
        } else {
            $valor_default = $this->valor_default;
        }
        $columns = $this->extra->columns;
        $display = '<label class="control-label" for="' . $this->id . '">' . $this->etiqueta . (!in_array('required', $this->validacion) ? ' (Opcional)' : '') . '</label>';
        $display .= '<div class="controls">';
        $display .= '<div class="grid" data-id="' . $this->id . '" style="width: 100%;"></div>';
        $display .= '<input type="hidden" name="' . $this->nombre . '" value=\'' . ($dato ? json_encode($dato->valor) : $valor_default) . '\' />';
        if ($this->ayuda) {
            $display .= '<span class="help-block">' . $this->ayuda . '</span>';
        }
        $display .= '</div>';
        $display .= '
            <script>
                $(document).ready(function(){
                    var mode = "' . $modo . '";
                    var columns = ' . json_encode($columns) . ';

                    var headers = columns.map(function(c){return c.header;});

                    var data;

                    try{
                        data = JSON.parse($("[name=\'' . $this->nombre . '\']").val());
                        data = data.slice(1);
                    }catch(err){
                        data = [
                          new Array(headers.length)
                        ];
                    }


                    $(".grid[data-id=' . $this->id . ']").handsontable({
                      data: data,
                      readOnly: mode=="visualizacion",
                      minSpareRows: 1,
                      rowHeaders: false,
                      colHeaders: headers,
                      columns: columns,
                      contextMenu: true,
                      stretchH: "all",
                      autoWrapRow: true,
                      afterChange: function (change, source) {
                        var rows = this.getData().slice();
                        rows.unshift(headers);
                        var json = JSON.stringify(rows);
                        $("[name=\'' . $this->nombre . '\']").val(json);
                        //var audio = new Audio(base_url+"assets/audio/grillas.mp3");
                        //audio.play();
                      }
                    });
                  });
            </script>
        ';
        return $display;
    }