Example #1
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();
     }
 }
Example #2
0
 public function ejecutar(Etapa $etapa)
 {
     $regla = new Regla($this->extra->expresion);
     $valor = $regla->evaluar($etapa->id);
     $dato = Doctrine::getTable('DatoSeguimiento')->findOneByNombreAndEtapaId($this->extra->variable, $etapa->id);
     if (!$dato) {
         $dato = new DatoSeguimiento();
     }
     $dato->nombre = $this->extra->variable;
     $dato->valor = $valor;
     $dato->etapa_id = $etapa->id;
     $dato->save();
 }
Example #3
0
 public function cerrar()
 {
     //Si ya fue cerrada, retornamos inmediatamente.
     if (!$this->pendiente) {
         return;
     }
     if ($this->Tarea->almacenar_usuario) {
         $dato = Doctrine::getTable('DatoSeguimiento')->findOneByNombreAndEtapaId($this->Tarea->almacenar_usuario_variable, $this->id);
         if (!$dato) {
             $dato = new DatoSeguimiento();
         }
         $dato->nombre = $this->Tarea->almacenar_usuario_variable;
         $dato->valor = UsuarioSesion::usuario()->id;
         $dato->etapa_id = $this->id;
         $dato->save();
     }
     //Ejecutamos los eventos
     $eventos = Doctrine_Query::create()->from('Evento e')->where('e.tarea_id = ? AND e.instante = ? AND e.paso_id IS NULL', array($this->Tarea->id, 'despues'))->execute();
     foreach ($eventos as $e) {
         $r = new Regla($e->regla);
         if ($r->evaluar($this->id)) {
             $e->Accion->ejecutar($this);
         }
     }
     //Cerramos la etapa
     $this->pendiente = 0;
     $this->ended_at = date('Y-m-d H:i:s');
     $this->save();
 }
Example #4
0
 public function ejecutar_form($etapa_id, $secuencia)
 {
     $etapa = Doctrine::getTable('Etapa')->find($etapa_id);
     if ($etapa->usuario_id != UsuarioSesion::usuario()->id) {
         echo 'Usuario no tiene permisos para ejecutar esta etapa.';
         exit;
     }
     if (!$etapa->pendiente) {
         echo 'Esta etapa ya fue completada';
         exit;
     }
     if (!$etapa->Tarea->activa()) {
         echo 'Esta etapa no se encuentra activa';
         exit;
     }
     if ($etapa->vencida()) {
         echo 'Esta etapa se encuentra vencida';
         exit;
     }
     $paso = $etapa->getPasoEjecutable($secuencia);
     $formulario = $paso->Formulario;
     $modo = $paso->modo;
     $respuesta = new stdClass();
     if ($modo == 'edicion') {
         $validar_formulario = FALSE;
         foreach ($formulario->Campos as $c) {
             //Validamos los campos que no sean readonly y que esten disponibles (que su campo dependiente se cumpla)
             if ($c->isEditableWithCurrentPOST($etapa_id)) {
                 $c->formValidate($etapa->id);
                 $validar_formulario = TRUE;
             }
         }
         if (!$validar_formulario || $this->form_validation->run() == TRUE) {
             //Almacenamos los campos
             foreach ($formulario->Campos as $c) {
                 //Almacenamos los campos que no sean readonly y que esten disponibles (que su campo dependiente se cumpla)
                 if ($c->isEditableWithCurrentPOST($etapa_id)) {
                     $dato = Doctrine::getTable('DatoSeguimiento')->findOneByNombreAndEtapaId($c->nombre, $etapa->id);
                     if (!$dato) {
                         $dato = new DatoSeguimiento();
                     }
                     $dato->nombre = $c->nombre;
                     $dato->valor = $this->input->post($c->nombre) === false ? '' : $this->input->post($c->nombre);
                     if (!is_object($dato->valor) && !is_array($dato->valor)) {
                         if (preg_match('/^\\d{4}[\\/\\-]\\d{2}[\\/\\-]\\d{2}$/', $dato->valor)) {
                             $dato->valor = preg_replace("/^(\\d{4})[\\/\\-](\\d{2})[\\/\\-](\\d{2})/i", "\$3-\$2-\$1", $dato->valor);
                         }
                     }
                     $dato->etapa_id = $etapa->id;
                     $dato->save();
                 }
             }
             $etapa->save();
             $etapa->finalizarPaso($paso);
             $respuesta->validacion = TRUE;
             $qs = $this->input->server('QUERY_STRING');
             $prox_paso = $etapa->getPasoEjecutable($secuencia + 1);
             if (!$prox_paso) {
                 $respuesta->redirect = site_url('etapas/ejecutar_fin/' . $etapa_id) . ($qs ? '?' . $qs : '');
             } else {
                 if ($etapa->Tarea->final && $prox_paso->getReadonly() && end($etapa->getPasosEjecutables()) == $prox_paso) {
                     //Cerrado automatico
                     $etapa->iniciarPaso($prox_paso);
                     $etapa->finalizarPaso($prox_paso);
                     $etapa->avanzar();
                     $respuesta->redirect = site_url('etapas/ver/' . $etapa->id . '/' . (count($etapa->getPasosEjecutables()) - 1));
                 } else {
                     $respuesta->redirect = site_url('etapas/ejecutar/' . $etapa_id . '/' . ($secuencia + 1)) . ($qs ? '?' . $qs : '');
                 }
             }
         } else {
             $respuesta->validacion = FALSE;
             $respuesta->errores = validation_errors();
         }
     } else {
         if ($modo == 'visualizacion') {
             $respuesta->validacion = TRUE;
             $qs = $this->input->server('QUERY_STRING');
             $prox_paso = $etapa->getPasoEjecutable($secuencia + 1);
             if (!$prox_paso) {
                 $respuesta->redirect = site_url('etapas/ejecutar_fin/' . $etapa_id) . ($qs ? '?' . $qs : '');
             } else {
                 if ($etapa->Tarea->final && $prox_paso->getReadonly() && end($etapa->getPasosEjecutables()) == $prox_paso) {
                     //Cerrado automatico
                     $etapa->iniciarPaso($prox_paso);
                     $etapa->finalizarPaso($prox_paso);
                     $etapa->avanzar();
                     $respuesta->redirect = site_url('etapas/ver/' . $etapa->id . '/' . (count($etapa->getPasosEjecutables()) - 1));
                 } else {
                     $respuesta->redirect = site_url('etapas/ejecutar/' . $etapa_id . '/' . ($secuencia + 1)) . ($qs ? '?' . $qs : '');
                 }
             }
         }
     }
     echo json_encode($respuesta);
 }
