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();
     }
 }
Exemple #3
0
 public function evaluarRegla($etapa_id)
 {
     if ($this->tipo == 'secuencial' || $this->tipo == 'paralelo' || $this->tipo == 'union') {
         return true;
     }
     $regla = new Regla($this->regla);
     return $regla->evaluar($etapa_id);
 }
 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;
 }
 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;
 }
Exemple #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;
    }
Exemple #7
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();
 }
 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();
 }
    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();
    }
Exemple #10
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;
 }
Exemple #11
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;
 }
Exemple #12
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();
 }
Exemple #13
0
 public function getPrevisualizacion()
 {
     if (!$this->Tarea->previsualizacion) {
         return '';
     }
     $r = new Regla($this->Tarea->previsualizacion);
     return $r->getExpresionParaOutput($this->id);
 }
Exemple #14
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;
    }
Exemple #15
0
 public static function aplicarReglas(array $reglas, VO $obj, $cantidad = null, $id_unidad = null)
 {
     //Logger::log("aplicando reglas de tarifa");
     //Logger::log( sizeof($reglas) . " reglas.");
     //Logger::log( $cantidad . " unidades de idunidad="  .$id_unidad );
     $precio_base = 0;
     if (!$obj instanceof Paquete) {
         if ($obj->getMetodoCosteo() == "costo") {
             $precio_base = $obj->getCostoEstandar();
         } else {
             if ($obj->getMetodoCosteo() == "precio") {
                 $precio_base = $obj->getPrecio();
             } else {
                 $precio_base = $obj->getPrecio();
                 //throw new Exception("El producto o servicio tiene un metodo de costeo invalido", 901);
             }
         }
     } else {
         $precio_base = $obj->getPrecio();
     }
     $precio_final = 0;
     $regla = new Regla();
     foreach ($reglas as $regla) {
         if (!$regla instanceof VO) {
             Logger::error("La regla recibida no es un VO valido");
             throw new Exception("La regla recibida no es un VO valido");
         }
         Logger::log("procesando regla..." . $regla->getIdRegla());
         //Si la regla especifica que actuara sobre algun tipo especial, se evalua si el objeto recibido entra en esa clasificacion
         if (!is_null($regla->getIdClasificacionProducto()) || !is_null($regla->getIdClasificacionServicio()) || !is_null($regla->getIdPaquete()) || !is_null($regla->getIdProducto()) || !is_null($regla->getIdRegla()) || !is_null($regla->getIdServicio())) {
             $encontrado = false;
             //Bandera que indicara si se encontro que la regla es aplicable o no
             //Si la regla especifica una clasificacion de producto y el objeto es un producto,
             //entonces se busca la clasificacion especificada por la regla en las clasificaciones del producto.
             //Si es encontrada se cambia a verdadero la bandera.
             if (!is_null($regla->getIdClasificacionProducto()) && $obj instanceof Producto) {
                 Logger::log("Si la regla especifica una clasificacion de producto y el objeto es un producto");
                 $clasificaciones_producto = ProductoClasificacionDAO::search(new ProductoClasificacion(array("id_producto" => $obj->getIdProducto())));
                 foreach ($clasificaciones_producto as $clasificacion_producto) {
                     if ($clasificacion_producto->getIdClasificacionProducto() == $regla->getIdClasificacionProducto()) {
                         $encontrado = true;
                         break;
                     }
                 }
             }
             //Si aun no esta activa la bandera, la regla especifica una clasificacion de servicio y el objeto es un servicio,
             //entonces se busca la clasificacion esecificada por la regla en las clasificaciones del servicio.
             //Si es encontrada se cambia a verdadero la bandera
             if (!$encontrado && !is_null($regla->getIdClasificacionServicio()) && $obj instanceof Servicio) {
                 Logger::log("la regla especifica una clasificacion de servicio y el objeto es un servicio,");
                 $clasificaciones_servicio = ServicioClasificacionDAO::search(new ServicioClasificacion(array("id_servicio" => $obj->getIdServicio())));
                 foreach ($clasificaciones_servicio as $clasificacion_servicio) {
                     if ($clasificacion_servicio->getIdClasificacionServicio() == $regla->getIdClasificacionServicio()) {
                         $encontrado = true;
                         break;
                     }
                 }
             }
             //Si aun no esta activa la bandera, la regla especifica un producto y el objeto es un producto,
             //entonces se compara el id especificado por la regla con el id del producto. Si son iguales,
             //verifica si la regla especifica una unidad. De ser asi, verifica que la unidad especificada
             //por la regla sea igual a la obtenida, si lo son, entonces se cambia la bandera a verdadero.
             //Si no se especifica una unidad en la regla, entonces se cambia la bandera a verdadero
             if (!$encontrado && !is_null($regla->getIdProducto()) && $obj instanceof Producto) {
                 Logger::log("la regla especifica un producto y el objeto es un producto");
                 if ($obj->getIdProducto() == $regla->getIdProducto()) {
                     if (!is_null($regla->getIdUnidad())) {
                         if ($regla->getIdUnidad() == $id_unidad) {
                             $encontrado = true;
                         }
                     } else {
                         $encontrado = true;
                     }
                 }
             }
             //Si la bandera aun no esta activa, la regla especifica un servicio y el objeto es un servicio,
             //entonces se verifica que el id especificado por la regla sea igual al del servicio. Si son
             //iguales entonces se cambia la bandera a verdadero.
             if (!$encontrado && !is_null($regla->getIdServicio()) && $obj instanceof Servicio) {
                 Logger::log("la regla especifica un servicio y el objeto es un servicio,");
                 if ($obj->getIdServicio() == $regla->getIdServicio()) {
                     $encontrado = true;
                 }
             }
             //Si la bandera aun no esta activa, la regla especifica un paquete y el objeto es un paquete,
             //entonces se verifica que el id especificado por al regla sea igual al del paquete. Si son
             //iguales entonces se cambia la bandera a verdadero.
             if (!$encontrado && !is_null($regla->getIdPaquete()) && $obj instanceof Paquete) {
                 Logger::log("la regla especifica un paquete y el objeto es un paquete,");
                 if ($obj->getIdPaquete() == $regla->getIdPaquete()) {
                     $encontrado = true;
                 }
             }
             if ($encontrado) {
                 Logger::log("Encontre un filtro especifico, saliendo de este pedo... ");
                 continue;
             }
         }
         //if
         Logger::log("No encontre un filtro especifico, continuando... ");
         Logger::log("precio_final = precio_base * ( 1 +  (regla->getPorcentajeUtilidad()/100 ));");
         $precio_final = $precio_base * (1 + $regla->getPorcentajeUtilidad() / 100);
         Logger::log("{$precio_final} = {$precio_base} * ( 1 +  (" . $regla->getPorcentajeUtilidad() . "/100 ));");
         $metodo_redondeo = $regla->getMetodoRedondeo();
         /*
          * Para saber el precio final despues del redondeo se utilizan dos valores de redondeo,
          * un redoden superior y un redonde inferior. Por ejemplo, si el valor de precio final
          * es 57 y el metodo de redondeo es 10, existen dos posibles redondeos, 50 y 60, siendo 50
          * el redondeo inferior y 60 el redondeo superior.
          * 
          * Para calcula estos redondeos se usa la siguiente formula
          * 
          *    residuo = precio_final % metodo_redondeo
          * 
          * El residuo es lo que le sobra al precio final para ser un multiplo del metodo de redondeo,
          * entonces el redondeo inferior siempre sera el precio final menos el residuo. En nuestro ejemplo
          * 
          *   precio_final - residuo = 57 - 7 = 50
          * 
          * El redondeo superior es el precio final mas la resta del metodo de redondeo con el residuo. En
          * nuestro ejemplo
          * 
          *  precio_final + ( metodo_redondeo - residuo) = 57 + ( 10 - 7) = 60
          */
         if ($metodo_redondeo > 0) {
             $redondeo_superior = $precio_final + $metodo_redondeo - $precio_final % $metodo_redondeo;
             $redondeo_inferior = $precio_final - $precio_final % $metodo_redondeo;
             if ($redondeo_superior - $precio_final < $precio_final - $redondeo_inferior) {
                 $precio_final = $redondeo_superior;
             } else {
                 $precio_final = $redondeo_inferior;
             }
         }
         //Si el precio final es menor que el margen minimo y el margen minimo esta especificado
         //( No es cero), entonces se sobreescribe el precio final con el del margen minimo
         $precio_final += $regla->getUtilidadNeta();
         if ($precio_final < $regla->getMargenMin() && $regla->getMargenMin() != 0) {
             $precio_final = $regla->getMargenMin();
         }
         //Si el precio final es mayor que el margen maximo y el margen maximo esta especificado
         //( No es cero), entonces se sobreescribe el precio final con el del margen maximo
         if ($precio_final > $regla->getMargenMax() && $regla->getMargenMax() != 0) {
             $precio_final = $regla->getMargenMax();
         }
         $precio_base = $precio_final;
     }
     //Logger::log("El precio despues de todas las reglas es ".$precio_base);
     return $precio_base;
 }
