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(); }
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(); } }
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; }
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; }
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(); }
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; }
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(); }
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; }
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; }
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(); }
public function getPrevisualizacion() { if (!$this->Tarea->previsualizacion) { return ''; } $r = new Regla($this->Tarea->previsualizacion); return $r->getExpresionParaOutput($this->id); }
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; }
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)); }
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; }