Example #5
0
    private function displayFirmador($modo, $dato, $etapa_id)
    {
        if (!$etapa_id) {
            return '<p>' . $this->etiqueta . '</p>';
        }
        $etapa = Doctrine::getTable('Etapa')->find($etapa_id);
        if (!$dato) {
            //Generamos el documento, ya que no se ha generado
            $file = $this->Documento->generar($etapa->id);
            $dato = new DatoSeguimiento();
            $dato->nombre = $this->nombre;
            $dato->valor = $file->filename;
            $dato->etapa_id = $etapa->id;
            $dato->save();
        } else {
            $file = Doctrine::getTable('File')->findOneByTipoAndFilename('documento', $dato->valor);
            if ($etapa->pendiente && isset($this->extra->regenerar) && $this->extra->regenerar) {
                $file->delete();
                $file = $this->Documento->generar($etapa->id);
                $dato->valor = $file->filename;
                $dato->save();
            }
        }
        $display = '<p>' . $this->etiqueta . '</p>';
        $display .= '<div id="exito" class="alert alert-success" style="display: none;">Documento fue firmado con éxito.</div>';
        $display .= '<p><a class="btn btn-info" href="' . site_url('documentos/get/' . $dato->valor) . '?id=' . $file->id . '&amp;token=' . $file->llave . '"><i class="icon-search icon-white"></i> Previsualizar el documento</a></p>';
        $isMac = stripos($_SERVER['HTTP_USER_AGENT'], 'macintosh') !== false;
        if ($isMac) {
            $display .= '
        <script>
            function checkPasswordToken(){
                var passwordToken = $("#passwordTokenValue").val();
                        var value = document.SignerApplet.hasPK(passwordToken);
                        if (value === "true") {
                            
                        }
                        else {
                            alert("No se ha detectado Token, por favor inserte su Token de firma o la password ingresada es la incorrecta");
                        }
            }
        </script>
        <div id="password">
            <label>Contraseña del Token:</label> <input id="passwordTokenValue" type="password" />
            <button type="button" class="btn" onclick="checkPasswordToken()">Desbloquear Token</button>
        </div><br />';
        }
        $display .= '
            <script>
                function firmarConToken(){
                    var resultadoApplet = document.SignerApplet.signDocuments();
                    var status=$(resultadoApplet).find("documento").attr("RESULTADO");
                    if (status==="true") {
                        $("#exito").show();
                        $("#password").hide();
                        $("#firmaDiv").hide();
                        alert("Documento firmado con éxito.");     
                    }else{
                        alert("Hubo un error al intentar firmar el documento.");
                    }
                }
                function progreso(tot, eje, documento){
                
                }
            </script>
            <div id="firmaDiv">
            <label>Seleccione la firma</label>      
            <div style="float: left;">
            <applet code="' . ($isMac ? 'cl.agile.pdf.applet.SignerAppletMinSegPressMAC' : 'cl.agile.pdf.applet.SignerAppletMinSegPress') . '" width="350" height="25" name="SignerApplet">
                <param name="jnlp_href" value="' . base_url() . 'assets/applets/signer/' . ($isMac ? 'SignerApplet_0_7_mac.jnlp' : 'SignerApplet_0_9_win.jnlp') . '" />
                <param name="documentosPdf" value="' . htmlspecialchars('<PorFirmar><documento id=\'' . $file->id . '\' token=\'' . $file->llave_firma . '\' comentario=\'Firmado Digitalmente\' lugar=\'Santiago\' tipoFirma=\'TIPO_DOC\'/></PorFirmar>') . '" />
                <param name="urlBaseGet" value="' . site_url('documentos/firma_get') . '" />
                <param name="urlBasePost" value="' . site_url('documentos/firma_post') . '" />
                <param name="cLetra" value="000000" />
                <param name="cFondo" value="FFFFFF" />
            </applet>
            </div>
            <div><button type="button" class="btn btn-success" onclick="firmarConToken()"><i class="icon-pencil icon-white"></i> Firmar Documento</button></div>

        </div>';
        return $display;
    }