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(); } }
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; }
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 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(); }
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; }
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; }
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 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; }
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(); }
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; }
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; }