Exemple #16
0
 public function getUsuariosFromGruposDeUsuarioDeCuenta($etapa_id)
 {
     $query = Doctrine_Query::create()->from('Usuario u, u.GruposUsuarios g, g.Cuenta c')->where('u.vacaciones = 0')->andWhere('c.id = ?', $this->Proceso->Cuenta->id);
     if ($this->acceso_modo == 'publico') {
     } else {
         if ($this->acceso_modo == 'registrados') {
             $query->andWhere('u.registrado = 1');
         } else {
             if ($this->acceso_modo == 'claveunica') {
                 $query->andWhere('u.open_id = 1');
             } else {
                 //Convertimos las variables e ids, separados por coma, en una arreglo de grupos de usuarios.
                 $grupos_arr = array(-1);
                 $grupos = explode(',', $this->grupos_usuarios);
                 foreach ($grupos as $key => $g) {
                     $r = new Regla($g);
                     $var = $r->evaluar($etapa_id);
                     if (is_numeric($var)) {
                         $grupos_arr[] = $var;
                     } else {
                         if (is_array($var)) {
                             foreach ($var as $v) {
                                 if (is_numeric($v)) {
                                     $grupos_arr[] = $v;
                                 }
                             }
                         }
                     }
                 }
                 $query->andWhereIn('g.id', $grupos_arr);
             }
         }
     }
     return $query->execute();
 }
Exemple #17
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;
    }
Exemple #18
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));
 }
 /**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  * @param integer $id the ID of the model to be loaded
  * @return Regla the loaded model
  * @throws CHttpException
  */
 public function loadModel($id)
 {
     $model = Regla::model()->findByPk($id);
     if ($model === null) {
         throw new CHttpException(404, 'The requested page does not exist.');
     }
     return $model;
 }