<?php
class ConsultaSubeActualizaSolicitud extends Consulta
{
	public function __construct()
	{
		parent::__construct();
		$this->setConsultaDeActualizacion(true);
		$this->setParametrosPorPrepare(true);
	}

	protected function getSistemasCompatibles()
	{
		return array('guarani' => true);
	}

	protected function armarDefinicion()
	{
		$this->setDefinicion(0, 'unidad_academica', 'UnidadAcademica');
		$this->setDefinicion(1, 'tid', 'Hash');
		$this->setDefinicion(null, 'respuesta', 'RespuestaSube');
		$this->setDefinicion(null, 'respuesta_descripcion', 'Texto');
	}

	protected function evaluaRespuestaSube($unValor)
	{
		/*
		  Posibles respuestas:
		  'ACEPTADA' : Solicitud aceptada
		  'RECHAZADA' : Solicitud rechazada
		 */
		return in_array($unValor, array('ACEPTADA', 'RECHAZADA'));
	}

	protected function evaluaTexto($unValor)
	{
		if (parent::evaluaTexto($unValor)) {
			$validos = array('_', ' ', '-');
			return ctype_alnum(str_replace($validos, '', $unValor));
		}
		return false;
	}

	public function getParametrosQuery()
	{
		global $bdGuarani;
		$params = $this->getParametros();
		$ua = $this->getParametro('unidad_academica');
		if ($bdGuarani[$ua]['tipo_conexion'] == 'pgsql') {
			unset($params['unidad_academica']);
		}
		return $params;
	}
	
	protected function setConsulta()
	{
		global $bdGuarani;
		/*
		 * Armo la consulta dependiendo si es de postgres o de informix
		 */

		$ua = $this->getParametro('unidad_academica');
		if ($bdGuarani[$ua]['tipo_conexion'] == 'pgsql') {
			$consulta = "UPDATE mbe_solicitudes SET respuesta = :respuesta, respuesta_fecha = CURRENT_TIMESTAMP, respuesta_desc = :respuesta_descripcion, procesado = 'S' WHERE hash = :tid ; ";
			
		} else {
			$consulta = "UPDATE mbe_solicitudes SET respuesta = :respuesta, respuesta_fecha = CURRENT, respuesta_desc = :respuesta_descripcion, procesado = 'S' WHERE unidad_academica = :unidad_academica and hash = :tid ; ";
		}
		$this->consulta = $consulta;
	}

	public function setParametros($params)
	{
		parent::setParametros($params);
		$this->setUas($params[0]);
	}

	public function obtenerRespuesta()
	{
		if (!$this->existeSolicitud()) {
			throw new Exception("No existe una solicitud con el tid informado");
		}
		$respuesta = parent::obtenerRespuesta();
		unset($respuesta[0]['ua']);

		return $respuesta[0];
	}

	private function existeSolicitud()
	{
		$ultimos_accesos = new ConsultaSQLPrepare("SELECT count(*) as cant FROM mbe_solicitudes WHERE hash = :tid", $this->getParametro('unidad_academica'));
		$ultimos_accesos->setParametros(array('tid' => $this->getParametro('tid')));
		$existe_solicitud = $ultimos_accesos->obtenerRespuesta()[0]['cant'];
		return ($existe_solicitud > 0);
	}

}